<?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>84814</bug_id>
          
          <creation_ts>2012-04-24 18:07:06 -0700</creation_ts>
          <short_desc>Rename CSSStyleSelector files to StyleResolver.</short_desc>
          <delta_ts>2012-04-25 09:51: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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>42764</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexis Menard (darktears)">menard</reporter>
          <assigned_to name="Alexis Menard (darktears)">menard</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>japhet</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>rakuco</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>609335</commentid>
    <comment_count>0</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-04-24 18:07:06 -0700</bug_when>
    <thetext>Rename CSSStyleSelector files to StyleResolver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609346</commentid>
    <comment_count>1</comment_count>
      <attachid>138710</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-04-24 18:20:35 -0700</bug_when>
    <thetext>Created attachment 138710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609353</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-24 18:24:04 -0700</bug_when>
    <thetext>Attachment 138710 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/css/StyleResolver.h:94:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/css/StyleResolver.h:122:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/css/StyleResolver.cpp:1506:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1577:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1639:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1759:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1806:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:2164:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:2169:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4241:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4257:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4265:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4275:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5340:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/css/StyleResolver.cpp:5341:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/css/StyleResolver.cpp:5457:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5534:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5753:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 18 in 73 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>609354</commentid>
    <comment_count>3</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-04-24 18:25:17 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 138710 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
&gt; Source/WebCore/css/StyleResolver.h:94:  More than one command on the same line  [whitespace/newline] [4]
&gt; Source/WebCore/css/StyleResolver.h:122:  More than one command on the same line  [whitespace/newline] [4]
&gt; Source/WebCore/css/StyleResolver.cpp:1506:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:1577:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:1639:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:1759:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:1806:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:2164:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:2169:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:4241:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:4257:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:4265:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:4275:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:5340:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; Source/WebCore/css/StyleResolver.cpp:5341:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; Source/WebCore/css/StyleResolver.cpp:5457:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:5534:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Source/WebCore/css/StyleResolver.cpp:5753:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
&gt; Total errors found: 18 in 73 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

We can ignore that I believe. I reported a bug already for &quot;Local variables should never be PassRefPtr...&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609383</commentid>
    <comment_count>4</comment_count>
      <attachid>138710</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-24 19:09:34 -0700</bug_when>
    <thetext>Comment on attachment 138710
Patch

Attachment 138710 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12522376</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609390</commentid>
    <comment_count>5</comment_count>
      <attachid>138719</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-04-24 19:25:07 -0700</bug_when>
    <thetext>Created attachment 138719
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609393</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-24 19:29:15 -0700</bug_when>
    <thetext>Attachment 138719 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/css/StyleResolver.h:94:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/css/StyleResolver.h:122:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/css/StyleResolver.cpp:1506:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1577:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1639:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1759:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1806:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:2164:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:2169:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4241:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4257:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4265:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4275:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5340:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/css/StyleResolver.cpp:5341:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/css/StyleResolver.cpp:5457:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5534:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5753:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 18 in 73 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>609405</commentid>
    <comment_count>7</comment_count>
      <attachid>138719</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-24 19:58:53 -0700</bug_when>
    <thetext>Comment on attachment 138719
Patch

I don’t know enough about how gitsvn works to know if this will preserve the file history or not. At first glance, it looks like it will not. If it was preserving file history correctly, then I would have said review+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609655</commentid>
    <comment_count>8</comment_count>
      <attachid>138786</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-04-25 05:13:32 -0700</bug_when>
    <thetext>Created attachment 138786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609658</commentid>
    <comment_count>9</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-04-25 05:14:36 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 138719 [details])
&gt; I don’t know enough about how gitsvn works to know if this will preserve the file history or not. At first glance, it looks like it will not. If it was preserving file history correctly, then I would have said review+.

I re-uploaded the diff with svn and made sure I did svn mv. But I think at the end it was the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609659</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-25 05:16:42 -0700</bug_when>
    <thetext>Attachment 138786 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/css/StyleResolver.h:94:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/css/StyleResolver.h:122:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/css/StyleResolver.cpp:1506:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1577:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1639:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1759:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1806:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:2164:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:2169:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4241:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4257:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4265:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4275:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5340:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/css/StyleResolver.cpp:5341:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/css/StyleResolver.cpp:5457:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5534:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5753:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 18 in 73 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>609680</commentid>
    <comment_count>11</comment_count>
      <attachid>138786</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-04-25 05:56:13 -0700</bug_when>
    <thetext>Comment on attachment 138786
Patch

Attachment 138786 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12523588</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609724</commentid>
    <comment_count>12</comment_count>
      <attachid>138804</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-04-25 07:10:54 -0700</bug_when>
    <thetext>Created attachment 138804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609726</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-25 07:15:01 -0700</bug_when>
    <thetext>Attachment 138804 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/css/StyleResolver.h:94:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/css/StyleResolver.h:122:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/css/StyleResolver.cpp:1506:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1577:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1639:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1759:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:1806:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:2164:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:2169:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4241:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4257:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4265:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:4275:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5340:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/css/StyleResolver.cpp:5341:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/css/StyleResolver.cpp:5457:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5534:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/css/StyleResolver.cpp:5753:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 18 in 73 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>609806</commentid>
    <comment_count>14</comment_count>
      <attachid>138804</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-25 08:48:32 -0700</bug_when>
    <thetext>Comment on attachment 138804
Patch

Clearing flags on attachment: 138804

Committed r115215: &lt;http://trac.webkit.org/changeset/115215&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609807</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-25 08:48:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609846</commentid>
    <comment_count>16</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-04-25 09:51:45 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; All reviewed patches have been landed.  Closing bug.

Build fix on Windows : http://trac.webkit.org/changeset/115221</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138710</attachid>
            <date>2012-04-24 18:20:35 -0700</date>
            <delta_ts>2012-04-24 19:24:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84814-20120424222031.patch</filename>
            <type>text/plain</type>
            <size>617568</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmM2NWY4NmVkNTIzNTNk
MzIwMjc2NDQ2ZWEzNTQ3MGI3NzIzZjYwMC4uYzNhMGYwOTZmMmEwZmRmZGM4MjUzMmU5YTA4OTNi
ZjE3ZWEzOTBhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwMiBAQAorMjAxMi0wNC0yNCAgQWxl
eGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5h
bWUgQ1NTU3R5bGVTZWxlY3RvciBmaWxlcyB0byBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ4MTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgQ1NTU3R5bGVTZWxlY3Rv
ciBmaWxlcyB0byBtYXRjaCB0aGUgbmV3IGNsYXNzIG5hbWUgU3R5bGVSZXNvbHZlci4KKyAgICAg
ICAgVXBkYXRlIHRoZSBpbmNsdWRlcyBhbGwgb3ZlciB0aGUgY29kZSBiYXNlIHRvIHRoZSBuZXcg
bmFtZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgOiByZW5hbWluZyBmaWxlcywgbm8gYmVoYXZp
b3IgY2hhbmdlcyBleHBlY3RlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGNzcy9DU1NBbGxJbk9uZS5jcHA6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUu
Y3BwOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAqIGNzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5j
cHA6CisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcDoKKyAgICAgICAgKiBjc3Mv
U1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6
CisgICAgICAgICogY3NzL1N0eWxlTWVkaWEuY3BwOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29s
dmVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUnVsZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZURhdGE6OnBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRh
OjpydWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpzZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpSdWxlRGF0YTo6aGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlJ1bGVEYXRhOjpoYXNNdWx0aXBhcnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpSdWxlRGF0YTo6aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVs
ZUhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmNvbnRhaW5zVW5jb21tb25BdHRy
aWJ1dGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6c3BlY2lmaWNpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmxpbmtNYXRjaFR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZURhdGE6Omhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZURhdGE6OmlzSW5SZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1
bGVEYXRhOjpkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKToKKyAgICAgICAgKFNh
bWVTaXplQXNSdWxlRGF0YSk6CisgICAgICAgIChSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJ1bGVTZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpkaXNhYmxlQXV0
b1Nocmlua1RvRml0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmZlYXR1cmVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmlkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVs
ZVNldDo6Y2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0Ojp0YWdSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpzaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6bGlua1BzZXVkb0NsYXNzUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UnVsZVNldDo6Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVTZXQ6OnVuaXZlcnNhbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVT
ZXQ6OnBhZ2VSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpSdWxlU2V0U2VsZWN0
b3JQYWlyOjpSdWxlU2V0U2VsZWN0b3JQYWlyKToKKyAgICAgICAgKFJ1bGVTZXRTZWxlY3RvclBh
aXIpOgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5FdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnByaW50
RXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0VG9SaWdodERlY2xhcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6Om1ha2VSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpkZXRlcm1pbmVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxl
U2V0Rm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0
aG9yU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0dXBT
Y29wZVN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnB1c2hTY29wZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwb3BTY29wZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudFNoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6YWRkS2V5ZnJhbWVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjp+U3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6RmVhdHVyZXM6OkZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OkZlYXR1cmVzOjp+RmVhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6RmVhdHVyZXM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpGZWF0dXJlczo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVQVNoZWV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmxvYWRGdWxsRGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmxvYWRTaW1wbGVEZWZhdWx0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZFZpZXdTb3Vy
Y2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZE1hdGNoZWRQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZEVsZW1lbnRTdHls
ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1h
dGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaFVzZXJSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpt
YXRjaFVBUnVsZXMpOgorICAgICAgICAoTWF0Y2hpbmdVQVJ1bGVzU2NvcGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Ok1hdGNoaW5nVUFSdWxlc1Njb3BlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1hdGNoaW5nVUFSdWxlc1Njb3BlOjp+TWF0Y2hpbmdVQVJ1bGVzU2Nv
cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdV
QVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmguCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKE1lZGlhUXVlcnlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFRdWVyeVJlc3VsdDo6TWVkaWFRdWVyeVJlc3VsdCk6CisgICAgICAgIChTdHlsZVJlc29sdmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmb250RGVzY3JpcHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50Rm9udERlc2NyaXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnREZXNjcmlwdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRab29tKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEVmZmVjdGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6c2V0VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aGFzUGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpwdXNoU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cG9w
U2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0U3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Zm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1c2VzU2libGluZ1J1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnVzZXNGaXJzdExpbmVSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjp1c2VzQmVmb3JlQWZ0ZXJSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjp1c2VzTGlua1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OlJ1bGVGZWF0dXJlOjpSdWxlRmVhdHVyZSk6CisgICAgICAgIChSdWxlRmVhdHVy
ZSk6CisgICAgICAgIChGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjphZGRNYXRjaGVkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRj
aFJhbmdlczo6TWF0Y2hSYW5nZXMpOgorICAgICAgICAoTWF0Y2hSYW5nZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXM6Ok1hdGNoZWRQcm9wZXJ0
aWVzKToKKyAgICAgICAgKE1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0OjpNYXRjaFJlc3VsdCk6CisgICAgICAgIChNYXRjaFJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaE9wdGlvbnM6Ok1h
dGNoT3B0aW9ucyk6CisgICAgICAgIChNYXRjaE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aXNSaWdodFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVOb3RZZXRBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAo
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c2NvcGVTdGFja0lzQ29uc2lzdGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpTY29wZVN0YWNrRnJhbWU6OlNjb3BlU3RhY2tGcmFtZSk6CisgICAgICAgIChTY29w
ZVN0YWNrRnJhbWUpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAg
ICogZG9tL1NoYWRvd1RyZWUuY3BwOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAg
ICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZFBhZ2Uu
Y3BwOgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hU
TUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1s
L1ZhbGlkYXRpb25NZXNzYWdlLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAqIGxvYWRlci9MaW5rTG9h
ZGVyLmNwcDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgICogcGFnZS9G
cmFtZVZpZXcuY3BwOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgICogcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2Jp
bGUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclJlZ2lvbi5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5j
cHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJ
bWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRl
ZERhdGEuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5j
cHA6CisgICAgICAgICogc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHA6CisgICAgICAgICogc3Zn
L1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwOgor
ICAgICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdN
YXNrRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorCiAyMDEy
LTA0LTI0ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtj
aHJvbWl1bV0gSW1hZ2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDE5NTNkNWEyYmRmM2I0NmFjODk5NjM2MTI3ZjFj
ODRmY2YwNDExZTUuLjRmNjE0YzYxYWQ0ZmVjMDBiZGJhNTQ5YTFhMWFjMDUxN2ZkODkyMDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDQtMjQgIEFs
ZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVu
YW1lIENTU1N0eWxlU2VsZWN0b3IgZmlsZXMgdG8gU3R5bGVSZXNvbHZlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0ODE0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIENTU1N0eWxlU2VsZWN0
b3IgZmlsZXMgdG8gbWF0Y2ggdGhlIG5ldyBjbGFzcyBuYW1lIFN0eWxlUmVzb2x2ZXIuCisgICAg
ICAgIFVwZGF0ZSB0aGUgaW5jbHVkZXMgYWxsIG92ZXIgdGhlIGNvZGUgYmFzZSB0byB0aGUgbmV3
IG5hbWUuCisKKyAgICAgICAgKiBzcmMvQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwOgorICAg
ICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisKIDIwMTItMDQtMjQgIERhbmEgSmFuc2VucyAg
PGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBJbWFnZSBtYXNrcyBh
cmUgY29uc2lkZXJlZCBvcGFxdWUgaW5jb3JyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggOTg1NTM0
NzY2MTk0YmU1ODNhNmJjNDhmNDJmNjZhNThhYWU3MjZkMC4uYmE4MDEyMTdkN2M1YjEwYjRmZTRi
ZjlhMTY3YjE5NGE2MGNkMDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOCBAQAogMjAx
Mi0wNC0yNCAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAor
ICAgICAgICBSZW5hbWUgQ1NTU3R5bGVTZWxlY3RvciBmaWxlcyB0byBTdHlsZVJlc29sdmVyLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ4MTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgQ1NT
U3R5bGVTZWxlY3RvciBmaWxlcyB0byBtYXRjaCB0aGUgbmV3IGNsYXNzIG5hbWUgU3R5bGVSZXNv
bHZlci4KKyAgICAgICAgVXBkYXRlIHRoZSBpbmNsdWRlcyBhbGwgb3ZlciB0aGUgY29kZSBiYXNl
IHRvIHRoZSBuZXcgbmFtZS4KKworICAgICAgICAqIEFwaS9xd2ViZWxlbWVudC5jcHA6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwOgorCisyMDEyLTA0LTI0
ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgorCiAgICAgICAg
IFJlcGxhY2Ugb2NjdXJlbmNlcyBvZiBzdHlsZSBzZWxlY3RvciBmcm9tIHZhcmlhYmxlcyBhbmQg
bWV0aG9kcyBuYW1lcyBieSBzdHlsZSByZXNvbHZlci4KICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NzY1CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NWExYWQ0MjA1Y2Y3MWFlYjZjYThjZGY0NWRhOTU4MzBjZDUxYzdiNC4uZTZjNGVhZmMzNTY0MmRm
NTZkYjgyYjZlM2JhNmZjZDk3ZjY3ZTkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTQ4Myw3
ICs0ODMsNiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL0NTU1NlbGVjdG9yTGlzdC5j
cHAKICAgICBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKICAgICBjc3MvQ1NTU3R5bGVSdWxl
LmNwcAotICAgIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAogICAgIGNzcy9DU1NTdHlsZVNoZWV0
LmNwcAogICAgIGNzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcAogICAgIGNzcy9DU1NVbmlj
b2RlUmFuZ2VWYWx1ZS5jcHAKQEAgLTUxMCw2ICs1MDksNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgY3NzL1N0eWxlTWVkaWEuY3BwCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCiAg
ICAgY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwCisgICAgY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCiAgICAgY3NzL1N0eWxlUnVsZS5jcHAKICAgICBjc3MvU3R5bGVTaGVldC5jcHAKICAgICBj
c3MvU3R5bGVTaGVldExpc3QuY3BwCkBAIC0yNTQ5LDcgKzI1NDksNyBAQCBBRERfQ1VTVE9NX0NP
TU1BTkQoCiAgICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0gLUkke1dFQkNPUkVfRElSfS9i
aW5kaW5ncy9zY3JpcHRzICR7V0VCQ09SRV9ESVJ9L2Nzcy9tYWtlLWNzcy1maWxlLWFycmF5cy5w
bCAtLWRlZmluZXMgIiR7RkVBVFVSRV9ERUZJTkVTX1dJVEhfU1BBQ0VfU0VQQVJBVE9SfSIgLS1w
cmVwcm9jZXNzb3IgIiR7Q09ERV9HRU5FUkFUT1JfUFJFUFJPQ0VTU09SfSIgJHtERVJJVkVEX1NP
VVJDRVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFN0eWxlU2hlZXRzLmggJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgJHtXZWJDb3JlX1VT
RVJfQUdFTlRfU1RZTEVfU0hFRVRTfQogICAgIFZFUkJBVElNKQogTElTVChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9Vc2VyQWdlbnRTdHlsZVNo
ZWV0c0RhdGEuY3BwKQotQUREX1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQRU5ERU5DSUVTKCR7
V0VCQ09SRV9ESVJ9L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBVc2VyQWdlbnRTdHlsZVNoZWV0
c0RhdGEuY3BwIFVzZXJBZ2VudFN0eWxlU2hlZXRzLmgpCitBRERfU09VUkNFX1dFQkNPUkVfREVS
SVZFRF9ERVBFTkRFTkNJRVMoJHtXRUJDT1JFX0RJUn0vY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIFVz
ZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgVXNlckFnZW50U3R5bGVTaGVldHMuaCkKIAogCiBH
RU5FUkFURV9HUkFNTUFSKGNzc3l5ICR7V0VCQ09SRV9ESVJ9L2Nzcy9DU1NHcmFtbWFyLnkgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0NTU0dyYW1tYXIuaCAke0RFUklWRURfU09VUkNF
U19XRUJDT1JFX0RJUn0vQ1NTR3JhbW1hci5jcHApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCBjZTliZGE3YjFmZGEwMWU2MTRmYzhmMWY4NDhhNzhhY2FmMWY0MGU0Li4wZmVhMzY3
MDgyNmE1ZTA2MmM0MTQwYjU0N2I3MjU5YTA5MGNjODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTE2NDIsOCArMTY0Miw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlUnVsZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUu
aCBcCi0JU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTaGVldC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmggXAog
CVNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBcCkBAIC0xNzAw
LDYgKzE2OTgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVByb3BlcnR5U2V0LmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2hv
cnRoYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQu
aCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxl
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVTaGVldC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMGNhYWEyNzgwMTU1M2IyMTQ1
OGZjOTE5MGJmOGRlZjc1MWY0Y2Q3Ni4uMzcxYTk4ZmMxOTdjODViYjNkMTg0ZDA1MzQ5YzYyYmJm
YmE1YjkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC00NjMsNyArNDYzLDYgQEAgU09VUkNFUyArPSBcCiAg
ICAgY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcCBcCiAgICAgY3NzL0NTU1N0eWxlRGVjbGFy
YXRpb24uY3BwIFwKICAgICBjc3MvQ1NTU3R5bGVSdWxlLmNwcCBcCi0gICAgY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwIFwKICAgICBjc3MvQ1NTU3R5bGVTaGVldC5jcHAgXAogICAgIGNzcy9DU1NU
aW1pbmdGdW5jdGlvblZhbHVlLmNwcCBcCiAgICAgY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmNw
cCBcCkBAIC00OTAsNiArNDg5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgY3NzL1N0eWxlTWVkaWEu
Y3BwIFwKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAgXAogICAgIGNzcy9TdHlsZVByb3Bl
cnR5U2hvcnRoYW5kLmNwcCBcCisgICAgY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIFwKICAgICBjc3Mv
U3R5bGVSdWxlLmNwcCBcCiAgICAgY3NzL1N0eWxlU2hlZXQuY3BwIFwKICAgICBjc3MvU3R5bGVT
aGVldExpc3QuY3BwIFwKQEAgLTE2MjAsNyArMTYyMCw2IEBAIEhFQURFUlMgKz0gXAogICAgIGNz
cy9DU1NTZWxlY3Rvckxpc3QuaCBcCiAgICAgY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaCBcCiAg
ICAgY3NzL0NTU1N0eWxlUnVsZS5oIFwKLSAgICBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIFwKICAg
ICBjc3MvQ1NTU3R5bGVTaGVldC5oIFwKICAgICBjc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5o
IFwKICAgICBjc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCBcCkBAIC0xNjQ3LDYgKzE2NDYsNyBA
QCBIRUFERVJTICs9IFwKICAgICBjc3MvU3R5bGVCdWlsZGVyLmggXAogICAgIGNzcy9TdHlsZVBy
b3BlcnR5U2V0LmggXAogICAgIGNzcy9TdHlsZVByb3BlcnR5U2hvcnRoYW5kLmggXAorICAgIGNz
cy9TdHlsZVJlc29sdmVyLmggXAogICAgIGNzcy9TdHlsZVJ1bGUuaCBcCiAgICAgY3NzL1N0eWxl
U2hlZXQuaCBcCiAgICAgY3NzL1N0eWxlU2hlZXRMaXN0LmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDViMjg4Zjg4N2Q0ZGRlNDY0MGEwMTI3MDg5MDA0NmJiODg2YTc1ZTIuLmI3NTM4MGJjMDBlZGQ4
NTlmYmRjMGUyMzg1MTBjZGY2YmEwYzBjNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI0NjEsOCAr
MjQ2MSw2IEBACiAgICAgICAgICAgICAnY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwJywKICAg
ICAgICAgICAgICdjc3MvQ1NTU3R5bGVSdWxlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL0NTU1N0
eWxlUnVsZS5oJywKLSAgICAgICAgICAgICdjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAnLAotICAg
ICAgICAgICAgJ2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgnLAogICAgICAgICAgICAgJ2Nzcy9DU1NT
dHlsZVNoZWV0LmNwcCcsCiAgICAgICAgICAgICAnY3NzL0NTU1N0eWxlU2hlZXQuaCcsCiAgICAg
ICAgICAgICAnY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwJywKQEAgLTI1MTgsNiArMjUx
Niw4IEBACiAgICAgICAgICAgICAnY3NzL1N0eWxlUHJvcGVydHlTZXQuaCcsCiAgICAgICAgICAg
ICAnY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwJywKICAgICAgICAgICAgICdjc3MvU3R5
bGVQcm9wZXJ0eVNob3J0aGFuZC5oJywKKyAgICAgICAgICAgICdjc3MvU3R5bGVSZXNvbHZlci5j
cHAnLAorICAgICAgICAgICAgJ2Nzcy9TdHlsZVJlc29sdmVyLmgnLAogICAgICAgICAgICAgJ2Nz
cy9TdHlsZVJ1bGUuY3BwJywKICAgICAgICAgICAgICdjc3MvU3R5bGVSdWxlLmgnLAogICAgICAg
ICAgICAgJ2Nzcy9TdHlsZVNoZWV0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGU0ZWNlMjYwNWU2MTljODNkY2I1YTRhNDYwMzQxOGZl
NTk2Nzc0NDUuLmFkMzllNDRjNzNiYmQ5Yzg1Yjc3OWY3ZjdiNjkwNWQ1NDIwZTAxZWMgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0zNTg1NCw2
MiArMzU4NTQsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxjc3NcQ1NTU3R5bGVTZWxlY3Rvci5jcHAiCi0JCQkJPgotCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
Ci0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0J
CQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
LQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKLQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgotCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xDU1NTdHlsZVNlbGVjdG9y
LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNz
c1xDU1NTdHlsZVNoZWV0LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCkBAIC0z
NjgwMiw2ICszNjc0Niw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxjc3NcU3R5bGVSZXNvbHZlci5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTdHlsZVJlc29sdmVy
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNz
c1xTdHlsZVJ1bGUuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2YTBiZmE0MzEzNjJmNGFh
ZmFlNTg5ZTM3YWU3OWFhM2EyMzFmZjJmLi44MzkzNWI2MTRmNWM2Nzk1MzRiMWY0ZjVjZGQ3YjA5
OWVhYzRkN2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC01Mzc1LDggKzUzNzUsNiBAQAogCQlCQzc3MkIzQzBDNEVBOTFFMDA4
MzI4NUYgLyogQ1NTSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzc3MkIzNjBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTSGVscGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM3NzJCM0QwQzRF
QTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkIzNzBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2Vy
LmNwcCAqLzsgfTsKIAkJQkM3NzJCM0UwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJCMzgwQzRF
QTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5oICovOyB9OwotCQlCQzc3MkIzRjBDNEVBOTFFMDA4
MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkIzOTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAgKi87IH07Ci0JCUJDNzcyQjQwMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHls
ZVNlbGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzc3MkIzQTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5oICovOyB9Owog
CQlCQzc3MkM0NjBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNDQwQzRFQjJDNjAw
ODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCAqLzsgfTsKIAkJQkM3NzJDNDcwQzRFQjJDNjAw
ODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0NTBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVl
c3QuaCAqLzsgfTsKIAkJQkM3NzJDNEUwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0
cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3
NzJDNEMwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3BwICovOyB9OwpAQCAt
NTg2Myw2ICs1ODYxLDggQEAKIAkJRTEyRURCN0IwQjMwOEE3ODAwMjcwNEI2IC8qIEV2ZW50VGFy
Z2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTJF
REI3QTBCMzA4QTc4MDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTJFREJFQTBCMzA4RTBCMDAyNzA0QjYg
LyogRXZlbnRUYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTEyRURCRTkwQjMwOEUwQjAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmNwcCAqLzsg
fTsKIAkJRTEzNEY1QUIxMkVFMzQzRjAwNEVDNThEIC8qIEludFJlY3RIYXNoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM0RjVBQTEyRUUzNDNGMDA0
RUM1OEQgLyogSW50UmVjdEhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5
ODY2MTE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi87IH07CisJCUUxMzk4
NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUgLyog
U3R5bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29v
a2llU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1tICov
OyB9OwogCQlFMTRGMUM0NDE0QjVEQUM2MDBFQTkwMDkgLyogSFRNTEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTRGMUM0MjE0QjVEQUM2MDBFQTkwMDkgLyogSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZS5jcHAgKi87IH07CiAJCUUxNEYxQzQ1MTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTRGMUM0MzE0QjVEQUM2MDBFQTkwMDkgLyogSFRNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMjQ2NCw4ICsxMjQ2NCw2IEBACiAJCUJDNzcyQjM2MEM0RUE5MUUw
MDgzMjg1RiAvKiBDU1NIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENTU0hlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkIzNzBDNEVB
OTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Qzc3MkIzODBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQkM3NzJCMzkwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1N0eWxlU2VsZWN0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzc3MkIzQTBDNEVBOTFFMDA4MzI4NUYgLyog
Q1NTU3R5bGVTZWxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NT
U3R5bGVTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkM0NDBD
NEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkM3NzJDNDUwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVzdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkM0QzBDNEVCMzA0MDA4MzI4NUYgLyogTUlN
RVR5cGVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TUlNRVR5cGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzAw
MSw2ICsxMjk5OSw4IEBACiAJCUUxMkVEQjdBMEIzMDhBNzgwMDI3MDRCNiAvKiBFdmVudFRhcmdl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudFRhcmdldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTJFREJFOTBCMzA4RTBCMDAyNzA0QjYgLyogRXZl
bnRUYXJnZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRU
YXJnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTM0RjVBQTEyRUUzNDNG
MDA0RUM1OEQgLyogSW50UmVjdEhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW50UmVjdEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEzOTg2NjEx
NTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUxMzk4NjYyMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tpZVN0
b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llU3RvcmFnZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTNGMDFGMDEyNzBFMTkwMDBERkJBNzEg
LyogQ29va2llU3RvcmFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IENvb2tpZVN0b3JhZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxNEYxQzQyMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjA2MDcsOCArMjA2MDcsNiBAQAogCQkJCUE4MEU2Q0M1MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NT
dHlsZVJ1bGUuY3BwICovLAogCQkJCUE4MEU2Q0UyMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHls
ZVJ1bGUuaCAqLywKIAkJCQk4NUM1NkNBMTBBQTg5QUI0MDBEOTU3NTUgLyogQ1NTU3R5bGVSdWxl
LmlkbCAqLywKLQkJCQlCQzc3MkIzOTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAgKi8sCi0JCQkJQkM3NzJCM0EwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0
b3IuaCAqLywKIAkJCQlBOEVBODAwMDBBMTk1MTZFMDBBOEVGNUYgLyogQ1NTU3R5bGVTaGVldC5j
cHAgKi8sCiAJCQkJQThFQTdGRkYwQTE5NTE2RTAwQThFRjVGIC8qIENTU1N0eWxlU2hlZXQuaCAq
LywKIAkJCQk4NThDMzkxMDBBQThGRjAwMDBCMTg3QTQgLyogQ1NTU3R5bGVTaGVldC5pZGwgKi8s
CkBAIC0yMDY4Niw2ICsyMDY4NCw4IEBACiAJCQkJQTgwRTZERkEwQTE5OTA2NzAwN0ZCOEM1IC8q
IFN0eWxlUHJvcGVydHlTZXQuaCAqLywKIAkJCQlFMUIyNTEwNDE1MkEwQkFGMDA2OUI3NzkgLyog
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAgKi8sCiAJCQkJRTFCMjUxMDUxNTJBMEJBRjAwNjlC
Nzc5IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCAqLywKKwkJCQlFMTM5ODY2MTE1NDc4NDc0
MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi8sCisJCQkJRTEzOTg2NjIxNTQ3ODQ3NDAw
MUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCAqLywKIAkJCQlFNEJCRUQ0QTE0RkNEQkExMDAzRjBC
OTggLyogU3R5bGVSdWxlLmNwcCAqLywKIAkJCQlFNEJCRUQ0QjE0RkNEQkExMDAzRjBCOTggLyog
U3R5bGVSdWxlLmggKi8sCiAJCQkJQThFQTgwMDUwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hl
ZXQuY3BwICovLApAQCAtMjE5MTksNyArMjE5MTksNiBAQAogCQkJCUE4MEU3MzUyMEExOTlDNzcw
MDdGQjhDNSAvKiBDU1NTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZFMEYwQTE5
OTExQzAwN0ZCOEM1IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4MEU2RDBDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHlsZVJ1bGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCUJDNzcyQjQwMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNlbGVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEVBODAwNzBBMTk1MTZFMDBBOEVGNUYgLyogQ1NTU3R5bGVTaGVl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4MEM5ODgwQ0QyOTRFRTAwQTBCN0IzIC8qIENTU1Rp
bWluZ0Z1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MUY1M0U5MEQyNzA0Rjkw
MEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDgx
NCw2ICsyNDgxMyw3IEBACiAJCQkJNTBEMTBEOUExNTQ1RjU3NjAwOTZEMjg4IC8qIFJlbmRlckxh
eWVyRmlsdGVySW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwMEVFNzYxNTQ2RUFDMTAwQkEx
MUQxIC8qIFN0eWxlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGQTJENzgxNTIxMzJC
MzAwQzFCQTBCIC8qIERPTVdpbmRvd0V4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTEz
OTg2NjQxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtMjU0MDQsNyArMjU0MDQsNiBAQAogCQkJCUU0QzE3ODlBMEVFNjkwMzgwMDgyNEQ2OSAvKiBD
U1NTZWxlY3Rvckxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZFMTAwQTE5OTExQzAw
N0ZCOEM1IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgw
RTZDRUYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1N0eWxlUnVsZS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlCQzc3MkIzRjBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBOEVBODAwODBBMTk1MTZFMDBBOEVGNUYgLyogQ1NTU3R5bGVTaGVl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgwQzk4NzBDRDI5NEVFMDBBMEI3QjMgLyogQ1NT
VGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzFGNTNFQTBEMjcw
NEY5MDBFQ0UwRDUgLyogQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yNzgyNyw2ICsyNzgyNiw3IEBACiAJCQkJNTBEMTBEOTkxNTQ1RjU3NjAwOTZEMjg4IC8qIFJl
bmRlckxheWVyRmlsdGVySW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTAwRUU3NTE1NDZF
QUMxMDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxN0ZC
QTFFMTUxQUIxN0MwMEI1Nzk1OSAvKiBET01XaW5kb3dFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTEzOTg2NjMxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcAppbmRleCAyNzU1MTA3ZDFk
N2Q2OWRjMTU2NjFjMzMwODQwMzQzMmMyZGVlMTg1Li40NzFiZmRjZTgwODdjM2E1MGZiZjkzMjgx
YzQxMmUwZDhmNGFmMWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5P
bmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKQEAgLTU2LDcg
KzU2LDYgQEAKICNpbmNsdWRlICJDU1NSdWxlLmNwcCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5j
cHAiCiAjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwIgotI2luY2x1ZGUgIkNTU1Nl
bGVjdG9yLmNwcCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuY3BwIgogI2luY2x1ZGUgIkNT
U1N0eWxlRGVjbGFyYXRpb24uY3BwIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5jcHAiCkBAIC03
MSwzICs3MCw0IEBACiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmNwcCIKICNpbmNsdWRlICJTdHls
ZVByb3BlcnR5U2V0LmNwcCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCIK
KyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxj
dWxhdGlvblZhbHVlLmNwcAppbmRleCA0MjM4MDA4OTk1OGRkZmM1NTFhZTkxNTU2ZWYxNzgxZWM4
ODYyYzNhLi42MThjMzljMTI3NGJhM2ZhYjcwNjU4ZWFjN2Q2NDQzMTZiNjZhOTlmIDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCkBAIC0zMSw5ICszMSw5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgog
Ci0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5o
IgogI2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAppbmRleCBiZjVjNGFhNmU2ODZlZjYzYWMxZmQ3
NGFhODY4ZGVhNDgzZTMzNTkyLi5jYjMyNjJlNTIxNjE5Y2E2MmJmMjliZWY0NWEyZmExNjUzNjVi
NjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcApAQCAtMzQsNyArMzQs
NiBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1NlZ21lbnRlZEZvbnRGYWNlLmgiCi0jaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1VuaWNvZGVSYW5nZVZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgpA
QCAtNDYsNiArNDUsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgIldlYktpdEZv
bnRGYW1pbHlOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IDI3MWIyOTcwNGVmZmI2OGQ2
MmIzZjRhMDJjMjcwYmQ0NDJjNzRkZTMuLmEzMTRhODYwMjJmZWIzNzMwN2U3NjQzZWZhMWYyOGE2
ZTk1NTExMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTI3
LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDU1NHcmFkaWVudFZhbHVlLmgiCiAKICNpbmNsdWRlICJD
U1NDYWxjdWxhdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2lu
Y2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJHZW5lcmF0b3JHZW5lcmF0ZWRJ
bWFnZS5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCkBAIC0zNyw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZmNjhmZmFjNDc2YjBlZWQwNGFmN2VkY2Ex
NjZjODZkNzg4ZmZhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw1ODYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRm
ZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKLSAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFBy
b3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8pCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgotCi0jaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0j
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCi0j
aW5jbHVkZSAiQ29udGVudERhdGEuaCIKLSNpbmNsdWRlICJDb3VudGVyLmgiCi0jaW5jbHVkZSAi
Q291bnRlckNvbnRlbnQuaCIKLSNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZS5oIgotI2luY2x1ZGUg
IkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgi
Ci0jaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9y
LmgiCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkNTU0xpbmVCb3hDb250
YWluVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NNZWRpYVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NQYWdl
UnVsZS5oIgotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZh
bHVlTWFwcGluZ3MuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAi
Q1NTUmVmbGVjdFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKLSNpbmNsdWRlICJD
U1NTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgotI2luY2x1ZGUgIkNT
U1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDU1NU
aW1pbmdGdW5jdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVk
ZSAiQ3Vyc29yTGlzdC5oIgotI2luY2x1ZGUgIkZvbnRGZWF0dXJlVmFsdWUuaCIKLSNpbmNsdWRl
ICJGb250VmFsdWUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lU2VsZWN0
aW9uLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIK
LSNpbmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFN0eWxlRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJLZXlmcmFtZUxpc3QuaCIKLSNpbmNs
dWRlICJMaW5rSGFzaC5oIgotI2luY2x1ZGUgIkxvY2FsZVRvU2NyaXB0TWFwcGluZy5oIgotI2lu
Y2x1ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTWVkaWFMaXN0LmgiCi0jaW5jbHVkZSAiTWVk
aWFRdWVyeUV2YWx1YXRvci5oIgotI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgotI2luY2x1
ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJQYWlyLmgiCi0j
aW5jbHVkZSAiUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJRdW90
ZXNEYXRhLmgiCi0jaW5jbHVkZSAiUmVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgot
I2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgotI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclRo
ZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgotI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVu
c2lvbnMuaCIKLSNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5j
bHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFkb3dEYXRhLmgiCi0jaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgotI2luY2x1ZGUgIlNoYWRvd1ZhbHVlLmgiCi0jaW5jbHVkZSAiU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlN0eWxlQnVpbGRlci5oIgotI2luY2x1ZGUgIlN0
eWxlQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJTdHlsZVBlbmRpbmdJbWFnZS5oIgotI2luY2x1
ZGUgIlN0eWxlUnVsZS5oIgotI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKLSNpbmNs
dWRlICJTdHlsZVNoZWV0TGlzdC5oIgotI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSAiV2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgot
I2luY2x1ZGUgIldlYktpdENTU1JlZ2lvblJ1bGUuaCIKLSNpbmNsdWRlICJXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZS5oIgotI2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgotI2luY2x1
ZGUgIlhNTE5hbWVzLmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSNpbmNsdWRlICJGaWx0
ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oIgotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0jaW5jbHVkZSAiRGFzaGJvYXJkUmVn
aW9uLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIuaCIKLSNpbmNsdWRlICJD
dXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXIu
aCIKLSNpbmNsdWRlICJTdHlsZUNhY2hlZFNoYWRlci5oIgotI2luY2x1ZGUgIlN0eWxlQ3VzdG9t
RmlsdGVyUHJvZ3JhbS5oIgotI2luY2x1ZGUgIlN0eWxlUGVuZGluZ1NoYWRlci5oIgotI2luY2x1
ZGUgIlN0eWxlU2hhZGVyLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTU2hhZGVyVmFsdWUuaCIKLSNl
bmRpZgotCi0jaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0jaW5jbHVkZSAiQ1NTSW1hZ2VTZXRW
YWx1ZS5oIgotI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2VTZXQuaCIKLSNlbmRpZgotCi0jaWYg
UExBVEZPUk0oUVQpCi0jZGVmaW5lIEZJWEVEX1BPU0lUSU9OX0NSRUFURVNfU1RBQ0tJTkdfQ09O
VEVYVCAxCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi0jZGVmaW5lIEhBTkRMRV9JTkhF
UklUKHByb3AsIFByb3ApIFwKLWlmIChpc0luaGVyaXQpIHsgXAotICAgIG1fc3R5bGUtPnNldCMj
UHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBcCi0gICAgcmV0dXJuOyBcCi19Ci0KLSNkZWZp
bmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAotSEFORExFX0lOSEVS
SVQocHJvcCwgUHJvcCkgXAotaWYgKGlzSW5pdGlhbCkgeyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQ
cm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCi0gICAgcmV0dXJuOyBcCi19Ci0K
LSNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfV0lUSF9WQUxVRShwcm9wLCBQcm9w
LCBWYWx1ZSkgXAotSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAotaWYgKGlzSW5pdGlhbCkg
eyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNWYWx1ZSgp
KTtcCi0gICAgcmV0dXJuO1wKLX0KLQotI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TF9BTkRfUFJJTUlUSVZFKHByb3AsIFByb3ApIFwKLUhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KHByb3AsIFByb3ApIFwKLWlmIChwcmltaXRpdmVWYWx1ZSkgXAotICAgIG1fc3R5bGUtPnNldCMj
UHJvcCgqcHJpbWl0aXZlVmFsdWUpOwotCi1jbGFzcyBSdWxlRGF0YSB7Ci1wdWJsaWM6Ci0gICAg
UnVsZURhdGEoU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9v
bCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9y
LCBib29sIGluUmVnaW9uUnVsZSk7Ci0KLSAgICB1bnNpZ25lZCBwb3NpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zaXRpb247IH0KLSAgICBTdHlsZVJ1bGUqIHJ1bGUoKSBjb25zdCB7IHJldHVy
biBtX3J1bGU7IH0KLSAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X3NlbGVjdG9yOyB9Ci0KLSAgICBib29sIGhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yOyB9Ci0gICAgYm9vbCBoYXNNdWx0
aXBhcnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3I7IH0K
LSAgICBib29sIGhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNo
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2Vk
T25SdWxlSGFzaDsgfQotICAgIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7IH0K
LSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNpdHk7
IH0KLSAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9saW5rTWF0
Y2hUeXBlOyB9Ci0gICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOyB9Ci0gICAgYm9vbCBpc0luUmVnaW9u
UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblJlZ2lvblJ1bGU7IH0KLQotICAgIC8vIFRyeSB0
byBiYWxhbmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxl
RGF0YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVyZm9ybWFuY2UuCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQgPSA0OwotICAgIGNvbnN0IHVu
c2lnbmVkKiBkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyByZXR1
cm4gbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgU3R5bGVSdWxlKiBtX3J1bGU7Ci0gICAgQ1NTU2VsZWN0b3IqIG1fc2VsZWN0b3I7Ci0gICAg
dW5zaWduZWQgbV9zcGVjaWZpY2l0eTsKLSAgICAvLyBUaGlzIG51bWJlciB3YXMgcGlja2VkIGZh
aXJseSBhcmJpdHJhcmlseS4gV2UgY2FuIHByb2JhYmx5IGxvd2VyIGl0IGlmIHdlIG5lZWQgdG8u
Ci0gICAgLy8gU29tZSBzaW1wbGUgdGVzdGluZyBzaG93ZWQgPDEwMCwwMDAgUnVsZURhdGEncyBv
biBsYXJnZSBzaXRlcy4KLSAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIDogMjQ7Ci0gICAgdW5zaWdu
ZWQgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgOiAxOwotICAgIHVuc2lnbmVkIG1faGFzTXVs
dGlwYXJ0U2VsZWN0b3IgOiAxOwotICAgIHVuc2lnbmVkIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JN
YXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2ggOiAxOwotICAgIHVuc2lnbmVkIG1fY29udGFpbnNV
bmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yIDogMTsKLSAgICB1bnNpZ25lZCBtX2xpbmtNYXRjaFR5
cGUgOiAyOyAvLyAgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrCi0gICAgdW5zaWduZWQg
bV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMTsKLSAgICB1bnNpZ25lZCBtX2lzSW5SZWdp
b25SdWxlIDogMTsKLSAgICAvLyBVc2UgcGxhaW4gYXJyYXkgaW5zdGVhZCBvZiBhIFZlY3RvciB0
byBtaW5pbWl6ZSBtZW1vcnkgb3ZlcmhlYWQuCi0gICAgdW5zaWduZWQgbV9kZXNjZW5kYW50U2Vs
ZWN0b3JJZGVudGlmaWVySGFzaGVzW21heGltdW1JZGVudGlmaWVyQ291bnRdOwotfTsKLSAgICAK
LXN0cnVjdCBTYW1lU2l6ZUFzUnVsZURhdGEgewotICAgIHZvaWQqIGE7Ci0gICAgdm9pZCogYjsK
LSAgICB1bnNpZ25lZCBjOwotICAgIHVuc2lnbmVkIGQ7Ci0gICAgdW5zaWduZWQgZVs0XTsKLX07
Ci0KLUNPTVBJTEVfQVNTRVJUKHNpemVvZihSdWxlRGF0YSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNS
dWxlRGF0YSksIFJ1bGVEYXRhX3Nob3VsZF9zdGF5X3NtYWxsKTsKLQotY2xhc3MgUnVsZVNldCB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUnVsZVNldCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8UnVsZVNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFJ1bGVT
ZXQpOyB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxW
ZWN0b3I8UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKLQotICAgIHZvaWQgYWRkUnVsZXNGcm9t
U2hlZXQoU3R5bGVTaGVldEludGVybmFsKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0
eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKLQotICAgIHZvaWQg
YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwg
Ym9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNl
KTsKLSAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCBib29sIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wg
aXNJblJlZ2lvblJ1bGUgPSBmYWxzZSk7Ci0gICAgdm9pZCBhZGRQYWdlUnVsZShTdHlsZVJ1bGVQ
YWdlKik7Ci0gICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9t
UnVsZU1hcCYsIGNvbnN0IFJ1bGVEYXRhJik7Ci0gICAgdm9pZCBhZGRSZWdpb25SdWxlKFN0eWxl
UnVsZVJlZ2lvbiosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7Ci0gICAgdm9pZCBz
aHJpbmtUb0ZpdCgpOwotICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpIHsgbV9hdXRv
U2hyaW5rVG9GaXRFbmFibGVkID0gZmFsc2U7IH0KLQotICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXI6
OkZlYXR1cmVzJiBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KLQotICAg
IGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGlkUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBj
b25zdCB7IHJldHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVs
ZURhdGE+KiBjbGFzc1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4g
bV9jbGFzc1J1bGVzLmdldChrZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdGFn
UnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX3RhZ1J1bGVzLmdl
dChrZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogc2hhZG93UHNldWRvRWxlbWVu
dFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dQc2V1
ZG9FbGVtZW50UnVsZXMuZ2V0KGtleSk7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBs
aW5rUHNldWRvQ2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX2xpbmtQc2V1ZG9DbGFzc1J1
bGVzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogZm9jdXNQc2V1ZG9DbGFzc1J1bGVz
KCkgY29uc3QgeyByZXR1cm4gJm1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFJ1bGVEYXRhPiogdW5pdmVyc2FsUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV91bml2
ZXJzYWxSdWxlczsgfQotICAgIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHBhZ2VSdWxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJ1bGVzOyB9Ci0KLXB1YmxpYzoKLSAgICBSdWxlU2V0
KCk7Ci0KLSAgICBBdG9tUnVsZU1hcCBtX2lkUnVsZXM7Ci0gICAgQXRvbVJ1bGVNYXAgbV9jbGFz
c1J1bGVzOwotICAgIEF0b21SdWxlTWFwIG1fdGFnUnVsZXM7Ci0gICAgQXRvbVJ1bGVNYXAgbV9z
aGFkb3dQc2V1ZG9FbGVtZW50UnVsZXM7Ci0gICAgVmVjdG9yPFJ1bGVEYXRhPiBtX2xpbmtQc2V1
ZG9DbGFzc1J1bGVzOwotICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9mb2N1c1BzZXVkb0NsYXNzUnVs
ZXM7Ci0gICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3VuaXZlcnNhbFJ1bGVzOwotICAgIFZlY3RvcjxT
dHlsZVJ1bGVQYWdlKj4gbV9wYWdlUnVsZXM7Ci0gICAgdW5zaWduZWQgbV9ydWxlQ291bnQ7Ci0g
ICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7Ci0gICAgU3R5bGVSZXNvbHZlcjo6RmVh
dHVyZXMgbV9mZWF0dXJlczsKLQotICAgIHN0cnVjdCBSdWxlU2V0U2VsZWN0b3JQYWlyIHsKLSAg
ICAgICAgUnVsZVNldFNlbGVjdG9yUGFpcihDU1NTZWxlY3Rvciogc2VsZWN0b3IsIFBhc3NPd25Q
dHI8UnVsZVNldD4gcnVsZVNldCkgOiBzZWxlY3RvcihzZWxlY3RvciksIHJ1bGVTZXQocnVsZVNl
dCkgeyB9Ci0gICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIoY29uc3QgUnVsZVNldFNlbGVjdG9y
UGFpciYgcnMpIDogc2VsZWN0b3IocnMuc2VsZWN0b3IpLCBydWxlU2V0KGNvbnN0X2Nhc3Q8UnVs
ZVNldFNlbGVjdG9yUGFpcio+KCZycyktPnJ1bGVTZXQucmVsZWFzZSgpKSB7IH0KLSAgICAgICAg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yOwotICAgICAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldDsK
LSAgICB9OwotCi0gICAgVmVjdG9yPFJ1bGVTZXRTZWxlY3RvclBhaXI+IG1fcmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHM7Ci19OwotCi1zdGF0aWMgUnVsZVNldCogZGVmYXVsdFN0eWxlOwotc3Rh
dGljIFJ1bGVTZXQqIGRlZmF1bHRRdWlya3NTdHlsZTsKLXN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0
UHJpbnRTdHlsZTsKLXN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlOwotc3Rh
dGljIFN0eWxlU2hlZXRJbnRlcm5hbCogc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQ7Ci1zdGF0aWMg
U3R5bGVTaGVldEludGVybmFsKiBkZWZhdWx0U3R5bGVTaGVldDsKLXN0YXRpYyBTdHlsZVNoZWV0
SW50ZXJuYWwqIHF1aXJrc1N0eWxlU2hlZXQ7Ci1zdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBz
dmdTdHlsZVNoZWV0Owotc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogbWF0aE1MU3R5bGVTaGVl
dDsKLXN0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0Owot
c3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogZnVsbHNjcmVlblN0eWxlU2hlZXQ7Ci0KLVJlbmRl
clN0eWxlKiBTdHlsZVJlc29sdmVyOjpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwotCi1zdGF0aWMg
dm9pZCBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOwotc3RhdGljIHZvaWQgbG9hZFNpbXBsZURlZmF1
bHRTdHlsZSgpOwotdGVtcGxhdGUgPGNsYXNzIExpc3RUeXBlPgotc3RhdGljIHZvaWQgY29sbGVj
dENTU09NV3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+
JiwgTGlzdFR5cGUqKTsKLQotLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHNvbWUg
bWVjaGFuaXNtIHRoYXQgZ3VhcmFudGVlcyB0aGlzIGlzIGluIHN5bmMgd2l0aCB0aGUgcmVhbCBV
QSBzdHlsZXNoZWV0Lgotc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZVVzZXJBZ2VudFN0eWxlU2hl
ZXQgPSAiaHRtbCxib2R5LGRpdntkaXNwbGF5OmJsb2NrfWhlYWR7ZGlzcGxheTpub25lfWJvZHl7
bWFyZ2luOjhweH1kaXY6Zm9jdXMsc3Bhbjpmb2N1c3tvdXRsaW5lOmF1dG8gNXB4IC13ZWJraXQt
Zm9jdXMtcmluZy1jb2xvcn1hOi13ZWJraXQtYW55LWxpbmt7Y29sb3I6LXdlYmtpdC1saW5rO3Rl
eHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9YTotd2Via2l0LWFueS1saW5rOmFjdGl2ZXtjb2xvcjot
d2Via2l0LWFjdGl2ZWxpbmt9IjsKLQotc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRDYW5Vc2VT
aW1wbGVEZWZhdWx0U3R5bGUoRWxlbWVudCogZSkKLXsKLSAgICByZXR1cm4gZS0+aGFzVGFnTmFt
ZShodG1sVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGhlYWRUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYm9k
eVRhZykgfHwgZS0+aGFzVGFnTmFtZShkaXZUYWcpIHx8IGUtPmhhc1RhZ05hbWUoc3BhblRhZykg
fHwgZS0+aGFzVGFnTmFtZShiclRhZykgfHwgZS0+aGFzVGFnTmFtZShhVGFnKTsKLX0KLQotc3Rh
dGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVlbkV2YWwoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwgc3RhdGljU2NyZWVuRXZh
bCwgKCJzY3JlZW4iKSk7Ci0gICAgcmV0dXJuIHN0YXRpY1NjcmVlbkV2YWw7Ci19Ci0KLXN0YXRp
YyBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBwcmludEV2YWwoKQotewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwgc3RhdGljUHJpbnRFdmFsLCAo
InByaW50IikpOwotICAgIHJldHVybiBzdGF0aWNQcmludEV2YWw7Ci19Ci0KLXN0YXRpYyBTdHls
ZVByb3BlcnR5U2V0KiBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkKLXsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiwgbGVmdFRvUmlnaHREZWNsLCAoU3R5
bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCkpKTsKLSAgICBpZiAobGVmdFRvUmlnaHREZWNsLT5pc0Vt
cHR5KCkpCi0gICAgICAgIGxlZnRUb1JpZ2h0RGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlE
aXJlY3Rpb24sIENTU1ZhbHVlTHRyKTsKLSAgICByZXR1cm4gbGVmdFRvUmlnaHREZWNsLmdldCgp
OwotfQotCi1zdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigp
Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4sIHJp
Z2h0VG9MZWZ0RGVjbCwgKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpKSk7Ci0gICAgaWYgKHJp
Z2h0VG9MZWZ0RGVjbC0+aXNFbXB0eSgpKQotICAgICAgICByaWdodFRvTGVmdERlY2wtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZVJ0bCk7Ci0gICAgcmV0dXJuIHJp
Z2h0VG9MZWZ0RGVjbC5nZXQoKTsKLX0KLQotU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgIDog
bV9oYXNVQUFwcGVhcmFuY2UoZmFsc2UpCi0gICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91
bmRGaWxsTGF5ZXIpCi0gICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5j
ZUxhc3RTd2VlcCgwKQotICAgICwgbV9jaGVja2VyKGRvY3VtZW50LCAhZG9jdW1lbnQtPmluUXVp
cmtzTW9kZSgpKQotICAgICwgbV9wYXJlbnRTdHlsZSgwKQotICAgICwgbV9yb290RWxlbWVudFN0
eWxlKDApCi0gICAgLCBtX2VsZW1lbnQoMCkKLSAgICAsIG1fc3R5bGVkRWxlbWVudCgwKQotICAg
ICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90SW5z
aWRlTGluaykKLSAgICAsIG1fcGFyZW50Tm9kZSgwKQotICAgICwgbV9saW5lSGVpZ2h0VmFsdWUo
MCkKLSAgICAsIG1fZm9udERpcnR5KGZhbHNlKQotICAgICwgbV9tYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICwgbV9zYW1lT3JpZ2luT25seShm
YWxzZSkKLSAgICAsIG1fZm9udFNlbGVjdG9yKENTU0ZvbnRTZWxlY3Rvcjo6Y3JlYXRlKGRvY3Vt
ZW50KSkKLSAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCi0gICAgLCBt
X2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCi0gICAgLCBtX3N0eWxlQnVp
bGRlcihTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpKQotI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKLSAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCi0jZW5kaWYKLSNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICwgbV9zY29wZVN0YWNrUGFyZW50KDApCi0jZW5kaWYK
LXsKLSAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwotCi0g
ICAgaWYgKCFkZWZhdWx0U3R5bGUpIHsKLSAgICAgICAgaWYgKCFyb290IHx8IGVsZW1lbnRDYW5V
c2VTaW1wbGVEZWZhdWx0U3R5bGUocm9vdCkpCi0gICAgICAgICAgICBsb2FkU2ltcGxlRGVmYXVs
dFN0eWxlKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbG9hZEZ1bGxEZWZhdWx0U3R5
bGUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIGNvbnN0cnVjdCBkb2N1bWVudCByb290
IGVsZW1lbnQgZGVmYXVsdCBzdHlsZS4gdGhpcyBpcyBuZWVkZWQKLSAgICAvLyB0byBldmFsdWF0
ZSBtZWRpYSBxdWVyaWVzIHRoYXQgY29udGFpbiByZWxhdGl2ZSBjb25zdHJhaW50cywgbGlrZSAi
c2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMGVtKSIKLSAgICAvLyBUaGlzIGlzIGhlcmUgaW5zdGVh
ZCBvZiBjb25zdHJ1Y3RvciwgYmVjYXVzZSB3aGVuIGNvbnN0cnVjdG9yIGlzIHJ1biwKLSAgICAv
LyBkb2N1bWVudCBkb2Vzbid0IGhhdmUgZG9jdW1lbnRFbGVtZW50Ci0gICAgLy8gTk9URTogdGhp
cyBhc3N1bWVzIHRoYXQgZWxlbWVudCB0aGF0IGdldHMgcGFzc2VkIHRvIHN0eWxlRm9yRWxlbWVu
dCAtY2FsbAotICAgIC8vIGlzIGFsd2F5cyBmcm9tIHRoZSBkb2N1bWVudCB0aGF0IG93bnMgdGhl
IHN0eWxlIHNlbGVjdG9yCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsK
LSAgICBpZiAodmlldykKLSAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVy
eUV2YWx1YXRvcih2aWV3LT5tZWRpYVR5cGUoKSkpOwotICAgIGVsc2UKLSAgICAgICAgbV9tZWRp
dW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcigiYWxsIikpOwotCi0gICAgaWYg
KHJvb3QpCi0gICAgICAgIG1fcm9vdERlZmF1bHRTdHlsZSA9IHN0eWxlRm9yRWxlbWVudChyb290
LCAwLCBEaXNhbGxvd1N0eWxlU2hhcmluZywgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOwotCi0g
ICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQotICAgICAgICBtX21lZGl1bSA9IGFk
b3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5m
cmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpKTsKLQotICAgIG1fYXV0aG9yU3R5bGUg
PSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAvLyBBZGRpbmcgcnVsZXMgZnJvbSBtdWx0aXBsZSBz
aGVldHMsIHNocmluayBhdCB0aGUgZW5kLgotICAgIC8vIEFkZGluZyBnbG9iYWwgcnVsZXMgZnJv
bSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgotICAgIC8vIE5vdGUgdGhhdCB0
aGVyZSB1c3VhbGx5IGlzIG9ubHkgMSBzaGVldCBmb3Igc2NvcGVkIHJ1bGVzLCBzbyBhdXRvLXNo
cmluay10by1maXQgaXMgZmluZS4KLSAgICBtX2F1dGhvclN0eWxlLT5kaXNhYmxlQXV0b1Nocmlu
a1RvRml0KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMg
cmVwYXJzZWQgZXZlcnkgdGltZSEKLSAgICBPd25QdHI8UnVsZVNldD4gdGVtcFVzZXJTdHlsZSA9
IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgIGlmIChTdHlsZVNoZWV0SW50ZXJuYWwqIHBhZ2VVc2Vy
U2hlZXQgPSBkb2N1bWVudC0+cGFnZVVzZXJTaGVldCgpKQotICAgICAgICB0ZW1wVXNlclN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldChwYWdlVXNlclNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOwotICAg
IGFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoZG9jdW1lbnQtPnBh
Z2VHcm91cFVzZXJTaGVldHMoKSwgKnRlbXBVc2VyU3R5bGUpOwotICAgIGFkZEF1dGhvclJ1bGVz
QW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoZG9jdW1lbnQtPmRvY3VtZW50VXNlclNoZWV0
cygpLCAqdGVtcFVzZXJTdHlsZSk7Ci0gICAgaWYgKHRlbXBVc2VyU3R5bGUtPm1fcnVsZUNvdW50
ID4gMCB8fCB0ZW1wVXNlclN0eWxlLT5tX3BhZ2VSdWxlcy5zaXplKCkgPiAwKQotICAgICAgICBt
X3VzZXJTdHlsZSA9IHRlbXBVc2VyU3R5bGUucmVsZWFzZSgpOwotCi0jaWYgRU5BQkxFKFNWR19G
T05UUykKLSAgICBpZiAoZG9jdW1lbnQtPnN2Z0V4dGVuc2lvbnMoKSkgewotICAgICAgICBjb25z
dCBIYXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVudCo+JiBzdmdGb250RmFjZUVsZW1lbnRzID0gZG9j
dW1lbnQtPnN2Z0V4dGVuc2lvbnMoKS0+c3ZnRm9udEZhY2VFbGVtZW50cygpOwotICAgICAgICBI
YXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdmdGb250
RmFjZUVsZW1lbnRzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVt
ZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3ZnRm9udEZhY2VFbGVtZW50cy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBmb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VS
dWxlKCgqaXQpLT5mb250RmFjZVJ1bGUoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBhcHBlbmRB
dXRob3JTdHlsZXNoZWV0cygwLCBkb2N1bWVudC0+c3R5bGVTaGVldHMoKS0+dmVjdG9yKCkpOwot
fQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxl
c0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4qIHVz
ZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSkKLXsKLSAgICBpZiAoIXVzZXJTaGVldHMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHVzZXJTaGVldHMtPnNpemUo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
Y29uc3QgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4mIHNoZWV0ID0gdXNlclNoZWV0cy0+YXQo
aSk7Ci0gICAgICAgIGlmIChzaGVldC0+aXNVc2VyU3R5bGVTaGVldCgpKQotICAgICAgICAgICAg
dXNlclN0eWxlLmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LmdldCgpLCAqbV9tZWRpdW0sIHRoaXMp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChzaGVldC5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBQ
YXNzT3duUHRyPFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3RvcjxTdHlsZVJlc29sdmVy
OjpSdWxlRmVhdHVyZT4mIHJ1bGVzKQotewotICAgIHNpemVfdCBzaXplID0gcnVsZXMuc2l6ZSgp
OwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgT3duUHRyPFJ1
bGVTZXQ+IHJ1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5ydWxl
LCBydWxlc1tpXS5zZWxlY3RvciwgcnVsZXNbaV0uaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwg
ZmFsc2UpOwotICAgIHJldHVybiBydWxlU2V0LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBTdHlsZVJl
c29sdmVyOjpjb2xsZWN0RmVhdHVyZXMoKQotewotICAgIG1fZmVhdHVyZXMuY2xlYXIoKTsKLSAg
ICAvLyBDb2xsZWN0IGFsbCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxpbmcgc2VsZWN0b3JzICg6
Zmlyc3QtY2hpbGQgYW5kIHNpbWlsYXIpCi0gICAgLy8gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIHN0
eWxlc2hlZXRzLiBTdHlsZSBzaGFyaW5nIGNvZGUgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRvIHJl
amVjdAotICAgIC8vIHNoYXJpbmcgY2FuZGlkYXRlcy4KLSAgICBtX2ZlYXR1cmVzLmFkZChkZWZh
dWx0U3R5bGUtPmZlYXR1cmVzKCkpOwotICAgIG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9yU3R5bGUt
PmZlYXR1cmVzKCkpOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgZm9yIChTY29wZWRS
dWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0
ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQotICAgICAgICBtX2ZlYXR1cmVz
LmFkZChpdC0+c2Vjb25kLT5mZWF0dXJlcygpKTsKLSNlbmRpZgotICAgIGlmIChtX3VzZXJTdHls
ZSkKLSAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOwotCi0g
ICAgbV9zaWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMuc2libGluZ1J1bGVz
KTsKLSAgICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVy
ZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7Ci19Ci0KLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVE
KQotY29uc3QgQ29udGFpbmVyTm9kZSogU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU2NvcGUoY29u
c3QgU3R5bGVTaGVldEludGVybmFsKiBzaGVldCkKLXsKLSAgICBBU1NFUlQoc2hlZXQpOwotCi0g
ICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVuYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+ZmluZFN0eWxl
U2hlZXRPd25lck5vZGUoKTsKLSAgICBpZiAoIW93bmVyTm9kZSB8fCAhb3duZXJOb2RlLT5pc0hU
TUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFn
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3duZXJOb2RlKTsKLSAgICBpZiAo
IXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ29udGFp
bmVyTm9kZSogcGFyZW50ID0gc3R5bGVFbGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFw
YXJlbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIChwYXJlbnQtPmlzRWxlbWVu
dE5vZGUoKSB8fCBwYXJlbnQtPmlzU2hhZG93Um9vdCgpKSA/IHBhcmVudCA6IDA7Ci19Ci0KLWlu
bGluZSBSdWxlU2V0KiBTdHlsZVJlc29sdmVyOjpydWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0
eWxlQ2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgU2NvcGVkUnVsZVNldE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKLSAgICBy
ZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgp
IDogMDsgCi19Ci0jZW5kaWYKLQotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHls
ZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0
PiA+JiBzdHlsZXNoZWV0cykKLXsKLSAgICAvLyBUaGlzIGhhbmRsZXMgc2hlZXRzIGFkZGVkIHRv
IHRoZSBlbmQgb2YgdGhlIHN0eWxlc2hlZXQgbGlzdCBvbmx5LiBJbiBvdGhlciBjYXNlcyB0aGUg
c3R5bGUgcmVzb2x2ZXIKLSAgICAvLyBuZWVkcyB0byBiZSByZWNvbnN0cnVjdGVkLiBUbyBoYW5k
bGUgaW5zZXJ0aW9ucyB0b28gdGhlIHJ1bGUgb3JkZXIgbnVtYmVycyB3b3VsZCBuZWVkIHRvIGJl
IHVwZGF0ZWQuCi0gICAgdW5zaWduZWQgc2l6ZSA9IHN0eWxlc2hlZXRzLnNpemUoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBmaXJzdE5ldzsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAo
IXN0eWxlc2hlZXRzW2ldLT5pc0NTU1N0eWxlU2hlZXQoKSB8fCBzdHlsZXNoZWV0c1tpXS0+ZGlz
YWJsZWQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBDU1NTdHlsZVNoZWV0KiBj
c3NTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZXNoZWV0c1tpXS5nZXQo
KSk7Ci0gICAgICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQgPSBjc3NTaGVldC0+aW50ZXJu
YWwoKTsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICAgICBjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSA9IGRldGVybWluZVNjb3BlKHNoZWV0KTsKLSAgICAgICAgaWYgKHNjb3BlKSB7
Ci0gICAgICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9z
Y29wZWRBdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmIChh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnNlY29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNj
b3BlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAg
bV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcyk7
Ci0gICAgICAgIGlmICghbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVy
TWFwLCBjc3NTaGVldCk7Ci0gICAgfQotICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1RvRml0KCk7
Ci0gICAgY29sbGVjdEZlYXR1cmVzKCk7Ci0gICAgCi0gICAgaWYgKGRvY3VtZW50KCktPnJlbmRl
cmVyKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKLSAgICAgICAgZG9jdW1l
bnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7
Ci19Ci0KLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotdm9pZCBTdHlsZVJlc29sdmVyOjpzZXR1
cFNjb3BlU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KQotewotICAgIC8vIFRoZSBz
Y29waW5nIGVsZW1lbnQgc3RhY2sgc2hvdWxkbid0IGJlIHVzZWQgaWYgPHN0eWxlIHNjb3BlZD4g
aXNuJ3QgdXNlZCBhbnl3aGVyZS4KLSAgICBBU1NFUlQoIW1fc2NvcGVkQXV0aG9yU3R5bGVzLmlz
RW1wdHkoKSk7Ci0KLSAgICBtX3Njb3BlU3RhY2suc2hyaW5rKDApOwotICAgIGZvciAoOyBwYXJl
bnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIFJ1bGVT
ZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yU2NvcGUocGFyZW50KTsKLSAgICAgICAgaWYgKHJ1bGVT
ZXQpCi0gICAgICAgICAgICBtX3Njb3BlU3RhY2suYXBwZW5kKFNjb3BlU3RhY2tGcmFtZShwYXJl
bnQsIHJ1bGVTZXQpKTsKLSAgICB9Ci0gICAgbV9zY29wZVN0YWNrLnJldmVyc2UoKTsKLSAgICBt
X3Njb3BlU3RhY2tQYXJlbnQgPSBwYXJlbnQ7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cHVz
aFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBz
Y29wZVBhcmVudCkKLXsKLSAgICAvLyBTaG9ydGN1dDogRG9uJ3QgYm90aGVyIHdpdGggdGhlIHNj
b3BpbmcgZWxlbWVudCBzdGFjayBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJl
LgotICAgIGlmIChtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNT
RVJUKCFtX3Njb3BlU3RhY2tQYXJlbnQpOwotICAgICAgICBBU1NFUlQobV9zY29wZVN0YWNrLmlz
RW1wdHkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gSW4gc29tZSB3YWNreSBj
YXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZSB3ZSBtYXkgZ2V0IGludm9rZWQgZm9yIHJhbmRvbSBl
bGVtZW50cy4KLSAgICAvLyBSZWNyZWF0ZSB0aGUgd2hvbGUgc2NvcGluZyBlbGVtZW50IHN0YWNr
IGluIHN1Y2ggY2FzZXMuCi0gICAgaWYgKCFzY29wZVN0YWNrSXNDb25zaXN0ZW50KHNjb3BlUGFy
ZW50KSkgewotICAgICAgICBzZXR1cFNjb3BlU3RhY2soc2NvcGUpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIHBhcmVudCBvbnRvIHRoZSBz
dGFjay4KLSAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvclNjb3BlKHNjb3BlKTsKLSAg
ICBpZiAocnVsZVNldCkKLSAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChTY29wZVN0YWNrRnJh
bWUoc2NvcGUsIHJ1bGVTZXQpKTsKLSAgICBtX3Njb3BlU3RhY2tQYXJlbnQgPSBzY29wZTsKLX0K
LQotdm9pZCBTdHlsZVJlc29sdmVyOjpwb3BTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSkKLXsKLSAgICAvLyBPbmx5IGJvdGhlciB0byB1cGRhdGUgdGhlIHNjb3BpbmcgZWxlbWVudCBz
dGFjayBpZiBpdCBpcyBjb25zaXN0ZW50LgotICAgIGlmIChzY29wZVN0YWNrSXNDb25zaXN0ZW50
KHNjb3BlKSkgewotICAgICAgICBtX3Njb3BlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBt
X3Njb3BlU3RhY2tQYXJlbnQgPSBzY29wZS0+cGFyZW50T3JIb3N0Tm9kZSgpOwotICAgIH0KLX0K
LSNlbmRpZgotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQq
IHBhcmVudCkKLXsKLSAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnRzUGFyZW50ID0gcGFy
ZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCk7Ci0KLSAgICAvLyBXZSBhcmUgbm90IGFsd2F5cyBp
bnZva2VkIGNvbnNpc3RlbnRseS4gRm9yIGV4YW1wbGUsIHNjcmlwdCBleGVjdXRpb24gY2FuIGNh
dXNlIHVzIHRvIGVudGVyCi0gICAgLy8gc3R5bGUgcmVjYWxjIGluIHRoZSBtaWRkbGUgb2YgdHJl
ZSBidWlsZGluZy4gV2UgbWF5IGFsc28gYmUgaW52b2tlZCBmcm9tIHNvbWV3aGVyZSB3aXRoaW4g
dGhlIHRyZWUuCi0gICAgLy8gUmVzZXQgdGhlIHN0YWNrIGluIHRoaXMgY2FzZSwgb3IgaWYgd2Ug
c2VlIGEgbmV3IHJvb3QgZWxlbWVudC4KLSAgICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRoZSBu
ZXcgcGFyZW50LgotICAgIGlmICghcGFyZW50c1BhcmVudCB8fCBtX2NoZWNrZXIucGFyZW50U3Rh
Y2tJc0VtcHR5KCkpCi0gICAgICAgIG1fY2hlY2tlci5zZXR1cFBhcmVudFN0YWNrKHBhcmVudCk7
Ci0gICAgZWxzZQotICAgICAgICBtX2NoZWNrZXIucHVzaFBhcmVudChwYXJlbnQpOwotCi0gICAg
Ly8gTm90ZTogV2UgbXVzdG4ndCBza2lwIFNoYWRvd1Jvb3Qgbm9kZXMgZm9yIHRoZSBzY29wZSBz
dGFjay4KLSAgICBwdXNoU2NvcGUocGFyZW50LCBwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSk7
Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJl
bnQpCi17Ci0gICAgLy8gTm90ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSByYW5k
b20gZWxlbWVudHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4KLSAg
ICAvLyBQYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgotICAgIGlmICht
X2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKLSAgICAgICAgbV9jaGVj
a2VyLnBvcFBhcmVudCgpOwotICAgIHBvcFNjb3BlKHBhcmVudCk7Ci19Ci0KLXZvaWQgU3R5bGVS
ZXNvbHZlcjo6cHVzaFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9v
dCkKLXsKLSAgICBBU1NFUlQoc2hhZG93Um9vdC0+aG9zdCgpKTsKLSAgICBwdXNoU2NvcGUoc2hh
ZG93Um9vdCwgc2hhZG93Um9vdC0+aG9zdCgpKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpw
b3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCi17Ci0gICAg
QVNTRVJUKHNoYWRvd1Jvb3QtPmhvc3QoKSk7Ci0gICAgcG9wU2NvcGUoc2hhZG93Um9vdCk7Ci19
Ci0KLS8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHN0eWxlIHNldHRpbmcgZnVuY3Rpb24gZm9yIGtl
eWZyYW1lIHN0eWxlcwotdm9pZCBTdHlsZVJlc29sdmVyOjphZGRLZXlmcmFtZVN0eWxlKFBhc3NS
ZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiBydWxlKQotewotICAgIEF0b21pY1N0cmluZyBzKHJ1
bGUtPm5hbWUoKSk7Ci0gICAgbV9rZXlmcmFtZXNSdWxlTWFwLnNldChzLmltcGwoKSwgcnVsZSk7
Ci19Ci0KLVN0eWxlUmVzb2x2ZXI6On5TdHlsZVJlc29sdmVyKCkKLXsKLSAgICBtX2ZvbnRTZWxl
Y3Rvci0+Y2xlYXJEb2N1bWVudCgpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZSgpCi17Ci0gICAgLy8gTG9vayBmb3IgY2FjaGUgZW50cmllcyBj
b250YWluaW5nIGEgc3R5bGUgZGVjbGFyYXRpb24gd2l0aCBhIHNpbmdsZSByZWYgYW5kIHJlbW92
ZSB0aGVtLgotICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGFuIGVsZW1lbnQgYXR0cmlidXRl
IG11dGF0aW9uIGNhdXNlcyBpdCB0byBzd2FwIG91dCBpdHMgQXR0cmlidXRlOjpkZWNsKCkKLSAg
ICAvLyBmb3IgYW5vdGhlciBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiwgcG90ZW50aWFs
bHkgbGVhdmluZyB0aGlzIGNhY2hlIHdpdGggdGhlIGxhc3QgcmVmLgotICAgIFZlY3Rvcjx1bnNp
Z25lZCwgMTY+IHRvUmVtb3ZlOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9y
IGl0ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmJlZ2luKCk7Ci0gICAgTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZTo6aXRlcmF0b3IgZW5kID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgp
OwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVmVjdG9yPE1hdGNoZWRQ
cm9wZXJ0aWVzPiYgbWF0Y2hlZFByb3BlcnRpZXMgPSBpdC0+c2Vjb25kLm1hdGNoZWRQcm9wZXJ0
aWVzOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNoZWRQcm9wZXJ0aWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRpZXNbaV0ucHJvcGVy
dGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQt
PmZpcnN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytp
KQotICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUucmVtb3ZlKHRvUmVtb3ZlW2ldKTsK
LX0KLQotU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6OkZlYXR1cmVzKCkKLSAgICA6IHVzZXNGaXJz
dExpbmVSdWxlcyhmYWxzZSkKLSAgICAsIHVzZXNCZWZvcmVBZnRlclJ1bGVzKGZhbHNlKQotICAg
ICwgdXNlc0xpbmtSdWxlcyhmYWxzZSkKLXsKLX0KLQotU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6
On5GZWF0dXJlcygpCi17Ci19Ci0gICAgCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjph
ZGQoY29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIG90aGVyKQotewotICAgIEhhc2hTZXQ8
QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBlbmQgPSBvdGhlci5pZHNJblJ1bGVzLmVuZCgp
OwotICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3Ro
ZXIuaWRzSW5SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlkc0luUnVs
ZXMuYWRkKCppdCk7Ci0gICAgZW5kID0gb3RoZXIuYXR0cnNJblJ1bGVzLmVuZCgpOwotICAgIGZv
ciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuYXR0cnNJ
blJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgYXR0cnNJblJ1bGVzLmFk
ZCgqaXQpOwotICAgIHNpYmxpbmdSdWxlcy5hcHBlbmQob3RoZXIuc2libGluZ1J1bGVzKTsKLSAg
ICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChvdGhlci51bmNvbW1vbkF0dHJpYnV0ZVJ1
bGVzKTsKLSAgICB1c2VzRmlyc3RMaW5lUnVsZXMgPSB1c2VzRmlyc3RMaW5lUnVsZXMgfHwgb3Ro
ZXIudXNlc0ZpcnN0TGluZVJ1bGVzOwotICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gdXNlc0Jl
Zm9yZUFmdGVyUnVsZXMgfHwgb3RoZXIudXNlc0JlZm9yZUFmdGVyUnVsZXM7Ci0gICAgdXNlc0xp
bmtSdWxlcyA9IHVzZXNMaW5rUnVsZXMgfHwgb3RoZXIudXNlc0xpbmtSdWxlczsKLX0KLQotdm9p
ZCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlczo6Y2xlYXIoKQotewotICAgIGlkc0luUnVsZXMuY2xl
YXIoKTsKLSAgICBhdHRyc0luUnVsZXMuY2xlYXIoKTsKLSAgICBzaWJsaW5nUnVsZXMuY2xlYXIo
KTsKLSAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7Ci0gICAgdXNlc0ZpcnN0TGlu
ZVJ1bGVzID0gZmFsc2U7Ci0gICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSBmYWxzZTsKLSAgICB1
c2VzTGlua1J1bGVzID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBh
cnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKLXsKLSAgICBTdHlsZVNoZWV0SW50ZXJuYWwq
IHNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsg
dGhlIHNoZWV0IG9uIHB1cnBvc2UKLSAgICBzaGVldC0+cGFyc2VTdHJpbmcoc3RyKTsKLSAgICBy
ZXR1cm4gc2hlZXQ7Ci19Ci0KLXN0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVl
dChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzaXplKQotewotICAgIHJldHVybiBw
YXJzZVVBU2hlZXQoU3RyaW5nKGNoYXJhY3RlcnMsIHNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQg
bG9hZEZ1bGxEZWZhdWx0U3R5bGUoKQotewotICAgIGlmIChzaW1wbGVEZWZhdWx0U3R5bGVTaGVl
dCkgewotICAgICAgICBBU1NFUlQoZGVmYXVsdFN0eWxlKTsKLSAgICAgICAgQVNTRVJUKGRlZmF1
bHRQcmludFN0eWxlID09IGRlZmF1bHRTdHlsZSk7Ci0gICAgICAgIGRlbGV0ZSBkZWZhdWx0U3R5
bGU7Ci0gICAgICAgIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0LT5kZXJlZigpOwotICAgICAgICBk
ZWZhdWx0U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7Ci0gICAgICAgIGRlZmF1
bHRQcmludFN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCkubGVha1B0cigpOwotICAgICAgICBzaW1w
bGVEZWZhdWx0U3R5bGVTaGVldCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKCFk
ZWZhdWx0U3R5bGUpOwotICAgICAgICBkZWZhdWx0U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5s
ZWFrUHRyKCk7Ci0gICAgICAgIGRlZmF1bHRQcmludFN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCku
bGVha1B0cigpOwotICAgICAgICBkZWZhdWx0UXVpcmtzU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUo
KS5sZWFrUHRyKCk7Ci0gICAgfQotCi0gICAgLy8gU3RyaWN0LW1vZGUgcnVsZXMuCi0gICAgU3Ry
aW5nIGRlZmF1bHRSdWxlcyA9IFN0cmluZyhodG1sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9m
KGh0bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkt
PmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKLSAgICBkZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNl
VUFTaGVldChkZWZhdWx0UnVsZXMpOwotICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQoZGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0gICAgZGVmYXVsdFByaW50U3R5
bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGRlZmF1bHRTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7Ci0K
LSAgICAvLyBRdWlya3MtbW9kZSBydWxlcy4KLSAgICBTdHJpbmcgcXVpcmtzUnVsZXMgPSBTdHJp
bmcocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHF1aXJrc1VzZXJBZ2VudFN0eWxl
U2hlZXQpKSArIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+ZXh0cmFRdWlya3NTdHlsZVNo
ZWV0KCk7Ci0gICAgcXVpcmtzU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChxdWlya3NSdWxlcyk7
Ci0gICAgZGVmYXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChxdWlya3NTdHlsZVNo
ZWV0LCBzY3JlZW5FdmFsKCkpOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkU2ltcGxlRGVmYXVsdFN0
eWxlKCkKLXsKLSAgICBBU1NFUlQoIWRlZmF1bHRTdHlsZSk7Ci0gICAgQVNTRVJUKCFzaW1wbGVE
ZWZhdWx0U3R5bGVTaGVldCk7Ci0KLSAgICBkZWZhdWx0U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUo
KS5sZWFrUHRyKCk7Ci0gICAgLy8gVGhlcmUgYXJlIG5vIG1lZGlhLXNwZWNpZmljIHJ1bGVzIGlu
IHRoZSBzaW1wbGUgZGVmYXVsdCBzdHlsZS4KLSAgICBkZWZhdWx0UHJpbnRTdHlsZSA9IGRlZmF1
bHRTdHlsZTsKLSAgICBkZWZhdWx0UXVpcmtzU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFr
UHRyKCk7Ci0KLSAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChzaW1w
bGVVc2VyQWdlbnRTdHlsZVNoZWV0LCBzdHJsZW4oc2ltcGxlVXNlckFnZW50U3R5bGVTaGVldCkp
OwotICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2ltcGxlRGVmYXVsdFN0eWxl
U2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0KLSAgICAvLyBObyBuZWVkIHRvIGluaXRpYWxpemUgcXVp
cmtzIHNoZWV0IHlldCBhcyB0aGVyZSBhcmUgbm8gcXVpcmsgcnVsZXMgZm9yIGVsZW1lbnRzIGFs
bG93ZWQgaW4gc2ltcGxlIGRlZmF1bHQgc3R5bGUuCi19Ci0KLXN0YXRpYyB2b2lkIGxvYWRWaWV3
U291cmNlU3R5bGUoKQotewotICAgIEFTU0VSVCghZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSk7Ci0g
ICAgZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsK
LSAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYXJzZVVBU2hl
ZXQoc291cmNlVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHNvdXJjZVVzZXJBZ2VudFN0eWxl
U2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsKLX0KLQotc3RhdGljIHZvaWQgZW5zdXJlRGVmYXVsdFN0
eWxlU2hlZXRzRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmIChzaW1wbGVE
ZWZhdWx0U3R5bGVTaGVldCAmJiAhZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShlbGVt
ZW50KSkKLSAgICAgICAgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKTsKLQotI2lmIEVOQUJMRShTVkcp
Ci0gICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmICFzdmdTdHlsZVNoZWV0KSB7Ci0g
ICAgICAgIC8vIFNWRyBydWxlcy4KLSAgICAgICAgc3ZnU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVl
dChzdmdVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yoc3ZnVXNlckFnZW50U3R5bGVTaGVldCkp
OwotICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN2Z1N0eWxlU2hlZXQs
IHNjcmVlbkV2YWwoKSk7Ci0gICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChzdmdTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoTUFUSE1MKQotICAgIGlmIChlbGVtZW50LT5pc01hdGhNTEVsZW1lbnQoKSAmJiAhbWF0
aE1MU3R5bGVTaGVldCkgewotICAgICAgICAvLyBNYXRoTUwgcnVsZXMuCi0gICAgICAgIG1hdGhN
TFN0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQobWF0aG1sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKG1hdGhtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLSAgICAgICAgZGVmYXVsdFN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChtYXRoTUxTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgICAg
ICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWF0aE1MU3R5bGVTaGVldCwg
cHJpbnRFdmFsKCkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIGlm
ICghbWVkaWFDb250cm9sc1N0eWxlU2hlZXQgJiYgKGVsZW1lbnQtPmhhc1RhZ05hbWUodmlkZW9U
YWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXVkaW9UYWcpKSkgewotICAgICAgICBTdHJpbmcg
bWVkaWFSdWxlcyA9IFN0cmluZyhtZWRpYUNvbnRyb2xzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKG1lZGlhQ29udHJvbHNVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6dGhl
bWVGb3JQYWdlKGVsZW1lbnQtPmRvY3VtZW50KCktPnBhZ2UoKSktPmV4dHJhTWVkaWFDb250cm9s
c1N0eWxlU2hlZXQoKTsKLSAgICAgICAgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBwYXJzZVVB
U2hlZXQobWVkaWFSdWxlcyk7Ci0gICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQobWVkaWFDb250cm9sc1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0gICAgICAgIGRlZmF1
bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCwg
cHJpbnRFdmFsKCkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQotICAgIGlmICghZnVsbHNjcmVlblN0eWxlU2hlZXQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+
d2Via2l0SXNGdWxsU2NyZWVuKCkpIHsKLSAgICAgICAgU3RyaW5nIGZ1bGxzY3JlZW5SdWxlcyA9
IFN0cmluZyhmdWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKGZ1bGxzY3JlZW5V
c2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJh
RnVsbFNjcmVlblN0eWxlU2hlZXQoKTsKLSAgICAgICAgZnVsbHNjcmVlblN0eWxlU2hlZXQgPSBw
YXJzZVVBU2hlZXQoZnVsbHNjcmVlblJ1bGVzKTsKLSAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRS
dWxlc0Zyb21TaGVldChmdWxsc2NyZWVuU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKLSAgICAg
ICAgZGVmYXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChmdWxsc2NyZWVuU3R5bGVT
aGVldCwgc2NyZWVuRXZhbCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEFTU0VSVChkZWZhdWx0
U3R5bGUtPmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtYXRo
TUxTdHlsZVNoZWV0IHx8IGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKS5zaWJsaW5nUnVsZXMuaXNF
bXB0eSgpKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjphZGRNYXRjaGVkUHJvcGVydGllcyhN
YXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0
eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgYm9vbCBpblJlZ2lvblJ1bGUp
Ci17Ci0gICAgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuZ3JvdyhtYXRjaFJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCkgKyAxKTsKLSAgICBNYXRjaGVkUHJvcGVydGllcyYgbmV3
UHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmxhc3QoKTsKLSAgICBu
ZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwotICAgIG5ld1Byb3BlcnRpZXMu
bGlua01hdGNoVHlwZSA9IGxpbmtNYXRjaFR5cGU7Ci0gICAgbmV3UHJvcGVydGllcy5pc0luUmVn
aW9uUnVsZSA9IGluUmVnaW9uUnVsZTsKLSAgICBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXMuYXBw
ZW5kKHJ1bGUpOwotfQotCi1pbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjphZGRFbGVtZW50U3R5
bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFN0eWxlUHJvcGVydHlTZXQqIHByb3Bl
cnR5U2V0LCBib29sIGlzQ2FjaGVhYmxlKQotewotICAgIGlmICghcHJvcGVydHlTZXQpCi0gICAg
ICAgIHJldHVybjsKLSAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsKLSAgICBpZiAocmVzdWx0LnJhbmdlcy5maXJzdEF1dGhv
clJ1bGUgPT0gLTEpCi0gICAgICAgIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlID0gcmVz
dWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZTsKLSAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1
bHQsIHByb3BlcnR5U2V0KTsKLSAgICBpZiAoIWlzQ2FjaGVhYmxlKQotICAgICAgICByZXN1bHQu
aXNDYWNoZWFibGUgPSBmYWxzZTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0
UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgQVNTRVJUKHJ1
bGVzKTsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKLQotICAgIC8vIFdlIG5lZWQgdG8gY29sbGVj
dCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8g
YSBidWZmZXIgYW5kCi0gICAgLy8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCi0gICAgaWYgKG1fZWxl
bWVudC0+aGFzSUQoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVz
LT5pZFJ1bGVzKG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBmaXJz
dFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7Ci0gICAgaWYgKG1fZWxlbWVudC0+
aGFzQ2xhc3MoKSkgewotICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKLSAgICAgICAg
Y29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcyA9IG1fc3R5bGVkRWxlbWVudC0+Y2xh
c3NOYW1lcygpOwotICAgICAgICBzaXplX3Qgc2l6ZSA9IGNsYXNzTmFtZXMuc2l6ZSgpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+Y2xhc3NSdWxlcyhjbGFzc05hbWVzW2ldLmlt
cGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKLSAgICB9Ci0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IG1fZWxlbWVudC0+c2hhZG93UHNldWRv
SWQoKTsKLSAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQobV9z
dHlsZWRFbGVtZW50KTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVz
LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgZmlyc3RSdWxlSW5k
ZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwotICAgIH0KLSAgICBpZiAobV9lbGVtZW50LT5p
c0xpbmsoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5saW5r
UHNldWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9u
cyk7Ci0gICAgaWYgKG1fY2hlY2tlci5tYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhtX2VsZW1lbnQp
KQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPmZvY3VzUHNldWRv
Q2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7Ci0g
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT50YWdSdWxlcyhtX2VsZW1lbnQt
PmxvY2FsTmFtZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRp
b25zKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPnVuaXZlcnNhbFJ1
bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBy
dWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRj
aE9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKCFtX3JlZ2lvbkZvclN0eWxpbmcpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy0+bV9yZWdpb25TZWxlY3Rv
cnNBbmRSdWxlU2V0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBydWxlcy0+bV9y
ZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvcjsKLSAgICAgICAgaWYgKGNo
ZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPiht
X3JlZ2lvbkZvclN0eWxpbmctPm5vZGUoKSkpKSB7Ci0gICAgICAgICAgICBSdWxlU2V0KiByZWdp
b25SdWxlcyA9IHJ1bGVzLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVT
ZXQuZ2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVnaW9uUnVsZXMpOwotICAgICAgICAgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXMocmVnaW9uUnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVs
ZUluZGV4LCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBTdHlsZVJlc29s
dmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKLXsK
LSAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0KLSAgICBpZiAobV9jaGVja2VyLmlzQ29sbGVjdGluZ1J1
bGVzT25seSgpKSB7Ci0gICAgICAgIGlmICghbV9ydWxlTGlzdCkKLSAgICAgICAgICAgIG1fcnVs
ZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1f
cnVsZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmNyZWF0
ZUNTU09NV3JhcHBlcigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE5vdyB0
cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNs
YXJhdGlvbnMuCi0gICAgLy8gRklYTUU6IFRoaXMgc3Vja3MsIHRoZSBpbnNwZWN0b3Igc2hvdWxk
IGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgdmlzaXRlZCBzdHlsZSBpdHNlbGYuCi0gICAgYm9vbCBz
d2FwVmlzaXRlZFVudmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1
ZG9TdGF0ZShtX2VsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAg
ICAgaWYgKG1fc3R5bGUgJiYgbV9tYXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5zVW5jb21tb25BdHRy
aWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0QWZmZWN0ZWRCeVVuY29t
bW9uQXR0cmlidXRlU2VsZWN0b3JzKCk7Ci0gICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUg
PSBtX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpOwotICAgICAgICBpZiAoc3dhcFZp
c2l0ZWRVbnZpc2l0ZWQgJiYgbGlua01hdGNoVHlwZSAmJiBsaW5rTWF0Y2hUeXBlICE9IFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hBbGwpCi0gICAgICAgICAgICBsaW5rTWF0Y2hUeXBlID0gKGxpbmtN
YXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpID8gU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaExpbmsgOiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKLSAgICAgICAg
YWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5w
cm9wZXJ0aWVzKCksIG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCksIGxpbmtNYXRjaFR5cGUsIG1f
bWF0Y2hlZFJ1bGVzW2ldLT5pc0luUmVnaW9uUnVsZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3R5
bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKQotewotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAg
aWYgKG1fc2NvcGVkQXV0aG9yU3R5bGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgTWF0Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMpOwotCi0gICAgLy8gTWF0
Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBz
dGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KLSAgICBjb25zdCBDb250
YWluZXJOb2RlKiBwYXJlbnQgPSBtX2VsZW1lbnQtPnBhcmVudE9ySG9zdE5vZGUoKTsKLSAgICBp
ZiAoIXNjb3BlU3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKLSAgICAgICAgc2V0dXBTY29wZVN0
YWNrKHBhcmVudCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IG1fc2NvcGVTdGFjay5zaXplKCk7IGk7
IC0taSkgewotICAgICAgICBjb25zdCBTY29wZVN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVN0
YWNrW2kgLSAxXTsKLSAgICAgICAgb3B0aW9ucy5zY29wZSA9IGZyYW1lLm1fc2NvcGU7Ci0gICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5m
aXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOwot
ICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihmcmFtZS5tX3J1bGVTZXQsIHJl
c3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxl
LCBvcHRpb25zKTsKLSAgICB9Ci0gICAgLy8gQWxzbyBpbmNsdWRlIHRoZSBjdXJyZW50IGVsZW1l
bnQuCi0gICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3JTY29wZShtX2VsZW1lbnQpOwot
ICAgIGlmIChydWxlU2V0KSB7Ci0gICAgICAgIG9wdGlvbnMuc2NvcGUgPSBtX2VsZW1lbnQ7Ci0g
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RB
dXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKLSAgICAg
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24ocnVsZVNldCwgcmVzdWx0LnJhbmdlcy5m
aXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOwot
ICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSNlbmRpZgotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cykKLXsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwotICAgIHJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKLQotICAg
IGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXRjaCBnbG9iYWwg
YXV0aG9yIHJ1bGVzLgotICAgIE1hdGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVz
KTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQu
cmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0
aW9ucyk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV9hdXRob3JTdHlsZS5n
ZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1
dGhvclJ1bGUsIG9wdGlvbnMpOwotCi0gICAgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhyZXN1bHQs
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKLQotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhy
ZXN1bHQpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCi17Ci0gICAgaWYgKCFtX3VzZXJT
dHlsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7
Ci0KLSAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVy
dGllcy5zaXplKCkgLSAxOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1fdXNlclN0eWxlLmdl
dCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJS
dWxlLCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdp
b24obV91c2VyU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgcmVzdWx0
LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLQotICAgIHNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKLXsKLSAgICBt
X21hdGNoZWRSdWxlcy5jbGVhcigpOwotICAgIAotICAgIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVs
ZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwotICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKHJ1bGVzLCByZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCByZXN1bHQucmFuZ2Vz
Lmxhc3RVQVJ1bGUsIGZhbHNlKTsKLQotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhy
ZXN1bHQpOwotfQotCi1jbGFzcyBNYXRjaGluZ1VBUnVsZXNTY29wZSB7Ci1wdWJsaWM6Ci0gICAg
TWF0Y2hpbmdVQVJ1bGVzU2NvcGUoKTsKLSAgICB+TWF0Y2hpbmdVQVJ1bGVzU2NvcGUoKTsKLQot
ICAgIHN0YXRpYyBib29sIGlzTWF0Y2hpbmdVQVJ1bGVzKCk7Ci0KLXByaXZhdGU6Ci0gICAgc3Rh
dGljIGJvb2wgbV9tYXRjaGluZ1VBUnVsZXM7Ci19OwotCi1NYXRjaGluZ1VBUnVsZXNTY29wZTo6
TWF0Y2hpbmdVQVJ1bGVzU2NvcGUoKQotewotICAgIEFTU0VSVCghbV9tYXRjaGluZ1VBUnVsZXMp
OwotICAgIG1fbWF0Y2hpbmdVQVJ1bGVzID0gdHJ1ZTsKLX0KLQotTWF0Y2hpbmdVQVJ1bGVzU2Nv
cGU6On5NYXRjaGluZ1VBUnVsZXNTY29wZSgpCi17Ci0gICAgbV9tYXRjaGluZ1VBUnVsZXMgPSBm
YWxzZTsKLX0KLQotaW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdV
QVJ1bGVzKCkKLXsKLSAgICByZXR1cm4gbV9tYXRjaGluZ1VBUnVsZXM7Ci19Ci0KLWJvb2wgTWF0
Y2hpbmdVQVJ1bGVzU2NvcGU6Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7Ci0KLXZvaWQgU3R5
bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNv
bnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIXJ1bGVzKQotICAgICAgICBy
ZXR1cm47Ci0gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5
bGUgZm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUg
cmVzb2x2ZS4KLSAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10
by1kYXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCi0gICAg
Ym9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9jaGVja2VyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50
KG1fcGFyZW50Tm9kZSk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFJ1
bGVEYXRhJiBydWxlRGF0YSA9IHJ1bGVzLT5hdChpKTsKLSAgICAgICAgaWYgKGNhblVzZUZhc3RS
ZWplY3QgJiYgbV9jaGVja2VyLmZhc3RSZWplY3RTZWxlY3RvcjxSdWxlRGF0YTo6bWF4aW11bUlk
ZW50aWZpZXJDb3VudD4ocnVsZURhdGEuZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hl
cygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFN0eWxlUnVsZSogcnVsZSA9
IHJ1bGVEYXRhLnJ1bGUoKTsKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
IGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1hdGNoUnVsZShkb2N1bWVu
dCgpLCBydWxlKTsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICAgICBpZiAoY2hlY2tT
ZWxlY3RvcihydWxlRGF0YSwgb3B0aW9ucy5zY29wZSkpIHsKLSNlbHNlCi0gICAgICAgIGlmIChj
aGVja1NlbGVjdG9yKHJ1bGVEYXRhKSkgewotI2VuZGlmCi0gICAgICAgICAgICAvLyBDaGVjayB3
aGV0aGVyIHRoZSBydWxlIGlzIGFwcGxpY2FibGUgaW4gdGhlIGN1cnJlbnQgdHJlZSBzY29wZS4g
Q3JpdGVyaWEgZm9yIHRoaXM6Ci0gICAgICAgICAgICAvLyBhKSBpdCdzIGEgVUEgcnVsZQotICAg
ICAgICAgICAgLy8gYikgdGhlIHRyZWUgc2NvcGUgYWxsb3dzIGF1dGhvciBydWxlcwotICAgICAg
ICAgICAgLy8gYykgdGhlIHJ1bGVzIGNvbWVzIGZyb20gYSBzY29wZWQgc3R5bGUgc2hlZXQgd2l0
aGluIHRoZSBzYW1lIHRyZWUgc2NvcGUKLSAgICAgICAgICAgIC8vIGQpIHRoZSBydWxlIGNvbnRh
aW5zIHNoYWRvdy1JRCBwc2V1ZG8gZWxlbWVudHMKLSAgICAgICAgICAgIFRyZWVTY29wZSogdHJl
ZVNjb3BlID0gbV9lbGVtZW50LT50cmVlU2NvcGUoKTsKLSAgICAgICAgICAgIGlmICghTWF0Y2hp
bmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKLSAgICAgICAgICAgICAgICAmJiAh
dHJlZVNjb3BlLT5hcHBseUF1dGhvclNoZWV0cygpCi0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkK
LSAgICAgICAgICAgICAgICAmJiAoIW9wdGlvbnMuc2NvcGUgfHwgb3B0aW9ucy5zY29wZS0+dHJl
ZVNjb3BlKCkgIT0gdHJlZVNjb3BlKQotI2VuZGlmCi0gICAgICAgICAgICAgICAgJiYgIW1fY2hl
Y2tlci5oYXNVbmtub3duUHNldWRvRWxlbWVudHMoKSkgewotCi0gICAgICAgICAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJZiB0
aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhl
IG5vbi1kZWJ1ZyBtb2RlLgotICAgICAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGll
cyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIGlmICghcHJvcGVydGllcyB8fCAo
cHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFvcHRpb25zLmluY2x1ZGVFbXB0eVJ1bGVzKSkgewot
ICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNv
b2tpZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgLy8gRklYTUU6IEV4cG9zaW5nIHRoZSBub24tc3RhbmRhcmQgZ2V0TWF0Y2hl
ZENTU1J1bGVzIEFQSSB0byB3ZWIgaXMgdGhlIG9ubHkgcmVhc29uIHRoaXMgaXMgbmVlZGVkLgot
ICAgICAgICAgICAgaWYgKG1fc2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVEYXRhLmhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4oKSkgewotICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9y
bWFsIHJ1bGVzLCBzZXQgYSBwc2V1ZG8gYml0IGlmCi0gICAgICAgICAgICAvLyB3ZSByZWFsbHkg
anVzdCBtYXRjaGVkIGEgcHNldWRvLWVsZW1lbnQuCi0gICAgICAgICAgICBpZiAobV9keW5hbWlj
UHNldWRvICE9IE5PUFNFVURPICYmIG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpID09IE5PUFNFVURP
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY2hlY2tlci5pc0NvbGxlY3RpbmdSdWxlc09ubHko
KSkgewotICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1h
dGNoUnVsZShjb29raWUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gPCBG
SVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNldWRvKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5kaWNlcyBpbiB0
aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KLSAgICAgICAgICAgICAgICArK2xhc3RSdWxlSW5kZXg7
Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0UnVsZUluZGV4ID09IC0xKQotICAgICAgICAgICAg
ICAgICAgICBmaXJzdFJ1bGVJbmRleCA9IGxhc3RSdWxlSW5kZXg7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAgICAg
ICAgICAgICAgYWRkTWF0Y2hlZFJ1bGUoJnJ1bGVEYXRhKTsKLSAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIHRydWUpOwotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwotICAg
IH0KLX0KLQotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0YSog
cjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKLXsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTEgPSBy
MS0+c3BlY2lmaWNpdHkoKTsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTIgPSByMi0+c3BlY2lm
aWNpdHkoKTsKLSAgICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEt
PnBvc2l0aW9uKCkgPCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5
MjsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKLXsKLSAgICBz
dGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCksIGNv
bXBhcmVSdWxlcyk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0KQotewotICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQpOwotCi0gICAgLy8g
Tm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCi0gICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzKQotICAgICAgICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQsIGZhbHNlKTsKLSAgICAg
ICAgCi0gICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGgg
cHJlc2VudGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgotICAgIGlmIChtX3N0
eWxlZEVsZW1lbnQpIHsKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQs
IG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5bGUoKSk7Ci0KLSAgICAgICAgLy8gTm93IHdl
IGNoZWNrIGFkZGl0aW9uYWwgbWFwcGVkIGRlY2xhcmF0aW9ucy4KLSAgICAgICAgLy8gVGFibGVz
IGFuZCB0YWJsZSBjZWxscyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVz
dCBiZSBhcHBsaWVkCi0gICAgICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVp
ciBtYXBwZWQgc3R5bGUgZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0
ZXMuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVs
ZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpKTsKLQotICAgICAgICBpZiAobV9zdHls
ZWRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGJvb2wgaXNBdXRvOwot
ICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudCht
X3N0eWxlZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1
dG8pOwotICAgICAgICAgICAgaWYgKGlzQXV0bykKLSAgICAgICAgICAgICAgICBhZGRNYXRjaGVk
UHJvcGVydGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmlnaHREZWNs
YXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgotICAg
IGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgbWF0Y2hBdXRob3JSdWxl
cyhyZXN1bHQsIGZhbHNlKTsKLQotICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0
dHJpYnV0ZS4KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRF
bGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkgewotICAgICAgICAvLyBJ
bmxpbmUgc3R5bGUgaXMgaW1tdXRhYmxlIGFzIGxvbmcgYXMgdGhlcmUgaXMgbm8gQ1NTT00gd3Jh
cHBlci4KLSAgICAgICAgLy8gRklYTUU6IE1lZGlhIGNvbnRyb2wgc2hhZG93IHRyZWVzIHNlZW0g
dG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGNhY2hpbmcuCi0gICAgICAgIGJvb2wgaXNJbmxpbmVTdHls
ZUNhY2hlYWJsZSA9ICFtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgp
ICYmICFtX3N0eWxlZEVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk7Ci0gICAgICAgIC8vIEZJWE1F
OiBDb25zdGlmeS4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIGNv
bnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0eVNldCo+KG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUo
KSksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOwotICAgIH0KLQotI2lmIEVOQUJMRShTVkcpCi0g
ICAgLy8gTm93IGNoZWNrIFNNSUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0eWxlLgotICAgIGlmICht
X21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHlsZWRF
bGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGll
cyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQpLT5hbmlt
YXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOwotI2Vu
ZGlmCi19Ci0KLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQq
IGUpCi17Ci0gICAgaWYgKG1fZWxlbWVudCAhPSBlKSB7Ci0gICAgICAgIG1fZWxlbWVudCA9IGU7
Ci0gICAgICAgIG1fc3R5bGVkRWxlbWVudCA9IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU3R5
bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCkgOiAw
OwotICAgICAgICBtX2VsZW1lbnRMaW5rU3RhdGUgPSBtX2NoZWNrZXIuZGV0ZXJtaW5lTGlua1N0
YXRlKG1fZWxlbWVudCk7Ci0gICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9j
dW1lbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlv
blNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKLSAgICAgICAgICAgIGUtPmRvY3VtZW50KCkt
PnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi1pbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0Rm9yU3R5bGVSZXNvbHZl
KEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQgcHNldWRvSUQp
Ci17Ci0gICAgbV9jaGVja2VyLnNldFBzZXVkb1N0eWxlKHBzZXVkb0lEKTsKLQotICAgIG1fcGFy
ZW50Tm9kZSA9IGUgPyBlLT5wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKSA6IDA7Ci0K
LSAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHls
ZTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBtX3BhcmVudE5vZGUgPyBtX3Bh
cmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOwotCi0gICAgTm9kZSogZG9jRWxlbWVudCA9IGUg
PyBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7Ci0gICAgUmVuZGVyU3R5bGUq
IGRvY1N0eWxlID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnJlbmRlclN0eWxlKCk7Ci0gICAgbV9y
b290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVt
ZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7Ci0KLSAgICBtX3N0eWxlID0gMDsKLQotICAg
IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOwotCi0gICAgbV9ydWxlTGlzdCA9IDA7
Ci0KLSAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwotfQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQg
Y1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxl
U2VhcmNoTGV2ZWxUaHJlc2hvbGQgPSAxMDsKLQotTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRl
Q291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBj
b25zdAotewotICAgIGlmICh2aXNpdGVkTm9kZUNvdW50ID49IGNTdHlsZVNlYXJjaFRocmVzaG9s
ZCAqIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkKQotICAgICAgICByZXR1cm4gMDsKLSAgICBp
ZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBpZiAocGFyZW50LT5oYXNTY29wZWRI
VE1MU3R5bGVDaGlsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSNlbmRpZgotICAgIFN0eWxlZEVs
ZW1lbnQqIHAgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKLSAgICBpZiAo
cC0+aW5saW5lU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jaWYgRU5BQkxFKFNWRykKLSAg
ICBpZiAocC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHApLT5h
bmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYK
LSAgICBpZiAocC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMocC0+
aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHAtPnJlbmRlclN0eWxlKCk7Ci0gICAgdW5zaWdu
ZWQgc3ViY291bnQgPSAwOwotICAgIE5vZGUqIHRoaXNDb3VzaW4gPSBwOwotICAgIE5vZGUqIGN1
cnJlbnROb2RlID0gcC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0KLSAgICAvLyBSZXNlcnZlIHRoZSB0
cmllcyBmb3IgdGhpcyBsZXZlbC4gVGhpcyBlZmZlY3RpdmVseSBtYWtlcyBzdXJlIHRoYXQgdGhl
IGFsZ29yaXRobQotICAgIC8vIHdpbGwgbmV2ZXIgZ28gZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNo
TGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVjdXJzaW9uLgotICAgIHZpc2l0ZWROb2RlQ291
bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOwotICAgIHdoaWxlICh0aGlzQ291c2luKSB7Ci0g
ICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgewotICAgICAgICAgICAgKytzdWJjb3VudDsKLSAg
ICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAm
JiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBBZGp1c3Qg
Zm9yIHVudXNlZCByZXNlcnZlZCB0cmllcy4KLSAgICAgICAgICAgICAgICB2aXNpdGVkTm9kZUNv
dW50IC09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAtIHN1YmNvdW50OwotICAgICAgICAgICAgICAg
IHJldHVybiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoc3ViY291bnQgPj0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQotICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJl
dmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudE5vZGUgPSBsb2NhdGVD
b3VzaW5MaXN0KHRoaXNDb3VzaW4tPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5vZGVDb3VudCk7
Ci0gICAgICAgIHRoaXNDb3VzaW4gPSBjdXJyZW50Tm9kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
MDsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjptYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxl
U2V0KQotewotICAgIGlmICghcnVsZVNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
bWF0Y2hlZFJ1bGVzLmNsZWFyKCk7Ci0KLSAgICBpbnQgZmlyc3RSdWxlSW5kZXggPSAtMSwgbGFz
dFJ1bGVJbmRleCA9IC0xOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQsIGZpcnN0
UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBmYWxzZSk7Ci0KLSAgICBpZiAobV9tYXRjaGVkUnVs
ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tYXRjaGVkUnVsZXMu
Y2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5T
aGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAg
ICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVs
ZW1lbnQoKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IG1fZWxl
bWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLQotICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8fCAh
b3RoZXJJbnB1dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh0aGlz
SW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNBdXRv
ZmlsbGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodGhpc0lucHV0RWxlbWVu
dC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5zaG91bGRBcHBl
YXJDaGVja2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodGhpc0lucHV0RWxl
bWVudC0+aXNJbmRldGVybWluYXRlKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1p
bmF0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQt
PnJlcXVpcmVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPnJlcXVpcmVkKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9
IG1fZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBtX2VsZW1l
bnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMo
KSkgewotICAgICAgICBib29sIHdpbGxWYWxpZGF0ZSA9IGVsZW1lbnQtPndpbGxWYWxpZGF0ZSgp
OwotCi0gICAgICAgIGlmICh3aWxsVmFsaWRhdGUgIT0gbV9lbGVtZW50LT53aWxsVmFsaWRhdGUo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAod2lsbFZhbGlkYXRl
ICYmIChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gbV9lbGVtZW50LT5p
c1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlzSW5SYW5n
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChlbGVtZW50LT5p
c091dE9mUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGlzIGZ1
bmN0aW9uIG1ha2VzIHNvbWUgYXNzdW1wdGlvbnMgdGhhdCBvbmx5IG1ha2Ugc2Vuc2UgZm9yIGF0
dHJpYnV0ZSBzdHlsZXMgKHdlIG9ubHkgY29tcGFyZSBDU1NQcm9wZXJ0eTo6aWQoKSBhbmQgQ1NT
UHJvcGVydHk6OnZhbHVlKCkuKQotc3RhdGljIGlubGluZSBib29sIGF0dHJpYnV0ZVN0eWxlc0Vx
dWFsKFN0eWxlUHJvcGVydHlTZXQqIGEsIFN0eWxlUHJvcGVydHlTZXQqIGIpCi17Ci0gICAgaWYg
KGEgPT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGEtPnByb3BlcnR5Q291bnQo
KSAhPSBiLT5wcm9wZXJ0eUNvdW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNp
Z25lZCBwcm9wZXJ0eUNvdW50ID0gYS0+cHJvcGVydHlDb3VudCgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3QgQ1NTUHJv
cGVydHkmIGFQcm9wZXJ0eSA9IGEtPnByb3BlcnR5QXQoaSk7Ci0gICAgICAgIHVuc2lnbmVkIGo7
Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBwcm9wZXJ0eUNvdW50OyArK2opIHsKLSAgICAgICAg
ICAgIGNvbnN0IENTU1Byb3BlcnR5JiBiUHJvcGVydHkgPSBiLT5wcm9wZXJ0eUF0KGopOwotICAg
ICAgICAgICAgaWYgKGFQcm9wZXJ0eS5pZCgpICE9IGJQcm9wZXJ0eS5pZCgpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gV2UgY291bGQgZ2V0IGEgZmV3IG1vcmUg
aGl0cyBieSBjb21wYXJpbmcgY3NzVGV4dCgpIGhlcmUsIGJ1dCB0aGF0IGdldHMgZXhwZW5zaXZl
IHF1aWNrbHkuCi0gICAgICAgICAgICBpZiAoYVByb3BlcnR5LnZhbHVlKCkgIT0gYlByb3BlcnR5
LnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGogPT0gcHJvcGVydHlDb3VudCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBi
b29sIGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgcmV0
dXJuIGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5o
YXNEaXJlY3Rpb25BdXRvKCk7Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHls
ZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLQotICAgIGlmICghc3R5bGUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3R5bGUtPnVuaXF1ZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gbV9lbGVtZW50
LT50YWdRTmFtZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmhh
c0NsYXNzKCkgIT0gbV9lbGVtZW50LT5oYXNDbGFzcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0
aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGll
cygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAoISFlbGVtZW50LT5h
dHRyaWJ1dGVTdHlsZSgpICE9ICEhbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3R5bGVQcm9wZXJ0eVNldCogYWRkaXRpb25hbEF0
dHJpYnV0ZVN0eWxlQSA9IGVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpOwotICAg
IFN0eWxlUHJvcGVydHlTZXQqIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZUIgPSBtX3N0eWxlZEVs
ZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpOwotICAgIGlmICghYWRkaXRpb25hbEF0
dHJpYnV0ZVN0eWxlQSAhPSAhYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAhPSBtX2VsZW1lbnQtPmlzTGlu
aygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0eWxlLT5hZmZlY3RlZEJ5VW5j
b21tb25BdHRyaWJ1dGVTZWxlY3RvcnMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gbV9lbGVtZW50LT5ob3ZlcmVkKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgIT0gbV9lbGVtZW50LT5hY3Rp
dmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkg
IT0gbV9lbGVtZW50LT5mb2N1c2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
ZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSAhPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1
bWVudCgpLT5jc3NUYXJnZXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2Vs
ZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpICE9IG1f
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0g
bV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0
cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0
cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjZWxscGFk
ZGluZ0F0dHIpICE9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBt
X2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRp
b24oKS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoU1RZTEVf
U0NPUEVEKQotICAgIGlmIChlbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0g
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7Ci0gICAgICAgIGlmICgh
bV9lbGVtZW50LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiB0aGlzUHJvZ3Jlc3NFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KGVsZW1lbnQpOwotICAgICAgICBI
VE1MUHJvZ3Jlc3NFbGVtZW50KiBvdGhlclByb2dyZXNzRWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxQcm9ncmVzc0VsZW1lbnQqPihtX2VsZW1lbnQpOwotICAgICAgICBpZiAodGhpc1Byb2dyZXNz
RWxlbWVudC0+aXNEZXRlcm1pbmF0ZSgpICE9IG90aGVyUHJvZ3Jlc3NFbGVtZW50LT5pc0RldGVy
bWluYXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCk7Ci0KLSAgICBpZiAoaXNDb250cm9sICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGlzQ29udHJvbCAmJiAhY2Fu
U2hhcmVTdHlsZVdpdGhDb250cm9sKGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
ICAgIC8vIFR1cm4gb2ZmIHN0eWxlIHNoYXJpbmcgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGdhaW4g
bGF5ZXJzIGZvciByZWFzb25zIG91dHNpZGUgb2YgdGhlIHN0eWxlIHN5c3RlbS4KLSAgICAvLyBT
ZWUgY29tbWVudHMgaW4gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSgpLgotICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykg
fHwgZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShv
YmplY3RUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKQotI2lmIEVOQUJMRShQ
TFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgICAgICAvLyBXaXRoIHByb3h5aW5nLCB0aGUgbWVk
aWEgZWxlbWVudHMgYXJlIGJhY2tlZCBieSBhIFJlbmRlckVtYmVkZGVkT2JqZWN0LgotICAgICAg
ICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KGF1ZGlvVGFnKQotI2VuZGlmCi0gICAgICAgICkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi0KLSAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkgfHwgZWxlbWVu
dEhhc0RpcmVjdGlvbkF1dG8obV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xh
c3NBdHRyKSAhPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkgJiYgIWF0dHJp
YnV0ZVN0eWxlc0VxdWFsKGVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCksIG1fc3R5bGVkRWxlbWVu
dC0+YXR0cmlidXRlU3R5bGUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChh
ZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVBICYmICFhdHRyaWJ1dGVTdHlsZXNFcXVhbChhZGRpdGlv
bmFsQXR0cmlidXRlU3R5bGVBLCBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVCKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICYmIG1fZWxlbWVudExp
bmtTdGF0ZSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2
ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5vZGUsIHVuc2lnbmVkJiBjb3Vu
dCkgY29uc3QKLXsKLSAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGlu
ZygpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0aWNf
Y2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSkpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUp
OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgcGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcoY29u
c3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQotewotICAgIHJldHVybiBwYXJlbnRTdHlsZS0+
Y2hpbGRyZW5BZmZlY3RlZEJ5UG9zaXRpb25hbFJ1bGVzKCkKLSAgICAgICAgfHwgcGFyZW50U3R5
bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpCi0gICAgICAgIHx8IHBhcmVu
dFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpIAotICAgICAgICB8fCBw
YXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwotfQot
Ci1SZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQotewotICAg
IGlmICghbV9zdHlsZWRFbGVtZW50IHx8ICFtX3BhcmVudFN0eWxlKQotICAgICAgICByZXR1cm4g
MDsKLSAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5
IHVuaXF1ZS4KLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKQotICAgICAg
ICByZXR1cm4gMDsKLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlz
U1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQp
LT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jZW5k
aWYKLSAgICAvLyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUg
c3R5bGVzaGVldHMuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1
cmVzLmlkc0luUnVsZXMuY29udGFpbnMobV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1
dGlvbigpLmltcGwoKSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChwYXJlbnRTdHlsZVBy
ZXZlbnRzU2hhcmluZyhtX3BhcmVudFN0eWxlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1M
U3R5bGVDaGlsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSNlbmRpZgotCi0gICAgLy8gQ2hlY2sg
cHJldmlvdXMgc2libGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCi0gICAgdW5zaWduZWQgY291bnQg
PSAwOwotICAgIHVuc2lnbmVkIHZpc2l0ZWROb2RlQ291bnQgPSAwOwotICAgIFN0eWxlZEVsZW1l
bnQqIHNoYXJlRWxlbWVudCA9IDA7Ci0gICAgTm9kZSogY291c2luTGlzdCA9IG1fc3R5bGVkRWxl
bWVudC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgd2hpbGUgKGNvdXNpbkxpc3QpIHsKLSAgICAg
ICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoY291c2luTGlzdCwg
Y291bnQpOwotICAgICAgICBpZiAoc2hhcmVFbGVtZW50KQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNvdXNpbkxpc3QgPSBsb2NhdGVDb3VzaW5MaXN0KGNvdXNpbkxpc3QtPnBhcmVudEVs
ZW1lbnQoKSwgdmlzaXRlZE5vZGVDb3VudCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgaGF2ZSBl
eGhhdXN0ZWQgYWxsIG91ciBidWRnZXQgb3Igb3VyIGNvdXNpbnMuCi0gICAgaWYgKCFzaGFyZUVs
ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgc2libGlu
ZyBydWxlcyBhcHBseS4gVGhpcyBpcyBjaGVja2VkIGF0IHRoZSBlbmQgYXMgaXQgc2hvdWxkIHJh
cmVseSBmYWlsLgotICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3NpYmxpbmdSdWxlU2V0LmdldCgp
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1
bGVzIGFwcGx5LgotICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmlidXRlUnVs
ZVNldC5nZXQoKSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIC8vIFRyYWNraW5nIGNoaWxkIGlu
ZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0
IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCi0gICAgaWYgKHBhcmVudFN0eWxlUHJl
dmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQotewotICAgIE1hdGNoaW5nVUFSdWxl
c1Njb3BlIHNjb3BlOwotCi0gICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNl
ciBhZ2VudCBzaGVldC4KLSAgICBpZiAoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpCi0gICAgICAg
IHJlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOwotICAgIFJ1bGVTZXQqIHVzZXJBZ2VudFN0eWxl
U2hlZXQgPSBtX21lZGl1bS0+bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQiKQotICAgICAg
ICA/IGRlZmF1bHRQcmludFN0eWxlIDogZGVmYXVsdFN0eWxlOwotICAgIG1hdGNoVUFSdWxlcyhy
ZXN1bHQsIHVzZXJBZ2VudFN0eWxlU2hlZXQpOwotCi0gICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdl
IG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgotICAgIGlmICgh
bV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSkKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwg
ZGVmYXVsdFF1aXJrc1N0eWxlKTsKLQotICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBzb3Vy
Y2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSksIHRo
ZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCi0gICAg
aWYgKG1fY2hlY2tlci5kb2N1bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSkgewotICAgICAgICBpZiAo
IWRlZmF1bHRWaWV3U291cmNlU3R5bGUpCi0gICAgICAgICAgICBsb2FkVmlld1NvdXJjZVN0eWxl
KCk7Ci0gICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIGRlZmF1bHRWaWV3U291cmNlU3R5bGUp
OwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQsIENTU0ZvbnRTZWxlY3RvciogZm9udFNl
bGVjdG9yKQotewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotCi0gICAg
UmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgp
OwotICAgIGRvY3VtZW50U3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwotICAgIGRvY3VtZW50U3R5
bGUtPnNldFJUTE9yZGVyaW5nKGRvY3VtZW50LT52aXN1YWxseU9yZGVyZWQoKSA/IFZpc3VhbE9y
ZGVyIDogTG9naWNhbE9yZGVyKTsKLSAgICBkb2N1bWVudFN0eWxlLT5zZXRab29tKGZyYW1lICYm
ICFkb2N1bWVudC0+cHJpbnRpbmcoKSA/IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpIDogMSk7Ci0g
ICAgZG9jdW1lbnRTdHlsZS0+c2V0UGFnZVNjYWxlVHJhbnNmb3JtKGZyYW1lID8gZnJhbWUtPmZy
YW1lU2NhbGVGYWN0b3IoKSA6IDEpOwotICAgIGRvY3VtZW50U3R5bGUtPnNldFVzZXJNb2RpZnko
ZG9jdW1lbnQtPmluRGVzaWduTW9kZSgpID8gUkVBRF9XUklURSA6IFJFQURfT05MWSk7Ci0gICAg
ZG9jdW1lbnRTdHlsZS0+c2V0TG9jYWxlKGRvY3VtZW50LT5jb250ZW50TGFuZ3VhZ2UoKSk7Ci0K
LSAgICBFbGVtZW50KiBkb2NFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwot
ICAgIFJlbmRlck9iamVjdCogZG9jRWxlbWVudFJlbmRlcmVyID0gZG9jRWxlbWVudCA/IGRvY0Vs
ZW1lbnQtPnJlbmRlcmVyKCkgOiAwOwotICAgIGlmIChkb2NFbGVtZW50UmVuZGVyZXIpIHsKLSAg
ICAgICAgLy8gVXNlIHRoZSBkaXJlY3Rpb24gYW5kIHdyaXRpbmctbW9kZSBvZiB0aGUgYm9keSB0
byBzZXQgdGhlCi0gICAgICAgIC8vIHZpZXdwb3J0J3MgZGlyZWN0aW9uIGFuZCB3cml0aW5nLW1v
ZGUgdW5sZXNzIHRoZSBwcm9wZXJ0eSBpcyBzZXQgb24gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0g
ICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGJvZHksIHRoZW4gdXNlIHRoZSBkb2N1bWVudCBlbGVt
ZW50LgotICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlSZW5kZXJlciA9IGRvY3VtZW50LT5ib2R5
KCkgPyBkb2N1bWVudC0+Ym9keSgpLT5yZW5kZXJlcigpIDogMDsKLSAgICAgICAgaWYgKGJvZHlS
ZW5kZXJlciAmJiAhZG9jdW1lbnQtPndyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkK
LSAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFdyaXRpbmdNb2RlKGJvZHlSZW5kZXJlci0+
c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvY3Vt
ZW50U3R5bGUtPnNldFdyaXRpbmdNb2RlKGRvY0VsZW1lbnRSZW5kZXJlci0+c3R5bGUoKS0+d3Jp
dGluZ01vZGUoKSk7Ci0gICAgICAgIGlmIChib2R5UmVuZGVyZXIgJiYgIWRvY3VtZW50LT5kaXJl
Y3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+
c2V0RGlyZWN0aW9uKGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXREaXJlY3Rpb24oZG9jRWxlbWVu
dFJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7Ci0gICAgfQotCi0gICAgaWYgKGZyYW1l
KSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgewotICAgICAgICAg
ICAgY29uc3QgUGFnZTo6UGFnaW5hdGlvbiYgcGFnaW5hdGlvbiA9IHBhZ2UtPnBhZ2luYXRpb24o
KTsKLSAgICAgICAgICAgIGlmIChwYWdpbmF0aW9uLm1vZGUgIT0gUGFnZTo6UGFnaW5hdGlvbjo6
VW5wYWdpbmF0ZWQpIHsKLSAgICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRDb2x1bW5B
eGlzKHBhZ2luYXRpb24ubW9kZSA9PSBQYWdlOjpQYWdpbmF0aW9uOjpIb3Jpem9udGFsbHlQYWdp
bmF0ZWQgPyBIb3Jpem9udGFsQ29sdW1uQXhpcyA6IFZlcnRpY2FsQ29sdW1uQXhpcyk7Ci0gICAg
ICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Q29sdW1uR2FwKHBhZ2luYXRpb24uZ2FwKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb247Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRv
Y3VtZW50LT5wcmludGluZygpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2Fs
ZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oZG9jdW1lbnRTdHlsZS0+bG9jYWxlKCkpKTsK
LSAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKLSAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5k
ZXJpbmdNb2RlKCkpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5kYXJkRm9udCA9
IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoZm9udERlc2NyaXB0aW9uLnNjcmlwdCgpKTsK
LSAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFt
aWx5KTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWls
eShzdGFuZGFyZEZvbnQpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5
KCkuYXBwZW5kRmFtaWx5KDApOwotICAgICAgICB9Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAg
ICAgICBpbnQgc2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVu
dCwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNw
ZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzID0gZG9jdW1l
bnQtPmlzU1ZHRG9jdW1lbnQoKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1
bWVudCwgZG9jdW1lbnRTdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXpl
KCksIHNpemUsIHVzZVNWR1pvb21SdWxlcykpOwotICAgIH0KLQotICAgIGRvY3VtZW50U3R5bGUt
PnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgIGRvY3VtZW50U3R5bGUt
PmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKLQotICAgIHJldHVybiBkb2N1bWVudFN0eWxl
LnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShF
bGVtZW50KiBlbGVtZW50KQotewotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSBlbGVtZW50LT5wYXJlbnROb2Rl
KCk7Ci0gICAgcmV0dXJuIHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+aXNTaGFkb3dSb290KCk7
Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVudCwKLSAgICBT
dHlsZVNoYXJpbmdCZWhhdmlvciBzaGFyaW5nQmVoYXZpb3IsIFJ1bGVNYXRjaGluZ0JlaGF2aW9y
IG1hdGNoaW5nQmVoYXZpb3IsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZykKLXsKLSAg
ICAvLyBPbmNlIGFuIGVsZW1lbnQgaGFzIGEgcmVuZGVyZXIsIHdlIGRvbid0IHRyeSB0byBkZXN0
cm95IGl0LCBzaW5jZSBvdGhlcndpc2UgdGhlIHJlbmRlcmVyCi0gICAgLy8gd2lsbCB2YW5pc2gg
aWYgYSBzdHlsZSByZWNhbGMgaGFwcGVucyBkdXJpbmcgbG9hZGluZy4KLSAgICBpZiAoc2hhcmlu
Z0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFlbGVtZW50LT5kb2N1bWVudCgpLT5o
YXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiAhZWxlbWVudC0+cmVuZGVyZXIoKSkgewotICAgICAg
ICBpZiAoIXNfc3R5bGVOb3RZZXRBdmFpbGFibGUpIHsKLSAgICAgICAgICAgIHNfc3R5bGVOb3RZ
ZXRBdmFpbGFibGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgICAgICAg
ICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+c2V0RGlzcGxheShOT05FKTsKLSAgICAgICAgICAg
IHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc05vZGVzV2l0aFBs
YWNlaG9sZGVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7
Ci0gICAgfQotCi0gICAgaW5pdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaW5pdEZvclN0eWxlUmVz
b2x2ZShlbGVtZW50LCBkZWZhdWx0UGFyZW50KTsKLSAgICBtX3JlZ2lvbkZvclN0eWxpbmcgPSBy
ZWdpb25Gb3JTdHlsaW5nOwotICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNo
YXJpbmcpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVk
U3R5bGUoKTsKLSAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQotICAgICAgICAgICAgcmV0dXJuIHNo
YXJlZFN0eWxlOwotICAgIH0KLQotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7
Ci0KLSAgICBpZiAobV9wYXJlbnRTdHlsZSkKLSAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20o
bV9wYXJlbnRTdHlsZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBzdHls
ZSgpOwotICAgICAgICAvLyBNYWtlIHN1cmUgb3VyIGZvbnRzIGFyZSBpbml0aWFsaXplZCBpZiB3
ZSBkb24ndCBpbmhlcml0IHRoZW0gZnJvbSBvdXIgcGFyZW50IHN0eWxlLgotICAgICAgICBtX3N0
eWxlLT5mb250KCkudXBkYXRlKDApOwotICAgIH0KLQotICAgIC8vIEV2ZW4gaWYgc3Vycm91bmRp
bmcgY29udGVudCBpcyB1c2VyLWVkaXRhYmxlLCBzaGFkb3cgRE9NIHNob3VsZCBhY3QgYXMgYSBz
aW5nbGUgdW5pdCwgYW5kIG5vdCBuZWNlc3NhcmlseSBiZSBlZGl0YWJsZQotICAgIGlmIChpc0F0
U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpCi0gICAgICAgIG1fc3R5bGUtPnNldFVzZXJNb2RpZnko
UmVuZGVyU3R5bGU6OmluaXRpYWxVc2VyTW9kaWZ5KCkpOwotCi0gICAgaWYgKGVsZW1lbnQtPmlz
TGluaygpKSB7Ci0gICAgICAgIG1fc3R5bGUtPnNldElzTGluayh0cnVlKTsKLSAgICAgICAgbV9z
dHlsZS0+c2V0SW5zaWRlTGluayhtX2VsZW1lbnRMaW5rU3RhdGUpOwotICAgIH0KLQotICAgIGVu
c3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxlbWVudCk7Ci0KLSAgICBNYXRjaFJl
c3VsdCBtYXRjaFJlc3VsdDsKLSAgICBpZiAobWF0Y2hpbmdCZWhhdmlvciA9PSBNYXRjaE9ubHlV
c2VyQWdlbnRSdWxlcykKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKG1hdGNoUmVzdWx0KTsKLSAgICBl
bHNlCi0gICAgICAgIG1hdGNoQWxsUnVsZXMobWF0Y2hSZXN1bHQpOwotCi0gICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCk7Ci0KLSAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUg
b2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBz
KS4KLSAgICBhZGp1c3RSZW5kZXJTdHlsZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlLCBlbGVtZW50
KTsKLQotICAgIGluaXRFbGVtZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29s
dmUuCi0KLSAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdHlsZS5y
ZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0
eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5
bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCi17Ci0g
ICAgTWF0Y2hSZXN1bHQgcmVzdWx0OwotICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQot
ICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIGtleWZyYW1lLT5wcm9wZXJ0aWVz
KCkpOwotCi0gICAgQVNTRVJUKCFtX3N0eWxlKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUK
LSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7Ci0KLSAgICBt
X2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0KLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3
aXRoICFpbXBvcnRhbnQuIFNpbmNlIHRoZXJlIGlzIG9ubHkgZXZlciBvbmUKLSAgICAvLyBkZWNs
LCB0aGVyZSdzIG5vdGhpbmcgdG8gb3ZlcnJpZGUuIFNvIGp1c3QgYWRkIHRoZSBmaXJzdCBwcm9w
ZXJ0aWVzLgotICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwotICAgIGlmIChrZXlmcmFt
ZS0+cHJvcGVydGllcygpKQotICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KHJl
c3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhl
cml0ZWRPbmx5KTsKLQotICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBh
bmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KCk7Ci0KLSAgICAvLyBMaW5lLWhlaWdo
dCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUKLSAg
ICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7Ci0KLSAgICAvLyBOb3cgZG8gcmVzdCBv
ZiB0aGUgcHJvcGVydGllcy4KLSAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAgICAg
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwotCi0gICAgLy8g
SWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQg
cHJvcHMsCi0gICAgLy8gZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBhIHNlY29uZCB0aW1lLgotICAg
IHVwZGF0ZUZvbnQoKTsKLQotICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQg
YnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ0ltYWdlcygpOwotICAgIAotI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKLSAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5j
ZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKLSNlbmRpZgotCi0g
ICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3BlcnRpZXMgdG8gdGhlIGtleWZyYW1lLgot
ICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0aW9uID0ga2V5ZnJhbWUtPnBy
b3BlcnRpZXMoKSkgewotICAgICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gc3R5bGVEZWNs
YXJhdGlvbi0+cHJvcGVydHlDb3VudCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcHJvcGVydHlDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5ID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlBdChpKS5pZCgpOwotICAgICAgICAgICAg
Ly8gVGltaW5nLWZ1bmN0aW9uIHdpdGhpbiBrZXlmcmFtZXMgaXMgc3BlY2lhbCwgYmVjYXVzZSBp
dCBpcyBub3QgYW5pbWF0ZWQ7IGl0IGp1c3QKLSAgICAgICAgICAgIC8vIGRlc2NyaWJlcyB0aGUg
dGltaW5nIGZ1bmN0aW9uIGJldHdlZW4gdGhpcyBrZXlmcmFtZSBhbmQgdGhlIG5leHQuCi0gICAg
ICAgICAgICBpZiAocHJvcGVydHkgIT0gQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdG
dW5jdGlvbikKLSAgICAgICAgICAgICAgICBrZXlmcmFtZVZhbHVlLmFkZFByb3BlcnR5KHByb3Bl
cnR5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsK
LX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVt
ZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxp
c3QpCi17Ci0gICAgbGlzdC5jbGVhcigpOwotCi0gICAgLy8gR2V0IHRoZSBrZXlmcmFtZXNSdWxl
IGZvciB0aGlzIG5hbWUKLSAgICBpZiAoIWUgfHwgbGlzdC5hbmltYXRpb25OYW1lKCkuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2tleWZyYW1lc1J1bGVNYXAuY2hlY2tDb25z
aXN0ZW5jeSgpOwotCi0gICAgS2V5ZnJhbWVzUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2tleWZy
YW1lc1J1bGVNYXAuZmluZChsaXN0LmFuaW1hdGlvbk5hbWUoKS5pbXBsKCkpOwotICAgIGlmIChp
dCA9PSBtX2tleWZyYW1lc1J1bGVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNv
bnN0IFN0eWxlUnVsZUtleWZyYW1lcyoga2V5ZnJhbWVzUnVsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7
Ci0KLSAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlm
cmFtZQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiYga2V5ZnJhbWVz
ID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICAvLyBBcHBseSB0aGUgZGVjbGFy
YXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBs
b2dpYyBpbiBzdHlsZUZvckVsZW1lbnQKLSAgICAgICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAgICAg
IGluaXRGb3JTdHlsZVJlc29sdmUoZSk7Ci0KLSAgICAgICAgY29uc3QgU3R5bGVLZXlmcmFtZSog
a2V5ZnJhbWUgPSBrZXlmcmFtZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAgS2V5ZnJhbWVWYWx1ZSBr
ZXlmcmFtZVZhbHVlKDAsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxl
Rm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBrZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwotCi0g
ICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHN0eWxlIHRvIGFsbCB0aGUgaW5kaWNhdGVkIGtl
eSB0aW1lcwotICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtleXM7Ci0gICAgICAgIGtleWZyYW1lLT5n
ZXRLZXlzKGtleXMpOwotICAgICAgICBmb3IgKHNpemVfdCBrZXlJbmRleCA9IDA7IGtleUluZGV4
IDwga2V5cy5zaXplKCk7ICsra2V5SW5kZXgpIHsKLSAgICAgICAgICAgIGtleWZyYW1lVmFsdWUu
c2V0S2V5KGtleXNba2V5SW5kZXhdKTsKLSAgICAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1l
VmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIDAlIGtleWZyYW1lIGlz
IG1pc3NpbmcsIGNyZWF0ZSBpdCAoYnV0IG9ubHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90
aGVyIGtleWZyYW1lKQotICAgIGludCBpbml0aWFsTGlzdFNpemUgPSBsaXN0LnNpemUoKTsKLSAg
ICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiBsaXN0WzBdLmtleSgpICE9IDApIHsKLSAgICAg
ICAgc3RhdGljIFN0eWxlS2V5ZnJhbWUqIHplcm9QZXJjZW50S2V5ZnJhbWU7Ci0gICAgICAgIGlm
ICghemVyb1BlcmNlbnRLZXlmcmFtZSkgewotICAgICAgICAgICAgemVyb1BlcmNlbnRLZXlmcmFt
ZSA9IFN0eWxlS2V5ZnJhbWU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICAgICAgICAgIHplcm9Q
ZXJjZW50S2V5ZnJhbWUtPnNldEtleVRleHQoIjAlIik7Ci0gICAgICAgIH0KLSAgICAgICAgS2V5
ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNl
dFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCB6ZXJvUGVyY2VudEtleWZyYW1l
LCBrZXlmcmFtZVZhbHVlKSk7Ci0gICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOwot
ICAgIH0KLQotICAgIC8vIElmIHRoZSAxMDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBp
dCAoYnV0IG9ubHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQotICAg
IGlmIChpbml0aWFsTGlzdFNpemUgPiAwICYmIChsaXN0W2xpc3Quc2l6ZSgpIC0gMV0ua2V5KCkg
IT0gMSkpIHsKLSAgICAgICAgc3RhdGljIFN0eWxlS2V5ZnJhbWUqIGh1bmRyZWRQZXJjZW50S2V5
ZnJhbWU7Ci0gICAgICAgIGlmICghaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSkgewotICAgICAgICAg
ICAgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSA9IFN0eWxlS2V5ZnJhbWU6OmNyZWF0ZSgpLmxlYWtS
ZWYoKTsKLSAgICAgICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUtPnNldEtleVRleHQoIjEw
MCUiKTsKLSAgICAgICAgfQotICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMSwg
MCk7Ci0gICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVt
ZW50U3R5bGUsIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKLSAgICAg
ICAgbGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1ZSk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQg
cHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCi17Ci0gICAgaWYg
KCFlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGluaXRFbGVtZW50KGUpOwotCi0gICAgaW5p
dEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBtX3N0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotCi0gICAgaWYgKG1fcGFyZW50U3R5bGUpCi0gICAgICAg
IG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUpOwotCi0gICAgLy8gU2luY2Ugd2Ug
ZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIg
YWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZwotICAgIC8vIHRob3NlIHJ1bGVz
LgotCi0gICAgLy8gQ2hlY2sgVUEsIHVzZXIgYW5kIGF1dGhvciBydWxlcy4KLSAgICBNYXRjaFJl
c3VsdCBtYXRjaFJlc3VsdDsKLSAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOwotCi0gICAg
aWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7Ci0gICAgICAgIG1hdGNoVXNlclJ1bGVz
KG1hdGNoUmVzdWx0LCBmYWxzZSk7Ci0gICAgICAgIG1hdGNoQXV0aG9yUnVsZXMobWF0Y2hSZXN1
bHQsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIG1fc3R5bGUtPnNldFN0eWxl
VHlwZShwc2V1ZG8pOwotCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCk7
Ci0KLSAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBk
ZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KLSAgICBhZGp1c3RSZW5kZXJTdHlsZShz
dHlsZSgpLCBwYXJlbnRTdHlsZSwgMCk7Ci0KLSAgICAvLyBTdGFydCBsb2FkaW5nIGltYWdlcyBy
ZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdJbWFnZXMoKTsKLQotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJl
ZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKLSNlbmRp
ZgotCi0gICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVs
ZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHls
ZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKLXsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKG1fY2hl
Y2tlci5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHls
ZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCi0KLSAgICBtX3N0eWxlID0gUmVu
ZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcm9vdEVsZW1l
bnRTdHlsZSk7Ci0KLSAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVmdFBhZ2UocGFnZUluZGV4
KTsKLSAgICBjb25zdCBib29sIGlzRmlyc3QgPSBpc0ZpcnN0UGFnZShwYWdlSW5kZXgpOwotICAg
IGNvbnN0IFN0cmluZyBwYWdlID0gcGFnZU5hbWUocGFnZUluZGV4KTsKLSAgICAKLSAgICBNYXRj
aFJlc3VsdCByZXN1bHQ7Ci0gICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBkZWZhdWx0UHJpbnRT
dHlsZSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQs
IG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIC8vIE9ubHkg
Y29uc2lkZXIgdGhlIGdsb2JhbCBhdXRob3IgUnVsZVNldCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBl
ciB0aGUgSFRNTDUgc3BlYy4KLSAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fYXV0aG9yU3R5
bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbV9saW5lSGVpZ2h0VmFsdWUg
PSAwOwotICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwotICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8dHJ1ZT4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
LnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwotCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRp
cnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsKLQot
ICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24g
dGhlIGZvbnQtc2l6ZS4KLSAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7Ci0KLSAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7Ci0KLSAgICAvLyBT
dGFydCBsb2FkaW5nIGltYWdlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBl
bmRpbmdJbWFnZXMoKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAvLyBTdGFydCBs
b2FkaW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVu
ZGluZ1NoYWRlcnMoKTsKLSNlbmRpZgotCi0gICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0g
ICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOwotfQotCi1zdGF0aWMgdm9pZCBhZGRJbnRyaW5z
aWNNYXJnaW5zKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICAvLyBJbnRyaW5zaWMgbWFyZ2lu
IHZhbHVlLgotICAgIGNvbnN0IGludCBpbnRyaW5zaWNNYXJnaW4gPSAyICogc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKLQotICAgIC8vIEZJWE1FOiBVc2luZyB3aWR0aC9oZWlnaHQgYWxvbmUgYW5k
IG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4td2lkdGgvbWF4LXdpZHRoIGlzIGZsYXdlZC4KLSAg
ICAvLyBGSVhNRTogVXNpbmcgInF1aXJrIiB0byBkZWNpZGUgdGhlIG1hcmdpbiB3YXNuJ3Qgc2V0
IGlzIGtpbmQgb2YgbGFtZS4KLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSkgewotICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkxlZnQoKS5xdWlyaygpKQotICAgICAg
ICAgICAgc3R5bGUtPnNldE1hcmdpbkxlZnQoTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQp
KTsKLSAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5SaWdodCgpLnF1aXJrKCkpCi0gICAgICAgICAg
ICBzdHlsZS0+c2V0TWFyZ2luUmlnaHQoTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsK
LSAgICB9Ci0KLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7Ci0gICAgICAgIGlm
IChzdHlsZS0+bWFyZ2luVG9wKCkucXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJn
aW5Ub3AoTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKLSAgICAgICAgaWYgKHN0eWxl
LT5tYXJnaW5Cb3R0b20oKS5xdWlyaygpKQotICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpbkJv
dHRvbShMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOwotICAgIH0KLX0KLQotc3RhdGlj
IEVEaXNwbGF5IGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoRURpc3BsYXkgZGlzcGxheSwgYm9vbCBp
c0Zsb2F0aW5nLCBib29sIHN0cmljdFBhcnNpbmcpCi17Ci0gICAgc3dpdGNoIChkaXNwbGF5KSB7
Ci0gICAgY2FzZSBCTE9DSzoKLSAgICBjYXNlIFRBQkxFOgotICAgIGNhc2UgQk9YOgotICAgIGNh
c2UgRkxFWEJPWDoKLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotICAgIGNhc2UgR1JJRDoK
LSNlbmRpZgotICAgICAgICByZXR1cm4gZGlzcGxheTsKLQotICAgIGNhc2UgTElTVF9JVEVNOgot
ICAgICAgICAvLyBJdCBpcyBhIFdpbklFIGJ1ZyB0aGF0IGZsb2F0ZWQgbGlzdCBpdGVtcyBsb3Nl
IHRoZWlyIGJ1bGxldHMsIHNvIHdlJ2xsIGVtdWxhdGUgdGhlIHF1aXJrLCBidXQgb25seSBpbiBx
dWlya3MgbW9kZS4KLSAgICAgICAgaWYgKCFzdHJpY3RQYXJzaW5nICYmIGlzRmxvYXRpbmcpCi0g
ICAgICAgICAgICByZXR1cm4gQkxPQ0s7Ci0gICAgICAgIHJldHVybiBkaXNwbGF5OwotICAgIGNh
c2UgSU5MSU5FX1RBQkxFOgotICAgICAgICByZXR1cm4gVEFCTEU7Ci0gICAgY2FzZSBJTkxJTkVf
Qk9YOgotICAgICAgICByZXR1cm4gQk9YOwotICAgIGNhc2UgSU5MSU5FX0ZMRVhCT1g6Ci0gICAg
ICAgIHJldHVybiBGTEVYQk9YOwotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgY2Fz
ZSBJTkxJTkVfR1JJRDoKLSAgICAgICAgcmV0dXJuIEdSSUQ7Ci0jZW5kaWYKLQotICAgIGNhc2Ug
SU5MSU5FOgotICAgIGNhc2UgUlVOX0lOOgotICAgIGNhc2UgQ09NUEFDVDoKLSAgICBjYXNlIElO
TElORV9CTE9DSzoKLSAgICBjYXNlIFRBQkxFX1JPV19HUk9VUDoKLSAgICBjYXNlIFRBQkxFX0hF
QURFUl9HUk9VUDoKLSAgICBjYXNlIFRBQkxFX0ZPT1RFUl9HUk9VUDoKLSAgICBjYXNlIFRBQkxF
X1JPVzoKLSAgICBjYXNlIFRBQkxFX0NPTFVNTl9HUk9VUDoKLSAgICBjYXNlIFRBQkxFX0NPTFVN
TjoKLSAgICBjYXNlIFRBQkxFX0NFTEw6Ci0gICAgY2FzZSBUQUJMRV9DQVBUSU9OOgotICAgICAg
ICByZXR1cm4gQkxPQ0s7Ci0gICAgY2FzZSBOT05FOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIE5PTkU7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBCTE9DSzsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RS
ZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwg
RWxlbWVudCAqZSkKLXsKLSAgICAvLyBDYWNoZSBvdXIgb3JpZ2luYWwgZGlzcGxheS4KLSAgICBz
dHlsZS0+c2V0T3JpZ2luYWxEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCkpOwotCi0gICAgaWYgKHN0
eWxlLT5kaXNwbGF5KCkgIT0gTk9ORSkgewotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgPHRkPiB0
aGF0IHNwZWNpZmllcyBhIGZsb2F0IHByb3BlcnR5LCBpbiBxdWlya3MgbW9kZSB3ZSBqdXN0IGRy
b3AgdGhlIGZsb2F0Ci0gICAgICAgIC8vIHByb3BlcnR5LgotICAgICAgICAvLyBTaXRlcyBhbHNv
IGNvbW1vbmx5IHVzZSBkaXNwbGF5OmlubGluZS9ibG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMu
ICBJbiBxdWlya3MgbW9kZSB3ZSBmb3JjZQotICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFp
biB0aGVpciBkaXNwbGF5IHR5cGVzLgotICAgICAgICBpZiAoIW1fY2hlY2tlci5zdHJpY3RQYXJz
aW5nKCkgJiYgZSkgewotICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUodGRUYWcpKSB7Ci0g
ICAgICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7Ci0gICAgICAgICAg
ICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZiAoZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCi0gICAgICAgICAgICAgICAg
c3R5bGUtPnNldERpc3BsYXkoc3R5bGUtPmlzRGlzcGxheUlubGluZVR5cGUoKSA/IElOTElORV9U
QUJMRSA6IFRBQkxFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdO
YW1lKHRkVGFnKSB8fCBlLT5oYXNUYWdOYW1lKHRoVGFnKSkpIHsKLSAgICAgICAgICAgIGlmIChz
dHlsZS0+d2hpdGVTcGFjZSgpID09IEtIVE1MX05PV1JBUCkgewotICAgICAgICAgICAgICAgIC8v
IEZpZ3VyZSBvdXQgaWYgd2UgYXJlIHJlYWxseSBub3dyYXBwaW5nIG9yIGlmIHdlIHNob3VsZCBq
dXN0Ci0gICAgICAgICAgICAgICAgLy8gdXNlIG5vcm1hbCBpbnN0ZWFkLiAgSWYgdGhlIHdpZHRo
IG9mIHRoZSBjZWxsIGlzIGZpeGVkLCB0aGVuCi0gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3Qg
YWN0dWFsbHkgdXNlIE5PV1JBUC4KLSAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPndpZHRoKCku
aXNGaXhlZCgpKQotICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShOT1JN
QUwpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNl
dFdoaXRlU3BhY2UoTk9XUkFQKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFRhYmxlcyBuZXZlciBzdXBwb3J0IHRoZSAtd2Via2l0LSogdmFsdWVzIGZvciB0ZXh0LWFs
aWduIGFuZCB3aWxsIHJlc2V0IGJhY2sgdG8gdGhlIGRlZmF1bHQuCi0gICAgICAgIGlmIChlICYm
IGUtPmhhc1RhZ05hbWUodGFibGVUYWcpICYmIChzdHlsZS0+dGV4dEFsaWduKCkgPT0gV0VCS0lU
X0xFRlQgfHwgc3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9DRU5URVIgfHwgc3R5bGUtPnRl
eHRBbGlnbigpID09IFdFQktJVF9SSUdIVCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0VGV4dEFs
aWduKFRBQVVUTyk7Ci0KLSAgICAgICAgLy8gRnJhbWVzIGFuZCBmcmFtZXNldHMgbmV2ZXIgaG9u
b3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9zaXRpb246YWJzb2x1dGUuICBUaGlzIGlzIG5lY2Vz
c2FyeSB0bwotICAgICAgICAvLyBmaXggYSBjcmFzaCB3aGVyZSBhIHNpdGUgdHJpZXMgdG8gcG9z
aXRpb24gdGhlc2Ugb2JqZWN0cy4gIFRoZXkgYWxzbyBuZXZlciBob25vciBkaXNwbGF5LgotICAg
ICAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgZS0+aGFzVGFnTmFtZShm
cmFtZXNldFRhZykpKSB7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU3RhdGljUG9z
aXRpb24pOwotICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gUnVieSB0ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXQgb3IgcG9zaXRp
b24uIFRoaXMgbWlnaHQgY2hhbmdlIHdpdGggZXZvbHV0aW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9u
LgotICAgICAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKHJ0VGFnKSkgewotICAgICAgICAgICAg
c3R5bGUtPnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKLSAgICAgICAgICAgIHN0eWxlLT5z
ZXRGbG9hdGluZyhOb0Zsb2F0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRhYmxlIGhlYWRl
cnMgd2l0aCBhIHRleHQtYWxpZ24gb2YgYXV0byB3aWxsIGNoYW5nZSB0aGUgdGV4dC1hbGlnbiB0
byBjZW50ZXIuCi0gICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUodGhUYWcpICYmIHN0eWxl
LT50ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCi0gICAgICAgICAgICBzdHlsZS0+c2V0VGV4dEFsaWdu
KENFTlRFUik7Ci0KLSAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZShsZWdlbmRUYWcpKQot
ICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwotCi0gICAgICAgIC8vIEFic29s
dXRlL2ZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMsIGZsb2F0aW5nIGVsZW1lbnRzIGFuZCB0aGUg
ZG9jdW1lbnQgZWxlbWVudCBuZWVkIGJsb2NrLWxpa2Ugb3V0c2lkZSBkaXNwbGF5LgotICAgICAg
ICBpZiAoc3R5bGUtPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbiB8fCBzdHlsZS0+cG9z
aXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uIHx8IHN0eWxlLT5pc0Zsb2F0aW5nKCkgfHwgKGUgJiYg
ZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkpCi0gICAgICAgICAgICBzdHls
ZS0+c2V0RGlzcGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCksIHN0
eWxlLT5pc0Zsb2F0aW5nKCksIG1fY2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpKTsKLQotICAgICAg
ICAvLyBGSVhNRTogRG9uJ3Qgc3VwcG9ydCB0aGlzIG11dGF0aW9uIGZvciBwc2V1ZG8gc3R5bGVz
IGxpa2UgZmlyc3QtbGV0dGVyIG9yIGZpcnN0LWxpbmUsIHNpbmNlIGl0J3Mgbm90IGNvbXBsZXRl
bHkKLSAgICAgICAgLy8gY2xlYXIgaG93IHRoYXQgc2hvdWxkIHdvcmsuCi0gICAgICAgIGlmIChz
dHlsZS0+ZGlzcGxheSgpID09IElOTElORSAmJiBzdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VV
RE8gJiYgcGFyZW50U3R5bGUgJiYgc3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gcGFyZW50U3R5bGUt
PndyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShJTkxJTkVfQkxP
Q0spOwotCi0gICAgICAgIC8vIEFmdGVyIHBlcmZvcm1pbmcgdGhlIGRpc3BsYXkgbXV0YXRpb24s
IGNoZWNrIHRhYmxlIHJvd3MuICBXZSBkbyBub3QgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb24K
LSAgICAgICAgLy8gdGFibGUgcm93cyBvciBjZWxscy4gIFRoaXMgaGFzIGJlZW4gZXN0YWJsaXNo
ZWQgaW4gQ1NTMi4xIChhbmQgY2F1c2VkIGEgY3Jhc2ggaW4gY29udGFpbmluZ0Jsb2NrKCkKLSAg
ICAgICAgLy8gb24gc29tZSBzaXRlcykuCi0gICAgICAgIGlmICgoc3R5bGUtPmRpc3BsYXkoKSA9
PSBUQUJMRV9IRUFERVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1dfR1JP
VVAKLSAgICAgICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0ZPT1RFUl9HUk9V
UCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVykgJiYKLSAgICAgICAgICAgICBzdHls
ZS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKQotICAgICAgICAgICAgc3R5bGUtPnNl
dFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKLQotICAgICAgICAvLyB3cml0aW5nLW1vZGUgZG9l
cyBub3QgYXBwbHkgdG8gdGFibGUgcm93IGdyb3VwcywgdGFibGUgY29sdW1uIGdyb3VwcywgdGFi
bGUgcm93cywgYW5kIHRhYmxlIGNvbHVtbnMuCi0gICAgICAgIC8vIEZJWE1FOiBUYWJsZSBjZWxs
cyBzaG91bGQgYmUgYWxsb3dlZCB0byBiZSBwZXJwZW5kaWN1bGFyIG9yIGZsaXBwZWQgd2l0aCBy
ZXNwZWN0IHRvIHRoZSB0YWJsZSwgdGhvdWdoLgotICAgICAgICBpZiAoc3R5bGUtPmRpc3BsYXko
KSA9PSBUQUJMRV9DT0xVTU4gfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9DT0xVTU5fR1JP
VVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9GT09URVJfR1JPVVAKLSAgICAgICAgICAg
IHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfSEVBREVSX0dST1VQIHx8IHN0eWxlLT5kaXNw
bGF5KCkgPT0gVEFCTEVfUk9XIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XX0dST1VQ
Ci0gICAgICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0NFTEwpCi0gICAgICAg
ICAgICBzdHlsZS0+c2V0V3JpdGluZ01vZGUocGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkpOwot
Ci0gICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBkb24ndCBzdXBwb3J0IGJsb2NrLWZsb3cgb24g
ZmxleGlibGUgYm94ZXMgeWV0LCBkaXNhbGxvdyBzZXR0aW5nCi0gICAgICAgIC8vIG9mIGJsb2Nr
LWZsb3cgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY0MTggLSBG
bGV4aWJsZSBib3ggc3VwcG9ydC4KLSAgICAgICAgaWYgKHN0eWxlLT53cml0aW5nTW9kZSgpICE9
IFRvcFRvQm90dG9tV3JpdGluZ01vZGUgJiYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gQk9YIHx8IHN0
eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JPWCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0V3Jp
dGluZ01vZGUoVG9wVG9Cb3R0b21Xcml0aW5nTW9kZSk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBz
dXJlIG91ciB6LWluZGV4IHZhbHVlIGlzIG9ubHkgYXBwbGllZCBpZiB0aGUgb2JqZWN0IGlzIHBv
c2l0aW9uZWQuCi0gICAgaWYgKHN0eWxlLT5wb3NpdGlvbigpID09IFN0YXRpY1Bvc2l0aW9uKQot
ICAgICAgICBzdHlsZS0+c2V0SGFzQXV0b1pJbmRleCgpOwotCi0gICAgLy8gQXV0byB6LWluZGV4
IGJlY29tZXMgMCBmb3IgdGhlIHJvb3QgZWxlbWVudCBhbmQgdHJhbnNwYXJlbnQgb2JqZWN0cy4g
IFRoaXMgcHJldmVudHMKLSAgICAvLyBjYXNlcyB3aGVyZSBvYmplY3RzIHRoYXQgc2hvdWxkIGJl
IGJsZW5kZWQgYXMgYSBzaW5nbGUgdW5pdCBlbmQgdXAgd2l0aCBhIG5vbi10cmFuc3BhcmVudAot
ICAgIC8vIG9iamVjdCB3ZWRnZWQgaW4gYmV0d2VlbiB0aGVtLiAgQXV0byB6LWluZGV4IGFsc28g
YmVjb21lcyAwIGZvciBvYmplY3RzIHRoYXQgc3BlY2lmeSB0cmFuc2Zvcm1zL21hc2tzL3JlZmxl
Y3Rpb25zLgotICAgIGlmIChzdHlsZS0+aGFzQXV0b1pJbmRleCgpICYmICgoZSAmJiBlLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSBlKSB8fCBzdHlsZS0+b3BhY2l0eSgpIDwgMS4w
ZgotICAgICAgICB8fCBzdHlsZS0+aGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgfHwgc3R5
bGUtPmhhc01hc2soKSB8fCBzdHlsZS0+Ym94UmVmbGVjdCgpIHx8IHN0eWxlLT5oYXNGaWx0ZXIo
KQotI2lmZGVmIEZJWEVEX1BPU0lUSU9OX0NSRUFURVNfU1RBQ0tJTkdfQ09OVEVYVAotICAgICAg
ICB8fCBzdHlsZS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uCi0jZW5kaWYKLSNpZiBFTkFC
TEUoT1ZFUkZMT1dfU0NST0xMSU5HKQotICAgICAgICAvLyBUb3VjaCBvdmVyZmxvdyBzY3JvbGxp
bmcgY3JlYXRlcyBhIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgIHx8IHN0eWxlLT51c2VUb3Vj
aE92ZXJmbG93U2Nyb2xsaW5nKCkKLSNlbmRpZgotICAgICAgICApKQotICAgICAgICBzdHlsZS0+
c2V0WkluZGV4KDApOwotCi0gICAgLy8gVGV4dGFyZWEgY29uc2lkZXJzIG92ZXJmbG93IHZpc2li
bGUgYXMgYXV0by4KLSAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgewot
ICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPVklTSUJM
RSA/IE9BVVRPIDogc3R5bGUtPm92ZXJmbG93WCgpKTsKLSAgICAgICAgc3R5bGUtPnNldE92ZXJm
bG93WShzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUgPyBPQVVUTyA6IHN0eWxlLT5vdmVy
Zmxvd1koKSk7Ci0gICAgfQotCi0gICAgLy8gRmluYWxseSB1cGRhdGUgb3VyIHRleHQgZGVjb3Jh
dGlvbnMgaW4gZWZmZWN0LCBidXQgZG9uJ3QgYWxsb3cgdGV4dC1kZWNvcmF0aW9uIHRvIHBlcmNv
bGF0ZSB0aHJvdWdoCi0gICAgLy8gdGFibGVzLCBpbmxpbmUgYmxvY2tzLCBpbmxpbmUgdGFibGVz
LCBydW4taW5zLCBvciBzaGFkb3cgRE9NLgotICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IFRB
QkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFIHx8IHN0eWxlLT5kaXNwbGF5
KCkgPT0gUlVOX0lOCi0gICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JMT0NL
IHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JPWCB8fCBpc0F0U2hhZG93Qm91bmRhcnko
ZSkpCi0gICAgICAgIHN0eWxlLT5zZXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdChzdHlsZS0+dGV4
dERlY29yYXRpb24oKSk7Ci0gICAgZWxzZQotICAgICAgICBzdHlsZS0+YWRkVG9UZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdChzdHlsZS0+dGV4dERlY29yYXRpb24oKSk7Ci0KLSAgICAvLyBJZiBlaXRo
ZXIgb3ZlcmZsb3cgdmFsdWUgaXMgbm90IHZpc2libGUsIGNoYW5nZSB0byBhdXRvLgotICAgIGlm
IChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT01BUlFVRUUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9
IE9NQVJRVUVFKQotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9NQVJRVUVFKTsKLSAgICBl
bHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT01BUlFVRUUgJiYgc3R5bGUtPm92ZXJmbG93
WCgpICE9IE9NQVJRVUVFKQotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9NQVJRVUVFKTsK
LSAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92
ZXJmbG93WSgpICE9IE9WSVNJQkxFKQotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9BVVRP
KTsKLSAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUgJiYgc3R5bGUt
Pm92ZXJmbG93WCgpICE9IE9WSVNJQkxFKQotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9B
VVRPKTsKLQotICAgIC8vIFRhYmxlIHJvd3MsIHNlY3Rpb25zIGFuZCB0aGUgdGFibGUgaXRzZWxm
IHdpbGwgc3VwcG9ydCBvdmVyZmxvdzpoaWRkZW4gYW5kIHdpbGwgaWdub3JlIHNjcm9sbC9hdXRv
LgotICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHRhYmxlIHNlY3Rpb25zIHdpbGwgc3VwcG9ydCBh
dXRvIGFuZCBzY3JvbGwuCi0gICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEUgfHwgc3R5
bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVfVEFCTEUgfHwKLSAgICAgICAgc3R5bGUtPmRpc3BsYXko
KSA9PSBUQUJMRV9ST1dfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cpIHsK
LSAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+b3Zl
cmZsb3dYKCkgIT0gT0hJRERFTikKLSAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT1ZJ
U0lCTEUpOwotICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WSgpICE9IE9WSVNJQkxFICYmIHN0
eWxlLT5vdmVyZmxvd1koKSAhPSBPSElEREVOKQotICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJm
bG93WShPVklTSUJMRSk7Ci0gICAgfQotCi0gICAgLy8gTWVudWxpc3RzIHNob3VsZCBoYXZlIHZp
c2libGUgb3ZlcmZsb3cKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBh
cnQpIHsKLSAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPVklTSUJMRSk7Ci0gICAgICAgIHN0
eWxlLT5zZXRPdmVyZmxvd1koT1ZJU0lCTEUpOwotICAgIH0KLQotICAgIC8vIEN1bGwgb3V0IGFu
eSB1c2VsZXNzIGxheWVycyBhbmQgYWxzbyByZXBlYXQgcGF0dGVybnMgaW50byBhZGRpdGlvbmFs
IGxheWVycy4KLSAgICBzdHlsZS0+YWRqdXN0QmFja2dyb3VuZExheWVycygpOwotICAgIHN0eWxl
LT5hZGp1c3RNYXNrTGF5ZXJzKCk7Ci0KLSAgICAvLyBEbyB0aGUgc2FtZSBmb3IgYW5pbWF0aW9u
cyBhbmQgdHJhbnNpdGlvbnMuCi0gICAgc3R5bGUtPmFkanVzdEFuaW1hdGlvbnMoKTsKLSAgICBz
dHlsZS0+YWRqdXN0VHJhbnNpdGlvbnMoKTsKLQotICAgIC8vIEltcG9ydGFudDogSW50cmluc2lj
IG1hcmdpbnMgZ2V0IGFkZGVkIHRvIGNvbnRyb2xzIGJlZm9yZSB0aGUgdGhlbWUgaGFzIGFkanVz
dGVkIHRoZSBzdHlsZSwgc2luY2UgdGhlIHRoZW1lIHdpbGwKLSAgICAvLyBhbHRlciBmb250cyBh
bmQgaGVpZ2h0cy93aWR0aHMuCi0gICAgaWYgKGUgJiYgZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSAmJiBzdHlsZS0+Zm9udFNpemUoKSA+PSAxMSkgewotICAgICAgICAvLyBEb24ndCBhcHBseSBp
bnRyaW5zaWMgbWFyZ2lucyB0byBpbWFnZSBidXR0b25zLiAgVGhlIGRlc2lnbmVyIGtub3dzIGhv
dyBiaWcgdGhlIGltYWdlcyBhcmUsCi0gICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gdHJlYXQgYWxs
IGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNpdGx5IHNpemVkLgotICAg
ICAgICBpZiAoIWUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8ICFzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4oZSktPmlzSW1hZ2VCdXR0b24oKSkKLSAgICAgICAgICAgIGFkZEludHJpbnNp
Y01hcmdpbnMoc3R5bGUpOwotICAgIH0KLQotICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZl
IGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KLSAgICBpZiAoc3R5bGUtPmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHls
ZSh0aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVyRGF0YSwgbV9iYWNr
Z3JvdW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBmaXJz
dC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KLSAgICBpZiAo
c3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCi0gICAgICAgIHN0eWxlLT5zZXRV
bmlxdWUoKTsKLQotICAgIC8vIEZJWE1FOiB3aGVuIGRyb3BwaW5nIHRoZSAtd2Via2l0IHByZWZp
eCBvbiB0cmFuc2Zvcm0tc3R5bGUsIHdlIHNob3VsZCBhbHNvIGhhdmUgb3BhY2l0eSA8IDEgY2F1
c2UgZmxhdHRlbmluZy4KLSAgICBpZiAoc3R5bGUtPnByZXNlcnZlczNEKCkgJiYgKHN0eWxlLT5v
dmVyZmxvd1goKSAhPSBPVklTSUJMRQotICAgICAgICB8fCBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0g
T1ZJU0lCTEUKLSAgICAgICAgfHwgc3R5bGUtPmhhc0ZpbHRlcigpKSkKLSAgICAgICAgc3R5bGUt
PnNldFRyYW5zZm9ybVN0eWxlM0QoVHJhbnNmb3JtU3R5bGUzREZsYXQpOwotCi0jaWYgRU5BQkxF
KFNWRykKLSAgICBpZiAoZSAmJiBlLT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAvLyBTcGVj
OiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvbWFza2luZy5odG1sI092ZXJmbG93UHJvcGVydHkK
LSAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMKQotICAgICAgICAgICAg
c3R5bGUtPnNldE92ZXJmbG93WShPSElEREVOKTsKLSAgICAgICAgZWxzZSBpZiAoc3R5bGUtPm92
ZXJmbG93WSgpID09IE9BVVRPKQotICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklT
SUJMRSk7Ci0KLSAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPU0NST0xMKQotICAg
ICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPSElEREVOKTsKLSAgICAgICAgZWxzZSBpZiAo
c3R5bGUtPm92ZXJmbG93WCgpID09IE9BVVRPKQotICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJm
bG93WChPVklTSUJMRSk7Ci0KLSAgICAgICAgLy8gT25seSB0aGUgcm9vdCA8c3ZnPiBlbGVtZW50
IGluIGFuIFNWRyBkb2N1bWVudCBmcmFnbWVudCB0cmVlIGhvbm9ycyBjc3MgcG9zaXRpb24KLSAg
ICAgICAgaWYgKCEoZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSAmJiBlLT5wYXJlbnRO
b2RlKCkgJiYgIWUtPnBhcmVudE5vZGUoKS0+aXNTVkdFbGVtZW50KCkpKQotICAgICAgICAgICAg
c3R5bGUtPnNldFBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsUG9zaXRpb24oKSk7Ci0KLSAg
ICAgICAgLy8gUmVuZGVyU1ZHUm9vdCBoYW5kbGVzIHpvb21pbmcgZm9yIHRoZSB3aG9sZSBTVkcg
c3VidHJlZSwgc28gZm9yZWlnbk9iamVjdCBjb250ZW50IHNob3VsZAotICAgICAgICAvLyBub3Qg
YmUgc2NhbGVkIGFnYWluLgotICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9y
ZWlnbk9iamVjdFRhZykpCi0gICAgICAgICAgICBzdHlsZS0+c2V0RWZmZWN0aXZlWm9vbShSZW5k
ZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLWJvb2wgU3R5bGVS
ZXNvbHZlcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiByZWdpb25FbGVtZW50KQotewotICAg
IC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVz
IG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQsCi0gICAgLy8gc28gYWxsIHJl
Z2lvbiBydWxlcyBhcmUgZ2xvYmFsIGJ5IGRlZmF1bHQuIFZlcmlmeSB3aGV0aGVyIHRoYXQgY2Fu
IHN0YW5kIG9yIG5lZWRzIGNoYW5naW5nLgotCi0gICAgdW5zaWduZWQgcnVsZXNTaXplID0gbV9h
dXRob3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7Ci0gICAgICAgIEFTU0VSVCht
X2F1dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQu
Z2V0KCkpOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX2F1dGhvclN0eWxlLT5t
X3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX3VzZXJTdHls
ZSkgewotICAgICAgICBydWxlc1NpemUgPSBtX3VzZXJTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNB
bmRSdWxlU2V0cy5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxl
c1NpemU7ICsraSkgewotICAgICAgICAgICAgQVNTRVJUKG1fdXNlclN0eWxlLT5tX3JlZ2lvblNl
bGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOwotICAgICAgICAgICAgaWYg
KGNoZWNrUmVnaW9uU2VsZWN0b3IobV91c2VyU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVs
ZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQotewotICAgIGlmICghbV9mb250RGlydHkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKLSAgICBj
aGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7Ci0gICAg
Y2hlY2tGb3Jab29tQ2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwotICAgIG1fc3R5bGUt
PmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fZm9udERpcnR5ID0gZmFsc2U7
Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKLXsK
LSAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKLSAgICBp
ZiAobV9oYXNVQUFwcGVhcmFuY2UpIHsKLSAgICAgICAgbV9ib3JkZXJEYXRhID0gbV9zdHlsZS0+
Ym9yZGVyKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqbV9zdHlsZS0+YmFja2dyb3Vu
ZExheWVycygpOwotICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IG1fc3R5bGUtPmJhY2tncm91
bmRDb2xvcigpOwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNv
bHZlcjo6c3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgdW5zaWduZWQgcnVsZXNUb0lu
Y2x1ZGUpCi17Ci0gICAgcmV0dXJuIHBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGUsIE5PUFNF
VURPLCBydWxlc1RvSW5jbHVkZSk7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxl
UmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzZXVkb0lk
IHBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKLXsKLSAgICBpZiAoIWUgfHwgIWUt
PmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KHRydWUpOwotCi0gICAgaW5p
dEVsZW1lbnQoZSk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCAwLCBwc2V1ZG9JZCk7Ci0K
LSAgICBNYXRjaFJlc3VsdCBkdW1teTsKLSAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVz
ZXJDU1NSdWxlcykgewotICAgICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1
c2VyIGFnZW50IHNoZWV0LgotICAgICAgICBtYXRjaFVBUnVsZXMoZHVtbXkpOwotCi0gICAgICAg
IC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgotICAgICAgICBpZiAobV9tYXRjaEF1
dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgICAgICBtYXRjaFVzZXJSdWxlcyhkdW1teSwgcnVs
ZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKLSAgICB9Ci0KLSAgICBpZiAobV9tYXRjaEF1
dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7
Ci0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmln
aW5DU1NSdWxlcyk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVl
dHMuCi0gICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1w
dHlDU1NSdWxlcyk7Ci0KLSAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOwotICAgIH0K
LQotICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KGZhbHNlKTsKLQotICAgIHJl
dHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKLX0KLQotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZl
cjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlKQotewotICAgIG1fZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgIG1f
Y2hlY2tlci5jbGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpOwotCi0gICAgaWYgKHJ1bGVE
YXRhLmhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpKSB7Ci0gICAgICAgIC8vIFdlIGtub3cgdGhp
cyBzZWxlY3RvciBkb2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAg
IGlmIChtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETykKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgLy8gV2Uga25vdyBhIHN1ZmZpY2llbnRseSBzaW1wbGUgc2lu
Z2xlIHBhcnQgc2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBmb3VuZCBpdCBmcm9t
IHRoZSBydWxlIGhhc2guCi0gICAgICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9ubHkg
c28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbmFtZXNwYWNlLgotICAgICAgICBpZiAocnVs
ZURhdGEuaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAm
JiBtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKCFydWxlRGF0
YS5oYXNNdWx0aXBhcnRTZWxlY3RvcigpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9IGVsc2UgaWYgKCFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMobV9lbGVtZW50
LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVj
dG9yKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX2NoZWNrZXIuZmFzdENoZWNrU2VsZWN0b3IocnVsZURh
dGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50KTsKLSAgICB9Ci0KLSAgICAvLyBTbG93IHBhdGguCi0g
ICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVE
YXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hF
bmFibGVkKTsKLSAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0eWxlKCk7Ci0gICAgY29udGV4
dC5lbGVtZW50UGFyZW50U3R5bGUgPSBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRl
clN0eWxlKCkgOiAwOwotICAgIGNvbnRleHQuc2NvcGUgPSBzY29wZTsKLSAgICBTZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3Rvcihjb250
ZXh0LCBtX2R5bmFtaWNQc2V1ZG8pOwotICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yTWF0Y2hlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2NoZWNr
ZXIucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAh
PSBtX2R5bmFtaWNQc2V1ZG8pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKENTU1NlbGVj
dG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCkKLXsKLSAgICBpZiAo
IXJlZ2lvblNlbGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBtX2NoZWNrZXIuY2xlYXJIYXNVbmtub3duUHNldWRvRWxlbWVudHMoKTsKLSAgICBt
X2NoZWNrZXIuc2V0UHNldWRvU3R5bGUoTk9QU0VVRE8pOwotCi0gICAgZm9yIChDU1NTZWxlY3Rv
ciogcyA9IHJlZ2lvblNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQot
ICAgICAgICBpZiAobV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocywgcmVnaW9uRWxlbWVudCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLSAgICAKLWJv
b2wgU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKFN0eWxl
U2hlZXRJbnRlcm5hbCogc3R5bGVzaGVldCwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlk
U2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpCi17Ci0gICAg
QVNTRVJUKCFzdHlsZXNoZWV0LT5pc0xvYWRpbmcoKSk7Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzdHlsZXNoZWV0LT5pbXBvcnRS
dWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbXBvcnRSdWxlcy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAoIWltcG9ydFJ1bGVzW2ldLT5zdHlsZVNoZWV0KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0
b3JTY29wZXMoaW1wb3J0UnVsZXNbaV0tPnN0eWxlU2hlZXQoKSwgaWRTY29wZXMsIGNsYXNzU2Nv
cGVzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIHJ1bGVzID0gc3R5bGVzaGVldC0+Y2hpbGRSdWxl
cygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlcy5zaXplKCk7IGkrKykgewot
ICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0gcnVsZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlm
IChydWxlLT5pc1N0eWxlUnVsZSgpKSB7Ci0gICAgICAgICAgICBTdHlsZVJ1bGUqIHN0eWxlUnVs
ZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpOwotICAgICAgICAgICAgaWYgKCFTZWxl
Y3RvckNoZWNrZXI6OmRldGVybWluZVNlbGVjdG9yU2NvcGVzKHN0eWxlUnVsZS0+c2VsZWN0b3JM
aXN0KCksIGlkU2NvcGVzLCBjbGFzc1Njb3BlcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0gCi0gICAgICAgIC8vIEZJWE1F
OiBNZWRpYSBydWxlcyBhbmQgbWF5YmUgc29tZSBvdGhlcnMgY291bGQgYmUgYWxsb3dlZC4KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotc3RhdGljIGlubGluZSBib29sIGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9u
UnVsZUhhc2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgc2VsZWN0b3JOYW1lc3BhY2UgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJ
KCk7Ci0gICAgaWYgKHNlbGVjdG9yTmFtZXNwYWNlICE9IHN0YXJBdG9tICYmIHNlbGVjdG9yTmFt
ZXNwYWNlICE9IHhodG1sTmFtZXNwYWNlVVJJKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpOb25lKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBpZiAoc2VsZWN0b3ItPnRhZygpICE9IHN0YXJBdG9tKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFz
c1NlbGVjdG9yKHNlbGVjdG9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHNl
bGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9
PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZWxlY3Rvckxp
c3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKQotewotICAgIENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3It
PnNlbGVjdG9yTGlzdCgpOwotICAgIGlmICghc2VsZWN0b3JMaXN0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3Qt
PmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4
dChzdWJTZWxlY3RvcikpIHsKLSAgICAgICAgaWYgKHN1YlNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNl
bGVjdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tb25BdHRyaWJ1dGVTZWxlY3RvckF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCi17Ci0gICAgLy8gVGhlc2Ug
YXJlIGV4cGxpY2l0bHkgdGVzdGVkIGZvciBlcXVhbGl0eSBpbiBjYW5TaGFyZVN0eWxlV2l0aEVs
ZW1lbnQuCi0gICAgcmV0dXJuIGF0dHJpYnV0ZSA9PSB0eXBlQXR0ciB8fCBhdHRyaWJ1dGUgPT0g
cmVhZG9ubHlBdHRyOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBmb3Ig
KDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAg
ICAvLyBBbGxvdyBjZXJ0YWluIGNvbW1vbiBhdHRyaWJ1dGVzICh1c2VkIGluIHRoZSBkZWZhdWx0
IHN0eWxlKSBpbiB0aGUgc2VsZWN0b3JzIHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgZWxlbWVudC4K
LSAgICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkgJiYgIWlzQ29tbW9u
QXR0cmlidXRlU2VsZWN0b3JBdHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNv
bW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNl
bGVjdG9yKSB7Ci0gICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoOyBzZWxl
Y3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgIGlmIChz
ZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0
b3Ioc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotUnVsZURhdGE6OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVs
ZSkKLSAgICA6IG1fcnVsZShydWxlKQotICAgICwgbV9zZWxlY3RvcihzZWxlY3RvcikKLSAgICAs
IG1fc3BlY2lmaWNpdHkoc2VsZWN0b3ItPnNwZWNpZmljaXR5KCkpCi0gICAgLCBtX3Bvc2l0aW9u
KHBvc2l0aW9uKQotICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY2FuVXNlRmFzdENo
ZWNrU2VsZWN0b3IgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihz
ZWxlY3RvcikpCi0gICAgLCBtX2hhc011bHRpcGFydFNlbGVjdG9yKCEhc2VsZWN0b3ItPnRhZ0hp
c3RvcnkoKSkKLSAgICAsIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9u
UnVsZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChzZWxlY3Rvcikp
Ci0gICAgLCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihXZWJDb3JlOjpjb250
YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQotICAgICwgbV9saW5rTWF0
Y2hUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZShzZWxlY3Rvcikp
Ci0gICAgLCBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbikKLSAgICAsIG1faXNJblJlZ2lvblJ1bGUoaW5SZWdpb25SdWxlKQotewotICAgIFNlbGVj
dG9yQ2hlY2tlcjo6Y29sbGVjdElkZW50aWZpZXJIYXNoZXMobV9zZWxlY3RvciwgbV9kZXNjZW5k
YW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKLX0K
LQotUnVsZVNldDo6UnVsZVNldCgpCi0gICAgOiBtX3J1bGVDb3VudCgwKQotICAgICwgbV9hdXRv
U2hyaW5rVG9GaXRFbmFibGVkKHRydWUpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb2xs
ZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIGZlYXR1cmVz
LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpJZCkKLSAgICAgICAgZmVhdHVyZXMuaWRzSW5SdWxlcy5hZGQo
c2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKLSAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRl
U2VsZWN0b3IoKSkKLSAgICAgICAgZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChzZWxlY3Rvci0+
YXR0cmlidXRlKCkubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICBzd2l0Y2ggKHNlbGVjdG9yLT5w
c2V1ZG9UeXBlKCkpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExpbmU6Ci0g
ICAgICAgIGZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0JlZm9yZToKLSAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9BZnRlcjoKLSAgICAgICAgZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXMg
PSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5r
OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6Ci0gICAgICAgIGZlYXR1cmVz
LnVzZXNMaW5rUnVsZXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21S
dWxlRGF0YShTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0IFJ1bGVEYXRh
JiBydWxlRGF0YSkKLXsKLSAgICBib29sIGZvdW5kU2libGluZ1NlbGVjdG9yID0gZmFsc2U7Ci0g
ICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3RvcigpOyBzZWxl
Y3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgIGNvbGxl
Y3RGZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc2VsZWN0b3IpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVj
dG9yTGlzdCgpKSB7Ci0gICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJTZWxlY3RvciA9
IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3I7IHN1YlNlbGVjdG9yID0gQ1NTU2Vs
ZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9yKSkgewotICAgICAgICAgICAgICAgIGlmICghZm91
bmRTaWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHN1YlNlbGVjdG9yKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghZm91bmRTaWJsaW5nU2VsZWN0b3Ig
JiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCi0gICAgICAgICAgICBmb3VuZFNpYmxp
bmdTZWxlY3RvciA9IHRydWU7Ci0gICAgfQotICAgIGlmIChmb3VuZFNpYmxpbmdTZWxlY3RvcikK
LSAgICAgICAgZmVhdHVyZXMuc2libGluZ1J1bGVzLmFwcGVuZChTdHlsZVJlc29sdmVyOjpSdWxl
RmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCksIHJ1bGVEYXRhLmhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkpOwotICAgIGlmIChydWxlRGF0YS5jb250YWluc1Vu
Y29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgZmVhdHVyZXMudW5jb21tb25BdHRy
aWJ1dGVSdWxlcy5hcHBlbmQoU3R5bGVSZXNvbHZlcjo6UnVsZUZlYXR1cmUocnVsZURhdGEucnVs
ZSgpLCBydWxlRGF0YS5zZWxlY3RvcigpLCBydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luKCkpKTsKLX0KLSAgICAKLXZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmlu
Z0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQot
ewotICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm47Ci0gICAgT3duUHRyPFZlY3RvcjxSdWxl
RGF0YT4gPiYgcnVsZXMgPSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsK
LSAgICBpZiAoIXJ1bGVzKQotICAgICAgICBydWxlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UnVs
ZURhdGE+KTsKLSAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKLX0KLQotdm9pZCBSdWxlU2V0
OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJv
b2wgaW5SZWdpb25SdWxlKQotewotICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9y
LCBtX3J1bGVDb3VudCsrLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hl
Y2tTZWxlY3RvciwgaW5SZWdpb25SdWxlKTsKLSAgICBjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURh
dGEobV9mZWF0dXJlcywgcnVsZURhdGEpOwotCi0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpJZCkgewotICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVl
KCkuaW1wbCgpLCBtX2lkUnVsZXMsIHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKSB7Ci0gICAg
ICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1fY2xhc3NSdWxlcywg
cnVsZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzZWxlY3Rvci0+aXNV
bmtub3duUHNldWRvRWxlbWVudCgpKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+
dmFsdWUoKS5pbXBsKCksIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzLCBydWxlRGF0YSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Q
c2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKSkgewotICAgICAgICBzd2l0Y2ggKHNlbGVjdG9y
LT5wc2V1ZG9UeXBlKCkpIHsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluazoK
LSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKLSAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKLSAgICAgICAgICAgIG1fbGlua1BzZXVkb0NsYXNz
UnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6Ci0gICAgICAgICAgICBtX2ZvY3VzUHNldWRvQ2xh
c3NSdWxlcy5hcHBlbmQocnVsZURhdGEpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9
IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUoKTsKLSAgICBpZiAobG9jYWxOYW1lICE9IHN0YXJB
dG9tKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChsb2NhbE5hbWUuaW1wbCgpLCBtX3RhZ1J1bGVz
LCBydWxlRGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV91bml2ZXJzYWxSdWxl
cy5hcHBlbmQocnVsZURhdGEpOwotfQotCi12b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxl
UnVsZVBhZ2UqIHJ1bGUpCi17Ci0gICAgbV9wYWdlUnVsZXMuYXBwZW5kKHJ1bGUpOwotfQotCi12
b2lkIFJ1bGVTZXQ6OmFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiByZWdpb25SdWxlLCBi
b29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IHJl
Z2lvblJ1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAvLyBUaGUgcmVnaW9uIHJ1bGUg
c2V0IHNob3VsZCB0YWtlIGludG8gYWNjb3VudCB0aGUgcG9zaXRpb24gaW5zaWRlIHRoZSBwYXJl
bnQgcnVsZSBzZXQuCi0gICAgLy8gT3RoZXJ3aXNlLCB0aGUgcnVsZXMgaW5zaWRlIHJlZ2lvbiBi
bG9jayBtaWdodCBiZSBpbmNvcnJlY3RseSBwb3NpdGlvbmVkIGJlZm9yZSBvdGhlciBzaW1pbGFy
IHJ1bGVzIGZyb20KLSAgICAvLyB0aGUgc3R5bGVzaGVldCB0aGF0IGNvbnRhaW5zIHRoZSByZWdp
b24gYmxvY2suCi0gICAgcmVnaW9uUnVsZVNldC0+bV9ydWxlQ291bnQgPSBtX3J1bGVDb3VudDsK
LQotICAgIC8vIENvbGxlY3QgdGhlIHJlZ2lvbiBydWxlcyBpbnRvIGEgcnVsZSBzZXQKLSAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSByZWdpb25S
dWxlLT5jaGlsZFJ1bGVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkUnVs
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxlQmFzZSogcmVnaW9uU3R5bGluZ1J1
bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgpOwotICAgICAgICBpZiAocmVnaW9uU3R5bGluZ1J1bGUt
PmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICByZWdpb25SdWxlU2V0LT5hZGRTdHlsZVJ1bGUo
c3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpLCBoYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luLCB0cnVlLCB0cnVlKTsKLSAgICB9Ci0gICAgLy8gVXBkYXRlIHRoZSAiZ2xv
YmFsIiBydWxlIGNvdW50IHNvIHRoYXQgcHJvcGVyIG9yZGVyIGlzIG1haW50YWluZWQKLSAgICBt
X3J1bGVDb3VudCA9IHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50OwotCi0gICAgbV9yZWdpb25T
ZWxlY3RvcnNBbmRSdWxlU2V0cy5hcHBlbmQoUnVsZVNldFNlbGVjdG9yUGFpcihyZWdpb25SdWxl
LT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCByZWdpb25SdWxlU2V0LnJlbGVhc2UoKSkpOwotfQot
Ci12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCogc2hl
ZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVSZXNvbHZlciogc3R5
bGVTZWxlY3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCi17Ci0gICAgQVNTRVJUKHNo
ZWV0KTsKLQotICAgIC8vIE5vIG1lZGlhIGltcGxpZXMgImFsbCIsIGJ1dCBpZiBhIG1lZGlhIGxp
c3QgZXhpc3RzIGl0IG11c3QKLSAgICAvLyBjb250YWluIG91ciBjdXJyZW50IG1lZGl1bQotICAg
IGlmIChzaGVldC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1lZGl1bS5ldmFsKHNoZWV0LT5tZWRpYVF1
ZXJpZXMoKSwgc3R5bGVTZWxlY3RvcikpCi0gICAgICAgIHJldHVybjsgLy8gdGhlIHN0eWxlIHNo
ZWV0IGRvZXNuJ3QgYXBwbHkKLSAgICAKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVs
ZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzaGVldC0+aW1wb3J0UnVsZXMoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
U3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0gaW1wb3J0UnVsZXNbaV0uZ2V0KCk7Ci0gICAg
ICAgIGlmIChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFpbXBvcnRSdWxlLT5tZWRpYVF1
ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSwgc3R5bGVT
ZWxlY3RvcikpKQotICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0UnVsZS0+c3R5
bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IsIHNjb3BlKTsKLSAgICB9Ci0gICAgYm9v
bCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID0gc3R5bGVTZWxlY3RvciAmJiBzdHlsZVNlbGVj
dG9yLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHNoZWV0LT5iYXNl
VVJMKCkpOwotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBydWxl
cyA9IHNoZWV0LT5jaGlsZFJ1bGVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1
bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGUgPSBydWxlc1tp
XS5nZXQoKTsKLQotICAgICAgICBBU1NFUlQoIXJ1bGUtPmlzSW1wb3J0UnVsZSgpKTsKLSAgICAg
ICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFz
Y29wZSk7Ci0gICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkKLSAgICAgICAgICAg
IGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxlKSk7Ci0gICAgICAg
IGVsc2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKLSAgICAgICAgICAgIFN0eWxlUnVsZU1l
ZGlhKiBtZWRpYVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVNZWRpYSo+KHJ1bGUpOwotCi0g
ICAgICAgICAgICBpZiAoKCFtZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFs
KG1lZGlhUnVsZS0+bWVkaWFRdWVyaWVzKCksIHN0eWxlU2VsZWN0b3IpKSkgewotICAgICAgICAg
ICAgICAgIC8vIFRyYXZlcnNlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBAbWVkaWEgcnVsZS4KLSAg
ICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxk
UnVsZXMgPSBtZWRpYVJ1bGUtPmNoaWxkUnVsZXMoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraikgewotICAgICAgICAgICAg
ICAgICAgICBTdHlsZVJ1bGVCYXNlKiBjaGlsZFJ1bGUgPSBjaGlsZFJ1bGVzW2pdLmdldCgpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRSdWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGNo
aWxkUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNQYWdlUnVsZSgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KGNoaWxk
UnVsZSkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzRm9udEZh
Y2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29w
ZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNjb3BlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9
IHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4oY2hpbGRSdWxlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1
bGUoZm9udEZhY2VSdWxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3It
PmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2hpbGRSdWxlLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9y
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRv
IG91ciBzZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIpOiBX
ZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRo
ZSBtb21lbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHls
ZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1l
cyo+KGNoaWxkUnVsZSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fSAgIC8vIGZvciBydWxlcwotICAgICAgICAgICAgfSAgIC8vIGlmIHJ1bGVzCi0gICAgICAgIH0g
ZWxzZSBpZiAocnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7Ci0gICAg
ICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KLSAgICAgICAgICAgIC8v
IEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3Bl
ZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAgICBpZiAoc2NvcGUpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb25zdCBTdHlsZVJ1bGVGb250
RmFjZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlRm9udEZhY2UqPihydWxl
KTsKLSAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFj
ZVJ1bGUoZm9udEZhY2VSdWxlKTsKLSAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmludmFsaWRh
dGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNL
ZXlmcmFtZXNSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewotICAgICAgICAgICAgLy8gRklYTUUg
KEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVkIHN0eWxl
IHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KLSAgICAgICAgICAgIGlmIChzY29wZSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1l
U3R5bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4ocnVsZSkpOwotICAgICAgICB9
IGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9uUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9u
IHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAg
ICBpZiAoc2NvcGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhZGRS
ZWdpb25SdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLCBoYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobV9hdXRvU2hyaW5r
VG9GaXRFbmFibGVkKQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwotfQotCi12b2lkIFJ1bGVTZXQ6
OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSkK
LXsKLSAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3Qo
KTsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkKLSAgICAgICAgYWRkUnVsZShydWxl
LCBzLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3Rvciwg
aXNJblJlZ2lvblJ1bGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9y
c1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBtYXApCi17Ci0gICAgUnVsZVNldDo6QXRvbVJ1
bGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKLSAgICBmb3IgKFJ1bGVTZXQ6OkF0b21S
dWxlTWFwOjppdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPnNocmlua1RvRml0KCk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6c2hyaW5r
VG9GaXQoKQotewotICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2lkUnVsZXMpOwotICAgIHNo
cmlua01hcFZlY3RvcnNUb0ZpdChtX2NsYXNzUnVsZXMpOwotICAgIHNocmlua01hcFZlY3RvcnNU
b0ZpdChtX3RhZ1J1bGVzKTsKLSAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV9zaGFkb3dQc2V1
ZG9FbGVtZW50UnVsZXMpOwotICAgIG1fbGlua1BzZXVkb0NsYXNzUnVsZXMuc2hyaW5rVG9GaXQo
KTsKLSAgICBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlcy5zaHJpbmtUb0ZpdCgpOwotICAgIG1fdW5p
dmVyc2FsUnVsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgp
OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0aGlzIGlzIG1vc3Rs
eSBib3Jpbmcgc3R1ZmYgb24gaG93IHRvIGFwcGx5IGEgY2VydGFpbiBydWxlIHRvIHRoZSByZW5k
ZXJzdHlsZS4uLgotCi1MZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRvSW50TGVuZ3RoKENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5k
ZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKLXsKLSAgICByZXR1cm4gcHJp
bWl0aXZlVmFsdWUgPyBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdl
ckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IFZp
ZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIp
IDogTGVuZ3RoKFVuZGVmaW5lZCk7Ci19Ci0KLUxlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0
VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlbmRlclN0
eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCi17
Ci0gICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlID8gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xl
bmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25D
b252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGUsIHJvb3RTdHls
ZSwgbXVsdGlwbGllcikgOiBMZW5ndGgoVW5kZWZpbmVkKTsKLX0KLQotdGVtcGxhdGUgPGJvb2wg
YXBwbHlGaXJzdD4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0ltcG9y
dGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBib29sIGZpbHRlclJlZ2lvblByb3BlcnRpZXMpCi17
Ci0gICAgQVNTRVJUKCFmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzIHx8IG1fcmVnaW9uRm9yU3R5bGlu
Zyk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50KCksIHJ1bGUpOwotCi0g
ICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IENTU1Byb3BlcnR5JiBjdXJyZW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlBdChp
KTsKLSAgICAgICAgaWYgKGlzSW1wb3J0YW50ICE9IGN1cnJlbnQuaXNJbXBvcnRhbnQoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaW5oZXJpdGVkT25seSAmJiAhY3VycmVu
dC5pc0luaGVyaXRlZCgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgdmFsdWUg
aXMgZXhwbGljaXRseSBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gYXBwbHkgZnVydGhlciBub24taW5o
ZXJpdGVkIHByb3BlcnRpZXMKLSAgICAgICAgICAgIC8vIGFzIHRoZXkgbWlnaHQgb3ZlcnJpZGUg
dGhlIHZhbHVlIGluaGVyaXRlZCBoZXJlLiBGb3IgdGhpcyByZWFzb24gd2UgZG9uJ3QgYWxsb3cg
ZGVjbGFyYXRpb25zIHdpdGgKLSAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgaW5oZXJpdGVkIHBy
b3BlcnRpZXMgdG8gYmUgY2FjaGVkLgotICAgICAgICAgICAgQVNTRVJUKCFjdXJyZW50LnZhbHVl
KCktPmlzSW5oZXJpdGVkVmFsdWUoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5ID0gY3VycmVudC5pZCgpOwotCi0gICAg
ICAgIGlmIChmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzICYmICFTdHlsZVJlc29sdmVyOjppc1ZhbGlk
UmVnaW9uU3R5bGVQcm9wZXJ0eShwcm9wZXJ0eSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBpZiAoYXBwbHlGaXJzdCkgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoZmly
c3RDU1NQcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUNvbG9yLCBDU1NfY29sb3JfaXNfZmlyc3RfcHJv
cGVydHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJvcGVydHlab29tID09IENT
U1Byb3BlcnR5Q29sb3IgKyAxOCwgQ1NTX3pvb21faXNfZW5kX29mX2ZpcnN0X3Byb3BfcmFuZ2Up
OwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0ID09IENT
U1Byb3BlcnR5Wm9vbSArIDEsIENTU19saW5lX2hlaWdodF9pc19hZnRlcl96b29tKTsKLSAgICAg
ICAgICAgIC8vIGdpdmUgc3BlY2lhbCBwcmlvcml0eSB0byBmb250LXh4eCwgY29sb3IgcHJvcGVy
dGllcywgZXRjCi0gICAgICAgICAgICBpZiAocHJvcGVydHkgPiBDU1NQcm9wZXJ0eUxpbmVIZWln
aHQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAvLyB3ZSBhcHBseSBs
aW5lLWhlaWdodCBsYXRlcgotICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5
TGluZUhlaWdodCkgewotICAgICAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gY3VycmVu
dC52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJvcGVydHkgPiBD
U1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQu
aWQoKSwgY3VycmVudC52YWx1ZSgpKTsKLSAgICB9Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRQcm9jZXNzUnVsZShjb29raWUpOwotfQotCi10ZW1wbGF0ZSA8Ym9vbCBhcHBseUZp
cnN0Pgotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1h
dGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgs
IGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KQotewotICAgIGlmIChzdGFydEluZGV4
ID09IC0xKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdHlsZS0+aW5zaWRlTGluaygp
ICE9IE5vdEluc2lkZUxpbmspIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkg
PD0gZW5kSW5kZXg7ICsraSkgewotICAgICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMm
IG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbWF0Y2hlZFByb3BlcnRpZXMubGlu
a01hdGNoVHlwZTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlciB0byBw
YXNzIHRoZXNlIGFzIGFyZ3VtZW50cyBidXQgdGhhdCByZXF1aXJlcyBjaGFuZ2VzIGluIG1hbnkg
cGxhY2VzLgotICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBsaW5r
TWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7Ci0gICAgICAgICAgICBtX2Fw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JD
aGVja2VyOjpNYXRjaFZpc2l0ZWQ7Ci0KLSAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxhcHBs
eUZpcnN0PihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5t
YXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBtYXRjaGVkUHJvcGVy
dGllcy5pc0luUmVnaW9uUnVsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9hcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUgPSB0cnVlOwotICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmb3IgKGludCBp
ID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IE1hdGNo
ZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzW2ldOwotICAgICAgICBhcHBseVByb3BlcnRpZXM8YXBwbHlGaXJzdD4obWF0Y2hlZFBy
b3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBp
c0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgbWF0Y2hlZFByb3BlcnRpZXMuaXNJblJlZ2lvblJ1
bGUpOwotICAgIH0KLX0KLQotdW5zaWduZWQgU3R5bGVSZXNvbHZlcjo6Y29tcHV0ZU1hdGNoZWRQ
cm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyogcHJvcGVydGllcywgdW5zaWdu
ZWQgc2l6ZSkKLXsKLSAgICAKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KHBy
b3BlcnRpZXMsIHNpemVvZihNYXRjaGVkUHJvcGVydGllcykgKiBzaXplKTsKLX0KLQotYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBhLCBjb25zdCBTdHls
ZVJlc29sdmVyOjpNYXRjaFJhbmdlcyYgYikKLXsKLSAgICByZXR1cm4gYS5maXJzdFVBUnVsZSA9
PSBiLmZpcnN0VUFSdWxlCi0gICAgICAgICYmIGEubGFzdFVBUnVsZSA9PSBiLmxhc3RVQVJ1bGUK
LSAgICAgICAgJiYgYS5maXJzdEF1dGhvclJ1bGUgPT0gYi5maXJzdEF1dGhvclJ1bGUKLSAgICAg
ICAgJiYgYS5sYXN0QXV0aG9yUnVsZSA9PSBiLmxhc3RBdXRob3JSdWxlCi0gICAgICAgICYmIGEu
Zmlyc3RVc2VyUnVsZSA9PSBiLmZpcnN0VXNlclJ1bGUKLSAgICAgICAgJiYgYS5sYXN0VXNlclJ1
bGUgPT0gYi5sYXN0VXNlclJ1bGU7Ci19Ci0KLWJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZVJl
c29sdmVyOjpNYXRjaFJhbmdlcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMm
IGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVy
OjpNYXRjaGVkUHJvcGVydGllcyYgYikKLXsKLSAgICByZXR1cm4gYS5wcm9wZXJ0aWVzID09IGIu
cHJvcGVydGllcyAmJiBhLmxpbmtNYXRjaFR5cGUgPT0gYi5saW5rTWF0Y2hUeXBlOwotfQotCi1i
b29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGEs
IGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBiKQotewotICAgIHJldHVy
biAhKGEgPT0gYik7Ci19Ci0KLWNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGVJdGVtKiBTdHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUo
dW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0KQotewotICAgIEFT
U0VSVChoYXNoKTsKLQotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0g
bV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmZpbmQoaGFzaCk7Ci0gICAgaWYgKGl0ID09IG1fbWF0
Y2hlZFByb3BlcnRpZXNDYWNoZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUl0ZW0mIGNhY2hlSXRlbSA9IGl0LT5zZWNvbmQ7Ci0KLSAgICBzaXpl
X3Qgc2l6ZSA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsKLSAgICBpZiAo
c2l6ZSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBp
ZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV0gIT0gY2FjaGVJdGVtLm1hdGNoZWRQ
cm9wZXJ0aWVzW2ldKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChjYWNo
ZUl0ZW0ucmFuZ2VzICE9IG1hdGNoUmVzdWx0LnJhbmdlcykKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuICZjYWNoZUl0ZW07Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkVG9NYXRj
aGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlLCB1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0
Y2hSZXN1bHQpCi17Ci0gICAgc3RhdGljIHVuc2lnbmVkIG1hdGNoZWREZWNsYXJhdGlvbkNhY2hl
QWRkaXRpb25zQmV0d2VlblN3ZWVwcyA9IDEwMDsKLSAgICBpZiAoKyttX21hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA+PSBtYXRjaGVkRGVjbGFyYXRpb25DYWNo
ZUFkZGl0aW9uc0JldHdlZW5Td2VlcHMpIHsKLSAgICAgICAgc3dlZXBNYXRjaGVkUHJvcGVydGll
c0NhY2hlKCk7Ci0gICAgICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNl
TGFzdFN3ZWVwID0gMDsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzaCk7Ci0gICAgTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZUl0ZW0gY2FjaGVJdGVtOwotICAgIGNhY2hlSXRlbS5tYXRjaGVkUHJvcGVy
dGllcy5hcHBlbmQobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMpOwotICAgIGNhY2hlSXRl
bS5yYW5nZXMgPSBtYXRjaFJlc3VsdC5yYW5nZXM7Ci0gICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0
IGNhY2hlIHRoZSBvcmlnaW5hbCBSZW5kZXJTdHlsZSBpbnN0YW5jZS4gSXQgbWF5IGJlIGZ1cnRo
ZXIgbW9kaWZpZWQuCi0gICAgLy8gVGhlIFJlbmRlclN0eWxlIGluIHRoZSBjYWNoZSBpcyByZWFs
bHkganVzdCBhIGhvbGRlciBmb3IgdGhlIHN1YnN0cnVjdHVyZXMgYW5kIG5ldmVyIHVzZWQgYXMt
aXMuCi0gICAgY2FjaGVJdGVtLnJlbmRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0eWxl
KTsKLSAgICBjYWNoZUl0ZW0ucGFyZW50UmVuZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUo
cGFyZW50U3R5bGUpOwotICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5hZGQoaGFzaCwgY2Fj
aGVJdGVtKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjppbnZhbGlkYXRlTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZSgpCi17Ci0gICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmNsZWFyKCk7Ci19
Ci0KLXN0YXRpYyBib29sIGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKQotewotICAgIC8vIEZJWE1FOiBDU1NQcm9wZXJ0eVdlYmtpdFdy
aXRpbmdNb2RlIG1vZGlmaWVzIHN0YXRlIHdoZW4gYXBwbHlpbmcgdG8gZG9jdW1lbnQgZWxlbWVu
dC4gV2UgY2FuJ3Qgc2tpcCB0aGUgYXBwbHlpbmcgYnkgY2FjaGluZy4KLSAgICBpZiAoZWxlbWVu
dCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSAmJiBlbGVtZW50LT5k
b2N1bWVudCgpLT53cml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoc3R5bGUtPnVuaXF1ZSgpIHx8IChzdHlsZS0+c3R5bGVUeXBl
KCkgIT0gTk9QU0VVRE8gJiYgcGFyZW50U3R5bGUtPnVuaXF1ZSgpKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKHN0eWxlLT56b29tKCkgIT0gUmVuZGVyU3R5bGU6OmluaXRpYWxab29t
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBUaGUgY2FjaGUgYXNzdW1lcyBzdGF0
aWMga25vd2xlZGdlIGFib3V0IHdoaWNoIHByb3BlcnRpZXMgYXJlIGluaGVyaXRlZC4KLSAgICBp
ZiAocGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCkKLXsKLSAgICB1bnNpZ25lZCBjYWNoZUhhc2ggPSBtYXRjaFJlc3VsdC5pc0NhY2hlYWJsZSA/
IGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2gobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuZGF0YSgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpIDogMDsKLSAg
ICBib29sIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwotICAgIGNvbnN0IE1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVJdGVtKiBjYWNoZUl0ZW0gPSAwOwotICAgIGlmIChjYWNoZUhhc2ggJiYgKGNh
Y2hlSXRlbSA9IGZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjYWNoZUhhc2gsIG1hdGNo
UmVzdWx0KSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIGJ1aWxkIHVwIHRoZSBzdHlsZSBieSBjb3B5
aW5nIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIGFuIGVhcmxpZXIgc3R5bGUgb2JqZWN0
IGJ1aWx0IHVzaW5nIHRoZSBzYW1lIGV4YWN0Ci0gICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9u
cy4gV2UgdGhlbiBvbmx5IG5lZWQgdG8gYXBwbHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzLCBp
ZiBhbnksIGFzIHRoZWlyIHZhbHVlcyBjYW4gZGVwZW5kIG9uIHRoZSAKLSAgICAgICAgLy8gZWxl
bWVudCBjb250ZXh0LiBUaGlzIGlzIGZhc3QgYW5kIHNhdmVzIG1lbW9yeSBieSByZXVzaW5nIHRo
ZSBzdHlsZSBkYXRhIHN0cnVjdHVyZXMuCi0gICAgICAgIG1fc3R5bGUtPmNvcHlOb25Jbmhlcml0
ZWRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwotICAgICAgICBpZiAobV9wYXJl
bnRTdHlsZS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxl
LmdldCgpKSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IG1fc3R5bGUt
Pmluc2lkZUxpbmsoKTsKLSAgICAgICAgICAgIC8vIElmIHRoZSBjYWNoZSBpdGVtIHBhcmVudCBz
dHlsZSBoYXMgaWRlbnRpY2FsIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvIHRoZSBjdXJyZW50IHBh
cmVudCBzdHlsZSB0aGVuIHRoZQotICAgICAgICAgICAgLy8gcmVzdWx0aW5nIHN0eWxlIHdpbGwg
YmUgaWRlbnRpY2FsIHRvby4gV2UgY29weSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMgb3ZlciBm
cm9tIHRoZSBjYWNoZSBhbmQgYXJlIGRvbmUuCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0
RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgIC8vIFVuZm9y
dHVuYXRlbHkgdGhlIGxpbmsgc3RhdHVzIGlzIHRyZWF0ZWQgbGlrZSBhbiBpbmhlcml0ZWQgcHJv
cGVydHkuIFdlIG5lZWQgdG8gZXhwbGljaXRseSByZXN0b3JlIGl0LgotICAgICAgICAgICAgbV9z
dHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSB0cnVlOyAKLSAgICB9Ci0gICAg
Ly8gTm93IHdlIGhhdmUgYWxsIG9mIHRoZSBtYXRjaGVkIHJ1bGVzIGluIHRoZSBhcHByb3ByaWF0
ZSBvcmRlci4gV2FsayB0aGUgcnVsZXMgYW5kIGFwcGx5Ci0gICAgLy8gaGlnaC1wcmlvcml0eSBw
cm9wZXJ0aWVzIGZpcnN0LCBpLmUuLCB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVy
dGllcyBkZXBlbmQgb24uCi0gICAgLy8gVGhlIG9yZGVyIGlzICgxKSBoaWdoLXByaW9yaXR5IG5v
dCBpbXBvcnRhbnQsICgyKSBoaWdoLXByaW9yaXR5IGltcG9ydGFudCwgKDMpIG5vcm1hbCBub3Qg
aW1wb3J0YW50Ci0gICAgLy8gYW5kICg0KSBub3JtYWwgaW1wb3J0YW50LgotICAgIG1fbGluZUhl
aWdodFZhbHVlID0gMDsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KG1hdGNoUmVz
dWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KG1h
dGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRj
aFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczx0cnVlPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUs
IGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczx0cnVlPiht
YXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJl
c3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLQotICAgIGlmIChj
YWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG1f
c3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBtX2ZvbnREaXJ0eSA9IHRydWU7Ci0g
ICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIG91
ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRh
dGVGb250KCk7Ci0KLSAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3
ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQot
ICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0
VmFsdWUpOwotCi0gICAgLy8gTWFueSBwcm9wZXJ0aWVzIGRlcGVuZCBvbiB0aGUgZm9udC4gSWYg
aXQgY2hhbmdlcyB3ZSBqdXN0IGFwcGx5IGFsbCBwcm9wZXJ0aWVzLgotICAgIGlmIChjYWNoZUl0
ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gbV9zdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCkpCi0gICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNl
OwotCi0gICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJvcGVydGllcy4KLSAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUs
IGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgCi0gICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQg
YmFja2dyb3VuZCBzbyB0aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCi0gICAgY2FjaGVC
b3JkZXJBbmRCYWNrZ3JvdW5kKCk7Ci0gICAgCi0gICAgLy8gTm93IGRvIHRoZSBhdXRob3IgYW5k
IHVzZXIgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0aGUgIWltcG9ydGFudCBw
cm9wZXJ0aWVzLgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KG1hdGNoUmVzdWx0
LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxz
ZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBt
YXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJl
c3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBh
cHBseUluaGVyaXRlZE9ubHkpOwotICAgIAotICAgIGxvYWRQZW5kaW5nSW1hZ2VzKCk7Ci0gICAg
Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGxvYWRQZW5kaW5nU2hhZGVycygpOwotI2Vu
ZGlmCi0gICAgCi0gICAgQVNTRVJUKCFtX2ZvbnREaXJ0eSk7Ci0gICAgCi0gICAgaWYgKGNhY2hl
SXRlbSB8fCAhY2FjaGVIYXNoKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0NhY2hlYWJs
ZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShtX2VsZW1lbnQsIG1fc3R5bGUuZ2V0KCksIG1fcGFy
ZW50U3R5bGUpKQotICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0Nh
Y2hlKG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQp
OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVBhZ2VSdWxlcyhjb25zdCBTdHlsZVJ1
bGVQYWdlKiByMSwgY29uc3QgU3R5bGVSdWxlUGFnZSogcjIpCi17Ci0gICAgcmV0dXJuIHIxLT5z
ZWxlY3RvcigpLT5zcGVjaWZpY2l0eSgpIDwgcjItPnNlbGVjdG9yKCktPnNwZWNpZmljaXR5KCk7
Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hQYWdlUnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgUnVsZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwg
Y29uc3QgU3RyaW5nJiBwYWdlTmFtZSkKLXsKLSAgICBpZiAoIXJ1bGVzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+IG1hdGNoZWRQYWdlUnVsZXM7Ci0gICAg
bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KG1hdGNoZWRQYWdlUnVsZXMsIHJ1bGVzLT5wYWdlUnVsZXMo
KSwgaXNMZWZ0UGFnZSwgaXNGaXJzdFBhZ2UsIHBhZ2VOYW1lKTsKLSAgICBpZiAobWF0Y2hlZFBh
Z2VSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0ZDo6c3RhYmxlX3Nv
cnQobWF0Y2hlZFBhZ2VSdWxlcy5iZWdpbigpLCBtYXRjaGVkUGFnZVJ1bGVzLmVuZCgpLCBjb21w
YXJlUGFnZVJ1bGVzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUGFn
ZVJ1bGVzLnNpemUoKTsgaSsrKQotICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQs
IG1hdGNoZWRQYWdlUnVsZXNbaV0tPnByb3BlcnRpZXMoKSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNo
ZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgcnVsZXMsIGJvb2wgaXNMZWZ0
UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSkKLXsKLSAgICB1
bnNpZ25lZCBzaXplID0gcnVsZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxlUGFnZSogcnVsZSA9IHJ1bGVzW2ldOwot
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yTG9jYWxOYW1lID0gcnVsZS0+c2Vs
ZWN0b3IoKS0+dGFnKCkubG9jYWxOYW1lKCk7Ci0gICAgICAgIGlmIChzZWxlY3RvckxvY2FsTmFt
ZSAhPSBzdGFyQXRvbSAmJiBzZWxlY3RvckxvY2FsTmFtZSAhPSBwYWdlTmFtZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZSBwc2V1ZG9UeXBl
ID0gcnVsZS0+c2VsZWN0b3IoKS0+cHNldWRvVHlwZSgpOwotICAgICAgICBpZiAoKHBzZXVkb1R5
cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0xlZnRQYWdlICYmICFpc0xlZnRQYWdlKQotICAgICAg
ICAgICAgfHwgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1JpZ2h0UGFnZSAmJiBp
c0xlZnRQYWdlKQotICAgICAgICAgICAgfHwgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0ZpcnN0UGFnZSAmJiAhaXNGaXJzdFBhZ2UpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4g
aWdub3JlIGl0LgotICAgICAgICBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+
cHJvcGVydGllcygpOwotICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwgcHJvcGVydGllcy0+aXNF
bXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gQWRkIHRoaXMgcnVs
ZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgICAgICBtYXRjaGVkUnVsZXMuYXBw
ZW5kKHJ1bGUpOwotICAgIH0KLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjppc0xlZnRQYWdlKGlu
dCBwYWdlSW5kZXgpIGNvbnN0Ci17Ci0gICAgYm9vbCBpc0ZpcnN0UGFnZUxlZnQgPSBmYWxzZTsK
LSAgICBpZiAoIW1fcm9vdEVsZW1lbnRTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQot
ICAgICAgICBpc0ZpcnN0UGFnZUxlZnQgPSB0cnVlOwotCi0gICAgcmV0dXJuIChwYWdlSW5kZXgg
KyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZl
cjo6aXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW4g
Y2FzZSBvZiBmb3JjZWQgbGVmdC9yaWdodCBwYWdlLCBwYWdlIGF0IGluZGV4IDEgKG5vdCAwKSBj
YW4gYmUgdGhlIGZpcnN0IHBhZ2UuCi0gICAgcmV0dXJuICghcGFnZUluZGV4KTsKLX0KLQotU3Ry
aW5nIFN0eWxlUmVzb2x2ZXI6OnBhZ2VOYW1lKGludCAvKiBwYWdlSW5kZXggKi8pIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBwYWdlIGluZGV4IHRvIHBhZ2UgbmFtZSBtYXBwaW5n
LgotICAgIHJldHVybiAiIjsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIExpc3RUeXBlPgotc3RhdGlj
IHZvaWQgY29sbGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NT
U3R5bGVSdWxlPiA+JiB3cmFwcGVyTWFwLCBMaXN0VHlwZSogbGlzdFR5cGUpCi17Ci0gICAgaWYg
KCFsaXN0VHlwZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0VHlw
ZS0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBDU1NSdWxlKiBjc3NSdWxlID0gbGlzdFR5cGUtPml0ZW0oaSk7Ci0gICAgICAgIGlm
IChjc3NSdWxlLT5pc0ltcG9ydFJ1bGUoKSkKLSAgICAgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBw
ZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihjc3NSdWxlKS0+c3R5
bGVTaGVldCgpKTsKLSAgICAgICAgZWxzZSBpZiAoY3NzUnVsZS0+aXNNZWRpYVJ1bGUoKSkKLSAg
ICAgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PENT
U01lZGlhUnVsZSo+KGNzc1J1bGUpKTsKLSAgICAgICAgZWxzZSBpZiAoY3NzUnVsZS0+aXNSZWdp
b25SdWxlKCkpCi0gICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBz
dGF0aWNfY2FzdDxXZWJLaXRDU1NSZWdpb25SdWxlKj4oY3NzUnVsZSkpOwotICAgICAgICBlbHNl
IGlmIChjc3NSdWxlLT5pc1N0eWxlUnVsZSgpKSB7Ci0gICAgICAgICAgICBDU1NTdHlsZVJ1bGUq
IGNzc1N0eWxlUnVsZSA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGNzc1J1bGUpOwotICAg
ICAgICAgICAgd3JhcHBlck1hcC5hZGQoY3NzU3R5bGVSdWxlLT5zdHlsZVJ1bGUoKSwgY3NzU3R5
bGVSdWxlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29sbGVjdENTU09N
V3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+JiB3cmFw
cGVyTWFwLCBIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBzaGVldFdyYXBwZXJTZXQs
IFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKLXsKLSAgICBpZiAoIXN0eWxlU2hlZXQp
Ci0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc3R5bGVTaGVldFdy
YXBwZXIgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldCk7Ci0gICAgc2hlZXRXcmFw
cGVyU2V0LmFkZChzdHlsZVNoZWV0V3JhcHBlcik7Ci0gICAgY29sbGVjdENTU09NV3JhcHBlcnMo
d3JhcHBlck1hcCwgc3R5bGVTaGVldFdyYXBwZXIuZ2V0KCkpOwotfQotCi1zdGF0aWMgdm9pZCBj
b2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1
bGU+ID4mIHdyYXBwZXJNYXAsIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0
V3JhcHBlclNldCwgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3R5bGVTaGVldD4gPiYgc3R5bGVTaGVldHMgPSBkb2N1bWVudC0+c3R5bGVTaGVldHMoKS0+
dmVjdG9yKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0c1tp
XS5nZXQoKTsKLSAgICAgICAgaWYgKCFzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVy
TWFwLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkpOwotICAgIH0KLSAg
ICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzaGVldFdyYXBwZXJTZXQsIGRvY3Vt
ZW50LT5wYWdlVXNlclNoZWV0KCkpOwotfQotCi1DU1NTdHlsZVJ1bGUqIFN0eWxlUmVzb2x2ZXI6
OmVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVSdWxlKiBydWxlKQotewot
ICAgIGlmIChtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLmlzRW1wdHkoKSkgewotICAgICAg
ICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0
eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KTsKLSAgICAg
ICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9z
dHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBkZWZhdWx0U3R5bGVTaGVldCk7Ci0gICAgICAgIGNv
bGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVT
aGVldENTU09NV3JhcHBlclNldCwgcXVpcmtzU3R5bGVTaGVldCk7Ci0gICAgICAgIGNvbGxlY3RD
U1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENT
U09NV3JhcHBlclNldCwgc3ZnU3R5bGVTaGVldCk7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdyYXBw
ZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBl
clNldCwgbWF0aE1MU3R5bGVTaGVldCk7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1f
c3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwg
bWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyht
X3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQs
IGZ1bGxzY3JlZW5TdHlsZVNoZWV0KTsKLQotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyht
X3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQs
IGRvY3VtZW50KCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBl
ck1hcC5nZXQocnVsZSkuZ2V0KCk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHls
ZSogc3R5bGUpCi17Ci0gICAgaW5pdEVsZW1lbnQoMCk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2
ZSgwLCBzdHlsZSk7Ci0gICAgbV9zdHlsZSA9IHN0eWxlOwotICAgIGFwcGx5UHJvcGVydHlUb0N1
cnJlbnRTdHlsZShpZCwgdmFsdWUpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KGlkLCB2YWx1ZSk7Ci19Ci0K
LWlubGluZSBib29sIGlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQp
Ci17Ci0gICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgotICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlclRvcENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9t
Q29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eU91dGxpbmVDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
blJ1bGVDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0Nv
bG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKLSAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKLSAgICAgICAgLy8gQWxz
byBhbGxvdyBzaG9ydGhhbmRzIHNvIHRoYXQgaW5oZXJpdC9pbml0aWFsIHN0aWxsIHdvcmsuCi0g
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0OgotICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyQm90dG9tOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZToKLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGw6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6
Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBodHRw
Oi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLXJlZ2lvbnMvI3RoZS1hdC1yZWdpb24tc3R5bGUtcnVs
ZQotLy8gRklYTUU6IGFkZCBpbmNyZW1lbnRhbCBzdXBwb3J0IGZvciBvdGhlciByZWdpb24gc3R5
bGluZyBwcm9wZXJ0aWVzLgotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aXNWYWxpZFJlZ2lv
blN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKLXsKLSAgICBzd2l0Y2ggKGlkKSB7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi0vLyBTVkcgaGFuZGxlcyB6b29taW5nIGluIGEgZGlmZmVyZW50IHdheSBjb21wYXJl
ZCB0byBDU1MuIFRoZSB3aG9sZSBkb2N1bWVudCBpcyBzY2FsZWQgaW5zdGVhZAotLy8gb2YgZWFj
aCBpbmRpdmlkdWFsIGxlbmd0aCB2YWx1ZSBpbiB0aGUgcmVuZGVyIHN0eWxlIC8gdHJlZS4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGgqKCkKLS8vIG11bHRpcGxpZXMgZWFjaCByZXNv
bHZlZCBsZW5ndGggd2l0aCB0aGUgem9vbSBtdWx0aXBsaWVyIC0gc28gZm9yIFNWRyB3ZSBuZWVk
IHRvIGRpc2FibGUgdGhhdC4KLS8vIFRob3VnaCBhbGwgQ1NTIHZhbHVlcyB0aGF0IGNhbiBiZSBh
cHBsaWVkIHRvIG91dGVybW9zdCA8c3ZnPiBlbGVtZW50cyAod2lkdGgvaGVpZ2h0L2JvcmRlci9w
YWRkaW5nLi4uKQotLy8gbmVlZCB0byByZXNwZWN0IHRoZSBzY2FsaW5nLiBSZW5kZXJCb3ggKHRo
ZSBwYXJlbnQgY2xhc3Mgb2YgUmVuZGVyU1ZHUm9vdCkgZ3JhYnMgdmFsdWVzIGxpa2UKLS8vIHdp
ZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy8uLi4gZnJvbSB0aGUgUmVuZGVyU3R5bGUgLT4gZm9y
IFNWRyB0aGVzZSB2YWx1ZXMgd291bGQgbmV2ZXIgc2NhbGUsCi0vLyBpZiB3ZSdkIHBhc3MgYSAx
LjAgem9vbSBmYWN0b3IgZXZlcnlod2VyZS4gU28gd2Ugb25seSBwYXNzIGEgem9vbSBmYWN0b3Ig
b2YgMS4wIGZvciBzcGVjaWZpYwotLy8gcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgYWxsb3dlZCB0
byBzY2FsZSB3aXRoaW4gYSB6b29tZWQgU1ZHIGRvY3VtZW50IChsZXR0ZXIvd29yZC1zcGFjaW5n
L2ZvbnQtc2l6ZSkuCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxlcygpCi17Ci0g
ICAgcmV0dXJuIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOwotfQotCi0j
aWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLQotc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNr
QnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIq
IHNlbGVjdG9yLCBMZW5ndGgmIGxlbmd0aCkKLXsKLSAgICBMZW5ndGggd29ya2luZ0xlbmd0aCA9
IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1dG9D
b252ZXJzaW9uPihzZWxlY3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJvb3RFbGVtZW50U3R5bGUo
KSwgc2VsZWN0b3ItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgaWYgKHdvcmtpbmdM
ZW5ndGguaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICB3b3JraW5nTGVuZ3RoLnNldFF1aXJr
KHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSk7Ci0KLSAgICBsZW5ndGggPSB3b3JraW5n
TGVuZ3RoOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJh
Y2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPExlbmd0aD4mIGxlbmd0aHMsIFN0eWxlUmVz
b2x2ZXIqIHNlbGVjdG9yKQotewotICAgIC8vIEhhbmRsZSAnbm9uZScuCi0gICAgaWYgKHZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAg
ICAgICAgICAgIGxlbmd0aHMuYXBwZW5kKExlbmd0aChVbmRlZmluZWQpKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgZm9yIChDU1NWYWx1ZUxp
c3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAg
ICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgICAgIGlmICgh
Y3VyclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgICAgICBMZW5ndGggbGVuZ3RoOwotICAgICAgICAgICAgaWYgKCFjcmVh
dGVHcmlkVHJhY2tCcmVhZHRoKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oY3VyclZh
bHVlKSwgc2VsZWN0b3IsIGxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBsZW5ndGhzLmFwcGVuZChsZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotCi1zdGF0aWMg
Ym9vbCBjcmVhdGVHcmlkUG9zaXRpb24oQ1NTVmFsdWUqIHZhbHVlLCBMZW5ndGgmIHBvc2l0aW9u
KQotewotICAgIC8vIEZvciBub3csIHdlIG9ubHkgYWNjZXB0OiA8aW50ZWdlcj4gfCAnYXV0bycK
LSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgQVNT
RVJUKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKTsKLSAgICBwb3NpdGlvbi5zZXRWYWx1ZShw
cmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5k
aWYKLQotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlICp2YWx1ZSkKLXsKLSAgICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50Tm9kZSAm
JiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOwotICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUt
PmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFtX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVk
VmFsdWUoKSk7Ci0KLSAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJ
bmhlcml0IC0+ICFpc0luaXRpYWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVyaXQKLQotICAgIGlm
ICghYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgJiYgKCFhcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCkgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKLSAg
ICAgICAgLy8gTGltaXQgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvbmx5
IHRoZSBvbmVzIGhvbm9yZWQgYnkgOnZpc2l0ZWQuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoaXNJbmhlcml0ICYmIG1fcGFyZW50U3R5bGUgJiYgIW1fcGFyZW50U3R5bGUtPmhh
c0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVy
aXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgbV9wYXJlbnRTdHlsZS0+c2V0SGFzRXhwbGljaXRs
eUluaGVyaXRlZFByb3BlcnRpZXMoKTsKLQotICAgIC8vIGNoZWNrIGxvb2t1cCB0YWJsZSBmb3Ig
aW1wbGVtZW50YXRpb25zIGFuZCB1c2Ugd2hlbiBhdmFpbGFibGUKLSAgICBjb25zdCBQcm9wZXJ0
eUhhbmRsZXImIGhhbmRsZXIgPSBtX3N0eWxlQnVpbGRlci5wcm9wZXJ0eUhhbmRsZXIoaWQpOwot
ICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkgewotICAgICAgICBpZiAoaXNJbmhlcml0KQotICAg
ICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZSh0aGlzKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZSh0aGlz
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKHRoaXMsIHZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSA6IDA7Ci0KLSAgICBmbG9hdCB6b29tRmFjdG9yID0g
bV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlz
dCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9uZGluZyBm
cm9udC1lbmQKLSAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuICBTaG9ydGhhbmRzIChlLmcuIGJv
cmRlciwgYmFja2dyb3VuZCkgb2NjdXIgaW4gdGhpcyBsaXN0IGFzIHdlbGwgYW5kCi0gICAgLy8g
YXJlIG9ubHkgaGl0IHdoZW4gbWFwcGluZyAiaW5oZXJpdCIgb3IgImluaXRpYWwiIGludG8gZnJv
bnQtZW5kIHZhbHVlcy4KLSAgICBzd2l0Y2ggKGlkKSB7Ci0vLyBsaXN0cwotICAgIGNhc2UgQ1NT
UHJvcGVydHlDb250ZW50OgotICAgICAgICAvLyBsaXN0IG9mIHN0cmluZywgdXJpLCBjb3VudGVy
LCBhdHRyLCBpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW4gQ1NTMywgaXQgd2lsbCBiZSBw
b3NzaWJsZSB0byBpbmhlcml0IGNvbnRlbnQuICBJbiBDU1MyIGl0IGlzIG5vdC4gIFRoaXMKLSAg
ICAgICAgLy8gbm90ZSBpcyBhIHJlbWluZGVyIHRoYXQgZXZlbnR1YWxseSAiaW5oZXJpdCIgbmVl
ZHMgdG8gYmUgc3VwcG9ydGVkLgotCi0gICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAg
ICAgIG1fc3R5bGUtPmNsZWFyQ29udGVudCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBib29sIGRpZFNldCA9IGZhbHNlOwotICAgICAgICBmb3IgKENTU1Zh
bHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0g
ICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChp
dGVtLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgewotICAgICAgICAgICAgICAgIG1fc3R5bGUt
PnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0lt
YWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgZGlk
U2V0ID0gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0
YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7Ci0gICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSNlbmRpZgotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0
YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7Ci0gICAgICAgICAgICAg
ICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250
ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotCi0gICAg
ICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgp
LCBkaWRTZXQpOwotICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogQ2FuIGEgbmFtZXNwYWNlIGJlIHNwZWNpZmllZCBmb3IgYW4gYXR0cihmb28pPwotICAg
ICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKLSAgICAg
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAg
ICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlID0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0cik7Ci0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRv
bSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0
ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQotICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMuYXR0
cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNDb3VudGVyKCkpIHsKLSAgICAgICAgICAgICAgICBDb3Vu
dGVyKiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFsdWUtPmdldENvdW50ZXJWYWx1ZSgpOwotICAg
ICAgICAgICAgICAgIEVMaXN0U3R5bGVUeXBlIGxpc3RTdHlsZVR5cGUgPSBOb25lTGlzdFN0eWxl
OwotICAgICAgICAgICAgICAgIGludCBsaXN0U3R5bGVJZGVudCA9IGNvdW50ZXJWYWx1ZS0+bGlz
dFN0eWxlSWRlbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NT
VmFsdWVOb25lKQotICAgICAgICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nh
c3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKLSAgICAg
ICAgICAgICAgICBPd25QdHI8Q291bnRlckNvbnRlbnQ+IGNvdW50ZXIgPSBhZG9wdFB0cihuZXcg
Q291bnRlckNvbnRlbnQoY291bnRlclZhbHVlLT5pZGVudGlmaWVyKCksIGxpc3RTdHlsZVR5cGUs
IGNvdW50ZXJWYWx1ZS0+c2VwYXJhdG9yKCkpKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN3aXRj
aCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZU9wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChP
UEVOX1FVT1RFLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
Q2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChDTE9T
RV9RVU9URSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5v
T3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE5PX09Q
RU5fUVVPVEUsIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVO
b0Nsb3NlUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9f
Q0xPU0VfUVVPVEUsIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbCBhbmQgbm9uZSBkbyBub3QgaGF2ZSBhbnkgZWZm
ZWN0LgotICAgICAgICAgICAgICAgICAgICB7fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWRpZFNldCkKLSAgICAgICAgICAgIG1fc3R5
bGUtPmNsZWFyQ29udGVudCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NT
UHJvcGVydHlRdW90ZXM6Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIGlm
IChtX3BhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhtX3Bh
cmVudFN0eWxlLT5xdW90ZXMoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKDAp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNW
YWx1ZUxpc3QoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nh
c3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwotICAgICAgICAgICAgUXVvdGVzRGF0YSogZGF0YSA9
IFF1b3Rlc0RhdGE6OmNyZWF0ZShsaXN0LT5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBpZiAoIWRh
dGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBPdXQgb2YgbWVtb3J5Ci0gICAgICAgICAg
ICBTdHJpbmcqIHF1b3RlcyA9IGRhdGEtPmRhdGEoKTsKLSAgICAgICAgICAgIGZvciAoQ1NTVmFs
dWVMaXN0SXRlcmF0b3IgaSA9IGxpc3Q7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAg
ICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwotICAgICAgICAgICAgICAg
IEFTU0VSVChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgICAgIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkpOwotICAgICAgICAg
ICAgICAgIHF1b3Rlc1tpLmluZGV4KCldID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVl
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoYWRvcHRS
ZWYoZGF0YSkpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSk7Ci0gICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldFF1b3RlcyhhZG9wdFJlZihRdW90ZXNEYXRhOjpjcmVhdGUoMCkpKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1p
bHk6IHsKLSAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFuZCBpZHMKLSAgICAgICAgaWYgKGlz
SW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlw
dGlvbiA9IG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
OwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9u
dERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKLSAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2Ny
aXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2Ug
aWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNj
ID0gRm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1p
bHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlCi0gICAgICAgICAgICAvLyB0byBub24tbW9ub3NwYWNl
LgotICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnRE
ZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpCi0gICAgICAgICAgICAgICAgc2V0Rm9u
dFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLmRvY3Vt
ZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0g
MSwgZmFsc2UpKTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5
KGluaXRpYWxEZXNjLmdlbmVyaWNGYW1pbHkoKSk7Ci0gICAgICAgICAgICBpZiAoIWluaXRpYWxE
ZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5SXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRGYW1pbHkoaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKSk7Ci0gICAgICAg
ICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgRm9udEZhbWlseSYgZmly
c3RGYW1pbHkgPSBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKLSAgICAgICAgRm9udEZh
bWlseSogY3VyckZhbWlseSA9IDA7Ci0KLSAgICAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBu
ZXcgZm9udC1mYW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1p
bHkuCi0gICAgICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250RGVz
Y3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpOwotICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKLQotICAgICAgICBm
b3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5j
ZSgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKLSAgICAgICAg
ICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7Ci0gICAgICAgICAgICBBdG9taWNTdHJp
bmcgZmFjZTsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1
bWVudCgpLT5zZXR0aW5ncygpOwotICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJp
bmcoKSkKLSAgICAgICAgICAgICAgICBmYWNlID0gY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1
ZSgpOwotICAgICAgICAgICAgZWxzZSBpZiAoc2V0dGluZ3MpIHsKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlV2Via2l0Qm9keToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBz
ZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgotICAgICAgICAg
ICAgICAgICAgICAgICAgZmFjZSA9IHNlcmlmRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTZXJp
ZkZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZh
Y2UgPSBzYW5zU2VyaWZGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUN1cnNpdmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gY3Vyc2l2
ZUZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5l
cmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhbnRh
c3k6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gZmFudGFzeUZhbWlseTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnRE
ZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFjZToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZhY2UgPSBtb25vc3BhY2VGYW1pbHk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246
Ok1vbm9zcGFjZUZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmYWNlID0gcGljdG9ncmFwaEZhbWlseTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6
UGljdG9ncmFwaEZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZmFjZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWN1cnJGYW1pbHkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gRmlsbGluZyBpbiB0aGUgZmlyc3QgZmFtaWx5LgotICAgICAgICAgICAgICAg
ICAgICBmaXJzdEZhbWlseS5zZXRGYW1pbHkoZmFjZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZp
cnN0RmFtaWx5LmFwcGVuZEZhbWlseSgwKTsgLy8gUmVtb3ZlIGFueSBpbmhlcml0ZWQgZmFtaWx5
LWZhbGxiYWNrIGxpc3QuCi0gICAgICAgICAgICAgICAgICAgIGN1cnJGYW1pbHkgPSAmZmlyc3RG
YW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmll
ZEZvbnQoZm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSA9PSBGb250RGVzY3JpcHRpb246
Ok5vRmFtaWx5KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6
Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZhY2Up
OwotICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5
KTsKLSAgICAgICAgICAgICAgICAgICAgY3VyckZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBX
ZSBjYW4ndCBjYWxsIHVzZUZpeGVkRGVmYXVsdFNpemUoKSB1bnRpbCBhbGwgbmV3IGZvbnQgZmFt
aWxpZXMgaGF2ZSBiZWVuIGFkZGVkCi0gICAgICAgIC8vIElmIGN1cnJGYW1pbHkgaXMgbm9uLXpl
cm8gdGhlbiB3ZSBzZXQgYXQgbGVhc3Qgb25lIGZhbWlseSBvbiB0aGlzIGRlc2NyaXB0aW9uLgot
ICAgICAgICBpZiAoY3VyckZhbWlseSkgewotICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlv
bi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkg
IT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpCi0gICAgICAgICAgICAgICAgc2V0Rm9u
dFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLmRvY3Vt
ZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0g
MSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7Ci0KLSAgICAgICAgICAgIHNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0vLyBzaG9ydGhhbmQgcHJvcGVydGllcwotICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kOgotICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBtX3N0eWxl
LT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJhY2tn
cm91bmRDb2xvcihDb2xvcigpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc0luaGVy
aXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCptX3Bh
cmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
QmFja2dyb3VuZENvbG9yKG1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s6Ci0g
ICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhck1hc2tMYXll
cnMoKTsKLSAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgbV9zdHlsZS0+
aW5oZXJpdE1hc2tMYXllcnMoKm1fcGFyZW50U3R5bGUtPm1hc2tMYXllcnMoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKLSAgICAgICAgaWYgKGlzSW5oZXJp
dCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fcGFy
ZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGlu
ZUhlaWdodChtX3BhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgbV9saW5l
SGVpZ2h0VmFsdWUgPSAwOwotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKLSAg
ICAgICAgICAgIEFTU0VSVChzZXR0aW5ncyk7IC8vIElmIHdlJ3JlIGRvaW5nIHN0eWxlIHJlc29s
dXRpb24sIHRoaXMgZG9jdW1lbnQgc2hvdWxkIGFsd2F5cyBiZSBpbiBhIGZyYW1lIGFuZCB0aHVz
IGhhdmUgc2V0dGluZ3MKLSAgICAgICAgICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsK
LSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlw
dGlvbjo6U3RhbmRhcmRGYW1pbHkpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJl
bmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwotICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KG1fY2hlY2tlci5kb2N1bWVudCgpLT5w
cmludGluZygpKTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250
RmFtaWx5ID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCktPnN0YW5kYXJkRm9udEZh
bWlseSgpOwotICAgICAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnRGYW1pbHkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5
KHN0YW5kYXJkRm9udEZhbWlseSk7Ci0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZp
cnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVY
eFNtYWxsICsgMSk7Ci0gICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZv
bnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZh
bHNlKSk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjpp
bml0aWFsTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsK
LSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAg
ICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRM
aW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAg
IG1fbGluZUhlaWdodFZhbHVlID0gMDsKLQotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbjsKLSAgICAgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+
c3lzdGVtRm9udChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERlc2NyaXB0aW9uKTsK
LQotICAgICAgICAgICAgLy8gRG91YmxlLWNoZWNrIGFuZCBzZWUgaWYgdGhlIHRoZW1lIGRpZCBh
bnl0aGluZy4gIElmIG5vdCwgZG9uJ3QgYm90aGVyIHVwZGF0aW5nIHRoZSBmb250LgotICAgICAg
ICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZSByZW5kZXJpbmcgbW9kZSBhbmQgcHJpbnRlciBmb250IHNl
dHRpbmdzIGFyZSB1cGRhdGVkLgotICAgICAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwotICAgICAgICAgICAgICAgIEFTU0VS
VChzZXR0aW5ncyk7IC8vIElmIHdlJ3JlIGRvaW5nIHN0eWxlIHJlc29sdXRpb24sIHRoaXMgZG9j
dW1lbnQgc2hvdWxkIGFsd2F5cyBiZSBpbiBhIGZyYW1lIGFuZCB0aHVzIGhhdmUgc2V0dGluZ3MK
LSAgICAgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0
dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRVc2VQcmludGVyRm9udChtX2NoZWNrZXIuZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFjdG9yLgotICAgICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJv
bVNwZWNpZmllZFNpemUobV9jaGVja2VyLmRvY3VtZW50KCksIG1fc3R5bGUuZ2V0KCksIGZvbnRE
ZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6
ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwotICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYg
KHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBGb250VmFsdWUgKmZvbnQgPSBz
dGF0aWNfY2FzdDxGb250VmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIWZvbnQtPnN0
eWxlIHx8ICFmb250LT52YXJpYW50IHx8ICFmb250LT53ZWlnaHQgfHwKLSAgICAgICAgICAgICAg
ICAgIWZvbnQtPnNpemUgfHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZvbnQtPmZhbWlseSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOwotICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQtPndlaWdodC5n
ZXQoKSk7Ci0gICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcHJvcGVydGllcyBjYW4gZGlydHkg
b3VyIGZvbnQgYnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZvbnQncwotICAgICAgICAg
ICAgLy8gcHJvcGVydGllcyBiYWNrLCB3aGljaCBpcyBzYWZlLiBIb3dldmVyIGlmIGZvbnQtc2l6
ZSBpcyB1c2luZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxsCi0gICAgICAgICAgICAvLyBuZWVkIHF1
ZXJ5IHRoZSBkaXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0byBnZXQgdGhlIGNvbXB1dGVkIHNpemUu
IFRvIGJlIHNhZmUgaW4gdGhpcwotICAgICAgICAgICAgLy8gY2FzZSwgbGV0J3MganVzdCB1cGRh
dGUgdGhlIGZvbnQgbm93LgotICAgICAgICAgICAgdXBkYXRlRm9udCgpOwotICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKLQot
ICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBmb250LT5saW5lSGVpZ2h0LmdldCgpOwot
Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+
ZmFtaWx5LmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDU1Mz
IFByb3BlcnRpZXMKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKLSAgICBjYXNlIENT
U1Byb3BlcnR5Qm94U2hhZG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6
IHsKLSAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgaWYgKGlkID09IENTU1By
b3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9zdHlsZS0+c2V0VGV4
dFNoYWRvdyhtX3BhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93
RGF0YSgqbV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsKLSAgICAgICAg
ICAgIHJldHVybiBtX3N0eWxlLT5zZXRCb3hTaGFkb3cobV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93
KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkp
KSA6IG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0
aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCi0gICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NT
UHJvcGVydHlUZXh0U2hhZG93ID8gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IG1f
c3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKLQotICAgICAgICBpZiAoIXZhbHVlLT5pc1Zh
bHVlTGlzdCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZvciAoQ1NTVmFsdWVM
aXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAg
ICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAo
IWN1cnJWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+
KGN1cnJWYWx1ZSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8
aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAg
ICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1
ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50
U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKLSAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5z
cHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RF
bGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKLSAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNo
YWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0g
ICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChtX3N0eWxlKQotICAgICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+Y29sb3IoKTsK
LQotICAgICAgICAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihu
ZXcgU2hhZG93RGF0YShJbnRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwg
aWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9y
IDogQ29sb3I6OnRyYW5zcGFyZW50KSk7Ci0gICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVy
dHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTaGFkb3coc2hh
ZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlz
IGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7
IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3hSZWZsZWN0OiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJveFJlZmxl
Y3QsIEJveFJlZmxlY3QpCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3Qo
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbHVl
LT5pc1JlZmxlY3RWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1Jl
ZmxlY3RWYWx1ZSogcmVmbGVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUmVmbGVjdFZhbHVlKj4o
dmFsdWUpOwotICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5
bGVSZWZsZWN0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9u
KHJlZmxlY3RWYWx1ZS0+ZGlyZWN0aW9uKCkpOwotICAgICAgICBpZiAocmVmbGVjdFZhbHVlLT5v
ZmZzZXQoKSkKLSAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUt
Pm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSwgem9vbUZhY3RvcikpOwotICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwotICAg
ICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwotICAgICAgICBtYXBOaW5lUGllY2VJbWFnZShp
ZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOwotICAgICAgICByZWZsZWN0aW9uLT5zZXRN
YXNrKG1hc2spOwotCi0gICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5y
ZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlP
cGFjaXR5OgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZF
KG9wYWNpdHksIE9wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5
U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2U6IC8vIE9ubHkgdXNlZCBpbiBAZm9udC1m
YWNlIHJ1bGVzLgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENv
bHVtblJ1bGU6Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldENvbHVtblJ1bGVDb2xvcihtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1Zh
bGlkKCkgPyBtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSA6IG1fcGFyZW50U3R5bGUt
PmNvbG9yKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKG1fcGFy
ZW50U3R5bGUtPmNvbHVtblJ1bGVTdHlsZSgpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENv
bHVtblJ1bGVXaWR0aChtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+cmVz
ZXRDb2x1bW5SdWxlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFycXVlZToKLSAgICAgICAgaWYgKCFtX3BhcmVudE5vZGUgfHwgIXZhbHVlLT5pc0luaGVy
aXRlZFZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldE1h
cnF1ZWVEaXJlY3Rpb24obV9wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKLSAgICAg
ICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5j
cmVtZW50KCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQobV9wYXJlbnRTdHls
ZS0+bWFycXVlZVNwZWVkKCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50
KG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNl
dE1hcnF1ZWVCZWhhdmlvcihtX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRpb246
IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZUxvb3BDb3VudCwg
TWFycXVlZUxvb3BDb3VudCkKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlSW5maW5pdGUpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50
KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCi0gICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc051bWJlcigpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxv
b3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVlZDogewotICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVlU3BlZWQsIE1hcnF1ZWVTcGVlZCkK
LSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKGludCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGlkZW50KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNsb3c6
Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1
MDAgbXNlYy4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVl
ZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3Vw
ZXIgZmFzdC4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQotICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENT
U1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOwotICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0LgotICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRW
YWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFycXVlZUluY3JlbWVudDogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TChtYXJxdWVlSW5jcmVtZW50LCBNYXJxdWVlSW5jcmVtZW50KQotICAgICAgICBpZiAoIXByaW1p
dGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGw6Ci0gICAgICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVk
KSk7IC8vIDFweC4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFy
cXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVs
dC4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZUxhcmdlOgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVt
ZW50KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4KLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5ndGgg
bWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUo
KSwgbV9yb290RWxlbWVudFN0eWxlKTsKLSAgICAgICAgICAgIGlmICghbWFycXVlZUxlbmd0aC5p
c1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1l
bnQobWFycXVlZUxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUNsYW1wOgotICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKGxpbmVDbGFtcCwgTGluZUNsYW1wKQotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvY2FsZTogewotICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsb2NhbGUsIExvY2FsZSk7Ci0gICAgICAgIGlmICgh
cHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBtX3N0eWxl
LT5zZXRMb2NhbGUobnVsbEF0b20pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3N0eWxl
LT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2Rl
Rm9yRm9udFNlbGVjdGlvbihtX3N0eWxlLT5sb2NhbGUoKSkpOwotICAgICAgICBzZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6IHsKLSAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwodGV4dFNpemVBZGp1c3QsIFRleHRTaXplQWRqdXN0KQotICAgICAg
ICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2V0VGV4dFNpemVBZGp1c3QocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dERhc2hib2FyZFJlZ2lvbjogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChk
YXNoYm9hcmRSZWdpb25zLCBEYXNoYm9hcmRSZWdpb25zKQotICAgICAgICBpZiAoIXByaW1pdGl2
ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNl
dERhc2hib2FyZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgRGFzaGJvYXJkUmVnaW9u
ICpyZWdpb24gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RGFzaGJvYXJkUmVnaW9uVmFsdWUoKTsKLSAg
ICAgICAgaWYgKCFyZWdpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgRGFzaGJv
YXJkUmVnaW9uICpmaXJzdCA9IHJlZ2lvbjsKLSAgICAgICAgd2hpbGUgKHJlZ2lvbikgewotICAg
ICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnRvcCgpLCBz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0g
Y29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlKTsKLSAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9JbnRMZW5ndGgo
cmVnaW9uLT5ib3R0b20oKSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKLSAgICAgICAg
ICAgIExlbmd0aCBsZWZ0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+bGVmdCgpLCBzdHls
ZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwotCi0gICAgICAgICAgICBpZiAodG9wLmlzVW5kZWZp
bmVkKCkpCi0gICAgICAgICAgICAgICAgdG9wID0gTGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAo
cmlnaHQuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICByaWdodCA9IExlbmd0aCgpOwot
ICAgICAgICAgICAgaWYgKGJvdHRvbS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGJv
dHRvbSA9IExlbmd0aCgpOwotICAgICAgICAgICAgaWYgKGxlZnQuaXNVbmRlZmluZWQoKSkKLSAg
ICAgICAgICAgICAgICBsZWZ0ID0gTGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIGlmIChyZWdpb24t
Pm1faXNDaXJjbGUpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9u
KFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdo
dCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwotICAgICAg
ICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQotICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xl
LCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZp
cnN0ID8gZmFsc2UgOiB0cnVlKTsKLSAgICAgICAgICAgIHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0
LmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRI
YXNEYXNoYm9hcmRSZWdpb25zKHRydWUpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZVdpZHRoOiB7Ci0gICAgICAg
IEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRTdHJva2VXaWR0aCwgVGV4dFN0cm9rZVdp
ZHRoKQotICAgICAgICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVUaGluOgotICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU1lZGl1bToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVU
aGljazogewotICAgICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSAxLjAgLyA0ODsKLSAgICAg
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVNZWRp
dW0pCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVGhpY2spCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCAqPSA1OwotICAgICAgICAgICAgICAgIHdpZHRoID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1T
KS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29t
RmFjdG9yKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9y
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtX3N0eWxlLT5z
ZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwodHJhbnNmb3JtLCBUcmFuc2Zvcm0pOwotICAgICAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFs
dWUsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucyk7Ci0gICAgICAgIG1f
c3R5bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmU6IHsKLSAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwocGVyc3BlY3RpdmUsIFBlcnNwZWN0aXZlKQotCi0gICAgICAg
IGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBmbG9hdCBwZXJzcGVjdGl2ZVZhbHVlOwotICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0g
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5p
c051bWJlcigpKSB7Ci0gICAgICAgICAgICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwg
dHJlYXQgdmFsdWVsZXNzIG51bWJlcnMgYXMgcHguCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVZh
bHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+
KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChwZXJzcGVjdGl2ZVZhbHVlID49
IDAuMGYpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QW5pbWF0aW9uOgotICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+
Y2xlYXJBbmltYXRpb25zKCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAg
ICAgIG1fc3R5bGUtPmluaGVyaXRBbmltYXRpb25zKG1fcGFyZW50U3R5bGUtPmFuaW1hdGlvbnMo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlv
bjoKLSAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyVHJh
bnNpdGlvbnMoKTsKLSAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgbV9z
dHlsZS0+aW5oZXJpdFRyYW5zaXRpb25zKG1fcGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6Ci0gICAg
ewotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzY1NjEwNzc+IFdvcmsgYXJvdW5kIHRoZSBTdG9ja3Mgd2lkZ2V0J3MgbWlzdXNlIG9mIHRo
ZQotICAgICAgICAvLyBwb2ludGVyLWV2ZW50cyBwcm9wZXJ0eSBieSBub3QgYXBwbHlpbmcgaXQg
aW4gRGFzaGJvYXJkLgotICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIuZG9j
dW1lbnQoKS0+c2V0dGluZ3MoKTsKLSAgICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT51
c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuOwotI2VuZGlmCi0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklN
SVRJVkUocG9pbnRlckV2ZW50cywgUG9pbnRlckV2ZW50cykKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
YXBIaWdobGlnaHRDb2xvcjogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0
YXBIaWdobGlnaHRDb2xvciwgVGFwSGlnaGxpZ2h0Q29sb3IpOwotICAgICAgICBpZiAoIXByaW1p
dGl2ZVZhbHVlKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgQ29sb3IgY29sID0gY29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBtX3N0eWxlLT5z
ZXRUYXBIaWdobGlnaHRDb2xvcihjb2wpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
Ci0jaWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElORykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0T3ZlcmZsb3dTY3JvbGxpbmc6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUwodXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZywgVXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyk7
Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgbV9zdHlsZS0+c2V0VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRvdWNoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl
bmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgotICAgICAgICByZXR1cm47Ci0gICAg
Ly8gRGlyZWN0aW9uYWwgcHJvcGVydGllcyBhcmUgcmVzb2x2ZWQgYnkgcmVzb2x2ZURpcmVjdGlv
bkF3YXJlUHJvcGVydHkoKSBiZWZvcmUgdGhlIHN3aXRjaC4KLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyRW5kOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRDb2xv
cjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kU3R5bGU6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJTdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRDb2xv
cjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRTdHlsZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZv
cmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlU3R5bGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZVdpZHRoOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyQWZ0ZXJDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJTdHls
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJXaWR0aDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFyZ2luRW5kOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5TdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFyZ2luQ29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJl
Zm9yZUNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Ub3BDb2xsYXBz
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQWZ0ZXJDb2xsYXBzZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFBhZGRpbmdFbmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRp
bmdTdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0JlZm9yZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRMb2dpY2FsV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxIZWln
aHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2ljYWxXaWR0aDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNhbEhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWF4TG9naWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dp
Y2FsSGVpZ2h0OgotICAgIHsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3Bl
cnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgbV9zdHlsZS0+ZGlyZWN0aW9u
KCksIG1fc3R5bGUtPndyaXRpbmdNb2RlKCkpOwotICAgICAgICBBU1NFUlQobmV3SWQgIT0gaWQp
OwotICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOwotICAgIH0KLSAg
ICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0cmV0Y2g6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dExpbmVUaHJvdWdoQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhy
b3VnaE1vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaFN0eWxlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hXaWR0aDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dE92ZXJsaW5lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVDb2xvcjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lTW9kZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dE92ZXJsaW5lU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZVdp
ZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0VW5kZXJsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxp
bmVNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lU3R5bGU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Rm9udFNpemVEZWx0YToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRp
b25zSW5FZmZlY3Q6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2U6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpczoKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gQ1NTIFRleHQgTGF5b3V0IE1vZHVsZSBMZXZlbCAzOiBWZXJ0aWNhbCB3cml0aW5nIHN1
cHBvcnQKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGU6IHsKLSAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh3cml0aW5nTW9kZSwgV3Jp
dGluZ01vZGUpCi0gICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3Qgb2sgdG8gbW9kaWZ5IGRvY3Vt
ZW50IHN0YXRlIHdoaWxlIGFwcGx5aW5nIHN0eWxlLgotICAgICAgICBpZiAoIWlzSW5oZXJpdCAm
JiAhaXNJbml0aWFsICYmIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKLSAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24obV9zdHlsZS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhvcml6b250YWwgOiBWZXJ0aWNhbCk7Ci0gICAgICAg
IHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCb3hDb250YWluOiB7Ci0gICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpbmVCb3hDb250YWluLCBMaW5lQm94Q29u
dGFpbikKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJv
eENvbnRhaW4oTGluZUJveENvbnRhaW5Ob25lKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghdmFsdWUtPmlzQ1NTTGluZUJveENvbnRhaW5WYWx1ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU0xpbmVCb3hDb250YWluVmFsdWUqIGxp
bmVCb3hDb250YWluVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NMaW5lQm94Q29udGFpblZhbHVlKj4o
dmFsdWUpOwotICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFp
blZhbHVlLT52YWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRTaGFwZUluc2lkZToKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwod3JhcFNoYXBlSW5zaWRlLCBXcmFwU2hhcGVJbnNpZGUpOwotICAgICAgICBpZiAoIXBy
aW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgbV9zdHlsZS0+
c2V0V3JhcFNoYXBlSW5zaWRlKDApOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNTaGFwZSgpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0V3JhcFNoYXBlSW5zaWRlKHByaW1p
dGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlOgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTCh3cmFwU2hhcGVPdXRzaWRlLCBXcmFwU2hhcGVPdXRzaWRlKTsKLSAgICAgICAg
aWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIG1f
c3R5bGUtPnNldFdyYXBTaGFwZU91dHNpZGUoMCk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc1NoYXBlKCkpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRXcmFwU2hhcGVPdXRz
aWRlKHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpOwotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBDU1MgRm9udHMgTW9kdWxlIExldmVsIDMKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Rm9udEZlYXR1cmVTZXR0aW5nczogewotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYg
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9y
bWFsRmVhdHVyZVNldHRpbmdzKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0
PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGlu
Z3M+IHNldHRpbmdzID0gRm9udEZlYXR1cmVTZXR0aW5nczo6Y3JlYXRlKCk7Ci0gICAgICAgIGlu
dCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47
ICsraSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0LT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgaWYgKCFpdGVtLT5pc0ZvbnRGZWF0dXJlVmFsdWUo
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEZvbnRGZWF0dXJlVmFs
dWUqIGZlYXR1cmUgPSBzdGF0aWNfY2FzdDxGb250RmVhdHVyZVZhbHVlKj4oaXRlbSk7Ci0gICAg
ICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZvbnRGZWF0dXJlKGZlYXR1cmUtPnRhZygpLCBmZWF0
dXJlLT52YWx1ZSgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZl
YXR1cmVTZXR0aW5ncyhzZXR0aW5ncy5yZWxlYXNlKCkpOwotICAgICAgICBzZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOiB7Ci0g
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZpbHRlciwgRmlsdGVyKTsKLSAgICAg
ICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBpZiAoY3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25z
KSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEZpbHRlcihvcGVyYXRpb25zKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5zOiB7Ci0gICAgICAgIFZlY3RvcjxMZW5n
dGg+IGxlbmd0aHM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgbGVu
Z3RocywgdGhpcykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldEdy
aWRDb2x1bW5zKGxlbmd0aHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRHcmlkUm93czogewotICAgICAgICBWZWN0b3I8TGVuZ3RoPiBsZW5ndGhz
OwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIGxlbmd0aHMsIHRoaXMp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkUm93cyhsZW5n
dGhzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRHcmlkQ29sdW1uOiB7Ci0gICAgICAgIExlbmd0aCBjb2x1bW47Ci0gICAgICAgIGlmICghY3Jl
YXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1bW4pKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBtX3N0eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93OiB7Ci0gICAgICAgIExl
bmd0aCByb3c7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCByb3cpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkSXRlbVJvdyhyb3cp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBUaGVzZSBwcm9wZXJ0
aWVzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgU3R5bGVCdWlsZGVyIGxvb2t1cCB0YWJsZS4KLSAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDbGlwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZE9yaWdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0
aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUmVwZWF0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRTaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXI6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9t
Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXM6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJCb3R0b21TdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9t
V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNlOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2U6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlT3V0c2V0OgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJJbWFnZVJlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGlj
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckltYWdlV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnQ6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJhZGl1czoKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyUmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlclJpZ2h0V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmc6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlclN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJU
b3A6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BS
aWdodFJhZGl1czoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJX
aWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3hTaXppbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNhcHRpb25TaWRlOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlDbGVhcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcDoKLSAgICBjYXNlIENTU1By
b3BlcnR5Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQ6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUNvdW50ZXJSZXNldDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29y
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eURp
c3BsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUZsb2F0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToKLSAgICBjYXNlIENTU1By
b3BlcnR5Rm9udFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udFdlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0Ogot
ICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZVJlbmRlcmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5
TGVmdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZzoKLSAgICBjYXNlIENTU1By
b3BlcnR5TGluZUhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0
eWxlUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1hcmdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJn
aW5SaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luVG9wOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlNYXhIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlNaW5IZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1pbldpZHRoOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlPcnBoYW5zOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91
dGxpbmVPZmZzZXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVTdHlsZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5T3V0bGluZVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvdzoK
LSAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dYOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVy
Zmxvd1k6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVBhZGRpbmdCb3R0b206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdU
b3A6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlQYWdlQnJlYWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lk
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5UG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVJl
c2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVNp
emU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVNwZWFrOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJs
ZUxheW91dDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEFsaWduOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0RGVjb3JhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEluZGVudDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJmbG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
UmVuZGVyaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VHJhbnNmb3JtOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlUb3A6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduOgotICAgIGNhc2UgQ1NTUHJvcGVydHlWaXNpYmls
aXR5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25EdXJhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uRmlsbE1vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJh
dGlvbkNvdW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25QbGF5U3RhdGU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBcHBlYXJhbmNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRp
bzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFj
a2dyb3VuZE9yaWdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNpemU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckltYWdlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXM6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZzoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm94QWxpZ246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJveERpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RmxleDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RmxleEdyb3VwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3hMaW5lczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JkaW5hbEdyb3Vw
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmllbnQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJveFBhY2s6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbG9yQ29ycmVj
dGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQXhpczoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Q29sdW1uQnJlYWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJy
ZWFrSW5zaWRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uR2FwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRDb2x1bW5SdWxlQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVT
dHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5zOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5TcGFuOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0RmxleDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxl
eEFsaWduOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4RGlyZWN0aW9uOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4RmxvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
RmxleEl0ZW1BbGlnbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleExpbmVQYWNrOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4T3JkZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZsZXhQYWNrOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4V3JhcDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxvd0Zyb206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEZsb3dJbnRvOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250S2VybmluZzoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEhpZ2hsaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlQ2hhcmFjdGVy
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVyOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEJlZm9yZToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0SHlwaGVuczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUFsaWduOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dExpbmVHcmlkOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lU25hcDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZURpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFycXVlZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQXR0YWNo
bWVudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VPdXRzZXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tCb3hJbWFnZVJlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFz
a0JveEltYWdlU2xpY2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNv
dXJjZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlV2lkdGg6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQ29tcG9zaXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2U6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uWDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1JlcGVhdFg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TmJzcE1vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3Jp
Z2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpblg6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0UHJpbnRDb2xvckFkanVzdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
UmVnaW9uQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtC
ZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25PdmVyZmxvdzoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0UnRsT3JkZXJpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRDb21i
aW5lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvcjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RmlsbENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0T3JpZW50YXRp
b246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1cml0eToKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm1PcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9y
aWdpblg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblk6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlv
bjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2Vy
TW9kaWZ5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRXcmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwRmxv
dzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcE1hcmdpbjoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0V3JhcFBhZGRpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBU
aHJvdWdoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXaWRvd3M6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXb3JkQnJlYWs6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXb3JkV3JhcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5WkluZGV4OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlab29tOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuOwotI2lmIEVOQUJMRShTVkcpCi0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8g
VHJ5IHRoZSBTVkcgcHJvcGVydGllcwotICAgICAgICBhcHBseVNWR1Byb3BlcnR5KGlkLCB2YWx1
ZSk7Ci0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIH0KLX0KLQotdm9pZCBTdHlsZVJlc29s
dmVyOjptYXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0g
ICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KEZpbGxMYXllcjo6aW5pdGlhbEZpbGxBdHRhY2ht
ZW50KGxheWVyLT50eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewot
ICAgICAgICBjYXNlIENTU1ZhbHVlRml4ZWQ6Ci0gICAgICAgICAgICBsYXllci0+c2V0QXR0YWNo
bWVudChGaXhlZEJhY2tncm91bmRBdHRhY2htZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU1ZhbHVlU2Nyb2xsOgotICAgICAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1l
bnQoU2Nyb2xsQmFja2dyb3VuZEF0dGFjaG1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ1NTVmFsdWVMb2NhbDoKLSAgICAgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50
KExvY2FsQmFja2dyb3VuZEF0dGFjaG1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAg
ICAgbGF5ZXItPnNldENsaXAoRmlsbExheWVyOjppbml0aWFsRmlsbENsaXAobGF5ZXItPnR5cGUo
KSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAg
ICBsYXllci0+c2V0Q2xpcCgqcHJpbWl0aXZlVmFsdWUpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hcEZpbGxDb21wb3NpdGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NT
VmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewotICAg
ICAgICBsYXllci0+c2V0Q29tcG9zaXRlKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUo
bGF5ZXItPnR5cGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlKTsKLSAgICBsYXllci0+c2V0Q29tcG9zaXRlKCpwcmltaXRpdmVWYWx1ZSk7Ci19Ci0K
LXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5
ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxW
YWx1ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRPcmlnaW4oRmlsbExheWVyOjppbml0aWFsRmls
bE9yaWdpbihsYXllci0+dHlwZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwotICAgIGxheWVyLT5zZXRPcmlnaW4oKnByaW1pdGl2ZVZhbHVlKTsK
LX0KLQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUt
PmlzSW1hZ2VWYWx1ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4odmFsdWUpKTsKLQotICAgIGlm
ICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpCi0gICAgICAgIHJldHVybiBnZW5lcmF0
ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUqPih2YWx1ZSkpOwotCi0jaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgaWYg
KHZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zy
b21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7
Ci0jZW5kaWYKLQotICAgIHJldHVybiAwOwotfQotCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0
eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKLXsKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1h
Z2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKLSAgICBpZiAoaW1hZ2UgJiYgaW1h
Z2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5h
ZGQocHJvcGVydHkpOwotICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7Ci0gICAgICAgIHJldHVybiBTdHlsZVBlbmRpbmdJbWFn
ZTo6Y3JlYXRlKHZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6
OmNyZWF0ZSh2YWx1ZSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLVBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUqIHZhbHVlKQotewotICAgIFJlZlB0
cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZVNldChkb2N1
bWVudCgpKTsKLSAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAg
ICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5hZGQocHJvcGVydHkpOwotICAgIHJldHVybiBp
bWFnZS5yZWxlYXNlKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBGaWxs
SW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUq
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewotICAgICAgICBs
YXllci0+c2V0SW1hZ2UoRmlsbExheWVyOjppbml0aWFsRmlsbEltYWdlKGxheWVyLT50eXBlKCkp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxheWVyLT5zZXRJbWFnZShzdHlsZUlt
YWdlKHByb3BlcnR5LCB2YWx1ZSkpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxS
ZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNl
dFJlcGVhdFgoRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFgobGF5ZXItPnR5cGUoKSkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBsYXll
ci0+c2V0UmVwZWF0WCgqcHJpbWl0aXZlVmFsdWUpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hcEZpbGxSZXBlYXRZKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAg
bGF5ZXItPnNldFJlcGVhdFkoRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFkobGF5ZXItPnR5
cGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsK
LSAgICBsYXllci0+c2V0UmVwZWF0WSgqcHJpbWl0aXZlVmFsdWUpOwotfQotCi12b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hcEZpbGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsK
LSAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVOb25lKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNvbnRhaW4pCi0gICAgICAgIGxheWVyLT5zZXRTaXplVHlw
ZShDb250YWluKTsKLSAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZUNvdmVyKQotICAgICAgICBsYXllci0+c2V0U2l6ZVR5cGUoQ292ZXIpOwotICAgIGVs
c2UKLSAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVMZW5ndGgpOwotCi0gICAgTGVuZ3Ro
U2l6ZSBiID0gRmlsbExheWVyOjppbml0aWFsRmlsbFNpemVMZW5ndGgobGF5ZXItPnR5cGUoKSk7
Ci0KLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgcHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVDb250YWluIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlQ292ZXIpIHsKLSAgICAgICAgbGF5ZXItPnNldFNpemVMZW5ndGgoYik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgTGVuZ3RoIGZpcnN0TGVuZ3RoOwotICAgIExlbmd0aCBz
ZWNvbmRMZW5ndGg7Ci0KLSAgICBpZiAoUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQ
YWlyVmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3QgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0KCkpOwotICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogc2Vjb25kID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWly
LT5zZWNvbmQoKSk7Ci0gICAgICAgIGZpcnN0TGVuZ3RoID0gZmlyc3QtPmNvbnZlcnRUb0xlbmd0
aDxBbnlDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OwotICAgICAgICBzZWNvbmRMZW5ndGggPSBzZWNvbmQtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252
ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGZpcnN0TGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xl
bmd0aDxBbnlDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0
b3IpOwotICAgICAgICBzZWNvbmRMZW5ndGggPSBMZW5ndGgoKTsKLSAgICB9Ci0KLSAgICBpZiAo
Zmlyc3RMZW5ndGguaXNVbmRlZmluZWQoKSB8fCBzZWNvbmRMZW5ndGguaXNVbmRlZmluZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYi5zZXRXaWR0aChmaXJzdExlbmd0aCk7Ci0gICAgYi5z
ZXRIZWlnaHQoc2Vjb25kTGVuZ3RoKTsKLSAgICBsYXllci0+c2V0U2l6ZUxlbmd0aChiKTsKLX0K
LQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5p
dGlhbFZhbHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldFhQb3NpdGlvbihGaWxsTGF5ZXI6Omlu
aXRpYWxGaWxsWFBvc2l0aW9uKGxheWVyLT50eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLQot
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIExlbmd0aCBsOwotICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgbCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIGwgPSBM
ZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwotICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgp
KQotICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9D
YWxjVmFsdWUoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7Ci0gICAg
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCi0g
ICAgICAgIGwgPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXItPnNldFhQb3NpdGlvbihsKTsKLX0K
LQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5p
dGlhbFZhbHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldFlQb3NpdGlvbihGaWxsTGF5ZXI6Omlu
aXRpYWxGaWxsWVBvc2l0aW9uKGxheWVyLT50eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLQot
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIExlbmd0aCBsOwotICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgbCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIGwgPSBM
ZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwotICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgp
KQotICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9D
YWxjVmFsdWUoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7Ci0gICAg
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCi0g
ICAgICAgIGwgPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXItPnNldFlQb3NpdGlvbihsKTsKLX0K
LQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFuaW1h
dGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUo
KSkgewotICAgICAgICBhbmltYXRpb24tPnNldERlbGF5KEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1h
dGlvbkRlbGF5KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKLSAgICBhbmltYXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGlt
ZTxmbG9hdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOwotfQotCi12b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1
ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAg
IGxheWVyLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGlyZWN0aW9u
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAg
ICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgY2FzZSBDU1NWYWx1
ZU5vcm1hbDoKLSAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlv
bkRpcmVjdGlvbk5vcm1hbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVBbHRl
cm5hdGU6Ci0gICAgICAgIGxheWVyLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25E
aXJlY3Rpb25BbHRlcm5hdGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlUmV2
ZXJzZToKLSAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvblJldmVyc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlQWx0ZXJu
YXRlUmV2ZXJzZToKLSAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1h
dGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uRHVyYXRpb24oQW5pbWF0aW9uKiBh
bmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZh
bHVlKCkpIHsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihBbmltYXRpb246OmluaXRp
YWxBbmltYXRpb25EdXJhdGlvbigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1
ZS0+Y29tcHV0ZVRpbWU8ZmxvYXQsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNvbmRzPigpKTsKLX0K
LQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgp
KSB7Ci0gICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb246OmluaXRpYWxBbmltYXRp
b25GaWxsTW9kZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgIGNh
c2UgQ1NTVmFsdWVOb25lOgotICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9uRmls
bE1vZGVOb25lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUZvcndhcmRzOgot
ICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9uRmlsbE1vZGVGb3J3YXJkcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVCYWNrd2FyZHM6Ci0gICAgICAgIGxheWVy
LT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZUJhY2t3YXJkcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ1NTVmFsdWVCb3RoOgotICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5p
bWF0aW9uRmlsbE1vZGVCb3RoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiogYW5pbWF0
aW9uLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgp
KSB7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uOjppbml0
aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNv
dW50KC0xKTsKLSAgICBlbHNlCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQo
cHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZl
cjo6bWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRO
YW1lKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbk5hbWUoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgIGxheWVyLT5zZXRJc05vbmVBbmlt
YXRpb24odHJ1ZSk7Ci0gICAgZWxzZQotICAgICAgICBsYXllci0+c2V0TmFtZShwcmltaXRpdmVW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5p
bWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldFBsYXlT
dGF0ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIEVBbmltUGxheVN0YXRl
IHBsYXlTdGF0ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVBhdXNl
ZCkgPyBBbmltUGxheVN0YXRlUGF1c2VkIDogQW5pbVBsYXlTdGF0ZVBsYXlpbmc7Ci0gICAgbGF5
ZXItPnNldFBsYXlTdGF0ZShwbGF5U3RhdGUpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
cEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUp
Ci17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGFuaW1hdGlv
bi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVBbGwpOwotICAgICAgICBhbmlt
YXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUFsbCkgewotICAgICAgICBhbmltYXRpb24tPnNldEFuaW1h
dGlvbk1vZGUoQW5pbWF0aW9uOjpBbmltYXRlQWxsKTsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQpOwotICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0
QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVOb25lKTsKLSAgICAgICAgYW5pbWF0aW9u
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVTaW5nbGVQcm9w
ZXJ0eSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoc3RhdGljX2Nhc3Q8Q1NTUHJv
cGVydHlJRD4ocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
U3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmlt
YXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVl
KCkpIHsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihBbmltYXRpb246Omlu
aXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOwotICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7
Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGluZWFyOgotICAgICAgICAgICAgICAgIGFuaW1h
dGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlOgot
ICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbjoKLSAgICAgICAgICAgICAgICBhbmltYXRpb24tPnNl
dFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgwLjQyLCAw
LjAsIDEuMCwgMS4wKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IENTU1ZhbHVlRWFzZU91dDoKLSAgICAgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1
bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgwLjAsIDAuMCwgMC41OCwg
MS4wKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVl
RWFzZUluT3V0OgotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24o
Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDAuNDIsIDAuMCwgMC41OCwgMS4wKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU3RlcFN0
YXJ0OgotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDEsIHRydWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTdGVwRW5kOgotICAgICAgICAgICAgICAgIGFuaW1h
dGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDEsIGZh
bHNlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICh2YWx1ZS0+aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFs
dWUoKSkgewotICAgICAgICBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUqIGN1Ymlj
VGltaW5nRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9u
VmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3Vi
aWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKGN1YmljVGltaW5nRnVuY3Rpb24tPngxKCks
IGN1YmljVGltaW5nRnVuY3Rpb24tPnkxKCksIGN1YmljVGltaW5nRnVuY3Rpb24tPngyKCksIGN1
YmljVGltaW5nRnVuY3Rpb24tPnkyKCkpKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc1N0ZXBz
VGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7Ci0gICAgICAgIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25W
YWx1ZSogc3RlcHNUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENTU1N0ZXBzVGltaW5nRnVu
Y3Rpb25WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlv
bihTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoc3RlcHNUaW1pbmdGdW5jdGlvbi0+bnVtYmVy
T2ZTdGVwcygpLCBzdGVwc1RpbWluZ0Z1bmN0aW9uLT5zdGVwQXRTdGFydCgpKSk7Ci0gICAgfSBl
bHNlIGlmICh2YWx1ZS0+aXNMaW5lYXJUaW1pbmdGdW5jdGlvblZhbHVlKCkpCi0gICAgICAgIGFu
aW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgp
KTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKLXsK
LSAgICAvLyBJZiB3ZSdyZSBub3QgYSB2YWx1ZSBsaXN0LCB0aGVuIHdlIGFyZSAibm9uZSIgYW5k
IGRvbid0IG5lZWQgdG8gYWx0ZXIgdGhlIGVtcHR5IGltYWdlIGF0IGFsbC4KLSAgICBpZiAoIXZh
bHVlIHx8ICF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
UmV0cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1ZS4KLSAgICBDU1NWYWx1ZUxpc3QqIGJvcmRl
ckltYWdlID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwotCi0gICAgLy8gU2V0
IHRoZSBpbWFnZSAodGhpcyBraWNrcyBvZmYgdGhlIGxvYWQpLgotICAgIENTU1Byb3BlcnR5SUQg
aW1hZ2VQcm9wZXJ0eTsKLSAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJJbWFnZSkKLSAgICAgICAgaW1hZ2VQcm9wZXJ0eSA9IENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VT
b3VyY2U7Ci0gICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94
SW1hZ2UpCi0gICAgICAgIGltYWdlUHJvcGVydHkgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJ
bWFnZVNvdXJjZTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlUHJvcGVydHkgPSBwcm9wZXJ0eTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgYm9yZGVySW1hZ2UtPmxlbmd0aCgpIDsg
KytpKSB7Ci0gICAgICAgIENTU1ZhbHVlKiBjdXJyZW50ID0gYm9yZGVySW1hZ2UtPml0ZW0oaSk7
Ci0KLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzSW1hZ2VWYWx1ZSgpIHx8IGN1cnJlbnQtPmlzSW1h
Z2VHZW5lcmF0b3JWYWx1ZSgpCi0jaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgICAgICAg
ICB8fCBjdXJyZW50LT5pc0ltYWdlU2V0VmFsdWUoKQotI2VuZGlmCi0gICAgICAgICAgICApCi0g
ICAgICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdlUHJvcGVydHksIGN1cnJl
bnQpKTsKLSAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUo
KSkKLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoY3VycmVudCwgaW1hZ2UpOwot
ICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBD
U1NWYWx1ZUxpc3QqIHNsYXNoTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KGN1cnJl
bnQpOwotICAgICAgICAgICAgLy8gTWFwIGluIHRoZSBpbWFnZSBzbGljZXMuCi0gICAgICAgICAg
ICBpZiAoc2xhc2hMaXN0LT5pdGVtKDApICYmIHNsYXNoTGlzdC0+aXRlbSgwKS0+aXNCb3JkZXJJ
bWFnZVNsaWNlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNl
KHNsYXNoTGlzdC0+aXRlbSgwKSwgaW1hZ2UpOwotCi0gICAgICAgICAgICAvLyBNYXAgaW4gdGhl
IGJvcmRlciBzbGljZXMuCi0gICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5pdGVtKDEpKQotICAg
ICAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhtYXBOaW5lUGllY2VJbWFnZVF1YWQo
c2xhc2hMaXN0LT5pdGVtKDEpKSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgb3V0c2V0
LgotICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgyKSkKLSAgICAgICAgICAgICAgICBp
bWFnZS5zZXRPdXRzZXQobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC0+aXRlbSgyKSkp
OwotICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAg
ICAgICAgICAgLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBydWxlcyBmb3Igc3RyZXRjaC9yb3VuZC9y
ZXBlYXQgb2YgdGhlIHNsaWNlcy4KLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0
KGN1cnJlbnQsIGltYWdlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eSA9
PSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlKSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgdG8g
cHJlc2VydmUgdGhlIGxlZ2FjeSBiZWhhdmlvciBvZiAtd2Via2l0LWJvcmRlci1pbWFnZSBhbmQg
bWFrZSB0aGUgYm9yZGVyIHNsaWNlcwotICAgICAgICAvLyBhbHNvIHNldCB0aGUgYm9yZGVyIHdp
ZHRocy4gV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBwZXJjZW50YWdlcywgc2luY2Ugd2Ug
ZG9uJ3QgZXZlbiBzdXBwb3J0Ci0gICAgICAgIC8vIHRob3NlIG9uIHJlYWwgYm9yZGVycyB5ZXQu
Ci0gICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS50b3AoKS5pc0ZpeGVkKCkpCi0gICAg
ICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJUb3BXaWR0aChpbWFnZS5ib3JkZXJTbGljZXMoKS50
b3AoKS52YWx1ZSgpKTsKLSAgICAgICAgaWYgKGltYWdlLmJvcmRlclNsaWNlcygpLnJpZ2h0KCku
aXNGaXhlZCgpKQotICAgICAgICAgICAgc3R5bGUoKS0+c2V0Qm9yZGVyUmlnaHRXaWR0aChpbWFn
ZS5ib3JkZXJTbGljZXMoKS5yaWdodCgpLnZhbHVlKCkpOwotICAgICAgICBpZiAoaW1hZ2UuYm9y
ZGVyU2xpY2VzKCkuYm90dG9tKCkuaXNGaXhlZCgpKQotICAgICAgICAgICAgc3R5bGUoKS0+c2V0
Qm9yZGVyQm90dG9tV2lkdGgoaW1hZ2UuYm9yZGVyU2xpY2VzKCkuYm90dG9tKCkudmFsdWUoKSk7
Ci0gICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS5sZWZ0KCkuaXNGaXhlZCgpKQotICAg
ICAgICAgICAgc3R5bGUoKS0+c2V0Qm9yZGVyTGVmdFdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygp
LmxlZnQoKS52YWx1ZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwTmlu
ZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkK
LXsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1
ZS4KLSAgICBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUqIGJvcmRlckltYWdlU2xpY2UgPSBzdGF0
aWNfY2FzdDxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUqPih2YWx1ZSk7Ci0KLSAgICAvLyBTZXQg
dXAgYSBsZW5ndGggYm94IHRvIHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xpY2VzLgotICAgIExlbmd0
aEJveCBib3g7Ci0gICAgUXVhZCogc2xpY2VzID0gYm9yZGVySW1hZ2VTbGljZS0+c2xpY2VzKCk7
Ci0gICAgaWYgKHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQotICAgICAgICBib3gubV90
b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0g
ICAgZWxzZQotICAgICAgICBib3gubV90b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0SW50
VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7Ci0gICAgaWYgKHNs
aWNlcy0+Ym90dG9tKCktPmlzUGVyY2VudGFnZSgpKQotICAgICAgICBib3gubV9ib3R0b20gPSBM
ZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0gICAg
ZWxzZQotICAgICAgICBib3gubV9ib3R0b20gPSBMZW5ndGgoKGludClzbGljZXMtPmJvdHRvbSgp
LT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4ZWQpOwot
ICAgIGlmIChzbGljZXMtPmxlZnQoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIGJveC5tX2xl
ZnQgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwot
ICAgIGVsc2UKLSAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0
SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7Ci0gICAgaWYg
KHNsaWNlcy0+cmlnaHQoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIGJveC5tX3JpZ2h0ID0g
TGVuZ3RoKHNsaWNlcy0+cmlnaHQoKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0gICAg
ZWxzZQotICAgICAgICBib3gubV9yaWdodCA9IExlbmd0aChzbGljZXMtPnJpZ2h0KCktPmdldElu
dFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4ZWQpOwotICAgIGltYWdl
LnNldEltYWdlU2xpY2VzKGJveCk7Ci0KLSAgICAvLyBTZXQgb3VyIGZpbGwgbW9kZS4KLSAgICBp
bWFnZS5zZXRGaWxsKGJvcmRlckltYWdlU2xpY2UtPm1fZmlsbCk7Ci19Ci0KLUxlbmd0aEJveCBT
dHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUqIHZhbHVlKQotewot
ICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJl
dHVybiBMZW5ndGhCb3goKTsKLQotICAgIC8vIEdldCBvdXIgem9vbSB2YWx1ZS4KLSAgICBmbG9h
dCB6b29tID0gdXNlU1ZHWm9vbVJ1bGVzKCkgPyAxLjBmIDogc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIHByaW1pdGl2ZSB2YWx1ZS4KLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogYm9yZGVyV2lkdGhzID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7Ci0KLSAgICAvLyBTZXQgdXAgYSBsZW5ndGggYm94IHRvIHJlcHJlc2VudCBvdXIg
aW1hZ2Ugc2xpY2VzLgotICAgIExlbmd0aEJveCBib3g7IC8vIERlZmF1bHRzIHRvICdhdXRvJyBz
byB3ZSBkb24ndCBoYXZlIHRvIGhhbmRsZSB0aGF0IGV4cGxpY2l0bHkgYmVsb3cuCi0gICAgUXVh
ZCogc2xpY2VzID0gYm9yZGVyV2lkdGhzLT5nZXRRdWFkVmFsdWUoKTsKLSAgICBpZiAoc2xpY2Vz
LT50b3AoKS0+aXNOdW1iZXIoKSkKLSAgICAgICAgYm94Lm1fdG9wID0gTGVuZ3RoKHNsaWNlcy0+
dG9wKCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKLSAgICBlbHNlIGlmIChzbGljZXMtPnRv
cCgpLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgYm94Lm1fdG9wID0gTGVuZ3RoKHNsaWNlcy0+
dG9wKCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSks
IFBlcmNlbnQpOwotICAgIGVsc2UgaWYgKHNsaWNlcy0+dG9wKCktPmdldElkZW50KCkgIT0gQ1NT
VmFsdWVBdXRvKQotICAgICAgICBib3gubV90b3AgPSBzbGljZXMtPnRvcCgpLT5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKLQotICAgIGlm
IChzbGljZXMtPnJpZ2h0KCktPmlzTnVtYmVyKCkpCi0gICAgICAgIGJveC5tX3JpZ2h0ID0gTGVu
Z3RoKHNsaWNlcy0+cmlnaHQoKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOwotICAgIGVsc2Ug
aWYgKHNsaWNlcy0+cmlnaHQoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIGJveC5tX3JpZ2h0
ID0gTGVuZ3RoKHNsaWNlcy0+cmlnaHQoKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7Ci0gICAgZWxzZSBpZiAoc2xpY2VzLT5yaWdo
dCgpLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlQXV0bykKLSAgICAgICAgYm94Lm1fcmlnaHQgPSBz
bGljZXMtPnJpZ2h0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCByb290RWxlbWVu
dFN0eWxlKCksIHpvb20pOwotCi0gICAgaWYgKHNsaWNlcy0+Ym90dG9tKCktPmlzTnVtYmVyKCkp
Ci0gICAgICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgpLT5nZXRJbnRW
YWx1ZSgpLCBSZWxhdGl2ZSk7Ci0gICAgZWxzZSBpZiAoc2xpY2VzLT5ib3R0b20oKS0+aXNQZXJj
ZW50YWdlKCkpCi0gICAgICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgp
LT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJj
ZW50KTsKLSAgICBlbHNlIGlmIChzbGljZXMtPmJvdHRvbSgpLT5nZXRJZGVudCgpICE9IENTU1Zh
bHVlQXV0bykKLSAgICAgICAgYm94Lm1fYm90dG9tID0gc2xpY2VzLT5ib3R0b20oKS0+Y29tcHV0
ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7Ci0KLSAg
ICBpZiAoc2xpY2VzLT5sZWZ0KCktPmlzTnVtYmVyKCkpCi0gICAgICAgIGJveC5tX2xlZnQgPSBM
ZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKLSAgICBlbHNl
IGlmIChzbGljZXMtPmxlZnQoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIGJveC5tX2xlZnQg
PSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQpOwotICAgIGVsc2UgaWYgKHNsaWNlcy0+bGVmdCgp
LT5nZXRJZGVudCgpICE9IENTU1ZhbHVlQXV0bykKLSAgICAgICAgYm94Lm1fbGVmdCA9IHNsaWNl
cy0+bGVmdCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRTdHls
ZSgpLCB6b29tKTsKLQotICAgIHJldHVybiBib3g7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6
bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYg
aW1hZ2UpCi17Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgUGFpciogcGFp
ciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKLSAgICBpZiAoIXBhaXIgfHwgIXBh
aXItPmZpcnN0KCkgfHwgIXBhaXItPnNlY29uZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
bnQgZmlyc3RJZGVudGlmaWVyID0gcGFpci0+Zmlyc3QoKS0+Z2V0SWRlbnQoKTsKLSAgICBpbnQg
c2Vjb25kSWRlbnRpZmllciA9IHBhaXItPnNlY29uZCgpLT5nZXRJZGVudCgpOwotCi0gICAgRU5p
bmVQaWVjZUltYWdlUnVsZSBob3Jpem9udGFsUnVsZTsKLSAgICBzd2l0Y2ggKGZpcnN0SWRlbnRp
ZmllcikgewotICAgIGNhc2UgQ1NTVmFsdWVTdHJldGNoOgotICAgICAgICBob3Jpem9udGFsUnVs
ZSA9IFN0cmV0Y2hJbWFnZVJ1bGU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVS
b3VuZDoKLSAgICAgICAgaG9yaXpvbnRhbFJ1bGUgPSBSb3VuZEltYWdlUnVsZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVNwYWNlOgotICAgICAgICBob3Jpem9udGFsUnVsZSA9
IFNwYWNlSW1hZ2VSdWxlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAvLyBDU1NWYWx1
ZVJlcGVhdAotICAgICAgICBob3Jpem9udGFsUnVsZSA9IFJlcGVhdEltYWdlUnVsZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGltYWdlLnNldEhvcml6b250YWxSdWxlKGhvcml6b250YWxS
dWxlKTsKLQotICAgIEVOaW5lUGllY2VJbWFnZVJ1bGUgdmVydGljYWxSdWxlOwotICAgIHN3aXRj
aCAoc2Vjb25kSWRlbnRpZmllcikgewotICAgIGNhc2UgQ1NTVmFsdWVTdHJldGNoOgotICAgICAg
ICB2ZXJ0aWNhbFJ1bGUgPSBTdHJldGNoSW1hZ2VSdWxlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1ZhbHVlUm91bmQ6Ci0gICAgICAgIHZlcnRpY2FsUnVsZSA9IFJvdW5kSW1hZ2VSdWxl
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlU3BhY2U6Ci0gICAgICAgIHZlcnRp
Y2FsUnVsZSA9IFNwYWNlSW1hZ2VSdWxlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAv
LyBDU1NWYWx1ZVJlcGVhdAotICAgICAgICB2ZXJ0aWNhbFJ1bGUgPSBSZXBlYXRJbWFnZVJ1bGU7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpbWFnZS5zZXRWZXJ0aWNhbFJ1bGUodmVydGlj
YWxSdWxlKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0
KCkKLXsKLSAgICBpZiAobV9zdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihtX3N0eWxlLT5mb250
RGVzY3JpcHRpb24oKSk7Ci0gICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShu
ZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpKTsKLSAgICBtX3N0eWxlLT5zZXRGb250
RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVy
OjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpCi17Ci0gICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkgPT0gcGFyZW50U3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgRm9u
dERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOwotICAgIHNldEZvbnRT
aXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSk7Ci0gICAg
c3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwotfQotCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSog
c3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICBjb25zdCBGb250RGVzY3Jp
cHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLQotICAgIGlmIChj
aGlsZEZvbnQuaXNBYnNvbHV0ZVNpemUoKSB8fCAhcGFyZW50U3R5bGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udCA9IHBhcmVudFN0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBpZiAoY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNp
emUoKSA9PSBwYXJlbnRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRm9yIG5vdywgbHVtcCBhbGwgZmFtaWxpZXMgYnV0IG1vbm9zcGFjZSB0b2dl
dGhlci4KLSAgICBpZiAoY2hpbGRGb250LmdlbmVyaWNGYW1pbHkoKSAhPSBGb250RGVzY3JpcHRp
b246Ok1vbm9zcGFjZUZhbWlseSAmJgotICAgICAgICBwYXJlbnRGb250LmdlbmVyaWNGYW1pbHko
KSAhPSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gV2Uga25vdyB0aGUgcGFyZW50IGlzIG1vbm9zcGFjZSBvciB0aGUgY2hpbGQgaXMg
bW9ub3NwYWNlLCBhbmQgdGhhdCBmb250Ci0gICAgLy8gc2l6ZSB3YXMgdW5zcGVjaWZpZWQuICBX
ZSB3YW50IHRvIHNjYWxlIG91ciBmb250IHNpemUgYXMgYXBwcm9wcmlhdGUuCi0gICAgLy8gSWYg
dGhlIGZvbnQgdXNlcyBhIGtleXdvcmQgc2l6ZSwgdGhlbiB3ZSByZWZldGNoIGZyb20gdGhlIHRh
YmxlIHJhdGhlciB0aGFuCi0gICAgLy8gbXVsdGlwbHlpbmcgYnkgb3VyIHNjYWxlIGZhY3Rvci4K
LSAgICBmbG9hdCBzaXplOwotICAgIGlmIChjaGlsZEZvbnQua2V5d29yZFNpemUoKSkKLSAgICAg
ICAgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFs
dWVYeFNtYWxsICsgY2hpbGRGb250LmtleXdvcmRTaXplKCkgLSAxLCBjaGlsZEZvbnQudXNlRml4
ZWREZWZhdWx0U2l6ZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdz
ID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7Ci0gICAgICAgIGZsb2F0IGZpeGVk
U2NhbGVGYWN0b3IgPSBzZXR0aW5ncwotICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxmbG9hdD4o
c2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkpIC8gc2V0dGluZ3MtPmRlZmF1bHRGb250
U2l6ZSgpCi0gICAgICAgICAgICA6IDE7Ci0gICAgICAgIHNpemUgPSBwYXJlbnRGb250LnVzZUZp
eGVkRGVmYXVsdFNpemUoKSA/Ci0gICAgICAgICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNp
emUoKSAvIGZpeGVkU2NhbGVGYWN0b3IgOgotICAgICAgICAgICAgICAgIGNoaWxkRm9udC5zcGVj
aWZpZWRTaXplKCkgKiBmaXhlZFNjYWxlRmFjdG9yOwotICAgIH0KLQotICAgIEZvbnREZXNjcmlw
dGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKLSAgICBzZXRGb250U2l6ZShuZXdG
b250RGVzY3JpcHRpb24sIHNpemUpOwotICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3
Rm9udERlc2NyaXB0aW9uKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKLXsKLSAgICBmb250
RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tl
ci5kb2N1bWVudCgpLCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNp
emUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKLX0KLQotZmxvYXQgU3R5bGVSZXNvbHZl
cjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBS
ZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNp
emUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKQotewotICAgIGZsb2F0IHpvb21GYWN0b3IgPSAxLjBm
OwotICAgIGlmICghdXNlU1ZHWm9vbVJ1bGVzKSB7Ci0gICAgICAgIHpvb21GYWN0b3IgPSBzdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQt
PmZyYW1lKCkpCi0gICAgICAgICAgICB6b29tRmFjdG9yICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3Rv
cigpOwotICAgIH0KLQotICAgIHJldHVybiBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgem9vbUZhY3RvciwgaXNBYnNvbHV0ZVNpemUsIHNw
ZWNpZmllZFNpemUpOwotfQotCi1mbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGZsb2F0IHpvb21GYWN0b3IsIGJv
b2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1pbmltdW1Gb3JG
b250U2l6ZSB1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSkKLXsKLSAgICAvLyBUZXh0IHdpdGgg
YSAwcHggZm9udCBzaXplIHNob3VsZCBub3QgYmUgdmlzaWJsZSBhbmQgdGhlcmVmb3JlIG5lZWRz
IHRvIGJlCi0gICAgLy8gZXhlbXB0IGZyb20gbWluaW11bSBmb250IHNpemUgcnVsZXMuIEFjaWQz
IHJlbGllcyBvbiB0aGlzIGZvciBwaXhlbC1wZXJmZWN0Ci0gICAgLy8gcmVuZGVyaW5nLiBUaGlz
IGlzIGFsc28gY29tcGF0aWJsZSB3aXRoIG90aGVyIGJyb3dzZXJzIHRoYXQgaGF2ZSBtaW5pbXVt
Ci0gICAgLy8gZm9udCBzaXplIHNldHRpbmdzIChlLmcuIEZpcmVmb3gpLgotICAgIGlmIChmYWJz
ZihzcGVjaWZpZWRTaXplKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCkp
Ci0gICAgICAgIHJldHVybiAwLjBmOwotCi0gICAgLy8gV2Ugc3VwcG9ydCB0d28gdHlwZXMgb2Yg
bWluaW11bSBmb250IHNpemUuICBUaGUgZmlyc3QgaXMgYSBoYXJkIG92ZXJyaWRlIHRoYXQgYXBw
bGllcyB0bwotICAgIC8vIGFsbCBmb250cy4gIFRoaXMgaXMgIm1pblNpemUuIiAgVGhlIHNlY29u
ZCB0eXBlIG9mIG1pbmltdW0gZm9udCBzaXplIGlzIGEgInNtYXJ0IG1pbmltdW0iCi0gICAgLy8g
dGhhdCBpcyBhcHBsaWVkIG9ubHkgd2hlbiB0aGUgV2ViIHBhZ2UgY2FuJ3Qga25vdyB3aGF0IHNp
emUgaXQgcmVhbGx5IGFza2VkIGZvciwgZS5nLiwKLSAgICAvLyB3aGVuIGl0IHVzZXMgbG9naWNh
bCBzaXplcyBsaWtlICJzbWFsbCIgb3IgZXhwcmVzc2VzIHRoZSBmb250LXNpemUgYXMgYSBwZXJj
ZW50YWdlIG9mCi0gICAgLy8gdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgc2V0dGluZy4KLQotICAg
IC8vIFdpdGggdGhlIHNtYXJ0IG1pbmltdW0sIHdlIG5ldmVyIHdhbnQgdG8gZ2V0IHNtYWxsZXIg
dGhhbiB0aGUgbWluaW11bSBmb250IHNpemUgdG8ga2VlcCBmb250cyByZWFkYWJsZS4KLSAgICAv
LyBIb3dldmVyIHdlIGFsd2F5cyBhbGxvdyB0aGUgcGFnZSB0byBzZXQgYW4gZXhwbGljaXQgcGl4
ZWwgc2l6ZSB0aGF0IGlzIHNtYWxsZXIsCi0gICAgLy8gc2luY2Ugc2l0ZXMgd2lsbCBtaXMtcmVu
ZGVyIG90aGVyd2lzZSAoZS5nLiwgaHR0cDovL3d3dy5nYW1lc3BvdC5jb20gd2l0aCBhIDlweCBt
aW5pbXVtKS4KLQotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygp
OwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybiAxLjBmOwotCi0gICAgaW50IG1p
blNpemUgPSBzZXR0aW5ncy0+bWluaW11bUZvbnRTaXplKCk7Ci0gICAgaW50IG1pbkxvZ2ljYWxT
aXplID0gc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKLSAgICBmbG9hdCB6b29t
ZWRTaXplID0gc3BlY2lmaWVkU2l6ZSAqIHpvb21GYWN0b3I7Ci0KLSAgICAvLyBBcHBseSB0aGUg
aGFyZCBtaW5pbXVtIGZpcnN0LiAgV2Ugb25seSBhcHBseSB0aGUgaGFyZCBtaW5pbXVtIGlmIGFm
dGVyIHpvb21pbmcgd2UncmUgc3RpbGwgdG9vIHNtYWxsLgotICAgIGlmICh6b29tZWRTaXplIDwg
bWluU2l6ZSkKLSAgICAgICAgem9vbWVkU2l6ZSA9IG1pblNpemU7Ci0KLSAgICAvLyBOb3cgYXBw
bHkgdGhlICJzbWFydCBtaW5pbXVtLiIgIFRoaXMgbWluaW11bSBpcyBhbHNvIG9ubHkgYXBwbGll
ZCBpZiB3ZSdyZSBzdGlsbCB0b28gc21hbGwKLSAgICAvLyBhZnRlciB6b29taW5nLiAgVGhlIGZv
bnQgc2l6ZSBtdXN0IGVpdGhlciBiZSByZWxhdGl2ZSB0byB0aGUgdXNlciBkZWZhdWx0IG9yIHRo
ZSBvcmlnaW5hbCBzaXplCi0gICAgLy8gbXVzdCBoYXZlIGJlZW4gYWNjZXB0YWJsZS4gIEluIG90
aGVyIHdvcmRzLCB3ZSBvbmx5IGFwcGx5IHRoZSBzbWFydCBtaW5pbXVtIHdoZW5ldmVyIHdlJ3Jl
IHBvc2l0aXZlCi0gICAgLy8gZG9pbmcgc28gd29uJ3QgZGlzcnVwdCB0aGUgbGF5b3V0LgotICAg
IGlmICh1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSAmJiB6b29tZWRTaXplIDwgbWluTG9naWNh
bFNpemUgJiYgKHNwZWNpZmllZFNpemUgPj0gbWluTG9naWNhbFNpemUgfHwgIWlzQWJzb2x1dGVT
aXplKSkKLSAgICAgICAgem9vbWVkU2l6ZSA9IG1pbkxvZ2ljYWxTaXplOwotCi0gICAgLy8gQWxz
byBjbGFtcCB0byBhIHJlYXNvbmFibGUgbWF4aW11bSB0byBwcmV2ZW50IGluc2FuZSBmb250IHNp
emVzIGZyb20gY2F1c2luZyBjcmFzaGVzIG9uIHZhcmlvdXMKLSAgICAvLyBwbGF0Zm9ybXMgKEkn
bSBsb29raW5nIGF0IHlvdSwgV2luZG93cy4pCi0gICAgcmV0dXJuIG1pbigxMDAwMDAwLjBmLCB6
b29tZWRTaXplKTsKLX0KLQotY29uc3QgaW50IGZvbnRTaXplVGFibGVNYXggPSAxNjsKLWNvbnN0
IGludCBmb250U2l6ZVRhYmxlTWluID0gOTsKLWNvbnN0IGludCB0b3RhbEtleXdvcmRzID0gODsK
LQotLy8gV2luSUUvTmF2NCB0YWJsZSBmb3IgZm9udCBzaXplcy4gIERlc2lnbmVkIHRvIG1hdGNo
IHRoZSBsZWdhY3kgZm9udCBtYXBwaW5nIHN5c3RlbSBvZiBIVE1MLgotc3RhdGljIGNvbnN0IGlu
dCBxdWlya3NGb250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBmb250U2l6ZVRhYmxlTWlu
ICsgMV1bdG90YWxLZXl3b3Jkc10gPQotewotICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAgIDks
ICAgIDExLCAgICAxNCwgICAgMTgsICAgIDI4IH0sCi0gICAgICB7IDksICAgIDksICAgICA5LCAg
ICAxMCwgICAgMTIsICAgIDE1LCAgICAyMCwgICAgMzEgfSwKLSAgICAgIHsgOSwgICAgOSwgICAg
IDksICAgIDExLCAgICAxMywgICAgMTcsICAgIDIyLCAgICAzNCB9LAotICAgICAgeyA5LCAgICA5
LCAgICAxMCwgICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQsICAgIDM3IH0sCi0gICAgICB7IDks
ICAgIDksICAgIDEwLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwgICAgNDAgfSwgLy8gZml4
ZWQgZm9udCBkZWZhdWx0ICgxMykKLSAgICAgIHsgOSwgICAgOSwgICAgMTEsICAgIDE0LCAgICAx
NywgICAgMjEsICAgIDI4LCAgICA0MiB9LAotICAgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTUs
ICAgIDE3LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCi0gICAgICB7IDksICAgMTAsICAgIDEzLCAg
ICAxNiwgICAgMTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAgLy8gcHJvcG9ydGlvbmFsIGZvbnQg
ZGVmYXVsdCAoMTYpCi19OwotLy8gSFRNTCAgICAgICAxICAgICAgMiAgICAgIDMgICAgICA0ICAg
ICAgNSAgICAgIDYgICAgICA3Ci0vLyBDU1MgIHh4cyAgIHhzICAgICBzICAgICAgbSAgICAgIGwg
ICAgIHhsICAgICB4eGwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0vLyAgICAgICAg
ICAgICAgICAgICAgICB1c2VyIHByZWYKLQotLy8gU3RyaWN0IG1vZGUgdGFibGUgbWF0Y2hlcyBN
YWNJRSBhbmQgTW96aWxsYSdzIHNldHRpbmdzIGV4YWN0bHkuCi1zdGF0aWMgY29uc3QgaW50IHN0
cmljdEZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1heCAtIGZvbnRTaXplVGFibGVNaW4gKyAx
XVt0b3RhbEtleXdvcmRzXSA9Ci17Ci0gICAgICB7IDksICAgIDksICAgICA5LCAgICAgOSwgICAg
MTEsICAgIDE0LCAgICAxOCwgICAgMjcgfSwKLSAgICAgIHsgOSwgICAgOSwgICAgIDksICAgIDEw
LCAgICAxMiwgICAgMTUsICAgIDIwLCAgICAzMCB9LAotICAgICAgeyA5LCAgICA5LCAgICAxMCwg
ICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDMzIH0sCi0gICAgICB7IDksICAgIDksICAg
IDEwLCAgICAxMiwgICAgMTQsICAgIDE4LCAgICAyNCwgICAgMzYgfSwKLSAgICAgIHsgOSwgICAx
MCwgICAgMTIsICAgIDEzLCAgICAxNiwgICAgMjAsICAgIDI2LCAgICAzOSB9LCAvLyBmaXhlZCBm
b250IGRlZmF1bHQgKDEzKQotICAgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE3LCAg
ICAyMSwgICAgMjgsICAgIDQyIH0sCi0gICAgICB7IDksICAgMTAsICAgIDEzLCAgICAxNSwgICAg
MTgsICAgIDIzLCAgICAzMCwgICAgNDUgfSwKLSAgICAgIHsgOSwgICAxMCwgICAgMTMsICAgIDE2
LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9ICAvLyBwcm9wb3J0aW9uYWwgZm9udCBkZWZh
dWx0ICgxNikKLX07Ci0vLyBIVE1MICAgICAgIDEgICAgICAyICAgICAgMyAgICAgIDQgICAgICA1
ICAgICAgNiAgICAgIDcKLS8vIENTUyAgeHhzICAgeHMgICAgIHMgICAgICBtICAgICAgbCAgICAg
eGwgICAgIHh4bAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHwKLS8vICAgICAgICAgICAg
ICAgICAgICAgIHVzZXIgcHJlZgotCi0vLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIHJhbmdlIG9m
IHRoZSB0YWJsZSwgd2UgdXNlIFRvZGQgRmFocm5lcidzIHN1Z2dlc3RlZCBzY2FsZQotLy8gZmFj
dG9ycyBmb3IgZWFjaCBrZXl3b3JkIHZhbHVlLgotc3RhdGljIGNvbnN0IGZsb2F0IGZvbnRTaXpl
RmFjdG9yc1t0b3RhbEtleXdvcmRzXSA9IHsgMC42MGYsIDAuNzVmLCAwLjg5ZiwgMS4wZiwgMS4y
ZiwgMS41ZiwgMi4wZiwgMy4wZiB9OwotCi1mbG9hdCBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZv
cktleXdvcmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29yZCwgYm9vbCBzaG91bGRVc2VG
aXhlZERlZmF1bHRTaXplKQotewotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5z
ZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybiAxLjBmOwotCi0g
ICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpOwotICAgIGludCBt
ZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/IHNldHRpbmdzLT5kZWZhdWx0
Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOwotICAgIGlmICht
ZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVtU2l6ZSA8PSBmb250U2l6ZVRh
YmxlTWF4KSB7Ci0gICAgICAgIC8vIExvb2sgdXAgdGhlIGVudHJ5IGluIHRoZSB0YWJsZS4KLSAg
ICAgICAgaW50IHJvdyA9IG1lZGl1bVNpemUgLSBmb250U2l6ZVRhYmxlTWluOwotICAgICAgICBp
bnQgY29sID0gKGtleXdvcmQgLSBDU1NWYWx1ZVh4U21hbGwpOwotICAgICAgICByZXR1cm4gcXVp
cmtzTW9kZSA/IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93XVtjb2xdIDogc3RyaWN0Rm9udFNpemVU
YWJsZVtyb3ddW2NvbF07Ci0gICAgfQotCi0gICAgLy8gVmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFu
Z2Ugb2YgdGhlIHRhYmxlLiBBcHBseSB0aGUgc2NhbGUgZmFjdG9yIGluc3RlYWQuCi0gICAgZmxv
YXQgbWluTG9naWNhbFNpemUgPSBtYXgoc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUo
KSwgMSk7Ci0gICAgcmV0dXJuIG1heChmb250U2l6ZUZhY3RvcnNba2V5d29yZCAtIENTU1ZhbHVl
WHhTbWFsbF0qbWVkaXVtU2l6ZSwgbWluTG9naWNhbFNpemUpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotc3RhdGljIGludCBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplKGludCBwaXhlbEZv
bnRTaXplLCBjb25zdCBUKiB0YWJsZSwgaW50IG11bHRpcGxpZXIpCi17Ci0gICAgLy8gSWdub3Jl
IHRhYmxlWzBdIGJlY2F1c2UgeHgtc21hbGwgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkgbGVn
YWN5IGZvbnQgc2l6ZS4KLSAgICBmb3IgKGludCBpID0gMTsgaSA8IHRvdGFsS2V5d29yZHMgLSAx
OyBpKyspIHsKLSAgICAgICAgaWYgKHBpeGVsRm9udFNpemUgKiAyIDwgKHRhYmxlW2ldICsgdGFi
bGVbaSArIDFdKSAqIG11bHRpcGxpZXIpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRvdGFsS2V5d29yZHMgLSAxOwotfQotCi1pbnQgU3R5bGVSZXNvbHZlcjo6bGVn
YWN5Rm9udFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBz
aG91bGRVc2VGaXhlZERlZmF1bHRTaXplKQotewotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRv
Y3VtZW50LT5zZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybiAx
OwotCi0gICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpOwotICAg
IGludCBtZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/IHNldHRpbmdzLT5k
ZWZhdWx0Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOwotICAg
IGlmIChtZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVtU2l6ZSA8PSBmb250
U2l6ZVRhYmxlTWF4KSB7Ci0gICAgICAgIGludCByb3cgPSBtZWRpdW1TaXplIC0gZm9udFNpemVU
YWJsZU1pbjsKLSAgICAgICAgcmV0dXJuIGZpbmROZWFyZXN0TGVnYWN5Rm9udFNpemU8aW50Pihw
aXhlbEZvbnRTaXplLCBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVUYWJsZVtyb3ddIDogc3Ry
aWN0Rm9udFNpemVUYWJsZVtyb3ddLCAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmluZE5lYXJl
c3RMZWdhY3lGb250U2l6ZTxmbG9hdD4ocGl4ZWxGb250U2l6ZSwgZm9udFNpemVGYWN0b3JzLCBt
ZWRpdW1TaXplKTsKLX0KLQotc3RhdGljIENvbG9yIGNvbG9yRm9yQ1NTVmFsdWUoaW50IGNzc1Zh
bHVlSWQpCi17Ci0gICAgc3RydWN0IENvbG9yVmFsdWUgewotICAgICAgICBpbnQgY3NzVmFsdWVJ
ZDsKLSAgICAgICAgUkdCQTMyIGNvbG9yOwotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgQ29s
b3JWYWx1ZSBjb2xvclZhbHVlc1tdID0gewotICAgICAgICB7IENTU1ZhbHVlQXF1YSwgMHhGRjAw
RkZGRiB9LAotICAgICAgICB7IENTU1ZhbHVlQmxhY2ssIDB4RkYwMDAwMDAgfSwKLSAgICAgICAg
eyBDU1NWYWx1ZUJsdWUsIDB4RkYwMDAwRkYgfSwKLSAgICAgICAgeyBDU1NWYWx1ZUZ1Y2hzaWEs
IDB4RkZGRjAwRkYgfSwKLSAgICAgICAgeyBDU1NWYWx1ZUdyYXksIDB4RkY4MDgwODAgfSwKLSAg
ICAgICAgeyBDU1NWYWx1ZUdyZWVuLCAweEZGMDA4MDAwICB9LAotICAgICAgICB7IENTU1ZhbHVl
R3JleSwgMHhGRjgwODA4MCB9LAotICAgICAgICB7IENTU1ZhbHVlTGltZSwgMHhGRjAwRkYwMCB9
LAotICAgICAgICB7IENTU1ZhbHVlTWFyb29uLCAweEZGODAwMDAwIH0sCi0gICAgICAgIHsgQ1NT
VmFsdWVOYXZ5LCAweEZGMDAwMDgwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVPbGl2ZSwgMHhGRjgw
ODAwMCAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZU9yYW5nZSwgMHhGRkZGQTUwMCB9LAotICAgICAg
ICB7IENTU1ZhbHVlUHVycGxlLCAweEZGODAwMDgwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVSZWQs
IDB4RkZGRjAwMDAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZVNpbHZlciwgMHhGRkMwQzBDMCB9LAot
ICAgICAgICB7IENTU1ZhbHVlVGVhbCwgMHhGRjAwODA4MCAgfSwKLSAgICAgICAgeyBDU1NWYWx1
ZVRyYW5zcGFyZW50LCAweDAwMDAwMDAwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVXaGl0ZSwgMHhG
RkZGRkZGRiB9LAotICAgICAgICB7IENTU1ZhbHVlWWVsbG93LCAweEZGRkZGRjAwIH0sCi0gICAg
ICAgIHsgMCwgMCB9Ci0gICAgfTsKLQotICAgIGZvciAoY29uc3QgQ29sb3JWYWx1ZSogY29sID0g
Y29sb3JWYWx1ZXM7IGNvbC0+Y3NzVmFsdWVJZDsgKytjb2wpIHsKLSAgICAgICAgaWYgKGNvbC0+
Y3NzVmFsdWVJZCA9PSBjc3NWYWx1ZUlkKQotICAgICAgICAgICAgcmV0dXJuIGNvbC0+Y29sb3I7
Ci0gICAgfQotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUNv
bG9yKGNzc1ZhbHVlSWQpOwotfQotCi1Db2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmsp
IGNvbnN0Ci17Ci0gICAgaWYgKHZhbHVlLT5pc1JHQkNvbG9yKCkpCi0gICAgICAgIHJldHVybiBD
b2xvcih2YWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7Ci0KLSAgICBpbnQgaWRlbnQgPSB2YWx1ZS0+
Z2V0SWRlbnQoKTsKLSAgICBzd2l0Y2ggKGlkZW50KSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKLSAgICAgICAgcmV0
dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7Ci0gICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdExpbms6Ci0gICAgICAgIHJldHVybiAobV9lbGVtZW50LT5pc0xpbmsoKSAmJiBmb3JW
aXNpdGVkTGluaykgPyBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7Ci0gICAgY2FzZSBDU1NWYWx1ZVdl
YmtpdEFjdGl2ZWxpbms6Ci0gICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFj
dGl2ZUxpbmtDb2xvcigpOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoK
LSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpmb2N1c1JpbmdDb2xvcigpOwotICAgIGNhc2Ug
Q1NTVmFsdWVDdXJyZW50Y29sb3I6Ci0gICAgICAgIHJldHVybiBtX3N0eWxlLT5jb2xvcigpOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlkZW50KTsKLSAg
ICB9Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29u
c3QgQXRvbWljU3RyaW5nICZhdHRybmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mZWF0dXJl
cy5hdHRyc0luUnVsZXMuY29udGFpbnMoYXR0cm5hbWUuaW1wbCgpKTsKLX0KLQotdm9pZCBTdHls
ZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVk
aWFRdWVyeUV4cCogZXhwciwgYm9vbCByZXN1bHQpCi17Ci0gICAgbV92aWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcnlSZXN1bHRzLmFwcGVuZChhZG9wdFB0cihuZXcgTWVkaWFRdWVyeVJlc3VsdCgq
ZXhwciwgcmVzdWx0KSkpOwotfQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmFmZmVjdGVkQnlWaWV3
cG9ydENoYW5nZSgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgcyA9IG1fdmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHM7IGkrKykgewotICAgICAgICBpZiAobV9tZWRpdW0tPmV2YWwoJm1fdmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9leHByZXNzaW9uKSAhPSBtX3ZpZXdwb3J0RGVwZW5k
ZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1fcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIFRyYW5zZm9ybU9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uOiAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FM
RTsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3Jt
T3BlcmF0aW9uOiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g7Ci0g
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJh
dGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOwotICAgICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb246
ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWjsKLSAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogICAg
ICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOwotICAgICAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAg
cmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOwotICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgcmV0
dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g7Ci0gICAgICAgIGNhc2UgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246ICAgICByZXR1
cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWTsKLSAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogICAgIHJldHVy
biBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOwotICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogICAgcmV0dXJu
IFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOwotICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJu
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgcmV0dXJuIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICByZXR1cm4gVHJhbnNmb3Jt
T3BlcmF0aW9uOjpST1RBVEVfWTsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVy
YXRpb246OlJPVEFURV9aOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpS
b3RhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlv
bjo6Uk9UQVRFXzNEOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6
U0tFVzsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFuc2Zv
cm1PcGVyYXRpb246ICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDsK
LSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVy
YXRpb246ICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWTsKLSAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
OiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDsKLSAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246ICAg
ICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDsKLSAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246ICAg
IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOwotICAgICAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpVbmtub3duVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAg
cmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORTsKLSAgICB9Ci0gICAgcmV0dXJuIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Tk9ORTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVUcmFu
c2Zvcm1PcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJl
bmRlclN0eWxlKiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMp
Ci17Ci0gICAgaWYgKCFpblZhbHVlIHx8ICFpblZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAg
ICAgIG91dE9wZXJhdGlvbnMuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSA/IHN0eWxlLT5lZmZlY3RpdmVab29tKCkg
OiAxOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBmb3IgKENTU1Zh
bHVlTGlzdEl0ZXJhdG9yIGkgPSBpblZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsK
LSAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgaWYgKCFj
dXJyVmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKiB0cmFuc2Zvcm1WYWx1ZSA9
IHN0YXRpY19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4oaS52YWx1ZSgpKTsKLSAgICAg
ICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBib29sIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IGZhbHNlOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpOyArK2opIHsK
LSAgICAgICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aiktPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgIGhhdmVOb25QcmltaXRp
dmVWYWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygwKSk7Ci0KLSAgICAgICAgc3dpdGNoICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpT
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAg
ICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKLSAgICAgICAgICAgICAgICBkb3VibGUgc3kgPSAx
LjA7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkg
PT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUt
PmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1
ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFu
c2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1W
YWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN5ID0gc3g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUoc3gsIHN5LCAxLjAsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUo
dHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlNjYWxlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAg
ICAgICBkb3VibGUgc3ggPSAxLjA7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHN5ID0gMS4wOwot
ICAgICAgICAgICAgICAgIGRvdWJsZSBzeiA9IDEuMDsKLSAgICAgICAgICAgICAgICBpZiAodHJh
bnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICAgICBzeiA9IGZpcnN0
VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2Nh
bGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFs
dWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gdGhpcmRWYWx1
ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNv
bmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoc3gsIHN5LCBz
eiwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlw
ZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOgotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
WFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICBM
ZW5ndGggdHggPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgICAgIExlbmd0aCB0eSA9
IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5v
cGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFu
c2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0g
Y29udmVydFRvRmxvYXRMZW5ndGgoc2Vjb25kVmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21G
YWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHR4LmlzVW5kZWZpbmVk
KCkgfHwgdHkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAsIEZpeGVkKSwg
Z2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
KSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlv
bjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNE
VHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3Ro
KDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwgRml4ZWQp
OwotICAgICAgICAgICAgICAgIExlbmd0aCB0eiA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAg
ICAgICAgICAgIHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJv
b3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3Jt
VmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNs
YXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0
VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsK
LSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0
VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkg
IT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkg
PiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRo
aXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKHRoaXJkVmFsdWUsIHN0eWxlLCByb290U3R5bGUs
IHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zs
b2F0TGVuZ3RoKHNlY29uZFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0eC5pc1VuZGVmaW5lZCgpIHx8IHR5Lmlz
VW5kZWZpbmVkKCkgfHwgdHouaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBw
ZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgdHosIGdldFRy
YW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAg
ICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7
Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDAsIDAsIDEsIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVy
YXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAg
ICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVpUcmFuc2Zvcm1P
cGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICBkb3VibGUgeCA9IDA7Ci0gICAgICAgICAgICAg
ICAgZG91YmxlIHkgPSAwOwotICAgICAgICAgICAgICAgIGRvdWJsZSB6ID0gMDsKLSAgICAgICAg
ICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAg
ICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZh
bHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlU
cmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHkgPSAxOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgeiA9IDE7Ci0gICAgICAgICAgICAgICAg
b3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3Rh
dGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1W
YWx1ZS0+bGVuZ3RoKCkgPCA0KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEp
KTsKLSAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMikpOwotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmb3VydGhW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMykpOwotICAgICAgICAgICAgICAgIGRvdWJsZSB4ID0gZmly
c3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgeSA9IHNl
Y29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGRvdWJsZSB6ID0g
dGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgYW5n
bGUgPSBmb3VydGhWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLSAgICAgICAgICAgICAgICBvcGVy
YXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoeCwgeSwgeiwgYW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFu
c2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAg
ZG91YmxlIGFuZ2xlWCA9IDA7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlWSA9IDA7Ci0g
ICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMo
KTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAg
ICAgICAgICAgICAgICAgIGFuZ2xlWSA9IGFuZ2xlOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBhbmdsZVggPSBhbmdsZTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVZID0gc2Vjb25kVmFsdWUtPmNv
bXB1dGVEZWdyZWVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgs
IGFuZ2xlWSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA8
IDYpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRvdWJsZSBh
ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3VibGUg
YiA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMSkpLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAg
IGRvdWJsZSBjID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgZG91YmxlIGQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUoKTsK
LSAgICAgICAgICAgICAgICBkb3VibGUgZSA9IHpvb21GYWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQp
KS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgZiA9IHpvb21GYWN0
b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoYSwgYiwgYywgZCwgZSwgZikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0
cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
VmFsdWUtPmxlbmd0aCgpIDwgMTYpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKS0+
Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFs
dWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91Ymxl
VmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
ayg0KSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soNSkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDYpKS0+Z2V0RG91YmxlVmFsdWUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg3KSktPmdl
dERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soOCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMCkpLT5nZXREb3VibGVW
YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDExKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHpvb21GYWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEyKSktPmdldERvdWJsZVZhbHVlKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb21GYWN0b3IgKiBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDEzKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTQpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0
cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNSkpLT5nZXREb3VibGVWYWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0
cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtYXRyaXgpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAg
ICAgTGVuZ3RoIHAgPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgICAgIGlmIChmaXJz
dFZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgICAgICAgICBwID0gY29udmVydFRvRmxv
YXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBxdWly
ayB0aGF0IHNob3VsZCBnbyBhd2F5IHdoZW4gM2QgdHJhbnNmb3JtcyBhcmUgZmluYWxpemVkLgot
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgdmFsID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICAgICAgcCA9IHZhbCA+PSAwID8gTGVuZ3RoKGNsYW1wVG9Q
b3NpdGl2ZUludGVnZXIodmFsKSwgRml4ZWQpIDogTGVuZ3RoKFVuZGVmaW5lZCk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHAuaXNVbmRlZmluZWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUocCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlv
bjoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG91dE9wZXJhdGlvbnMgPSBvcGVyYXRp
b25zOwotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotc3Rh
dGljIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBl
KFdlYktpdENTU0ZpbHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRpb25UeXBlIHR5cGUpCi17Ci0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6UmVmZXJlbmNl
RmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVO
Q0U7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVyT3BlcmF0
aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU7Ci0gICAgY2Fz
ZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJl
dHVybiBGaWx0ZXJPcGVyYXRpb246OlNFUElBOwotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0
aW9uOjpTQVRVUkFURTsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpIdWVSb3RhdGVG
aWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RB
VEU7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SW52ZXJ0RmlsdGVyT3BlcmF0aW9u
OgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ7Ci0gICAgY2FzZSBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJu
IEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVl
OjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0
aW9uOjpCUklHSFRORVNTOwotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0
RmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFT
VDsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmlsdGVyT3BlcmF0aW9uOgot
ICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpCTFVSOwotICAgIGNhc2UgV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBG
aWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAg
ICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDdXN0b21GaWx0ZXJPcGVyYXRpb246Ci0gICAg
ICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTTsKLSNlbmRpZgotICAgIGNhc2UgV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVy
biBGaWx0ZXJPcGVyYXRpb246Ok5PTkU7Ci0gICAgfQotICAgIHJldHVybiBGaWx0ZXJPcGVyYXRp
b246Ok5PTkU7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi1TdHlsZVNoYWRlciogU3R5
bGVSZXNvbHZlcjo6c3R5bGVTaGFkZXIoQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1
ZS0+aXNXZWJLaXRDU1NTaGFkZXJWYWx1ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5k
aW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUq
Pih2YWx1ZSkpOwotICAgIHJldHVybiAwOwotfQotCi1TdHlsZVNoYWRlciogU3R5bGVSZXNvbHZl
cjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFs
dWUqIHZhbHVlKQotewotICAgIFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQ
ZW5kaW5nU2hhZGVyKCk7Ci0gICAgaWYgKHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1NoYWRl
cigpKQotICAgICAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsKLSAgICByZXR1cm4gc2hh
ZGVyOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCi17Ci0g
ICAgaWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9oYXNQZW5kaW5nU2hhZGVycykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNl
TG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwot
Ci0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMg
PSBtX3N0eWxlLT5maWx0ZXIoKS5vcGVyYXRpb25zKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZpbHRlck9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVyT3BlcmF0aW9ucy5hdChpKTsK
LSAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRl
ck9wZXJhdGlvbjo6Q1VTVE9NKSB7Ci0gICAgICAgICAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb24q
IGN1c3RvbUZpbHRlciA9IHN0YXRpY19jYXN0PEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KGZpbHRl
ck9wZXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoY3VzdG9tRmlsdGVyLT5wcm9n
cmFtKCkpOwotICAgICAgICAgICAgU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtKiBwcm9ncmFtID0g
c3RhdGljX2Nhc3Q8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtKj4oY3VzdG9tRmlsdGVyLT5wcm9n
cmFtKCkpOwotICAgICAgICAgICAgaWYgKHByb2dyYW0tPnZlcnRleFNoYWRlcigpICYmIHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLT5pc1BlbmRpbmdTaGFkZXIoKSkgewotICAgICAgICAgICAgICAg
IFdlYktpdENTU1NoYWRlclZhbHVlKiBzaGFkZXJWYWx1ZSA9IHN0YXRpY19jYXN0PFN0eWxlUGVu
ZGluZ1NoYWRlcio+KHByb2dyYW0tPnZlcnRleFNoYWRlcigpKS0+Y3NzU2hhZGVyVmFsdWUoKTsK
LSAgICAgICAgICAgICAgICBwcm9ncmFtLT5zZXRWZXJ0ZXhTaGFkZXIoc2hhZGVyVmFsdWUtPmNh
Y2hlZFNoYWRlcihjYWNoZWRSZXNvdXJjZUxvYWRlcikpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkgJiYgcHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS0+aXNQZW5kaW5nU2hhZGVyKCkpIHsKLSAgICAgICAgICAgICAgICBXZWJLaXRDU1NT
aGFkZXJWYWx1ZSogc2hhZGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdTaGFkZXIq
Pihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpKS0+Y3NzU2hhZGVyVmFsdWUoKTsKLSAgICAgICAg
ICAgICAgICBwcm9ncmFtLT5zZXRGcmFnbWVudFNoYWRlcihzaGFkZXJWYWx1ZS0+Y2FjaGVkU2hh
ZGVyKGNhY2hlZFJlc291cmNlTG9hZGVyKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBz
b3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBh
cmFtZXRlcj4mIGEsIGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQotewot
ICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYS0+bmFtZSgpLCBiLT5uYW1lKCkp
OwotfQotCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6
cGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1Zh
bHVlTGlzdCogdmFsdWVzKQotewotICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0
ZXI+IG51bWJlclBhcmFtZXRlciA9IEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcjo6Y3JlYXRl
KG5hbWUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMtPmxlbmd0aCgpOyAr
K2kpIHsKLSAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gdmFsdWVzLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpOwotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIG51bWJlclBhcmFtZXRl
ci0+YWRkVmFsdWUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkpOwotICAgIH0KLSAg
ICByZXR1cm4gbnVtYmVyUGFyYW1ldGVyLnJlbGVhc2UoKTsKLX0KLQotYm9vbCBTdHlsZVJlc29s
dmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFtZXRlcnNW
YWx1ZSwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVyTGlzdCkKLXsKLSAgICBI
YXNoU2V0PFN0cmluZz4ga25vd25QYXJhbWV0ZXJOYW1lczsKLSAgICBDU1NWYWx1ZUxpc3RJdGVy
YXRvciBwYXJhbWV0ZXJJdGVyYXRvcihwYXJhbWV0ZXJzVmFsdWUpOwotICAgIGZvciAoOyBwYXJh
bWV0ZXJJdGVyYXRvci5oYXNNb3JlKCk7IHBhcmFtZXRlckl0ZXJhdG9yLmFkdmFuY2UoKSkgewot
ICAgICAgICBpZiAoIXBhcmFtZXRlckl0ZXJhdG9yLnZhbHVlKCktPmlzVmFsdWVMaXN0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGl0
ZXJhdG9yKHBhcmFtZXRlckl0ZXJhdG9yLnZhbHVlKCkpOwotICAgICAgICBpZiAoIWl0ZXJhdG9y
LmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihpdGVyYXRvci52YWx1ZSgpKTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5wcmltaXRpdmVUeXBlKCkgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgbmFtZSA9IHBy
aW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAvLyBEbyBub3QgYWxsb3cg
ZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcy4KLSAgICAgICAgaWYgKGtub3duUGFyYW1ldGVyTmFt
ZXMuY29udGFpbnMobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGtu
b3duUGFyYW1ldGVyTmFtZXMuYWRkKG5hbWUpOwotICAgICAgICAKLSAgICAgICAgaXRlcmF0b3Iu
YWR2YW5jZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFpdGVyYXRvci5oYXNNb3JlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IG90aGVyIHBhcmFtZXRlcnMgdHlwZXMgcGFyc2luZy4KLSAgICAgICAgLy8gYm9vbGVh
bnM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQzOAotICAgICAg
ICAvLyB0ZXh0dXJlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcx
NDQyCi0gICAgICAgIC8vIDNkLXRyYW5zZm9ybXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MTQ0MwotICAgICAgICAvLyBtYXQyLCBtYXQzLCBtYXQ0OiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0NDQKLSAgICAgICAgUmVmUHRyPEN1
c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyYW1ldGVyOwotICAgICAgICBpZiAoaXRlcmF0b3IudmFs
dWUoKS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMg
PSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihpdGVyYXRvci52YWx1ZSgpKTsKLSAgICAgICAg
ICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2Ug
Y2FuIGhhdmUgb25seSBhcnJheXMgb2YgYm9vbGVhbnMgb3IgbnVtYmVycywgc28gdXNlIHRoZSBm
aXJzdCB2YWx1ZSB0byBjaG9vc2UgYmV0d2VlbiB0aG9zZSB0d28uCi0gICAgICAgICAgICAvLyBN
YWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgdmFsdWUuIFdlIG5lZWQgdXAgdG8gNCB2YWx1
ZXMgKGFsbCBib29sZWFucyBvciBhbGwgbnVtYmVycykuCi0gICAgICAgICAgICBpZiAoIXZhbHVl
cy0+bGVuZ3RoKCkgfHwgdmFsdWVzLT5sZW5ndGgoKSA+IDQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXZhbHVlcy0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygwKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIGZpcnN0UHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7Ci0gICAgICAgICAgICBpZiAoZmly
c3RQcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKQotICAgICAgICAgICAgICAgIHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9tRmlsdGVy
TnVtYmVyUGFyYW10ZXIobmFtZSwgdmFsdWVzKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhlIGJvb2xlYW4gYXJyYXkgcGFyYW1ldGVyIGhlcmUuCi0gICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0MzgKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIAotICAgICAgICBwYXJhbWV0ZXJMaXN0LmFwcGVuZChwYXJhbWV0ZXIucmVs
ZWFzZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBzdXJlIHdlIHNvcnQgdGhlIHBhcmFt
ZXRlcnMgYmVmb3JlIHBhc3NpbmcgdGhlbSBkb3duIHRvIHRoZSBDdXN0b21GaWx0ZXJPcGVyYXRp
b24uCi0gICAgc3RkOjpzb3J0KHBhcmFtZXRlckxpc3QuYmVnaW4oKSwgcGFyYW1ldGVyTGlzdC5l
bmQoKSwgc29ydFBhcmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKTsKLSAgICAKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmls
dGVyVmFsdWUpCi17Ci0gICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5ndGgoKSk7Ci0KLSAgICBD
U1NWYWx1ZSogc2hhZGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soMCk7Ci0gICAgQVNTRVJUKHNoYWRlcnNWYWx1ZS0+aXNWYWx1ZUxpc3QoKSk7Ci0gICAgQ1NT
VmFsdWVMaXN0KiBzaGFkZXJzTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHNoYWRl
cnNWYWx1ZSk7Ci0KLSAgICBBU1NFUlQoc2hhZGVyc0xpc3QtPmxlbmd0aCgpKTsKLSAgICBSZWZQ
dHI8U3R5bGVTaGFkZXI+IHZlcnRleFNoYWRlciA9IHN0eWxlU2hhZGVyKHNoYWRlcnNMaXN0LT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKLSAgICBSZWZQdHI8U3R5bGVTaGFkZXI+IGZyYWdt
ZW50U2hhZGVyID0gKHNoYWRlcnNMaXN0LT5sZW5ndGgoKSA+IDEpID8gc3R5bGVTaGFkZXIoc2hh
ZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpIDogMDsKLSAgICAKLSAgICB1bnNp
Z25lZCBtZXNoUm93cyA9IDE7Ci0gICAgdW5zaWduZWQgbWVzaENvbHVtbnMgPSAxOwotICAgIEN1
c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUgbWVzaEJveFR5cGUgPSBDdXN0b21GaWx0
ZXJPcGVyYXRpb246OkZJTFRFUl9CT1g7Ci0gICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNo
VHlwZSBtZXNoVHlwZSA9IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6QVRUQUNIRUQ7Ci0gICAgCi0g
ICAgQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSA9IDA7Ci0gICAgCi0gICAgaWYgKGZpbHRlclZh
bHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXRlcmF0
b3IoZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAKLSAg
ICAgICAgLy8gVGhlIHNlY29uZCB2YWx1ZSBtaWdodCBiZSB0aGUgbWVzaCBib3ggb3IgdGhlIGxp
c3Qgb2YgcGFyYW1ldGVyczoKLSAgICAgICAgLy8gSWYgaXQgc3RhcnRzIHdpdGggYSBudW1iZXIg
b3IgYW55IG9mIHRoZSBtZXNoLWJveCBpZGVudGlmaWVycyBpdCBpcyAKLSAgICAgICAgLy8gdGhl
IG1lc2gtYm94IGxpc3QsIGlmIG5vdCBpdCBtZWFucyBpdCBpcyB0aGUgcGFyYW1ldGVycyBsaXN0
LgotCi0gICAgICAgIGlmIChpdGVyYXRvci5oYXNNb3JlKCkgJiYgaXRlcmF0b3IuaXNQcmltaXRp
dmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOwot
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSWYgb25seSBvbmUgaW50ZWdlciB2YWx1ZSBpcyBzcGVjaWZpZWQsIGl0IHdpbGwg
c2V0IGJvdGgKLSAgICAgICAgICAgICAgICAvLyB0aGUgcm93cyBhbmQgdGhlIGNvbHVtbnMuCi0g
ICAgICAgICAgICAgICAgbWVzaFJvd3MgPSBtZXNoQ29sdW1ucyA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRJbnRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbWF0Y2ggYW5vdGhlciBudW1i
ZXIgZm9yIHRoZSBjb2x1bW5zLgotICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvci5oYXNNb3Jl
KCkgJiYgaXRlcmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVz
aENvbHVtbnMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKGl0ZXJhdG9yLmhhc01vcmUoKSAmJiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7Ci0gICAgICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVCb3JkZXJCb3gKLSAg
ICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVBh
ZGRpbmdCb3gKLSAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZUNvbnRlbnRCb3gKLSAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUZpbHRlckJveCkgewotICAgICAgICAgICAgICAgIG1lc2hC
b3hUeXBlID0gKnByaW1pdGl2ZVZhbHVlOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFu
Y2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGl0
ZXJhdG9yLmhhc01vcmUoKSAmJiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7Ci0gICAgICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEZXRhY2hlZCkgewotICAgICAgICAg
ICAgICAgIG1lc2hUeXBlID0gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpERVRBQ0hFRDsKLSAgICAg
ICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmICghaXRlcmF0b3IuaW5kZXgoKSkgewotICAgICAgICAgICAg
Ly8gSWYgbm8gdmFsdWUgd2FzIGNvbnN1bWVkIGZyb20gdGhlIG1lc2ggdmFsdWUsIHRoZW4gaXQg
aXMganVzdCBhIHBhcmFtZXRlciBsaXN0LCBtZWFuaW5nIHRoYXQgd2UgZW5kIHVwCi0gICAgICAg
ICAgICAvLyBoYXZpbmcganVzdCB0d28gQ1NTTGlzdFZhbHVlczogbGlzdCBvZiBzaGFkZXJzIGFu
ZCBsaXN0IG9mIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICBBU1NFUlQoZmlsdGVyVmFsdWUtPmxl
bmd0aCgpID09IDIpOwotICAgICAgICAgICAgcGFyYW1ldGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
aWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA+IDIgJiYgIXBhcmFtZXRlcnNWYWx1ZSkKLSAgICAg
ICAgcGFyYW1ldGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
Mik7Ci0gICAgCi0gICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJMaXN0Owot
ICAgIGlmIChwYXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dChwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICAKLSAgICBSZWZQdHI8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gU3R5bGVD
dXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUodmVydGV4U2hhZGVyLnJlbGVhc2UoKSwgZnJhZ21l
bnRTaGFkZXIucmVsZWFzZSgpKTsKLSAgICByZXR1cm4gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpj
cmVhdGUocHJvZ3JhbS5yZWxlYXNlKCksIHBhcmFtZXRlckxpc3QsIG1lc2hSb3dzLCBtZXNoQ29s
dW1ucywgbWVzaEJveFR5cGUsIG1lc2hUeXBlKTsKLX0KLSNlbmRpZgotCi1ib29sIFN0eWxlUmVz
b2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0
eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0
T3BlcmF0aW9ucykKLXsKLSAgICBBU1NFUlQob3V0T3BlcmF0aW9ucy5pc0VtcHR5KCkpOwotICAg
IAotICAgIGlmICghaW5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlm
IChpblZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpblZh
bHVlKTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Tm9uZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoIWlu
VmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZsb2F0
IHpvb21GYWN0b3IgPSBzdHlsZSA/IHN0eWxlLT5lZmZlY3RpdmVab29tKCkgOiAxOwotICAgIEZp
bHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9y
IGkgPSBpblZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgQ1NTVmFs
dWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzV2Vi
S2l0Q1NTRmlsdGVyVmFsdWUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFdl
YktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU0Zp
bHRlclZhbHVlKj4oaS52YWx1ZSgpKTsKLSAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIG9wZXJhdGlvblR5cGUgPSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBlKGZpbHRlclZhbHVl
LT5vcGVyYXRpb25UeXBlKCkpOwotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgICAgICBp
ZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewotICAgICAgICAg
ICAgUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gY3JlYXRlQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uKGZpbHRlclZhbHVlKTsKLSAgICAgICAgICAgIGlmICghb3BlcmF0aW9u
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKG9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBh
bGwgcGFyYW1ldGVycyBhcmUgcHJpbWl0aXZlIHZhbHVlcywgd2l0aCB0aGUKLSAgICAgICAgLy8g
ZXhjZXB0aW9uIG9mIGRyb3Agc2hhZG93IHdoaWNoIGhhcyBhIFNoYWRvd1ZhbHVlIHBhcmFtZXRl
ci4KLSAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgIT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NI
QURPVykgewotICAgICAgICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS0+bGVuZ3Ro
KCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmICghZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaiktPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAg
ICBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGF2
ZU5vblByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSBmaWx0ZXJWYWx1ZS0+
bGVuZ3RoKCkgPyBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGZpbHRlclZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKSA6IDA7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSkgewotICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVl
OjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246IHsKLSAgICAgICAgICAgIGlmIChmaXJzdFZhbHVl
KQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSZWZlcmVu
Y2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShmaXJzdFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLCBv
cGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpHcmF5c2NhbGVGaWx0ZXJPcGVyYXRpb246Ci0gICAg
ICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVyT3BlcmF0aW9uOgotICAg
ICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbjog
ewotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7Ci0gICAgICAgICAgICBpZiAoZmlsdGVy
VmFsdWUtPmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBhbW91bnQgPSBmaXJzdFZh
bHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5p
c1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgYW1vdW50IC89IDEwMDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbW91bnQsIG9wZXJhdGlvblR5
cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAgICAg
ZG91YmxlIGFuZ2xlID0gMDsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkg
PT0gMSkKLSAgICAgICAgICAgICAgICBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVz
KCk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW5nbGUsIG9wZXJhdGlvblR5cGUpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTRmls
dGVyVmFsdWU6OkludmVydEZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NG
aWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgY2FzZSBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRpb246IHsKLSAgICAgICAg
ICAgIGRvdWJsZSBhbW91bnQgPSAoZmlsdGVyVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbikgPyAwIDogMTsKLSAg
ICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkgewotICAgICAgICAgICAg
ICAgIGFtb3VudCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGZpcnN0VmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgICAgICAgICBh
bW91bnQgLz0gMTAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKGFtb3VudCwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Qmx1ckZpbHRlck9wZXJh
dGlvbjogewotICAgICAgICAgICAgTGVuZ3RoIHN0ZERldmlhdGlvbiA9IExlbmd0aCgwLCBGaXhl
ZCk7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID49IDEpIHsKLSAgICAg
ICAgICAgICAgICBzdGREZXZpYXRpb24gPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVl
LCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChzdGREZXZpYXRpb24uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChC
bHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBvcGVyYXRpb25UeXBlKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYktpdENTU0Zp
bHRlclZhbHVlOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBpZiAo
ZmlsdGVyVmFsdWUtPmxlbmd0aCgpICE9IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygwKTsKLSAgICAgICAgICAgIGlmICghY3NzVmFsdWUtPmlzU2hhZG93
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU2hhZG93
VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGNzc1ZhbHVlKTsKLSAgICAg
ICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdHls
ZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9y
KSk7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21w
dXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvcikgOiAwOwotICAgICAg
ICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAg
ICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQo
KSk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hh
ZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQo
KSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50LCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVl
OjpVbmtub3duRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIG91dE9wZXJhdGlvbnMgPSBvcGVyYXRpb25zOwotICAgIHJldHVybiB0cnVlOwot
fQotCi0jZW5kaWYKLQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2Fk
UGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCi17Ci0gICAgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwotCi0gICAgaWYgKHBlbmRpbmdJbWFnZS0+
Y3NzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBw
ZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIGltYWdlVmFsdWUt
PmNhY2hlZEltYWdlKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLSAgICB9Ci0KLSAgICBpZiAocGVu
ZGluZ0ltYWdlLT5jc3NJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKLSAgICAgICAgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZSogaW1hZ2VHZW5lcmF0b3JWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1h
Z2VHZW5lcmF0b3JWYWx1ZSgpOwotICAgICAgICBpbWFnZUdlbmVyYXRvclZhbHVlLT5sb2FkU3Vi
aW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLSAgICAgICAgcmV0dXJuIFN0eWxlR2VuZXJh
dGVkSW1hZ2U6OmNyZWF0ZShpbWFnZUdlbmVyYXRvclZhbHVlKTsKLSAgICB9Ci0KLSNpZiBFTkFC
TEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVNldFZhbHVl
KCkpIHsKLSAgICAgICAgQ1NTSW1hZ2VTZXRWYWx1ZSogaW1hZ2VTZXRWYWx1ZSA9IHBlbmRpbmdJ
bWFnZS0+Y3NzSW1hZ2VTZXRWYWx1ZSgpOwotICAgICAgICByZXR1cm4gaW1hZ2VTZXRWYWx1ZS0+
Y2FjaGVkSW1hZ2VTZXQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMo
KQotewotICAgIGlmIChtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PENT
U1Byb3BlcnR5SUQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGll
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJy
ZW50UHJvcGVydHkgPSAqaXQ7Ci0KLSAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsK
LSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsKLSAgICAgICAg
ICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdHlsZS0+YWNjZXNz
QmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJh
Y2tncm91bmRMYXllci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiYWNrZ3Jv
dW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJ
bWFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFn
ZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dy
b3VuZExheWVyLT5pbWFnZSgpKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb250
ZW50OiB7Ci0gICAgICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBj
b25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnRE
YXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNv
bnRlbnREYXRhKS0+aW1hZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+
aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxT
dHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChsb2FkZWRJbWFnZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+c2V0SW1hZ2UobG9hZGVkSW1hZ2Uu
cmVsZWFzZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDdXJzb3I6IHsKLSAgICAgICAgICAg
ICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IG1fc3R5bGUtPmN1cnNvcnMoKSkgewot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50
Q3Vyc29yID0gY3Vyc29yTGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
U3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDdXJzb3Iuc2V0SW1hZ2UobG9hZFBlbmRpbmdJ
bWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdlKSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3R5
bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5k
aW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGlzdFN0eWxlSW1h
Z2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5
bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsK
LSAgICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0
eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0
YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2Uo
KSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7Ci0gICAgICAgICAgICAgICAgaWYg
KFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1fc3R5bGUtPmJveFJlZmxlY3QoKSkgewot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVm
bGVjdGlvbi0+bWFzaygpOwotICAgICAgICAgICAgICAgICAgICBpZiAobWFza0ltYWdlLmltYWdl
KCkgJiYgbWFza0ltYWdlLmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5n
SW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayhOaW5lUGllY2VJ
bWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCksIG1hc2tJbWFnZS5pbWFnZVNsaWNlcygpLCBtYXNr
SW1hZ2UuZmlsbCgpLCBtYXNrSW1hZ2UuYm9yZGVyU2xpY2VzKCksIG1hc2tJbWFnZS5vdXRzZXQo
KSwgbWFza0ltYWdlLmhvcml6b250YWxSdWxlKCksIG1hc2tJbWFnZS52ZXJ0aWNhbFJ1bGUoKSkp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5t
YXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFza0JveElt
YWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2Uq
PihtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNr
SW1hZ2U6IHsKLSAgICAgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogbWFza0xheWVyID0gbV9z
dHlsZS0+YWNjZXNzTWFza0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXll
ci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkg
JiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbWFza0xheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MTM5NmNiOGMzY2ExM2Y2MDk5NDE2YTE1
ZWY1MTk2YjNlYWFiMDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAorKysgL2Rldi9udWxs
CkBAIC0xLDU0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2lmbmRlZiBDU1NTdHlsZVNlbGVjdG9yX2gKLSNkZWZpbmUgQ1NTU3R5bGVTZWxl
Y3Rvcl9oCi0KLSNpbmNsdWRlICJDU1NSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVMaXN0Lmgi
Ci0jaW5jbHVkZSAiTGlua0hhc2guaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCi0jaW5j
bHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKLSNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBFU21hcnRNaW5p
bXVtRm9yRm9udFNpemUgeyBEb05vdFVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplLCBVc2VTbWFy
dE1pbmltdW1Gb3JGb250Rml6ZSB9OwotCi1jbGFzcyBDU1NGb250U2VsZWN0b3I7Ci1jbGFzcyBD
U1NQYWdlUnVsZTsKLWNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwotY2xhc3MgQ1NTUHJvcGVydHk7
Ci1jbGFzcyBDU1NSdWxlTGlzdDsKLWNsYXNzIENTU0ZvbnRGYWNlOwotY2xhc3MgQ1NTRm9udEZh
Y2VSdWxlOwotY2xhc3MgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTsKLWNsYXNzIENTU0ltYWdlU2V0
VmFsdWU7Ci1jbGFzcyBDU1NJbWFnZVZhbHVlOwotY2xhc3MgQ1NTU2VsZWN0b3I7Ci1jbGFzcyBD
U1NTdHlsZVJ1bGU7Ci1jbGFzcyBDU1NTdHlsZVNoZWV0OwotY2xhc3MgQ1NTVmFsdWU7Ci1jbGFz
cyBDb250YWluZXJOb2RlOwotY2xhc3MgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOwotY2xhc3MgQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFbGVtZW50OwotY2xh
c3MgRnJhbWU7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBLVVJMOwotY2xhc3MgS2V5ZnJhbWVM
aXN0OwotY2xhc3MgS2V5ZnJhbWVWYWx1ZTsKLWNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7Ci1j
bGFzcyBOb2RlOwotY2xhc3MgUmVuZGVyUmVnaW9uOwotY2xhc3MgUnVsZURhdGE7Ci1jbGFzcyBS
dWxlU2V0OwotY2xhc3MgU2V0dGluZ3M7Ci1jbGFzcyBTdGF0aWNDU1NSdWxlTGlzdDsKLWNsYXNz
IFN0eWxlQnVpbGRlcjsKLWNsYXNzIFN0eWxlSW1hZ2U7Ci1jbGFzcyBTdHlsZUtleWZyYW1lOwot
Y2xhc3MgU3R5bGVQZW5kaW5nSW1hZ2U7Ci1jbGFzcyBTdHlsZVByb3BlcnR5U2V0OwotY2xhc3Mg
U3R5bGVSdWxlOwotY2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwotY2xhc3MgU3R5bGVSdWxlUGFn
ZTsKLWNsYXNzIFN0eWxlUnVsZVJlZ2lvbjsKLWNsYXNzIFN0eWxlU2hhZGVyOwotY2xhc3MgU3R5
bGVTaGVldDsKLWNsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKLWNsYXNzIFN0eWxlU2hlZXRMaXN0
OwotY2xhc3MgU3R5bGVkRWxlbWVudDsKLWNsYXNzIFdlYktpdENTU0ZpbHRlclZhbHVlOwotY2xh
c3MgV2ViS2l0Q1NTU2hhZGVyVmFsdWU7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi10eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiA+IEN1c3RvbUZpbHRlclBh
cmFtZXRlckxpc3Q7Ci0jZW5kaWYKLQotY2xhc3MgTWVkaWFRdWVyeVJlc3VsdCB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTWVkaWFRdWVyeVJlc3VsdCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCYg
ZXhwciwgYm9vbCByZXN1bHQpCi0gICAgICAgIDogbV9leHByZXNzaW9uKGV4cHIpCi0gICAgICAg
ICwgbV9yZXN1bHQocmVzdWx0KQotICAgIHsKLSAgICB9Ci0KLSAgICBNZWRpYVF1ZXJ5RXhwIG1f
ZXhwcmVzc2lvbjsKLSAgICBib29sIG1fcmVzdWx0OwotfTsKLQotZW51bSBTdHlsZVNoYXJpbmdC
ZWhhdmlvciB7Ci0gICAgQWxsb3dTdHlsZVNoYXJpbmcsCi0gICAgRGlzYWxsb3dTdHlsZVNoYXJp
bmcsCi19OwotCi0vLyBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyBpcyB1c2VkIGluIG1lZGlhIHF1
ZXJpZXMsIHdoZXJlIHJlbGF0aXZlIHVuaXRzCi0vLyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5n
IHRvIHRoZSBkb2N1bWVudCByb290IGVsZW1lbnQgc3R5bGUsIGFuZCBzdHlsZWQgb25seQotLy8g
ZnJvbSB0aGUgVXNlciBBZ2VudCBTdHlsZXNoZWV0IHJ1bGVzLgotCi1lbnVtIFJ1bGVNYXRjaGlu
Z0JlaGF2aW9yIHsKLSAgICBNYXRjaEFsbFJ1bGVzLAotICAgIE1hdGNoT25seVVzZXJBZ2VudFJ1
bGVzLAotfTsKLQotLy8gVGhpcyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVyU3R5bGUgZm9yIGEgZ2l2
ZW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVzaGVldHMuCi1jbGFzcyBT
dHlsZVJlc29sdmVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHlsZVJlc29sdmVyKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgU3R5bGVSZXNvbHZlcihEb2N1
bWVudCosIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKLSAgICB+U3R5bGVSZXNvbHZl
cigpOwotCi0gICAgLy8gVXNpbmcgdGhlc2UgZHVyaW5nIHRyZWUgd2FsayB3aWxsIGFsbG93IHN0
eWxlIHNlbGVjdG9yIHRvIG9wdGltaXplIGNoaWxkIGFuZCBkZXNjZW5kYW50IHNlbGVjdG9yIGxv
b2t1cHMuCi0gICAgdm9pZCBwdXNoUGFyZW50RWxlbWVudChFbGVtZW50Kik7Ci0gICAgdm9pZCBw
b3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKLSAgICB2b2lkIHB1c2hQYXJlbnRTaGFkb3dSb290
KGNvbnN0IFNoYWRvd1Jvb3QqKTsKLSAgICB2b2lkIHBvcFBhcmVudFNoYWRvd1Jvb3QoY29uc3Qg
U2hhZG93Um9vdCopOwotCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVt
ZW50KEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBTdHlsZVNoYXJpbmdC
ZWhhdmlvciA9IEFsbG93U3R5bGVTaGFyaW5nLAotICAgICAgICBSdWxlTWF0Y2hpbmdCZWhhdmlv
ciA9IE1hdGNoQWxsUnVsZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IDApOwot
Ci0gICAgdm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiwgY29uc3QgUmVu
ZGVyU3R5bGUqLCBLZXlmcmFtZUxpc3QmKTsKLQotICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IHBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCwgRWxlbWVudCosIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSA9IDApOwotCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JQ
YWdlKGludCBwYWdlSW5kZXgpOwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqLCBDU1NGb250U2VsZWN0b3IqID0gMCk7Ci0KLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0g
ICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHls
ZTsgfQotICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9yb290RWxlbWVudFN0eWxlOyB9Ci0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZWxlbWVudDsgfQotICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2hlY2tlci5kb2N1bWVudCgpOyB9Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24oKSB7IHJldHVybiBzdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQotICAg
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4g
cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICB2b2lkIHNldEZvbnREZXNj
cmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnRE
aXJ0eSB8PSBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQot
ICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFpv
b20oZik7IH0KLSAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0
eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRUZXh0U2l6
ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1
c3QoYik7IH0KLSAgICBib29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVu
dE5vZGU7IH0KLSAgICAKLSAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVk
IGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mKTsKLSAgICAKLSAg
ICAvLyBGaW5kIHRoZSBpZHMgb3IgY2xhc3NlcyB0aGUgc2VsZWN0b3JzIG9uIGEgc3R5bGVzaGVl
dCBhcmUgc2NvcGVkIHRvLiBUaGUgc2VsZWN0b3JzIG9ubHkgYXBwbHkgdG8gZWxlbWVudHMgaW4g
c3VidHJlZXMgd2hlcmUgdGhlIHJvb3QgZWxlbWVudCBtYXRjaGVzIHRoZSBzY29wZS4KLSAgICBz
dGF0aWMgYm9vbCBkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoU3R5bGVTaGVldElu
dGVybmFsKiwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpOwotCi1wcml2YXRlOgotICAgIHZvaWQgaW5p
dEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwg
UHNldWRvSWQgPSBOT1BTRVVETyk7Ci0gICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7Ci0g
ICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMoKTsKLSAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVk
U3R5bGUoKTsKLSAgICBib29sIG1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqKTsKLSAgICBOb2RlKiBs
b2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291
bnQpIGNvbnN0OwotICAgIFN0eWxlZEVsZW1lbnQqIGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5n
KE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OwotICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdp
dGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKLQotICAgIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZUtl
eWZyYW1lKiwgS2V5ZnJhbWVWYWx1ZSYpOwotCi0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAg
ICB2b2lkIHB1c2hTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGVQYXJlbnQpOwotICAgIHZvaWQgcG9wU2NvcGUoY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGUpOwotI2Vsc2UKLSAgICB2b2lkIHB1c2hTY29wZShjb25zdCBDb250YWluZXJO
b2RlKiwgY29uc3QgQ29udGFpbmVyTm9kZSopIHsgfQotICAgIHZvaWQgcG9wU2NvcGUoY29uc3Qg
Q29udGFpbmVyTm9kZSopIHsgfQotI2VuZGlmCi0KLXB1YmxpYzoKLSAgICAvLyBUaGVzZSBtZXRo
b2RzIHdpbGwgZ2l2ZSBiYWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdp
dmVuIGVsZW1lbnQgKG9yIGEgcHNldWRvLWVsZW1lbnQpLgotICAgIGVudW0gQ1NTUnVsZUZpbHRl
ciB7Ci0gICAgICAgIFVBQW5kVXNlckNTU1J1bGVzICAgPSAxIDw8IDEsCi0gICAgICAgIEF1dGhv
ckNTU1J1bGVzICAgICAgPSAxIDw8IDIsCi0gICAgICAgIEVtcHR5Q1NTUnVsZXMgICAgICAgPSAx
IDw8IDMsCi0gICAgICAgIENyb3NzT3JpZ2luQ1NTUnVsZXMgPSAxIDw8IDQsCi0gICAgICAgIEFs
bEJ1dEVtcHR5Q1NTUnVsZXMgPSBVQUFuZFVzZXJDU1NSdWxlcyB8IEF1dGhvckNTU1J1bGVzIHwg
Q3Jvc3NPcmlnaW5DU1NSdWxlcywKLSAgICAgICAgQWxsQ1NTUnVsZXMgICAgICAgICA9IEFsbEJ1
dEVtcHR5Q1NTUnVsZXMgfCBFbXB0eUNTU1J1bGVzLAotICAgIH07Ci0gICAgUGFzc1JlZlB0cjxD
U1NSdWxlTGlzdD4gc3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIHVuc2lnbmVkIHJ1bGVz
VG9JbmNsdWRlID0gQWxsQnV0RW1wdHlDU1NSdWxlcyk7Ci0gICAgUGFzc1JlZlB0cjxDU1NSdWxl
TGlzdD4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIFBzZXVkb0lkLCB1bnNp
Z25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwotCi0gICAgLy8gR2l2
ZW4gYSBDU1Mga2V5d29yZCBpbiB0aGUgcmFuZ2UgKHh4LXNtYWxsIHRvIC13ZWJraXQteHh4LWxh
cmdlKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybgotICAgIC8vIHRoZSBjb3JyZWN0IGZvbnQg
c2l6ZSBzY2FsZWQgcmVsYXRpdmUgdG8gdGhlIHVzZXIncyBkZWZhdWx0IChtZWRpdW0pLgotICAg
IHN0YXRpYyBmbG9hdCBmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQqLCBpbnQga2V5d29yZCwg
Ym9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKTsKLQotICAgIC8vIEdpdmVuIGEgZm9udCBz
aXplIGluIHBpeGVsLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGxlZ2FjeSBmb250IHNpemUg
YmV0d2VlbiAxIGFuZCA3LgotICAgIHN0YXRpYyBpbnQgbGVnYWN5Rm9udFNpemUoRG9jdW1lbnQq
LCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKTsKLQot
cHVibGljOgotICAgIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcykgeyBt
X3N0eWxlID0gczsgfSAvLyBVc2VkIGJ5IHRoZSBkb2N1bWVudCB3aGVuIHNldHRpbmcgdXAgaXRz
IHJvb3Qgc3R5bGUuCi0KLSAgICB2b2lkIGFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5
SUQsIENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqKTsKLQotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRv
Q3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0KLSAgICB2b2lkIHVwZGF0
ZUZvbnQoKTsKLQotICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVk
U2l6ZShEb2N1bWVudCosIGZsb2F0IHpvb21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZs
b2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSA9IFVzZVNtYXJ0TWlu
aW11bUZvckZvbnRGaXplKTsKLQotICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9u
JiwgZmxvYXQgc2l6ZSk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVk
U2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiwgUmVuZGVyU3R5bGUqLCBib29sIGlzQWJz
b2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcyk7Ci0K
LXB1YmxpYzoKLSAgICBib29sIHVzZVNWR1pvb21SdWxlcygpOwotCi0gICAgQ29sb3IgY29sb3JG
cm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIGZvclZpc2l0ZWRMaW5r
ID0gZmFsc2UpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShjb25z
dCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLQotICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0b3IuZ2V0KCk7IH0KLQotICAgIHZvaWQg
YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAq
LCBib29sIHJlc3VsdCk7Ci0KLSAgICBib29sIGFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNv
bnN0OwotCi0gICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCkgeyBtX2NoZWNrZXIuYWxs
VmlzaXRlZFN0YXRlQ2hhbmdlZCgpOyB9Ci0gICAgdm9pZCB2aXNpdGVkU3RhdGVDaGFuZ2VkKExp
bmtIYXNoIHZpc2l0ZWRIYXNoKSB7IG1fY2hlY2tlci52aXNpdGVkU3RhdGVDaGFuZ2VkKHZpc2l0
ZWRIYXNoKTsgfQotCi0gICAgdm9pZCBhZGRLZXlmcmFtZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVS
dWxlS2V5ZnJhbWVzPik7Ci0KLSAgICBib29sIGNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogcmVn
aW9uRWxlbWVudCk7Ci0KLSAgICBib29sIHVzZXNTaWJsaW5nUnVsZXMoKSBjb25zdCB7IHJldHVy
biAhbV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCB1c2VzRmly
c3RMaW5lUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxl
czsgfQotICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2Zl
YXR1cmVzLnVzZXNCZWZvcmVBZnRlclJ1bGVzOyB9Ci0gICAgYm9vbCB1c2VzTGlua1J1bGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzTGlua1J1bGVzOyB9Ci0KLSAgICBzdGF0aWMg
Ym9vbCBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJT
dHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgVHJhbnNmb3JtT3BlcmF0aW9u
cyYgb3V0T3BlcmF0aW9ucyk7Ci0gICAgCi0gICAgdm9pZCBpbnZhbGlkYXRlTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZSgpOwotICAgIAotICAgIC8vIFdBUk5JTkcuIFRoaXMgd2lsbCBjb25zdHJ1Y3Qg
Q1NTT00gd3JhcHBlcnMgZm9yIGFsbCBzdHlsZSBydWxlcyBhbmQgY2FjaGUgdGhlbiBpbiBhIG1h
cCBmb3Igc2lnbmlmaWNhbnQgbWVtb3J5IGNvc3QuCi0gICAgLy8gSXQgaXMgaGVyZSB0byBzdXBw
b3J0IGluc3BlY3Rvci4gRG9uJ3QgdXNlIGZvciBhbnkgcmVndWxhciBlbmdpbmUgZnVuY3Rpb25z
LgotICAgIENTU1N0eWxlUnVsZSogZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3RvcihT
dHlsZVJ1bGUqKTsKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBib29sIGNyZWF0ZUZp
bHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0eWxlLCBS
ZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsK
LSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgU3R5bGVTaGFkZXIqIHN0eWxlU2hhZGVyKENT
U1ZhbHVlKik7Ci0gICAgU3R5bGVTaGFkZXIqIGNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJv
bVZhbHVlKFdlYktpdENTU1NoYWRlclZhbHVlKik7Ci0gICAgYm9vbCBwYXJzZUN1c3RvbUZpbHRl
clBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqLCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0Jik7Ci0g
ICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyTnVt
YmVyUGFyYW10ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKLSAgICBQYXNz
UmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
KFdlYktpdENTU0ZpbHRlclZhbHVlKik7Ci0gICAgdm9pZCBsb2FkUGVuZGluZ1NoYWRlcnMoKTsK
LSNlbmRpZgotI2VuZGlmIC8vIEVOQUJMRShDU1NfRklMVEVSUykKLQotICAgIHN0cnVjdCBSdWxl
RmVhdHVyZSB7Ci0gICAgICAgIFJ1bGVGZWF0dXJlKFN0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCi0gICAgICAgICAg
ICA6IHJ1bGUocnVsZSkKLSAgICAgICAgICAgICwgc2VsZWN0b3Ioc2VsZWN0b3IpCi0gICAgICAg
ICAgICAsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bikgCi0gICAgICAgIHsgCi0gICAgICAgIH0KLSAgICAgICAgU3R5bGVSdWxlKiBydWxlOwotICAg
ICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbjsKLSAgICB9OwotICAgIHN0cnVjdCBGZWF0dXJlcyB7Ci0gICAgICAgIEZlYXR1
cmVzKCk7Ci0gICAgICAgIH5GZWF0dXJlcygpOwotICAgICAgICB2b2lkIGFkZChjb25zdCBTdHls
ZVJlc29sdmVyOjpGZWF0dXJlcyYpOwotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIEhh
c2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlkc0luUnVsZXM7Ci0gICAgICAgIEhhc2hTZXQ8QXRv
bWljU3RyaW5nSW1wbCo+IGF0dHJzSW5SdWxlczsKLSAgICAgICAgVmVjdG9yPFJ1bGVGZWF0dXJl
PiBzaWJsaW5nUnVsZXM7Ci0gICAgICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gdW5jb21tb25BdHRy
aWJ1dGVSdWxlczsKLSAgICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXM7Ci0gICAgICAgIGJv
b2wgdXNlc0JlZm9yZUFmdGVyUnVsZXM7Ci0gICAgICAgIGJvb2wgdXNlc0xpbmtSdWxlczsKLSAg
ICB9OwotCi1wcml2YXRlOgotICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1
bHQgZm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQg
ZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoCi0gICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlD
aGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwotICAgIHZvaWQg
Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KTsKLSAgICB2b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKLQotICAgIHZvaWQgYWRqdXN0
UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSwgRWxlbWVudCopOwotCi0gICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxl
RGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KLQotICAgIHN0cnVj
dCBNYXRjaFJhbmdlcyB7Ci0gICAgICAgIE1hdGNoUmFuZ2VzKCkgOiBmaXJzdFVBUnVsZSgtMSks
IGxhc3RVQVJ1bGUoLTEpLCBmaXJzdEF1dGhvclJ1bGUoLTEpLCBsYXN0QXV0aG9yUnVsZSgtMSks
IGZpcnN0VXNlclJ1bGUoLTEpLCBsYXN0VXNlclJ1bGUoLTEpIHsgfQotICAgICAgICBpbnQgZmly
c3RVQVJ1bGU7Ci0gICAgICAgIGludCBsYXN0VUFSdWxlOwotICAgICAgICBpbnQgZmlyc3RBdXRo
b3JSdWxlOwotICAgICAgICBpbnQgbGFzdEF1dGhvclJ1bGU7Ci0gICAgICAgIGludCBmaXJzdFVz
ZXJSdWxlOwotICAgICAgICBpbnQgbGFzdFVzZXJSdWxlOwotICAgIH07Ci0KLSAgICBzdHJ1Y3Qg
TWF0Y2hlZFByb3BlcnRpZXMgewotICAgICAgICBNYXRjaGVkUHJvcGVydGllcygpIDogcG9zc2li
bHlQYWRkZWRNZW1iZXIoMCkgeyB9Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8U3R5bGVQcm9w
ZXJ0eVNldD4gcHJvcGVydGllczsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgc3RydWN0
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlIDogMjsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpc0luUmVnaW9uUnVsZSA6IDE7Ci0gICAgICAgICAgICB9OwotICAg
ICAgICAgICAgLy8gVXNlZCB0byBtYWtlIHN1cmUgYWxsIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxp
emVkIHNpbmNlIHdlIGNvbXB1dGUgdGhlIGhhc2ggb3ZlciB0aGUgYnl0ZXMgb2YgdGhpcyBvYmpl
Y3QuCi0gICAgICAgICAgICB2b2lkKiBwb3NzaWJseVBhZGRlZE1lbWJlcjsKLSAgICAgICAgfTsK
LSAgICB9OwotCi0gICAgc3RydWN0IE1hdGNoUmVzdWx0IHsKLSAgICAgICAgTWF0Y2hSZXN1bHQo
KSA6IGlzQ2FjaGVhYmxlKHRydWUpIHsgfQotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRp
ZXMsIDY0PiBtYXRjaGVkUHJvcGVydGllczsKLSAgICAgICAgVmVjdG9yPFN0eWxlUnVsZSosIDY0
PiBtYXRjaGVkUnVsZXM7Ci0gICAgICAgIE1hdGNoUmFuZ2VzIHJhbmdlczsKLSAgICAgICAgYm9v
bCBpc0NhY2hlYWJsZTsKLSAgICB9OwotCi0gICAgc3RydWN0IE1hdGNoT3B0aW9ucyB7Ci0gICAg
ICAgIE1hdGNoT3B0aW9ucyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSA9IDApIDogc2NvcGUoc2NvcGUpLCBpbmNsdWRlRW1wdHlSdWxlcyhpbmNsdWRl
RW1wdHlSdWxlcykgeyB9Ci0gICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlOwotICAg
ICAgICBib29sIGluY2x1ZGVFbXB0eVJ1bGVzOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBh
ZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaFJlc3VsdCYsIFN0eWxlUHJvcGVydHlTZXQqIHByb3Bl
cnRpZXMsIFN0eWxlUnVsZSogPSAwLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JD
aGVja2VyOjpNYXRjaEFsbCwgYm9vbCBpblJlZ2lvblJ1bGUgPSBmYWxzZSk7Ci0gICAgdm9pZCBh
ZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgU3R5bGVQcm9wZXJ0eVNldCos
IGJvb2wgaXNDYWNoZWFibGUgPSB0cnVlKTsKLQotICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhNYXRj
aFJlc3VsdCYpOwotICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0Jik7Ci0gICAgdm9p
ZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmLCBSdWxlU2V0Kik7Ci0gICAgdm9pZCBtYXRjaEF1
dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9p
ZCBtYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwot
ICAgIHZvaWQgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVk
ZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCosIGlu
dCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25z
Jik7Ci0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiwgaW50
JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMm
KTsKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVs
ZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBN
YXRjaE9wdGlvbnMmKTsKLSAgICBib29sIGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0
YSYpIGNvbnN0OwotICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygpOwotICAgIHZvaWQgc29ydEFu
ZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7Ci0KLSAgICBib29sIGNoZWNrU2Vs
ZWN0b3IoY29uc3QgUnVsZURhdGEmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IDApOwot
ICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3RvcihDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3Is
IEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwotICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGll
cyhjb25zdCBNYXRjaFJlc3VsdCYpOwotICAgIHRlbXBsYXRlIDxib29sIGZpcnN0UGFzcz4KLSAg
ICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBib29sIGlt
cG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5
KTsKLSAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+Ci0gICAgdm9pZCBhcHBseVByb3BlcnRp
ZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiwgYm9vbCBp
c0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBib29sIGZpbHRlclJlZ2lvblByb3BlcnRp
ZXMpOwotCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFJlZ2lvblN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCk7Ci0KLSAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzKE1hdGNoUmVzdWx0JiwgUnVsZVNl
dCosIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdl
TmFtZSk7Ci0gICAgdm9pZCBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBh
Z2UqPiYgbWF0Y2hlZFJ1bGVzLCBjb25zdCBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiwgYm9vbCBp
c0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKTsKLSAg
ICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JpZ2h0
UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShwYWdlSW5kZXgp
OyB9Ci0gICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLSAgICBTdHJp
bmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0KLSAgICBPd25QdHI8UnVsZVNldD4g
bV9hdXRob3JTdHlsZTsKLSAgICBPd25QdHI8UnVsZVNldD4gbV91c2VyU3R5bGU7Ci0KLSAgICBG
ZWF0dXJlcyBtX2ZlYXR1cmVzOwotICAgIE93blB0cjxSdWxlU2V0PiBtX3NpYmxpbmdSdWxlU2V0
OwotICAgIE93blB0cjxSdWxlU2V0PiBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldDsKLQotICAg
IGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7Ci0gICAgQm9yZGVyRGF0YSBtX2JvcmRlckRhdGE7Ci0g
ICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7Ci0gICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29s
b3I7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFJlZlB0cjxTdHls
ZVJ1bGVLZXlmcmFtZXM+ID4gS2V5ZnJhbWVzUnVsZU1hcDsKLSAgICBLZXlmcmFtZXNSdWxlTWFw
IG1fa2V5ZnJhbWVzUnVsZU1hcDsKLQotcHVibGljOgotICAgIHN0YXRpYyBSZW5kZXJTdHlsZSog
c3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9
Ci0KLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwg
Q1NTVmFsdWUqKTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zy
b21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7Ci0gICAgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZSopOwotI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgIFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQs
IENTU0ltYWdlU2V0VmFsdWUqKTsKLSNlbmRpZgotCi0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZTsgfQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQotCi0gICAgc3RhdGlj
IExlbmd0aCBjb252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHls
ZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7Ci0gICAg
c3RhdGljIExlbmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJl
bmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAx
KTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHNfc3R5bGVOb3RZZXRBdmFp
bGFibGU7Ci0KLSAgICB2b2lkIGFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21T
aGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4qLCBSdWxlU2V0
JiB1c2VyU3R5bGUpOwotCi0gICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKLQot
ICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NT
VmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllcios
IENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsQ29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5
SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsSW1hZ2UoQ1NTUHJv
cGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxSZXBlYXRY
KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxs
UmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQg
bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2
b2lkIG1hcEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUq
KTsKLSAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwg
Q1NTVmFsdWUqKTsKLQotICAgIHZvaWQgbWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0aW9uKiwgQ1NT
VmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24qLCBDU1NW
YWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uRHVyYXRpb24oQW5pbWF0aW9uKiwgQ1NTVmFs
dWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiosIENTU1ZhbHVl
Kik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChBbmltYXRpb24qLCBDU1NW
YWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qLCBDU1NWYWx1ZSop
OwotICAgIHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7
Ci0gICAgdm9pZCBtYXBBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwot
ICAgIHZvaWQgbWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUq
KTsKLQotcHVibGljOgotICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCwg
Q1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwotICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VT
bGljZShDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0gICAgTGVuZ3RoQm94IG1hcE5pbmVQ
aWVjZUltYWdlUXVhZChDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VSZXBl
YXQoQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwotcHJpdmF0ZToKLSAgICBib29sIGNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2b2lkIGFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLQotI2lmIEVOQUJMRShTVkcp
Ci0gICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0j
ZW5kaWYKLQotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZFBlbmRpbmdJbWFnZShTdHls
ZVBlbmRpbmdJbWFnZSopOwotICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoKTsKLQotICAgIHN0
YXRpYyB1bnNpZ25lZCBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQ
cm9wZXJ0aWVzKiwgdW5zaWduZWQgc2l6ZSk7Ci0gICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGVJdGVtIHsKLSAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiBtYXRjaGVkUHJv
cGVydGllczsKLSAgICAgICAgTWF0Y2hSYW5nZXMgcmFuZ2VzOwotICAgICAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IHJlbmRlclN0eWxlOwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHBhcmVu
dFJlbmRlclN0eWxlOwotICAgIH07Ci0gICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0
ZW0qIGZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBN
YXRjaFJlc3VsdCYpOwotICAgIHZvaWQgYWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0
IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCB1bnNpZ25lZCBo
YXNoLCBjb25zdCBNYXRjaFJlc3VsdCYpOwotCi0gICAgLy8gRXZlcnkgTiBhZGRpdGlvbnMgdG8g
dGhlIG1hdGNoZWQgZGVjbGFyYXRpb24gY2FjaGUgdHJpZ2dlciBhIHN3ZWVwIHdoZXJlIGVudHJp
ZXMgaG9sZGluZwotICAgIC8vIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBhIHN0eWxlIGRlY2xhcmF0
aW9uIGFyZSBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICB2b2lkIHN3ZWVwTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZSgpOwotCi0gICAgdW5zaWduZWQgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRp
b25zU2luY2VMYXN0U3dlZXA7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIE1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtPiBNYXRjaGVkUHJvcGVydGllc0NhY2hlOwotICAgIE1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGUgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlOwotCi0gICAgLy8gQSBi
dWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVu
dCwgYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZvcgotICAgIC8vIG1lcmdlIHNvcnRpbmcu
Ci0gICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOwotCi0gICAg
UmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OwotCi0gICAgSGFzaFNldDxDU1NQ
cm9wZXJ0eUlEPiBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7Ci0KLSAgICBPd25QdHI8TWVkaWFR
dWVyeUV2YWx1YXRvcj4gbV9tZWRpdW07Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3Jvb3RE
ZWZhdWx0U3R5bGU7Ci0KLSAgICBQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1ZG87Ci0KLSAgICBTZWxl
Y3RvckNoZWNrZXIgbV9jaGVja2VyOwotCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxl
OwotICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBtX3Jv
b3RFbGVtZW50U3R5bGU7Ci0gICAgRWxlbWVudCogbV9lbGVtZW50OwotICAgIFN0eWxlZEVsZW1l
bnQqIG1fc3R5bGVkRWxlbWVudDsKLSAgICBSZW5kZXJSZWdpb24qIG1fcmVnaW9uRm9yU3R5bGlu
ZzsKLSAgICBFSW5zaWRlTGluayBtX2VsZW1lbnRMaW5rU3RhdGU7Ci0gICAgQ29udGFpbmVyTm9k
ZSogbV9wYXJlbnROb2RlOwotICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRWYWx1ZTsKLSAgICBi
b29sIG1fZm9udERpcnR5OwotICAgIGJvb2wgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXM7Ci0g
ICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OwotCi0gICAgUmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4g
bV9mb250U2VsZWN0b3I7Ci0gICAgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5UmVzdWx0PiA+IG1f
dmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKLQotICAgIGJvb2wgbV9hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGU7Ci0gICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGU7Ci0gICAgY29uc3QgU3R5bGVCdWlsZGVyJiBtX3N0eWxlQnVpbGRlcjsKLSAgICAK
LSAgICBIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4gbV9zdHlsZVJ1
bGVUb0NTU09NV3JhcHBlck1hcDsKLSAgICBIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+
IG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldDsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
LSAgICBib29sIG1faGFzUGVuZGluZ1NoYWRlcnM7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCi0gICAgc3RhdGljIGNvbnN0IENvbnRhaW5lck5vZGUqIGRldGVybWluZVNjb3Bl
KGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCopOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0
IENvbnRhaW5lck5vZGUqLCBPd25QdHI8UnVsZVNldD4gPiBTY29wZWRSdWxlU2V0TWFwOwotCi0g
ICAgUnVsZVNldCogcnVsZVNldEZvclNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqKSBjb25zdDsK
LQotICAgIHZvaWQgc2V0dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKLSAgICBi
b29sIHNjb3BlU3RhY2tJc0NvbnNpc3RlbnQoY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KSBj
b25zdCB7IHJldHVybiBwYXJlbnQgJiYgcGFyZW50ID09IG1fc2NvcGVTdGFja1BhcmVudDsgfQot
Ci0gICAgU2NvcGVkUnVsZVNldE1hcCBtX3Njb3BlZEF1dGhvclN0eWxlczsKLSAgICAKLSAgICBz
dHJ1Y3QgU2NvcGVTdGFja0ZyYW1lIHsKLSAgICAgICAgU2NvcGVTdGFja0ZyYW1lKCkgOiBtX3Nj
b3BlKDApLCBtX3J1bGVTZXQoMCkgeyB9Ci0gICAgICAgIFNjb3BlU3RhY2tGcmFtZShjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSwgUnVsZVNldCogcnVsZVNldCkgOiBtX3Njb3BlKHNjb3BlKSwg
bV9ydWxlU2V0KHJ1bGVTZXQpIHsgfQotICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3Nj
b3BlOwotICAgICAgICBSdWxlU2V0KiBtX3J1bGVTZXQ7Ci0gICAgfTsKLSAgICAvLyBWZWN0b3Ig
KHVzZWQgYXMgc3RhY2spIHRoYXQga2VlcHMgdHJhY2sgb2Ygc2NvcGluZyBlbGVtZW50cyAoaS5l
LiwgZWxlbWVudHMgd2l0aCBhIDxzdHlsZSBzY29wZWQ+IGNoaWxkKQotICAgIC8vIGVuY291bnRl
cmVkIGR1cmluZyB0cmVlIGl0ZXJhdGlvbiBmb3Igc3R5bGUgcmVzb2x1dGlvbi4KLSAgICBWZWN0
b3I8U2NvcGVTdGFja0ZyYW1lPiBtX3Njb3BlU3RhY2s7Ci0gICAgLy8gRWxlbWVudCBsYXN0IHNl
ZW4gYXMgcGFyZW50IGVsZW1lbnQgd2hlbiB1cGRhdGluZyBtX3Njb3BpbmdFbGVtZW50U3RhY2su
Ci0gICAgLy8gVGhpcyBpcyB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIG1fc2NvcGluZ0VsZW1lbnRT
dGFjayBpcyBjb25zaXN0ZW50LCBzZXBhcmF0ZWx5IGZyb20gU2VsZWN0b3JDaGVja2VyOjptX3Bh
cmVudFN0YWNrLgotICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2NvcGVTdGFja1BhcmVudDsK
LSNlbmRpZgotCi0gICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsKLSAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3Bl
cnRpZXMmKTsKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNoZWRQcm9wZXJ0
aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IE1hdGNoUmFuZ2VzJiwgY29uc3QgTWF0Y2hSYW5nZXMmKTsKLSAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNoUmFuZ2VzJiwgY29uc3QgTWF0Y2hSYW5nZXMmKTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENTU1N0eWxlU2VsZWN0
b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCmluZGV4IGEx
ODgwZTJhOGFjYjA1MDg0YmI5Mzk5NzdiMTJjNTI3MjJmMWJmMDUuLjRmMDQ1YzY3YWVlYjE5ZDZh
ZTQwMTFiMmU1NDJiMGY2MzQ4ZDg1YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9N
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eUV2YWx1YXRvci5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNp
bmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgot
I2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNDMsOSArNDIs
MTAgQEAKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0
eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TY3JlZW4uaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KIAogI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpICYmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YVF1ZXJ5TWF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIu
Y3BwCmluZGV4IDY2MDE0MTFhYThjYTM4NDZjMzVlMGUwMmY3NmM2M2VkMmYxNmEyNGIuLmVmZDVk
ZWRkODYxYzg2NmY4YjBlNmYyZjA1ZmYyNmNlODVlYTg2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnlNYXRjaGVyLmNwcApAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlNYXRjaGVyLmgiCiAKLSNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTI5LDYgKzI4LDcgQEAKICNpbmNsdWRlICJNZWRpYVF1
ZXJ5RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUxpc3QuaCIKICNpbmNsdWRlICJN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdD
U1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVj
dG9yLmNwcAppbmRleCBkN2M2YWQ2MDljMTFhMjcyNTJiMzgxOTQ3MjVkY2E2OTY1ZDZkOTdjLi5l
NjU3ZDZlZjU0YTVmNTEwNmI5OWNlZTdiMTQwMzVkNWZlYzJmY2U3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0
b3IuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKICNpbmNsdWRlICJDU1NQcmltaXRp
dmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAppbmRleCA1NzQxNmFmNzRiNjE0Zjk4MzVlNGY1YzkxNGVk
NTYzNjBkOTAzZmY4Li43OWVkZjdjMmU5MDg2MGFjOWFiMGFkOTkzMzUwMmU0NzBlMDUzZGM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1
ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgotI2luY2x1ZGUgIkNT
U1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJD
dXJzb3JMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNp
bmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZU1lZGlhLmNwcAppbmRleCA5MzFlNmJiMjRjODhjMDgzYzk2NGI1MzE3NThjMzhlM2Mz
MTc3NmIzLi5jNzhjMDBhMjIxODllZGJhYWVmNmFkYmUwNjZlNTAxYTAzMjZjNGZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlTWVkaWEuY3BwCkBAIC0yNiwxMiArMjYsMTIgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTdHlsZU1lZGlhLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUgIk1lZGlh
UXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmIxZjZkZWI5NGI4NGE0NjZiMTY2ODIxNGE3NTQ2ZTE0YjI4YjcyNTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTAsMCArMSw1ODYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CisgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBj
YXJld29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtz
ICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICog
Q29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0eWxlUmVz
b2x2ZXIuaCIKKworI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkNTU0JvcmRlcklt
YWdlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0N1
cnNvckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKKyNpbmNsdWRl
ICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCisjaW5jbHVk
ZSAiQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU01lZGlhUnVsZS5oIgor
I2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVk
ZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKKyNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlz
dC5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0
LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5o
IgorI2luY2x1ZGUgIkNTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NWYWx1
ZUxpc3QuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9u
VmFsdWUuaCIKKyNpbmNsdWRlICJDb250ZW50RGF0YS5oIgorI2luY2x1ZGUgIkNvdW50ZXIuaCIK
KyNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgorI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKKyNp
bmNsdWRlICJGb250RmVhdHVyZVZhbHVlLmgiCisjaW5jbHVkZSAiRm9udFZhbHVlLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFByb2dy
ZXNzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MVGV4dEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmgiCisjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCisjaW5jbHVkZSAiTGlua0hhc2guaCIKKyNp
bmNsdWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIKKyNpbmNsdWRlICJNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgor
I2luY2x1ZGUgIk1lZGlhTGlzdC5oIgorI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIK
KyNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUGFpci5oIgorI2luY2x1ZGUgIlBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUXVvdGVzRGF0YS5oIgorI2luY2x1ZGUg
IlJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJTY3Jv
bGxiYXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlJl
bmRlclN0eWxlQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRl
ICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAi
U1ZHRm9udEZhY2VFbGVtZW50LmgiCisjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisj
aW5jbHVkZSAiU2hhZG93RGF0YS5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRl
ICJTaGFkb3dWYWx1ZS5oIgorI2luY2x1ZGUgIlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNp
bmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisj
aW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlUGVuZGluZ0lt
YWdlLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldExpc3Qu
aCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
KyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJVc2Vy
QWdlbnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lUnVsZS5oIgor
I2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NS
ZWdpb25SdWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCIKKyNpbmNs
dWRlICJXZWJLaXRGb250RmFtaWx5TmFtZXMuaCIKKyNpbmNsdWRlICJYTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCisjaW5j
bHVkZSAiV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKERBU0hC
T0FSRF9TVVBQT1JUKQorI2luY2x1ZGUgIkRhc2hib2FyZFJlZ2lvbi5oIgorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1l
cy5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9t
RmlsdGVyTnVtYmVyUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiU3R5bGVD
YWNoZWRTaGFkZXIuaCIKKyNpbmNsdWRlICJTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0uaCIKKyNp
bmNsdWRlICJTdHlsZVBlbmRpbmdTaGFkZXIuaCIKKyNpbmNsdWRlICJTdHlsZVNoYWRlci5oIgor
I2luY2x1ZGUgIldlYktpdENTU1NoYWRlclZhbHVlLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShD
U1NfSU1BR0VfU0VUKQorI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRlICJT
dHlsZUNhY2hlZEltYWdlU2V0LmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorI2RlZmlu
ZSBGSVhFRF9QT1NJVElPTl9DUkVBVEVTX1NUQUNLSU5HX0NPTlRFWFQgMQorI2VuZGlmCisKK3Vz
aW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKKworI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCitp
ZiAoaXNJbmhlcml0KSB7IFwKKyAgICBtX3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRTdHlsZS0+
cHJvcCgpKTsgXAorICAgIHJldHVybjsgXAorfQorCisjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKHByb3AsIFByb3ApIFwKK0hBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKK2lm
IChpc0luaXRpYWwpIHsgXAorICAgIG1fc3R5bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5p
dGlhbCMjUHJvcCgpKTsgXAorICAgIHJldHVybjsgXAorfQorCisjZGVmaW5lIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMX1dJVEhfVkFMVUUocHJvcCwgUHJvcCwgVmFsdWUpIFwKK0hBTkRMRV9J
TkhFUklUKHByb3AsIFByb3ApIFwKK2lmIChpc0luaXRpYWwpIHsgXAorICAgIG1fc3R5bGUtPnNl
dCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjVmFsdWUoKSk7XAorICAgIHJldHVybjtcCit9
CisKKyNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShwcm9w
LCBQcm9wKSBcCitIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChwcm9wLCBQcm9wKSBcCitpZiAo
cHJpbWl0aXZlVmFsdWUpIFwKKyAgICBtX3N0eWxlLT5zZXQjI1Byb3AoKnByaW1pdGl2ZVZhbHVl
KTsKKworY2xhc3MgUnVsZURhdGEgeworcHVibGljOgorICAgIFJ1bGVEYXRhKFN0eWxlUnVsZSos
IENTU1NlbGVjdG9yKiwgdW5zaWduZWQgcG9zaXRpb24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUp
OworCisgICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9
CisgICAgU3R5bGVSdWxlKiBydWxlKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlOyB9CisgICAgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RvcjsgfQorCisgICAg
Ym9vbCBoYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0Zhc3RD
aGVja2FibGVTZWxlY3RvcjsgfQorICAgIGJvb2wgaGFzTXVsdGlwYXJ0U2VsZWN0b3IoKSBjb25z
dCB7IHJldHVybiBtX2hhc011bHRpcGFydFNlbGVjdG9yOyB9CisgICAgYm9vbCBoYXNSaWdodG1v
c3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2g7IH0KKyAgICBi
b29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yOyB9CisgICAgdW5zaWduZWQgc3BlY2lm
aWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmljaXR5OyB9CisgICAgdW5zaWduZWQgbGlu
a01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoVHlwZTsgfQorICAgIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbjsgfQorICAgIGJvb2wgaXNJblJlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVy
biBtX2lzSW5SZWdpb25SdWxlOyB9CisKKyAgICAvLyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVuIG1l
bW9yeSB1c2FnZSAodGhlcmUgY2FuIGJlIGxvdHMgb2YgUnVsZURhdGEgb2JqZWN0cykgYW5kIGdv
b2QgZmlsdGVyaW5nIHBlcmZvcm1hbmNlLgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhp
bXVtSWRlbnRpZmllckNvdW50ID0gNDsKKyAgICBjb25zdCB1bnNpZ25lZCogZGVzY2VuZGFudFNl
bGVjdG9ySWRlbnRpZmllckhhc2hlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VuZGFudFNlbGVj
dG9ySWRlbnRpZmllckhhc2hlczsgfQorCitwcml2YXRlOgorICAgIFN0eWxlUnVsZSogbV9ydWxl
OworICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9yOworICAgIHVuc2lnbmVkIG1fc3BlY2lmaWNp
dHk7CisgICAgLy8gVGhpcyBudW1iZXIgd2FzIHBpY2tlZCBmYWlybHkgYXJiaXRyYXJpbHkuIFdl
IGNhbiBwcm9iYWJseSBsb3dlciBpdCBpZiB3ZSBuZWVkIHRvLgorICAgIC8vIFNvbWUgc2ltcGxl
IHRlc3Rpbmcgc2hvd2VkIDwxMDAsMDAwIFJ1bGVEYXRhJ3Mgb24gbGFyZ2Ugc2l0ZXMuCisgICAg
dW5zaWduZWQgbV9wb3NpdGlvbiA6IDI0OworICAgIHVuc2lnbmVkIG1faGFzRmFzdENoZWNrYWJs
ZVNlbGVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2hhc011bHRpcGFydFNlbGVjdG9yIDogMTsK
KyAgICB1bnNpZ25lZCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1
bGVIYXNoIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxl
Y3RvciA6IDE7CisgICAgdW5zaWduZWQgbV9saW5rTWF0Y2hUeXBlIDogMjsgLy8gIFNlbGVjdG9y
Q2hlY2tlcjo6TGlua01hdGNoTWFzaworICAgIHVuc2lnbmVkIG1faGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiA6IDE7CisgICAgdW5zaWduZWQgbV9pc0luUmVnaW9uUnVsZSA6IDE7CisgICAgLy8g
VXNlIHBsYWluIGFycmF5IGluc3RlYWQgb2YgYSBWZWN0b3IgdG8gbWluaW1pemUgbWVtb3J5IG92
ZXJoZWFkLgorICAgIHVuc2lnbmVkIG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hl
c1ttYXhpbXVtSWRlbnRpZmllckNvdW50XTsKK307CisgICAgCitzdHJ1Y3QgU2FtZVNpemVBc1J1
bGVEYXRhIHsKKyAgICB2b2lkKiBhOworICAgIHZvaWQqIGI7CisgICAgdW5zaWduZWQgYzsKKyAg
ICB1bnNpZ25lZCBkOworICAgIHVuc2lnbmVkIGVbNF07Cit9OworCitDT01QSUxFX0FTU0VSVChz
aXplb2YoUnVsZURhdGEpID09IHNpemVvZihTYW1lU2l6ZUFzUnVsZURhdGEpLCBSdWxlRGF0YV9z
aG91bGRfc3RheV9zbWFsbCk7CisKK2NsYXNzIFJ1bGVTZXQgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFJ1bGVTZXQpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsgfQorCisgICAgdHlwZWRl
ZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+ID4g
QXRvbVJ1bGVNYXA7CisKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRJbnRl
cm5hbCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBTdHlsZVJlc29sdmVyKiA9IDAsIGNv
bnN0IENvbnRhaW5lck5vZGUqID0gMCk7CisKKyAgICB2b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1
bGUqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNr
U2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBmYWxzZSk7CisgICAgdm9pZCBhZGRSdWxl
KFN0eWxlUnVsZSosIENTU1NlbGVjdG9yKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFs
c2UpOworICAgIHZvaWQgYWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSopOworICAgIHZvaWQgYWRk
VG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxl
RGF0YSYpOworICAgIHZvaWQgYWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qLCBib29sIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOworICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKyAgICB2
b2lkIGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCA9
IGZhbHNlOyB9CisKKyAgICBjb25zdCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgZmVhdHVyZXMo
KSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CisKKyAgICBjb25zdCBWZWN0b3I8UnVsZURh
dGE+KiBpZFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9pZFJ1
bGVzLmdldChrZXkpOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogY2xhc3NSdWxlcyhB
dG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NSdWxlcy5nZXQoa2V5
KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHRhZ1J1bGVzKEF0b21pY1N0cmluZ0lt
cGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV90YWdSdWxlcy5nZXQoa2V5KTsgfQorICAgIGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4qIHNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhBdG9taWNTdHJpbmdJ
bXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzLmdldChr
ZXkpOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogbGlua1BzZXVkb0NsYXNzUnVsZXMo
KSBjb25zdCB7IHJldHVybiAmbV9saW5rUHNldWRvQ2xhc3NSdWxlczsgfQorICAgIGNvbnN0IFZl
Y3RvcjxSdWxlRGF0YT4qIGZvY3VzUHNldWRvQ2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZt
X2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHVu
aXZlcnNhbFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fdW5pdmVyc2FsUnVsZXM7IH0KKyAgICBj
b25zdCBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBwYWdlUnVsZXMoKSBjb25zdCB7IHJldHVybiBt
X3BhZ2VSdWxlczsgfQorCitwdWJsaWM6CisgICAgUnVsZVNldCgpOworCisgICAgQXRvbVJ1bGVN
YXAgbV9pZFJ1bGVzOworICAgIEF0b21SdWxlTWFwIG1fY2xhc3NSdWxlczsKKyAgICBBdG9tUnVs
ZU1hcCBtX3RhZ1J1bGVzOworICAgIEF0b21SdWxlTWFwIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1
bGVzOworICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9saW5rUHNldWRvQ2xhc3NSdWxlczsKKyAgICBW
ZWN0b3I8UnVsZURhdGE+IG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzOworICAgIFZlY3RvcjxSdWxl
RGF0YT4gbV91bml2ZXJzYWxSdWxlczsKKyAgICBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+IG1fcGFn
ZVJ1bGVzOworICAgIHVuc2lnbmVkIG1fcnVsZUNvdW50OworICAgIGJvb2wgbV9hdXRvU2hyaW5r
VG9GaXRFbmFibGVkOworICAgIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzIG1fZmVhdHVyZXM7CisK
KyAgICBzdHJ1Y3QgUnVsZVNldFNlbGVjdG9yUGFpciB7CisgICAgICAgIFJ1bGVTZXRTZWxlY3Rv
clBhaXIoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBQYXNzT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQp
IDogc2VsZWN0b3Ioc2VsZWN0b3IpLCBydWxlU2V0KHJ1bGVTZXQpIHsgfQorICAgICAgICBSdWxl
U2V0U2VsZWN0b3JQYWlyKGNvbnN0IFJ1bGVTZXRTZWxlY3RvclBhaXImIHJzKSA6IHNlbGVjdG9y
KHJzLnNlbGVjdG9yKSwgcnVsZVNldChjb25zdF9jYXN0PFJ1bGVTZXRTZWxlY3RvclBhaXIqPigm
cnMpLT5ydWxlU2V0LnJlbGVhc2UoKSkgeyB9CisgICAgICAgIENTU1NlbGVjdG9yKiBzZWxlY3Rv
cjsKKyAgICAgICAgT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQ7CisgICAgfTsKKworICAgIFZlY3Rv
cjxSdWxlU2V0U2VsZWN0b3JQYWlyPiBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzOworfTsK
Kworc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRTdHlsZTsKK3N0YXRpYyBSdWxlU2V0KiBkZWZhdWx0
UXVpcmtzU3R5bGU7CitzdGF0aWMgUnVsZVNldCogZGVmYXVsdFByaW50U3R5bGU7CitzdGF0aWMg
UnVsZVNldCogZGVmYXVsdFZpZXdTb3VyY2VTdHlsZTsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJu
YWwqIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCog
ZGVmYXVsdFN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBxdWlya3NTdHls
ZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogc3ZnU3R5bGVTaGVldDsKK3N0YXRp
YyBTdHlsZVNoZWV0SW50ZXJuYWwqIG1hdGhNTFN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVl
dEludGVybmFsKiBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50
ZXJuYWwqIGZ1bGxzY3JlZW5TdHlsZVNoZWV0OworCitSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZl
cjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKKworc3RhdGljIHZvaWQgbG9hZEZ1bGxEZWZhdWx0
U3R5bGUoKTsKK3N0YXRpYyB2b2lkIGxvYWRTaW1wbGVEZWZhdWx0U3R5bGUoKTsKK3RlbXBsYXRl
IDxjbGFzcyBMaXN0VHlwZT4KK3N0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hN
YXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYsIExpc3RUeXBlKik7CisKKy8v
IEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSBzb21lIG1lY2hhbmlzbSB0aGF0IGd1YXJh
bnRlZXMgdGhpcyBpcyBpbiBzeW5jIHdpdGggdGhlIHJlYWwgVUEgc3R5bGVzaGVldC4KK3N0YXRp
YyBjb25zdCBjaGFyKiBzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0ID0gImh0bWwsYm9keSxkaXZ7
ZGlzcGxheTpibG9ja31oZWFke2Rpc3BsYXk6bm9uZX1ib2R5e21hcmdpbjo4cHh9ZGl2OmZvY3Vz
LHNwYW46Zm9jdXN7b3V0bGluZTphdXRvIDVweCAtd2Via2l0LWZvY3VzLXJpbmctY29sb3J9YTot
d2Via2l0LWFueS1saW5re2NvbG9yOi13ZWJraXQtbGluazt0ZXh0LWRlY29yYXRpb246dW5kZXJs
aW5lfWE6LXdlYmtpdC1hbnktbGluazphY3RpdmV7Y29sb3I6LXdlYmtpdC1hY3RpdmVsaW5rfSI7
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50Q2FuVXNlU2ltcGxlRGVmYXVsdFN0eWxlKEVs
ZW1lbnQqIGUpCit7CisgICAgcmV0dXJuIGUtPmhhc1RhZ05hbWUoaHRtbFRhZykgfHwgZS0+aGFz
VGFnTmFtZShoZWFkVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8IGUtPmhhc1RhZ05h
bWUoZGl2VGFnKSB8fCBlLT5oYXNUYWdOYW1lKHNwYW5UYWcpIHx8IGUtPmhhc1RhZ05hbWUoYnJU
YWcpIHx8IGUtPmhhc1RhZ05hbWUoYVRhZyk7Cit9CisKK3N0YXRpYyBjb25zdCBNZWRpYVF1ZXJ5
RXZhbHVhdG9yJiBzY3JlZW5FdmFsKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IE1lZGlhUXVlcnlFdmFsdWF0b3IsIHN0YXRpY1NjcmVlbkV2YWwsICgic2NyZWVuIikpOworICAg
IHJldHVybiBzdGF0aWNTY3JlZW5FdmFsOworfQorCitzdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2
YWx1YXRvciYgcHJpbnRFdmFsKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3IsIHN0YXRpY1ByaW50RXZhbCwgKCJwcmludCIpKTsKKyAgICByZXR1
cm4gc3RhdGljUHJpbnRFdmFsOworfQorCitzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogbGVmdFRv
UmlnaHREZWNsYXJhdGlvbigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4sIGxlZnRUb1JpZ2h0RGVjbCwgKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0
ZSgpKSk7CisgICAgaWYgKGxlZnRUb1JpZ2h0RGVjbC0+aXNFbXB0eSgpKQorICAgICAgICBsZWZ0
VG9SaWdodERlY2wtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZUx0
cik7CisgICAgcmV0dXJuIGxlZnRUb1JpZ2h0RGVjbC5nZXQoKTsKK30KKworc3RhdGljIFN0eWxl
UHJvcGVydHlTZXQqIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+LCByaWdodFRvTGVmdERlY2wsIChTdHls
ZVByb3BlcnR5U2V0OjpjcmVhdGUoKSkpOworICAgIGlmIChyaWdodFRvTGVmdERlY2wtPmlzRW1w
dHkoKSkKKyAgICAgICAgcmlnaHRUb0xlZnREZWNsLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURp
cmVjdGlvbiwgQ1NTVmFsdWVSdGwpOworICAgIHJldHVybiByaWdodFRvTGVmdERlY2wuZ2V0KCk7
Cit9CisKK1N0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBi
b29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICA6IG1faGFzVUFBcHBlYXJhbmNlKGZh
bHNlKQorICAgICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKQorICAgICwg
bV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAoMCkKKyAgICAs
IG1fY2hlY2tlcihkb2N1bWVudCwgIWRvY3VtZW50LT5pblF1aXJrc01vZGUoKSkKKyAgICAsIG1f
cGFyZW50U3R5bGUoMCkKKyAgICAsIG1fcm9vdEVsZW1lbnRTdHlsZSgwKQorICAgICwgbV9lbGVt
ZW50KDApCisgICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkKKyAgICAsIG1fcmVnaW9uRm9yU3R5bGlu
ZygwKQorICAgICwgbV9lbGVtZW50TGlua1N0YXRlKE5vdEluc2lkZUxpbmspCisgICAgLCBtX3Bh
cmVudE5vZGUoMCkKKyAgICAsIG1fbGluZUhlaWdodFZhbHVlKDApCisgICAgLCBtX2ZvbnREaXJ0
eShmYWxzZSkKKyAgICAsIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKG1hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcykKKyAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCisgICAgLCBtX2ZvbnRT
ZWxlY3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShkb2N1bWVudCkpCisgICAgLCBtX2FwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQorICAgICwgbV9hcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKGZhbHNlKQorICAgICwgbV9zdHlsZUJ1aWxkZXIoU3R5bGVCdWlsZGVyOjpz
aGFyZWRTdHlsZUJ1aWxkZXIoKSkKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgLCBtX2hh
c1BlbmRpbmdTaGFkZXJzKGZhbHNlKQorI2VuZGlmCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkK
KyAgICAsIG1fc2NvcGVTdGFja1BhcmVudCgwKQorI2VuZGlmCit7CisgICAgRWxlbWVudCogcm9v
dCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKworICAgIGlmICghZGVmYXVsdFN0eWxl
KSB7CisgICAgICAgIGlmICghcm9vdCB8fCBlbGVtZW50Q2FuVXNlU2ltcGxlRGVmYXVsdFN0eWxl
KHJvb3QpKQorICAgICAgICAgICAgbG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOworICAgIH0KKworICAgIC8v
IGNvbnN0cnVjdCBkb2N1bWVudCByb290IGVsZW1lbnQgZGVmYXVsdCBzdHlsZS4gdGhpcyBpcyBu
ZWVkZWQKKyAgICAvLyB0byBldmFsdWF0ZSBtZWRpYSBxdWVyaWVzIHRoYXQgY29udGFpbiByZWxh
dGl2ZSBjb25zdHJhaW50cywgbGlrZSAic2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMGVtKSIKKyAg
ICAvLyBUaGlzIGlzIGhlcmUgaW5zdGVhZCBvZiBjb25zdHJ1Y3RvciwgYmVjYXVzZSB3aGVuIGNv
bnN0cnVjdG9yIGlzIHJ1biwKKyAgICAvLyBkb2N1bWVudCBkb2Vzbid0IGhhdmUgZG9jdW1lbnRF
bGVtZW50CisgICAgLy8gTk9URTogdGhpcyBhc3N1bWVzIHRoYXQgZWxlbWVudCB0aGF0IGdldHMg
cGFzc2VkIHRvIHN0eWxlRm9yRWxlbWVudCAtY2FsbAorICAgIC8vIGlzIGFsd2F5cyBmcm9tIHRo
ZSBkb2N1bWVudCB0aGF0IG93bnMgdGhlIHN0eWxlIHNlbGVjdG9yCisgICAgRnJhbWVWaWV3KiB2
aWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBpZiAodmlldykKKyAgICAgICAgbV9tZWRpdW0g
PSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3LT5tZWRpYVR5cGUoKSkpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1
YXRvcigiYWxsIikpOworCisgICAgaWYgKHJvb3QpCisgICAgICAgIG1fcm9vdERlZmF1bHRTdHls
ZSA9IHN0eWxlRm9yRWxlbWVudChyb290LCAwLCBEaXNhbGxvd1N0eWxlU2hhcmluZywgTWF0Y2hP
bmx5VXNlckFnZW50UnVsZXMpOworCisgICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3
KQorICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZp
ZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkp
KTsKKworICAgIG1fYXV0aG9yU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICAvLyBBZGRp
bmcgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgorICAgIC8v
IEFkZGluZyBnbG9iYWwgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUg
ZW5kLgorICAgIC8vIE5vdGUgdGhhdCB0aGVyZSB1c3VhbGx5IGlzIG9ubHkgMSBzaGVldCBmb3Ig
c2NvcGVkIHJ1bGVzLCBzbyBhdXRvLXNocmluay10by1maXQgaXMgZmluZS4KKyAgICBtX2F1dGhv
clN0eWxlLT5kaXNhYmxlQXV0b1Nocmlua1RvRml0KCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBz
dWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGltZSEKKyAgICBPd25QdHI8
UnVsZVNldD4gdGVtcFVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIGlmIChTdHls
ZVNoZWV0SW50ZXJuYWwqIHBhZ2VVc2VyU2hlZXQgPSBkb2N1bWVudC0+cGFnZVVzZXJTaGVldCgp
KQorICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlVXNlclNoZWV0
LCAqbV9tZWRpdW0sIHRoaXMpOworICAgIGFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxl
c0Zyb21TaGVldHMoZG9jdW1lbnQtPnBhZ2VHcm91cFVzZXJTaGVldHMoKSwgKnRlbXBVc2VyU3R5
bGUpOworICAgIGFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoZG9j
dW1lbnQtPmRvY3VtZW50VXNlclNoZWV0cygpLCAqdGVtcFVzZXJTdHlsZSk7CisgICAgaWYgKHRl
bXBVc2VyU3R5bGUtPm1fcnVsZUNvdW50ID4gMCB8fCB0ZW1wVXNlclN0eWxlLT5tX3BhZ2VSdWxl
cy5zaXplKCkgPiAwKQorICAgICAgICBtX3VzZXJTdHlsZSA9IHRlbXBVc2VyU3R5bGUucmVsZWFz
ZSgpOworCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBpZiAoZG9jdW1lbnQtPnN2Z0V4dGVu
c2lvbnMoKSkgeworICAgICAgICBjb25zdCBIYXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVudCo+JiBz
dmdGb250RmFjZUVsZW1lbnRzID0gZG9jdW1lbnQtPnN2Z0V4dGVuc2lvbnMoKS0+c3ZnRm9udEZh
Y2VFbGVtZW50cygpOworICAgICAgICBIYXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVudCo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBzdmdGb250RmFjZUVsZW1lbnRzLmVuZCgpOworICAgICAgICBmb3Ig
KEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3ZnRm9u
dEZhY2VFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBmb250
U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKCgqaXQpLT5mb250RmFjZVJ1bGUoKSk7CisgICAg
fQorI2VuZGlmCisKKyAgICBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cygwLCBkb2N1bWVudC0+c3R5
bGVTaGVldHMoKS0+dmVjdG9yKCkpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZEF1dGhv
clJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxT
dHlsZVNoZWV0SW50ZXJuYWw+ID4qIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSkKK3sK
KyAgICBpZiAoIXVzZXJTaGVldHMpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHVzZXJTaGVldHMtPnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgY29uc3QgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4m
IHNoZWV0ID0gdXNlclNoZWV0cy0+YXQoaSk7CisgICAgICAgIGlmIChzaGVldC0+aXNVc2VyU3R5
bGVTaGVldCgpKQorICAgICAgICAgICAgdXNlclN0eWxlLmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0
LmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2F1
dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldC5nZXQoKSwgKm1fbWVkaXVtLCB0aGlz
KTsKKyAgICB9Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNv
bnN0IFZlY3RvcjxTdHlsZVJlc29sdmVyOjpSdWxlRmVhdHVyZT4mIHJ1bGVzKQoreworICAgIHNp
emVfdCBzaXplID0gcnVsZXMuc2l6ZSgpOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcnVsZVNl
dC0+YWRkUnVsZShydWxlc1tpXS5ydWxlLCBydWxlc1tpXS5zZWxlY3RvciwgcnVsZXNbaV0uaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgZmFsc2UpOworICAgIHJldHVybiBydWxlU2V0LnJlbGVh
c2UoKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVyZXMoKQoreworICAg
IG1fZmVhdHVyZXMuY2xlYXIoKTsKKyAgICAvLyBDb2xsZWN0IGFsbCBpZHMgYW5kIHJ1bGVzIHVz
aW5nIHNpYmxpbmcgc2VsZWN0b3JzICg6Zmlyc3QtY2hpbGQgYW5kIHNpbWlsYXIpCisgICAgLy8g
aW4gdGhlIGN1cnJlbnQgc2V0IG9mIHN0eWxlc2hlZXRzLiBTdHlsZSBzaGFyaW5nIGNvZGUgdXNl
cyB0aGlzIGluZm9ybWF0aW9uIHRvIHJlamVjdAorICAgIC8vIHNoYXJpbmcgY2FuZGlkYXRlcy4K
KyAgICBtX2ZlYXR1cmVzLmFkZChkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkpOworICAgIG1fZmVh
dHVyZXMuYWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOworI2lmIEVOQUJMRShTVFlMRV9T
Q09QRUQpCisgICAgZm9yIChTY29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVk
QXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpOyAr
K2l0KQorICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+c2Vjb25kLT5mZWF0dXJlcygpKTsKKyNl
bmRpZgorICAgIGlmIChtX3VzZXJTdHlsZSkKKyAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2Vy
U3R5bGUtPmZlYXR1cmVzKCkpOworCisgICAgbV9zaWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0
KG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKTsKKyAgICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNl
dCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7Cit9CisK
KyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorY29uc3QgQ29udGFpbmVyTm9kZSogU3R5bGVSZXNv
bHZlcjo6ZGV0ZXJtaW5lU2NvcGUoY29uc3QgU3R5bGVTaGVldEludGVybmFsKiBzaGVldCkKK3sK
KyAgICBBU1NFUlQoc2hlZXQpOworCisgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
dHlsZVNjb3BlZEVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOb2RlKiBvd25l
ck5vZGUgPSBzaGVldC0+ZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVy
Tm9kZSB8fCAhb3duZXJOb2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIVE1M
U3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50
Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gc3R5bGVFbGVtZW50LT5w
YXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIChwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSB8fCBwYXJlbnQtPmlzU2hhZG93Um9vdCgp
KSA/IHBhcmVudCA6IDA7Cit9CisKK2lubGluZSBSdWxlU2V0KiBTdHlsZVJlc29sdmVyOjpydWxl
U2V0Rm9yU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0Cit7CisgICAgaWYg
KCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0
eWxlcy5maW5kKHNjb3BlKTsKKyAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMu
ZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsgCit9CisjZW5kaWYKKwordm9pZCBTdHlsZVJl
c29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBzdHlsZXNoZWV0cykKK3sKKyAgICAvLyBUaGlz
IGhhbmRsZXMgc2hlZXRzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHN0eWxlc2hlZXQgbGlzdCBv
bmx5LiBJbiBvdGhlciBjYXNlcyB0aGUgc3R5bGUgcmVzb2x2ZXIKKyAgICAvLyBuZWVkcyB0byBi
ZSByZWNvbnN0cnVjdGVkLiBUbyBoYW5kbGUgaW5zZXJ0aW9ucyB0b28gdGhlIHJ1bGUgb3JkZXIg
bnVtYmVycyB3b3VsZCBuZWVkIHRvIGJlIHVwZGF0ZWQuCisgICAgdW5zaWduZWQgc2l6ZSA9IHN0
eWxlc2hlZXRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdE5ldzsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICBpZiAoIXN0eWxlc2hlZXRzW2ldLT5pc0NTU1N0eWxlU2hlZXQo
KSB8fCBzdHlsZXNoZWV0c1tpXS0+ZGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXQqPihzdHlsZXNoZWV0c1tpXS5nZXQoKSk7CisgICAgICAgIFN0eWxlU2hlZXRJbnRlcm5hbCog
c2hlZXQgPSBjc3NTaGVldC0+aW50ZXJuYWwoKTsKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQor
ICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IGRldGVybWluZVNjb3BlKHNoZWV0
KTsKKyAgICAgICAgaWYgKHNjb3BlKSB7CisgICAgICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpB
ZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAg
ICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KHNo
ZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQo
c2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgIGlmICghbV9zdHlsZVJ1bGVUb0NTU09N
V3JhcHBlck1hcC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyht
X3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBjc3NTaGVldCk7CisgICAgfQorICAgIG1fYXV0
aG9yU3R5bGUtPnNocmlua1RvRml0KCk7CisgICAgY29sbGVjdEZlYXR1cmVzKCk7CisgICAgCisg
ICAgaWYgKGRvY3VtZW50KCktPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+
c3R5bGUoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgp
LnVwZGF0ZShmb250U2VsZWN0b3IoKSk7Cit9CisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQor
dm9pZCBTdHlsZVJlc29sdmVyOjpzZXR1cFNjb3BlU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSog
cGFyZW50KQoreworICAgIC8vIFRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgc2hvdWxkbid0IGJl
IHVzZWQgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVyZS4KKyAgICBBU1NFUlQo
IW1fc2NvcGVkQXV0aG9yU3R5bGVzLmlzRW1wdHkoKSk7CisKKyAgICBtX3Njb3BlU3RhY2suc2hy
aW5rKDApOworICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T3JIb3N0
Tm9kZSgpKSB7CisgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yU2NvcGUocGFy
ZW50KTsKKyAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAgICBtX3Njb3BlU3RhY2suYXBw
ZW5kKFNjb3BlU3RhY2tGcmFtZShwYXJlbnQsIHJ1bGVTZXQpKTsKKyAgICB9CisgICAgbV9zY29w
ZVN0YWNrLnJldmVyc2UoKTsKKyAgICBtX3Njb3BlU3RhY2tQYXJlbnQgPSBwYXJlbnQ7Cit9CisK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
LCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZVBhcmVudCkKK3sKKyAgICAvLyBTaG9ydGN1dDog
RG9uJ3QgYm90aGVyIHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiA8c3R5bGUgc2Nv
cGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgorICAgIGlmIChtX3Njb3BlZEF1dGhvclN0eWxlcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX3Njb3BlU3RhY2tQYXJlbnQpOworICAgICAg
ICBBU1NFUlQobV9zY29wZVN0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgLy8gSW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZSB3ZSBtYXkg
Z2V0IGludm9rZWQgZm9yIHJhbmRvbSBlbGVtZW50cy4KKyAgICAvLyBSZWNyZWF0ZSB0aGUgd2hv
bGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGluIHN1Y2ggY2FzZXMuCisgICAgaWYgKCFzY29wZVN0
YWNrSXNDb25zaXN0ZW50KHNjb3BlUGFyZW50KSkgeworICAgICAgICBzZXR1cFNjb3BlU3RhY2so
c2NvcGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1
c2ggdGhlIHBhcmVudCBvbnRvIHRoZSBzdGFjay4KKyAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVs
ZVNldEZvclNjb3BlKHNjb3BlKTsKKyAgICBpZiAocnVsZVNldCkKKyAgICAgICAgbV9zY29wZVN0
YWNrLmFwcGVuZChTY29wZVN0YWNrRnJhbWUoc2NvcGUsIHJ1bGVTZXQpKTsKKyAgICBtX3Njb3Bl
U3RhY2tQYXJlbnQgPSBzY29wZTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpwb3BTY29wZShj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK3sKKyAgICAvLyBPbmx5IGJvdGhlciB0byB1cGRh
dGUgdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiBpdCBpcyBjb25zaXN0ZW50LgorICAgIGlm
IChzY29wZVN0YWNrSXNDb25zaXN0ZW50KHNjb3BlKSkgeworICAgICAgICBtX3Njb3BlU3RhY2su
cmVtb3ZlTGFzdCgpOworICAgICAgICBtX3Njb3BlU3RhY2tQYXJlbnQgPSBzY29wZS0+cGFyZW50
T3JIb3N0Tm9kZSgpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnB1
c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKK3sKKyAgICBjb25zdCBDb250YWluZXJO
b2RlKiBwYXJlbnRzUGFyZW50ID0gcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCk7CisKKyAg
ICAvLyBXZSBhcmUgbm90IGFsd2F5cyBpbnZva2VkIGNvbnNpc3RlbnRseS4gRm9yIGV4YW1wbGUs
IHNjcmlwdCBleGVjdXRpb24gY2FuIGNhdXNlIHVzIHRvIGVudGVyCisgICAgLy8gc3R5bGUgcmVj
YWxjIGluIHRoZSBtaWRkbGUgb2YgdHJlZSBidWlsZGluZy4gV2UgbWF5IGFsc28gYmUgaW52b2tl
ZCBmcm9tIHNvbWV3aGVyZSB3aXRoaW4gdGhlIHRyZWUuCisgICAgLy8gUmVzZXQgdGhlIHN0YWNr
IGluIHRoaXMgY2FzZSwgb3IgaWYgd2Ugc2VlIGEgbmV3IHJvb3QgZWxlbWVudC4KKyAgICAvLyBP
dGhlcndpc2UganVzdCBwdXNoIHRoZSBuZXcgcGFyZW50LgorICAgIGlmICghcGFyZW50c1BhcmVu
dCB8fCBtX2NoZWNrZXIucGFyZW50U3RhY2tJc0VtcHR5KCkpCisgICAgICAgIG1fY2hlY2tlci5z
ZXR1cFBhcmVudFN0YWNrKHBhcmVudCk7CisgICAgZWxzZQorICAgICAgICBtX2NoZWNrZXIucHVz
aFBhcmVudChwYXJlbnQpOworCisgICAgLy8gTm90ZTogV2UgbXVzdG4ndCBza2lwIFNoYWRvd1Jv
b3Qgbm9kZXMgZm9yIHRoZSBzY29wZSBzdGFjay4KKyAgICBwdXNoU2NvcGUocGFyZW50LCBwYXJl
bnQtPnBhcmVudE9ySG9zdE5vZGUoKSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFy
ZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCit7CisgICAgLy8gTm90ZSB0aGF0IHdlIG1heSBn
ZXQgaW52b2tlZCBmb3Igc29tZSByYW5kb20gZWxlbWVudHMgaW4gc29tZSB3YWNreSBjYXNlcyBk
dXJpbmcgc3R5bGUgcmVzb2x2ZS4KKyAgICAvLyBQYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sg
aW4gdGhpcyBjYXNlLgorICAgIGlmIChtX2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQo
cGFyZW50KSkKKyAgICAgICAgbV9jaGVja2VyLnBvcFBhcmVudCgpOworICAgIHBvcFNjb3BlKHBh
cmVudCk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFBhcmVudFNoYWRvd1Jvb3QoY29u
c3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3sKKyAgICBBU1NFUlQoc2hhZG93Um9vdC0+aG9z
dCgpKTsKKyAgICBwdXNoU2NvcGUoc2hhZG93Um9vdCwgc2hhZG93Um9vdC0+aG9zdCgpKTsKK30K
Kwordm9pZCBTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jv
b3QqIHNoYWRvd1Jvb3QpCit7CisgICAgQVNTRVJUKHNoYWRvd1Jvb3QtPmhvc3QoKSk7CisgICAg
cG9wU2NvcGUoc2hhZG93Um9vdCk7Cit9CisKKy8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHN0eWxl
IHNldHRpbmcgZnVuY3Rpb24gZm9yIGtleWZyYW1lIHN0eWxlcwordm9pZCBTdHlsZVJlc29sdmVy
OjphZGRLZXlmcmFtZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiBydWxlKQor
eworICAgIEF0b21pY1N0cmluZyBzKHJ1bGUtPm5hbWUoKSk7CisgICAgbV9rZXlmcmFtZXNSdWxl
TWFwLnNldChzLmltcGwoKSwgcnVsZSk7Cit9CisKK1N0eWxlUmVzb2x2ZXI6On5TdHlsZVJlc29s
dmVyKCkKK3sKKyAgICBtX2ZvbnRTZWxlY3Rvci0+Y2xlYXJEb2N1bWVudCgpOworfQorCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCit7CisgICAgLy8g
TG9vayBmb3IgY2FjaGUgZW50cmllcyBjb250YWluaW5nIGEgc3R5bGUgZGVjbGFyYXRpb24gd2l0
aCBhIHNpbmdsZSByZWYgYW5kIHJlbW92ZSB0aGVtLgorICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3
aGVuIGFuIGVsZW1lbnQgYXR0cmlidXRlIG11dGF0aW9uIGNhdXNlcyBpdCB0byBzd2FwIG91dCBp
dHMgQXR0cmlidXRlOjpkZWNsKCkKKyAgICAvLyBmb3IgYW5vdGhlciBDU1NNYXBwZWRBdHRyaWJ1
dGVEZWNsYXJhdGlvbiwgcG90ZW50aWFsbHkgbGVhdmluZyB0aGlzIGNhY2hlIHdpdGggdGhlIGxh
c3QgcmVmLgorICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+IHRvUmVtb3ZlOworICAgIE1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmJl
Z2luKCk7CisgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgZW5kID0gbV9tYXRj
aGVkUHJvcGVydGllc0NhY2hlLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiYgbWF0Y2hlZFByb3BlcnRpZXMgPSBp
dC0+c2Vjb25kLm1hdGNoZWRQcm9wZXJ0aWVzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobWF0
Y2hlZFByb3BlcnRpZXNbaV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKKyAgICAgICAgICAg
ICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKK30KKworU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6OkZl
YXR1cmVzKCkKKyAgICA6IHVzZXNGaXJzdExpbmVSdWxlcyhmYWxzZSkKKyAgICAsIHVzZXNCZWZv
cmVBZnRlclJ1bGVzKGZhbHNlKQorICAgICwgdXNlc0xpbmtSdWxlcyhmYWxzZSkKK3sKK30KKwor
U3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6On5GZWF0dXJlcygpCit7Cit9CisgICAgCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjphZGQoY29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMm
IG90aGVyKQoreworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBlbmQg
PSBvdGhlci5pZHNJblJ1bGVzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJ
bXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuaWRzSW5SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIGlkc0luUnVsZXMuYWRkKCppdCk7CisgICAgZW5kID0gb3RoZXIuYXR0
cnNJblJ1bGVzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0
ZXJhdG9yIGl0ID0gb3RoZXIuYXR0cnNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgYXR0cnNJblJ1bGVzLmFkZCgqaXQpOworICAgIHNpYmxpbmdSdWxlcy5hcHBlbmQo
b3RoZXIuc2libGluZ1J1bGVzKTsKKyAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChv
dGhlci51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKKyAgICB1c2VzRmlyc3RMaW5lUnVsZXMgPSB1
c2VzRmlyc3RMaW5lUnVsZXMgfHwgb3RoZXIudXNlc0ZpcnN0TGluZVJ1bGVzOworICAgIHVzZXNC
ZWZvcmVBZnRlclJ1bGVzID0gdXNlc0JlZm9yZUFmdGVyUnVsZXMgfHwgb3RoZXIudXNlc0JlZm9y
ZUFmdGVyUnVsZXM7CisgICAgdXNlc0xpbmtSdWxlcyA9IHVzZXNMaW5rUnVsZXMgfHwgb3RoZXIu
dXNlc0xpbmtSdWxlczsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlczo6Y2xlYXIo
KQoreworICAgIGlkc0luUnVsZXMuY2xlYXIoKTsKKyAgICBhdHRyc0luUnVsZXMuY2xlYXIoKTsK
KyAgICBzaWJsaW5nUnVsZXMuY2xlYXIoKTsKKyAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmNs
ZWFyKCk7CisgICAgdXNlc0ZpcnN0TGluZVJ1bGVzID0gZmFsc2U7CisgICAgdXNlc0JlZm9yZUFm
dGVyUnVsZXMgPSBmYWxzZTsKKyAgICB1c2VzTGlua1J1bGVzID0gZmFsc2U7Cit9CisKK3N0YXRp
YyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKK3sK
KyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVh
dGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBvc2UKKyAgICBzaGVldC0+
cGFyc2VTdHJpbmcoc3RyKTsKKyAgICByZXR1cm4gc2hlZXQ7Cit9CisKK3N0YXRpYyBTdHlsZVNo
ZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVldChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBzaXplKQoreworICAgIHJldHVybiBwYXJzZVVBU2hlZXQoU3RyaW5nKGNoYXJhY3RlcnMsIHNp
emUpKTsKK30KKworc3RhdGljIHZvaWQgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKQoreworICAgIGlm
IChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCkgeworICAgICAgICBBU1NFUlQoZGVmYXVsdFN0eWxl
KTsKKyAgICAgICAgQVNTRVJUKGRlZmF1bHRQcmludFN0eWxlID09IGRlZmF1bHRTdHlsZSk7Cisg
ICAgICAgIGRlbGV0ZSBkZWZhdWx0U3R5bGU7CisgICAgICAgIHNpbXBsZURlZmF1bHRTdHlsZVNo
ZWV0LT5kZXJlZigpOworICAgICAgICBkZWZhdWx0U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5s
ZWFrUHRyKCk7CisgICAgICAgIGRlZmF1bHRQcmludFN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCku
bGVha1B0cigpOworICAgICAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCA9IDA7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKCFkZWZhdWx0U3R5bGUpOworICAgICAgICBkZWZhdWx0U3R5
bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisgICAgICAgIGRlZmF1bHRQcmludFN0
eWxlID0gUnVsZVNldDo6Y3JlYXRlKCkubGVha1B0cigpOworICAgICAgICBkZWZhdWx0UXVpcmtz
U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisgICAgfQorCisgICAgLy8gU3Ry
aWN0LW1vZGUgcnVsZXMuCisgICAgU3RyaW5nIGRlZmF1bHRSdWxlcyA9IFN0cmluZyhodG1sVXNl
ckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKGh0bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKKyAgICBk
ZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChkZWZhdWx0UnVsZXMpOworICAgIGRlZmF1
bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwo
KSk7CisgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGRlZmF1bHRTdHls
ZVNoZWV0LCBwcmludEV2YWwoKSk7CisKKyAgICAvLyBRdWlya3MtbW9kZSBydWxlcy4KKyAgICBT
dHJpbmcgcXVpcmtzUnVsZXMgPSBTdHJpbmcocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKHF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhl
bWUoKS0+ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7CisgICAgcXVpcmtzU3R5bGVTaGVldCA9IHBh
cnNlVUFTaGVldChxdWlya3NSdWxlcyk7CisgICAgZGVmYXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxl
c0Zyb21TaGVldChxdWlya3NTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworfQorCitzdGF0aWMg
dm9pZCBsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKCkKK3sKKyAgICBBU1NFUlQoIWRlZmF1bHRTdHls
ZSk7CisgICAgQVNTRVJUKCFzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCk7CisKKyAgICBkZWZhdWx0
U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisgICAgLy8gVGhlcmUgYXJlIG5v
IG1lZGlhLXNwZWNpZmljIHJ1bGVzIGluIHRoZSBzaW1wbGUgZGVmYXVsdCBzdHlsZS4KKyAgICBk
ZWZhdWx0UHJpbnRTdHlsZSA9IGRlZmF1bHRTdHlsZTsKKyAgICBkZWZhdWx0UXVpcmtzU3R5bGUg
PSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisKKyAgICBzaW1wbGVEZWZhdWx0U3R5bGVT
aGVldCA9IHBhcnNlVUFTaGVldChzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0LCBzdHJsZW4oc2lt
cGxlVXNlckFnZW50U3R5bGVTaGVldCkpOworICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9t
U2hlZXQoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CisKKyAgICAvLyBO
byBuZWVkIHRvIGluaXRpYWxpemUgcXVpcmtzIHNoZWV0IHlldCBhcyB0aGVyZSBhcmUgbm8gcXVp
cmsgcnVsZXMgZm9yIGVsZW1lbnRzIGFsbG93ZWQgaW4gc2ltcGxlIGRlZmF1bHQgc3R5bGUuCit9
CisKK3N0YXRpYyB2b2lkIGxvYWRWaWV3U291cmNlU3R5bGUoKQoreworICAgIEFTU0VSVCghZGVm
YXVsdFZpZXdTb3VyY2VTdHlsZSk7CisgICAgZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSA9IFJ1bGVT
ZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKyAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLT5hZGRS
dWxlc0Zyb21TaGVldChwYXJzZVVBU2hlZXQoc291cmNlVXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsKK30KKworc3Rh
dGljIHZvaWQgZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVudChFbGVtZW50KiBlbGVt
ZW50KQoreworICAgIGlmIChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCAmJiAhZWxlbWVudENhblVz
ZVNpbXBsZURlZmF1bHRTdHlsZShlbGVtZW50KSkKKyAgICAgICAgbG9hZEZ1bGxEZWZhdWx0U3R5
bGUoKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
ICYmICFzdmdTdHlsZVNoZWV0KSB7CisgICAgICAgIC8vIFNWRyBydWxlcy4KKyAgICAgICAgc3Zn
U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChzdmdVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yo
c3ZnVXNlckFnZW50U3R5bGVTaGVldCkpOworICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVz
RnJvbVNoZWV0KHN2Z1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgICAgIGRlZmF1bHRQ
cmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdmdTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7
CisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorICAgIGlmIChlbGVtZW50LT5p
c01hdGhNTEVsZW1lbnQoKSAmJiAhbWF0aE1MU3R5bGVTaGVldCkgeworICAgICAgICAvLyBNYXRo
TUwgcnVsZXMuCisgICAgICAgIG1hdGhNTFN0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQobWF0aG1s
VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1hdGhtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsK
KyAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtYXRoTUxTdHlsZVNoZWV0
LCBzY3JlZW5FdmFsKCkpOworICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9t
U2hlZXQobWF0aE1MU3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOworICAgIH0KKyNlbmRpZgorCisj
aWYgRU5BQkxFKFZJREVPKQorICAgIGlmICghbWVkaWFDb250cm9sc1N0eWxlU2hlZXQgJiYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUodmlkZW9UYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXVkaW9U
YWcpKSkgeworICAgICAgICBTdHJpbmcgbWVkaWFSdWxlcyA9IFN0cmluZyhtZWRpYUNvbnRyb2xz
VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNVc2VyQWdlbnRTdHlsZVNo
ZWV0KSkgKyBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVsZW1lbnQtPmRvY3VtZW50KCktPnBh
Z2UoKSktPmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKKyAgICAgICAgbWVkaWFDb250
cm9sc1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQobWVkaWFSdWxlcyk7CisgICAgICAgIGRlZmF1
bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWVkaWFDb250cm9sc1N0eWxlU2hlZXQsIHNjcmVl
bkV2YWwoKSk7CisgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCht
ZWRpYUNvbnRyb2xzU3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOworICAgIH0KKyNlbmRpZgorCisj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGlmICghZnVsbHNjcmVlblN0eWxlU2hlZXQg
JiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2NyZWVuKCkpIHsKKyAgICAgICAg
U3RyaW5nIGZ1bGxzY3JlZW5SdWxlcyA9IFN0cmluZyhmdWxsc2NyZWVuVXNlckFnZW50U3R5bGVT
aGVldCwgc2l6ZW9mKGZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVt
ZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKTsKKyAgICAgICAg
ZnVsbHNjcmVlblN0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQoZnVsbHNjcmVlblJ1bGVzKTsKKyAg
ICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChmdWxsc2NyZWVuU3R5bGVTaGVl
dCwgc2NyZWVuRXZhbCgpKTsKKyAgICAgICAgZGVmYXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zy
b21TaGVldChmdWxsc2NyZWVuU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKKyAgICB9CisjZW5k
aWYKKworICAgIEFTU0VSVChkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVChtYXRoTUxTdHlsZVNoZWV0IHx8IGRlZmF1bHRTdHlsZS0+ZmVh
dHVyZXMoKS5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVy
OjphZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIFN0eWxlUHJv
cGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgbGlua01hdGNo
VHlwZSwgYm9vbCBpblJlZ2lvblJ1bGUpCit7CisgICAgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXMuZ3JvdyhtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgKyAxKTsKKyAg
ICBNYXRjaGVkUHJvcGVydGllcyYgbmV3UHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLmxhc3QoKTsKKyAgICBuZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXMgPSBwcm9wZXJ0
aWVzOworICAgIG5ld1Byb3BlcnRpZXMubGlua01hdGNoVHlwZSA9IGxpbmtNYXRjaFR5cGU7Cisg
ICAgbmV3UHJvcGVydGllcy5pc0luUmVnaW9uUnVsZSA9IGluUmVnaW9uUnVsZTsKKyAgICBtYXRj
aFJlc3VsdC5tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOworfQorCitpbmxpbmUgdm9pZCBTdHls
ZVJlc29sdmVyOjphZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0LCBib29sIGlzQ2FjaGVhYmxlKQoreworICAg
IGlmICghcHJvcGVydHlTZXQpCisgICAgICAgIHJldHVybjsKKyAgICByZXN1bHQucmFuZ2VzLmxh
c3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBpZiAo
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPT0gLTEpCisgICAgICAgIHJlc3VsdC5yYW5n
ZXMuZmlyc3RBdXRob3JSdWxlID0gcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZTsKKyAgICBh
ZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHByb3BlcnR5U2V0KTsKKyAgICBpZiAoIWlzQ2Fj
aGVhYmxlKQorICAgICAgICByZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKK30KKwordm9pZCBT
dHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBm
aXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgQVNTRVJUKHJ1bGVzKTsKKyAgICBBU1NFUlQobV9lbGVtZW50KTsKKwor
ICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBh
bmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCisgICAgLy8gdGhlbiBzb3J0IHRo
ZSBidWZmZXIuCisgICAgaWYgKG1fZWxlbWVudC0+aGFzSUQoKSkKKyAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5pZFJ1bGVzKG1fZWxlbWVudC0+aWRGb3JTdHlsZVJl
c29sdXRpb24oKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9u
cyk7CisgICAgaWYgKG1fZWxlbWVudC0+aGFzQ2xhc3MoKSkgeworICAgICAgICBBU1NFUlQobV9z
dHlsZWRFbGVtZW50KTsKKyAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1l
cyA9IG1fc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpOworICAgICAgICBzaXplX3Qgc2l6ZSA9
IGNsYXNzTmFtZXMuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+Y2xh
c3NSdWxlcyhjbGFzc05hbWVzW2ldLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUlu
ZGV4LCBvcHRpb25zKTsKKyAgICB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9
IG1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKKyAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHko
KSkgeworICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKKyAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRv
SWQuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOworICAg
IH0KKyAgICBpZiAobV9lbGVtZW50LT5pc0xpbmsoKSkKKyAgICAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KHJ1bGVzLT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRl
eCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7CisgICAgaWYgKG1fY2hlY2tlci5tYXRjaGVzRm9j
dXNQc2V1ZG9DbGFzcyhtX2VsZW1lbnQpKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3QocnVsZXMtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFz
dFJ1bGVJbmRleCwgb3B0aW9ucyk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1
bGVzLT50YWdSdWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIGZpcnN0UnVsZUlu
ZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3QocnVsZXMtPnVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUlu
ZGV4LCBvcHRpb25zKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBs
YXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKCFt
X3JlZ2lvbkZvclN0eWxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHNpemUg
PSBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBDU1NTZWxlY3RvciogcmVn
aW9uU2VsZWN0b3IgPSBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5z
ZWxlY3RvcjsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3Is
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3JlZ2lvbkZvclN0eWxpbmctPm5vZGUoKSkpKSB7Cisg
ICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IHJ1bGVzLT5tX3JlZ2lvblNlbGVjdG9y
c0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQocmVn
aW9uUnVsZXMpOworICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMocmVnaW9uUnVsZXMs
IGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMo
TWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisKKyAgICBpZiAo
bV9jaGVja2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKSB7CisgICAgICAgIGlmICghbV9ydWxl
TGlzdCkKKyAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRl
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIG1fcnVsZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKG1fbWF0Y2hl
ZFJ1bGVzW2ldLT5ydWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMg
b3ZlciB0byBvdXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMuCisgICAgLy8gRklYTUU6IFRoaXMgc3Vj
a3MsIHRoZSBpbnNwZWN0b3Igc2hvdWxkIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgdmlzaXRlZCBz
dHlsZSBpdHNlbGYuCisgICAgYm9vbCBzd2FwVmlzaXRlZFVudmlzaXRlZCA9IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShtX2VsZW1lbnQsIENTU1NlbGVjdG9yOjpQ
c2V1ZG9WaXNpdGVkKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVs
ZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1fc3R5bGUgJiYgbV9tYXRjaGVkUnVsZXNb
aV0tPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgbV9z
dHlsZS0+c2V0QWZmZWN0ZWRCeVVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3JzKCk7CisgICAgICAg
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlw
ZSgpOworICAgICAgICBpZiAoc3dhcFZpc2l0ZWRVbnZpc2l0ZWQgJiYgbGlua01hdGNoVHlwZSAm
JiBsaW5rTWF0Y2hUeXBlICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwpCisgICAgICAgICAg
ICBsaW5rTWF0Y2hUeXBlID0gKGxpbmtNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRj
aFZpc2l0ZWQpID8gU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmsgOiBTZWxlY3RvckNoZWNrZXI6
Ok1hdGNoVmlzaXRlZDsKKyAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBtX21h
dGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIG1fbWF0Y2hlZFJ1bGVzW2ldLT5y
dWxlKCksIGxpbmtNYXRjaFR5cGUsIG1fbWF0Y2hlZFJ1bGVzW2ldLT5pc0luUmVnaW9uUnVsZSgp
KTsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVO
QUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYgKG1fc2NvcGVkQXV0aG9yU3R5bGVzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWF0Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVt
cHR5UnVsZXMpOworCisgICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0cmF2ZXJz
aW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3QgaW5jb25z
aXN0ZW50KS4KKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX2VsZW1lbnQtPnBh
cmVudE9ySG9zdE5vZGUoKTsKKyAgICBpZiAoIXNjb3BlU3RhY2tJc0NvbnNpc3RlbnQocGFyZW50
KSkKKyAgICAgICAgc2V0dXBTY29wZVN0YWNrKHBhcmVudCk7CisgICAgZm9yIChzaXplX3QgaSA9
IG1fc2NvcGVTdGFjay5zaXplKCk7IGk7IC0taSkgeworICAgICAgICBjb25zdCBTY29wZVN0YWNr
RnJhbWUmIGZyYW1lID0gbV9zY29wZVN0YWNrW2kgLSAxXTsKKyAgICAgICAgb3B0aW9ucy5zY29w
ZSA9IGZyYW1lLm1fc2NvcGU7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKGZyYW1lLm1f
cnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJl
Z2lvbihmcmFtZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1
bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICB9CisgICAgLy8gQWxzbyBp
bmNsdWRlIHRoZSBjdXJyZW50IGVsZW1lbnQuCisgICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVT
ZXRGb3JTY29wZShtX2VsZW1lbnQpOworICAgIGlmIChydWxlU2V0KSB7CisgICAgICAgIG9wdGlv
bnMuc2NvcGUgPSBtX2VsZW1lbnQ7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVT
ZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRo
b3JSdWxlLCBvcHRpb25zKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24o
cnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJl
c3VsdCk7CisgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyNlbmRpZgorfQor
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigp
OworICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXMuc2l6ZSgpIC0gMTsKKworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgorICAgIE1hdGNoT3B0aW9ucyBv
cHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtX2F1
dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JSZWdpb24obV9hdXRob3JTdHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1
bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworCisgICAgbWF0Y2hT
Y29wZWRBdXRob3JSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKworICAgIHNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMpCit7CisgICAgaWYgKCFtX3VzZXJTdHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVs
ZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOworICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKG1fdXNlclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUs
IHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV91c2VyU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5n
ZXMuZmlyc3RVc2VyUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKKworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworfQor
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBS
dWxlU2V0KiBydWxlcykKK3sKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIAorICAg
IHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVzLCByZXN1bHQucmFuZ2VzLmZp
cnN0VUFSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKKworICAgIHNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworfQorCitjbGFzcyBNYXRjaGluZ1VBUnVs
ZXNTY29wZSB7CitwdWJsaWM6CisgICAgTWF0Y2hpbmdVQVJ1bGVzU2NvcGUoKTsKKyAgICB+TWF0
Y2hpbmdVQVJ1bGVzU2NvcGUoKTsKKworICAgIHN0YXRpYyBib29sIGlzTWF0Y2hpbmdVQVJ1bGVz
KCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgbV9tYXRjaGluZ1VBUnVsZXM7Cit9Owor
CitNYXRjaGluZ1VBUnVsZXNTY29wZTo6TWF0Y2hpbmdVQVJ1bGVzU2NvcGUoKQoreworICAgIEFT
U0VSVCghbV9tYXRjaGluZ1VBUnVsZXMpOworICAgIG1fbWF0Y2hpbmdVQVJ1bGVzID0gdHJ1ZTsK
K30KKworTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6On5NYXRjaGluZ1VBUnVsZXNTY29wZSgpCit7Cisg
ICAgbV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgTWF0Y2hpbmdV
QVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKK3sKKyAgICByZXR1cm4gbV9tYXRjaGlu
Z1VBUnVsZXM7Cit9CisKK2Jvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Om1fbWF0Y2hpbmdVQVJ1
bGVzID0gZmFsc2U7CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4
LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAg
ICBpZiAoIXJ1bGVzKQorICAgICAgICByZXR1cm47CisgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBt
YXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlk
ZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4KKyAgICAvLyBBbmNlc3RvciBpZGVudGlm
aWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3Qg
dXNlIHRoZSBmYXN0IHBhdGguCisgICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9jaGVja2Vy
LnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KG1fcGFyZW50Tm9kZSk7CisKKyAgICB1bnNpZ25lZCBz
aXplID0gcnVsZXMtPnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7CisgICAgICAgIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSA9IHJ1bGVzLT5hdChpKTsK
KyAgICAgICAgaWYgKGNhblVzZUZhc3RSZWplY3QgJiYgbV9jaGVja2VyLmZhc3RSZWplY3RTZWxl
Y3RvcjxSdWxlRGF0YTo6bWF4aW11bUlkZW50aWZpZXJDb3VudD4ocnVsZURhdGEuZGVzY2VuZGFu
dFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcygpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIFN0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUoKTsKKyAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbE1hdGNoUnVsZShkb2N1bWVudCgpLCBydWxlKTsKKyNpZiBFTkFCTEUoU1RZTEVfU0NP
UEVEKQorICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihydWxlRGF0YSwgb3B0aW9ucy5zY29wZSkp
IHsKKyNlbHNlCisgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhKSkgeworI2VuZGlm
CisgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBydWxlIGlzIGFwcGxpY2FibGUgaW4g
dGhlIGN1cnJlbnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6CisgICAgICAgICAgICAv
LyBhKSBpdCdzIGEgVUEgcnVsZQorICAgICAgICAgICAgLy8gYikgdGhlIHRyZWUgc2NvcGUgYWxs
b3dzIGF1dGhvciBydWxlcworICAgICAgICAgICAgLy8gYykgdGhlIHJ1bGVzIGNvbWVzIGZyb20g
YSBzY29wZWQgc3R5bGUgc2hlZXQgd2l0aGluIHRoZSBzYW1lIHRyZWUgc2NvcGUKKyAgICAgICAg
ICAgIC8vIGQpIHRoZSBydWxlIGNvbnRhaW5zIHNoYWRvdy1JRCBwc2V1ZG8gZWxlbWVudHMKKyAg
ICAgICAgICAgIFRyZWVTY29wZSogdHJlZVNjb3BlID0gbV9lbGVtZW50LT50cmVlU2NvcGUoKTsK
KyAgICAgICAgICAgIGlmICghTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVz
KCkKKyAgICAgICAgICAgICAgICAmJiAhdHJlZVNjb3BlLT5hcHBseUF1dGhvclNoZWV0cygpCisj
aWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAgICAgICAgICAgICAmJiAoIW9wdGlvbnMuc2Nv
cGUgfHwgb3B0aW9ucy5zY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKQorI2VuZGlmCisg
ICAgICAgICAgICAgICAgJiYgIW1fY2hlY2tlci5oYXNVbmtub3duUHNldWRvRWxlbWVudHMoKSkg
eworCisgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1
bGUoY29va2llLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBs
eSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgorICAgICAgICAgICAgU3R5
bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvcGVydGllcyB8fCAocHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFvcHRpb25z
LmluY2x1ZGVFbXB0eVJ1bGVzKSkgeworICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRklYTUU6IEV4cG9zaW5nIHRo
ZSBub24tc3RhbmRhcmQgZ2V0TWF0Y2hlZENTU1J1bGVzIEFQSSB0byB3ZWIgaXMgdGhlIG9ubHkg
cmVhc29uIHRoaXMgaXMgbmVlZGVkLgorICAgICAgICAgICAgaWYgKG1fc2FtZU9yaWdpbk9ubHkg
JiYgIXJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkgeworICAgICAgICAgICAg
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2Up
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Ly8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQgYSBwc2V1ZG8gYml0IGlmCisg
ICAgICAgICAgICAvLyB3ZSByZWFsbHkganVzdCBtYXRjaGVkIGEgcHNldWRvLWVsZW1lbnQuCisg
ICAgICAgICAgICBpZiAobV9keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIG1fY2hlY2tlci5w
c2V1ZG9TdHlsZSgpID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY2hlY2tl
ci5pc0NvbGxlY3RpbmdSdWxlc09ubHkoKSkgeworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChtX2R5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNldWRvKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJz
dC9sYXN0IHJ1bGUgaW5kaWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KKyAgICAgICAg
ICAgICAgICArK2xhc3RSdWxlSW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0UnVsZUlu
ZGV4ID09IC0xKQorICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCA9IGxhc3RSdWxl
SW5kZXg7CisKKyAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9m
IG1hdGNoZWQgcnVsZXMuCisgICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFJ1bGUoJnJ1bGVEYXRh
KTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVs
ZShjb29raWUsIHRydWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hS
dWxlKGNvb2tpZSwgZmFsc2UpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBib29sIGNvbXBh
cmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKK3sKKyAgICB1
bnNpZ25lZCBzcGVjaWZpY2l0eTEgPSByMS0+c3BlY2lmaWNpdHkoKTsKKyAgICB1bnNpZ25lZCBz
cGVjaWZpY2l0eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsKKyAgICByZXR1cm4gKHNwZWNpZmljaXR5
MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9zaXRpb24oKSA6IHNw
ZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0
TWF0Y2hlZFJ1bGVzKCkKK3sKKyAgICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwg
bV9tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7Cit9CisKK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQoreworICAgIG1hdGNoVUFS
dWxlcyhyZXN1bHQpOworCisgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCisg
ICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQorICAgICAgICBtYXRjaFVzZXJSdWxl
cyhyZXN1bHQsIGZhbHNlKTsKKyAgICAgICAgCisgICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxl
cywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2VudGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQg
ZnJvbSBIVE1MLgorICAgIGlmIChtX3N0eWxlZEVsZW1lbnQpIHsKKyAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5bGUo
KSk7CisKKyAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9uYWwgbWFwcGVkIGRlY2xhcmF0
aW9ucy4KKyAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxscyBzaGFyZSBhbiBhZGRpdGlv
bmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCisgICAgICAgIC8vIGFmdGVyIGFs
bCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUgZGVwZW5kcyBvbiB0aGUgdmFs
dWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0ZXMuCisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3Bl
cnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgp
KTsKKworICAgICAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAg
ICAgICAgICAgIGJvb2wgaXNBdXRvOworICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGly
ZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0eWxlZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlm
aGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAgICAgICAgICAgaWYgKGlzQXV0bykKKyAg
ICAgICAgICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24g
PT0gTFRSID8gbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlv
bigpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4g
YXV0aG9yIHNoZWV0cyBuZXh0LgorICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykK
KyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhyZXN1bHQsIGZhbHNlKTsKKworICAgIC8vIE5vdyBj
aGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KKyAgICBpZiAobV9tYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aW5saW5l
U3R5bGUoKSkgeworICAgICAgICAvLyBJbmxpbmUgc3R5bGUgaXMgaW1tdXRhYmxlIGFzIGxvbmcg
YXMgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4KKyAgICAgICAgLy8gRklYTUU6IE1lZGlhIGNv
bnRyb2wgc2hhZG93IHRyZWVzIHNlZW0gdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGNhY2hpbmcuCisg
ICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFtX3N0eWxlZEVsZW1lbnQtPmlu
bGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFtX3N0eWxlZEVsZW1lbnQtPmlzSW5TaGFkb3dU
cmVlKCk7CisgICAgICAgIC8vIEZJWE1FOiBDb25zdGlmeS4KKyAgICAgICAgYWRkRWxlbWVudFN0
eWxlUHJvcGVydGllcyhyZXN1bHQsIGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0eVNldCo+KG1fc3R5
bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOworICAg
IH0KKworI2lmIEVOQUJMRShTVkcpCisgICAgLy8gTm93IGNoZWNrIFNNSUwgYW5pbWF0aW9uIG92
ZXJyaWRlIHN0eWxlLgorICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0
eWxlZEVsZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAg
YWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQq
PihtX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2Ug
LyogaXNDYWNoZWFibGUgKi8pOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCit7CisgICAgaWYgKG1fZWxlbWVudCAhPSBlKSB7
CisgICAgICAgIG1fZWxlbWVudCA9IGU7CisgICAgICAgIG1fc3R5bGVkRWxlbWVudCA9IG1fZWxl
bWVudCAmJiBtX2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVk
RWxlbWVudCo+KG1fZWxlbWVudCkgOiAwOworICAgICAgICBtX2VsZW1lbnRMaW5rU3RhdGUgPSBt
X2NoZWNrZXIuZGV0ZXJtaW5lTGlua1N0YXRlKG1fZWxlbWVudCk7CisgICAgICAgIGlmIChlICYm
IGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGUt
PmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKKyAg
ICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1l
bnQoZmFsc2UpOworICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBTdHlsZVJlc29s
dmVyOjppbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSwgUHNldWRvSWQgcHNldWRvSUQpCit7CisgICAgbV9jaGVja2VyLnNldFBzZXVkb1N0eWxl
KHBzZXVkb0lEKTsKKworICAgIG1fcGFyZW50Tm9kZSA9IGUgPyBlLT5wYXJlbnROb2RlRm9yUmVu
ZGVyaW5nQW5kU3R5bGUoKSA6IDA7CisKKyAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgIG1f
cGFyZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsKKyAgICBlbHNlCisgICAgICAgIG1fcGFyZW50U3R5
bGUgPSBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOworCisg
ICAgTm9kZSogZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQo
KSA6IDA7CisgICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gbV9jaGVja2VyLmRvY3VtZW50KCkt
PnJlbmRlclN0eWxlKCk7CisgICAgbV9yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBl
ICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7CisK
KyAgICBtX3N0eWxlID0gMDsKKworICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigp
OworCisgICAgbV9ydWxlTGlzdCA9IDA7CisKKyAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOworfQor
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7CitzdGF0
aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgPSAxMDsKKworTm9k
ZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2ln
bmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdAoreworICAgIGlmICh2aXNpdGVkTm9kZUNvdW50
ID49IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAqIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc1N0eWxlZEVs
ZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAg
ICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4g
MDsKKyNlbmRpZgorICAgIFN0eWxlZEVsZW1lbnQqIHAgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVt
ZW50Kj4ocGFyZW50KTsKKyAgICBpZiAocC0+aW5saW5lU3R5bGUoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAocC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGlj
X2Nhc3Q8U1ZHRWxlbWVudCo+KHApLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICBpZiAocC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVz
Lmlkc0luUnVsZXMuY29udGFpbnMocC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHAtPnJl
bmRlclN0eWxlKCk7CisgICAgdW5zaWduZWQgc3ViY291bnQgPSAwOworICAgIE5vZGUqIHRoaXND
b3VzaW4gPSBwOworICAgIE5vZGUqIGN1cnJlbnROb2RlID0gcC0+cHJldmlvdXNTaWJsaW5nKCk7
CisKKyAgICAvLyBSZXNlcnZlIHRoZSB0cmllcyBmb3IgdGhpcyBsZXZlbC4gVGhpcyBlZmZlY3Rp
dmVseSBtYWtlcyBzdXJlIHRoYXQgdGhlIGFsZ29yaXRobQorICAgIC8vIHdpbGwgbmV2ZXIgZ28g
ZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVjdXJz
aW9uLgorICAgIHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOworICAg
IHdoaWxlICh0aGlzQ291c2luKSB7CisgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgeworICAg
ICAgICAgICAgKytzdWJjb3VudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cmVuZGVy
U3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAmJiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBBZGp1c3QgZm9yIHVudXNlZCByZXNlcnZlZCB0cmllcy4KKyAgICAg
ICAgICAgICAgICB2aXNpdGVkTm9kZUNvdW50IC09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAtIHN1
YmNvdW50OworICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3ViY291bnQgPj0gY1N0eWxlU2VhcmNo
VGhyZXNob2xkKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY3VycmVu
dE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIH0KKyAgICAg
ICAgY3VycmVudE5vZGUgPSBsb2NhdGVDb3VzaW5MaXN0KHRoaXNDb3VzaW4tPnBhcmVudEVsZW1l
bnQoKSwgdmlzaXRlZE5vZGVDb3VudCk7CisgICAgICAgIHRoaXNDb3VzaW4gPSBjdXJyZW50Tm9k
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjptYXRj
aGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQoreworICAgIGlmICghcnVsZVNldCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICBpbnQg
Zmlyc3RSdWxlSW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOworICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKHJ1bGVTZXQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBmYWxzZSk7
CisKKyAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVt
ZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBv
dGhlcklucHV0RWxlbWVudCA9IG1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKworICAgIGlm
ICghdGhpc0lucHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1dEVsZW1lbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKSAhPSBv
dGhlcklucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpICE9IG90aGVy
SW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkgIT0gb3RoZXJJ
bnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPnJlcXVpcmVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQt
PnJlcXVpcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChlbGVtZW50LT5p
c0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IG1fZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2wo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1
dHRvbkZvckZvcm0oKSAhPSBtX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29u
dGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgeworICAgICAgICBib29sIHdpbGxWYWxpZGF0ZSA9
IGVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpOworCisgICAgICAgIGlmICh3aWxsVmFsaWRhdGUgIT0g
bV9lbGVtZW50LT53aWxsVmFsaWRhdGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xF
bGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFuZ2Uo
KSAhPSBtX2VsZW1lbnQtPmlzSW5SYW5nZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGlmIChlbGVtZW50LT5pc091dE9mUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlzT3V0
T2ZSYW5nZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIG1ha2VzIHNvbWUgYXNzdW1wdGlvbnMgdGhh
dCBvbmx5IG1ha2Ugc2Vuc2UgZm9yIGF0dHJpYnV0ZSBzdHlsZXMgKHdlIG9ubHkgY29tcGFyZSBD
U1NQcm9wZXJ0eTo6aWQoKSBhbmQgQ1NTUHJvcGVydHk6OnZhbHVlKCkuKQorc3RhdGljIGlubGlu
ZSBib29sIGF0dHJpYnV0ZVN0eWxlc0VxdWFsKFN0eWxlUHJvcGVydHlTZXQqIGEsIFN0eWxlUHJv
cGVydHlTZXQqIGIpCit7CisgICAgaWYgKGEgPT0gYikKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgaWYgKGEtPnByb3BlcnR5Q291bnQoKSAhPSBiLT5wcm9wZXJ0eUNvdW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gYS0+cHJvcGVydHlD
b3VudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kp
IHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIGFQcm9wZXJ0eSA9IGEtPnByb3BlcnR5QXQo
aSk7CisgICAgICAgIHVuc2lnbmVkIGo7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBwcm9wZXJ0
eUNvdW50OyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBiUHJvcGVydHkg
PSBiLT5wcm9wZXJ0eUF0KGopOworICAgICAgICAgICAgaWYgKGFQcm9wZXJ0eS5pZCgpICE9IGJQ
cm9wZXJ0eS5pZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgLy8g
V2UgY291bGQgZ2V0IGEgZmV3IG1vcmUgaGl0cyBieSBjb21wYXJpbmcgY3NzVGV4dCgpIGhlcmUs
IGJ1dCB0aGF0IGdldHMgZXhwZW5zaXZlIHF1aWNrbHkuCisgICAgICAgICAgICBpZiAoYVByb3Bl
cnR5LnZhbHVlKCkgIT0gYlByb3BlcnR5LnZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGogPT0g
cHJvcGVydHlDb3VudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1l
bnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiB0
b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5oYXNEaXJlY3Rpb25BdXRvKCk7Cit9CisKK2Jvb2wgU3R5
bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0Cit7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5
bGUoKTsKKworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
c3R5bGUtPnVuaXF1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVsZW1lbnQt
PnRhZ1FOYW1lKCkgIT0gbV9lbGVtZW50LT50YWdRTmFtZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgIT0gbV9lbGVtZW50LT5oYXNDbGFzcygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGlmIChlbGVtZW50
LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCktPmFu
aW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKKyAgICBpZiAoISFlbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpICE9ICEhbV9zdHlsZWRFbGVt
ZW50LT5hdHRyaWJ1dGVTdHlsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU3R5bGVQ
cm9wZXJ0eVNldCogYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQSA9IGVsZW1lbnQtPmFkZGl0aW9u
YWxBdHRyaWJ1dGVTdHlsZSgpOworICAgIFN0eWxlUHJvcGVydHlTZXQqIGFkZGl0aW9uYWxBdHRy
aWJ1dGVTdHlsZUIgPSBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgp
OworICAgIGlmICghYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQSAhPSAhYWRkaXRpb25hbEF0dHJp
YnV0ZVN0eWxlQikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5pc0xp
bmsoKSAhPSBtX2VsZW1lbnQtPmlzTGluaygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKHN0eWxlLT5hZmZlY3RlZEJ5VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcnMoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gbV9lbGVtZW50
LT5ob3ZlcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+YWN0
aXZlKCkgIT0gbV9lbGVtZW50LT5hY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gbV9lbGVtZW50LT5mb2N1c2VkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSAhPSBtX2Vs
ZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
ZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5j
c3NUYXJnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5nZXRB
dHRyaWJ1dGUodHlwZUF0dHIpICE9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRl
KFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5h
bWVzOjpsYW5nQXR0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+
ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRl
KGxhbmdBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5mYXN0
R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRl
KHJlYWRvbmx5QXR0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+
ZmFzdEdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIpICE9IG1fZWxlbWVudC0+ZmFzdEdldEF0
dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoZWxl
bWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIGlmIChlbGVtZW50LT5oYXNTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworI2lm
IEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jl
c3NUYWcpKSB7CisgICAgICAgIGlmICghbV9lbGVtZW50LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFn
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVt
ZW50KiB0aGlzUHJvZ3Jlc3NFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVu
dCo+KGVsZW1lbnQpOworICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBvdGhlclByb2dyZXNz
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihtX2VsZW1lbnQpOwor
ICAgICAgICBpZiAodGhpc1Byb2dyZXNzRWxlbWVudC0+aXNEZXRlcm1pbmF0ZSgpICE9IG90aGVy
UHJvZ3Jlc3NFbGVtZW50LT5pc0RldGVybWluYXRlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25U
YWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGlzQ29udHJvbCA9IGVsZW1l
bnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisKKyAgICBpZiAoaXNDb250cm9sICE9IG1fZWxl
bWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGVsZW1lbnQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkgfHwg
c3R5bGUtPmFuaW1hdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIFR1cm4gb2ZmIHN0eWxlIHNoYXJpbmcgZm9y
IGVsZW1lbnRzIHRoYXQgY2FuIGdhaW4gbGF5ZXJzIGZvciByZWFzb25zIG91dHNpZGUgb2YgdGhl
IHN0eWxlIHN5c3RlbS4KKyAgICAvLyBTZWUgY29tbWVudHMgaW4gUmVuZGVyT2JqZWN0OjpzZXRT
dHlsZSgpLgorICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykg
fHwgZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUo
YXBwbGV0VGFnKQorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAgICAgICAv
LyBXaXRoIHByb3h5aW5nLCB0aGUgbWVkaWEgZWxlbWVudHMgYXJlIGJhY2tlZCBieSBhIFJlbmRl
ckVtYmVkZGVkT2JqZWN0LgorICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHZpZGVvVGFn
KSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGF1ZGlvVGFnKQorI2VuZGlmCisgICAgICAgICkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlv
bkF1dG8oZWxlbWVudCkgfHwgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8obV9lbGVtZW50KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgbV9l
bGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
Y2xhc3NBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQtPmF0
dHJpYnV0ZVN0eWxlKCkgJiYgIWF0dHJpYnV0ZVN0eWxlc0VxdWFsKGVsZW1lbnQtPmF0dHJpYnV0
ZVN0eWxlKCksIG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5bGUoKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVBICYmICFhdHRy
aWJ1dGVTdHlsZXNFcXVhbChhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVBLCBhZGRpdGlvbmFsQXR0
cmlidXRlU3R5bGVCKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQt
PmlzTGluaygpICYmIG1fZWxlbWVudExpbmtTdGF0ZSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIFN0
eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5v
ZGUqIG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKK3sKKyAgICBmb3IgKDsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CisgICAgICAgIGlmICghbm9kZS0+aXNTdHls
ZWRFbGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGNhblNoYXJl
U3R5bGVXaXRoRWxlbWVudChzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSkpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVz
aG9sZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcGFyZW50
U3R5bGVQcmV2ZW50c1NoYXJpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorewor
ICAgIHJldHVybiBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5UG9zaXRpb25hbFJ1bGVz
KCkKKyAgICAgICAgfHwgcGFyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRS
dWxlcygpCisgICAgICAgIHx8IHBhcmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hp
bGRSdWxlcygpIAorICAgICAgICB8fCBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5RGly
ZWN0QWRqYWNlbnRSdWxlcygpOworfQorCitSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9j
YXRlU2hhcmVkU3R5bGUoKQoreworICAgIGlmICghbV9zdHlsZWRFbGVtZW50IHx8ICFtX3BhcmVu
dFN0eWxlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgaW5s
aW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KKyAgICBpZiAobV9zdHlsZWRFbGVtZW50
LT5pbmxpbmVTdHlsZSgpKQorICAgICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoU1ZHKQorICAg
IGlmIChtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICAvLyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5n
IGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCisgICAgaWYgKG1fc3R5bGVkRWxl
bWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMobV9zdHlsZWRF
bGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJldHVybiAw
OworICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhtX3BhcmVudFN0eWxlKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICBpZiAobV9zdHls
ZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gMDsK
KyNlbmRpZgorCisgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3MgYW5kIHRoZWlyIGNvdXNp
bnMuCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHZpc2l0ZWROb2RlQ291
bnQgPSAwOworICAgIFN0eWxlZEVsZW1lbnQqIHNoYXJlRWxlbWVudCA9IDA7CisgICAgTm9kZSog
Y291c2luTGlzdCA9IG1fc3R5bGVkRWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgd2hp
bGUgKGNvdXNpbkxpc3QpIHsKKyAgICAgICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JT
dHlsZVNoYXJpbmcoY291c2luTGlzdCwgY291bnQpOworICAgICAgICBpZiAoc2hhcmVFbGVtZW50
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNvdXNpbkxpc3QgPSBsb2NhdGVDb3VzaW5M
aXN0KGNvdXNpbkxpc3QtPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5vZGVDb3VudCk7CisgICAg
fQorCisgICAgLy8gSWYgd2UgaGF2ZSBleGhhdXN0ZWQgYWxsIG91ciBidWRnZXQgb3Igb3VyIGNv
dXNpbnMuCisgICAgaWYgKCFzaGFyZUVsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Ly8gQ2FuJ3Qgc2hhcmUgaWYgc2libGluZyBydWxlcyBhcHBseS4gVGhpcyBpcyBjaGVja2VkIGF0
IHRoZSBlbmQgYXMgaXQgc2hvdWxkIHJhcmVseSBmYWlsLgorICAgIGlmIChtYXRjaGVzUnVsZVNl
dChtX3NpYmxpbmdSdWxlU2V0LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gQ2Fu
J3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgorICAgIGlmIChtYXRjaGVzUnVsZVNl
dChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFj
aCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUu
CisgICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwor
fQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
KQoreworICAgIE1hdGNoaW5nVUFSdWxlc1Njb3BlIHNjb3BlOworCisgICAgLy8gRmlyc3Qgd2Ug
bWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KKyAgICBpZiAoc2ltcGxlRGVm
YXVsdFN0eWxlU2hlZXQpCisgICAgICAgIHJlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOworICAg
IFJ1bGVTZXQqIHVzZXJBZ2VudFN0eWxlU2hlZXQgPSBtX21lZGl1bS0+bWVkaWFUeXBlTWF0Y2hT
cGVjaWZpYygicHJpbnQiKQorICAgICAgICA/IGRlZmF1bHRQcmludFN0eWxlIDogZGVmYXVsdFN0
eWxlOworICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIHVzZXJBZ2VudFN0eWxlU2hlZXQpOworCisg
ICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2Vy
IGFnZW50IHNoZWV0LgorICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSkKKyAgICAg
ICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgZGVmYXVsdFF1aXJrc1N0eWxlKTsKKworICAgIC8vIElm
IGRvY3VtZW50IHVzZXMgdmlldyBzb3VyY2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9y
IGluIHhtbCB2aWV3ZXIgbW9kZSksIHRoZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBz
b3VyY2Ugc3R5bGUgc2hlZXQuCisgICAgaWYgKG1fY2hlY2tlci5kb2N1bWVudCgpLT5pc1ZpZXdT
b3VyY2UoKSkgeworICAgICAgICBpZiAoIWRlZmF1bHRWaWV3U291cmNlU3R5bGUpCisgICAgICAg
ICAgICBsb2FkVmlld1NvdXJjZVN0eWxlKCk7CisgICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQs
IGRlZmF1bHRWaWV3U291cmNlU3R5bGUpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQs
IENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQoreworICAgIEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50LT5mcmFtZSgpOworCisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIGRvY3VtZW50U3R5bGUtPnNldERpc3BsYXko
QkxPQ0spOworICAgIGRvY3VtZW50U3R5bGUtPnNldFJUTE9yZGVyaW5nKGRvY3VtZW50LT52aXN1
YWxseU9yZGVyZWQoKSA/IFZpc3VhbE9yZGVyIDogTG9naWNhbE9yZGVyKTsKKyAgICBkb2N1bWVu
dFN0eWxlLT5zZXRab29tKGZyYW1lICYmICFkb2N1bWVudC0+cHJpbnRpbmcoKSA/IGZyYW1lLT5w
YWdlWm9vbUZhY3RvcigpIDogMSk7CisgICAgZG9jdW1lbnRTdHlsZS0+c2V0UGFnZVNjYWxlVHJh
bnNmb3JtKGZyYW1lID8gZnJhbWUtPmZyYW1lU2NhbGVGYWN0b3IoKSA6IDEpOworICAgIGRvY3Vt
ZW50U3R5bGUtPnNldFVzZXJNb2RpZnkoZG9jdW1lbnQtPmluRGVzaWduTW9kZSgpID8gUkVBRF9X
UklURSA6IFJFQURfT05MWSk7CisgICAgZG9jdW1lbnRTdHlsZS0+c2V0TG9jYWxlKGRvY3VtZW50
LT5jb250ZW50TGFuZ3VhZ2UoKSk7CisKKyAgICBFbGVtZW50KiBkb2NFbGVtZW50ID0gZG9jdW1l
bnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIFJlbmRlck9iamVjdCogZG9jRWxlbWVudFJlbmRl
cmVyID0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlcmVyKCkgOiAwOworICAgIGlmIChk
b2NFbGVtZW50UmVuZGVyZXIpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBkaXJlY3Rpb24gYW5kIHdy
aXRpbmctbW9kZSBvZiB0aGUgYm9keSB0byBzZXQgdGhlCisgICAgICAgIC8vIHZpZXdwb3J0J3Mg
ZGlyZWN0aW9uIGFuZCB3cml0aW5nLW1vZGUgdW5sZXNzIHRoZSBwcm9wZXJ0eSBpcyBzZXQgb24g
dGhlIGRvY3VtZW50IGVsZW1lbnQuCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGJvZHksIHRo
ZW4gdXNlIHRoZSBkb2N1bWVudCBlbGVtZW50LgorICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlS
ZW5kZXJlciA9IGRvY3VtZW50LT5ib2R5KCkgPyBkb2N1bWVudC0+Ym9keSgpLT5yZW5kZXJlcigp
IDogMDsKKyAgICAgICAgaWYgKGJvZHlSZW5kZXJlciAmJiAhZG9jdW1lbnQtPndyaXRpbmdNb2Rl
U2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFdy
aXRpbmdNb2RlKGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFdyaXRpbmdNb2RlKGRvY0VsZW1l
bnRSZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CisgICAgICAgIGlmIChib2R5UmVu
ZGVyZXIgJiYgIWRvY3VtZW50LT5kaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudCgpKQorICAg
ICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlyZWN0aW9uKGJvZHlSZW5kZXJlci0+c3R5bGUo
KS0+ZGlyZWN0aW9uKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkb2N1bWVudFN0eWxl
LT5zZXREaXJlY3Rpb24oZG9jRWxlbWVudFJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7
CisgICAgfQorCisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJh
bWUtPnBhZ2UoKSkgeworICAgICAgICAgICAgY29uc3QgUGFnZTo6UGFnaW5hdGlvbiYgcGFnaW5h
dGlvbiA9IHBhZ2UtPnBhZ2luYXRpb24oKTsKKyAgICAgICAgICAgIGlmIChwYWdpbmF0aW9uLm1v
ZGUgIT0gUGFnZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQpIHsKKyAgICAgICAgICAgICAgICBk
b2N1bWVudFN0eWxlLT5zZXRDb2x1bW5BeGlzKHBhZ2luYXRpb24ubW9kZSA9PSBQYWdlOjpQYWdp
bmF0aW9uOjpIb3Jpem9udGFsbHlQYWdpbmF0ZWQgPyBIb3Jpem9udGFsQ29sdW1uQXhpcyA6IFZl
cnRpY2FsQ29sdW1uQXhpcyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Q29s
dW1uR2FwKHBhZ2luYXRpb24uZ2FwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgZm9udERlc2NyaXB0
aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50LT5wcmludGluZygpKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oZG9j
dW1lbnRTdHlsZS0+bG9jYWxlKCkpKTsKKyAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9j
dW1lbnQtPnNldHRpbmdzKCkpIHsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmlu
Z01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHN0YW5kYXJkRm9udCA9IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoZm9u
dERlc2NyaXB0aW9uLnNjcmlwdCgpKTsKKyAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnQuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250
RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5KTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5maXJzdEZhbWlseSgpLnNldEZhbWlseShzdGFuZGFyZEZvbnQpOworICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOworICAgICAgICB9Cisg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENT
U1ZhbHVlWHhTbWFsbCArIDEpOworICAgICAgICBpbnQgc2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZv
bnRTaXplRm9yS2V5d29yZChkb2N1bWVudCwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKTsKKyAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgICAgIGJvb2wg
dXNlU1ZHWm9vbVJ1bGVzID0gZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKTsKKyAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNp
emVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgZG9jdW1lbnRTdHlsZS5nZXQoKSwgZm9udERl
c2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcykpOworICAg
IH0KKworICAgIGRvY3VtZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOworICAgIGRvY3VtZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKKwor
ICAgIHJldHVybiBkb2N1bWVudFN0eWxlLnJlbGVhc2UoKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIGlzQXRTaGFkb3dCb3VuZGFyeShFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmICghZWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5v
ZGUgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7CisgICAgcmV0dXJuIHBhcmVudE5vZGUgJiYgcGFy
ZW50Tm9kZS0+aXNTaGFkb3dSb290KCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTdHls
ZSogZGVmYXVsdFBhcmVudCwKKyAgICBTdHlsZVNoYXJpbmdCZWhhdmlvciBzaGFyaW5nQmVoYXZp
b3IsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIFJlbmRlclJlZ2lvbiog
cmVnaW9uRm9yU3R5bGluZykKK3sKKyAgICAvLyBPbmNlIGFuIGVsZW1lbnQgaGFzIGEgcmVuZGVy
ZXIsIHdlIGRvbid0IHRyeSB0byBkZXN0cm95IGl0LCBzaW5jZSBvdGhlcndpc2UgdGhlIHJlbmRl
cmVyCisgICAgLy8gd2lsbCB2YW5pc2ggaWYgYSBzdHlsZSByZWNhbGMgaGFwcGVucyBkdXJpbmcg
bG9hZGluZy4KKyAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYm
ICFlbGVtZW50LT5kb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiAhZWxlbWVu
dC0+cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAoIXNfc3R5bGVOb3RZZXRBdmFpbGFibGUpIHsK
KyAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRl
KCkubGVha1JlZigpOworICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+c2V0RGlz
cGxheShOT05FKTsKKyAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPmZvbnQoKS51
cGRhdGUobV9mb250U2VsZWN0b3IpOworICAgICAgICB9CisgICAgICAgIGVsZW1lbnQtPmRvY3Vt
ZW50KCktPnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJu
IHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CisgICAgfQorCisgICAgaW5pdEVsZW1lbnQoZWxlbWVu
dCk7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlbGVtZW50LCBkZWZhdWx0UGFyZW50KTsKKyAg
ICBtX3JlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHlsaW5nOworICAgIGlmIChzaGFyaW5n
QmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcpIHsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHNo
YXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICAgICAgaWYgKHNoYXJlZFN0eWxl
KQorICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0eWxlOworICAgIH0KKworICAgIG1fc3R5bGUg
PSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisKKyAgICBpZiAobV9wYXJlbnRTdHlsZSkKKyAgICAg
ICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9wYXJlbnRTdHlsZSk7CisgICAgZWxzZSB7CisgICAg
ICAgIG1fcGFyZW50U3R5bGUgPSBzdHlsZSgpOworICAgICAgICAvLyBNYWtlIHN1cmUgb3VyIGZv
bnRzIGFyZSBpbml0aWFsaXplZCBpZiB3ZSBkb24ndCBpbmhlcml0IHRoZW0gZnJvbSBvdXIgcGFy
ZW50IHN0eWxlLgorICAgICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKDApOworICAgIH0KKwor
ICAgIC8vIEV2ZW4gaWYgc3Vycm91bmRpbmcgY29udGVudCBpcyB1c2VyLWVkaXRhYmxlLCBzaGFk
b3cgRE9NIHNob3VsZCBhY3QgYXMgYSBzaW5nbGUgdW5pdCwgYW5kIG5vdCBuZWNlc3NhcmlseSBi
ZSBlZGl0YWJsZQorICAgIGlmIChpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpCisgICAgICAg
IG1fc3R5bGUtPnNldFVzZXJNb2RpZnkoUmVuZGVyU3R5bGU6OmluaXRpYWxVc2VyTW9kaWZ5KCkp
OworCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKSB7CisgICAgICAgIG1fc3R5bGUtPnNldElz
TGluayh0cnVlKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0SW5zaWRlTGluayhtX2VsZW1lbnRMaW5r
U3RhdGUpOworICAgIH0KKworICAgIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQo
ZWxlbWVudCk7CisKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKKyAgICBpZiAobWF0Y2hp
bmdCZWhhdmlvciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykKKyAgICAgICAgbWF0Y2hVQVJ1
bGVzKG1hdGNoUmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGNoQWxsUnVsZXMobWF0Y2hS
ZXN1bHQpOworCisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCk7CisKKyAg
ICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0
aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdHlsZSgp
LCBtX3BhcmVudFN0eWxlLCBlbGVtZW50KTsKKworICAgIGluaXRFbGVtZW50KDApOyAvLyBDbGVh
ciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCisKKyAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHls
ZS4KKyAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUq
IGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFs
dWUmIGtleWZyYW1lVmFsdWUpCit7CisgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OworICAgIGlmIChr
ZXlmcmFtZS0+cHJvcGVydGllcygpKQorICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1
bHQsIGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOworCisgICAgQVNTRVJUKCFtX3N0eWxlKTsKKwor
ICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKKyAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25l
KGVsZW1lbnRTdHlsZSk7CisKKyAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisKKyAgICAvLyBX
ZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoICFpbXBvcnRhbnQuIFNpbmNlIHRoZXJlIGlzIG9u
bHkgZXZlciBvbmUKKyAgICAvLyBkZWNsLCB0aGVyZSdzIG5vdGhpbmcgdG8gb3ZlcnJpZGUuIFNv
IGp1c3QgYWRkIHRoZSBmaXJzdCBwcm9wZXJ0aWVzLgorICAgIGJvb2wgaW5oZXJpdGVkT25seSA9
IGZhbHNlOworICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQorICAgICAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPHRydWU+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKworICAgIC8vIElmIG91ciBmb250
IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KKyAgICB1cGRhdGVGb250
KCk7CisKKyAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNp
ZGVkIG9uIHRoZSBmb250LXNpemUKKyAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCisgICAgICAg
IGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7
CisKKyAgICAvLyBOb3cgZG8gcmVzdCBvZiB0aGUgcHJvcGVydGllcy4KKyAgICBpZiAoa2V5ZnJh
bWUtPnByb3BlcnRpZXMoKSkKKyAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4o
cmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGlu
aGVyaXRlZE9ubHkpOworCisgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9m
IHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsCisgICAgLy8gZ28gYWhlYWQgYW5kIHVwZGF0
ZSBpdCBhIHNlY29uZCB0aW1lLgorICAgIHVwZGF0ZUZvbnQoKTsKKworICAgIC8vIFN0YXJ0IGxv
YWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KKyAgICBsb2FkUGVuZGluZ0lt
YWdlcygpOworICAgIAorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAvLyBTdGFydCBsb2Fk
aW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KKyAgICBsb2FkUGVuZGlu
Z1NoYWRlcnMoKTsKKyNlbmRpZgorCisgICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3Bl
cnRpZXMgdG8gdGhlIGtleWZyYW1lLgorICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURl
Y2xhcmF0aW9uID0ga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkgeworICAgICAgICB1bnNpZ25lZCBw
cm9wZXJ0eUNvdW50ID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlDb3VudCgpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7CisgICAgICAg
ICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5ID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlB
dChpKS5pZCgpOworICAgICAgICAgICAgLy8gVGltaW5nLWZ1bmN0aW9uIHdpdGhpbiBrZXlmcmFt
ZXMgaXMgc3BlY2lhbCwgYmVjYXVzZSBpdCBpcyBub3QgYW5pbWF0ZWQ7IGl0IGp1c3QKKyAgICAg
ICAgICAgIC8vIGRlc2NyaWJlcyB0aGUgdGltaW5nIGZ1bmN0aW9uIGJldHdlZW4gdGhpcyBrZXlm
cmFtZSBhbmQgdGhlIG5leHQuCisgICAgICAgICAgICBpZiAocHJvcGVydHkgIT0gQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbikKKyAgICAgICAgICAgICAgICBrZXlmcmFt
ZVZhbHVlLmFkZFByb3BlcnR5KHByb3BlcnR5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFt
ZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVu
dFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCit7CisgICAgbGlzdC5jbGVhcigpOworCisgICAg
Ly8gR2V0IHRoZSBrZXlmcmFtZXNSdWxlIGZvciB0aGlzIG5hbWUKKyAgICBpZiAoIWUgfHwgbGlz
dC5hbmltYXRpb25OYW1lKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2tl
eWZyYW1lc1J1bGVNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgS2V5ZnJhbWVzUnVsZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lc1J1bGVNYXAuZmluZChsaXN0LmFuaW1hdGlvbk5h
bWUoKS5pbXBsKCkpOworICAgIGlmIChpdCA9PSBtX2tleWZyYW1lc1J1bGVNYXAuZW5kKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyoga2V5ZnJhbWVz
UnVsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisKKyAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRl
IHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVLZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgeworICAg
ICAgICAvLyBBcHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2lt
cGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQKKyAgICAgICAg
aW5pdEVsZW1lbnQoZSk7CisgICAgICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSk7CisKKyAgICAg
ICAgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUgPSBrZXlmcmFtZXNbaV0uZ2V0KCk7CisK
KyAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDApOworICAgICAgICBrZXlm
cmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBrZXlmcmFt
ZSwga2V5ZnJhbWVWYWx1ZSkpOworCisgICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHN0eWxl
IHRvIGFsbCB0aGUgaW5kaWNhdGVkIGtleSB0aW1lcworICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtl
eXM7CisgICAgICAgIGtleWZyYW1lLT5nZXRLZXlzKGtleXMpOworICAgICAgICBmb3IgKHNpemVf
dCBrZXlJbmRleCA9IDA7IGtleUluZGV4IDwga2V5cy5zaXplKCk7ICsra2V5SW5kZXgpIHsKKyAg
ICAgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0S2V5KGtleXNba2V5SW5kZXhdKTsKKyAgICAgICAg
ICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gSWYgdGhlIDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBpdCAoYnV0IG9ubHkgaWYg
dGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQorICAgIGludCBpbml0aWFsTGlz
dFNpemUgPSBsaXN0LnNpemUoKTsKKyAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiBsaXN0
WzBdLmtleSgpKSB7CisgICAgICAgIHN0YXRpYyBTdHlsZUtleWZyYW1lKiB6ZXJvUGVyY2VudEtl
eWZyYW1lOworICAgICAgICBpZiAoIXplcm9QZXJjZW50S2V5ZnJhbWUpIHsKKyAgICAgICAgICAg
IHplcm9QZXJjZW50S2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoKS5sZWFrUmVmKCk7
CisgICAgICAgICAgICB6ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIwJSIpOworICAg
ICAgICB9CisgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKKyAgICAg
ICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwg
emVyb1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBsaXN0Lmluc2Vy
dChrZXlmcmFtZVZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgMTAwJSBrZXlmcmFtZSBp
cyBtaXNzaW5nLCBjcmVhdGUgaXQgKGJ1dCBvbmx5IGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBv
dGhlciBrZXlmcmFtZSkKKyAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiAobGlzdFtsaXN0
LnNpemUoKSAtIDFdLmtleSgpICE9IDEpKSB7CisgICAgICAgIHN0YXRpYyBTdHlsZUtleWZyYW1l
KiBodW5kcmVkUGVyY2VudEtleWZyYW1lOworICAgICAgICBpZiAoIWh1bmRyZWRQZXJjZW50S2V5
ZnJhbWUpIHsKKyAgICAgICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUgPSBTdHlsZUtleWZy
YW1lOjpjcmVhdGUoKS5sZWFrUmVmKCk7CisgICAgICAgICAgICBodW5kcmVkUGVyY2VudEtleWZy
YW1lLT5zZXRLZXlUZXh0KCIxMDAlIik7CisgICAgICAgIH0KKyAgICAgICAgS2V5ZnJhbWVWYWx1
ZSBrZXlmcmFtZVZhbHVlKDEsIDApOworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0
eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1lLCBrZXlm
cmFtZVZhbHVlKSk7CisgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOworICAgIH0K
K30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVG
b3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKQoreworICAgIGlmICghZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbml0RWxl
bWVudChlKTsKKworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgcGFyZW50U3R5bGUsIHBzZXVk
byk7CisgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKworICAgIGlmIChtX3Bh
cmVudFN0eWxlKQorICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlKTsK
KworICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4gYW55IG9mIG91
ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1lIHdhbGtpbmcK
KyAgICAvLyB0aG9zZSBydWxlcy4KKworICAgIC8vIENoZWNrIFVBLCB1c2VyIGFuZCBhdXRob3Ig
cnVsZXMuCisgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CisgICAgbWF0Y2hVQVJ1bGVzKG1h
dGNoUmVzdWx0KTsKKworICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgeworICAg
ICAgICBtYXRjaFVzZXJSdWxlcyhtYXRjaFJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaEF1
dGhvclJ1bGVzKG1hdGNoUmVzdWx0LCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKG1hdGNoUmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBtX3N0eWxlLT5zZXRTdHlsZVR5cGUocHNldWRvKTsKKworICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMobWF0Y2hSZXN1bHQpOworCisgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdz
IGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCisgICAg
YWRqdXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwgcGFyZW50U3R5bGUsIDApOworCisgICAgLy8gU3Rh
cnQgbG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgorICAgIGxvYWRQZW5k
aW5nSW1hZ2VzKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgLy8gU3RhcnQgbG9h
ZGluZyB0aGUgc2hhZGVycyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCisgICAgbG9hZFBlbmRp
bmdTaGFkZXJzKCk7CisjZW5kaWYKKworICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgorICAg
IHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCit7CisgICAgaW5pdEZv
clN0eWxlUmVzb2x2ZShtX2NoZWNrZXIuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAv
LyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgor
CisgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBtX3N0eWxlLT5pbmhl
cml0RnJvbShtX3Jvb3RFbGVtZW50U3R5bGUpOworCisgICAgY29uc3QgYm9vbCBpc0xlZnQgPSBp
c0xlZnRQYWdlKHBhZ2VJbmRleCk7CisgICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBh
Z2UocGFnZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRl
eCk7CisgICAgCisgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OworICAgIG1hdGNoUGFnZVJ1bGVzKHJl
c3VsdCwgZGVmYXVsdFByaW50U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAgbWF0
Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3VzZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBw
YWdlKTsKKyAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9y
IEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCisgICAgbWF0Y2hQYWdlUnVsZXMo
cmVzdWx0LCBtX2F1dGhvclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOworICAg
IG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZTsK
KyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKworICAgIC8v
IElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KKyAg
ICB1cGRhdGVGb250KCk7CisKKyAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUg
c3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCisgICAgaWYgKG1fbGluZUhlaWdodFZh
bHVlKQorICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5l
SGVpZ2h0VmFsdWUpOworCisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4ocmVzdWx0
LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRl
ZE9ubHkpOworCisgICAgLy8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlz
IHN0eWxlLgorICAgIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgc2hhZGVycyByZWZlcmVuY2VkIGJ5IHRoaXMg
c3R5bGUuCisgICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisjZW5kaWYKKworICAgIC8vIE5vdyBy
ZXR1cm4gdGhlIHN0eWxlLgorICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKK30KKworc3Rh
dGljIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAg
Ly8gSW50cmluc2ljIG1hcmdpbiB2YWx1ZS4KKyAgICBjb25zdCBpbnQgaW50cmluc2ljTWFyZ2lu
ID0gMiAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisKKyAgICAvLyBGSVhNRTogVXNpbmcgd2lk
dGgvaGVpZ2h0IGFsb25lIGFuZCBub3QgYWxzbyBkZWFsaW5nIHdpdGggbWluLXdpZHRoL21heC13
aWR0aCBpcyBmbGF3ZWQuCisgICAgLy8gRklYTUU6IFVzaW5nICJxdWlyayIgdG8gZGVjaWRlIHRo
ZSBtYXJnaW4gd2Fzbid0IHNldCBpcyBraW5kIG9mIGxhbWUuCisgICAgaWYgKHN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5MZWZ0
KCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5MZWZ0KExlbmd0aChpbnRy
aW5zaWNNYXJnaW4sIEZpeGVkKSk7CisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2luUmlnaHQoKS5x
dWlyaygpKQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblJpZ2h0KExlbmd0aChpbnRyaW5z
aWNNYXJnaW4sIEZpeGVkKSk7CisgICAgfQorCisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1
dG8oKSkgeworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpblRvcCgpLnF1aXJrKCkpCisgICAgICAg
ICAgICBzdHlsZS0+c2V0TWFyZ2luVG9wKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7
CisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2luQm90dG9tKCkucXVpcmsoKSkKKyAgICAgICAgICAg
IHN0eWxlLT5zZXRNYXJnaW5Cb3R0b20oTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsK
KyAgICB9Cit9CisKK3N0YXRpYyBFRGlzcGxheSBlcXVpdmFsZW50QmxvY2tEaXNwbGF5KEVEaXNw
bGF5IGRpc3BsYXksIGJvb2wgaXNGbG9hdGluZywgYm9vbCBzdHJpY3RQYXJzaW5nKQoreworICAg
IHN3aXRjaCAoZGlzcGxheSkgeworICAgIGNhc2UgQkxPQ0s6CisgICAgY2FzZSBUQUJMRToKKyAg
ICBjYXNlIEJPWDoKKyAgICBjYXNlIEZMRVhCT1g6CisjaWYgRU5BQkxFKENTU19HUklEX0xBWU9V
VCkKKyAgICBjYXNlIEdSSUQ6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGRpc3BsYXk7CisKKyAg
ICBjYXNlIExJU1RfSVRFTToKKyAgICAgICAgLy8gSXQgaXMgYSBXaW5JRSBidWcgdGhhdCBmbG9h
dGVkIGxpc3QgaXRlbXMgbG9zZSB0aGVpciBidWxsZXRzLCBzbyB3ZSdsbCBlbXVsYXRlIHRoZSBx
dWlyaywgYnV0IG9ubHkgaW4gcXVpcmtzIG1vZGUuCisgICAgICAgIGlmICghc3RyaWN0UGFyc2lu
ZyAmJiBpc0Zsb2F0aW5nKQorICAgICAgICAgICAgcmV0dXJuIEJMT0NLOworICAgICAgICByZXR1
cm4gZGlzcGxheTsKKyAgICBjYXNlIElOTElORV9UQUJMRToKKyAgICAgICAgcmV0dXJuIFRBQkxF
OworICAgIGNhc2UgSU5MSU5FX0JPWDoKKyAgICAgICAgcmV0dXJuIEJPWDsKKyAgICBjYXNlIElO
TElORV9GTEVYQk9YOgorICAgICAgICByZXR1cm4gRkxFWEJPWDsKKyNpZiBFTkFCTEUoQ1NTX0dS
SURfTEFZT1VUKQorICAgIGNhc2UgSU5MSU5FX0dSSUQ6CisgICAgICAgIHJldHVybiBHUklEOwor
I2VuZGlmCisKKyAgICBjYXNlIElOTElORToKKyAgICBjYXNlIFJVTl9JTjoKKyAgICBjYXNlIENP
TVBBQ1Q6CisgICAgY2FzZSBJTkxJTkVfQkxPQ0s6CisgICAgY2FzZSBUQUJMRV9ST1dfR1JPVVA6
CisgICAgY2FzZSBUQUJMRV9IRUFERVJfR1JPVVA6CisgICAgY2FzZSBUQUJMRV9GT09URVJfR1JP
VVA6CisgICAgY2FzZSBUQUJMRV9ST1c6CisgICAgY2FzZSBUQUJMRV9DT0xVTU5fR1JPVVA6Cisg
ICAgY2FzZSBUQUJMRV9DT0xVTU46CisgICAgY2FzZSBUQUJMRV9DRUxMOgorICAgIGNhc2UgVEFC
TEVfQ0FQVElPTjoKKyAgICAgICAgcmV0dXJuIEJMT0NLOworICAgIGNhc2UgTk9ORToKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBOT05FOworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQkxPQ0s7Cit9CisKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCit7CisgICAgLy8gQ2FjaGUgb3VyIG9yaWdp
bmFsIGRpc3BsYXkuCisgICAgc3R5bGUtPnNldE9yaWdpbmFsRGlzcGxheShzdHlsZS0+ZGlzcGxh
eSgpKTsKKworICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpICE9IE5PTkUpIHsKKyAgICAgICAgLy8g
SWYgd2UgaGF2ZSBhIDx0ZD4gdGhhdCBzcGVjaWZpZXMgYSBmbG9hdCBwcm9wZXJ0eSwgaW4gcXVp
cmtzIG1vZGUgd2UganVzdCBkcm9wIHRoZSBmbG9hdAorICAgICAgICAvLyBwcm9wZXJ0eS4KKyAg
ICAgICAgLy8gU2l0ZXMgYWxzbyBjb21tb25seSB1c2UgZGlzcGxheTppbmxpbmUvYmxvY2sgb24g
PHRkPnMgYW5kIDx0YWJsZT5zLiBJbiBxdWlya3MgbW9kZSB3ZSBmb3JjZQorICAgICAgICAvLyB0
aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBkaXNwbGF5IHR5cGVzLgorICAgICAgICBpZiAoIW1f
Y2hlY2tlci5zdHJpY3RQYXJzaW5nKCkgJiYgZSkgeworICAgICAgICAgICAgaWYgKGUtPmhhc1Rh
Z05hbWUodGRUYWcpKSB7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoVEFCTEVf
Q0VMTCk7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKKyAgICAgICAgICAg
ICAgICBzdHlsZS0+c2V0RGlzcGxheShzdHlsZS0+aXNEaXNwbGF5SW5saW5lVHlwZSgpID8gSU5M
SU5FX1RBQkxFIDogVEFCTEUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGUgJiYgKGUtPmhh
c1RhZ05hbWUodGRUYWcpIHx8IGUtPmhhc1RhZ05hbWUodGhUYWcpKSkgeworICAgICAgICAgICAg
aWYgKHN0eWxlLT53aGl0ZVNwYWNlKCkgPT0gS0hUTUxfTk9XUkFQKSB7CisgICAgICAgICAgICAg
ICAgLy8gRmlndXJlIG91dCBpZiB3ZSBhcmUgcmVhbGx5IG5vd3JhcHBpbmcgb3IgaWYgd2Ugc2hv
dWxkIGp1c3QKKyAgICAgICAgICAgICAgICAvLyB1c2Ugbm9ybWFsIGluc3RlYWQuIElmIHRoZSB3
aWR0aCBvZiB0aGUgY2VsbCBpcyBmaXhlZCwgdGhlbgorICAgICAgICAgICAgICAgIC8vIHdlIGRv
bid0IGFjdHVhbGx5IHVzZSBOT1dSQVAuCisgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT53aWR0
aCgpLmlzRml4ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2Uo
Tk9STUFMKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXRXaGl0ZVNwYWNlKE5PV1JBUCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyBUYWJsZXMgbmV2ZXIgc3VwcG9ydCB0aGUgLXdlYmtpdC0qIHZhbHVlcyBmb3IgdGV4
dC1hbGlnbiBhbmQgd2lsbCByZXNldCBiYWNrIHRvIHRoZSBkZWZhdWx0LgorICAgICAgICBpZiAo
ZSAmJiBlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSAmJiAoc3R5bGUtPnRleHRBbGlnbigpID09IFdF
QktJVF9MRUZUIHx8IHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfQ0VOVEVSIHx8IHN0eWxl
LT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklHSFQpKQorICAgICAgICAgICAgc3R5bGUtPnNldFRl
eHRBbGlnbihUQUFVVE8pOworCisgICAgICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVzZXRzIG5ldmVy
IGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFic29sdXRlLiBUaGlzIGlzIG5l
Y2Vzc2FyeSB0bworICAgICAgICAvLyBmaXggYSBjcmFzaCB3aGVyZSBhIHNpdGUgdHJpZXMgdG8g
cG9zaXRpb24gdGhlc2Ugb2JqZWN0cy4gVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRpc3BsYXkuCisg
ICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBlLT5oYXNUYWdOYW1l
KGZyYW1lc2V0VGFnKSkpIHsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihTdGF0aWNQ
b3NpdGlvbik7CisgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBSdWJ5IHRleHQgZG9lcyBub3Qgc3VwcG9ydCBmbG9hdCBvciBwb3Np
dGlvbi4gVGhpcyBtaWdodCBjaGFuZ2Ugd2l0aCBldm9sdXRpb24gb2YgdGhlIHNwZWNpZmljYXRp
b24uCisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUocnRUYWcpKSB7CisgICAgICAgICAg
ICBzdHlsZS0+c2V0UG9zaXRpb24oU3RhdGljUG9zaXRpb24pOworICAgICAgICAgICAgc3R5bGUt
PnNldEZsb2F0aW5nKE5vRmxvYXQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGFibGUgaGVh
ZGVycyB3aXRoIGEgdGV4dC1hbGlnbiBvZiBhdXRvIHdpbGwgY2hhbmdlIHRoZSB0ZXh0LWFsaWdu
IHRvIGNlbnRlci4KKyAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZSh0aFRhZykgJiYgc3R5
bGUtPnRleHRBbGlnbigpID09IFRBQVVUTykKKyAgICAgICAgICAgIHN0eWxlLT5zZXRUZXh0QWxp
Z24oQ0VOVEVSKTsKKworICAgICAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykp
CisgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CisKKyAgICAgICAgLy8gQWJz
b2x1dGUvZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cywgZmxvYXRpbmcgZWxlbWVudHMgYW5kIHRo
ZSBkb2N1bWVudCBlbGVtZW50IG5lZWQgYmxvY2stbGlrZSBvdXRzaWRlIGRpc3BsYXkuCisgICAg
ICAgIGlmIChzdHlsZS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uIHx8IHN0eWxlLT5w
b3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gfHwgc3R5bGUtPmlzRmxvYXRpbmcoKSB8fCAoZSAm
JiBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSBlKSkKKyAgICAgICAgICAgIHN0
eWxlLT5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5bGUtPmRpc3BsYXkoKSwg
c3R5bGUtPmlzRmxvYXRpbmcoKSwgbV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSkpOworCisgICAg
ICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0IHRoaXMgbXV0YXRpb24gZm9yIHBzZXVkbyBzdHls
ZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2luY2UgaXQncyBub3QgY29tcGxl
dGVseQorICAgICAgICAvLyBjbGVhciBob3cgdGhhdCBzaG91bGQgd29yay4KKyAgICAgICAgaWYg
KHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FICYmIHN0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BT
RVVETyAmJiBwYXJlbnRTdHlsZSAmJiBzdHlsZS0+d3JpdGluZ01vZGUoKSAhPSBwYXJlbnRTdHls
ZS0+d3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KElOTElORV9C
TE9DSyk7CisKKyAgICAgICAgLy8gQWZ0ZXIgcGVyZm9ybWluZyB0aGUgZGlzcGxheSBtdXRhdGlv
biwgY2hlY2sgdGFibGUgcm93cy4gV2UgZG8gbm90IGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9u
CisgICAgICAgIC8vIHRhYmxlIHJvd3Mgb3IgY2VsbHMuIFRoaXMgaGFzIGJlZW4gZXN0YWJsaXNo
ZWQgaW4gQ1NTMi4xIChhbmQgY2F1c2VkIGEgY3Jhc2ggaW4gY29udGFpbmluZ0Jsb2NrKCkKKyAg
ICAgICAgLy8gb24gc29tZSBzaXRlcykuCisgICAgICAgIGlmICgoc3R5bGUtPmRpc3BsYXkoKSA9
PSBUQUJMRV9IRUFERVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1dfR1JP
VVAKKyAgICAgICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0ZPT1RFUl9HUk9V
UCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVykKKyAgICAgICAgICAgICAmJiBzdHls
ZS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKQorICAgICAgICAgICAgc3R5bGUtPnNl
dFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKKworICAgICAgICAvLyB3cml0aW5nLW1vZGUgZG9l
cyBub3QgYXBwbHkgdG8gdGFibGUgcm93IGdyb3VwcywgdGFibGUgY29sdW1uIGdyb3VwcywgdGFi
bGUgcm93cywgYW5kIHRhYmxlIGNvbHVtbnMuCisgICAgICAgIC8vIEZJWE1FOiBUYWJsZSBjZWxs
cyBzaG91bGQgYmUgYWxsb3dlZCB0byBiZSBwZXJwZW5kaWN1bGFyIG9yIGZsaXBwZWQgd2l0aCBy
ZXNwZWN0IHRvIHRoZSB0YWJsZSwgdGhvdWdoLgorICAgICAgICBpZiAoc3R5bGUtPmRpc3BsYXko
KSA9PSBUQUJMRV9DT0xVTU4gfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9DT0xVTU5fR1JP
VVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9GT09URVJfR1JPVVAKKyAgICAgICAgICAg
IHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfSEVBREVSX0dST1VQIHx8IHN0eWxlLT5kaXNw
bGF5KCkgPT0gVEFCTEVfUk9XIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XX0dST1VQ
CisgICAgICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0NFTEwpCisgICAgICAg
ICAgICBzdHlsZS0+c2V0V3JpdGluZ01vZGUocGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkpOwor
CisgICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBkb24ndCBzdXBwb3J0IGJsb2NrLWZsb3cgb24g
ZmxleGlibGUgYm94ZXMgeWV0LCBkaXNhbGxvdyBzZXR0aW5nCisgICAgICAgIC8vIG9mIGJsb2Nr
LWZsb3cgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY0MTggLSBG
bGV4aWJsZSBib3ggc3VwcG9ydC4KKyAgICAgICAgaWYgKHN0eWxlLT53cml0aW5nTW9kZSgpICE9
IFRvcFRvQm90dG9tV3JpdGluZ01vZGUgJiYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gQk9YIHx8IHN0
eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JPWCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0V3Jp
dGluZ01vZGUoVG9wVG9Cb3R0b21Xcml0aW5nTW9kZSk7CisgICAgfQorCisgICAgLy8gTWFrZSBz
dXJlIG91ciB6LWluZGV4IHZhbHVlIGlzIG9ubHkgYXBwbGllZCBpZiB0aGUgb2JqZWN0IGlzIHBv
c2l0aW9uZWQuCisgICAgaWYgKHN0eWxlLT5wb3NpdGlvbigpID09IFN0YXRpY1Bvc2l0aW9uKQor
ICAgICAgICBzdHlsZS0+c2V0SGFzQXV0b1pJbmRleCgpOworCisgICAgLy8gQXV0byB6LWluZGV4
IGJlY29tZXMgMCBmb3IgdGhlIHJvb3QgZWxlbWVudCBhbmQgdHJhbnNwYXJlbnQgb2JqZWN0cy4g
VGhpcyBwcmV2ZW50cworICAgIC8vIGNhc2VzIHdoZXJlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUg
YmxlbmRlZCBhcyBhIHNpbmdsZSB1bml0IGVuZCB1cCB3aXRoIGEgbm9uLXRyYW5zcGFyZW50Cisg
ICAgLy8gb2JqZWN0IHdlZGdlZCBpbiBiZXR3ZWVuIHRoZW0uIEF1dG8gei1pbmRleCBhbHNvIGJl
Y29tZXMgMCBmb3Igb2JqZWN0cyB0aGF0IHNwZWNpZnkgdHJhbnNmb3Jtcy9tYXNrcy9yZWZsZWN0
aW9ucy4KKyAgICBpZiAoc3R5bGUtPmhhc0F1dG9aSW5kZXgoKSAmJiAoKGUgJiYgZS0+ZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkgfHwgc3R5bGUtPm9wYWNpdHkoKSA8IDEuMGYK
KyAgICAgICAgfHwgc3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpIHx8IHN0eWxl
LT5oYXNNYXNrKCkgfHwgc3R5bGUtPmJveFJlZmxlY3QoKSB8fCBzdHlsZS0+aGFzRmlsdGVyKCkK
KyNpZmRlZiBGSVhFRF9QT1NJVElPTl9DUkVBVEVTX1NUQUNLSU5HX0NPTlRFWFQKKyAgICAgICAg
fHwgc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbgorI2VuZGlmCisjaWYgRU5BQkxF
KE9WRVJGTE9XX1NDUk9MTElORykKKyAgICAgICAgLy8gVG91Y2ggb3ZlcmZsb3cgc2Nyb2xsaW5n
IGNyZWF0ZXMgYSBzdGFja2luZyBjb250ZXh0LgorICAgICAgICB8fCBzdHlsZS0+dXNlVG91Y2hP
dmVyZmxvd1Njcm9sbGluZygpCisjZW5kaWYKKyAgICAgICAgKSkKKyAgICAgICAgc3R5bGUtPnNl
dFpJbmRleCgwKTsKKworICAgIC8vIFRleHRhcmVhIGNvbnNpZGVycyBvdmVyZmxvdyB2aXNpYmxl
IGFzIGF1dG8uCisgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsKKyAg
ICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT1ZJU0lCTEUg
PyBPQVVUTyA6IHN0eWxlLT5vdmVyZmxvd1goKSk7CisgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxv
d1koc3R5bGUtPm92ZXJmbG93WSgpID09IE9WSVNJQkxFID8gT0FVVE8gOiBzdHlsZS0+b3ZlcmZs
b3dZKCkpOworICAgIH0KKworICAgIC8vIEZpbmFsbHkgdXBkYXRlIG91ciB0ZXh0IGRlY29yYXRp
b25zIGluIGVmZmVjdCwgYnV0IGRvbid0IGFsbG93IHRleHQtZGVjb3JhdGlvbiB0byBwZXJjb2xh
dGUgdGhyb3VnaAorICAgIC8vIHRhYmxlcywgaW5saW5lIGJsb2NrcywgaW5saW5lIHRhYmxlcywg
cnVuLWlucywgb3Igc2hhZG93IERPTS4KKyAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJM
RSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9UQUJMRSB8fCBzdHlsZS0+ZGlzcGxheSgp
ID09IFJVTl9JTgorICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9CTE9DSyB8
fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9CT1ggfHwgaXNBdFNoYWRvd0JvdW5kYXJ5KGUp
KQorICAgICAgICBzdHlsZS0+c2V0VGV4dERlY29yYXRpb25zSW5FZmZlY3Qoc3R5bGUtPnRleHRE
ZWNvcmF0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAgc3R5bGUtPmFkZFRvVGV4dERlY29yYXRp
b25zSW5FZmZlY3Qoc3R5bGUtPnRleHREZWNvcmF0aW9uKCkpOworCisgICAgLy8gSWYgZWl0aGVy
IG92ZXJmbG93IHZhbHVlIGlzIG5vdCB2aXNpYmxlLCBjaGFuZ2UgdG8gYXV0by4KKyAgICBpZiAo
c3R5bGUtPm92ZXJmbG93WCgpID09IE9NQVJRVUVFICYmIHN0eWxlLT5vdmVyZmxvd1koKSAhPSBP
TUFSUVVFRSkKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPTUFSUVVFRSk7CisgICAgZWxz
ZSBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9NQVJRVUVFICYmIHN0eWxlLT5vdmVyZmxvd1go
KSAhPSBPTUFSUVVFRSkKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPTUFSUVVFRSk7Cisg
ICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9WSVNJQkxFICYmIHN0eWxlLT5vdmVy
Zmxvd1koKSAhPSBPVklTSUJMRSkKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPQVVUTyk7
CisgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9WSVNJQkxFICYmIHN0eWxlLT5v
dmVyZmxvd1goKSAhPSBPVklTSUJMRSkKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPQVVU
Tyk7CisKKyAgICAvLyBUYWJsZSByb3dzLCBzZWN0aW9ucyBhbmQgdGhlIHRhYmxlIGl0c2VsZiB3
aWxsIHN1cHBvcnQgb3ZlcmZsb3c6aGlkZGVuIGFuZCB3aWxsIGlnbm9yZSBzY3JvbGwvYXV0by4K
KyAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0YWJsZSBzZWN0aW9ucyB3aWxsIHN1cHBvcnQgYXV0
byBhbmQgc2Nyb2xsLgorICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFIHx8IHN0eWxl
LT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFCisgICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkg
PT0gVEFCTEVfUk9XX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XKSB7Cisg
ICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJm
bG93WCgpICE9IE9ISURERU4pCisgICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9WSVNJ
QkxFKTsKKyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJMRSAmJiBzdHls
ZS0+b3ZlcmZsb3dZKCkgIT0gT0hJRERFTikKKyAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxv
d1koT1ZJU0lCTEUpOworICAgIH0KKworICAgIC8vIE1lbnVsaXN0cyBzaG91bGQgaGF2ZSB2aXNp
YmxlIG92ZXJmbG93CisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0
KSB7CisgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT1ZJU0lCTEUpOworICAgICAgICBzdHls
ZS0+c2V0T3ZlcmZsb3dZKE9WSVNJQkxFKTsKKyAgICB9CisKKyAgICAvLyBDdWxsIG91dCBhbnkg
dXNlbGVzcyBsYXllcnMgYW5kIGFsc28gcmVwZWF0IHBhdHRlcm5zIGludG8gYWRkaXRpb25hbCBs
YXllcnMuCisgICAgc3R5bGUtPmFkanVzdEJhY2tncm91bmRMYXllcnMoKTsKKyAgICBzdHlsZS0+
YWRqdXN0TWFza0xheWVycygpOworCisgICAgLy8gRG8gdGhlIHNhbWUgZm9yIGFuaW1hdGlvbnMg
YW5kIHRyYW5zaXRpb25zLgorICAgIHN0eWxlLT5hZGp1c3RBbmltYXRpb25zKCk7CisgICAgc3R5
bGUtPmFkanVzdFRyYW5zaXRpb25zKCk7CisKKyAgICAvLyBJbXBvcnRhbnQ6IEludHJpbnNpYyBt
YXJnaW5zIGdldCBhZGRlZCB0byBjb250cm9scyBiZWZvcmUgdGhlIHRoZW1lIGhhcyBhZGp1c3Rl
ZCB0aGUgc3R5bGUsIHNpbmNlIHRoZSB0aGVtZSB3aWxsCisgICAgLy8gYWx0ZXIgZm9udHMgYW5k
IGhlaWdodHMvd2lkdGhzLgorICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkg
JiYgc3R5bGUtPmZvbnRTaXplKCkgPj0gMTEpIHsKKyAgICAgICAgLy8gRG9uJ3QgYXBwbHkgaW50
cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9ucy4gVGhlIGRlc2lnbmVyIGtub3dzIGhvdyBi
aWcgdGhlIGltYWdlcyBhcmUsCisgICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gdHJlYXQgYWxsIGlt
YWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNpdGx5IHNpemVkLgorICAgICAg
ICBpZiAoIWUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8ICFzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Kj4oZSktPmlzSW1hZ2VCdXR0b24oKSkKKyAgICAgICAgICAgIGFkZEludHJpbnNpY01h
cmdpbnMoc3R5bGUpOworICAgIH0KKworICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEg
Y3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KKyAgICBpZiAoc3R5bGUtPmhhc0FwcGVhcmFu
Y2UoKSkKKyAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0
aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVyRGF0YSwgbV9iYWNrZ3Jv
dW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOworCisgICAgLy8gSWYgd2UgaGF2ZSBmaXJzdC1s
ZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KKyAgICBpZiAoc3R5
bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCisgICAgICAgIHN0eWxlLT5zZXRVbmlx
dWUoKTsKKworICAgIC8vIEZJWE1FOiB3aGVuIGRyb3BwaW5nIHRoZSAtd2Via2l0IHByZWZpeCBv
biB0cmFuc2Zvcm0tc3R5bGUsIHdlIHNob3VsZCBhbHNvIGhhdmUgb3BhY2l0eSA8IDEgY2F1c2Ug
ZmxhdHRlbmluZy4KKyAgICBpZiAoc3R5bGUtPnByZXNlcnZlczNEKCkgJiYgKHN0eWxlLT5vdmVy
Zmxvd1goKSAhPSBPVklTSUJMRQorICAgICAgICB8fCBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT1ZJ
U0lCTEUKKyAgICAgICAgfHwgc3R5bGUtPmhhc0ZpbHRlcigpKSkKKyAgICAgICAgc3R5bGUtPnNl
dFRyYW5zZm9ybVN0eWxlM0QoVHJhbnNmb3JtU3R5bGUzREZsYXQpOworCisjaWYgRU5BQkxFKFNW
RykKKyAgICBpZiAoZSAmJiBlLT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAgICAvLyBTcGVjOiBo
dHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvbWFza2luZy5odG1sI092ZXJmbG93UHJvcGVydHkKKyAg
ICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMKQorICAgICAgICAgICAgc3R5
bGUtPnNldE92ZXJmbG93WShPSElEREVOKTsKKyAgICAgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJm
bG93WSgpID09IE9BVVRPKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklTSUJM
RSk7CisKKyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPU0NST0xMKQorICAgICAg
ICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPSElEREVOKTsKKyAgICAgICAgZWxzZSBpZiAoc3R5
bGUtPm92ZXJmbG93WCgpID09IE9BVVRPKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93
WChPVklTSUJMRSk7CisKKyAgICAgICAgLy8gT25seSB0aGUgcm9vdCA8c3ZnPiBlbGVtZW50IGlu
IGFuIFNWRyBkb2N1bWVudCBmcmFnbWVudCB0cmVlIGhvbm9ycyBjc3MgcG9zaXRpb24KKyAgICAg
ICAgaWYgKCEoZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSAmJiBlLT5wYXJlbnROb2Rl
KCkgJiYgIWUtPnBhcmVudE5vZGUoKS0+aXNTVkdFbGVtZW50KCkpKQorICAgICAgICAgICAgc3R5
bGUtPnNldFBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsUG9zaXRpb24oKSk7CisKKyAgICAg
ICAgLy8gUmVuZGVyU1ZHUm9vdCBoYW5kbGVzIHpvb21pbmcgZm9yIHRoZSB3aG9sZSBTVkcgc3Vi
dHJlZSwgc28gZm9yZWlnbk9iamVjdCBjb250ZW50IHNob3VsZAorICAgICAgICAvLyBub3QgYmUg
c2NhbGVkIGFnYWluLgorICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9yZWln
bk9iamVjdFRhZykpCisgICAgICAgICAgICBzdHlsZS0+c2V0RWZmZWN0aXZlWm9vbShSZW5kZXJT
dHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgfQorI2VuZGlmCit9CisKK2Jvb2wgU3R5bGVSZXNv
bHZlcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiByZWdpb25FbGVtZW50KQoreworICAgIC8v
IEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9m
IHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQsCisgICAgLy8gc28gYWxsIHJlZ2lv
biBydWxlcyBhcmUgZ2xvYmFsIGJ5IGRlZmF1bHQuIFZlcmlmeSB3aGV0aGVyIHRoYXQgY2FuIHN0
YW5kIG9yIG5lZWRzIGNoYW5naW5nLgorCisgICAgdW5zaWduZWQgcnVsZXNTaXplID0gbV9hdXRo
b3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7CisgICAgICAgIEFTU0VSVChtX2F1
dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0
KCkpOworICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX2F1dGhvclN0eWxlLT5tX3Jl
Z2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50KSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtX3VzZXJTdHlsZSkg
eworICAgICAgICBydWxlc1NpemUgPSBtX3VzZXJTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRS
dWxlU2V0cy5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlc1Np
emU7ICsraSkgeworICAgICAgICAgICAgQVNTRVJUKG1fdXNlclN0eWxlLT5tX3JlZ2lvblNlbGVj
dG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGNo
ZWNrUmVnaW9uU2VsZWN0b3IobV91c2VyU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNl
dHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQoreworICAgIGlmICghbV9mb250RGlydHkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKKyAgICBjaGVj
a0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7CisgICAgY2hl
Y2tGb3Jab29tQ2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOworICAgIG1fc3R5bGUtPmZv
bnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOworICAgIG1fZm9udERpcnR5ID0gZmFsc2U7Cit9
CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKK3sKKyAg
ICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKKyAgICBpZiAo
bV9oYXNVQUFwcGVhcmFuY2UpIHsKKyAgICAgICAgbV9ib3JkZXJEYXRhID0gbV9zdHlsZS0+Ym9y
ZGVyKCk7CisgICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqbV9zdHlsZS0+YmFja2dyb3VuZExh
eWVycygpOworICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IG1fc3R5bGUtPmJhY2tncm91bmRD
b2xvcigpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgdW5zaWduZWQgcnVsZXNUb0luY2x1
ZGUpCit7CisgICAgcmV0dXJuIHBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGUsIE5PUFNFVURP
LCBydWxlc1RvSW5jbHVkZSk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVz
b2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzZXVkb0lkIHBz
ZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKK3sKKyAgICBpZiAoIWUgfHwgIWUtPmRv
Y3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KHRydWUpOworCisgICAgaW5pdEVs
ZW1lbnQoZSk7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCAwLCBwc2V1ZG9JZCk7CisKKyAg
ICBNYXRjaFJlc3VsdCBkdW1teTsKKyAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJD
U1NSdWxlcykgeworICAgICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2Vy
IGFnZW50IHNoZWV0LgorICAgICAgICBtYXRjaFVBUnVsZXMoZHVtbXkpOworCisgICAgICAgIC8v
IE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgorICAgICAgICBpZiAobV9tYXRjaEF1dGhv
ckFuZFVzZXJTdHlsZXMpCisgICAgICAgICAgICBtYXRjaFVzZXJSdWxlcyhkdW1teSwgcnVsZXNU
b0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICB9CisKKyAgICBpZiAobV9tYXRjaEF1dGhv
ckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7Cisg
ICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5D
U1NSdWxlcyk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMu
CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlD
U1NSdWxlcyk7CisKKyAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOworICAgIH0KKwor
ICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KGZhbHNlKTsKKworICAgIHJldHVy
biBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKK30KKworaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6
Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlKQoreworICAgIG1fZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgIG1fY2hl
Y2tlci5jbGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpOworCisgICAgaWYgKHJ1bGVEYXRh
Lmhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpKSB7CisgICAgICAgIC8vIFdlIGtub3cgdGhpcyBz
ZWxlY3RvciBkb2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8gZWxlbWVudHMuCisgICAgICAgIGlm
IChtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETykKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgLy8gV2Uga25vdyBhIHN1ZmZpY2llbnRseSBzaW1wbGUgc2luZ2xl
IHBhcnQgc2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBmb3VuZCBpdCBmcm9tIHRo
ZSBydWxlIGhhc2guCisgICAgICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9ubHkgc28g
d2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbmFtZXNwYWNlLgorICAgICAgICBpZiAocnVsZURh
dGEuaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBt
X2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKCFydWxlRGF0YS5o
YXNNdWx0aXBhcnRTZWxlY3RvcigpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9IGVsc2UgaWYgKCFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMobV9lbGVtZW50LCBy
dWxlRGF0YS5zZWxlY3RvcigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9y
KG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiBtX2NoZWNrZXIuZmFzdENoZWNrU2VsZWN0b3IocnVsZURhdGEu
c2VsZWN0b3IoKSwgbV9lbGVtZW50KTsKKyAgICB9CisKKyAgICAvLyBTbG93IHBhdGguCisgICAg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRh
LnNlbGVjdG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFi
bGVkKTsKKyAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0eWxlKCk7CisgICAgY29udGV4dC5l
bGVtZW50UGFyZW50U3R5bGUgPSBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRlclN0
eWxlKCkgOiAwOworICAgIGNvbnRleHQuc2NvcGUgPSBzY29wZTsKKyAgICBTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3Rvcihjb250ZXh0
LCBtX2R5bmFtaWNQc2V1ZG8pOworICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNl
bGVjdG9yTWF0Y2hlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2NoZWNrZXIu
cHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBt
X2R5bmFtaWNQc2V1ZG8pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKENTU1NlbGVjdG9y
KiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCkKK3sKKyAgICBpZiAoIXJl
Z2lvblNlbGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtX2NoZWNrZXIuY2xlYXJIYXNVbmtub3duUHNldWRvRWxlbWVudHMoKTsKKyAgICBtX2No
ZWNrZXIuc2V0UHNldWRvU3R5bGUoTk9QU0VVRE8pOworCisgICAgZm9yIChDU1NTZWxlY3Rvciog
cyA9IHJlZ2lvblNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQorICAg
ICAgICBpZiAobV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocywgcmVnaW9uRWxlbWVudCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK2Jvb2wg
U3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKFN0eWxlU2hl
ZXRJbnRlcm5hbCogc3R5bGVzaGVldCwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2Nv
cGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpCit7CisgICAgQVNT
RVJUKCFzdHlsZXNoZWV0LT5pc0xvYWRpbmcoKSk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzdHlsZXNoZWV0LT5pbXBvcnRSdWxl
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbXBvcnRSdWxlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAoIWltcG9ydFJ1bGVzW2ldLT5zdHlsZVNoZWV0KCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JT
Y29wZXMoaW1wb3J0UnVsZXNbaV0tPnN0eWxlU2hlZXQoKSwgaWRTY29wZXMsIGNsYXNzU2NvcGVz
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIHJ1bGVzID0gc3R5bGVzaGVldC0+Y2hpbGRSdWxlcygp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlcy5zaXplKCk7IGkrKykgeworICAg
ICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0gcnVsZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChy
dWxlLT5pc1N0eWxlUnVsZSgpKSB7CisgICAgICAgICAgICBTdHlsZVJ1bGUqIHN0eWxlUnVsZSA9
IHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpOworICAgICAgICAgICAgaWYgKCFTZWxlY3Rv
ckNoZWNrZXI6OmRldGVybWluZVNlbGVjdG9yU2NvcGVzKHN0eWxlUnVsZS0+c2VsZWN0b3JMaXN0
KCksIGlkU2NvcGVzLCBjbGFzc1Njb3BlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gCisgICAgICAgIC8vIEZJWE1FOiBN
ZWRpYSBydWxlcyBhbmQgbWF5YmUgc29tZSBvdGhlcnMgY291bGQgYmUgYWxsb3dlZC4KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworc3RhdGljIGlubGluZSBib29sIGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVs
ZUhhc2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgc2VsZWN0b3JOYW1lc3BhY2UgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJKCk7
CisgICAgaWYgKHNlbGVjdG9yTmFtZXNwYWNlICE9IHN0YXJBdG9tICYmIHNlbGVjdG9yTmFtZXNw
YWNlICE9IHhodG1sTmFtZXNwYWNlVVJJKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpOb25lKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoc2VsZWN0b3ItPnRhZygpICE9IHN0YXJBdG9tKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1Nl
bGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNlbGVj
dG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6Q2xhc3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZWxlY3Rvckxpc3RD
b250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQoreworICAgIENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNl
bGVjdG9yTGlzdCgpOworICAgIGlmICghc2VsZWN0b3JMaXN0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZp
cnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChz
dWJTZWxlY3RvcikpIHsKKyAgICAgICAgaWYgKHN1YlNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVj
dG9yKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tb25BdHRyaWJ1dGVTZWxlY3RvckF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCit7CisgICAgLy8gVGhlc2UgYXJl
IGV4cGxpY2l0bHkgdGVzdGVkIGZvciBlcXVhbGl0eSBpbiBjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQuCisgICAgcmV0dXJuIGF0dHJpYnV0ZSA9PSB0eXBlQXR0ciB8fCBhdHRyaWJ1dGUgPT0gcmVh
ZG9ubHlBdHRyOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJp
YnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBmb3IgKDsg
c2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICAv
LyBBbGxvdyBjZXJ0YWluIGNvbW1vbiBhdHRyaWJ1dGVzICh1c2VkIGluIHRoZSBkZWZhdWx0IHN0
eWxlKSBpbiB0aGUgc2VsZWN0b3JzIHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgZWxlbWVudC4KKyAg
ICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkgJiYgIWlzQ29tbW9uQXR0
cmlidXRlU2VsZWN0b3JBdHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1v
bkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVj
dG9yKSB7CisgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoOyBzZWxlY3Rv
cjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIGlmIChzZWxl
Y3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Io
c2VsZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworUnVsZURhdGE6OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yLCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkK
KyAgICA6IG1fcnVsZShydWxlKQorICAgICwgbV9zZWxlY3RvcihzZWxlY3RvcikKKyAgICAsIG1f
c3BlY2lmaWNpdHkoc2VsZWN0b3ItPnNwZWNpZmljaXR5KCkpCisgICAgLCBtX3Bvc2l0aW9uKHBv
c2l0aW9uKQorICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY2FuVXNlRmFzdENoZWNr
U2VsZWN0b3IgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxl
Y3RvcikpCisgICAgLCBtX2hhc011bHRpcGFydFNlbGVjdG9yKCEhc2VsZWN0b3ItPnRhZ0hpc3Rv
cnkoKSkKKyAgICAsIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVs
ZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChzZWxlY3RvcikpCisg
ICAgLCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihXZWJDb3JlOjpjb250YWlu
c1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQorICAgICwgbV9saW5rTWF0Y2hU
eXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZShzZWxlY3RvcikpCisg
ICAgLCBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bikKKyAgICAsIG1faXNJblJlZ2lvblJ1bGUoaW5SZWdpb25SdWxlKQoreworICAgIFNlbGVjdG9y
Q2hlY2tlcjo6Y29sbGVjdElkZW50aWZpZXJIYXNoZXMobV9zZWxlY3RvciwgbV9kZXNjZW5kYW50
U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKK30KKwor
UnVsZVNldDo6UnVsZVNldCgpCisgICAgOiBtX3J1bGVDb3VudCgwKQorICAgICwgbV9hdXRvU2hy
aW5rVG9GaXRFbmFibGVkKHRydWUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0
RmVhdHVyZXNGcm9tU2VsZWN0b3IoU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpJZCkKKyAgICAgICAgZmVhdHVyZXMuaWRzSW5SdWxlcy5hZGQoc2Vs
ZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKKyAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2Vs
ZWN0b3IoKSkKKyAgICAgICAgZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChzZWxlY3Rvci0+YXR0
cmlidXRlKCkubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1
ZG9UeXBlKCkpIHsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExpbmU6CisgICAg
ICAgIGZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0JlZm9yZToKKyAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9BZnRlcjoKKyAgICAgICAgZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB0
cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgor
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6CisgICAgICAgIGZlYXR1cmVzLnVz
ZXNMaW5rUnVsZXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxl
RGF0YShTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0IFJ1bGVEYXRhJiBy
dWxlRGF0YSkKK3sKKyAgICBib29sIGZvdW5kU2libGluZ1NlbGVjdG9yID0gZmFsc2U7CisgICAg
Zm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3RvcigpOyBzZWxlY3Rv
cjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIGNvbGxlY3RG
ZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc2VsZWN0b3IpOworICAgICAgICAKKyAgICAg
ICAgaWYgKENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9y
TGlzdCgpKSB7CisgICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJTZWxlY3RvciA9IHNl
bGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3I7IHN1YlNlbGVjdG9yID0gQ1NTU2VsZWN0
b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9yKSkgeworICAgICAgICAgICAgICAgIGlmICghZm91bmRT
aWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCisgICAgICAg
ICAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHN1YlNlbGVjdG9yKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghZm91bmRTaWJsaW5nU2VsZWN0b3IgJiYg
c2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCisgICAgICAgICAgICBmb3VuZFNpYmxpbmdT
ZWxlY3RvciA9IHRydWU7CisgICAgfQorICAgIGlmIChmb3VuZFNpYmxpbmdTZWxlY3RvcikKKyAg
ICAgICAgZmVhdHVyZXMuc2libGluZ1J1bGVzLmFwcGVuZChTdHlsZVJlc29sdmVyOjpSdWxlRmVh
dHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCksIHJ1bGVEYXRhLmhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4oKSkpOworICAgIGlmIChydWxlRGF0YS5jb250YWluc1VuY29t
bW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1
dGVSdWxlcy5hcHBlbmQoU3R5bGVSZXNvbHZlcjo6UnVsZUZlYXR1cmUocnVsZURhdGEucnVsZSgp
LCBydWxlRGF0YS5zZWxlY3RvcigpLCBydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KCkpKTsKK30KKyAgICAKK3ZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0lt
cGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQorewor
ICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm47CisgICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0
YT4gPiYgcnVsZXMgPSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBpZiAoIXJ1bGVzKQorICAgICAgICBydWxlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UnVsZURh
dGE+KTsKKyAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKK30KKwordm9pZCBSdWxlU2V0Ojph
ZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wg
aW5SZWdpb25SdWxlKQoreworICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9yLCBt
X3J1bGVDb3VudCsrLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tT
ZWxlY3RvciwgaW5SZWdpb25SdWxlKTsKKyAgICBjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEo
bV9mZWF0dXJlcywgcnVsZURhdGEpOworCisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpJZCkgeworICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCku
aW1wbCgpLCBtX2lkUnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKSB7CisgICAgICAg
IGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1fY2xhc3NSdWxlcywgcnVs
ZURhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzZWxlY3Rvci0+aXNVbmtu
b3duUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFs
dWUoKS5pbXBsKCksIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzLCBydWxlRGF0YSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1
ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKSkgeworICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5w
c2V1ZG9UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluazoKKyAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKKyAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQW55TGluazoKKyAgICAgICAgICAgIG1fbGlua1BzZXVkb0NsYXNzUnVs
ZXMuYXBwZW5kKHJ1bGVEYXRhKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6CisgICAgICAgICAgICBtX2ZvY3VzUHNldWRvQ2xhc3NS
dWxlcy5hcHBlbmQocnVsZURhdGEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNl
bGVjdG9yLT50YWcoKS5sb2NhbE5hbWUoKTsKKyAgICBpZiAobG9jYWxOYW1lICE9IHN0YXJBdG9t
KSB7CisgICAgICAgIGFkZFRvUnVsZVNldChsb2NhbE5hbWUuaW1wbCgpLCBtX3RhZ1J1bGVzLCBy
dWxlRGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV91bml2ZXJzYWxSdWxlcy5h
cHBlbmQocnVsZURhdGEpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxlUnVs
ZVBhZ2UqIHJ1bGUpCit7CisgICAgbV9wYWdlUnVsZXMuYXBwZW5kKHJ1bGUpOworfQorCit2b2lk
IFJ1bGVTZXQ6OmFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiByZWdpb25SdWxlLCBib29s
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCit7CisgICAgT3duUHRyPFJ1bGVTZXQ+IHJlZ2lv
blJ1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICAvLyBUaGUgcmVnaW9uIHJ1bGUgc2V0
IHNob3VsZCB0YWtlIGludG8gYWNjb3VudCB0aGUgcG9zaXRpb24gaW5zaWRlIHRoZSBwYXJlbnQg
cnVsZSBzZXQuCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcnVsZXMgaW5zaWRlIHJlZ2lvbiBibG9j
ayBtaWdodCBiZSBpbmNvcnJlY3RseSBwb3NpdGlvbmVkIGJlZm9yZSBvdGhlciBzaW1pbGFyIHJ1
bGVzIGZyb20KKyAgICAvLyB0aGUgc3R5bGVzaGVldCB0aGF0IGNvbnRhaW5zIHRoZSByZWdpb24g
YmxvY2suCisgICAgcmVnaW9uUnVsZVNldC0+bV9ydWxlQ291bnQgPSBtX3J1bGVDb3VudDsKKwor
ICAgIC8vIENvbGxlY3QgdGhlIHJlZ2lvbiBydWxlcyBpbnRvIGEgcnVsZSBzZXQKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSByZWdpb25SdWxl
LT5jaGlsZFJ1bGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkUnVsZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVSdWxlQmFzZSogcmVnaW9uU3R5bGluZ1J1bGUg
PSBjaGlsZFJ1bGVzW2ldLmdldCgpOworICAgICAgICBpZiAocmVnaW9uU3R5bGluZ1J1bGUtPmlz
U3R5bGVSdWxlKCkpCisgICAgICAgICAgICByZWdpb25SdWxlU2V0LT5hZGRTdHlsZVJ1bGUoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpLCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luLCB0cnVlLCB0cnVlKTsKKyAgICB9CisgICAgLy8gVXBkYXRlIHRoZSAiZ2xvYmFs
IiBydWxlIGNvdW50IHNvIHRoYXQgcHJvcGVyIG9yZGVyIGlzIG1haW50YWluZWQKKyAgICBtX3J1
bGVDb3VudCA9IHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50OworCisgICAgbV9yZWdpb25TZWxl
Y3RvcnNBbmRSdWxlU2V0cy5hcHBlbmQoUnVsZVNldFNlbGVjdG9yUGFpcihyZWdpb25SdWxlLT5z
ZWxlY3Rvckxpc3QoKS5maXJzdCgpLCByZWdpb25SdWxlU2V0LnJlbGVhc2UoKSkpOworfQorCit2
b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQs
IGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVSZXNvbHZlciogc3R5bGVT
ZWxlY3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgQVNTRVJUKHNoZWV0
KTsKKworICAgIC8vIE5vIG1lZGlhIGltcGxpZXMgImFsbCIsIGJ1dCBpZiBhIG1lZGlhIGxpc3Qg
ZXhpc3RzIGl0IG11c3QKKyAgICAvLyBjb250YWluIG91ciBjdXJyZW50IG1lZGl1bQorICAgIGlm
IChzaGVldC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1lZGl1bS5ldmFsKHNoZWV0LT5tZWRpYVF1ZXJp
ZXMoKSwgc3R5bGVTZWxlY3RvcikpCisgICAgICAgIHJldHVybjsgLy8gdGhlIHN0eWxlIHNoZWV0
IGRvZXNuJ3QgYXBwbHkKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUlt
cG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzaGVldC0+aW1wb3J0UnVsZXMoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5
bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0gaW1wb3J0UnVsZXNbaV0uZ2V0KCk7CisgICAgICAg
IGlmIChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFpbXBvcnRSdWxlLT5tZWRpYVF1ZXJp
ZXMoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSwgc3R5bGVTZWxl
Y3RvcikpKQorICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0UnVsZS0+c3R5bGVT
aGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IsIHNjb3BlKTsKKyAgICB9CisgICAgYm9vbCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID0gc3R5bGVTZWxlY3RvciAmJiBzdHlsZVNlbGVjdG9y
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHNoZWV0LT5iYXNlVVJM
KCkpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBydWxlcyA9
IHNoZWV0LT5jaGlsZFJ1bGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGUgPSBydWxlc1tpXS5n
ZXQoKTsKKworICAgICAgICBBU1NFUlQoIXJ1bGUtPmlzSW1wb3J0UnVsZSgpKTsKKyAgICAgICAg
aWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGlj
X2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29w
ZSk7CisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkKKyAgICAgICAgICAgIGFk
ZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxlKSk7CisgICAgICAgIGVs
c2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKKyAgICAgICAgICAgIFN0eWxlUnVsZU1lZGlh
KiBtZWRpYVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVNZWRpYSo+KHJ1bGUpOworCisgICAg
ICAgICAgICBpZiAoKCFtZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsKG1l
ZGlhUnVsZS0+bWVkaWFRdWVyaWVzKCksIHN0eWxlU2VsZWN0b3IpKSkgeworICAgICAgICAgICAg
ICAgIC8vIFRyYXZlcnNlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBAbWVkaWEgcnVsZS4KKyAgICAg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVs
ZXMgPSBtZWRpYVJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAg
ICAgICBTdHlsZVJ1bGVCYXNlKiBjaGlsZFJ1bGUgPSBjaGlsZFJ1bGVzW2pdLmdldCgpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoY2hpbGRSdWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGNoaWxk
UnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNQYWdlUnVsZSgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KGNoaWxkUnVs
ZSkpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzRm9udEZhY2VS
dWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRk
IHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQg
c3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHNjb3BlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0
YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4oY2hpbGRSdWxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUo
Zm9udEZhY2VSdWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmlu
dmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2hpbGRSdWxlLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91
ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIpOiBXZSBk
b24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBt
b21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNl
bGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+
KGNoaWxkUnVsZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAv
LyBmb3IgcnVsZXMKKyAgICAgICAgICAgIH0gLy8gaWYgcnVsZXMKKyAgICAgICAgfSBlbHNlIGlm
IChydWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKKyAgICAgICAgICAg
IC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgorICAgICAgICAgICAgLy8gRklYTUUo
QlVHIDcyNDYxKTogV2UgZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxl
IHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBm
b250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVGb250RmFjZSo+KHJ1bGUpOworICAg
ICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShm
b250RmFjZVJ1bGUpOworICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW52YWxpZGF0ZU1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKKyAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1l
c1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CisgICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcy
NDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRz
IGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShz
dGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihydWxlKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAocnVsZS0+aXNSZWdpb25SdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgeworICAgICAgICAgICAg
Ly8gRklYTUUgKEJVRyA3MjQ3Mik6IFdlIGRvbid0IGFkZCBALXdlYmtpdC1yZWdpb24gcnVsZXMg
b2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChz
Y29wZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGFkZFJlZ2lvblJ1
bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4pOworICAgICAgICB9CisgICAgfQorICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVu
YWJsZWQpCisgICAgICAgIHNocmlua1RvRml0KCk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkU3R5
bGVSdWxlKFN0eWxlUnVsZSogcnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBi
b29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlKQoreworICAg
IGZvciAoQ1NTU2VsZWN0b3IqIHMgPSBydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpOyBzOyBz
ID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQorICAgICAgICBhZGRSdWxlKHJ1bGUsIHMsIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpc0luUmVn
aW9uUnVsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQo
UnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKK3sKKyAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6
aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOworICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6
Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQt
PnNlY29uZC0+c2hyaW5rVG9GaXQoKTsKK30KKwordm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgp
Cit7CisgICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1faWRSdWxlcyk7CisgICAgc2hyaW5rTWFw
VmVjdG9yc1RvRml0KG1fY2xhc3NSdWxlcyk7CisgICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1f
dGFnUnVsZXMpOworICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3NoYWRvd1BzZXVkb0VsZW1l
bnRSdWxlcyk7CisgICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5zaHJpbmtUb0ZpdCgpOworICAg
IG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLnNocmlua1RvRml0KCk7CisgICAgbV91bml2ZXJzYWxS
dWxlcy5zaHJpbmtUb0ZpdCgpOworICAgIG1fcGFnZVJ1bGVzLnNocmlua1RvRml0KCk7Cit9CisK
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHRoaXMgaXMgbW9zdGx5IGJvcmlu
ZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBjZXJ0YWluIHJ1bGUgdG8gdGhlIHJlbmRlcnN0eWxl
Li4uCisKK0xlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyKQoreworICAgIHJldHVybiBwcmltaXRpdmVW
YWx1ZSA/IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVy
c2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgVmlld3BvcnRQ
ZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllcikgOiBMZW5n
dGgoVW5kZWZpbmVkKTsKK30KKworTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0
TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKK3sKKyAgICBy
ZXR1cm4gcHJpbWl0aXZlVmFsdWUgPyBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZp
eGVkRmxvYXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNp
b24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZSwgcm9vdFN0eWxlLCBtdWx0
aXBsaWVyKSA6IExlbmd0aChVbmRlZmluZWQpOworfQorCit0ZW1wbGF0ZSA8Ym9vbCBhcHBseUZp
cnN0Pgordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9w
ZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBi
b29sIGluaGVyaXRlZE9ubHksIGJvb2wgZmlsdGVyUmVnaW9uUHJvcGVydGllcykKK3sKKyAgICBB
U1NFUlQoIWZpbHRlclJlZ2lvblByb3BlcnRpZXMgfHwgbV9yZWdpb25Gb3JTdHlsaW5nKTsKKyAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgcnVsZSk7CisKKyAgICB1bnNp
Z25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlDb3VudCgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKKyAgICAgICAgY29u
c3QgQ1NTUHJvcGVydHkmIGN1cnJlbnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUF0KGkpOworICAg
ICAgICBpZiAoaXNJbXBvcnRhbnQgIT0gY3VycmVudC5pc0ltcG9ydGFudCgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmIChpbmhlcml0ZWRPbmx5ICYmICFjdXJyZW50LmlzSW5o
ZXJpdGVkKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBleHBs
aWNpdGx5IGluaGVyaXRlZCwgd2UgbmVlZCB0byBhcHBseSBmdXJ0aGVyIG5vbi1pbmhlcml0ZWQg
cHJvcGVydGllcworICAgICAgICAgICAgLy8gYXMgdGhleSBtaWdodCBvdmVycmlkZSB0aGUgdmFs
dWUgaW5oZXJpdGVkIGhlcmUuIEZvciB0aGlzIHJlYXNvbiB3ZSBkb24ndCBhbGxvdyBkZWNsYXJh
dGlvbnMgd2l0aAorICAgICAgICAgICAgLy8gZXhwbGljaXRseSBpbmhlcml0ZWQgcHJvcGVydGll
cyB0byBiZSBjYWNoZWQuCisgICAgICAgICAgICBBU1NFUlQoIWN1cnJlbnQudmFsdWUoKS0+aXNJ
bmhlcml0ZWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkgPSBjdXJyZW50LmlkKCk7CisKKyAgICAgICAgaWYg
KGZpbHRlclJlZ2lvblByb3BlcnRpZXMgJiYgIVN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRSZWdpb25T
dHlsZVByb3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmIChhcHBseUZpcnN0KSB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChmaXJzdENTU1By
b3BlcnR5ID09IENTU1Byb3BlcnR5Q29sb3IsIENTU19jb2xvcl9pc19maXJzdF9wcm9wZXJ0eSk7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0eVpvb20gPT0gQ1NTUHJvcGVy
dHlDb2xvciArIDE4LCBDU1Nfem9vbV9pc19lbmRfb2ZfZmlyc3RfcHJvcF9yYW5nZSk7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0eUxpbmVIZWlnaHQgPT0gQ1NTUHJvcGVy
dHlab29tICsgMSwgQ1NTX2xpbmVfaGVpZ2h0X2lzX2FmdGVyX3pvb20pOworICAgICAgICAgICAg
Ly8gZ2l2ZSBzcGVjaWFsIHByaW9yaXR5IHRvIGZvbnQteHh4LCBjb2xvciBwcm9wZXJ0aWVzLCBl
dGMKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vIHdlIGFwcGx5IGxpbmUtaGVp
Z2h0IGxhdGVyCisgICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVp
Z2h0KSB7CisgICAgICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBjdXJyZW50LnZhbHVl
KCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3Bl
cnR5TGluZUhlaWdodCkKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBj
dXJyZW50LnZhbHVlKCkpOworICAgIH0KKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFByb2Nlc3NSdWxlKGNvb2tpZSk7Cit9CisKK3RlbXBsYXRlIDxib29sIGFwcGx5Rmlyc3Q+Cit2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBib29sIGlzSW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVu
ZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCit7CisgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90
SW5zaWRlTGluaykgeworICAgICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJ
bmRleDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hl
ZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtYXRjaGVkUHJvcGVydGllcy5saW5rTWF0Y2hU
eXBlOworICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2VyIHRvIHBhc3MgdGhl
c2UgYXMgYXJndW1lbnRzIGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5nZXMgaW4gbWFueSBwbGFjZXMu
CisgICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGxpbmtNYXRjaFR5
cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluazsKKyAgICAgICAgICAgIG1fYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6
Ok1hdGNoVmlzaXRlZDsKKworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPGFwcGx5Rmlyc3Q+
KG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRS
dWxlc1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHksIG1hdGNoZWRQcm9wZXJ0aWVzLmlz
SW5SZWdpb25SdWxlKTsKKyAgICAgICAgfQorICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSA9IHRydWU7CisgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGkgPSBzdGFy
dEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKKyAgICAgICAgY29uc3QgTWF0Y2hlZFByb3Bl
cnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNb
aV07CisgICAgICAgIGFwcGx5UHJvcGVydGllczxhcHBseUZpcnN0PihtYXRjaGVkUHJvcGVydGll
cy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0
YW50LCBpbmhlcml0ZWRPbmx5LCBtYXRjaGVkUHJvcGVydGllcy5pc0luUmVnaW9uUnVsZSk7Cisg
ICAgfQorfQorCit1bnNpZ25lZCBTdHlsZVJlc29sdmVyOjpjb21wdXRlTWF0Y2hlZFByb3BlcnRp
ZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBzaXpl
KQoreworICAgIAorICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkocHJvcGVydGll
cywgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIHNpemUpOworfQorCitib29sIG9wZXJhdG9y
PT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmFuZ2VzJiBiKQoreworICAgIHJldHVybiBhLmZpcnN0VUFSdWxlID09IGIuZmly
c3RVQVJ1bGUKKyAgICAgICAgJiYgYS5sYXN0VUFSdWxlID09IGIubGFzdFVBUnVsZQorICAgICAg
ICAmJiBhLmZpcnN0QXV0aG9yUnVsZSA9PSBiLmZpcnN0QXV0aG9yUnVsZQorICAgICAgICAmJiBh
Lmxhc3RBdXRob3JSdWxlID09IGIubGFzdEF1dGhvclJ1bGUKKyAgICAgICAgJiYgYS5maXJzdFVz
ZXJSdWxlID09IGIuZmlyc3RVc2VyUnVsZQorICAgICAgICAmJiBhLmxhc3RVc2VyUnVsZSA9PSBi
Lmxhc3RVc2VyUnVsZTsKK30KKworYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlUmVzb2x2ZXI6
Ok1hdGNoUmFuZ2VzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJhbmdlcyYgYikKK3sK
KyAgICByZXR1cm4gIShhID09IGIpOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVS
ZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNo
ZWRQcm9wZXJ0aWVzJiBiKQoreworICAgIHJldHVybiBhLnByb3BlcnRpZXMgPT0gYi5wcm9wZXJ0
aWVzICYmIGEubGlua01hdGNoVHlwZSA9PSBiLmxpbmtNYXRjaFR5cGU7Cit9CisKK2Jvb2wgb3Bl
cmF0b3IhPShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYgYSwgY29uc3Qg
U3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7CisgICAgcmV0dXJuICEoYSA9
PSBiKTsKK30KKworY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0
ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSh1bnNpZ25l
ZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCit7CisgICAgQVNTRVJUKGhh
c2gpOworCisgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsKKyAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJv
cGVydGllc0NhY2hlLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBNYXRjaGVkUHJvcGVy
dGllc0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnNlY29uZDsKKworICAgIHNpemVfdCBzaXpl
ID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOworICAgIGlmIChzaXplICE9
IGNhY2hlSXRlbS5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChtYXRj
aFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRp
ZXNbaV0pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKGNhY2hlSXRlbS5y
YW5nZXMgIT0gbWF0Y2hSZXN1bHQucmFuZ2VzKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gJmNhY2hlSXRlbTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphZGRUb01hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUsIHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCkKK3sKKyAgICBzdGF0aWMgdW5zaWduZWQgbWF0Y2hlZERlY2xhcmF0aW9uQ2FjaGVBZGRpdGlv
bnNCZXR3ZWVuU3dlZXBzID0gMTAwOworICAgIGlmICgrK21fbWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwID49IG1hdGNoZWREZWNsYXJhdGlvbkNhY2hlQWRkaXRp
b25zQmV0d2VlblN3ZWVwcykgeworICAgICAgICBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUo
KTsKKyAgICAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dl
ZXAgPSAwOworICAgIH0KKworICAgIEFTU0VSVChoYXNoKTsKKyAgICBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbSBjYWNoZUl0ZW07CisgICAgY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLmFw
cGVuZChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcyk7CisgICAgY2FjaGVJdGVtLnJhbmdl
cyA9IG1hdGNoUmVzdWx0LnJhbmdlczsKKyAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgY2FjaGUg
dGhlIG9yaWdpbmFsIFJlbmRlclN0eWxlIGluc3RhbmNlLiBJdCBtYXkgYmUgZnVydGhlciBtb2Rp
ZmllZC4KKyAgICAvLyBUaGUgUmVuZGVyU3R5bGUgaW4gdGhlIGNhY2hlIGlzIHJlYWxseSBqdXN0
IGEgaG9sZGVyIGZvciB0aGUgc3Vic3RydWN0dXJlcyBhbmQgbmV2ZXIgdXNlZCBhcy1pcy4KKyAg
ICBjYWNoZUl0ZW0ucmVuZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3R5bGUpOworICAg
IGNhY2hlSXRlbS5wYXJlbnRSZW5kZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShwYXJlbnRT
dHlsZSk7CisgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmFkZChoYXNoLCBjYWNoZUl0ZW0p
OworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0Nh
Y2hlKCkKK3sKKyAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuY2xlYXIoKTsKK30KKworc3Rh
dGljIGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpCit7CisgICAgLy8gRklYTUU6IENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01v
ZGUgbW9kaWZpZXMgc3RhdGUgd2hlbiBhcHBseWluZyB0byBkb2N1bWVudCBlbGVtZW50LiBXZSBj
YW4ndCBza2lwIHRoZSBhcHBseWluZyBieSBjYWNoaW5nLgorICAgIGlmIChlbGVtZW50ID09IGVs
ZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpICYmIGVsZW1lbnQtPmRvY3VtZW50
KCktPndyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChzdHlsZS0+dW5pcXVlKCkgfHwgKHN0eWxlLT5zdHlsZVR5cGUoKSAhPSBO
T1BTRVVETyAmJiBwYXJlbnRTdHlsZS0+dW5pcXVlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoc3R5bGUtPnpvb20oKSAhPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIFRoZSBjYWNoZSBhc3N1bWVzIHN0YXRpYyBrbm93
bGVkZ2UgYWJvdXQgd2hpY2ggcHJvcGVydGllcyBhcmUgaW5oZXJpdGVkLgorICAgIGlmIChwYXJl
bnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0KQorewor
ICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNoUmVzdWx0LmlzQ2FjaGVhYmxlID8gY29tcHV0
ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5kYXRh
KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkgOiAwOworICAgIGJvb2wg
YXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CisgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXND
YWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7CisgICAgaWYgKGNhY2hlSGFzaCAmJiAoY2FjaGVJdGVt
ID0gZmluZEZyb21NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQp
KSkgeworICAgICAgICAvLyBXZSBjYW4gYnVpbGQgdXAgdGhlIHN0eWxlIGJ5IGNvcHlpbmcgbm9u
LWluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gYW4gZWFybGllciBzdHlsZSBvYmplY3QgYnVpbHQg
dXNpbmcgdGhlIHNhbWUgZXhhY3QKKyAgICAgICAgLy8gc3R5bGUgZGVjbGFyYXRpb25zLiBXZSB0
aGVuIG9ubHkgbmVlZCB0byBhcHBseSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMsIGlmIGFueSwg
YXMgdGhlaXIgdmFsdWVzIGNhbiBkZXBlbmQgb24gdGhlIAorICAgICAgICAvLyBlbGVtZW50IGNv
bnRleHQuIFRoaXMgaXMgZmFzdCBhbmQgc2F2ZXMgbWVtb3J5IGJ5IHJldXNpbmcgdGhlIHN0eWxl
IGRhdGEgc3RydWN0dXJlcy4KKyAgICAgICAgbV9zdHlsZS0+Y29weU5vbkluaGVyaXRlZEZyb20o
Y2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgIGlmIChtX3BhcmVudFN0eWxl
LT5pbmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVuZGVyU3R5bGUuZ2V0KCkp
KSB7CisgICAgICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0gbV9zdHlsZS0+aW5zaWRl
TGluaygpOworICAgICAgICAgICAgLy8gSWYgdGhlIGNhY2hlIGl0ZW0gcGFyZW50IHN0eWxlIGhh
cyBpZGVudGljYWwgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gdGhlIGN1cnJlbnQgcGFyZW50IHN0
eWxlIHRoZW4gdGhlCisgICAgICAgICAgICAvLyByZXN1bHRpbmcgc3R5bGUgd2lsbCBiZSBpZGVu
dGljYWwgdG9vLiBXZSBjb3B5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcyBvdmVyIGZyb20gdGhl
IGNhY2hlIGFuZCBhcmUgZG9uZS4KKyAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKGNh
Y2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVs
eSB0aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBsaWtlIGFuIGluaGVyaXRlZCBwcm9wZXJ0eS4g
V2UgbmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUgaXQuCisgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IHRydWU7IAorICAgIH0KKyAgICAvLyBOb3cg
d2UgaGF2ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVsZXMgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVy
LiBXYWxrIHRoZSBydWxlcyBhbmQgYXBwbHkKKyAgICAvLyBoaWdoLXByaW9yaXR5IHByb3BlcnRp
ZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRl
cGVuZCBvbi4KKyAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGltcG9y
dGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRh
bnQKKyAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQuCisgICAgbV9saW5lSGVpZ2h0VmFs
dWUgPSAwOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8dHJ1ZT4obWF0Y2hSZXN1bHQsIGZh
bHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUlu
aGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8dHJ1ZT4obWF0Y2hSZXN1
bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPHRydWU+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJ
bmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KG1hdGNoUmVz
dWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworCisgICAgaWYgKGNhY2hlSXRl
bSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbV9zdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIG1fZm9udERpcnR5ID0gdHJ1ZTsKKyAgICAgICAg
YXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgb3VyIGZvbnQg
Z290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgorICAgIHVwZGF0ZUZvbnQo
KTsKKworICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lk
ZWQgb24gdGhlIGZvbnQtc2l6ZS4KKyAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCisgICAgICAg
IGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7
CisKKyAgICAvLyBNYW55IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBjaGFu
Z2VzIHdlIGp1c3QgYXBwbHkgYWxsIHByb3BlcnRpZXMuCisgICAgaWYgKGNhY2hlSXRlbSAmJiBj
YWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBtX3N0eWxlLT5mb250
RGVzY3JpcHRpb24oKSkKKyAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CisKKyAg
ICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBwcmlvcml0eSBVQSBwcm9wZXJ0aWVzLgorICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJ
bmhlcml0ZWRPbmx5KTsKKyAgICAKKyAgICAvLyBDYWNoZSBvdXIgYm9yZGVyIGFuZCBiYWNrZ3Jv
dW5kIHNvIHRoYXQgd2UgY2FuIGV4YW1pbmUgdGhlbSBsYXRlci4KKyAgICBjYWNoZUJvcmRlckFu
ZEJhY2tncm91bmQoKTsKKyAgICAKKyAgICAvLyBOb3cgZG8gdGhlIGF1dGhvciBhbmQgdXNlciBu
b3JtYWwgcHJpb3JpdHkgcHJvcGVydGllcyBhbmQgYWxsIHRoZSAhaW1wb3J0YW50IHByb3BlcnRp
ZXMuCisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4obWF0Y2hSZXN1bHQsIGZhbHNl
LCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSArIDEsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczxmYWxzZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihtYXRj
aFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVz
dWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxmYWxzZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5o
ZXJpdGVkT25seSk7CisgICAgCisgICAgbG9hZFBlbmRpbmdJbWFnZXMoKTsKKyAgICAKKyNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCisgICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisjZW5kaWYKKyAg
ICAKKyAgICBBU1NFUlQoIW1fZm9udERpcnR5KTsKKyAgICAKKyAgICBpZiAoY2FjaGVJdGVtIHx8
ICFjYWNoZUhhc2gpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRj
aGVkUHJvcGVydGllc0NhY2hlKG1fZWxlbWVudCwgbV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHls
ZSkpCisgICAgICAgIHJldHVybjsKKyAgICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUobV9z
dHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2Uq
IHIxLCBjb25zdCBTdHlsZVJ1bGVQYWdlKiByMikKK3sKKyAgICByZXR1cm4gcjEtPnNlbGVjdG9y
KCktPnNwZWNpZmljaXR5KCkgPCByMi0+c2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKTsKK30KKwor
dm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBS
dWxlU2V0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBT
dHJpbmcmIHBhZ2VOYW1lKQoreworICAgIGlmICghcnVsZXMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4gbWF0Y2hlZFBhZ2VSdWxlczsKKyAgICBtYXRjaFBh
Z2VSdWxlc0Zvckxpc3QobWF0Y2hlZFBhZ2VSdWxlcywgcnVsZXMtPnBhZ2VSdWxlcygpLCBpc0xl
ZnRQYWdlLCBpc0ZpcnN0UGFnZSwgcGFnZU5hbWUpOworICAgIGlmIChtYXRjaGVkUGFnZVJ1bGVz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpzdGFibGVfc29ydChtYXRj
aGVkUGFnZVJ1bGVzLmJlZ2luKCksIG1hdGNoZWRQYWdlUnVsZXMuZW5kKCksIGNvbXBhcmVQYWdl
UnVsZXMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoZWRQYWdlUnVsZXMu
c2l6ZSgpOyBpKyspCisgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgbWF0Y2hl
ZFBhZ2VSdWxlc1tpXS0+cHJvcGVydGllcygpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpt
YXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVz
LCBjb25zdCBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBi
b29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQoreworICAgIHVuc2lnbmVk
IHNpemUgPSBydWxlcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVQYWdlKiBydWxlID0gcnVsZXNbaV07CisgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JMb2NhbE5hbWUgPSBydWxlLT5zZWxlY3Rvcigp
LT50YWcoKS5sb2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKHNlbGVjdG9yTG9jYWxOYW1lICE9IHN0
YXJBdG9tICYmIHNlbGVjdG9yTG9jYWxOYW1lICE9IHBhZ2VOYW1lKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHBzZXVkb1R5cGUgPSBydWxl
LT5zZWxlY3RvcigpLT5wc2V1ZG9UeXBlKCk7CisgICAgICAgIGlmICgocHNldWRvVHlwZSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvTGVmdFBhZ2UgJiYgIWlzTGVmdFBhZ2UpCisgICAgICAgICAgICB8
fCAocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvUmlnaHRQYWdlICYmIGlzTGVmdFBh
Z2UpCisgICAgICAgICAgICB8fCAocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRmly
c3RQYWdlICYmICFpc0ZpcnN0UGFnZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUg
aXQuCisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMgPSBydWxlLT5wcm9wZXJ0
aWVzKCk7CisgICAgICAgIGlmICghcHJvcGVydGllcyB8fCBwcm9wZXJ0aWVzLT5pc0VtcHR5KCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91
ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCisgICAgICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVs
ZSk7CisgICAgfQorfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJ
bmRleCkgY29uc3QKK3sKKyAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IGZhbHNlOworICAgIGlm
ICghbV9yb290RWxlbWVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAg
IGlzRmlyc3RQYWdlTGVmdCA9IHRydWU7CisKKyAgICByZXR1cm4gKHBhZ2VJbmRleCArIChpc0Zp
cnN0UGFnZUxlZnQgPyAxIDogMCkpICUgMjsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjppc0Zp
cnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBJbiBjYXNlIG9m
IGZvcmNlZCBsZWZ0L3JpZ2h0IHBhZ2UsIHBhZ2UgYXQgaW5kZXggMSAobm90IDApIGNhbiBiZSB0
aGUgZmlyc3QgcGFnZS4KKyAgICByZXR1cm4gKCFwYWdlSW5kZXgpOworfQorCitTdHJpbmcgU3R5
bGVSZXNvbHZlcjo6cGFnZU5hbWUoaW50IC8qIHBhZ2VJbmRleCAqLykgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHBhZ2UgaW5kZXggdG8gcGFnZSBuYW1lIG1hcHBpbmcuCisgICAg
cmV0dXJuICIiOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgTGlzdFR5cGU+CitzdGF0aWMgdm9pZCBj
b2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1
bGU+ID4mIHdyYXBwZXJNYXAsIExpc3RUeXBlKiBsaXN0VHlwZSkKK3sKKyAgICBpZiAoIWxpc3RU
eXBlKQorICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgc2l6ZSA9IGxpc3RUeXBlLT5sZW5n
dGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAg
IENTU1J1bGUqIGNzc1J1bGUgPSBsaXN0VHlwZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKGNzc1J1
bGUtPmlzSW1wb3J0UnVsZSgpKQorICAgICAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3Jh
cHBlck1hcCwgc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KGNzc1J1bGUpLT5zdHlsZVNoZWV0
KCkpOworICAgICAgICBlbHNlIGlmIChjc3NSdWxlLT5pc01lZGlhUnVsZSgpKQorICAgICAgICAg
ICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwgc3RhdGljX2Nhc3Q8Q1NTTWVkaWFS
dWxlKj4oY3NzUnVsZSkpOworICAgICAgICBlbHNlIGlmIChjc3NSdWxlLT5pc1JlZ2lvblJ1bGUo
KSkKKyAgICAgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19j
YXN0PFdlYktpdENTU1JlZ2lvblJ1bGUqPihjc3NSdWxlKSk7CisgICAgICAgIGVsc2UgaWYgKGNz
c1J1bGUtPmlzU3R5bGVSdWxlKCkpIHsKKyAgICAgICAgICAgIENTU1N0eWxlUnVsZSogY3NzU3R5
bGVSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY3NzUnVsZSk7CisgICAgICAgICAg
ICB3cmFwcGVyTWFwLmFkZChjc3NTdHlsZVJ1bGUtPnN0eWxlUnVsZSgpLCBjc3NTdHlsZVJ1bGUp
OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVy
cyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdyYXBwZXJNYXAs
IEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0V3JhcHBlclNldCwgU3R5bGVT
aGVldEludGVybmFsKiBzdHlsZVNoZWV0KQoreworICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAg
ICAgcmV0dXJuOworICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBzdHlsZVNoZWV0V3JhcHBlciA9
IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShzdHlsZVNoZWV0KTsKKyAgICBzaGVldFdyYXBwZXJTZXQu
YWRkKHN0eWxlU2hlZXRXcmFwcGVyKTsKKyAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVy
TWFwLCBzdHlsZVNoZWV0V3JhcHBlci5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RD
U1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYg
d3JhcHBlck1hcCwgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYgc2hlZXRXcmFwcGVy
U2V0LCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVNoZWV0PiA+JiBzdHlsZVNoZWV0cyA9IGRvY3VtZW50LT5zdHlsZVNoZWV0cygpLT52ZWN0b3Io
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHN0eWxlU2hlZXRzW2ldLmdldCgp
OworICAgICAgICBpZiAoIXN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0
YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7CisgICAgfQorICAgIGNvbGxl
Y3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHNoZWV0V3JhcHBlclNldCwgZG9jdW1lbnQtPnBh
Z2VVc2VyU2hlZXQoKSk7Cit9CisKK0NTU1N0eWxlUnVsZSogU3R5bGVSZXNvbHZlcjo6ZW5zdXJl
RnVsbENTU09NV3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgaWYg
KG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbGxl
Y3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVl
dENTU09NV3JhcHBlclNldCwgc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpOworICAgICAgICBjb2xs
ZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hl
ZXRDU1NPTVdyYXBwZXJTZXQsIGRlZmF1bHRTdHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENT
U09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NT
T01XcmFwcGVyU2V0LCBxdWlya3NTdHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3Jh
cHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFw
cGVyU2V0LCBzdmdTdHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9z
dHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBt
YXRoTUxTdHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1
bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBtZWRpYUNv
bnRyb2xzU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVS
dWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgZnVsbHNj
cmVlblN0eWxlU2hlZXQpOworCisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVS
dWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgZG9jdW1l
bnQoKSk7CisgICAgfQorICAgIHJldHVybiBtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLmdl
dChydWxlKS5nZXQoKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9T
dHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHls
ZSkKK3sKKyAgICBpbml0RWxlbWVudCgwKTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKDAsIHN0
eWxlKTsKKyAgICBtX3N0eWxlID0gc3R5bGU7CisgICAgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0
eWxlKGlkLCB2YWx1ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRv
Q3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoaWQsIHZhbHVlKTsKK30KKworaW5saW5l
IGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKK3sKKyAg
ICBzd2l0Y2ggKGlkKSB7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJSaWdodENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dEVtcGhhc2lzQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29s
b3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKKyAgICAvLyBB
bHNvIGFsbG93IHNob3J0aGFuZHMgc28gdGhhdCBpbmhlcml0L2luaXRpYWwgc3RpbGwgd29yay4K
KyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyTGVmdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQ6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclRvcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlOgorI2lmIEVOQUJMRShTVkcpCisgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGw6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVN0cm9rZToKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtcmVnaW9ucy8jdGhlLWF0LXJlZ2lv
bi1zdHlsZS1ydWxlCisvLyBGSVhNRTogYWRkIGluY3JlbWVudGFsIHN1cHBvcnQgZm9yIG90aGVy
IHJlZ2lvbiBzdHlsaW5nIHByb3BlcnRpZXMuCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpp
c1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQoreworICAgIHN3aXRj
aCAoaWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKKy8vIFNWRyBoYW5kbGVzIHpvb21pbmcgaW4gYSBkaWZmZXJlbnQg
d2F5IGNvbXBhcmVkIHRvIENTUy4gVGhlIHdob2xlIGRvY3VtZW50IGlzIHNjYWxlZCBpbnN0ZWFk
CisvLyBvZiBlYWNoIGluZGl2aWR1YWwgbGVuZ3RoIHZhbHVlIGluIHRoZSByZW5kZXIgc3R5bGUg
LyB0cmVlLiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCooKQorLy8gbXVsdGlwbGll
cyBlYWNoIHJlc29sdmVkIGxlbmd0aCB3aXRoIHRoZSB6b29tIG11bHRpcGxpZXIgLSBzbyBmb3Ig
U1ZHIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGF0LgorLy8gVGhvdWdoIGFsbCBDU1MgdmFsdWVzIHRo
YXQgY2FuIGJlIGFwcGxpZWQgdG8gb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnRzICh3aWR0aC9oZWln
aHQvYm9yZGVyL3BhZGRpbmcuLi4pCisvLyBuZWVkIHRvIHJlc3BlY3QgdGhlIHNjYWxpbmcuIFJl
bmRlckJveCAodGhlIHBhcmVudCBjbGFzcyBvZiBSZW5kZXJTVkdSb290KSBncmFicyB2YWx1ZXMg
bGlrZQorLy8gd2lkdGgvaGVpZ2h0L2JvcmRlci9wYWRkaW5nLy4uLiBmcm9tIHRoZSBSZW5kZXJT
dHlsZSAtPiBmb3IgU1ZHIHRoZXNlIHZhbHVlcyB3b3VsZCBuZXZlciBzY2FsZSwKKy8vIGlmIHdl
J2QgcGFzcyBhIDEuMCB6b29tIGZhY3RvciBldmVyeWh3ZXJlLiBTbyB3ZSBvbmx5IHBhc3MgYSB6
b29tIGZhY3RvciBvZiAxLjAgZm9yIHNwZWNpZmljCisvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5P
VCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93
b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KK2Jvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1
bGVzKCkKK3sKKyAgICByZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50
KCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQorCitzdGF0aWMgYm9vbCBjcmVh
dGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5
bGVSZXNvbHZlciogc2VsZWN0b3IsIExlbmd0aCYgbGVuZ3RoKQoreworICAgIExlbmd0aCB3b3Jr
aW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJz
aW9uIHwgQXV0b0NvbnZlcnNpb24+KHNlbGVjdG9yLT5zdHlsZSgpLCBzZWxlY3Rvci0+cm9vdEVs
ZW1lbnRTdHlsZSgpLCBzZWxlY3Rvci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBp
ZiAod29ya2luZ0xlbmd0aC5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCisgICAgICAgIHdvcmtpbmdMZW5n
dGguc2V0UXVpcmsocHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1ZSgpKTsKKworICAgIGxlbmd0
aCA9IHdvcmtpbmdMZW5ndGg7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNy
ZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8TGVuZ3RoPiYgbGVuZ3Ro
cywgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCit7CisgICAgLy8gSGFuZGxlICdub25lJy4KKyAg
ICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Tm9uZSkgeworICAgICAgICAgICAgbGVuZ3Rocy5hcHBlbmQoTGVuZ3RoKFVuZGVmaW5lZCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgeworICAgICAgICBmb3Ig
KENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgp
KSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOworICAgICAg
ICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIExlbmd0aCBsZW5ndGg7CisgICAgICAgICAg
ICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihjdXJyVmFsdWUpLCBzZWxlY3RvciwgbGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGxlbmd0aHMuYXBwZW5kKGxlbmd0aCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CisKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRQb3NpdGlvbihDU1NWYWx1ZSogdmFsdWUsIExlbmd0
aCYgcG9zaXRpb24pCit7CisgICAgLy8gRm9yIG5vdywgd2Ugb25seSBhY2NlcHQ6IDxpbnRlZ2Vy
PiB8ICdhdXRvJworICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpOworICAgIHBvc2l0aW9u
LnNldFZhbHVlKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKyNlbmRpZgorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQoreworICAgIGJvb2wgaXNJbmhlcml0ID0gbV9w
YXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7CisgICAgYm9vbCBpc0luaXRp
YWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+
aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKworICAgIEFTU0VSVCghaXNJbmhlcml0IHx8ICFpc0luaXRp
YWwpOyAvLyBpc0luaGVyaXQgLT4gIWlzSW5pdGlhbCAmJiBpc0luaXRpYWwgLT4gIWlzSW5oZXJp
dAorCisgICAgaWYgKCFhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAoIWFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHko
aWQpKSkgeworICAgICAgICAvLyBMaW1pdCB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBs
aWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChpc0luaGVyaXQgJiYgbV9wYXJlbnRTdHlsZSAmJiAhbV9wYXJl
bnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVy
dHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQorICAgICAgICBtX3BhcmVudFN0eWxlLT5zZXRI
YXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOworCisgICAgLy8gY2hlY2sgbG9va3Vw
IHRhYmxlIGZvciBpbXBsZW1lbnRhdGlvbnMgYW5kIHVzZSB3aGVuIGF2YWlsYWJsZQorICAgIGNv
bnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IG1fc3R5bGVCdWlsZGVyLnByb3BlcnR5SGFu
ZGxlcihpZCk7CisgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKSB7CisgICAgICAgIGlmIChpc0lu
aGVyaXQpCisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKHRoaXMpOworICAg
ICAgICBlbHNlIGlmIChpc0luaXRpYWwpCisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlh
bFZhbHVlKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFs
dWUodGhpcywgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSA/IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpIDogMDsKKworICAgIGZsb2F0IHpv
b21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7CisKKyAgICAvLyBXaGF0IGZvbGxv
d3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpciBjb3Jy
ZXNwb25kaW5nIGZyb250LWVuZAorICAgIC8vIFJlbmRlclN0eWxlIHZhbHVlcy4gU2hvcnRoYW5k
cyAoZS5nLiBib3JkZXIsIGJhY2tncm91bmQpIG9jY3VyIGluIHRoaXMgbGlzdCBhcyB3ZWxsIGFu
ZAorICAgIC8vIGFyZSBvbmx5IGhpdCB3aGVuIG1hcHBpbmcgImluaGVyaXQiIG9yICJpbml0aWFs
IiBpbnRvIGZyb250LWVuZCB2YWx1ZXMuCisgICAgc3dpdGNoIChpZCkgeworICAgIC8vIGxpc3Rz
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6CisgICAgICAgIC8vIGxpc3Qgb2Ygc3RyaW5n
LCB1cmksIGNvdW50ZXIsIGF0dHIsIGkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRklYTUU6
IEluIENTUzMsIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gaW5oZXJpdCBjb250ZW50LiBJbiBDU1My
IGl0IGlzIG5vdC4gVGhpcworICAgICAgICAgICAgLy8gbm90ZSBpcyBhIHJlbWluZGVyIHRoYXQg
ZXZlbnR1YWxseSAiaW5oZXJpdCIgbmVlZHMgdG8gYmUgc3VwcG9ydGVkLgorCisgICAgICAgICAg
ICBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250ZW50
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgYm9vbCBkaWRTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQ1NTVmFs
dWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAg
ICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAg
ICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0p
KSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyNlbmRpZgor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlVmFs
dWUoKSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNhY2hlZE9y
UGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdl
VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwor
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkgeworICAgICAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5n
VmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQXR0cigpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lm
aWVkIGZvciBhbiBhdHRyKGZvbyk/CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5z
dHlsZVR5cGUoKSA9PSBOT1BTRVVETykKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUt
PnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3BhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
UXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVl
KCkuaW1wbCgpLCBudWxsQXRvbSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUgPSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6
IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0
cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlCisgICAgICAgICAgICAgICAgICAgIG1fZmVh
dHVyZXMuYXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQ291bnRlcigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50ZXJWYWx1ZSA9IGNvbnRlbnRWYWx1ZS0+Z2V0Q291
bnRlclZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIEVMaXN0U3R5bGVUeXBlIGxpc3RTdHls
ZVR5cGUgPSBOb25lTGlzdFN0eWxlOworICAgICAgICAgICAgICAgICAgICBpbnQgbGlzdFN0eWxl
SWRlbnQgPSBjb3VudGVyVmFsdWUtPmxpc3RTdHlsZUlkZW50KCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICAgICAg
ICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RT
dHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKKyAgICAgICAgICAgICAgICAgICAgT3duUHRyPENv
dW50ZXJDb250ZW50PiBjb3VudGVyID0gYWRvcHRQdHIobmV3IENvdW50ZXJDb250ZW50KGNvdW50
ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFy
YXRvcigpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY291bnRl
ci5yZWxlYXNlKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChj
b250ZW50VmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZU9wZW5RdW90ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRl
bnQoT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVvdGU6CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRDb250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9PcGVuUXVvdGU6CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE5PX09QRU5fUVVPVEUsIGRpZFNldCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0Nsb3NlUXVv
dGU6CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE5PX0NMT1NF
X1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsIGFuZCBub25lIGRvIG5vdCBo
YXZlIGFueSBlZmZlY3QuCisgICAgICAgICAgICAgICAgICAgICAgICB7IH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICghZGlkU2V0KQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQ29udGVudCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3Rl
czoKKyAgICAgICAgaWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgaWYgKG1fcGFyZW50U3R5
bGUpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKG1fcGFyZW50U3R5bGUtPnF1
b3RlcygpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNJ
bml0aWFsKSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoMCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7
CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPih2YWx1ZSk7CisgICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0YTo6
Y3JlYXRlKGxpc3QtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47IC8vIE91dCBvZiBtZW1vcnkKKyAgICAgICAgICAgIFN0cmluZyogcXVv
dGVzID0gZGF0YS0+ZGF0YSgpOworICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRv
ciBpID0gbGlzdDsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgICAgICAgICAg
Q1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZW0t
PmlzUHJpbWl0aXZlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgICAgIEFT
U0VSVChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcXVvdGVz
W2kuaW5kZXgoKV0gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhhZG9wdFJlZihkYXRhKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUpIHsKKyAgICAgICAgICAgIEFTU0VSVChw
cmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0UXVvdGVzKGFkb3B0UmVmKFF1b3Rlc0RhdGE6OmNyZWF0ZSgwKSkpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseTogeworICAgICAg
ICAvLyBsaXN0IG9mIHN0cmluZ3MgYW5kIGlkcworICAgICAgICBpZiAoaXNJbmhlcml0KSB7Cisg
ICAgICAgICAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9udERlc2NyaXB0aW9uID0gbV9wYXJl
bnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShwYXJlbnRGb250RGVzY3JpcHRpb24u
Z2VuZXJpY0ZhbWlseSgpKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHko
cGFyZW50Rm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkpOworICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRGb250RGVzY3JpcHRpb24uaXNTcGVj
aWZpZWRGb250KCkpOworICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNJ
bml0aWFsKSB7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gaW5pdGlhbERlc2MgPSBGb250
RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5lcmljIGZhbWlseSBjaGFu
Z2UgZnJvbSBtb25vc3BhY2UKKyAgICAgICAgICAgIC8vIHRvIG5vbi1tb25vc3BhY2UuCisgICAg
ICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0
aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKKyAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShm
b250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwg
Q1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxz
ZSkpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoaW5pdGlh
bERlc2MuZ2VuZXJpY0ZhbWlseSgpKTsKKyAgICAgICAgICAgIGlmICghaW5pdGlhbERlc2MuZmly
c3RGYW1pbHkoKS5mYW1pbHlJc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldEZhbWlseShpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpKTsKKyAgICAgICAgICAgIHNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1f
c3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RmFtaWx5JiBmaXJzdEZhbWls
eSA9IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOworICAgICAgICBGb250RmFtaWx5KiBj
dXJyRmFtaWx5ID0gMDsKKworICAgICAgICAvLyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250
LWZhbWlseSBwcm9wZXJ0eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KKyAg
ICAgICAgYm9vbCBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlwdGlv
bi51c2VGaXhlZERlZmF1bHRTaXplKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5l
cmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworCisgICAgICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsK
KyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOworICAgICAgICAgICAgaWYg
KCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBmYWNl
OworICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCkt
PnNldHRpbmdzKCk7CisgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKQor
ICAgICAgICAgICAgICAgIGZhY2UgPSBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Cisg
ICAgICAgICAgICBlbHNlIGlmIChzZXR0aW5ncykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAo
Y29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdEJvZHk6CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzZXR0aW5ncy0+c3RhbmRh
cmRGb250RmFtaWx5KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHNlcmlm
RmFtaWx5OworICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0Zh
bWlseShGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5KTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKKyAgICAgICAg
ICAgICAgICAgICAgZmFjZSA9IHNhbnNTZXJpZkZhbWlseTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTYW5zU2Vy
aWZGYW1pbHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlQ3Vyc2l2ZToKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IGN1cnNpdmVG
YW1pbHk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFt
aWx5KEZvbnREZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAgICAgICAg
ICAgICAgICAgICBmYWNlID0gZmFudGFzeUZhbWlseTsKKyAgICAgICAgICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpGYW50YXN5RmFt
aWx5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZU1vbm9zcGFjZToKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IG1vbm9zcGFjZUZh
bWlseTsKKyAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1p
bHkoRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoK
KyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHBpY3RvZ3JhcGhGYW1pbHk7CisgICAgICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlv
bjo6UGljdG9ncmFwaEZhbWlseSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFmYWNlLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgICAgIGlmICghY3VyckZhbWlseSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBGaWxsaW5nIGluIHRoZSBmaXJzdCBmYW1pbHkuCisgICAgICAgICAgICAgICAg
ICAgIGZpcnN0RmFtaWx5LnNldEZhbWlseShmYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgZmly
c3RGYW1pbHkuYXBwZW5kRmFtaWx5KDApOyAvLyBSZW1vdmUgYW55IGluaGVyaXRlZCBmYW1pbHkt
ZmFsbGJhY2sgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgY3VyckZhbWlseSA9ICZmaXJzdEZh
bWlseTsKKyAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVk
Rm9udChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpID09IEZvbnREZXNjcmlwdGlvbjo6
Tm9GYW1pbHkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5Ojpj
cmVhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3RmFtaWx5LT5zZXRGYW1pbHkoZmFjZSk7
CisgICAgICAgICAgICAgICAgICAgIGN1cnJGYW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1pbHkp
OworICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFdl
IGNhbid0IGNhbGwgdXNlRml4ZWREZWZhdWx0U2l6ZSgpIHVudGlsIGFsbCBuZXcgZm9udCBmYW1p
bGllcyBoYXZlIGJlZW4gYWRkZWQKKyAgICAgICAgLy8gSWYgY3VyckZhbWlseSBpcyBub24temVy
byB0aGVuIHdlIHNldCBhdCBsZWFzdCBvbmUgZmFtaWx5IG9uIHRoaXMgZGVzY3JpcHRpb24uCisg
ICAgICAgIGlmIChjdXJyRmFtaWx5KSB7CisgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9u
LmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAh
PSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkKKyAgICAgICAgICAgICAgICBzZXRGb250
U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1l
bnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAx
LCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKworICAgICAgICAgICAgc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKy8vIHNob3J0aGFuZCBwcm9wZXJ0aWVzCisgICAgY2FzZSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmQ6CisgICAgICAgIGlmIChpc0luaXRpYWwpIHsKKyAgICAgICAgICAgIG1fc3R5bGUt
PmNsZWFyQmFja2dyb3VuZExheWVycygpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFja2dy
b3VuZENvbG9yKENvbG9yKCkpOworICAgICAgICB9IGVsc2UgaWYgKGlzSW5oZXJpdCkgeworICAg
ICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKm1fcGFyZW50U3R5bGUt
PmJhY2tncm91bmRMYXllcnMoKSk7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRCYWNrZ3JvdW5k
Q29sb3IobV9wYXJlbnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKKyAgICAgICAgaWYg
KGlzSW5pdGlhbCkKKyAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyTWFza0xheWVycygpOworICAg
ICAgICBlbHNlIGlmIChpc0luaGVyaXQpCisgICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0TWFz
a0xheWVycygqbV9wYXJlbnRTdHlsZS0+bWFza0xheWVycygpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ1NTUHJvcGVydHlGb250OgorICAgICAgICBpZiAoaXNJbmhlcml0KSB7CisgICAg
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9wYXJlbnRTdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KG1f
cGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1
ZSA9IDA7CisgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
KyAgICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwpIHsKKyAgICAgICAgICAgIFNldHRpbmdzKiBz
ZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgICAgICAgICAg
QVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhp
cyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0
aW5ncworICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFu
ZGFyZEZhbWlseSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9k
ZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLmRvY3VtZW50KCktPnByaW50aW5nKCkp
OworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBt
X2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+c3RhbmRhcmRGb250RmFtaWx5KCk7Cisg
ICAgICAgICAgICBpZiAoIXN0YW5kYXJkRm9udEZhbWlseS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoc3RhbmRhcmRG
b250RmFtaWx5KTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHko
KS5hcHBlbmRGYW1pbHkoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAx
KTsKKyAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JL
ZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKKyAg
ICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5l
SGVpZ2h0KCkpOworICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgICAgICAg
ICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIH0gZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQo
UmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgbV9saW5lSGVp
Z2h0VmFsdWUgPSAwOworCisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOworICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24pOworCisgICAgICAg
ICAgICAvLyBEb3VibGUtY2hlY2sgYW5kIHNlZSBpZiB0aGUgdGhlbWUgZGlkIGFueXRoaW5nLiBJ
ZiBub3QsIGRvbid0IGJvdGhlciB1cGRhdGluZyB0aGUgZm9udC4KKyAgICAgICAgICAgIGlmIChm
b250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkgeworICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGUgcmVuZGVyaW5nIG1vZGUgYW5kIHByaW50ZXIgZm9udCBzZXR0aW5ncyBhcmUg
dXBkYXRlZC4KKyAgICAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIu
ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2V0dGluZ3Mp
OyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0aGlzIGRvY3VtZW50IHNob3Vs
ZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNldHRpbmdzCisgICAgICAgICAg
ICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250
UmVuZGVyaW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNl
UHJpbnRlckZvbnQobV9jaGVja2VyLmRvY3VtZW50KCktPnByaW50aW5nKCkpOworCisgICAgICAg
ICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KKyAgICAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRT
aXplKG1fY2hlY2tlci5kb2N1bWVudCgpLCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24u
aXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNlU1ZH
Wm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNG
b250VmFsdWUoKSkgeworICAgICAgICAgICAgRm9udFZhbHVlKiBmb250ID0gc3RhdGljX2Nhc3Q8
Rm9udFZhbHVlKj4odmFsdWUpOworICAgICAgICAgICAgaWYgKCFmb250LT5zdHlsZSB8fCAhZm9u
dC0+dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0CisgICAgICAgICAgICAgICAgfHwgIWZvbnQtPnNp
emUgfHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZvbnQtPmZhbWlseSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxl
LCBmb250LT5zdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQtPndlaWdodC5nZXQoKSk7CisgICAg
ICAgICAgICAvLyBUaGUgcHJldmlvdXMgcHJvcGVydGllcyBjYW4gZGlydHkgb3VyIGZvbnQgYnV0
IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZvbnQncworICAgICAgICAgICAgLy8gcHJvcGVy
dGllcyBiYWNrLCB3aGljaCBpcyBzYWZlLiBIb3dldmVyIGlmIGZvbnQtc2l6ZSBpcyB1c2luZyB0
aGUgJ2V4JyB1bml0LCBpdCB3aWxsCisgICAgICAgICAgICAvLyBuZWVkIHF1ZXJ5IHRoZSBkaXJ0
aWVkIGZvbnQncyB4LWhlaWdodCB0byBnZXQgdGhlIGNvbXB1dGVkIHNpemUuIFRvIGJlIHNhZmUg
aW4gdGhpcworICAgICAgICAgICAgLy8gY2FzZSwgbGV0J3MganVzdCB1cGRhdGUgdGhlIGZvbnQg
bm93LgorICAgICAgICAgICAgdXBkYXRlRm9udCgpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKKworICAgICAgICAgICAg
bV9saW5lSGVpZ2h0VmFsdWUgPSBmb250LT5saW5lSGVpZ2h0LmdldCgpOworCisgICAgICAgICAg
ICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgp
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDU1MzIFByb3BlcnRpZXMK
KyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm94
U2hhZG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6IHsKKyAgICAgICAg
aWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNo
YWRvdykKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhtX3Bh
cmVudFN0eWxlLT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJl
bnRTdHlsZS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBt
X3N0eWxlLT5zZXRCb3hTaGFkb3cobV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0
cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIp
OworICAgICAgICB9CisgICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8v
IGluaXRpYWwgfCBub25lCisgICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0
U2hhZG93ID8gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IG1fc3R5bGUtPnNldEJv
eFNoYWRvdyhudWxscHRyKTsKKworICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3Ig
aSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIENTU1Zh
bHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIWN1cnJWYWx1ZS0+
aXNTaGFkb3dWYWx1ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
U2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGN1cnJWYWx1ZSk7
CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgp
LCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBp
dGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6
b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJs
dXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21G
YWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVt
LT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUs
IHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0g
aXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/
IEluc2V0IDogTm9ybWFsOworICAgICAgICAgICAgQ29sb3IgY29sb3I7CisgICAgICAgICAgICBp
ZiAoaXRlbS0+Y29sb3IpCisgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRp
dmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChtX3N0eWxl
KQorICAgICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+Y29sb3IoKTsKKworICAgICAgICAg
ICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihuZXcgU2hhZG93RGF0
YShJbnRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0gQ1NTUHJv
cGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRy
YW5zcGFyZW50KSk7CisgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93
KQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxl
YXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUg
Zmlyc3QgZW50cnkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0
aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7
CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJveFJlZmxlY3QsIEJveFJlZmxl
Y3QpCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkgeworICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3QoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhbHVlLT5pc1JlZmxlY3RW
YWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENTU1JlZmxlY3RWYWx1ZSog
cmVmbGVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUmVmbGVjdFZhbHVlKj4odmFsdWUpOworICAg
ICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0aW9u
OjpjcmVhdGUoKTsKKyAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKHJlZmxlY3RWYWx1
ZS0+ZGlyZWN0aW9uKCkpOworICAgICAgICBpZiAocmVmbGVjdFZhbHVlLT5vZmZzZXQoKSkKKyAg
ICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5j
b252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9u
IHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3RvcikpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOworICAgICAgICBtYXNrLnNl
dE1hc2tEZWZhdWx0cygpOworICAgICAgICBtYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZh
bHVlLT5tYXNrKCksIG1hc2spOworICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKG1hc2spOwor
CisgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlPcGFjaXR5OgorICAg
ICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKG9wYWNpdHksIE9w
YWNpdHkpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5
IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NT
UHJvcGVydHlVbmljb2RlUmFuZ2U6IC8vIE9ubHkgdXNlZCBpbiBAZm9udC1mYWNlIHJ1bGVzLgor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6Cisg
ICAgICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1
bGVDb2xvcihtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBtX3Bh
cmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSA6IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOwor
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKG1fcGFyZW50U3R5bGUtPmNv
bHVtblJ1bGVTdHlsZSgpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVXaWR0
aChtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
aXNJbml0aWFsKQorICAgICAgICAgICAgbV9zdHlsZS0+cmVzZXRDb2x1bW5SdWxlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZToKKyAgICAgICAg
aWYgKCFtX3BhcmVudE5vZGUgfHwgIXZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVEaXJlY3Rpb24obV9wYXJl
bnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVl
ZUluY3JlbWVudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5jcmVtZW50KCkpOworICAgICAgICBt
X3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQobV9wYXJlbnRTdHlsZS0+bWFycXVlZVNwZWVkKCkpOwor
ICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KG1fcGFyZW50U3R5bGUtPm1hcnF1
ZWVMb29wQ291bnQoKSk7CisgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVCZWhhdmlvcihtX3Bh
cmVudFN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRpb246IHsKKyAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZUxvb3BDb3VudCwgTWFycXVlZUxvb3BDb3VudCkKKyAg
ICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUpCisgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVw
ZWF0IGZvcmV2ZXIuCisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigp
KQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1
ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVlZDogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTChtYXJxdWVlU3BlZWQsIE1hcnF1ZWVTcGVlZCkKKyAgICAgICAgaWYgKCFwcmltaXRp
dmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGludCBpZGVudCA9IHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7
CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2xvdzoKKyAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg4NSk7IC8vIDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQu
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFzdDoK
KyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMu
IFN1cGVyIGZhc3QuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQorICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENT
U1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOworICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0LgorICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRW
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFycXVlZUluY3JlbWVudDogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TChtYXJxdWVlSW5jcmVtZW50LCBNYXJxdWVlSW5jcmVtZW50KQorICAgICAgICBpZiAoIXByaW1p
dGl2ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKKyAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAx
cHguCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9y
bWFsOgorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3Ro
KDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6CisgICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHgu
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChw
cmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAg
IGlmICghbWFycXVlZUxlbmd0aC5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobWFycXVlZUxlbmd0aCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUNsYW1wOgor
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKGxpbmVDbGFt
cCwgTGluZUNsYW1wKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dExvY2FsZTogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsb2NhbGUsIExv
Y2FsZSk7CisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8p
CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUobnVsbEF0b20pOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCkpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9z
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3Jp
cHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX3N0eWxlLT5sb2NhbGUoKSkp
OworICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6
IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dFNpemVBZGp1c3QsIFRl
eHRTaXplQWRqdXN0KQorICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc2V0VGV4dFNp
emVBZGp1c3QocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdERhc2hib2FyZFJlZ2lvbjogeworICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTChkYXNoYm9hcmRSZWdpb25zLCBEYXNoYm9hcmRSZWdpb25zKQor
ICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAg
ICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVE
YXNoYm9hcmRSZWdpb25zKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgRGFzaGJvYXJkUmVnaW9uKiByZWdpb24gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RGFzaGJv
YXJkUmVnaW9uVmFsdWUoKTsKKyAgICAgICAgaWYgKCFyZWdpb24pCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiBmaXJzdCA9IHJlZ2lvbjsKKyAgICAgICAg
d2hpbGUgKHJlZ2lvbikgeworICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExl
bmd0aChyZWdpb24tPnRvcCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAg
ICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwg
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCBib3R0b20g
PSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5ib3R0b20oKSwgc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVydFRvSW50TGVuZ3Ro
KHJlZ2lvbi0+bGVmdCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOworCisgICAgICAg
ICAgICBpZiAodG9wLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgdG9wID0gTGVuZ3Ro
KCk7CisgICAgICAgICAgICBpZiAocmlnaHQuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAg
ICByaWdodCA9IExlbmd0aCgpOworICAgICAgICAgICAgaWYgKGJvdHRvbS5pc1VuZGVmaW5lZCgp
KQorICAgICAgICAgICAgICAgIGJvdHRvbSA9IExlbmd0aCgpOworICAgICAgICAgICAgaWYgKGxl
ZnQuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBsZWZ0ID0gTGVuZ3RoKCk7CisKKyAg
ICAgICAgICAgIGlmIChyZWdpb24tPm1faXNDaXJjbGUpCisgICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lv
bi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBm
YWxzZSA6IHRydWUpOworICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xl
KQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hi
b2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRv
bSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgIHJl
Z2lvbiA9IHJlZ2lvbi0+bV9uZXh0LmdldCgpOworICAgICAgICB9CisKKyAgICAgICAgbV9lbGVt
ZW50LT5kb2N1bWVudCgpLT5zZXRIYXNEYXNoYm9hcmRSZWdpb25zKHRydWUpOworCisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0
cm9rZVdpZHRoOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRTdHJv
a2VXaWR0aCwgVGV4dFN0cm9rZVdpZHRoKQorICAgICAgICBmbG9hdCB3aWR0aCA9IDA7CisgICAg
ICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZVRoaW46CisgICAgICAgIGNhc2UgQ1NTVmFsdWVNZWRpdW06CisgICAgICAgIGNhc2Ug
Q1NTVmFsdWVUaGljazogeworICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IDEuMCAvIDQ4Owor
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTWVk
aXVtKQorICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUaGljaykKKyAgICAgICAgICAg
ICAgICByZXN1bHQgKj0gNTsKKyAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0
aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB3
aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7Cisg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybSwgVHJhbnNmb3JtKTsK
KyAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgICAgICBjcmVhdGVU
cmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9w
ZXJhdGlvbnMpOworICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0
aXZlOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHBlcnNwZWN0aXZlLCBQ
ZXJzcGVjdGl2ZSkKKworICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZU5vbmUpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldFBlcnNwZWN0aXZlKDApOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVW
YWx1ZTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQorICAgICAgICAg
ICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgLy8gRm9yIGJh
Y2t3YXJkIGNvbXBhdGliaWxpdHksIHRyZWF0IHZhbHVlbGVzcyBudW1iZXJzIGFzIHB4LgorICAg
ICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJp
bWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgp
LT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21G
YWN0b3IpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBp
ZiAocGVyc3BlY3RpdmVWYWx1ZSA+PSAwLjBmKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGVy
c3BlY3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKKyAgICAgICAgaWYgKGlzSW5pdGlhbCkK
KyAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQW5pbWF0aW9ucygpOworICAgICAgICBlbHNlIGlm
IChpc0luaGVyaXQpCisgICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0QW5pbWF0aW9ucyhtX3Bh
cmVudFN0eWxlLT5hbmltYXRpb25zKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CisgICAgICAgIGlmIChpc0luaXRpYWwpCisgICAgICAg
ICAgICBtX3N0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CisgICAgICAgIGVsc2UgaWYgKGlzSW5o
ZXJpdCkKKyAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhtX3BhcmVudFN0
eWxlLT50cmFuc2l0aW9ucygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVy
dHlQb2ludGVyRXZlbnRzOgorICAgIHsKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisg
ICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82NTYxMDc3PiBXb3JrIGFyb3VuZCB0aGUgU3RvY2tz
IHdpZGdldCdzIG1pc3VzZSBvZiB0aGUKKyAgICAgICAgLy8gcG9pbnRlci1ldmVudHMgcHJvcGVy
dHkgYnkgbm90IGFwcGx5aW5nIGl0IGluIERhc2hib2FyZC4KKyAgICAgICAgU2V0dGluZ3MqIHNl
dHRpbmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7CisgICAgICAgIGlmIChz
ZXR0aW5ncyAmJiBzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1v
ZGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHBvaW50ZXJFdmVudHMsIFBvaW50ZXJFdmVudHMp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6IHsKKyAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwodGFwSGlnaGxpZ2h0Q29sb3IsIFRhcEhpZ2hsaWdodENvbG9y
KTsKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVl
KTsKKyAgICAgICAgbV9zdHlsZS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkcpCisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiB7CisgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcsIFVzZVRv
dWNoT3ZlcmZsb3dTY3JvbGxpbmcpOworICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIG1fc3R5bGUtPnNldFVzZVRvdWNoT3ZlcmZsb3dTY3Jv
bGxpbmcocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUb3VjaCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3BlcnR5SW52YWxpZDoK
KyAgICAgICAgcmV0dXJuOworICAgIC8vIERpcmVjdGlvbmFsIHByb3BlcnRpZXMgYXJlIHJlc29s
dmVkIGJ5IHJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KCkgYmVmb3JlIHRoZSBzd2l0Y2gu
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVyRW5kQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
ckVuZFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRXaWR0aDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlclN0YXJ0Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
clN0YXJ0U3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0V2lkdGg6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckJlZm9yZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZv
cmVXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXI6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlckFmdGVyU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
ckFmdGVyV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkVuZDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luU3RhcnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hcmdpbkJlZm9yZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQWZ0ZXI6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkNvbGxhcHNlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXJnaW5CZWZvcmVDb2xsYXBzZToKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFyZ2luVG9wQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdp
bkFmdGVyQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJvdHRvbUNv
bGxhcHNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nRW5kOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRQYWRkaW5nU3RhcnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFBhZGRpbmdCZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdBZnRlcjoK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbFdpZHRoOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRMb2dpY2FsSGVpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5M
b2dpY2FsV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2ljYWxIZWlnaHQ6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxXaWR0aDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoKKyAgICB7CisgICAgICAgIENTU1Byb3Bl
cnR5SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHko
aWQsIG1fc3R5bGUtPmRpcmVjdGlvbigpLCBtX3N0eWxlLT53cml0aW5nTW9kZSgpKTsKKyAgICAg
ICAgQVNTRVJUKG5ld0lkICE9IGlkKTsKKyAgICAgICAgcmV0dXJuIGFwcGx5UHJvcGVydHkobmV3
SWQsIHZhbHVlKTsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlQYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91
Z2g6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaENvbG9yOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hNb2RlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
TGluZVRocm91Z2hTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoV2lk
dGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dE92ZXJsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZU1v
ZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZVN0eWxlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0T3ZlcmxpbmVXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVy
bGluZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZUNvbG9yOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lTW9kZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVu
ZGVybGluZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lV2lkdGg6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0U3Ryb2tlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXM6
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIENTUyBUZXh0IExheW91dCBNb2R1bGUgTGV2ZWwg
MzogVmVydGljYWwgd3JpdGluZyBzdXBwb3J0CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdy
aXRpbmdNb2RlOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklN
SVRJVkUod3JpdGluZ01vZGUsIFdyaXRpbmdNb2RlKQorICAgICAgICAvLyBGSVhNRTogSXQgaXMg
bm90IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBseWluZyBzdHlsZS4KKyAg
ICAgICAgaWYgKCFpc0luaGVyaXQgJiYgIWlzSW5pdGlhbCAmJiBtX2VsZW1lbnQgJiYgbV9lbGVt
ZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAg
ICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVs
ZW1lbnQodHJ1ZSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBt
X3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9y
aWVudGF0aW9uKG1fc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFs
IDogVmVydGljYWwpOworICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRM
aW5lQm94Q29udGFpbjogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaW5l
Qm94Q29udGFpbiwgTGluZUJveENvbnRhaW4pCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAm
JiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAg
ICAgIG1fc3R5bGUtPnNldExpbmVCb3hDb250YWluKExpbmVCb3hDb250YWluTm9uZSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhbHVlLT5pc0NTU0xp
bmVCb3hDb250YWluVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBDU1NM
aW5lQm94Q29udGFpblZhbHVlKiBsaW5lQm94Q29udGFpblZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
TGluZUJveENvbnRhaW5WYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJv
eENvbnRhaW4obGluZUJveENvbnRhaW5WYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbnNpZGU6CisgICAgICAg
IEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHdyYXBTaGFwZUluc2lkZSwgV3JhcFNoYXBlSW5z
aWRlKTsKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykK
KyAgICAgICAgICAgIG1fc3R5bGUtPnNldFdyYXBTaGFwZUluc2lkZSgwKTsKKyAgICAgICAgZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU2hhcGUoKSkKKyAgICAgICAgICAgIG1fc3R5bGUtPnNl
dFdyYXBTaGFwZUluc2lkZShwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKTsKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZToKKyAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwod3JhcFNoYXBlT3V0c2lkZSwgV3JhcFNo
YXBlT3V0c2lkZSk7CisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZUF1dG8pCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRXcmFwU2hhcGVPdXRzaWRlKDApOworICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKQorICAgICAgICAgICAgbV9z
dHlsZS0+c2V0V3JhcFNoYXBlT3V0c2lkZShwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgp
KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ1NTIEZvbnRzIE1vZHVsZSBMZXZlbCAzCisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKKyAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlTm9ybWFsKSB7CisgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24obV9zdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBDU1NWYWx1ZUxp
c3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgICAgIFJl
ZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJlU2V0dGluZ3M6
OmNyZWF0ZSgpOworICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVt
ID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgIGlmICghaXRl
bS0+aXNGb250RmVhdHVyZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBGb250RmVhdHVyZVZhbHVlKiBmZWF0dXJlID0gc3RhdGljX2Nhc3Q8Rm9udEZlYXR1
cmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgc2V0dGluZ3MtPmFwcGVuZChGb250RmVhdHVy
ZShmZWF0dXJlLT50YWcoKSwgZmVhdHVyZS0+dmFsdWUoKSkpOworICAgICAgICB9CisgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRGZWF0dXJlU2V0dGluZ3Moc2V0dGluZ3MucmVsZWFzZSgpKTsK
KyAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEZpbHRlcjogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChm
aWx0ZXIsIEZpbHRlcik7CisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAg
ICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSwgb3BlcmF0aW9ucykpCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRGaWx0ZXIo
b3BlcmF0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUo
Q1NTX0dSSURfTEFZT1VUKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uczog
eworICAgICAgICBWZWN0b3I8TGVuZ3RoPiBsZW5ndGhzOworICAgICAgICBpZiAoIWNyZWF0ZUdy
aWRUcmFja0xpc3QodmFsdWUsIGxlbmd0aHMsIHRoaXMpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBtX3N0eWxlLT5zZXRHcmlkQ29sdW1ucyhsZW5ndGhzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKKyAgICAgICAg
VmVjdG9yPExlbmd0aD4gbGVuZ3RoczsKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0
KHZhbHVlLCBsZW5ndGhzLCB0aGlzKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9z
dHlsZS0+c2V0R3JpZFJvd3MobGVuZ3Rocyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZENvbHVtbjogeworICAgICAgICBMZW5ndGggY29s
dW1uOworICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgY29sdW1uKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zdHlsZS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29s
dW1uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
R3JpZFJvdzogeworICAgICAgICBMZW5ndGggcm93OworICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQ
b3NpdGlvbih2YWx1ZSwgcm93KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zdHls
ZS0+c2V0R3JpZEl0ZW1Sb3cocm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgor
CisgICAgLy8gVGhlc2UgcHJvcGVydGllcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVp
bGRlciBsb29rdXAgdGFibGUuCisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2ht
ZW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcDoKKyAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1h
Z2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW46CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uWDoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZFJlcGVhdFg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZ
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJC
b3R0b21MZWZ0UmFkaXVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJh
ZGl1czoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGU6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJD
b2xsYXBzZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91dHNl
dDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VSZXBlYXQ6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckltYWdlU2xpY2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdl
U291cmNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29s
b3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZToKKyAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyTGVmdFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSYWRpdXM6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJSaWdodENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJTcGFjaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTdHlsZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BD
b2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1czoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlclRvcFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvdHRvbToK
KyAgICBjYXNlIENTU1Byb3BlcnR5Qm94U2l6aW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlDYXB0
aW9uU2lkZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Q2xlYXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUNsaXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlD
b3VudGVySW5jcmVtZW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlDb3VudGVyUmVzZXQ6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9uOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlEaXNwbGF5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlFbXB0eUNl
bGxzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9hdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9u
dFNpemU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5Rm9udFZhcmlhbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUhlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5SW1hZ2VSZW5kZXJpbmc6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxlZnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxldHRlclNw
YWNpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUxpc3RTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVBvc2l0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlM
aXN0U3R5bGVUeXBlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW46CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eU1hcmdpbkJvdHRvbToKKyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luTGVmdDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdp
blRvcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWF4SGVpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXhXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0OgorICAgIGNhc2UgQ1NT
UHJvcGVydHlNaW5XaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3JwaGFuczoKKyAgICBjYXNl
IENTU1Byb3BlcnR5T3V0bGluZToKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlP
dXRsaW5lU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5T3ZlcmZsb3c6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93WDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5n
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlQYWRkaW5nTGVmdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0OgorICAgIGNh
c2UgQ1NTUHJvcGVydHlQYWRkaW5nVG9wOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtB
ZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrQmVmb3JlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlQYWdlQnJlYWtJbnNpZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9uOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlSZXNpemU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVJpZ2h0Ogor
ICAgIGNhc2UgQ1NTUHJvcGVydHlTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlTcGVhazoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5VGFibGVMYXlvdXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRB
bGlnbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRJbmRlbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dFJlbmRlcmluZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dFRyYW5zZm9ybToKKyAgICBjYXNlIENTU1Byb3BlcnR5VG9wOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlVbmljb2RlQmlkaToKKyAgICBjYXNlIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5VmlzaWJpbGl0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uRGVsYXk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRpcmVjdGlv
bjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb246CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uTmFtZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxh
eVN0YXRlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlv
bjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXBwZWFyYW5jZToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QXNwZWN0UmF0aW86CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tm
YWNlVmlzaWJpbGl0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENsaXA6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGU6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRPcmlnaW46CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJhY2tncm91bmRTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJG
aXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFnZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVyUmFkaXVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJW
ZXJ0aWNhbFNwYWNpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEFsaWduOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJveEZsZXg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXhHcm91cDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94TGluZXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJveE9yZGluYWxHcm91cDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3Jp
ZW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hQYWNrOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRDb2xvckNvcnJlY3Rpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENv
bHVtbkF4aXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQWZ0ZXI6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0luc2lkZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Q29sdW1uQ291bnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5SdWxlU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENv
bHVtblJ1bGVXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uczoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uU3BhbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Q29sdW1uV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXg6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhBbGlnbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
RmxleERpcmVjdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleEZsb3c6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhJdGVtQWxpZ246CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZsZXhMaW5lUGFjazoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleE9yZGVy
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4UGFjazoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0RmxleFdyYXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dGcm9tOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bzoKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Rm9udEtlcm5pbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhp
bmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIaWdobGlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEh5cGhlbmF0ZUNoYXJhY3RlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVu
YXRlTGltaXRBZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRC
ZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXM6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdExpbmVBbGlnbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFrOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lR3JpZDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TGluZVNuYXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVEaXJlY3Rpb246
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTdHlsZToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFza0F0dGFjaG1lbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tCb3hJbWFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlT3V0c2V0
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VSZXBlYXQ6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNsaWNlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tCb3hJbWFnZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza0ltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2lu
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tQb3NpdGlvblk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQ6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUmVwZWF0WToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1NpemU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hdGNoTmVhcmVzdE1haWxCbG9ja3F1b3RlQ29sb3I6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVy
c3BlY3RpdmVPcmlnaW5YOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9y
aWdpblk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFByaW50Q29sb3JBZGp1c3Q6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXI6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRS
ZWdpb25CcmVha0luc2lkZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uT3ZlcmZs
b3c6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUZXh0Q29tYmluZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4
dEVtcGhhc2lzQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1Bv
c2l0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNTdHlsZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dE9yaWVudGF0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0
U2VjdXJpdHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm1PcmlnaW5ZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1Pcmln
aW5aOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1TdHlsZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2l0aW9uRHVyYXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25Qcm9wZXJ0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJhZzoKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VXNlclNlbGVjdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0V3JhcEZsb3c6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBN
YXJnaW46CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBQYWRkaW5nOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRXcmFwVGhyb3VnaDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2hpdGVT
cGFjZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2lkb3dzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
aWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V29yZEJyZWFrOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXb3JkU3BhY2luZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V29yZFdyYXA6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVpJbmRleDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Wm9vbToKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyNpZiBFTkFCTEUoU1ZHKQorICAg
IGRlZmF1bHQ6CisgICAgICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMKKyAgICAgICAgYXBw
bHlTVkdQcm9wZXJ0eShpZCwgdmFsdWUpOworICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICB9
Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+
aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0QXR0YWNobWVudChGaWxsTGF5
ZXI6OmluaXRpYWxGaWxsQXR0YWNobWVudChsYXllci0+dHlwZSgpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIHN3aXRjaCAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkpIHsKKyAgICBjYXNlIENTU1ZhbHVlRml4ZWQ6CisgICAgICAgIGxh
eWVyLT5zZXRBdHRhY2htZW50KEZpeGVkQmFja2dyb3VuZEF0dGFjaG1lbnQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENTU1ZhbHVlU2Nyb2xsOgorICAgICAgICBsYXllci0+c2V0QXR0YWNo
bWVudChTY3JvbGxCYWNrZ3JvdW5kQXR0YWNobWVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ1NTVmFsdWVMb2NhbDoKKyAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQoTG9jYWxCYWNr
Z3JvdW5kQXR0YWNobWVudCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbENsaXAoQ1NT
UHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0Q2xpcChGaWxs
TGF5ZXI6OmluaXRpYWxGaWxsQ2xpcChsYXllci0+dHlwZSgpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5zZXRDbGlwKCpwcmlt
aXRpdmVWYWx1ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbENvbXBvc2l0ZShD
U1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGxheWVyLT5zZXRDb21wb3Np
dGUoRmlsbExheWVyOjppbml0aWFsRmlsbENvbXBvc2l0ZShsYXllci0+dHlwZSgpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5z
ZXRDb21wb3NpdGUoKnByaW1pdGl2ZVZhbHVlKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpt
YXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5
ZXItPnNldE9yaWdpbihGaWxsTGF5ZXI6OmluaXRpYWxGaWxsT3JpZ2luKGxheWVyLT50eXBlKCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAg
bGF5ZXItPnNldE9yaWdpbigqcHJpbWl0aXZlVmFsdWUpOworfQorCitQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
Q1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVlKCkpCisgICAg
ICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0
PENTU0ltYWdlVmFsdWUqPih2YWx1ZSkpOworCisgICAgaWYgKHZhbHVlLT5pc0ltYWdlR2VuZXJh
dG9yVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShw
cm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7CisK
KyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKKyAgICBpZiAodmFsdWUtPmlzSW1hZ2VTZXRWYWx1
ZSgpKQorICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0
aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4odmFsdWUpKTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IDA7Cit9CisKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZh
bHVlKQoreworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBl
bmRpbmdJbWFnZSgpOworICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkK
KyAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7CisgICAgcmV0
dXJuIGltYWdlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJl
c29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc1Bl
bmRpbmcoKSkgeworICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYWRkKHByb3BlcnR5
KTsKKyAgICAgICAgcmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOworICAg
IH0KKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKK30KKwor
I2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJl
c29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NT
SW1hZ2VTZXRWYWx1ZSogdmFsdWUpCit7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0g
dmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOworICAgIGlmIChpbWFn
ZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLmFkZChwcm9wZXJ0eSk7CisgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKK30KKyNl
bmRpZgorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxJbWFnZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGxheWVyLT5zZXRJbWFnZShGaWxsTGF5
ZXI6OmluaXRpYWxGaWxsSW1hZ2UobGF5ZXItPnR5cGUoKSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbGF5ZXItPnNldEltYWdlKHN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVlKSk7
Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJRCwg
RmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJ
bml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0UmVwZWF0WChGaWxsTGF5ZXI6Omlu
aXRpYWxGaWxsUmVwZWF0WChsYXllci0+dHlwZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5zZXRSZXBlYXRYKCpwcmltaXRp
dmVWYWx1ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFJlcGVhdFkoQ1NTUHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0UmVwZWF0WShGaWxs
TGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WShsYXllci0+dHlwZSgpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5zZXRSZXBlYXRZ
KCpwcmltaXRpdmVWYWx1ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFNpemUo
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0U2l6
ZVR5cGUoU2l6ZU5vbmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Q29udGFpbikKKyAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKENvbnRhaW4pOworICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ292ZXIpCisgICAgICAg
IGxheWVyLT5zZXRTaXplVHlwZShDb3Zlcik7CisgICAgZWxzZQorICAgICAgICBsYXllci0+c2V0
U2l6ZVR5cGUoU2l6ZUxlbmd0aCk7CisKKyAgICBMZW5ndGhTaXplIGIgPSBGaWxsTGF5ZXI6Omlu
aXRpYWxGaWxsU2l6ZUxlbmd0aChsYXllci0+dHlwZSgpKTsKKworICAgIGlmICh2YWx1ZS0+aXNJ
bml0aWFsVmFsdWUoKSB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNv
bnRhaW4gfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVDb3Zlcikgewor
ICAgICAgICBsYXllci0+c2V0U2l6ZUxlbmd0aChiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7CisKKyAg
ICBMZW5ndGggZmlyc3RMZW5ndGg7CisgICAgTGVuZ3RoIHNlY29uZExlbmd0aDsKKworICAgIGlm
IChQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpKSB7CisgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4ocGFpci0+Zmlyc3QoKSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKTsKKyAgICAgICAg
Zmlyc3RMZW5ndGggPSBmaXJzdC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgIHNlY29uZExlbmd0
aCA9IHNlY29uZC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxlKCksIG1fcm9v
dEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmlyc3RM
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0
eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgIHNlY29uZExl
bmd0aCA9IExlbmd0aCgpOworICAgIH0KKworICAgIGlmIChmaXJzdExlbmd0aC5pc1VuZGVmaW5l
ZCgpIHx8IHNlY29uZExlbmd0aC5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBiLnNldFdpZHRoKGZpcnN0TGVuZ3RoKTsKKyAgICBiLnNldEhlaWdodChzZWNvbmRMZW5ndGgp
OworICAgIGxheWVyLT5zZXRTaXplTGVuZ3RoKGIpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hcEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFs
dWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAg
ICBsYXllci0+c2V0WFBvc2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxYUG9zaXRpb24obGF5
ZXItPnR5cGUoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB6b29tRmFj
dG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CisgICAgTGVuZ3RoIGxlbmd0aDsKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkp
CisgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgIGxlbmd0aCA9IExlbmd0aChw
cmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCisgICAg
ICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2Fs
Y1ZhbHVlKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOworICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQorICAg
ICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisgICAgbGF5ZXItPnNldFhQb3NpdGlvbihsZW5n
dGgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVy
dHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0WVBvc2l0aW9uKEZpbGxM
YXllcjo6aW5pdGlhbEZpbGxZUG9zaXRpb24obGF5ZXItPnR5cGUoKSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgTGVuZ3RoIGxlbmd0aDsKKyAgICBp
ZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCisgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKTsKKyAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdl
KCkpCisgICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKSwgUGVyY2VudCk7CisgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRl
ZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCisgICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRp
dmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSwgem9vbUZhY3RvcikpOworICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1Zp
ZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQorICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1
ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm47
CisgICAgbGF5ZXItPnNldFlQb3NpdGlvbihsZW5ndGgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGFuaW1h
dGlvbi0+c2V0RGVsYXkoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXkoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGFuaW1hdGlv
bi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGZsb2F0LCBDU1NQcmltaXRp
dmVWYWx1ZTo6U2Vjb25kcz4oKSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0
aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldERpcmVjdGlv
bihBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIHN3aXRjaCAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkpIHsKKyAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAgICBs
YXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uTm9ybWFsKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUFsdGVybmF0ZToKKyAgICAgICAgbGF5
ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVSZXZlcnNlOgorICAgICAgICBsYXll
ci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVBbHRlcm5hdGVSZXZlcnNlOgorICAgICAg
ICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJu
YXRlUmV2ZXJzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBTdHlsZVJlc29s
dmVyOjptYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUq
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBh
bmltYXRpb24tPnNldER1cmF0aW9uKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9u
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAg
ICBhbmltYXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxmbG9h
dCwgQ1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOworfQorCit2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXIt
PnNldEZpbGxNb2RlKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkZpbGxNb2RlKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBzd2l0Y2gg
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgY2FzZSBDU1NWYWx1ZU5vbmU6Cisg
ICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZU5vbmUpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlRm9yd2FyZHM6CisgICAgICAgIGxheWVyLT5zZXRG
aWxsTW9kZShBbmltYXRpb25GaWxsTW9kZUZvcndhcmRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDU1NWYWx1ZUJhY2t3YXJkczoKKyAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1h
dGlvbkZpbGxNb2RlQmFja3dhcmRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1
ZUJvdGg6CisgICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZUJvdGgp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgYW5pbWF0
aW9uLT5zZXRJdGVyYXRpb25Db3VudChBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25JdGVyYXRp
b25Db3VudCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5p
dGUpCisgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoLTEpOworICAgIGVsc2UK
KyAgICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0
RmxvYXRWYWx1ZSgpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25OYW1l
KEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlz
SW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldE5hbWUoQW5pbWF0aW9uOjppbml0
aWFsQW5pbWF0aW9uTmFtZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlTm9uZSkKKyAgICAgICAgbGF5ZXItPnNldElzTm9uZUFuaW1hdGlvbih0cnVlKTsKKyAgICBl
bHNlCisgICAgICAgIGxheWVyLT5zZXROYW1lKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1
ZSgpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25QbGF5U3RhdGUoQW5p
bWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0
aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0UGxheVN0YXRlKEFuaW1hdGlvbjo6aW5p
dGlhbEFuaW1hdGlvblBsYXlTdGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgRUFuaW1QbGF5U3RhdGUgcGxheVN0YXRlID0gKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1QbGF5U3RhdGVQ
YXVzZWQgOiBBbmltUGxheVN0YXRlUGxheWluZzsKKyAgICBsYXllci0+c2V0UGxheVN0YXRlKHBs
YXlTdGF0ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uUHJvcGVydHko
QW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUt
PmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25Nb2Rl
KEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlJbnZhbGlkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlQWxsKSB7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246
OkFuaW1hdGVBbGwpOworICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
SW52YWxpZCk7CisgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1h
dGlvbjo6QW5pbWF0ZU5vbmUpOworICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KENTU1By
b3BlcnR5SW52YWxpZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmlt
YXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZVNpbmdsZVByb3BlcnR5KTsKKyAgICAgICAgYW5p
bWF0aW9uLT5zZXRQcm9wZXJ0eShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSkpOworICAgIH0KK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBB
bmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBhbmlt
YXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvblRpbWlu
Z0Z1bmN0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAg
IHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZUxpbmVhcjoKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGlu
ZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENTU1ZhbHVlRWFzZToKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVu
Y3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlSW46CisgICAgICAgICAgICBhbmltYXRp
b24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgw
LjQyLCAwLjAsIDEuMCwgMS4wKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZUVhc2VPdXQ6CisgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9u
KEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgwLjAsIDAuMCwgMC41OCwgMS4wKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbk91dDoKKyAg
ICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKDAuNDIsIDAuMCwgMC41OCwgMS4wKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVN0ZXBTdGFydDoKKyAgICAgICAgICAgIGFuaW1hdGlv
bi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDEsIHRydWUp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlU3RlcEVuZDoKKyAg
ICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKDEsIGZhbHNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZhbHVlLT5pc0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb25WYWx1ZSgpKSB7CisgICAgICAgIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25W
YWx1ZSogY3ViaWNUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENTU0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb25WYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdG
dW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoY3ViaWNUaW1pbmdGdW5j
dGlvbi0+eDEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+eTEoKSwgY3ViaWNUaW1pbmdGdW5jdGlv
bi0+eDIoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+eTIoKSkpOworICAgIH0gZWxzZSBpZiAodmFs
dWUtPmlzU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKCkpIHsKKyAgICAgICAgQ1NTU3RlcHNUaW1p
bmdGdW5jdGlvblZhbHVlKiBzdGVwc1RpbWluZ0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTU3Rl
cHNUaW1pbmdGdW5jdGlvblZhbHVlKj4odmFsdWUpOworICAgICAgICBhbmltYXRpb24tPnNldFRp
bWluZ0Z1bmN0aW9uKFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZShzdGVwc1RpbWluZ0Z1bmN0
aW9uLT5udW1iZXJPZlN0ZXBzKCksIHN0ZXBzVGltaW5nRnVuY3Rpb24tPnN0ZXBBdFN0YXJ0KCkp
KTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0xpbmVhclRpbWluZ0Z1bmN0aW9uVmFsdWUoKSkK
KyAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihMaW5lYXJUaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKCkpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcE5pbmVQaWVjZUltYWdl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2Um
IGltYWdlKQoreworICAgIC8vIElmIHdlJ3JlIG5vdCBhIHZhbHVlIGxpc3QsIHRoZW4gd2UgYXJl
ICJub25lIiBhbmQgZG9uJ3QgbmVlZCB0byBhbHRlciB0aGUgZW1wdHkgaW1hZ2UgYXQgYWxsLgor
ICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVlLgorICAgIENTU1ZhbHVl
TGlzdCogYm9yZGVySW1hZ2UgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisK
KyAgICAvLyBTZXQgdGhlIGltYWdlICh0aGlzIGtpY2tzIG9mZiB0aGUgbG9hZCkuCisgICAgQ1NT
UHJvcGVydHlJRCBpbWFnZVByb3BlcnR5OworICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlckltYWdlKQorICAgICAgICBpbWFnZVByb3BlcnR5ID0gQ1NTUHJvcGVydHlC
b3JkZXJJbWFnZVNvdXJjZTsKKyAgICBlbHNlIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tCb3hJbWFnZSkKKyAgICAgICAgaW1hZ2VQcm9wZXJ0eSA9IENTU1Byb3BlcnR5V2Vi
a2l0TWFza0JveEltYWdlU291cmNlOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2VQcm9wZXJ0eSA9
IHByb3BlcnR5OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBib3JkZXJJbWFnZS0+
bGVuZ3RoKCkgOyArK2kpIHsKKyAgICAgICAgQ1NTVmFsdWUqIGN1cnJlbnQgPSBib3JkZXJJbWFn
ZS0+aXRlbShpKTsKKworICAgICAgICBpZiAoY3VycmVudC0+aXNJbWFnZVZhbHVlKCkgfHwgY3Vy
cmVudC0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkKKyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkK
KyAgICAgICAgICAgIHx8IGN1cnJlbnQtPmlzSW1hZ2VTZXRWYWx1ZSgpCisjZW5kaWYKKyAgICAg
ICAgICAgICkKKyAgICAgICAgICAgIGltYWdlLnNldEltYWdlKHN0eWxlSW1hZ2UoaW1hZ2VQcm9w
ZXJ0eSwgY3VycmVudCkpOworICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5pc0JvcmRlckltYWdl
U2xpY2VWYWx1ZSgpKQorICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShjdXJyZW50
LCBpbWFnZSk7CisgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlzVmFsdWVMaXN0KCkpIHsKKyAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCogc2xhc2hMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVM
aXN0Kj4oY3VycmVudCk7CisgICAgICAgICAgICAvLyBNYXAgaW4gdGhlIGltYWdlIHNsaWNlcy4K
KyAgICAgICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0oMCkgJiYgc2xhc2hMaXN0LT5pdGVtKDAp
LT5pc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQorICAgICAgICAgICAgICAgIG1hcE5pbmVQaWVj
ZUltYWdlU2xpY2Uoc2xhc2hMaXN0LT5pdGVtKDApLCBpbWFnZSk7CisKKyAgICAgICAgICAgIC8v
IE1hcCBpbiB0aGUgYm9yZGVyIHNsaWNlcy4KKyAgICAgICAgICAgIGlmIChzbGFzaExpc3QtPml0
ZW0oMSkpCisgICAgICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKG1hcE5pbmVQaWVj
ZUltYWdlUXVhZChzbGFzaExpc3QtPml0ZW0oMSkpKTsKKworICAgICAgICAgICAgLy8gTWFwIGlu
IHRoZSBvdXRzZXQuCisgICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5pdGVtKDIpKQorICAgICAg
ICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGllY2VJbWFnZVF1YWQoc2xhc2hMaXN0
LT5pdGVtKDIpKSk7CisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC0+aXNQcmltaXRpdmVWYWx1
ZSgpKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIGFwcHJvcHJpYXRlIHJ1bGVzIGZvciBzdHJl
dGNoL3JvdW5kL3JlcGVhdCBvZiB0aGUgc2xpY2VzLgorICAgICAgICAgICAgbWFwTmluZVBpZWNl
SW1hZ2VSZXBlYXQoY3VycmVudCwgaW1hZ2UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2UpIHsKKyAgICAgICAgLy8g
V2UgaGF2ZSB0byBwcmVzZXJ2ZSB0aGUgbGVnYWN5IGJlaGF2aW9yIG9mIC13ZWJraXQtYm9yZGVy
LWltYWdlIGFuZCBtYWtlIHRoZSBib3JkZXIgc2xpY2VzCisgICAgICAgIC8vIGFsc28gc2V0IHRo
ZSBib3JkZXIgd2lkdGhzLiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHBlcmNlbnRhZ2Vz
LCBzaW5jZSB3ZSBkb24ndCBldmVuIHN1cHBvcnQKKyAgICAgICAgLy8gdGhvc2Ugb24gcmVhbCBi
b3JkZXJzIHlldC4KKyAgICAgICAgaWYgKGltYWdlLmJvcmRlclNsaWNlcygpLnRvcCgpLmlzRml4
ZWQoKSkKKyAgICAgICAgICAgIHN0eWxlKCktPnNldEJvcmRlclRvcFdpZHRoKGltYWdlLmJvcmRl
clNsaWNlcygpLnRvcCgpLnZhbHVlKCkpOworICAgICAgICBpZiAoaW1hZ2UuYm9yZGVyU2xpY2Vz
KCkucmlnaHQoKS5pc0ZpeGVkKCkpCisgICAgICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJSaWdo
dFdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLnJpZ2h0KCkudmFsdWUoKSk7CisgICAgICAgIGlm
IChpbWFnZS5ib3JkZXJTbGljZXMoKS5ib3R0b20oKS5pc0ZpeGVkKCkpCisgICAgICAgICAgICBz
dHlsZSgpLT5zZXRCb3JkZXJCb3R0b21XaWR0aChpbWFnZS5ib3JkZXJTbGljZXMoKS5ib3R0b20o
KS52YWx1ZSgpKTsKKyAgICAgICAgaWYgKGltYWdlLmJvcmRlclNsaWNlcygpLmxlZnQoKS5pc0Zp
eGVkKCkpCisgICAgICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJMZWZ0V2lkdGgoaW1hZ2UuYm9y
ZGVyU2xpY2VzKCkubGVmdCgpLnZhbHVlKCkpOworICAgIH0KK30KKwordm9pZCBTdHlsZVJlc29s
dmVyOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1h
Z2UmIGltYWdlKQoreworICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc0JvcmRlckltYWdlU2xp
Y2VWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYm9yZGVy
IGltYWdlIHZhbHVlLgorICAgIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZSogYm9yZGVySW1hZ2VT
bGljZSA9IHN0YXRpY19jYXN0PENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZSo+KHZhbHVlKTsKKwor
ICAgIC8vIFNldCB1cCBhIGxlbmd0aCBib3ggdG8gcmVwcmVzZW50IG91ciBpbWFnZSBzbGljZXMu
CisgICAgTGVuZ3RoQm94IGJveDsKKyAgICBRdWFkKiBzbGljZXMgPSBib3JkZXJJbWFnZVNsaWNl
LT5zbGljZXMoKTsKKyAgICBpZiAoc2xpY2VzLT50b3AoKS0+aXNQZXJjZW50YWdlKCkpCisgICAg
ICAgIGJveC5tX3RvcCA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQ
ZXJjZW50KTsKKyAgICBlbHNlCisgICAgICAgIGJveC5tX3RvcCA9IExlbmd0aChzbGljZXMtPnRv
cCgpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIEZpeGVkKTsK
KyAgICBpZiAoc2xpY2VzLT5ib3R0b20oKS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgIGJveC5t
X2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJj
ZW50KTsKKyAgICBlbHNlCisgICAgICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aCgoaW50KXNsaWNl
cy0+Ym90dG9tKCktPmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
LCBGaXhlZCk7CisgICAgaWYgKHNsaWNlcy0+bGVmdCgpLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAg
ICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0RG91YmxlVmFsdWUoKSwg
UGVyY2VudCk7CisgICAgZWxzZQorICAgICAgICBib3gubV9sZWZ0ID0gTGVuZ3RoKHNsaWNlcy0+
bGVmdCgpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIEZpeGVk
KTsKKyAgICBpZiAoc2xpY2VzLT5yaWdodCgpLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgYm94
Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJj
ZW50KTsKKyAgICBlbHNlCisgICAgICAgIGJveC5tX3JpZ2h0ID0gTGVuZ3RoKHNsaWNlcy0+cmln
aHQoKS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7
CisgICAgaW1hZ2Uuc2V0SW1hZ2VTbGljZXMoYm94KTsKKworICAgIC8vIFNldCBvdXIgZmlsbCBt
b2RlLgorICAgIGltYWdlLnNldEZpbGwoYm9yZGVySW1hZ2VTbGljZS0+bV9maWxsKTsKK30KKwor
TGVuZ3RoQm94IFN0eWxlUmVzb2x2ZXI6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSog
dmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
KyAgICAgICAgcmV0dXJuIExlbmd0aEJveCgpOworCisgICAgLy8gR2V0IG91ciB6b29tIHZhbHVl
LgorICAgIGZsb2F0IHpvb20gPSB1c2VTVkdab29tUnVsZXMoKSA/IDEuMGYgOiBzdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCk7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgcHJpbWl0aXZlIHZhbHVlLgor
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBib3JkZXJXaWR0aHMgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKKworICAgIC8vIFNldCB1cCBhIGxlbmd0aCBib3ggdG8gcmVw
cmVzZW50IG91ciBpbWFnZSBzbGljZXMuCisgICAgTGVuZ3RoQm94IGJveDsgLy8gRGVmYXVsdHMg
dG8gJ2F1dG8nIHNvIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIHRoYXQgZXhwbGljaXRseSBiZWxv
dy4KKyAgICBRdWFkKiBzbGljZXMgPSBib3JkZXJXaWR0aHMtPmdldFF1YWRWYWx1ZSgpOworICAg
IGlmIChzbGljZXMtPnRvcCgpLT5pc051bWJlcigpKQorICAgICAgICBib3gubV90b3AgPSBMZW5n
dGgoc2xpY2VzLT50b3AoKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOworICAgIGVsc2UgaWYg
KHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQorICAgICAgICBib3gubV90b3AgPSBMZW5n
dGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
RVJDRU5UQUdFKSwgUGVyY2VudCk7CisgICAgZWxzZSBpZiAoc2xpY2VzLT50b3AoKS0+Z2V0SWRl
bnQoKSAhPSBDU1NWYWx1ZUF1dG8pCisgICAgICAgIGJveC5tX3RvcCA9IHNsaWNlcy0+dG9wKCkt
PmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb20p
OworCisgICAgaWYgKHNsaWNlcy0+cmlnaHQoKS0+aXNOdW1iZXIoKSkKKyAgICAgICAgYm94Lm1f
cmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7
CisgICAgZWxzZSBpZiAoc2xpY2VzLT5yaWdodCgpLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAg
Ym94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5nZXREb3VibGVWYWx1ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50KTsKKyAgICBlbHNlIGlmIChz
bGljZXMtPnJpZ2h0KCktPmdldElkZW50KCkgIT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICBib3gu
bV9yaWdodCA9IHNsaWNlcy0+cmlnaHQoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCks
IHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CisKKyAgICBpZiAoc2xpY2VzLT5ib3R0b20oKS0+
aXNOdW1iZXIoKSkKKyAgICAgICAgYm94Lm1fYm90dG9tID0gTGVuZ3RoKHNsaWNlcy0+Ym90dG9t
KCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKKyAgICBlbHNlIGlmIChzbGljZXMtPmJvdHRv
bSgpLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgYm94Lm1fYm90dG9tID0gTGVuZ3RoKHNsaWNl
cy0+Ym90dG9tKCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSksIFBlcmNlbnQpOworICAgIGVsc2UgaWYgKHNsaWNlcy0+Ym90dG9tKCktPmdldElkZW50
KCkgIT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICBib3gubV9ib3R0b20gPSBzbGljZXMtPmJvdHRv
bSgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6
b29tKTsKKworICAgIGlmIChzbGljZXMtPmxlZnQoKS0+aXNOdW1iZXIoKSkKKyAgICAgICAgYm94
Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUp
OworICAgIGVsc2UgaWYgKHNsaWNlcy0+bGVmdCgpLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAg
Ym94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7CisgICAgZWxzZSBpZiAoc2xp
Y2VzLT5sZWZ0KCktPmdldElkZW50KCkgIT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICBib3gubV9s
ZWZ0ID0gc2xpY2VzLT5sZWZ0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCByb290
RWxlbWVudFN0eWxlKCksIHpvb20pOworCisgICAgcmV0dXJuIGJveDsKK30KKwordm9pZCBTdHls
ZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSogdmFsdWUsIE5pbmVQ
aWVjZUltYWdlJiBpbWFnZSkKK3sKKyAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAg
ICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpOworICAgIGlmICgh
cGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+c2Vjb25kKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGludCBmaXJzdElkZW50aWZpZXIgPSBwYWlyLT5maXJzdCgpLT5nZXRJZGVudCgp
OworICAgIGludCBzZWNvbmRJZGVudGlmaWVyID0gcGFpci0+c2Vjb25kKCktPmdldElkZW50KCk7
CisKKyAgICBFTmluZVBpZWNlSW1hZ2VSdWxlIGhvcml6b250YWxSdWxlOworICAgIHN3aXRjaCAo
Zmlyc3RJZGVudGlmaWVyKSB7CisgICAgY2FzZSBDU1NWYWx1ZVN0cmV0Y2g6CisgICAgICAgIGhv
cml6b250YWxSdWxlID0gU3RyZXRjaEltYWdlUnVsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDU1NWYWx1ZVJvdW5kOgorICAgICAgICBob3Jpem9udGFsUnVsZSA9IFJvdW5kSW1hZ2VSdWxl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlU3BhY2U6CisgICAgICAgIGhvcml6
b250YWxSdWxlID0gU3BhY2VJbWFnZVJ1bGU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
IC8vIENTU1ZhbHVlUmVwZWF0CisgICAgICAgIGhvcml6b250YWxSdWxlID0gUmVwZWF0SW1hZ2VS
dWxlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaW1hZ2Uuc2V0SG9yaXpvbnRhbFJ1bGUo
aG9yaXpvbnRhbFJ1bGUpOworCisgICAgRU5pbmVQaWVjZUltYWdlUnVsZSB2ZXJ0aWNhbFJ1bGU7
CisgICAgc3dpdGNoIChzZWNvbmRJZGVudGlmaWVyKSB7CisgICAgY2FzZSBDU1NWYWx1ZVN0cmV0
Y2g6CisgICAgICAgIHZlcnRpY2FsUnVsZSA9IFN0cmV0Y2hJbWFnZVJ1bGU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ1NTVmFsdWVSb3VuZDoKKyAgICAgICAgdmVydGljYWxSdWxlID0gUm91
bmRJbWFnZVJ1bGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVTcGFjZToKKyAg
ICAgICAgdmVydGljYWxSdWxlID0gU3BhY2VJbWFnZVJ1bGU7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6IC8vIENTU1ZhbHVlUmVwZWF0CisgICAgICAgIHZlcnRpY2FsUnVsZSA9IFJlcGVh
dEltYWdlUnVsZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGltYWdlLnNldFZlcnRpY2Fs
UnVsZSh2ZXJ0aWNhbFJ1bGUpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4
dFNpemVBZGp1c3QoKQoreworICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKG1f
c3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOworICAgIG1fc3R5
bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOworfQorCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSkKK3sKKyAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA9
PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
b25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24o
KTsKKyAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7Cisg
ICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6
ZSgpKTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7
Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJl
bmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQoreworICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwor
CisgICAgaWYgKGNoaWxkRm9udC5pc0Fic29sdXRlU2l6ZSgpIHx8ICFwYXJlbnRTdHlsZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250ID0g
cGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGlmIChjaGlsZEZvbnQudXNlRml4
ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBGb3Igbm93LCBsdW1wIGFsbCBmYW1pbGllcyBidXQgbW9u
b3NwYWNlIHRvZ2V0aGVyLgorICAgIGlmIChjaGlsZEZvbnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZv
bnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5CisgICAgICAgICYmIHBhcmVudEZvbnQuZ2Vu
ZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBXZSBrbm93IHRoZSBwYXJlbnQgaXMgbW9ub3NwYWNlIG9yIHRo
ZSBjaGlsZCBpcyBtb25vc3BhY2UsIGFuZCB0aGF0IGZvbnQKKyAgICAvLyBzaXplIHdhcyB1bnNw
ZWNpZmllZC4gV2Ugd2FudCB0byBzY2FsZSBvdXIgZm9udCBzaXplIGFzIGFwcHJvcHJpYXRlLgor
ICAgIC8vIElmIHRoZSBmb250IHVzZXMgYSBrZXl3b3JkIHNpemUsIHRoZW4gd2UgcmVmZXRjaCBm
cm9tIHRoZSB0YWJsZSByYXRoZXIgdGhhbgorICAgIC8vIG11bHRpcGx5aW5nIGJ5IG91ciBzY2Fs
ZSBmYWN0b3IuCisgICAgZmxvYXQgc2l6ZTsKKyAgICBpZiAoY2hpbGRGb250LmtleXdvcmRTaXpl
KCkpCisgICAgICAgIHNpemUgPSBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLmRvY3VtZW50
KCksIENTU1ZhbHVlWHhTbWFsbCArIGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgpIC0gMSwgY2hpbGRG
b250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAgZWxzZSB7CisgICAgICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgICAgICBm
bG9hdCBmaXhlZFNjYWxlRmFjdG9yID0gc2V0dGluZ3MKKyAgICAgICAgICAgID8gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpKSAvIHNldHRpbmdzLT5k
ZWZhdWx0Rm9udFNpemUoKQorICAgICAgICAgICAgOiAxOworICAgICAgICBzaXplID0gcGFyZW50
Rm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkgPworICAgICAgICAgICAgICAgIGNoaWxkRm9udC5z
cGVjaWZpZWRTaXplKCkgLyBmaXhlZFNjYWxlRmFjdG9yIDoKKyAgICAgICAgICAgICAgICBjaGls
ZEZvbnQuc3BlY2lmaWVkU2l6ZSgpICogZml4ZWRTY2FsZUZhY3RvcjsKKyAgICB9CisKKyAgICBG
b250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7CisgICAgc2V0Rm9u
dFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2Ny
aXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0
Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCit7
CisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6
ZShtX2NoZWNrZXIuZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlz
QWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7Cit9CisKK2Zsb2F0IFN0
eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBk
b2N1bWVudCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBz
cGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcykKK3sKKyAgICBmbG9hdCB6b29tRmFj
dG9yID0gMS4wZjsKKyAgICBpZiAoIXVzZVNWR1pvb21SdWxlcykgeworICAgICAgICB6b29tRmFj
dG9yID0gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9
IGRvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICAgICAgem9vbUZhY3RvciAqPSBmcmFtZS0+dGV4
dFpvb21GYWN0b3IoKTsKKyAgICB9CisKKyAgICByZXR1cm4gU3R5bGVSZXNvbHZlcjo6Z2V0Q29t
cHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIHpvb21GYWN0b3IsIGlzQWJzb2x1
dGVTaXplLCBzcGVjaWZpZWRTaXplKTsKK30KKworZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29t
cHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBmbG9hdCB6b29t
RmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRN
aW5pbXVtRm9yRm9udFNpemUgdXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUpCit7CisgICAgLy8g
VGV4dCB3aXRoIGEgMHB4IGZvbnQgc2l6ZSBzaG91bGQgbm90IGJlIHZpc2libGUgYW5kIHRoZXJl
Zm9yZSBuZWVkcyB0byBiZQorICAgIC8vIGV4ZW1wdCBmcm9tIG1pbmltdW0gZm9udCBzaXplIHJ1
bGVzLiBBY2lkMyByZWxpZXMgb24gdGhpcyBmb3IgcGl4ZWwtcGVyZmVjdAorICAgIC8vIHJlbmRl
cmluZy4gVGhpcyBpcyBhbHNvIGNvbXBhdGlibGUgd2l0aCBvdGhlciBicm93c2VycyB0aGF0IGhh
dmUgbWluaW11bQorICAgIC8vIGZvbnQgc2l6ZSBzZXR0aW5ncyAoZS5nLiBGaXJlZm94KS4KKyAg
ICBpZiAoZmFic2Yoc3BlY2lmaWVkU2l6ZSkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
ZXBzaWxvbigpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIC8vIFdlIHN1cHBvcnQgdHdv
IHR5cGVzIG9mIG1pbmltdW0gZm9udCBzaXplLiBUaGUgZmlyc3QgaXMgYSBoYXJkIG92ZXJyaWRl
IHRoYXQgYXBwbGllcyB0bworICAgIC8vIGFsbCBmb250cy4gVGhpcyBpcyAibWluU2l6ZS4iIFRo
ZSBzZWNvbmQgdHlwZSBvZiBtaW5pbXVtIGZvbnQgc2l6ZSBpcyBhICJzbWFydCBtaW5pbXVtIgor
ICAgIC8vIHRoYXQgaXMgYXBwbGllZCBvbmx5IHdoZW4gdGhlIFdlYiBwYWdlIGNhbid0IGtub3cg
d2hhdCBzaXplIGl0IHJlYWxseSBhc2tlZCBmb3IsIGUuZy4sCisgICAgLy8gd2hlbiBpdCB1c2Vz
IGxvZ2ljYWwgc2l6ZXMgbGlrZSAic21hbGwiIG9yIGV4cHJlc3NlcyB0aGUgZm9udC1zaXplIGFz
IGEgcGVyY2VudGFnZSBvZgorICAgIC8vIHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IHNldHRpbmcu
CisKKyAgICAvLyBXaXRoIHRoZSBzbWFydCBtaW5pbXVtLCB3ZSBuZXZlciB3YW50IHRvIGdldCBz
bWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gZm9udCBzaXplIHRvIGtlZXAgZm9udHMgcmVhZGFibGUu
CisgICAgLy8gSG93ZXZlciB3ZSBhbHdheXMgYWxsb3cgdGhlIHBhZ2UgdG8gc2V0IGFuIGV4cGxp
Y2l0IHBpeGVsIHNpemUgdGhhdCBpcyBzbWFsbGVyLAorICAgIC8vIHNpbmNlIHNpdGVzIHdpbGwg
bWlzLXJlbmRlciBvdGhlcndpc2UgKGUuZy4sIGh0dHA6Ly93d3cuZ2FtZXNwb3QuY29tIHdpdGgg
YSA5cHggbWluaW11bSkuCisKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0
dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1cm4gMS4wZjsKKworICAg
IGludCBtaW5TaXplID0gc2V0dGluZ3MtPm1pbmltdW1Gb250U2l6ZSgpOworICAgIGludCBtaW5M
b2dpY2FsU2l6ZSA9IHNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCk7CisgICAgZmxv
YXQgem9vbWVkU2l6ZSA9IHNwZWNpZmllZFNpemUgKiB6b29tRmFjdG9yOworCisgICAgLy8gQXBw
bHkgdGhlIGhhcmQgbWluaW11bSBmaXJzdC4gV2Ugb25seSBhcHBseSB0aGUgaGFyZCBtaW5pbXVt
IGlmIGFmdGVyIHpvb21pbmcgd2UncmUgc3RpbGwgdG9vIHNtYWxsLgorICAgIGlmICh6b29tZWRT
aXplIDwgbWluU2l6ZSkKKyAgICAgICAgem9vbWVkU2l6ZSA9IG1pblNpemU7CisKKyAgICAvLyBO
b3cgYXBwbHkgdGhlICJzbWFydCBtaW5pbXVtLiIgVGhpcyBtaW5pbXVtIGlzIGFsc28gb25seSBh
cHBsaWVkIGlmIHdlJ3JlIHN0aWxsIHRvbyBzbWFsbAorICAgIC8vIGFmdGVyIHpvb21pbmcuIFRo
ZSBmb250IHNpemUgbXVzdCBlaXRoZXIgYmUgcmVsYXRpdmUgdG8gdGhlIHVzZXIgZGVmYXVsdCBv
ciB0aGUgb3JpZ2luYWwgc2l6ZQorICAgIC8vIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGFibGUuIElu
IG90aGVyIHdvcmRzLCB3ZSBvbmx5IGFwcGx5IHRoZSBzbWFydCBtaW5pbXVtIHdoZW5ldmVyIHdl
J3JlIHBvc2l0aXZlCisgICAgLy8gZG9pbmcgc28gd29uJ3QgZGlzcnVwdCB0aGUgbGF5b3V0Lgor
ICAgIGlmICh1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSAmJiB6b29tZWRTaXplIDwgbWluTG9n
aWNhbFNpemUgJiYgKHNwZWNpZmllZFNpemUgPj0gbWluTG9naWNhbFNpemUgfHwgIWlzQWJzb2x1
dGVTaXplKSkKKyAgICAgICAgem9vbWVkU2l6ZSA9IG1pbkxvZ2ljYWxTaXplOworCisgICAgLy8g
QWxzbyBjbGFtcCB0byBhIHJlYXNvbmFibGUgbWF4aW11bSB0byBwcmV2ZW50IGluc2FuZSBmb250
IHNpemVzIGZyb20gY2F1c2luZyBjcmFzaGVzIG9uIHZhcmlvdXMKKyAgICAvLyBwbGF0Zm9ybXMg
KEknbSBsb29raW5nIGF0IHlvdSwgV2luZG93cy4pCisgICAgcmV0dXJuIG1pbigxMDAwMDAwLjBm
LCB6b29tZWRTaXplKTsKK30KKworY29uc3QgaW50IGZvbnRTaXplVGFibGVNYXggPSAxNjsKK2Nv
bnN0IGludCBmb250U2l6ZVRhYmxlTWluID0gOTsKK2NvbnN0IGludCB0b3RhbEtleXdvcmRzID0g
ODsKKworLy8gV2luSUUvTmF2NCB0YWJsZSBmb3IgZm9udCBzaXplcy4gRGVzaWduZWQgdG8gbWF0
Y2ggdGhlIGxlZ2FjeSBmb250IG1hcHBpbmcgc3lzdGVtIG9mIEhUTUwuCitzdGF0aWMgY29uc3Qg
aW50IHF1aXJrc0ZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1heCAtIGZvbnRTaXplVGFibGVN
aW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9Cit7CisgICAgICB7IDksICAgIDksICAgICA5LCAgICAg
OSwgICAgMTEsICAgIDE0LCAgICAxOCwgICAgMjggfSwKKyAgICAgIHsgOSwgICAgOSwgICAgIDks
ICAgIDEwLCAgICAxMiwgICAgMTUsICAgIDIwLCAgICAzMSB9LAorICAgICAgeyA5LCAgICA5LCAg
ICAgOSwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDM0IH0sCisgICAgICB7IDksICAg
IDksICAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE4LCAgICAyNCwgICAgMzcgfSwKKyAgICAgIHsg
OSwgICAgOSwgICAgMTAsICAgIDEzLCAgICAxNiwgICAgMjAsICAgIDI2LCAgICA0MCB9LCAvLyBm
aXhlZCBmb250IGRlZmF1bHQgKDEzKQorICAgICAgeyA5LCAgICA5LCAgICAxMSwgICAgMTQsICAg
IDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0sCisgICAgICB7IDksICAgMTAsICAgIDEyLCAgICAx
NSwgICAgMTcsICAgIDIzLCAgICAzMCwgICAgNDUgfSwKKyAgICAgIHsgOSwgICAxMCwgICAgMTMs
ICAgIDE2LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9IC8vIHByb3BvcnRpb25hbCBmb250
IGRlZmF1bHQgKDE2KQorfTsKKy8vIEhUTUwgICAgICAgMSAgICAgIDIgICAgICAzICAgICAgNCAg
ICAgIDUgICAgICA2ICAgICAgNworLy8gQ1NTICB4eHMgICB4cyAgICAgcyAgICAgIG0gICAgICBs
ICAgICB4bCAgICAgeHhsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAg
ICAgICAgICAgICAgICAgdXNlciBwcmVmCisKKy8vIFN0cmljdCBtb2RlIHRhYmxlIG1hdGNoZXMg
TWFjSUUgYW5kIE1vemlsbGEncyBzZXR0aW5ncyBleGFjdGx5Lgorc3RhdGljIGNvbnN0IGludCBz
dHJpY3RGb250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBmb250U2l6ZVRhYmxlTWluICsg
MV1bdG90YWxLZXl3b3Jkc10gPQoreworICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAgIDksICAg
IDExLCAgICAxNCwgICAgMTgsICAgIDI3IH0sCisgICAgICB7IDksICAgIDksICAgICA5LCAgICAx
MCwgICAgMTIsICAgIDE1LCAgICAyMCwgICAgMzAgfSwKKyAgICAgIHsgOSwgICAgOSwgICAgMTAs
ICAgIDExLCAgICAxMywgICAgMTcsICAgIDIyLCAgICAzMyB9LAorICAgICAgeyA5LCAgICA5LCAg
ICAxMCwgICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQsICAgIDM2IH0sCisgICAgICB7IDksICAg
MTAsICAgIDEyLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwgICAgMzkgfSwgLy8gZml4ZWQg
Zm9udCBkZWZhdWx0ICgxMykKKyAgICAgIHsgOSwgICAxMCwgICAgMTIsICAgIDE0LCAgICAxNywg
ICAgMjEsICAgIDI4LCAgICA0MiB9LAorICAgICAgeyA5LCAgIDEwLCAgICAxMywgICAgMTUsICAg
IDE4LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCisgICAgICB7IDksICAgMTAsICAgIDEzLCAgICAx
NiwgICAgMTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAvLyBwcm9wb3J0aW9uYWwgZm9udCBkZWZh
dWx0ICgxNikKK307CisvLyBIVE1MICAgICAgIDEgICAgICAyICAgICAgMyAgICAgIDQgICAgICA1
ICAgICAgNiAgICAgIDcKKy8vIENTUyAgeHhzICAgeHMgICAgIHMgICAgICBtICAgICAgbCAgICAg
eGwgICAgIHh4bAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy8vICAgICAgICAgICAg
ICAgICAgICAgIHVzZXIgcHJlZgorCisvLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIHJhbmdlIG9m
IHRoZSB0YWJsZSwgd2UgdXNlIFRvZGQgRmFocm5lcidzIHN1Z2dlc3RlZCBzY2FsZQorLy8gZmFj
dG9ycyBmb3IgZWFjaCBrZXl3b3JkIHZhbHVlLgorc3RhdGljIGNvbnN0IGZsb2F0IGZvbnRTaXpl
RmFjdG9yc1t0b3RhbEtleXdvcmRzXSA9IHsgMC42MGYsIDAuNzVmLCAwLjg5ZiwgMS4wZiwgMS4y
ZiwgMS41ZiwgMi4wZiwgMy4wZiB9OworCitmbG9hdCBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZv
cktleXdvcmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29yZCwgYm9vbCBzaG91bGRVc2VG
aXhlZERlZmF1bHRTaXplKQoreworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5z
ZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiAxLjBmOworCisg
ICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpOworICAgIGludCBt
ZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/IHNldHRpbmdzLT5kZWZhdWx0
Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOworICAgIGlmICht
ZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVtU2l6ZSA8PSBmb250U2l6ZVRh
YmxlTWF4KSB7CisgICAgICAgIC8vIExvb2sgdXAgdGhlIGVudHJ5IGluIHRoZSB0YWJsZS4KKyAg
ICAgICAgaW50IHJvdyA9IG1lZGl1bVNpemUgLSBmb250U2l6ZVRhYmxlTWluOworICAgICAgICBp
bnQgY29sID0gKGtleXdvcmQgLSBDU1NWYWx1ZVh4U21hbGwpOworICAgICAgICByZXR1cm4gcXVp
cmtzTW9kZSA/IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93XVtjb2xdIDogc3RyaWN0Rm9udFNpemVU
YWJsZVtyb3ddW2NvbF07CisgICAgfQorCisgICAgLy8gVmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFu
Z2Ugb2YgdGhlIHRhYmxlLiBBcHBseSB0aGUgc2NhbGUgZmFjdG9yIGluc3RlYWQuCisgICAgZmxv
YXQgbWluTG9naWNhbFNpemUgPSBtYXgoc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUo
KSwgMSk7CisgICAgcmV0dXJuIG1heChmb250U2l6ZUZhY3RvcnNba2V5d29yZCAtIENTU1ZhbHVl
WHhTbWFsbF0qbWVkaXVtU2l6ZSwgbWluTG9naWNhbFNpemUpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorc3RhdGljIGludCBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplKGludCBwaXhlbEZv
bnRTaXplLCBjb25zdCBUKiB0YWJsZSwgaW50IG11bHRpcGxpZXIpCit7CisgICAgLy8gSWdub3Jl
IHRhYmxlWzBdIGJlY2F1c2UgeHgtc21hbGwgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkgbGVn
YWN5IGZvbnQgc2l6ZS4KKyAgICBmb3IgKGludCBpID0gMTsgaSA8IHRvdGFsS2V5d29yZHMgLSAx
OyBpKyspIHsKKyAgICAgICAgaWYgKHBpeGVsRm9udFNpemUgKiAyIDwgKHRhYmxlW2ldICsgdGFi
bGVbaSArIDFdKSAqIG11bHRpcGxpZXIpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRvdGFsS2V5d29yZHMgLSAxOworfQorCitpbnQgU3R5bGVSZXNvbHZlcjo6bGVn
YWN5Rm9udFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBz
aG91bGRVc2VGaXhlZERlZmF1bHRTaXplKQoreworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRv
Y3VtZW50LT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiAx
OworCisgICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpOworICAg
IGludCBtZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/IHNldHRpbmdzLT5k
ZWZhdWx0Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOworICAg
IGlmIChtZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVtU2l6ZSA8PSBmb250
U2l6ZVRhYmxlTWF4KSB7CisgICAgICAgIGludCByb3cgPSBtZWRpdW1TaXplIC0gZm9udFNpemVU
YWJsZU1pbjsKKyAgICAgICAgcmV0dXJuIGZpbmROZWFyZXN0TGVnYWN5Rm9udFNpemU8aW50Pihw
aXhlbEZvbnRTaXplLCBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVUYWJsZVtyb3ddIDogc3Ry
aWN0Rm9udFNpemVUYWJsZVtyb3ddLCAxKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmluZE5lYXJl
c3RMZWdhY3lGb250U2l6ZTxmbG9hdD4ocGl4ZWxGb250U2l6ZSwgZm9udFNpemVGYWN0b3JzLCBt
ZWRpdW1TaXplKTsKK30KKworc3RhdGljIENvbG9yIGNvbG9yRm9yQ1NTVmFsdWUoaW50IGNzc1Zh
bHVlSWQpCit7CisgICAgc3RydWN0IENvbG9yVmFsdWUgeworICAgICAgICBpbnQgY3NzVmFsdWVJ
ZDsKKyAgICAgICAgUkdCQTMyIGNvbG9yOworICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgQ29s
b3JWYWx1ZSBjb2xvclZhbHVlc1tdID0geworICAgICAgICB7IENTU1ZhbHVlQXF1YSwgMHhGRjAw
RkZGRiB9LAorICAgICAgICB7IENTU1ZhbHVlQmxhY2ssIDB4RkYwMDAwMDAgfSwKKyAgICAgICAg
eyBDU1NWYWx1ZUJsdWUsIDB4RkYwMDAwRkYgfSwKKyAgICAgICAgeyBDU1NWYWx1ZUZ1Y2hzaWEs
IDB4RkZGRjAwRkYgfSwKKyAgICAgICAgeyBDU1NWYWx1ZUdyYXksIDB4RkY4MDgwODAgfSwKKyAg
ICAgICAgeyBDU1NWYWx1ZUdyZWVuLCAweEZGMDA4MDAwICB9LAorICAgICAgICB7IENTU1ZhbHVl
R3JleSwgMHhGRjgwODA4MCB9LAorICAgICAgICB7IENTU1ZhbHVlTGltZSwgMHhGRjAwRkYwMCB9
LAorICAgICAgICB7IENTU1ZhbHVlTWFyb29uLCAweEZGODAwMDAwIH0sCisgICAgICAgIHsgQ1NT
VmFsdWVOYXZ5LCAweEZGMDAwMDgwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVPbGl2ZSwgMHhGRjgw
ODAwMCAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZU9yYW5nZSwgMHhGRkZGQTUwMCB9LAorICAgICAg
ICB7IENTU1ZhbHVlUHVycGxlLCAweEZGODAwMDgwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVSZWQs
IDB4RkZGRjAwMDAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZVNpbHZlciwgMHhGRkMwQzBDMCB9LAor
ICAgICAgICB7IENTU1ZhbHVlVGVhbCwgMHhGRjAwODA4MCAgfSwKKyAgICAgICAgeyBDU1NWYWx1
ZVRyYW5zcGFyZW50LCAweDAwMDAwMDAwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVXaGl0ZSwgMHhG
RkZGRkZGRiB9LAorICAgICAgICB7IENTU1ZhbHVlWWVsbG93LCAweEZGRkZGRjAwIH0sCisgICAg
ICAgIHsgMCwgMCB9CisgICAgfTsKKworICAgIGZvciAoY29uc3QgQ29sb3JWYWx1ZSogY29sID0g
Y29sb3JWYWx1ZXM7IGNvbC0+Y3NzVmFsdWVJZDsgKytjb2wpIHsKKyAgICAgICAgaWYgKGNvbC0+
Y3NzVmFsdWVJZCA9PSBjc3NWYWx1ZUlkKQorICAgICAgICAgICAgcmV0dXJuIGNvbC0+Y29sb3I7
CisgICAgfQorICAgIHJldHVybiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUNv
bG9yKGNzc1ZhbHVlSWQpOworfQorCitDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmsp
IGNvbnN0Cit7CisgICAgaWYgKHZhbHVlLT5pc1JHQkNvbG9yKCkpCisgICAgICAgIHJldHVybiBD
b2xvcih2YWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7CisKKyAgICBpbnQgaWRlbnQgPSB2YWx1ZS0+
Z2V0SWRlbnQoKTsKKyAgICBzd2l0Y2ggKGlkZW50KSB7CisgICAgY2FzZSAwOgorICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKKyAgICAgICAgcmV0
dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7CisgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdExpbms6CisgICAgICAgIHJldHVybiAobV9lbGVtZW50LT5pc0xpbmsoKSAmJiBmb3JW
aXNpdGVkTGluaykgPyBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CisgICAgY2FzZSBDU1NWYWx1ZVdl
YmtpdEFjdGl2ZWxpbms6CisgICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFj
dGl2ZUxpbmtDb2xvcigpOworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoK
KyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpmb2N1c1JpbmdDb2xvcigpOworICAgIGNhc2Ug
Q1NTVmFsdWVDdXJyZW50Y29sb3I6CisgICAgICAgIHJldHVybiBtX3N0eWxlLT5jb2xvcigpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlkZW50KTsKKyAg
ICB9Cit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29u
c3QgQXRvbWljU3RyaW5nICZhdHRybmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mZWF0dXJl
cy5hdHRyc0luUnVsZXMuY29udGFpbnMoYXR0cm5hbWUuaW1wbCgpKTsKK30KKwordm9pZCBTdHls
ZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVk
aWFRdWVyeUV4cCogZXhwciwgYm9vbCByZXN1bHQpCit7CisgICAgbV92aWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcnlSZXN1bHRzLmFwcGVuZChhZG9wdFB0cihuZXcgTWVkaWFRdWVyeVJlc3VsdCgq
ZXhwciwgcmVzdWx0KSkpOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OmFmZmVjdGVkQnlWaWV3
cG9ydENoYW5nZSgpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgcyA9IG1fdmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHM7IGkrKykgeworICAgICAgICBpZiAobV9tZWRpdW0tPmV2YWwoJm1fdmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9leHByZXNzaW9uKSAhPSBtX3ZpZXdwb3J0RGVwZW5k
ZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1fcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIFRyYW5zZm9ybU9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOworICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJu
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRp
b246OlNDQUxFX1k7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJh
bnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOworICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlM0RUcmFuc2Zvcm1PcGVyYXRpb246
IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOworICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURV9YOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
bGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5T
TEFURV9ZOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFu
c2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOwor
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNEVHJhbnNmb3JtT3Bl
cmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q7CisgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1
cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFX1g7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRl
WVRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k7
CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJh
dGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1o7CisgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBU
cmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9u
OjpTS0VXOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdYVHJhbnNmb3Jt
T3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g7CisgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBU
cmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWTsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246
Ok1BVFJJWDsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOworICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0
aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRTsKKyAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpVbmtub3duVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4g
VHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOworICAgIH0KKyAgICByZXR1cm4gVHJhbnNmb3JtT3Bl
cmF0aW9uOjpOT05FOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5
bGUqIHJvb3RTdHlsZSwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKK3sKKyAg
ICBpZiAoIWluVmFsdWUgfHwgIWluVmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgb3V0
T3BlcmF0aW9ucy5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
ZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlID8gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA6IDE7Cisg
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIGZvciAoQ1NTVmFsdWVMaXN0
SXRlcmF0b3IgaSA9IGluVmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAg
ICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOworICAgICAgICBpZiAoIWN1cnJWYWx1
ZS0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqIHRyYW5zZm9ybVZhbHVlID0gc3RhdGlj
X2Nhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqPihpLnZhbHVlKCkpOworICAgICAgICBpZiAo
IXRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGJvb2wgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0gZmFsc2U7CisgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCB0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCk7ICsraikgeworICAgICAg
ICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhqKS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgaGF2ZU5vblByaW1pdGl2ZVZhbHVl
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAoaGF2ZU5vblByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDApKTsKKworICAgICAgICBzd2l0Y2ggKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBl
KCkpIHsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxl
WFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBkb3VibGUgc3ggPSAx
LjA7CisgICAgICAgICAgICBkb3VibGUgc3kgPSAxLjA7CisgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2Nh
bGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN4
ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJh
bnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzeDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwg
c3ksIDEuMCwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uOgorICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNEVHJhbnNmb3JtT3BlcmF0
aW9uOiB7CisgICAgICAgICAgICBkb3VibGUgc3ggPSAxLjA7CisgICAgICAgICAgICBkb3VibGUg
c3kgPSAxLjA7CisgICAgICAgICAgICBkb3VibGUgc3ogPSAxLjA7CisgICAgICAgICAgICBpZiAo
dHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHN6ID0gZmlyc3RW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZh
bHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRy
YW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFsdWUtPmdldERv
dWJsZVZhbHVlKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzeCA9IGZp
cnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxl
WFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
VmFsdWUtPmxlbmd0aCgpID4gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHRoaXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRy
YW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN6ID0gdGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0
aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNl
Y29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBz
eSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBw
ZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoc3gsIHN5LCBzeiwgZ2V0VHJhbnNm
b3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0
aW9uOiB7CisgICAgICAgICAgICBMZW5ndGggdHggPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAg
ICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpU
cmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHR5ID0gY29udmVy
dFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0eCA9IGNvbnZlcnRUb0Zsb2F0
TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAg
ICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoc2Vjb25kVmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodHguaXNVbmRlZmluZWQoKSB8fCB0eS5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwg
TGVuZ3RoKDAsIEZpeGVkKSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1
ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9w
ZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
M0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgIExlbmd0aCB0eCA9IExlbmd0aCgw
LCBGaXhlZCk7CisgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwgRml4ZWQpOworICAg
ICAgICAgICAgTGVuZ3RoIHR6ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAgIGlmICh0
cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHR6ID0gY29u
dmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rv
cik7CisgICAgICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9u
KQorICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwg
c3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB0eCA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCBy
b290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1
ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVY
VHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1W
YWx1ZS0+bGVuZ3RoKCkgPiAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJh
bnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aCh0aGlyZFZhbHVlLCBzdHlsZSwgcm9v
dFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3Ro
KHNlY29uZFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKHR4LmlzVW5kZWZpbmVkKCkgfHwgdHkuaXNVbmRlZmluZWQoKSB8fCB0ei5pc1VuZGVm
aW5lZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKHR4LCB0eSwgdHosIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjogeworICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURl
Z3JlZXMoKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgwLCAwLCAxLCBhbmdsZSwgZ2V0VHJhbnNmb3Jt
T3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogeworICAg
ICAgICAgICAgZG91YmxlIHggPSAwOworICAgICAgICAgICAgZG91YmxlIHkgPSAwOworICAgICAg
ICAgICAgZG91YmxlIHogPSAwOworICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1
ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5v
cGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zv
cm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgeCA9IDE7CisgICAgICAgICAgICBlbHNlIGlm
ICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpSb3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHkgPSAxOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHogPSAxOworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKHgsIHksIHosIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZh
bHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRyYW5zZm9ybU9w
ZXJhdGlvbjogeworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA8IDQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
c2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFu
c2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7CisgICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogZm91cnRoVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKTsKKyAgICAgICAg
ICAgIGRvdWJsZSB4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAg
IGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBk
b3VibGUgeiA9IHRoaXJkVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3Vi
bGUgYW5nbGUgPSBmb3VydGhWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZSh4LCB5LCB6LCBhbmdsZSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1W
YWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJh
dGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFuc2Zv
cm1PcGVyYXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZ
VHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBkb3VibGUgYW5nbGVYID0gMDsKKyAg
ICAgICAgICAgIGRvdWJsZSBhbmdsZVkgPSAwOworICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0g
Zmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1W
YWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRy
YW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICBhbmdsZVkgPSBhbmdsZTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGFuZ2xlWCA9IGFuZ2xlOworICAgICAgICAg
ICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlWSA9IHNlY29uZFZhbHVlLT5jb21wdXRl
RGVncmVlcygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgsIGFuZ2xlWSwgZ2V0VHJhbnNmb3Jt
T3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPmxlbmd0aCgpIDwgNikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRvdWJsZSBhID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAg
IGRvdWJsZSBiID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSktPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAg
ICAgICBkb3VibGUgYyA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3Jt
VmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLT5nZXREb3VibGVWYWx1ZSgpOworICAg
ICAgICAgICAgZG91YmxlIGQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUoKTsK
KyAgICAgICAgICAgIGRvdWJsZSBlID0gem9vbUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNCkpLT5n
ZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91YmxlIGYgPSB6b29tRmFjdG9yICogc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayg1KSktPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBvcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoYSwg
YiwgYywgZCwgZSwgZikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246
IHsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPCAxNikKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDApKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFs
dWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+
Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDQpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDYpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDcpKS0+Z2V0RG91Ymxl
VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDgp
KS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDEwKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFu
c2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMSkpLT5nZXREb3VibGVWYWx1ZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb21GYWN0b3IgKiBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDEyKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgem9vbUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3Jt
VmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTMpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDE0KSktPmdldERvdWJs
ZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
NSkpLT5nZXREb3VibGVWYWx1ZSgpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAg
IExlbmd0aCBwID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAgIGlmIChmaXJzdFZhbHVl
LT5pc0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChm
aXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBxdWlyayB0aGF0IHNob3VsZCBnbyBh
d2F5IHdoZW4gM2QgdHJhbnNmb3JtcyBhcmUgZmluYWxpemVkLgorICAgICAgICAgICAgICAgIGRv
dWJsZSB2YWwgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAg
IHAgPSB2YWwgPj0gMCA/IExlbmd0aChjbGFtcFRvUG9zaXRpdmVJbnRlZ2VyKHZhbCksIEZpeGVk
KSA6IExlbmd0aChVbmRlZmluZWQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
cC5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUocCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJh
dGlvbjoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdXRPcGVyYXRpb25zID0gb3BlcmF0aW9uczsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3N0YXRpYyBG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlJlZmVyZW5jZUZpbHRl
ck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOwor
ICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZpbHRlck9wZXJhdGlvbjoK
KyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOworICAgIGNhc2UgV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4g
RmlsdGVyT3BlcmF0aW9uOjpTRVBJQTsKKyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpT
YXR1cmF0ZUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6
U0FUVVJBVEU7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVy
T3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOwor
ICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkludmVydEZpbHRlck9wZXJhdGlvbjoKKyAg
ICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOworICAgIGNhc2UgV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVybiBGaWx0
ZXJPcGVyYXRpb246Ok9QQUNJVFk7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJp
Z2h0bmVzc0ZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6
QlJJR0hUTkVTUzsKKyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRl
ck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q7Cisg
ICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Qmx1ckZpbHRlck9wZXJhdGlvbjoKKyAgICAg
ICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QkxVUjsKKyAgICBjYXNlIFdlYktpdENTU0ZpbHRl
clZhbHVlOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVy
T3BlcmF0aW9uOjpEUk9QX1NIQURPVzsKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgY2Fz
ZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICBy
ZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT007CisjZW5kaWYKKyAgICBjYXNlIFdlYktpdENT
U0ZpbHRlclZhbHVlOjpVbmtub3duRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gRmls
dGVyT3BlcmF0aW9uOjpOT05FOworICAgIH0KKyAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpO
T05FOworfQorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorU3R5bGVTaGFkZXIqIFN0eWxlUmVz
b2x2ZXI6OnN0eWxlU2hhZGVyKENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlz
V2ViS2l0Q1NTU2hhZGVyVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ1N0
eWxlU2hhZGVyRnJvbVZhbHVlKHN0YXRpY19jYXN0PFdlYktpdENTU1NoYWRlclZhbHVlKj4odmFs
dWUpKTsKKyAgICByZXR1cm4gMDsKK30KKworU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OmNh
Y2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFdlYktpdENTU1NoYWRlclZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBTdHlsZVNoYWRlciogc2hhZGVyID0gdmFsdWUtPmNhY2hlZE9yUGVuZGlu
Z1NoYWRlcigpOworICAgIGlmIChzaGFkZXIgJiYgc2hhZGVyLT5pc1BlbmRpbmdTaGFkZXIoKSkK
KyAgICAgICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IHRydWU7CisgICAgcmV0dXJuIHNoYWRlcjsK
K30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMoKQoreworICAgIGlm
ICghbV9zdHlsZS0+aGFzRmlsdGVyKCkgfHwgIW1faGFzUGVuZGluZ1NoYWRlcnMpCisgICAgICAg
IHJldHVybjsKKworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRl
ciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKworICAg
IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gbV9z
dHlsZS0+ZmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CisgICAg
ICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVy
YXRpb246OkNVU1RPTSkgeworICAgICAgICAgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKiBjdXN0
b21GaWx0ZXIgPSBzdGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVy
YXRpb24uZ2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGN1c3RvbUZpbHRlci0+cHJvZ3JhbSgp
KTsKKyAgICAgICAgICAgIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSogcHJvZ3JhbSA9IHN0YXRp
Y19jYXN0PFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSo+KGN1c3RvbUZpbHRlci0+cHJvZ3JhbSgp
KTsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKSAmJiBwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS0+aXNQZW5kaW5nU2hhZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBXZWJL
aXRDU1NTaGFkZXJWYWx1ZSogc2hhZGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdT
aGFkZXIqPihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKSktPmNzc1NoYWRlclZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgcHJvZ3JhbS0+c2V0VmVydGV4U2hhZGVyKHNoYWRlclZhbHVlLT5jYWNoZWRT
aGFkZXIoY2FjaGVkUmVzb3VyY2VMb2FkZXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpICYmIHByb2dyYW0tPmZyYWdtZW50U2hhZGVy
KCktPmlzUGVuZGluZ1NoYWRlcigpKSB7CisgICAgICAgICAgICAgICAgV2ViS2l0Q1NTU2hhZGVy
VmFsdWUqIHNoYWRlclZhbHVlID0gc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nU2hhZGVyKj4ocHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKSktPmNzc1NoYWRlclZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgcHJvZ3JhbS0+c2V0RnJhZ21lbnRTaGFkZXIoc2hhZGVyVmFsdWUtPmNhY2hlZFNoYWRlcihj
YWNoZWRSZXNvdXJjZUxvYWRlcikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIG1faGFzUGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgc29ydFBh
cmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0
ZXI+JiBhLCBjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYikKK3sKKyAgICBy
ZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGEtPm5hbWUoKSwgYi0+bmFtZSgpKTsKK30K
KworUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNl
Q3VzdG9tRmlsdGVyTnVtYmVyUGFyYW10ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxp
c3QqIHZhbHVlcykKK3sKKyAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyPiBu
dW1iZXJQYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI6OmNyZWF0ZShuYW1l
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLT5sZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
ayhpKTsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBudW1iZXJQYXJhbWV0ZXItPmFk
ZFZhbHVlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0
dXJuIG51bWJlclBhcmFtZXRlci5yZWxlYXNlKCk7Cit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6
cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUs
IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlckxpc3QpCit7CisgICAgSGFzaFNl
dDxTdHJpbmc+IGtub3duUGFyYW1ldGVyTmFtZXM7CisgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3Ig
cGFyYW1ldGVySXRlcmF0b3IocGFyYW1ldGVyc1ZhbHVlKTsKKyAgICBmb3IgKDsgcGFyYW1ldGVy
SXRlcmF0b3IuaGFzTW9yZSgpOyBwYXJhbWV0ZXJJdGVyYXRvci5hZHZhbmNlKCkpIHsKKyAgICAg
ICAgaWYgKCFwYXJhbWV0ZXJJdGVyYXRvci52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvciBpdGVyYXRv
cihwYXJhbWV0ZXJJdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgaWYgKCFpdGVyYXRvci5pc1By
aW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJp
bWl0aXZlVHlwZSgpICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAgLy8gRG8gbm90IGFsbG93IGR1cGxp
Y2F0ZSBwYXJhbWV0ZXIgbmFtZXMuCisgICAgICAgIGlmIChrbm93blBhcmFtZXRlck5hbWVzLmNv
bnRhaW5zKG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBrbm93blBh
cmFtZXRlck5hbWVzLmFkZChuYW1lKTsKKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yLmFkdmFu
Y2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghaXRlcmF0b3IuaGFzTW9yZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBvdGhlciBwYXJhbWV0ZXJzIHR5cGVzIHBhcnNpbmcuCisgICAgICAgIC8vIGJvb2xlYW5zOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0MzgKKyAgICAgICAgLy8g
dGV4dHVyZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQ0Mgor
ICAgICAgICAvLyAzZC10cmFuc2Zvcm1zOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzE0NDMKKyAgICAgICAgLy8gbWF0MiwgbWF0MywgbWF0NDogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDQ0CisgICAgICAgIFJlZlB0cjxDdXN0b21G
aWx0ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlcjsKKyAgICAgICAgaWYgKGl0ZXJhdG9yLnZhbHVlKCkt
PmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzID0gc3Rh
dGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBp
dGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIGNhbiBo
YXZlIG9ubHkgYXJyYXlzIG9mIGJvb2xlYW5zIG9yIG51bWJlcnMsIHNvIHVzZSB0aGUgZmlyc3Qg
dmFsdWUgdG8gY2hvb3NlIGJldHdlZW4gdGhvc2UgdHdvLgorICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHdlIGhhdmUgYXQgbGVhc3Qgb25lIHZhbHVlLiBXZSBuZWVkIHVwIHRvIDQgdmFsdWVzIChh
bGwgYm9vbGVhbnMgb3IgYWxsIG51bWJlcnMpLgorICAgICAgICAgICAgaWYgKCF2YWx1ZXMtPmxl
bmd0aCgpIHx8IHZhbHVlcy0+bGVuZ3RoKCkgPiA0KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCF2YWx1ZXMtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBm
aXJzdFByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgICAgICAgICAgaWYgKGZpcnN0UHJp
bWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgPSBwYXJzZUN1c3RvbUZpbHRlck51bWJl
clBhcmFtdGVyKG5hbWUsIHZhbHVlcyk7CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoZSBib29sZWFuIGFycmF5IHBhcmFtZXRlciBoZXJlLgorICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDM4CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmICghcGFyYW1ldGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgcGFyYW1ldGVyTGlzdC5hcHBlbmQocGFyYW1ldGVyLnJlbGVhc2Uo
KSk7CisgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3VyZSB3ZSBzb3J0IHRoZSBwYXJhbWV0ZXJz
IGJlZm9yZSBwYXNzaW5nIHRoZW0gZG93biB0byB0aGUgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLgor
ICAgIHN0ZDo6c29ydChwYXJhbWV0ZXJMaXN0LmJlZ2luKCksIHBhcmFtZXRlckxpc3QuZW5kKCks
IHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29tcGFyYXRvcik7CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpj
cmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZh
bHVlKQoreworICAgIEFTU0VSVChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkpOworCisgICAgQ1NTVmFs
dWUqIHNoYWRlcnNWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDAp
OworICAgIEFTU0VSVChzaGFkZXJzVmFsdWUtPmlzVmFsdWVMaXN0KCkpOworICAgIENTU1ZhbHVl
TGlzdCogc2hhZGVyc0xpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihzaGFkZXJzVmFs
dWUpOworCisgICAgQVNTRVJUKHNoYWRlcnNMaXN0LT5sZW5ndGgoKSk7CisgICAgUmVmUHRyPFN0
eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNoYWRlcihzaGFkZXJzTGlzdC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAgUmVmUHRyPFN0eWxlU2hhZGVyPiBmcmFnbWVudFNo
YWRlciA9IChzaGFkZXJzTGlzdC0+bGVuZ3RoKCkgPiAxKSA/IHN0eWxlU2hhZGVyKHNoYWRlcnNM
aXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKSA6IDA7CisgICAgCisgICAgdW5zaWduZWQg
bWVzaFJvd3MgPSAxOworICAgIHVuc2lnbmVkIG1lc2hDb2x1bW5zID0gMTsKKyAgICBDdXN0b21G
aWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlIG1lc2hCb3hUeXBlID0gQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uOjpGSUxURVJfQk9YOworICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUg
bWVzaFR5cGUgPSBDdXN0b21GaWx0ZXJPcGVyYXRpb246OkFUVEFDSEVEOworICAgIAorICAgIENT
U1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUgPSAwOworICAgIAorICAgIGlmIChmaWx0ZXJWYWx1ZS0+
bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKGZp
bHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFRoZSBzZWNvbmQgdmFsdWUgbWlnaHQgYmUgdGhlIG1lc2ggYm94IG9yIHRoZSBsaXN0IG9m
IHBhcmFtZXRlcnM6CisgICAgICAgIC8vIElmIGl0IHN0YXJ0cyB3aXRoIGEgbnVtYmVyIG9yIGFu
eSBvZiB0aGUgbWVzaC1ib3ggaWRlbnRpZmllcnMgaXQgaXMgCisgICAgICAgIC8vIHRoZSBtZXNo
LWJveCBsaXN0LCBpZiBub3QgaXQgbWVhbnMgaXQgaXMgdGhlIHBhcmFtZXRlcnMgbGlzdC4KKwor
ICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTW9yZSgpICYmIGl0ZXJhdG9yLmlzUHJpbWl0aXZlVmFs
dWUoKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgICAg
IC8vIElmIG9ubHkgb25lIGludGVnZXIgdmFsdWUgaXMgc3BlY2lmaWVkLCBpdCB3aWxsIHNldCBi
b3RoCisgICAgICAgICAgICAgICAgLy8gdGhlIHJvd3MgYW5kIHRoZSBjb2x1bW5zLgorICAgICAg
ICAgICAgICAgIG1lc2hSb3dzID0gbWVzaENvbHVtbnMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50
VmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGFub3RoZXIgbnVtYmVyIGZv
ciB0aGUgY29sdW1ucy4KKyAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTW9yZSgpICYm
IGl0ZXJhdG9yLmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc2hDb2x1
bW5zID0gcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChpdGVyYXRvci5oYXNNb3JlKCkgJiYgaXRlcmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgpKSB7Cisg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQm9yZGVyQm94CisgICAgICAg
ICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVQYWRkaW5n
Qm94CisgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVDb250ZW50Qm94CisgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVGaWx0ZXJCb3gpIHsKKyAgICAgICAgICAgICAgICBtZXNoQm94VHlw
ZSA9ICpwcmltaXRpdmVWYWx1ZTsKKyAgICAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpdGVyYXRv
ci5oYXNNb3JlKCkgJiYgaXRlcmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRGV0YWNoZWQpIHsKKyAgICAgICAgICAgICAg
ICBtZXNoVHlwZSA9IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6REVUQUNIRUQ7CisgICAgICAgICAg
ICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoIWl0ZXJhdG9yLmluZGV4KCkpIHsKKyAgICAgICAgICAgIC8vIElm
IG5vIHZhbHVlIHdhcyBjb25zdW1lZCBmcm9tIHRoZSBtZXNoIHZhbHVlLCB0aGVuIGl0IGlzIGp1
c3QgYSBwYXJhbWV0ZXIgbGlzdCwgbWVhbmluZyB0aGF0IHdlIGVuZCB1cAorICAgICAgICAgICAg
Ly8gaGF2aW5nIGp1c3QgdHdvIENTU0xpc3RWYWx1ZXM6IGxpc3Qgb2Ygc2hhZGVycyBhbmQgbGlz
dCBvZiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5ndGgo
KSA9PSAyKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnNWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChm
aWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPiAyICYmICFwYXJhbWV0ZXJzVmFsdWUpCisgICAgICAgIHBh
cmFtZXRlcnNWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpOwor
ICAgIAorICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QgcGFyYW1ldGVyTGlzdDsKKyAgICBp
ZiAocGFyYW1ldGVyc1ZhbHVlICYmICFwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QocGFy
YW1ldGVyc1ZhbHVlLCBwYXJhbWV0ZXJMaXN0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgUmVmUHRyPFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IFN0eWxlQ3VzdG9t
RmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHZlcnRleFNoYWRlci5yZWxlYXNlKCksIGZyYWdtZW50U2hh
ZGVyLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KHByb2dyYW0ucmVsZWFzZSgpLCBwYXJhbWV0ZXJMaXN0LCBtZXNoUm93cywgbWVzaENvbHVtbnMs
IG1lc2hCb3hUeXBlLCBtZXNoVHlwZSk7Cit9CisjZW5kaWYKKworYm9vbCBTdHlsZVJlc29sdmVy
OjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSog
c3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJh
dGlvbnMpCit7CisgICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKKyAgICAKKyAg
ICBpZiAoIWluVmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoaW5W
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaW5WYWx1ZSk7
CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFpblZhbHVl
LT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCB6b29t
RmFjdG9yID0gc3R5bGUgPyBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpIDogMTsKKyAgICBGaWx0ZXJP
cGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0g
aW5WYWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgIENTU1ZhbHVlKiBj
dXJyVmFsdWUgPSBpLnZhbHVlKCk7CisgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1dlYktpdENT
U0ZpbHRlclZhbHVlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NGaWx0ZXJW
YWx1ZSo+KGkudmFsdWUoKSk7CisgICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShmaWx0ZXJWYWx1ZS0+b3Bl
cmF0aW9uVHlwZSgpKTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgaWYgKG9w
ZXJhdGlvblR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0ZUN1c3RvbUZpbHRl
ck9wZXJhdGlvbihmaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW9wZXJhdGlvbikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIC8vIENoZWNrIHRoYXQgYWxsIHBh
cmFtZXRlcnMgYXJlIHByaW1pdGl2ZSB2YWx1ZXMsIHdpdGggdGhlCisgICAgICAgIC8vIGV4Y2Vw
dGlvbiBvZiBkcm9wIHNoYWRvdyB3aGljaCBoYXMgYSBTaGFkb3dWYWx1ZSBwYXJhbWV0ZXIuCisg
ICAgICAgIGlmIChvcGVyYXRpb25UeXBlICE9IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1cp
IHsKKyAgICAgICAgICAgIGJvb2wgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0gZmFsc2U7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgZmlsdGVyVmFsdWUtPmxlbmd0aCgpOyAr
K2opIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGopLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaGF2
ZU5vblByaW1pdGl2ZVZhbHVlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhhdmVOb25Q
cmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gZmlsdGVyVmFsdWUtPmxlbmd0
aCgpID8gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihmaWx0ZXJWYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygwKSkgOiAwOworICAgICAgICBzd2l0Y2ggKGZpbHRlclZhbHVlLT5v
cGVyYXRpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6UmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZSkKKyAg
ICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uOjpjcmVhdGUoZmlyc3RWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSwgb3BlcmF0
aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICBj
YXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAg
Y2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb246IHsKKyAg
ICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOworICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVl
LT5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJj
ZW50YWdlKCkpCisgICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBvcGVyYXRpb25UeXBlKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU0Zp
bHRlclZhbHVlOjpIdWVSb3RhdGVGaWx0ZXJPcGVyYXRpb246IHsKKyAgICAgICAgICAgIGRvdWJs
ZSBhbmdsZSA9IDA7CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09IDEp
CisgICAgICAgICAgICAgICAgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygpOwor
CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlLCBvcGVyYXRpb25UeXBlKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZh
bHVlOjpJbnZlcnRGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOgorICAgICAgICBjYXNlIFdlYktp
dENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVyT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBk
b3VibGUgYW1vdW50ID0gKGZpbHRlclZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb24pID8gMCA6IDE7CisgICAgICAg
ICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICBh
bW91bnQgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIGlm
IChmaXJzdFZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgYW1vdW50
IC89IDEwMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZShhbW91bnQsIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJsdXJGaWx0ZXJPcGVyYXRpb246
IHsKKyAgICAgICAgICAgIExlbmd0aCBzdGREZXZpYXRpb24gPSBMZW5ndGgoMCwgRml4ZWQpOwor
ICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA+PSAxKQorICAgICAgICAgICAg
ICAgIHN0ZERldmlhdGlvbiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxl
LCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaWYgKHN0ZERldmlhdGlvbi5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZShzdGREZXZpYXRpb24sIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb246IHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkg
IT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIENTU1Zh
bHVlKiBjc3NWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOwor
ICAgICAgICAgICAgaWYgKCFjc3NWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19j
YXN0PFNoYWRvd1ZhbHVlKj4oY3NzVmFsdWUpOworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRp
b24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0
b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIGludCBi
bHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwg
cm9vdFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBDb2xvciBjb2xvcjsKKyAg
ICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZShsb2NhdGlvbiwgYmx1ciwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJh
bnNwYXJlbnQsIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRp
b246CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgb3V0T3BlcmF0aW9u
cyA9IG9wZXJhdGlvbnM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZgorCitQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5k
aW5nSW1hZ2UqIHBlbmRpbmdJbWFnZSkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2Fj
aGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNl
TG9hZGVyKCk7CisKKyAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKKyAg
ICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VW
YWx1ZSgpOworICAgICAgICByZXR1cm4gaW1hZ2VWYWx1ZS0+Y2FjaGVkSW1hZ2UoY2FjaGVkUmVz
b3VyY2VMb2FkZXIpOworICAgIH0KKworICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlR2Vu
ZXJhdG9yVmFsdWUoKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiBpbWFnZUdl
bmVyYXRvclZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFnZUdlbmVyYXRvclZhbHVlKCk7Cisg
ICAgICAgIGltYWdlR2VuZXJhdG9yVmFsdWUtPmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VM
b2FkZXIpOworICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGltYWdl
R2VuZXJhdG9yVmFsdWUpOworICAgIH0KKworI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQorICAg
IGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlU2V0VmFsdWUoKSkgeworICAgICAgICBDU1NJbWFn
ZVNldFZhbHVlKiBpbWFnZVNldFZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFnZVNldFZhbHVl
KCk7CisgICAgICAgIHJldHVybiBpbWFnZVNldFZhbHVlLT5jYWNoZWRJbWFnZVNldChjYWNoZWRS
ZXNvdXJjZUxvYWRlcik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCit7CisgICAgaWYgKG1fcGVuZGlu
Z0ltYWdlUHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hT
ZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0ltYWdlUHJv
cGVydGllcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9ICppdDsKKwor
ICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgeworICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZEltYWdlOiB7CisgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dy
b3VuZExheWVyID0gbV9zdHlsZS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5k
TGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSAmJiBiYWNrZ3JvdW5kTGF5
ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIGJhY2tn
cm91bmRMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBl
bmRpbmdJbWFnZSo+KGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlD
b250ZW50OiB7CisgICAgICAgICAgICBmb3IgKENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNv
bnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0eWxlLT5jb250ZW50RGF0YSgpKTsgY29udGVudERh
dGE7IGNvbnRlbnREYXRhID0gY29udGVudERhdGEtPm5leHQoKSkgeworICAgICAgICAgICAgICAg
IGlmIChjb250ZW50RGF0YS0+aXNJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0eWxl
SW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRh
KS0+aW1hZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJbWFn
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVk
SW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4o
aW1hZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkZWRJbWFnZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29u
dGVudERhdGEpLT5zZXRJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogeworICAg
ICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0eWxlLT5jdXJzb3JzKCkp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEN1cnNvckRhdGEmIGN1cnJlbnRDdXJz
b3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFN0eWxlSW1h
Z2UqIGltYWdlID0gY3VycmVudEN1cnNvci5pbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudEN1cnNvci5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKKyAgICAgICAg
ICAgIGlmIChtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3R5bGUtPmxpc3RTdHlsZUlt
YWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGlz
dFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFn
ZSo+KG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsKKyAg
ICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJv
cmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxT
dHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm94UmVmbGVjdDogeworICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlv
biA9IG1fc3R5bGUtPmJveFJlZmxlY3QoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IE5pbmVQ
aWVjZUltYWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0aW9uLT5tYXNrKCk7CisgICAgICAgICAgICAg
ICAgaWYgKG1hc2tJbWFnZS5pbWFnZSgpICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1BlbmRpbmdJ
bWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJ
bWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPiht
YXNrSW1hZ2UuaW1hZ2UoKSkpOworICAgICAgICAgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRN
YXNrKE5pbmVQaWVjZUltYWdlKGxvYWRlZEltYWdlLnJlbGVhc2UoKSwgbWFza0ltYWdlLmltYWdl
U2xpY2VzKCksIG1hc2tJbWFnZS5maWxsKCksIG1hc2tJbWFnZS5ib3JkZXJTbGljZXMoKSwgbWFz
a0ltYWdlLm91dHNldCgpLCBtYXNrSW1hZ2UuaG9yaXpvbnRhbFJ1bGUoKSwgbWFza0ltYWdlLnZl
cnRpY2FsUnVsZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tCb3hJbWFnZVNvdXJjZTogeworICAgICAgICAgICAgaWYgKG1fc3R5bGUtPm1hc2tCb3hJbWFn
ZVNvdXJjZSgpICYmIG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFn
ZSgpKQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2Fk
UGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bWFz
a0JveEltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOiB7CisgICAgICAgICAgICBmb3Ig
KEZpbGxMYXllciogbWFza0xheWVyID0gbV9zdHlsZS0+YWNjZXNzTWFza0xheWVycygpOyBtYXNr
TGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0lt
YWdlKCkpCisgICAgICAgICAgICAgICAgICAgIG1hc2tMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRp
bmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tMYXllci0+aW1hZ2Uo
KSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43YTQyMDQxNzEzOWIxYWJkOWY5MDY3N2U5MWU4N2I1NjY5MzhmOTVjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMCwwICsxLDU0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgU3R5bGVSZXNvbHZlcl9oCisjZGVmaW5lIFN0eWxlUmVzb2x2ZXJfaAorCisjaW5jbHVkZSAi
Q1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkxpbmtIYXNo
LmgiCisjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgi
CisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHsgRG9O
b3RVc2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRNaW5pbXVtRm9yRm9udEZpemUg
fTsKKworY2xhc3MgQ1NTRm9udFNlbGVjdG9yOworY2xhc3MgQ1NTUGFnZVJ1bGU7CitjbGFzcyBD
U1NQcmltaXRpdmVWYWx1ZTsKK2NsYXNzIENTU1Byb3BlcnR5OworY2xhc3MgQ1NTUnVsZUxpc3Q7
CitjbGFzcyBDU1NGb250RmFjZTsKK2NsYXNzIENTU0ZvbnRGYWNlUnVsZTsKK2NsYXNzIENTU0lt
YWdlR2VuZXJhdG9yVmFsdWU7CitjbGFzcyBDU1NJbWFnZVNldFZhbHVlOworY2xhc3MgQ1NTSW1h
Z2VWYWx1ZTsKK2NsYXNzIENTU1NlbGVjdG9yOworY2xhc3MgQ1NTU3R5bGVSdWxlOworY2xhc3Mg
Q1NTU3R5bGVTaGVldDsKK2NsYXNzIENTU1ZhbHVlOworY2xhc3MgQ29udGFpbmVyTm9kZTsKK2Ns
YXNzIEN1c3RvbUZpbHRlck9wZXJhdGlvbjsKK2NsYXNzIEN1c3RvbUZpbHRlclBhcmFtZXRlcjsK
K2NsYXNzIERvY3VtZW50OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEZyYW1lOworY2xhc3MgRnJh
bWVWaWV3OworY2xhc3MgS1VSTDsKK2NsYXNzIEtleWZyYW1lTGlzdDsKK2NsYXNzIEtleWZyYW1l
VmFsdWU7CitjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOworY2xhc3MgTm9kZTsKK2NsYXNzIFJl
bmRlclJlZ2lvbjsKK2NsYXNzIFJ1bGVEYXRhOworY2xhc3MgUnVsZVNldDsKK2NsYXNzIFNldHRp
bmdzOworY2xhc3MgU3RhdGljQ1NTUnVsZUxpc3Q7CitjbGFzcyBTdHlsZUJ1aWxkZXI7CitjbGFz
cyBTdHlsZUltYWdlOworY2xhc3MgU3R5bGVLZXlmcmFtZTsKK2NsYXNzIFN0eWxlUGVuZGluZ0lt
YWdlOworY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNzIFN0eWxlUnVsZTsKK2NsYXNzIFN0
eWxlUnVsZUtleWZyYW1lczsKK2NsYXNzIFN0eWxlUnVsZVBhZ2U7CitjbGFzcyBTdHlsZVJ1bGVS
ZWdpb247CitjbGFzcyBTdHlsZVNoYWRlcjsKK2NsYXNzIFN0eWxlU2hlZXQ7CitjbGFzcyBTdHls
ZVNoZWV0SW50ZXJuYWw7CitjbGFzcyBTdHlsZVNoZWV0TGlzdDsKK2NsYXNzIFN0eWxlZEVsZW1l
bnQ7CitjbGFzcyBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTsKK2NsYXNzIFdlYktpdENTU1NoYWRlclZh
bHVlOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQordHlwZWRlZiBWZWN0b3I8UmVmUHRyPEN1
c3RvbUZpbHRlclBhcmFtZXRlcj4gPiBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0OworI2VuZGlm
CisKK2NsYXNzIE1lZGlhUXVlcnlSZXN1bHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1l
ZGlhUXVlcnlSZXN1bHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBN
ZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAmIGV4cHIsIGJvb2wgcmVzdWx0KQor
ICAgICAgICA6IG1fZXhwcmVzc2lvbihleHByKQorICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkK
KyAgICB7CisgICAgfQorCisgICAgTWVkaWFRdWVyeUV4cCBtX2V4cHJlc3Npb247CisgICAgYm9v
bCBtX3Jlc3VsdDsKK307CisKK2VudW0gU3R5bGVTaGFyaW5nQmVoYXZpb3IgeworICAgIEFsbG93
U3R5bGVTaGFyaW5nLAorICAgIERpc2FsbG93U3R5bGVTaGFyaW5nLAorfTsKKworLy8gTWF0Y2hP
bmx5VXNlckFnZW50UnVsZXMgaXMgdXNlZCBpbiBtZWRpYSBxdWVyaWVzLCB3aGVyZSByZWxhdGl2
ZSB1bml0cworLy8gYXJlIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnQgcm9v
dCBlbGVtZW50IHN0eWxlLCBhbmQgc3R5bGVkIG9ubHkKKy8vIGZyb20gdGhlIFVzZXIgQWdlbnQg
U3R5bGVzaGVldCBydWxlcy4KKworZW51bSBSdWxlTWF0Y2hpbmdCZWhhdmlvciB7CisgICAgTWF0
Y2hBbGxSdWxlcywKKyAgICBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcywKK307CisKKy8vIFRoaXMg
Y2xhc3Mgc2VsZWN0cyBhIFJlbmRlclN0eWxlIGZvciBhIGdpdmVuIGVsZW1lbnQgYmFzZWQgb24g
YSBjb2xsZWN0aW9uIG9mIHN0eWxlc2hlZXRzLgorY2xhc3MgU3R5bGVSZXNvbHZlciB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVSZXNvbHZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIFN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqLCBib29sIG1hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcyk7CisgICAgflN0eWxlUmVzb2x2ZXIoKTsKKworICAgIC8vIFVzaW5n
IHRoZXNlIGR1cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0byBvcHRp
bWl6ZSBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgorICAgIHZvaWQgcHVz
aFBhcmVudEVsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgcG9wUGFyZW50RWxlbWVudChFbGVt
ZW50Kik7CisgICAgdm9pZCBwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290Kik7
CisgICAgdm9pZCBwb3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKKworICAg
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gMCwgU3R5bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxl
U2hhcmluZywKKyAgICAgICAgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBS
ZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKKworICAgIHZvaWQga2V5ZnJhbWVT
dHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgS2V5ZnJhbWVM
aXN0Jik7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1l
bnQoUHNldWRvSWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwKTsKKwor
ICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KTsK
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckRvY3VtZW50KERv
Y3VtZW50KiwgQ1NTRm9udFNlbGVjdG9yKiA9IDApOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KKyAgICBSZW5kZXJTdHls
ZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsg
fQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAg
ICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrZXIuZG9jdW1lbnQo
KTsgfQorICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1
cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBjb25zdCBGb250RGVzY3JpcHRp
b24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVudFN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOyB9CisgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICB2b2lkIHNldFpvb20oZmxv
YXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9CisgICAgdm9pZCBz
ZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZm
ZWN0aXZlWm9vbShmKTsgfQorICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1f
Zm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIpOyB9CisgICAgYm9vbCBo
YXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnROb2RlOyB9CisgICAgCisgICAg
dm9pZCBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVj
dG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+Jik7CisgICAgCisgICAgLy8gRmluZCB0aGUgaWRzIG9y
IGNsYXNzZXMgdGhlIHNlbGVjdG9ycyBvbiBhIHN0eWxlc2hlZXQgYXJlIHNjb3BlZCB0by4gVGhl
IHNlbGVjdG9ycyBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIGluIHN1YnRyZWVzIHdoZXJlIHRoZSBy
b290IGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2NvcGUuCisgICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5l
U3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKFN0eWxlU2hlZXRJbnRlcm5hbCosIEhhc2hTZXQ8QXRv
bWljU3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNs
YXNzU2NvcGVzKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxl
bWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8p
OworICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgY29sbGVjdEZlYXR1
cmVzKCk7CisgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CisgICAgYm9vbCBt
YXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CisgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVt
ZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKKyAgICBTdHls
ZWRFbGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNv
dW50KSBjb25zdDsKKyAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVt
ZW50KikgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvcktleWZy
YW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtleWZyYW1lVmFs
dWUmKTsKKworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgdm9pZCBwdXNoU2NvcGUoY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50
KTsKKyAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsKKyNlbHNl
CisgICAgdm9pZCBwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IENvbnRhaW5l
ck5vZGUqKSB7IH0KKyAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqKSB7IH0K
KyNlbmRpZgorCitwdWJsaWM6CisgICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxsIGdpdmUgYmFjayB0
aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBlbGVtZW50IChvciBhIHBz
ZXVkby1lbGVtZW50KS4KKyAgICBlbnVtIENTU1J1bGVGaWx0ZXIgeworICAgICAgICBVQUFuZFVz
ZXJDU1NSdWxlcyAgID0gMSA8PCAxLAorICAgICAgICBBdXRob3JDU1NSdWxlcyAgICAgID0gMSA8
PCAyLAorICAgICAgICBFbXB0eUNTU1J1bGVzICAgICAgID0gMSA8PCAzLAorICAgICAgICBDcm9z
c09yaWdpbkNTU1J1bGVzID0gMSA8PCA0LAorICAgICAgICBBbGxCdXRFbXB0eUNTU1J1bGVzID0g
VUFBbmRVc2VyQ1NTUnVsZXMgfCBBdXRob3JDU1NSdWxlcyB8IENyb3NzT3JpZ2luQ1NTUnVsZXMs
CisgICAgICAgIEFsbENTU1J1bGVzICAgICAgICAgPSBBbGxCdXRFbXB0eUNTU1J1bGVzIHwgRW1w
dHlDU1NSdWxlcywKKyAgICB9OworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHN0eWxlUnVs
ZXNGb3JFbGVtZW50KEVsZW1lbnQqLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVt
cHR5Q1NTUnVsZXMpOworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHBzZXVkb1N0eWxlUnVs
ZXNGb3JFbGVtZW50KEVsZW1lbnQqLCBQc2V1ZG9JZCwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUg
PSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsKKworICAgIC8vIEdpdmVuIGEgQ1NTIGtleXdvcmQgaW4g
dGhlIHJhbmdlICh4eC1zbWFsbCB0byAtd2Via2l0LXh4eC1sYXJnZSksIHRoaXMgZnVuY3Rpb24g
d2lsbCByZXR1cm4KKyAgICAvLyB0aGUgY29ycmVjdCBmb250IHNpemUgc2NhbGVkIHJlbGF0aXZl
IHRvIHRoZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVtKS4KKyAgICBzdGF0aWMgZmxvYXQgZm9udFNp
emVGb3JLZXl3b3JkKERvY3VtZW50KiwgaW50IGtleXdvcmQsIGJvb2wgc2hvdWxkVXNlRml4ZWRE
ZWZhdWx0U2l6ZSk7CisKKyAgICAvLyBHaXZlbiBhIGZvbnQgc2l6ZSBpbiBwaXhlbCwgdGhpcyBm
dW5jdGlvbiB3aWxsIHJldHVybiBsZWdhY3kgZm9udCBzaXplIGJldHdlZW4gMSBhbmQgNy4KKyAg
ICBzdGF0aWMgaW50IGxlZ2FjeUZvbnRTaXplKERvY3VtZW50KiwgaW50IHBpeGVsRm9udFNpemUs
IGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSk7CisKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHMpIHsgbV9zdHlsZSA9IHM7IH0gLy8gVXNl
ZCBieSB0aGUgZG9jdW1lbnQgd2hlbiBzZXR0aW5nIHVwIGl0cyByb290IHN0eWxlLgorCisgICAg
dm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFJlbmRl
clN0eWxlKik7CisKKyAgICB2b2lkIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9w
ZXJ0eUlELCBDU1NWYWx1ZSopOworCisgICAgdm9pZCB1cGRhdGVGb250KCk7CisKKyAgICBzdGF0
aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBmbG9h
dCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBF
U21hcnRNaW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSk7CisK
KyAgICB2b2lkIHNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOworCitw
cml2YXRlOgorICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6
ZShEb2N1bWVudCosIFJlbmRlclN0eWxlKiwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3Bl
Y2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpOworCitwdWJsaWM6CisgICAgYm9vbCB1
c2VTVkdab29tUnVsZXMoKTsKKworICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENT
U1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25zdDsKKwor
ICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJikgY29u
c3Q7CisKKyAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udFNlbGVjdG9yLmdldCgpOyB9CisKKyAgICB2b2lkIGFkZFZpZXdwb3J0RGVwZW5kZW50
TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiwgYm9vbCByZXN1bHQpOworCisg
ICAgYm9vbCBhZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdDsKKworICAgIHZvaWQgYWxs
VmlzaXRlZFN0YXRlQ2hhbmdlZCgpIHsgbV9jaGVja2VyLmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQo
KTsgfQorICAgIHZvaWQgdmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCkg
eyBtX2NoZWNrZXIudmlzaXRlZFN0YXRlQ2hhbmdlZCh2aXNpdGVkSGFzaCk7IH0KKworICAgIHZv
aWQgYWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4pOworCisg
ICAgYm9vbCBjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOworCisgICAg
Ym9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmVhdHVyZXMuc2libGlu
Z1J1bGVzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9mZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXM7IH0KKyAgICBib29sIHVzZXNC
ZWZvcmVBZnRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzQmVmb3JlQWZ0
ZXJSdWxlczsgfQorICAgIGJvb2wgdXNlc0xpbmtSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZXMudXNlc0xpbmtSdWxlczsgfQorCisgICAgc3RhdGljIGJvb2wgY3JlYXRlVHJhbnNmb3Jt
T3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRl
clN0eWxlKiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwor
ICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKKyAgICAK
KyAgICAvLyBXQVJOSU5HLiBUaGlzIHdpbGwgY29uc3RydWN0IENTU09NIHdyYXBwZXJzIGZvciBh
bGwgc3R5bGUgcnVsZXMgYW5kIGNhY2hlIHRoZW4gaW4gYSBtYXAgZm9yIHNpZ25pZmljYW50IG1l
bW9yeSBjb3N0LgorICAgIC8vIEl0IGlzIGhlcmUgdG8gc3VwcG9ydCBpbnNwZWN0b3IuIERvbid0
IHVzZSBmb3IgYW55IHJlZ3VsYXIgZW5naW5lIGZ1bmN0aW9ucy4KKyAgICBDU1NTdHlsZVJ1bGUq
IGVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVSdWxlKik7CisKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1Zh
bHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHls
ZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CisjaWYgRU5BQkxFKENTU19TSEFE
RVJTKQorICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihDU1NWYWx1ZSopOworICAgIFN0eWxl
U2hhZGVyKiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFk
ZXJWYWx1ZSopOworICAgIGJvb2wgcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1Zh
bHVlKiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlck51bWJlclBhcmFtdGVyKGNvbnN0IFN0
cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJP
cGVyYXRpb24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1
ZSopOworICAgIHZvaWQgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisjZW5kaWYKKyNlbmRpZiAvLyBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisKKyAgICBzdHJ1Y3QgUnVsZUZlYXR1cmUgeworICAgICAgICBS
dWxlRmVhdHVyZShTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxlY3RvciwgYm9vbCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICAgICAgICAgOiBydWxlKHJ1bGUpCisgICAg
ICAgICAgICAsIHNlbGVjdG9yKHNlbGVjdG9yKQorICAgICAgICAgICAgLCBoYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pIAorICAgICAgICB7IAorICAg
ICAgICB9CisgICAgICAgIFN0eWxlUnVsZSogcnVsZTsKKyAgICAgICAgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yOworICAgICAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47CisgICAgfTsK
KyAgICBzdHJ1Y3QgRmVhdHVyZXMgeworICAgICAgICBGZWF0dXJlcygpOworICAgICAgICB+RmVh
dHVyZXMoKTsKKyAgICAgICAgdm9pZCBhZGQoY29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMm
KTsKKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0lt
cGwqPiBpZHNJblJ1bGVzOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhdHRy
c0luUnVsZXM7CisgICAgICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gc2libGluZ1J1bGVzOworICAg
ICAgICBWZWN0b3I8UnVsZUZlYXR1cmU+IHVuY29tbW9uQXR0cmlidXRlUnVsZXM7CisgICAgICAg
IGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzOworICAgICAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1
bGVzOworICAgICAgICBib29sIHVzZXNMaW5rUnVsZXM7CisgICAgfTsKKworcHJpdmF0ZToKKyAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBk
ZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4g
LWR3aAorICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShS
ZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0Zv
clRleHRTaXplQWRqdXN0KCk7CisKKyAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsK
KworICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRj
aGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CisKKyAgICBzdHJ1Y3QgTWF0Y2hSYW5nZXMgeworICAg
ICAgICBNYXRjaFJhbmdlcygpIDogZmlyc3RVQVJ1bGUoLTEpLCBsYXN0VUFSdWxlKC0xKSwgZmly
c3RBdXRob3JSdWxlKC0xKSwgbGFzdEF1dGhvclJ1bGUoLTEpLCBmaXJzdFVzZXJSdWxlKC0xKSwg
bGFzdFVzZXJSdWxlKC0xKSB7IH0KKyAgICAgICAgaW50IGZpcnN0VUFSdWxlOworICAgICAgICBp
bnQgbGFzdFVBUnVsZTsKKyAgICAgICAgaW50IGZpcnN0QXV0aG9yUnVsZTsKKyAgICAgICAgaW50
IGxhc3RBdXRob3JSdWxlOworICAgICAgICBpbnQgZmlyc3RVc2VyUnVsZTsKKyAgICAgICAgaW50
IGxhc3RVc2VyUnVsZTsKKyAgICB9OworCisgICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzIHsK
KyAgICAgICAgTWF0Y2hlZFByb3BlcnRpZXMoKSA6IHBvc3NpYmx5UGFkZGVkTWVtYmVyKDApIHsg
fQorICAgICAgICAKKyAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHByb3BlcnRpZXM7
CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgbGlua01hdGNoVHlwZSA6IDI7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaXNJ
blJlZ2lvblJ1bGUgOiAxOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIC8vIFVzZWQgdG8g
bWFrZSBzdXJlIGFsbCBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZCBzaW5jZSB3ZSBjb21wdXRl
IHRoZSBoYXNoIG92ZXIgdGhlIGJ5dGVzIG9mIHRoaXMgb2JqZWN0LgorICAgICAgICAgICAgdm9p
ZCogcG9zc2libHlQYWRkZWRNZW1iZXI7CisgICAgICAgIH07CisgICAgfTsKKworICAgIHN0cnVj
dCBNYXRjaFJlc3VsdCB7CisgICAgICAgIE1hdGNoUmVzdWx0KCkgOiBpc0NhY2hlYWJsZSh0cnVl
KSB7IH0KKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4gbWF0Y2hlZFByb3Bl
cnRpZXM7CisgICAgICAgIFZlY3RvcjxTdHlsZVJ1bGUqLCA2ND4gbWF0Y2hlZFJ1bGVzOworICAg
ICAgICBNYXRjaFJhbmdlcyByYW5nZXM7CisgICAgICAgIGJvb2wgaXNDYWNoZWFibGU7CisgICAg
fTsKKworICAgIHN0cnVjdCBNYXRjaE9wdGlvbnMgeworICAgICAgICBNYXRjaE9wdGlvbnMoYm9v
bCBpbmNsdWRlRW1wdHlSdWxlcywgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKSA6IHNj
b3BlKHNjb3BlKSwgaW5jbHVkZUVtcHR5UnVsZXMoaW5jbHVkZUVtcHR5UnVsZXMpIHsgfQorICAg
ICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKKyAgICAgICAgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlczsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMo
TWF0Y2hSZXN1bHQmLCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0g
MCwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIGJv
b2wgaW5SZWdpb25SdWxlID0gZmFsc2UpOworICAgIHZvaWQgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhNYXRjaFJlc3VsdCYsIFN0eWxlUHJvcGVydHlTZXQqLCBib29sIGlzQ2FjaGVhYmxlID0g
dHJ1ZSk7CisKKyAgICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lk
IG1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYpOworICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNo
UmVzdWx0JiwgUnVsZVNldCopOworICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3Vs
dCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0
Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoU2NvcGVk
QXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2
b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBp
bnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOworICAgIHZvaWQgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CisgICAgdm9pZCBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RS
dWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CisgICAg
Ym9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKKyAgICB2b2lk
IHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxl
cyhNYXRjaFJlc3VsdCYpOworCisgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRh
JiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKTsKKyAgICBib29sIGNoZWNrUmVnaW9u
U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdpb25FbGVt
ZW50KTsKKyAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQm
KTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+CisgICAgdm9pZCBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgYm9vbCBpbXBvcnRhbnQsIGludCBzdGFydElu
ZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSk7CisgICAgdGVtcGxhdGUgPGJv
b2wgZmlyc3RQYXNzPgorICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVy
dHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5o
ZXJpdGVkT25seSwgYm9vbCBmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzKTsKKworICAgIHN0YXRpYyBi
b29sIGlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQpOworCisgICAgdm9p
ZCBtYXRjaFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqLCBib29sIGlzTGVmdFBhZ2Us
IGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOworICAgIHZvaWQgbWF0
Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywg
Y29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0Zp
cnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CisgICAgYm9vbCBpc0xlZnRQYWdlKGlu
dCBwYWdlSW5kZXgpIGNvbnN0OworICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkg
Y29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQorICAgIGJvb2wgaXNGaXJz
dFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CisgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdl
SW5kZXgpIGNvbnN0OworCisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CisgICAg
T3duUHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxlOworCisgICAgRmVhdHVyZXMgbV9mZWF0dXJlczsK
KyAgICBPd25QdHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKKyAgICBPd25QdHI8UnVsZVNl
dD4gbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7CisKKyAgICBib29sIG1faGFzVUFBcHBlYXJh
bmNlOworICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOworICAgIEZpbGxMYXllciBtX2JhY2tn
cm91bmREYXRhOworICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworCisgICAgdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiA+IEtl
eWZyYW1lc1J1bGVNYXA7CisgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZyYW1lc1J1bGVNYXA7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxl
KCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQorCisgICAgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgQ1NTSW1hZ2VWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVk
T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUq
KTsKKyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7
CisjZW5kaWYKKworICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0KKyAgICBib29sIGFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKworICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvSW50
TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9v
dFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOworICAgIHN0YXRpYyBMZW5ndGggY29udmVy
dFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0
eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7CisKK3ByaXZhdGU6CisgICAg
c3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOworCisgICAgdm9pZCBh
ZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+KiwgUnVsZVNldCYgdXNlclN0eWxlKTsKKworICAg
IHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CisKKyAgICB2b2lkIG1hcEZpbGxBdHRh
Y2htZW50KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBt
YXBGaWxsQ2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZv
aWQgbWFwRmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSop
OworICAgIHZvaWQgbWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NW
YWx1ZSopOworICAgIHZvaWQgbWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllcios
IENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBGaWxs
TGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmlsbFJlcGVhdFkoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxTaXplKENTU1Byb3Bl
cnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsWFBvc2l0aW9u
KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxs
WVBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisKKyAgICB2
b2lkIG1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9pZCBt
YXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1h
cEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBB
bmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1h
cEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEFuaW1h
dGlvblBsYXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5pbWF0
aW9uUHJvcGVydHkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlv
blRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisKK3B1YmxpYzoKKyAgICB2
b2lkIG1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgTmluZVBpZWNl
SW1hZ2UmKTsKKyAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NTVmFsdWUqLCBOaW5l
UGllY2VJbWFnZSYpOworICAgIExlbmd0aEJveCBtYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFs
dWUqKTsKKyAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlKiwgTmluZVBp
ZWNlSW1hZ2UmKTsKK3ByaXZhdGU6CisgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wo
U3R5bGVkRWxlbWVudCopIGNvbnN0OworCisgICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQsIENTU1ZhbHVlKik7CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIHZvaWQgYXBwbHlTVkdQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworI2VuZGlmCisKKyAgICBQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqKTsKKyAg
ICB2b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0
ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyosIHVuc2lnbmVk
IHNpemUpOworICAgIHN0cnVjdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSB7CisgICAgICAg
IFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4gbWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAgIE1h
dGNoUmFuZ2VzIHJhbmdlczsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZW5kZXJTdHls
ZTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBwYXJlbnRSZW5kZXJTdHlsZTsKKyAgICB9
OworICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBmaW5kRnJvbU1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUodW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQmKTsKKyAgICB2
b2lkIGFkZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgdW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1
bHQmKTsKKworICAgIC8vIEV2ZXJ5IE4gYWRkaXRpb25zIHRvIHRoZSBtYXRjaGVkIGRlY2xhcmF0
aW9uIGNhY2hlIHRyaWdnZXIgYSBzd2VlcCB3aGVyZSBlbnRyaWVzIGhvbGRpbmcKKyAgICAvLyB0
aGUgbGFzdCByZWZlcmVuY2UgdG8gYSBzdHlsZSBkZWNsYXJhdGlvbiBhcmUgZ2FyYmFnZSBjb2xs
ZWN0ZWQuCisgICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKKworICAgIHVu
c2lnbmVkIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwOwor
CisgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRl
bT4gTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTsKKyAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlIG1f
bWF0Y2hlZFByb3BlcnRpZXNDYWNoZTsKKworICAgIC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0
aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVsZW1lbnQsIGFuZCBhIHRlbXBvcmFyeSBi
dWZmZXIgdXNlZCBmb3IKKyAgICAvLyBtZXJnZSBzb3J0aW5nLgorICAgIFZlY3Rvcjxjb25zdCBS
dWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxlczsKKworICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxl
TGlzdD4gbV9ydWxlTGlzdDsKKworICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gbV9wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzOworCisgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVk
aXVtOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOworCisgICAg
UHNldWRvSWQgbV9keW5hbWljUHNldWRvOworCisgICAgU2VsZWN0b3JDaGVja2VyIG1fY2hlY2tl
cjsKKworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKKyAgICBSZW5kZXJTdHlsZSog
bV9wYXJlbnRTdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOworICAg
IEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7
CisgICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7CisgICAgRUluc2lkZUxpbmsg
bV9lbGVtZW50TGlua1N0YXRlOworICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKKyAg
ICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7CisgICAgYm9vbCBtX2ZvbnREaXJ0eTsKKyAg
ICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOworICAgIGJvb2wgbV9zYW1lT3JpZ2lu
T25seTsKKworICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOworICAg
IFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeVJlc3VsdD4gPiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyeVJlc3VsdHM7CisKKyAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
OworICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOworICAgIGNvbnN0
IFN0eWxlQnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7CisgICAgCisgICAgSGFzaE1hcDxTdHlsZVJ1
bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXA7
CisgICAgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBtX3N0eWxlU2hlZXRDU1NPTVdy
YXBwZXJTZXQ7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgYm9vbCBtX2hhc1BlbmRp
bmdTaGFkZXJzOworI2VuZGlmCisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIHN0YXRp
YyBjb25zdCBDb250YWluZXJOb2RlKiBkZXRlcm1pbmVTY29wZShjb25zdCBTdHlsZVNoZWV0SW50
ZXJuYWwqKTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250YWluZXJOb2RlKiwgT3du
UHRyPFJ1bGVTZXQ+ID4gU2NvcGVkUnVsZVNldE1hcDsKKworICAgIFJ1bGVTZXQqIHJ1bGVTZXRG
b3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKikgY29uc3Q7CisKKyAgICB2b2lkIHNldHVwU2Nv
cGVTdGFjayhjb25zdCBDb250YWluZXJOb2RlKik7CisgICAgYm9vbCBzY29wZVN0YWNrSXNDb25z
aXN0ZW50KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFyZW50
ICYmIHBhcmVudCA9PSBtX3Njb3BlU3RhY2tQYXJlbnQ7IH0KKworICAgIFNjb3BlZFJ1bGVTZXRN
YXAgbV9zY29wZWRBdXRob3JTdHlsZXM7CisgICAgCisgICAgc3RydWN0IFNjb3BlU3RhY2tGcmFt
ZSB7CisgICAgICAgIFNjb3BlU3RhY2tGcmFtZSgpIDogbV9zY29wZSgwKSwgbV9ydWxlU2V0KDAp
IHsgfQorICAgICAgICBTY29wZVN0YWNrRnJhbWUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUs
IFJ1bGVTZXQqIHJ1bGVTZXQpIDogbV9zY29wZShzY29wZSksIG1fcnVsZVNldChydWxlU2V0KSB7
IH0KKyAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZTsKKyAgICAgICAgUnVsZVNl
dCogbV9ydWxlU2V0OworICAgIH07CisgICAgLy8gVmVjdG9yICh1c2VkIGFzIHN0YWNrKSB0aGF0
IGtlZXBzIHRyYWNrIG9mIHNjb3BpbmcgZWxlbWVudHMgKGkuZS4sIGVsZW1lbnRzIHdpdGggYSA8
c3R5bGUgc2NvcGVkPiBjaGlsZCkKKyAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcgdHJlZSBpdGVy
YXRpb24gZm9yIHN0eWxlIHJlc29sdXRpb24uCisgICAgVmVjdG9yPFNjb3BlU3RhY2tGcmFtZT4g
bV9zY29wZVN0YWNrOworICAgIC8vIEVsZW1lbnQgbGFzdCBzZWVuIGFzIHBhcmVudCBlbGVtZW50
IHdoZW4gdXBkYXRpbmcgbV9zY29waW5nRWxlbWVudFN0YWNrLgorICAgIC8vIFRoaXMgaXMgdXNl
ZCB0byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50U3RhY2sgaXMgY29uc2lzdGVudCwg
c2VwYXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9wYXJlbnRTdGFjay4KKyAgICBjb25z
dCBDb250YWluZXJOb2RlKiBtX3Njb3BlU3RhY2tQYXJlbnQ7CisjZW5kaWYKKworICAgIGZyaWVu
ZCBjbGFzcyBTdHlsZUJ1aWxkZXI7CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBN
YXRjaGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJik7CisgICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQ
cm9wZXJ0aWVzJik7CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRjaFJhbmdl
cyYsIGNvbnN0IE1hdGNoUmFuZ2VzJik7CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBNYXRjaFJhbmdlcyYsIGNvbnN0IE1hdGNoUmFuZ2VzJik7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdHlsZVJlc29sdmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1dl
YktpdENTU01hdHJpeC5jcHAKaW5kZXggMWU4NDcxZmY1NzEyM2Q3NDFlOTdmMTU0Y2Y5OWM5ODJk
MzE5NDNkYy4uZGM5NTI5NGQ4NDRkNGRkZTVkMTM2MGYyMWNiNmE0Y2M5NjliMDgyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKQEAgLTI3LDExICsyNywxMSBAQAogI2lu
Y2x1ZGUgIldlYktpdENTU01hdHJpeC5oIgogCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5j
bHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZTFlYjc0YjUyNWVhZTBjMWE4NjcxNzg0ZDhjMTk1
NjQ4MjlhODVlMC4uZDE1MWY1NmMwZjFhNzMyYzU0ZDEzZWEzYWQ1NzNkNGZiNWJkMmM4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiQ0RBVEFT
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNs
YXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NT
dHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNh
Y2hlZENTU1N0eWxlU2hlZXQuaCIKQEAgLTE0Myw2ICsxNDIsNyBAQAogI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKICNpbmNsdWRlICJTaGFkb3dUcmVlLmgiCiAjaW5jbHVkZSAiU3RhdGljSGFzaFNl
dE5vZGVMaXN0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxl
U2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYWE3NTI2YTlkNmY0MDdjZGM3YjM2
NmM1YjkxMzZkMDU5Y2M2MTAwMS4uM2IxNjNiMDU3YTc1N2EzYjhiOGVlZjAzZjk5OGQwNTcxZWRj
YzExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUg
IkF0dHIuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxp
c3QuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2xhc3NMaXN0
LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgogI2luY2x1ZGUgIkNsaWVudFJlY3RMaXN0Lmgi
CkBAIC02NCw2ICs2Myw3IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CmluZGV4IDk3MzAwMGU5NThhMGUyODQ4MmRkM2NmODcxMzdiZTc2Nzk4NzQzZmUuLjM5YTQwMGM2
NjRlYTYyYTgwMzYzYWQ0ZWQyNDJiZjQ3OTc0NTM3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTM3
LDcgKzM3LDYgQEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1NlbGVj
dG9yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxl
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2hpbGRO
b2RlTGlzdC5oIgogI2luY2x1ZGUgIkNsYXNzTm9kZUxpc3QuaCIKQEAgLTg5LDYgKzg4LDcgQEAK
ICNpbmNsdWRlICJTaGFkb3dUcmVlLmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKICNp
bmNsdWRlICJTdG9yYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5j
bHVkZSAiVGFnTm9kZUxpc3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEV2
ZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKaW5kZXggN2I0NDBlZTYwNWFlNTBhNWJh
YmFhNDE5NzAxMjczMWRiNDg3N2FkYy4uOGMxZDhiMmQ4YzY0OTdlZTBkNGQxOTBjM2Y3YTY0MjZi
NjY0NzczOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcApAQCAtMjcsNyArMjcsNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKIAotI2luY2x1ZGUg
IkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJET01TZWxlY3Rpb24uaCIKICNpbmNsdWRl
ICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNDAsNiArMzksNyBAQAog
I2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2luY2x1ZGUgIlNoYWRvd1RyZWUuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJt
YXJrdXAuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1NoYWRvd1RyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1RyZWUuY3Bw
CmluZGV4IDQ0MDkyZjc1ZDRmZDViYTJjYzUzYjRiZDMzNWVmNzFjZjg1ZTZjMDQuLjI5NTlkMWU4
Mzg2YmZiMzJhNDkxMzc0MzEzOTQ2NTllNWRmMjFjZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaGFkb3dUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93VHJl
ZS5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
aGFkb3dUcmVlLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
Q29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkVsZW1lbnQuaCIKQEAgLTM1LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5j
bHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmNwcAppbmRleCA2NzY5MmFmMWM3ZWU2ZTdmNDczN2UxN2JlZDY4NWE1NDUyODJkZDgwLi4w
MDdjM2FmMGMwZTFhMjZkYzdhZWM3NDZiOTMxZWYxOWFjY2RjNDFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1N0eWxlZEVsZW1lbnQuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQXR0cmlidXRl
LmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVT
aGVldC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1
ZVBvb2wuaCIKQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgor
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5o
PgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcAppbmRleCBkY2Q5NzhjMGQxN2Q4YjMwOTI4Yjk0YzllMmQxMWMxMzJj
NzliMTllLi40MzA2NzY4NjQyZmMxMzIyNjg0ZTdhNGQ1YmIzZjA0ZjYzZTMyZTllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApAQCAtMzAsNyArMzAs
NiBAQAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQ1LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0
LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAyNjQ3ZTQwNDkwZjU4
ZjUyYmUwYmFjZTE0OTQwZmU0NDI4ZDQ5NWE0Li42ZTQ0MWM4M2Q0N2NiMjdmMmViNzMxYTg1MDNk
ODVmZTU1NTk5ZGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdT
dHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBA
IC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUnVs
ZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC00NSw2ICs0NCw3IEBACiAjaW5jbHVk
ZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCBmZThlNTdjNTE0YTgx
ODZmZDU0ODE1YjgyNDgyZWU3MTcyNWZlZmNmLi43OTE2NDNkZGZlOWQ0ODg1OTBhN2RhMjM4Y2U5
MTFiMTA0ZjFiNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zMyw3ICszMyw2
IEBACiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNsaXBib2FyZEV2ZW50Lmgi
CkBAIC04MCw2ICs3OSw3IEBACiAjaW5jbHVkZSAiU3BlbGxDaGVja2VyLmgiCiAjaW5jbHVkZSAi
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQu
aCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1
ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggMzY0YTE3YzVjODAyNzA1ZTc2OWUzNzJh
NDZlNWNkNmVkNDY2YjM2ZC4uOTUxNWI5MDEzYzVkYjUyN2FjNTA4MGQxYmJjYTA0NjcxYmIxNmM0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1
ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0
eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NW
YWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDaGlsZExp
c3RNdXRhdGlvblNjb3BlLmgiCkBAIC01NSw2ICs1NCw3IEBACiAjaW5jbHVkZSAiUmFuZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0Lmgi
CisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAppbmRleCAzYWNhZjhlMzgwNTExZTc2NjY1
NDQzZDBiYzY3N2Y4ODExYTUyOGUxLi4xMTYzNmY2NzQ2M2Q4OWVhNTIyMjU5OTE0ODVhMDgwYzUw
YTEwZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKQEAgLTI2LDcgKzI2
LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCiAKLSNp
bmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCkBAIC0zNCw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTERvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNw
cAppbmRleCA2MTA0NDgwOWFjYTk4Njk4MGFlY2JiZDYwMjZkYWZhMTM5YjQ1NzI3Li5iOWQ3Njdl
MzA0YmM5YTVjMGQzYzY0MDc1OTg1ODczYTdjMzRjMjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RG9jdW1lbnQuY3BwCkBAIC01NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
CiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCkBAIC03NCw2ICs3Myw3IEBACiAjaW5jbHVk
ZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExpbmtFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNw
cAppbmRleCAwNjliOTNlMmZlYzM2OWJmNDQzMTZhNjM3MDkxNTQzNGZhZGRhZGM0Li5mMTY4Mjlj
Y2I0ZWUyYTdhNTc1NGVjYmNlZmVmYWRjN2FlMGIzOGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTGlua0VsZW1lbnQuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiSFRNTExpbmtF
bGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKQEAgLTQ1
LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCmlu
ZGV4IGUwOTIwMDA2MjM3Y2U2YTBlMmFlNWIyZTVjNTU5NGU0Y2M1OTMyZGMuLjg2OTUwNjQwYjcw
MzAwZDQ1MTFhNzk2YTljYjZjNWQxYjdkNTljNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT3B0R3JvdXBFbGVtZW50LmNwcApAQCAtMjUsMTMgKzI1LDEzIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQ1NT
U3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJN
ZW51TGlzdC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIk5vZGVS
ZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAppbmRleCA5NWE3OTcxZjMxMGU4YmVmMmZhMDYx
ODcyNzA4ZWRjYjlmOWM2ZWU0Li5iYWY2Y2E5OGU1ZmY2ZjYzMTY4ZjZiODEwZmEyODAzOGQ0NDIx
YTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcApAQCAtMjgs
NyArMjgsNiBAQAogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAKICNpbmNsdWRlICJB
dHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VmFsaWRhdGlvbk1lc3NhZ2UuY3BwCmluZGV4IDk3MDBmODQ0ZWNlYzY4MDJhZmU0OWNjNWVhOWU0
MGY0ZDNlYTk4MjcuLmJmZGE5ODYwYjk4NTc1MzNkYWIzM2JkMTMzNjc4OWViOTQwMzJiMzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCkBAIC0zMiw3ICszMiw2
IEBACiAjaW5jbHVkZSAiVmFsaWRhdGlvbk1lc3NhZ2UuaCIKIAogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgog
I2luY2x1ZGUgIkZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIgpAQCAtNDUsNiArNDQsNyBAQAogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNo
YWRvd1RyZWUuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dC5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDNiOTI0
NTU5Y2ZmMDJmY2E4MmE4YTZmMDFjNzhlMjk4MTU3ZDQ4NmIuLmU1ZDg3NDJmOTE5ZjExYmJkZjU1
ZmNhN2NlMzM3NWQxNzJkMWQyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMzUsNyArMzUsNiBAQAog
I2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgog
I2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKQEAgLTU5LDYgKzU4LDcgQEAKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgogI2luY2x1ZGUgIlN0
eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAi
VGV4dE1ldHJpY3MuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCA4ZjYzNDY1
Y2VmZTc2NzVhNzgxNzUyYjkwYTQzMGYxN2M0MjBjZjFjLi42ZWE0ODVkMWU4ZWZkYmVmZTU5NWJj
YTVjNTc0NjlhMTRmZWEwZTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAKICNpbmNsdWRl
ICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJET01Ub2tlbkxpc3Qu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBAIC01Myw2ICs1Miw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDE1ZDNjZmVhN2Q2Y2FmNTU5NjJmZjFkMjQ5ODcyYzM0
NGQ2MWI2YjIuLjM2NGU0ZDQxYWEwZDMzMTFiZjNiMDMwZmZkMTVjZDIyNzkxNmQwNjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtMzUs
NyArMzUsNiBAQAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5o
IgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5
UG9saWN5LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC00OSw2ICs0OCw3IEBACiAjaW5j
bHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9w
ZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1
bGUuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA1ZjBhYWZlMzNlYjVkY2M5ODhm
ODczNzhlZTVmYzRlOTNhNTQ0ODQ3Li40OGFiZDEyZjhlMTMzYzgyNjU1MjQzMjVmMWEyNzg5Y2I4
Zjg2NWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAi
Q1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NT
dHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNo
YXJhY3RlckRhdGEuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCkBAIC04NSw2ICs4NCw3
IEBACiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNoYWRvd1RyZWUuaCIKICNp
bmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
I2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUg
IlhQYXRoUmVzdWx0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAKaW5kZXggY2ViYWJkZDhlMjJhYzU0Njc5NWM5NjQzMDVmZjc4ODUzYjBh
YTM3YS4uNGNmNTUzOGZlMTY1Y2YzODNkZmY2MTg3MWE2NDQwYTdiNjFjMjY1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtMzYs
NyArMzYsNiBAQAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5o
IgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5
UG9saWN5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQ5LDYgKzQ4LDcgQEAKICNpbmNs
dWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxl
LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTGlua0xvYWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTGlua0xvYWRlci5jcHAKaW5kZXggN2Q2OTk3
ODg2Yjk2NzBjNzg4ODFlYzU0OGNjZjcwZDU2YTc3YTEwMS4uZTU2MmQxMDUwNTk3MzgyNTM1MTcz
Mzg0MzE3ZWJhYWRlMzlmZGJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0xp
bmtMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9hZGVyLmNwcApA
QCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxpbmtMb2Fk
ZXIuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTdHls
ZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCkBAIC00Myw2ICs0Miw3IEBACiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiTGlua1JlbEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCAwNTI4NzFkYWI2YmM1MDFmNzM0NjFiMzY4
MzA3Y2Q4MGY2M2FhYTEyLi4zYWQ3MGUwYTA5OGE0ZGQxMWU5NmM1OTAwM2NhYzc1YjgzMmE5ZGEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVk
ZSAiQmVmb3JlVW5sb2FkRXZlbnQuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2Vs
ZWN0b3IuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5j
bHVkZSAiQ3J5cHRvLmgiCkBAIC05MSw2ICs5MCw3IEBACiAjaW5jbHVkZSAiU3RvcmFnZUluZm8u
aCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiU3R5bGVNZWRpYS5o
IgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdWRkZW5UZXJtaW5hdGlv
bi5oIgogI2luY2x1ZGUgIldlYktpdFBvaW50LmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBhZjQwYmQxZjViYmI1ZDk0NGY2M2Zl
NWNlNzBhNGY2Y2Q5OGY1OTBhLi40Nzk0MTZjM2VmNTJhN2U3MjliYzM0ZTBhMjk0MDMxZTllYWQy
YWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAKICNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50
LmgiCkBAIC02Niw2ICs2NSw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNs
dWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIK
IAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggYWQx
OWU1NmJlZDU5NTg0OTJjNWY5NTI4OWFiNjUyYTAwODBmN2VjMS4uYzc5NjIyYmM0ODRhOWIxNDFl
NGRhYjdmNjBmM2Y2YTA0MjM1YjhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0yMyw3ICsyMyw2
IEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQmFja0Zv
cndhcmRMaXN0LmgiCiAjaW5jbHVkZSAiQmFzZTY0LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgog
I2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50LmgiCkBAIC02Nyw2ICs2Niw3IEBACiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlICJT
dG9yYWdlTmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
IlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJWb2lkQ2FsbGJhY2suaCIKICNpbmNs
dWRlICJXaWRnZXQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0tleWZyYW1lQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tl
eWZyYW1lQW5pbWF0aW9uLmNwcAppbmRleCA2NzBjZmI0OWU3MzcxZDIxMDczNzlhMDE0YzE1ODI5
YjBlNzQ0NTQ2Li5hMWM5MDJiODRiYmYzNmFmMWEzNWFkYjgxYzBkNTRjNmEyZmFlMmQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
Y3BwCkBAIC0zMSwxMSArMzEsMTEgQEAKIAogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0
eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIKICNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIKICNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
IDx3dGYvVW51c2VkUGFyYW0uaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKaW5kZXggMTFiZjNlNzg4MjZkNDdh
MTEwOTY0YmI3Y2NlOWU4NTUzYjI5ZGJjMC4uY2M0ZGQxNDVkM2QzMGU4Y2JhZTRkZTVlM2Q5Njkw
ZDJjOTNhZjZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dC5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJS
ZW5kZXJUaGVtZVF0LmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNo
cm9tZUNsaWVudC5oIgpAQCAtNTcsNiArNTYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdE1vYmlsZS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMu
aCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRdE1vYmlsZS5jcHAKaW5kZXggM2Q4YjU2NWQ3NWY0OTY2OGI3N2Y2ZTQ5MGNjZGRi
ODNmOGIwYzdiMC4uOTE1NWNkNDExNDY4NTJhZjlkN2ZjOTExMDM0YmFiYWNjMzQ4YmNkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5j
cHAKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZVF0TW9iaWxlLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQog
I2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA5Nzk1ZmRhOWRjZTdkNjVjZWM1MTJkNWZiMWQx
YzU3ODdkNjY4ZmYwLi41MWEzMTAyNDNjYzQzNDRjYTBjYWUyMzM0YzgxMmY5YzYxZWFkOWM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTQ2LDcgKzQ2LDYg
QEAKIAogI2luY2x1ZGUgIkNvbHVtbkluZm8uaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRFdmVudFF1ZXVlLmgiCkBA
IC05Miw2ICs5MSw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTb3VyY2VH
cmFwaGljLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5k
ZXggYThkNzgzNDE4OTBmZWU1Mzg2ZjNjNDkzMjE2YmUwZGI4N2YyNWMwYS4uZTQ3NTVjNmZkMWVl
MjFiODg1YzUyYWNmMzA5YjRlYjZiNDQ4N2I2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRl
ICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01Miw2ICs1MSw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
RW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGlsZWRC
YWNraW5nLmgiCiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKaW5kZXggMzYzMzZmYmEzM2Q4MDUyNmMxM2VhOTVjOTcz
MTA2NWE0Njg0ZDVkYy4uOGNiN2Q3YmI0MWE1ZjA0Y2Q5MDg4Y2NmMWQ1OTM1MGZhY2MyYzZkZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtMzIsNyAr
MzIsNiBAQAogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRT
ZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIkV2ZW50
SGFuZGxlci5oIgpAQCAtNTgsNiArNTcsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIK
KyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5j
cHAKaW5kZXggZWQwMDQ0MzkzZTdlMzI2ODU1YzdmOTVlNTBkOTIxOTU2YTA5OWRkOS4uNmQyNWMz
NTcyOTM1ZDZiZWZiODYwMmQ4ZTZkZDBmMDY3MTIxZDM1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAi
QVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdC5oIgogI2lu
Y2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgpAQCAtNDQsNiArNDMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPG1hdGgu
aD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA3MGU5
OWI0MWNmODlhMDQ4NTcxYjY4OWEzMzAzMTk4YTY1MWMyZWZlLi4wOTYxNGRiNDBkN2VmYjlhMDI0
Yzg3NGExNzZlMWE4ZTY1N2Y0MWJmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgog
CiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb250ZW50RGF0YS5oIgogI2luY2x1
ZGUgIkN1cnNvckxpc3QuaCIKQEAgLTY0LDYgKzYzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2lu
Y2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAppbmRleCA1MTA0NDY5NTEwZTUyMWMzZWZkM2My
ZDI5ZmY5N2JkMzdmNjBmM2NjLi5hN2JhMmVhZGMxNTkyMDlkZjRjZWVjOThlMmY2NWQ3NWJkYTMy
YWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApAQCAtMzAs
NyArMzAsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5o
IgogCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CkBAIC0zOCw2ICszNyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94UmVnaW9uSW5mby5oIgogI2lu
Y2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
KyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAppbmRleCBlMWQ2Y2NjNTI0ZDc0
YTc4ZTU0MGJhMjJkMzE1NzUwY2ZlZWVmM2FkLi5mNzhiYTVjNzViMGE1MTAzZTEzYzllZGFmYTMx
ZTNmNDM2ZmQ0YjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2xpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNw
cApAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgogCiAjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRI
YW5kbGVyLmgiCkBAIC00MCw2ICszOSw3IEBACiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2lu
Y2x1ZGUgIlNsaWRlclRodW1iRWxlbWVudC5oIgogI2luY2x1ZGUgIlN0ZXBSYW5nZS5oIgorI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1
c2luZyBzdGQ6Om1pbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggOWVjZmM1ZDZmM2E0YzE2M2YwNGZh
NmQwOTQyOTlmMWQ0Y2E4ZjA0OC4uMjI5ZmVkOTk0ZjBmMWE1OGViNDE5NzYyZGQyNWZhZjU0MDNh
MjJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKIAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5o
IgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdv
cmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTQzLDYg
KzQyLDcgQEAKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmlu
ZGV4IDI0MWY1YzRiNTEyNzk4ZmU1YTgzZWFjY2UxNDdlYzBhMjkwNDhjMDMuLjgwMWIyMzVhOWM5
ZTEwYmRkNTE0YzJjMzJkNTE1ZjlhYmYyY2E2MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTIyLDcgKzIyLDYgQEAKIAogI2ltcG9ydCAiQml0bWFw
SW1hZ2UuaCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCi0jaW1wb3J0ICJDU1NTdHlsZVNlbGVjdG9y
LmgiCiAjaW1wb3J0ICJDU1NWYWx1ZUxpc3QuaCIKICNpbXBvcnQgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCkBAIC00NSw2ICs0NCw3IEBACiAjaW1wb3J0ICJSZW5k
ZXJWaWV3LmgiCiAjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIlN0cmluZ1RydW5j
YXRvci5oIgorI2ltcG9ydCAiU3R5bGVSZXNvbHZlci5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5o
IgogI2ltcG9ydCAiVGhlbWVNYWMuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFy
aS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCmlu
ZGV4IDQxZGE1YzBjZWViNjNiNDY5YzFhYTU2N2EzMTA0NGJjNWUyMTZhOWMuLjAwYTVkN2U2Njc4
OTY2ZDJlODM2MWJmOTJiZDM5ZmRiYjAxNDE0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcApAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUg
IlJlbmRlclNsaWRlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTb2Z0
TGlua2luZy5oIgotI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIKKyNpbmNsdWRlICJTdHls
ZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCmluZGV4IDVkNzFiOTY3MTIwMWVhYzM0NWMxM2EyOWRmZmQ4
MGIyMDJlMzRiYjIuLjNiZTMwNWRiNTZkODcyMTMwMzk3OGUyZjJmZTY2ZjhlN2FhYWRlZWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcApAQCAt
MjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkNvbnRlbnREYXRhLmgiCiAjaW5jbHVkZSAiQ3Vyc29y
TGlzdC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTV3JhcFNoYXBlcy5oIgogI2luY2x1ZGUgIkZvbnRT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKQEAgLTM1LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlNoYWRvd0RhdGEu
aCIKICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJh
dGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJh
dGVkSW1hZ2UuY3BwCmluZGV4IGY5YTY5YWEyZDg2ODkzNTI5NmQ2NTNlMDA5YzBhNDNmMjg5NTMy
NDMuLmZkOTk0OTI5NTExYTgzMTM5N2I2MmQ1YWZkMzhiNzdmMzBjODIwZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5j
cHAKQEAgLTI1LDggKzI1LDggQEAKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCiAK
ICNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlN0eWxlUmVz
b2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEu
Y3BwCmluZGV4IDUyOWZjNGViODEyMTA5NDMwZjljOTQ5Y2E1OTk1YzUwMTFiOGZhY2IuLmMyNDJk
Y2MwMjM4MWUxMjljY2M2ZDM3NjQ2ZjBlMmZmOWZhNGFjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YS5jcHAKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
dHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9y
LmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNsdWRlICJSZW5kZXJDb3VudGVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTMwLDYgKzI5LDcgQEAKICNpbmNsdWRlICJT
dHlsZUZpbHRlckRhdGEuaCIKICNpbmNsdWRlICJTdHlsZVRyYW5zZm9ybURhdGEuaCIKICNpbmNs
dWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwCmluZGV4IGVlMTE1Y2I2MTJlY2RkZTQ2MzUzOTgzZGZjNzA5
MGFhZGQ0ZjJlODcuLjA5ZDQ0NmI3ZDZlZWI5ZmY1NzhkNTQ2YTA5NTAyNzRjNWE3ZmFkNGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQu
aCIKIAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2Vs
ZWN0b3IuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgpAQCAtMzcsNiArMzYsNyBAQAogI2luY2x1
ZGUgIlNWR0lubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIu
aCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAppbmRleCA0YmFjZjc3Y2U5
ZTVmNDNlYmY4YTQ3M2NmYjkzN2NjOTg3ZmJjYjU4Li5iYTk4NzhjZTc1NTdjNzNkM2UzZjMyODMx
NjY0N2IxMmI3OTNmNTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2xpcFBh
dGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50
LmNwcApAQCAtMjUsMTIgKzI1LDEyIEBACiAjaW5jbHVkZSAiU1ZHQ2xpcFBhdGhFbGVtZW50Lmgi
CiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3Bw
CmluZGV4IDYzODViNWMxOTg2OTFjNzU5NjgyYTcyMWM2ZjM3NzFkZDY2NmUyYzguLmUzYjVlNjkw
OWE4MWY3NGJiNGQ5ODZlOTBmYjJjMDg3MzZiMmM4Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1
ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
CiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkV2ZW50LmgiCkBAIC01MSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU1ZHVVJJUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV2
ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiWE1M
TmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dEZhY2VFbGVtZW50LmNwcAppbmRleCA3OTZmMWE3NzZlMTFlNWEwMDFjMWIzNjdhZjZjZWY3YjAw
YjdkYzc0Li4wYWYwZTVmNmU2Yzc0YThiZWMyNmJhNjAyMzJhNGExYzVhNTA4NTExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcApAQCAtMjksNyArMjksNiBAQAog
I2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNp
bmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgog
I2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgpAQCAtNDAsNiArMzksNyBAQAogI2luY2x1ZGUgIlNW
R0ZvbnRGYWNlU3JjRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0dseXBoRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
IlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgPG1hdGguaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
R3JhZGllbnRFbGVtZW50LmNwcAppbmRleCAwN2E4OGFkOTYxOWM4M2U4MDY2MGUxY2JkOThhNDM5
YjZkOWUyNDExLi5jNDVhNWJhMGZhNTk5ZThiZmUyY2JjNzI2NDQzYTgwYjM5ZGI4ZjFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcApAQCAtMjUsNyArMjUsNiBA
QAogI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0cmlidXRl
LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0hp
ZGRlbkNvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgiCkBAIC0zNSw2ICszNCw3IEBACiAjaW5j
bHVkZSAiU1ZHU3RvcEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAj
aW5jbHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTWFza0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNw
cAppbmRleCBkNmVmNDA1MjAzZTFmMTAxM2Y5MzhjMGZmMzY3YzMxMTQ2ZmZiMGQ5Li45MGM1YzY1
ZmY5ZTY5NjZjMTQ5YzQwM2EwZWVmOTZjY2U2ZGI3NjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdN
YXNrRWxlbWVudC5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2luY2x1ZGUgIlNWR01hc2tFbGVt
ZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCIKICNpbmNsdWRlICJT
VkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNW
R1JlbmRlclN1cHBvcnQuaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKKyNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1VzZUVsZW1lbnQuY3BwCmluZGV4IGZmNjIyYWIxMTM3NWI1YzhiYWZhNjhkMjg0NjdlNjE4YWZh
NTc1YWQuLmViYTU2YThlOWYwOTc5YmM1ZWVlMjdmNDM3MTNkYjJiOGY1YjEzNmMgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUg
IkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCkBAIC00OSw2ICs0OCw3IEBACiAj
aW5jbHVkZSAiU1ZHU01JTEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHU3ltYm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIK
ICNpbmNsdWRlICJYTUxTZXJpYWxpemVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5jcHAKaW5kZXggNmEwYzU0ZTEwYWVi
NjhmMTMwMjMwMDc4NmU3Yzg3ODRmY2VmN2ExNC4uNGU2NDMwMjlhMWE1MWQyMWRlYzFiOTBmNWZk
MzgyMWU4ZGM4NGU4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0
b2ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0F1dG9maWxsUG9wdXBNZW51Q2xpZW50LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUg
IkF1dG9maWxsUG9wdXBNZW51Q2xpZW50LmgiCiAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3Iu
aCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3
b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC00MCw2
ICszOSw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJXZWJBdXRvZmlsbENsaWVudC5oIgogI2luY2x1ZGUgIldlYk5vZGUuaCIKICNp
bmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKaW5kZXggODhlNGJkOGMwYzljYTFiNDdkMDJiNGIyMzZjYTdhZGIxOGFmNjhk
YS4uNjM4OTc2MTliYzZkNTliOGYwZjA1MjI1MzhjM2FmMzRmOTI5ZWU0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2lu
Y2x1ZGUgIkF1dG9maWxsUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRM
aXN0Q2hyb21pdW0uaCIKICNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50SW1wbC5oIgotI2luY2x1ZGUg
IkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5j
bHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKQEAgLTExMiw2ICsxMTEsNyBAQAog
I2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiU3BlZWNoSW5w
dXRDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5o
IgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0RmllbGREZWNvcmF0
b3JJbXBsLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAppbmRleCAwNjZlNTI0NDAwMmY1Y2Y5Yjg0
MjY5MjU0M2M0NDhiOTM1NDgyZWFkLi5mYjliZTc4OTI3NDk3ZDczMTNiN2Q1NTVjNzgzOGQ4NTdj
ZGJmOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCkBAIC0yNiw3ICsyNiw2
IEBACiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgogI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5j
bHVkZSAiQ1NTU3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgpAQCAtNTEsNiArNTAsNyBAQAogI2luY2x1ZGUgIlJlbmRlckltYWdl
LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5o
IgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJxd2ViZnJhbWUuaCIKICNp
bmNsdWRlICJxd2ViZnJhbWVfcC5oIgogI2lmIFVTRShKU0MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCmluZGV4IGMxMTkz
ZjJiYTBmN2IzYjllMGJhZjgwYWJhMTYyOWM4MDVlOWI1ZjAuLmI5ZDcyZWRmZjM2ZDQzOTA2ZDdh
OTc5OGYxNzc1MjllOGRkN2M3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5j
bHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKIAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5o
IgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdv
cmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCkBA
IC01NCw2ICs1Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWVRU3R5bGUuaCIKICNpbmNsdWRlICJTbGlkZXJUaHVtYkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMu
aCIKIAogI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138719</attachid>
            <date>2012-04-24 19:25:07 -0700</date>
            <delta_ts>2012-04-25 05:13:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84814-20120424202351.patch</filename>
            <type>text/plain</type>
            <size>617640</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZiYjExNGNhM2IxNTQ5
ZDFmYjZhY2VkNGNhZjlmMDU1ZWRkODczZS4uMjI5ZGY3ZmFlNTgzMjg5ZjY5ODU0N2M4MmIxOWZl
ZjM2YzIzZjEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwNCBAQAogMjAxMi0wNC0yNCAgQWxl
eGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAorICAgICAgICBSZW5h
bWUgQ1NTU3R5bGVTZWxlY3RvciBmaWxlcyB0byBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ4MTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgQ1NTU3R5bGVTZWxlY3Rv
ciBmaWxlcyB0byBtYXRjaCB0aGUgbmV3IGNsYXNzIG5hbWUgU3R5bGVSZXNvbHZlci4KKyAgICAg
ICAgVXBkYXRlIHRoZSBpbmNsdWRlcyBhbGwgb3ZlciB0aGUgY29kZSBiYXNlIHRvIHRoZSBuZXcg
bmFtZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgOiByZW5hbWluZyBmaWxlcywgbm8gYmVoYXZp
b3IgY2hhbmdlcyBleHBlY3RlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGNzcy9DU1NBbGxJbk9uZS5jcHA6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUu
Y3BwOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAqIGNzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5j
cHA6CisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcDoKKyAgICAgICAgKiBjc3Mv
U1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6
CisgICAgICAgICogY3NzL1N0eWxlTWVkaWEuY3BwOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29s
dmVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUnVsZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZURhdGE6OnBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRh
OjpydWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpzZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpSdWxlRGF0YTo6aGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlJ1bGVEYXRhOjpoYXNNdWx0aXBhcnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpSdWxlRGF0YTo6aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVs
ZUhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmNvbnRhaW5zVW5jb21tb25BdHRy
aWJ1dGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6c3BlY2lmaWNpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmxpbmtNYXRjaFR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZURhdGE6Omhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZURhdGE6OmlzSW5SZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1
bGVEYXRhOjpkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKToKKyAgICAgICAgKFNh
bWVTaXplQXNSdWxlRGF0YSk6CisgICAgICAgIChSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJ1bGVTZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpkaXNhYmxlQXV0
b1Nocmlua1RvRml0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmZlYXR1cmVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmlkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVs
ZVNldDo6Y2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0Ojp0YWdSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpzaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6bGlua1BzZXVkb0NsYXNzUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UnVsZVNldDo6Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVTZXQ6OnVuaXZlcnNhbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVT
ZXQ6OnBhZ2VSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpSdWxlU2V0U2VsZWN0
b3JQYWlyOjpSdWxlU2V0U2VsZWN0b3JQYWlyKToKKyAgICAgICAgKFJ1bGVTZXRTZWxlY3RvclBh
aXIpOgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5FdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnByaW50
RXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0VG9SaWdodERlY2xhcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6Om1ha2VSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpkZXRlcm1pbmVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxl
U2V0Rm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0
aG9yU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0dXBT
Y29wZVN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnB1c2hTY29wZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwb3BTY29wZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudFNoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6YWRkS2V5ZnJhbWVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjp+U3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6RmVhdHVyZXM6OkZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OkZlYXR1cmVzOjp+RmVhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6RmVhdHVyZXM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpGZWF0dXJlczo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVQVNoZWV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmxvYWRGdWxsRGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmxvYWRTaW1wbGVEZWZhdWx0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZFZpZXdTb3Vy
Y2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZE1hdGNoZWRQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZEVsZW1lbnRTdHls
ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1h
dGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaFVzZXJSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpt
YXRjaFVBUnVsZXMpOgorICAgICAgICAoTWF0Y2hpbmdVQVJ1bGVzU2NvcGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Ok1hdGNoaW5nVUFSdWxlc1Njb3BlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1hdGNoaW5nVUFSdWxlc1Njb3BlOjp+TWF0Y2hpbmdVQVJ1bGVzU2Nv
cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdV
QVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmguCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKE1lZGlhUXVlcnlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFRdWVyeVJlc3VsdDo6TWVkaWFRdWVyeVJlc3VsdCk6CisgICAgICAgIChTdHlsZVJlc29sdmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmb250RGVzY3JpcHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50Rm9udERlc2NyaXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnREZXNjcmlwdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRab29tKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEVmZmVjdGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6c2V0VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aGFzUGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpwdXNoU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cG9w
U2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0U3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Zm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1c2VzU2libGluZ1J1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnVzZXNGaXJzdExpbmVSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjp1c2VzQmVmb3JlQWZ0ZXJSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjp1c2VzTGlua1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OlJ1bGVGZWF0dXJlOjpSdWxlRmVhdHVyZSk6CisgICAgICAgIChSdWxlRmVhdHVy
ZSk6CisgICAgICAgIChGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjphZGRNYXRjaGVkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRj
aFJhbmdlczo6TWF0Y2hSYW5nZXMpOgorICAgICAgICAoTWF0Y2hSYW5nZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXM6Ok1hdGNoZWRQcm9wZXJ0
aWVzKToKKyAgICAgICAgKE1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0OjpNYXRjaFJlc3VsdCk6CisgICAgICAgIChNYXRjaFJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaE9wdGlvbnM6Ok1h
dGNoT3B0aW9ucyk6CisgICAgICAgIChNYXRjaE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aXNSaWdodFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVOb3RZZXRBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAo
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c2NvcGVTdGFja0lzQ29uc2lzdGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpTY29wZVN0YWNrRnJhbWU6OlNjb3BlU3RhY2tGcmFtZSk6CisgICAgICAgIChTY29w
ZVN0YWNrRnJhbWUpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAg
ICogZG9tL1NoYWRvd1RyZWUuY3BwOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAg
ICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZFBhZ2Uu
Y3BwOgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hU
TUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1s
L1ZhbGlkYXRpb25NZXNzYWdlLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAqIGxvYWRlci9MaW5rTG9h
ZGVyLmNwcDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgICogcGFnZS9G
cmFtZVZpZXcuY3BwOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgICogcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2Jp
bGUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclJlZ2lvbi5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5j
cHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJ
bWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRl
ZERhdGEuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5j
cHA6CisgICAgICAgICogc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHA6CisgICAgICAgICogc3Zn
L1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwOgor
ICAgICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdN
YXNrRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorCisyMDEy
LTA0LTI0ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgorCiAg
ICAgICAgIEltcGxlbWVudCBjcmVhdGVUQm9keSBmb3IgdGFibGUgZWxlbWVudC4KICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NDY1CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggMTk1M2Q1YTJiZGYzYjQ2YWM4OTk2MzYxMjdmMWM4NGZjZjA0
MTFlNS4uNGY2MTRjNjFhZDRmZWMwMGJkYmE1NDlhMWExYWMwNTE3ZmQ4OTIwMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wNC0yNCAgQWxleGlzIE1l
bmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUgQ1NT
U3R5bGVTZWxlY3RvciBmaWxlcyB0byBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ4MTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgQ1NTU3R5bGVTZWxlY3RvciBmaWxl
cyB0byBtYXRjaCB0aGUgbmV3IGNsYXNzIG5hbWUgU3R5bGVSZXNvbHZlci4KKyAgICAgICAgVXBk
YXRlIHRoZSBpbmNsdWRlcyBhbGwgb3ZlciB0aGUgY29kZSBiYXNlIHRvIHRoZSBuZXcgbmFtZS4K
KworICAgICAgICAqIHNyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5jcHA6CisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmNwcDoKKwogMjAxMi0wNC0yNCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtq
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEltYWdlIG1hc2tzIGFyZSBjb25z
aWRlcmVkIG9wYXF1ZSBpbmNvcnJlY3RseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA5ODU1MzQ3NjYxOTRi
ZTU4M2E2YmM0OGY0MmY2NmE1OGFhZTcyNmQwLi5iYTgwMTIxN2Q3YzViMTBiNGZlNGJmOWExNjdi
MTk0YTYwY2QwNDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE4IEBACiAyMDEyLTA0LTI0
ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgogCisgICAgICAg
IFJlbmFtZSBDU1NTdHlsZVNlbGVjdG9yIGZpbGVzIHRvIFN0eWxlUmVzb2x2ZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDgxNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBDU1NTdHlsZVNl
bGVjdG9yIGZpbGVzIHRvIG1hdGNoIHRoZSBuZXcgY2xhc3MgbmFtZSBTdHlsZVJlc29sdmVyLgor
ICAgICAgICBVcGRhdGUgdGhlIGluY2x1ZGVzIGFsbCBvdmVyIHRoZSBjb2RlIGJhc2UgdG8gdGhl
IG5ldyBuYW1lLgorCisgICAgICAgICogQXBpL3F3ZWJlbGVtZW50LmNwcDoKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHA6CisKKzIwMTItMDQtMjQgIEFsZXhp
cyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisKICAgICAgICAgUmVwbGFj
ZSBvY2N1cmVuY2VzIG9mIHN0eWxlIHNlbGVjdG9yIGZyb20gdmFyaWFibGVzIGFuZCBtZXRob2Rz
IG5hbWVzIGJ5IHN0eWxlIHJlc29sdmVyLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODQ3NjUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA1YTFhZDQy
MDVjZjcxYWViNmNhOGNkZjQ1ZGE5NTgzMGNkNTFjN2I0Li5lNmM0ZWFmYzM1NjQyZGY1NmRiODJi
NmUzYmE2ZmNkOTdmNjdlOTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNDgzLDcgKzQ4Myw2
IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3MvQ1NTU2VsZWN0b3JMaXN0LmNwcAogICAg
IGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAogICAgIGNzcy9DU1NTdHlsZVJ1bGUuY3BwCi0g
ICAgY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCiAgICAgY3NzL0NTU1N0eWxlU2hlZXQuY3BwCiAg
ICAgY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwCiAgICAgY3NzL0NTU1VuaWNvZGVSYW5n
ZVZhbHVlLmNwcApAQCAtNTEwLDYgKzUwOSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBj
c3MvU3R5bGVNZWRpYS5jcHAKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKICAgICBjc3Mv
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAKKyAgICBjc3MvU3R5bGVSZXNvbHZlci5jcHAKICAg
ICBjc3MvU3R5bGVSdWxlLmNwcAogICAgIGNzcy9TdHlsZVNoZWV0LmNwcAogICAgIGNzcy9TdHls
ZVNoZWV0TGlzdC5jcHAKQEAgLTI1NDksNyArMjU0OSw3IEBAIEFERF9DVVNUT01fQ09NTUFORCgK
ICAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAtSSR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdz
L3NjcmlwdHMgJHtXRUJDT1JFX0RJUn0vY3NzL21ha2UtY3NzLWZpbGUtYXJyYXlzLnBsIC0tZGVm
aW5lcyAiJHtGRUFUVVJFX0RFRklORVNfV0lUSF9TUEFDRV9TRVBBUkFUT1J9IiAtLXByZXByb2Nl
c3NvciAiJHtDT0RFX0dFTkVSQVRPUl9QUkVQUk9DRVNTT1J9IiAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vVXNlckFnZW50U3R5bGVTaGVldHMuaCAke0RFUklWRURfU09VUkNFU19XRUJD
T1JFX0RJUn0vVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAke1dlYkNvcmVfVVNFUl9BR0VO
VF9TVFlMRV9TSEVFVFN9CiAgICAgVkVSQkFUSU0pCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFN0eWxlU2hlZXRzRGF0
YS5jcHApCi1BRERfU09VUkNFX1dFQkNPUkVfREVSSVZFRF9ERVBFTkRFTkNJRVMoJHtXRUJDT1JF
X0RJUn0vY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5j
cHAgVXNlckFnZW50U3R5bGVTaGVldHMuaCkKK0FERF9TT1VSQ0VfV0VCQ09SRV9ERVJJVkVEX0RF
UEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgVXNlckFnZW50
U3R5bGVTaGVldHNEYXRhLmNwcCBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oKQogCiAKIEdFTkVSQVRF
X0dSQU1NQVIoY3NzeXkgJHtXRUJDT1JFX0RJUn0vY3NzL0NTU0dyYW1tYXIueSAke0RFUklWRURf
U09VUkNFU19XRUJDT1JFX0RJUn0vQ1NTR3JhbW1hci5oICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNP
UkVfRElSfS9DU1NHcmFtbWFyLmNwcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IGNlOWJkYTdiMWZkYTAxZTYxNGZjOGYxZjg0OGE3OGFjYWYxZjQwZTQuLjBmZWEzNjcwODI2YTVl
MDYyYzQxNDBiNTQ3YjcyNTlhMDkwY2M4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtMTY0Miw4ICsxNjQyLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVSdWxlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNo
ZWV0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaCBcCiAJU291cmNl
L1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwIFwKQEAgLTE3MDAsNiArMTY5
OCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJv
cGVydHlTZXQuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNoZWV0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAwY2FhYTI3ODAxNTUzYjIxNDU4ZmM5MTkw
YmY4ZGVmNzUxZjRjZDc2Li4zNzFhOThmYzE5N2M4NWJiM2QxODRkMDUzNDljNjJiYmZiYTViOTEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKQEAgLTQ2Myw3ICs0NjMsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBjc3Mv
Q1NTU2VnbWVudGVkRm9udEZhY2UuY3BwIFwKICAgICBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5j
cHAgXAogICAgIGNzcy9DU1NTdHlsZVJ1bGUuY3BwIFwKLSAgICBjc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAgXAogICAgIGNzcy9DU1NTdHlsZVNoZWV0LmNwcCBcCiAgICAgY3NzL0NTU1RpbWluZ0Z1
bmN0aW9uVmFsdWUuY3BwIFwKICAgICBjc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwIFwKQEAg
LTQ5MCw2ICs0ODksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBjc3MvU3R5bGVNZWRpYS5jcHAgXAog
ICAgIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNwcCBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTaG9y
dGhhbmQuY3BwIFwKKyAgICBjc3MvU3R5bGVSZXNvbHZlci5jcHAgXAogICAgIGNzcy9TdHlsZVJ1
bGUuY3BwIFwKICAgICBjc3MvU3R5bGVTaGVldC5jcHAgXAogICAgIGNzcy9TdHlsZVNoZWV0TGlz
dC5jcHAgXApAQCAtMTYyMCw3ICsxNjIwLDYgQEAgSEVBREVSUyArPSBcCiAgICAgY3NzL0NTU1Nl
bGVjdG9yTGlzdC5oIFwKICAgICBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIFwKICAgICBjc3Mv
Q1NTU3R5bGVSdWxlLmggXAotICAgIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmggXAogICAgIGNzcy9D
U1NTdHlsZVNoZWV0LmggXAogICAgIGNzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggXAogICAg
IGNzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIFwKQEAgLTE2NDcsNiArMTY0Niw3IEBAIEhFQURF
UlMgKz0gXAogICAgIGNzcy9TdHlsZUJ1aWxkZXIuaCBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlT
ZXQuaCBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCBcCisgICAgY3NzL1N0eWxl
UmVzb2x2ZXIuaCBcCiAgICAgY3NzL1N0eWxlUnVsZS5oIFwKICAgICBjc3MvU3R5bGVTaGVldC5o
IFwKICAgICBjc3MvU3R5bGVTaGVldExpc3QuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWIyODhm
ODg3ZDRkZGU0NjQwYTAxMjcwODkwMDQ2YmI4ODZhNzVlMi4uYjc1MzgwYmMwMGVkZDg1OWZiZGMw
ZTIzODUxMGNkZjZiYTBjMGM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjQ2MSw4ICsyNDYxLDYg
QEAKICAgICAgICAgICAgICdjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAnLAogICAgICAgICAg
ICAgJ2Nzcy9DU1NTdHlsZVJ1bGUuY3BwJywKICAgICAgICAgICAgICdjc3MvQ1NTU3R5bGVSdWxl
LmgnLAotICAgICAgICAgICAgJ2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCcsCi0gICAgICAgICAg
ICAnY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCcsCiAgICAgICAgICAgICAnY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwJywKICAgICAgICAgICAgICdjc3MvQ1NTU3R5bGVTaGVldC5oJywKICAgICAgICAgICAg
ICdjc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAnLApAQCAtMjUxOCw2ICsyNTE2LDggQEAK
ICAgICAgICAgICAgICdjc3MvU3R5bGVQcm9wZXJ0eVNldC5oJywKICAgICAgICAgICAgICdjc3Mv
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVByb3Bl
cnR5U2hvcnRoYW5kLmgnLAorICAgICAgICAgICAgJ2Nzcy9TdHlsZVJlc29sdmVyLmNwcCcsCisg
ICAgICAgICAgICAnY3NzL1N0eWxlUmVzb2x2ZXIuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxl
UnVsZS5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVJ1bGUuaCcsCiAgICAgICAgICAgICAn
Y3NzL1N0eWxlU2hlZXQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKaW5kZXggZTRlY2UyNjA1ZTYxOWM4M2RjYjVhNGE0NjAzNDE4ZmU1OTY3NzQ0
NS4uYWQzOWU0NGM3M2JiZDljODViNzc5ZjdmN2I2OTA1ZDU0MjBlMDFlYyAxMDA3NTUKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTM1ODU0LDYyICszNTg1
NCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGNzc1xDU1NTdHlsZVNlbGVjdG9yLmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9u
Ci0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
LQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJ
Lz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJ
CQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJ
CQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4K
LQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlO
YW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgot
CQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9u
Ci0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25m
aWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXENTU1N0eWxlU2VsZWN0b3IuaCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXENTU1N0
eWxlU2hlZXQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KQEAgLTM2ODAyLDYg
KzM2NzQ2LDYyIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGNzc1xTdHlsZVJlc29sdmVyLmNwcCIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJ
CQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgor
CQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
Lz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFN0eWxlUmVzb2x2ZXIuaCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFN0eWxl
UnVsZS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZhMGJmYTQzMTM2MmY0YWFmYWU1ODll
MzdhZTc5YWEzYTIzMWZmMmYuLjgzOTM1YjYxNGY1YzY3OTUzNGIxZjRmNWNkZDdiMDk5ZWFjNGQ3
YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTUzNzUsOCArNTM3NSw2IEBACiAJCUJDNzcyQjNDMEM0RUE5MUUwMDgzMjg1RiAv
KiBDU1NIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDNzcyQjM2MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NIZWxwZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzc3MkIzRDBDNEVBOTFFMDA4
MzI4NUYgLyogQ1NTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDNzcyQjM3MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuY3BwICov
OyB9OwogCQlCQzc3MkIzRTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkIzODBDNEVBOTFFMDA4
MzI4NUYgLyogQ1NTUGFyc2VyLmggKi87IH07Ci0JCUJDNzcyQjNGMEM0RUE5MUUwMDgzMjg1RiAv
KiBDU1NTdHlsZVNlbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDNzcyQjM5MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNlbGVjdG9y
LmNwcCAqLzsgfTsKLQkJQkM3NzJCNDAwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcy
QjNBMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNlbGVjdG9yLmggKi87IH07CiAJCUJDNzcy
QzQ2MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0NDBDNEVCMkM2MDA4MzI4NUYg
LyogWE1MSHR0cFJlcXVlc3QuY3BwICovOyB9OwogCQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYg
LyogWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDNzcyQzQ1MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5oICov
OyB9OwogCQlCQzc3MkM0RTBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0QzBD
NEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgKi87IH07CkBAIC01ODYzLDYg
KzU4NjEsOCBAQAogCQlFMTJFREI3QjBCMzA4QTc4MDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMkVEQjdBMEIz
MDhBNzgwMDI3MDRCNiAvKiBFdmVudFRhcmdldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxMkVEQkVBMEIzMDhFMEIwMDI3MDRCNiAvKiBFdmVu
dFRhcmdldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTJFREJFOTBCMzA4RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwICovOyB9OwogCQlF
MTM0RjVBQjEyRUUzNDNGMDA0RUM1OEQgLyogSW50UmVjdEhhc2guaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMzRGNUFBMTJFRTM0M0YwMDRFQzU4RCAv
KiBJbnRSZWN0SGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUUxMzk4NjYzMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMzk4NjYxMTU0
Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmNwcCAqLzsgfTsKKwkJRTEzOTg2NjQxNTQ3
ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMzk4NjYyMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJl
c29sdmVyLmggKi87IH07CiAJCUUxM0YwMUYxMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9y
YWdlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTEzRjAxRjAxMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMubW0gKi87IH07CiAJ
CUUxNEYxQzQ0MTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NEYxQzQyMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
LmNwcCAqLzsgfTsKIAkJRTE0RjFDNDUxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNEYxQzQzMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTEyNDY0LDggKzEyNDY0LDYgQEAKIAkJQkM3NzJCMzYwQzRFQTkxRTAwODMyODVG
IC8qIENTU0hlbHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTSGVs
cGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQjM3MEM0RUE5MUUwMDgz
Mjg1RiAvKiBDU1NQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU1BhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQjM4
MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENTU1BhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzc3
MkIzOTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTU3R5bGVTZWxlY3Rvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNzcyQjNBMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHls
ZVNlbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTdHlsZVNl
bGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQzQ0MEM0RUIyQzYw
MDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gWE1MSHR0cFJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzc3MkM0NTBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQzRDMEM0RUIzMDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJl
Z2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNSU1FVHlw
ZVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMDAxLDYgKzEy
OTk5LDggQEAKIAkJRTEyRURCN0EwQjMwOEE3ODAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50VGFyZ2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxMkVEQkU5MEIzMDhFMEIwMDI3MDRCNiAvKiBFdmVudFRhcmdl
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFRhcmdldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMzRGNUFBMTJFRTM0M0YwMDRFQzU4
RCAvKiBJbnRSZWN0SGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRS
ZWN0SGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTM5ODY2MTE1NDc4NDc0
MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdHlsZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTEzOTg2NjIxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTNGMDFFQTEyNzBFMTBEMDBERkJBNzEgLyogQ29va2llU3RvcmFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29raWVTdG9yYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29r
aWVTdG9yYWdlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q29va2llU3RvcmFnZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0RjFD
NDIxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDYwNyw4
ICsyMDYwNyw2IEBACiAJCQkJQTgwRTZDQzUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1N0eWxlUnVs
ZS5jcHAgKi8sCiAJCQkJQTgwRTZDRTIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1N0eWxlUnVsZS5o
ICovLAogCQkJCTg1QzU2Q0ExMEFBODlBQjQwMEQ5NTc1NSAvKiBDU1NTdHlsZVJ1bGUuaWRsICov
LAotCQkJCUJDNzcyQjM5MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNlbGVjdG9yLmNwcCAq
LywKLQkJCQlCQzc3MkIzQTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5oICov
LAogCQkJCUE4RUE4MDAwMEExOTUxNkUwMEE4RUY1RiAvKiBDU1NTdHlsZVNoZWV0LmNwcCAqLywK
IAkJCQlBOEVBN0ZGRjBBMTk1MTZFMDBBOEVGNUYgLyogQ1NTU3R5bGVTaGVldC5oICovLAogCQkJ
CTg1OEMzOTEwMEFBOEZGMDAwMEIxODdBNCAvKiBDU1NTdHlsZVNoZWV0LmlkbCAqLywKQEAgLTIw
Njg2LDYgKzIwNjg0LDggQEAKIAkJCQlBODBFNkRGQTBBMTk5MDY3MDA3RkI4QzUgLyogU3R5bGVQ
cm9wZXJ0eVNldC5oICovLAogCQkJCUUxQjI1MTA0MTUyQTBCQUYwMDY5Qjc3OSAvKiBTdHlsZVBy
b3BlcnR5U2hvcnRoYW5kLmNwcCAqLywKIAkJCQlFMUIyNTEwNTE1MkEwQkFGMDA2OUI3NzkgLyog
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oICovLAorCQkJCUUxMzk4NjYxMTU0Nzg0NzQwMDFFM0Y2
NSAvKiBTdHlsZVJlc29sdmVyLmNwcCAqLywKKwkJCQlFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUg
LyogU3R5bGVSZXNvbHZlci5oICovLAogCQkJCUU0QkJFRDRBMTRGQ0RCQTEwMDNGMEI5OCAvKiBT
dHlsZVJ1bGUuY3BwICovLAogCQkJCUU0QkJFRDRCMTRGQ0RCQTEwMDNGMEI5OCAvKiBTdHlsZVJ1
bGUuaCAqLywKIAkJCQlBOEVBODAwNTBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldC5jcHAg
Ki8sCkBAIC0yMTkxOSw3ICsyMTkxOSw2IEBACiAJCQkJQTgwRTczNTIwQTE5OUM3NzAwN0ZCOEM1
IC8qIENTU1NlbGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkUwRjBBMTk5MTFDMDA3
RkI4QzUgLyogQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZE
MEMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1N0eWxlUnVsZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QkM3NzJCNDAwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4RUE4MDA3MEExOTUxNkUwMEE4RUY1RiAvKiBDU1NTdHlsZVNoZWV0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzgwQzk4ODBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5nRnVu
Y3Rpb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcxRjUzRTkwRDI3MDRGOTAwRUNFMEQ1
IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0ODE0LDYgKzI0
ODEzLDcgQEAKIAkJCQk1MEQxMEQ5QTE1NDVGNTc2MDA5NkQyODggLyogUmVuZGVyTGF5ZXJGaWx0
ZXJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTAwRUU3NjE1NDZFQUMxMDBCQTExRDEgLyog
U3R5bGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUZBMkQ3ODE1MjEzMkIzMDBDMUJB
MEIgLyogRE9NV2luZG93RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTM5ODY2NDE1
NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTQw
NCw3ICsyNTQwNCw2IEBACiAJCQkJRTRDMTc4OUEwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVj
dG9yTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBFNkUxMDBBMTk5MTFDMDA3RkI4QzUg
LyogQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBFNkNFRjBB
MTk4OUNBMDA3RkI4QzUgLyogQ1NTU3R5bGVSdWxlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJD
NzcyQjNGMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNlbGVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4RUE4MDA4MEExOTUxNkUwMEE4RUY1RiAvKiBDU1NTdHlsZVNoZWV0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDODBDOTg3MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdG
dW5jdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3MUY1M0VBMEQyNzA0RjkwMEVD
RTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3ODI3
LDYgKzI3ODI2LDcgQEAKIAkJCQk1MEQxMEQ5OTE1NDVGNTc2MDA5NkQyODggLyogUmVuZGVyTGF5
ZXJGaWx0ZXJJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMDBFRTc1MTU0NkVBQzEwMEJB
MTFEMSAvKiBTdHlsZUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3RkJBMUUxNTFB
QjE3QzAwQjU3OTU5IC8qIERPTVdpbmRvd0V4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4IDI3NTUxMDdkMWQ3ZDY5ZGMx
NTY2MWMzMzA4NDAzNDMyYzJkZWUxODUuLjcxYzkyYzQ3N2YzZmRhOTNiM2RlNzg1N2JlNTgxNTdh
ZDU3OTMzMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcApAQCAtNjAsNyArNjAsNiBA
QAogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5jcHAiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNs
YXJhdGlvbi5jcHAiCiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmNwcCIKLSNpbmNsdWRlICJDU1NT
dHlsZVNlbGVjdG9yLmNwcCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmNwcCIKICNpbmNsdWRl
ICJDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCIKICNpbmNsdWRlICJDU1NVbmljb2RlUmFuZ2VW
YWx1ZS5jcHAiCkBAIC03MSwzICs3MCw0IEBACiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmNwcCIK
ICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmNwcCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5
U2hvcnRoYW5kLmNwcCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmNwcCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAppbmRleCA0MjM4MDA4OTk1OGRkZmM1NTFh
ZTkxNTU2ZWYxNzgxZWM4ODYyYzNhLi42MThjMzljMTI3NGJhM2ZhYjcwNjU4ZWFjN2Q2NDQzMTZi
NjZhOTlmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCkBA
IC0zMSw5ICszMSw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTQ2FsY3Vs
YXRpb25WYWx1ZS5oIgogCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUg
IkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUgIlN0eWxlUmVz
b2x2ZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAppbmRleCBiZjVjNGFh
NmU2ODZlZjYzYWMxZmQ3NGFhODY4ZGVhNDgzZTMzNTkyLi5jYjMyNjJlNTIxNjE5Y2E2MmJmMjli
ZWY0NWEyZmExNjUzNjViNjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNw
cApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1NlZ21lbnRlZEZvbnRGYWNl
LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1VuaWNvZGVS
YW5nZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNT
U1ZhbHVlTGlzdC5oIgpAQCAtNDYsNiArNDUsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0Lmgi
CisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2lu
Y2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFs
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IDI3
MWIyOTcwNGVmZmI2OGQ2MmIzZjRhMDJjMjcwYmQ0NDJjNzRkZTMuLmEzMTRhODYwMjJmZWIzNzMw
N2U3NjQzZWZhMWYyOGE2ZTk1NTExMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRW
YWx1ZS5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDU1NHcmFkaWVudFZhbHVlLmgi
CiAKICNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJHZW5l
cmF0b3JHZW5lcmF0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCkBAIC0zNyw2ICsz
Niw3IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZmNjhmZmFjNDc2
YjBlZWQwNGFmN2VkY2ExNjZjODZkNzg4ZmZhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwNC0y
MDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkK
LSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICho
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUg
QXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgotCi0jaW5jbHVkZSAi
QXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDYWxjdWxh
dGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ29udGVudERhdGEuaCIKLSNpbmNsdWRlICJDb3VudGVy
LmgiCi0jaW5jbHVkZSAiQ291bnRlckNvbnRlbnQuaCIKLSNpbmNsdWRlICJDU1NCb3JkZXJJbWFn
ZS5oIgotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NDdXJz
b3JJbWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxlLmgiCi0jaW5jbHVkZSAi
Q1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUg
IkNTU0xpbmVCb3hDb250YWluVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NNZWRpYVJ1bGUuaCIKLSNp
bmNsdWRlICJDU1NQYWdlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCi0jaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3Qu
aCIKLSNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5o
IgotI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIK
LSNpbmNsdWRlICJDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVM
aXN0LmgiCi0jaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgotI2luY2x1ZGUgIkZvbnRGZWF0dXJlVmFs
dWUuaCIKLSNpbmNsdWRlICJGb250VmFsdWUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAi
SFRNTERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1M
SW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTE9w
dGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSFRNTFN0eWxlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJLZXlmcmFt
ZUxpc3QuaCIKLSNpbmNsdWRlICJMaW5rSGFzaC5oIgotI2luY2x1ZGUgIkxvY2FsZVRvU2NyaXB0
TWFwcGluZy5oIgotI2luY2x1ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5j
bHVkZSAiTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTWVkaWFMaXN0Lmgi
Ci0jaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgotI2luY2x1ZGUgIk5vZGVSZW5kZXJT
dHlsZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNs
dWRlICJQYWlyLmgiCi0jaW5jbHVkZSAiUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
LSNpbmNsdWRlICJRdW90ZXNEYXRhLmgiCi0jaW5jbHVkZSAiUmVjdC5oIgotI2luY2x1ZGUgIlJl
bmRlclJlZ2lvbi5oIgotI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgotI2luY2x1ZGUgIlJl
bmRlclNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIK
LSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oIgotI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJT
VkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKLSNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFkb3dEYXRhLmgi
Ci0jaW5jbHVkZSAiU2hhZG93Um9vdC5oIgotI2luY2x1ZGUgIlNoYWRvd1ZhbHVlLmgiCi0jaW5j
bHVkZSAiU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlN0eWxlQnVpbGRlci5o
IgotI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJTdHlsZVBlbmRpbmdJ
bWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgotI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVk
SW1hZ2UuaCIKLSNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgotI2luY2x1ZGUgIlRleHQuaCIK
LSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIlRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0j
aW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZS5oIgotI2luY2x1ZGUgIldlYktpdENTU1JlZ2lvblJ1bGUuaCIKLSNpbmNsdWRl
ICJXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIgotI2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlO
YW1lcy5oIgotI2luY2x1ZGUgIlhNTE5hbWVzLmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
LSNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJLaXRDU1NGaWx0ZXJW
YWx1ZS5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0jaW5jbHVk
ZSAiRGFzaGJvYXJkUmVnaW9uLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVk
ZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jZW5kaWYKLQotI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIu
aCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJDdXN0b21G
aWx0ZXJQYXJhbWV0ZXIuaCIKLSNpbmNsdWRlICJTdHlsZUNhY2hlZFNoYWRlci5oIgotI2luY2x1
ZGUgIlN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgotI2luY2x1ZGUgIlN0eWxlUGVuZGluZ1No
YWRlci5oIgotI2luY2x1ZGUgIlN0eWxlU2hhZGVyLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTU2hh
ZGVyVmFsdWUuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0jaW5jbHVk
ZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgotI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2VTZXQuaCIK
LSNlbmRpZgotCi0jaWYgUExBVEZPUk0oUVQpCi0jZGVmaW5lIEZJWEVEX1BPU0lUSU9OX0NSRUFU
RVNfU1RBQ0tJTkdfQ09OVEVYVCAxCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi0jZGVm
aW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKLWlmIChpc0luaGVyaXQpIHsgXAotICAg
IG1fc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBcCi0gICAgcmV0dXJu
OyBcCi19Ci0KLSNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkg
XAotSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAotaWYgKGlzSW5pdGlhbCkgeyBcCi0gICAg
bV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCi0gICAg
cmV0dXJuOyBcCi19Ci0KLSNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfV0lUSF9W
QUxVRShwcm9wLCBQcm9wLCBWYWx1ZSkgXAotSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAot
aWYgKGlzSW5pdGlhbCkgeyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjpp
bml0aWFsIyNWYWx1ZSgpKTtcCi0gICAgcmV0dXJuO1wKLX0KLQotI2RlZmluZSBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHByb3AsIFByb3ApIFwKLUhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKLWlmIChwcmltaXRpdmVWYWx1ZSkgXAotICAg
IG1fc3R5bGUtPnNldCMjUHJvcCgqcHJpbWl0aXZlVmFsdWUpOwotCi1jbGFzcyBSdWxlRGF0YSB7
Ci1wdWJsaWM6Ci0gICAgUnVsZURhdGEoU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCB1bnNpZ25l
ZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZh
c3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSk7Ci0KLSAgICB1bnNpZ25lZCBwb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KLSAgICBTdHlsZVJ1bGUqIHJ1bGUo
KSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KLSAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3IoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdG9yOyB9Ci0KLSAgICBib29sIGhhc0Zhc3RDaGVja2FibGVT
ZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yOyB9Ci0g
ICAgYm9vbCBoYXNNdWx0aXBhcnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTXVsdGlw
YXJ0U2VsZWN0b3I7IH0KLSAgICBib29sIGhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1M
QmFzZWRPblJ1bGVIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1h
dGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaDsgfQotICAgIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1VuY29tbW9uQXR0cmli
dXRlU2VsZWN0b3I7IH0KLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3BlY2lmaWNpdHk7IH0KLSAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9saW5rTWF0Y2hUeXBlOyB9Ci0gICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOyB9Ci0gICAg
Ym9vbCBpc0luUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblJlZ2lvblJ1bGU7IH0K
LQotICAgIC8vIFRyeSB0byBiYWxhbmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVyZSBjYW4g
YmUgbG90cyBvZiBSdWxlRGF0YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVyZm9ybWFu
Y2UuCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQgPSA0
OwotICAgIGNvbnN0IHVuc2lnbmVkKiBkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVz
KCkgY29uc3QgeyByZXR1cm4gbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9
Ci0KLXByaXZhdGU6Ci0gICAgU3R5bGVSdWxlKiBtX3J1bGU7Ci0gICAgQ1NTU2VsZWN0b3IqIG1f
c2VsZWN0b3I7Ci0gICAgdW5zaWduZWQgbV9zcGVjaWZpY2l0eTsKLSAgICAvLyBUaGlzIG51bWJl
ciB3YXMgcGlja2VkIGZhaXJseSBhcmJpdHJhcmlseS4gV2UgY2FuIHByb2JhYmx5IGxvd2VyIGl0
IGlmIHdlIG5lZWQgdG8uCi0gICAgLy8gU29tZSBzaW1wbGUgdGVzdGluZyBzaG93ZWQgPDEwMCww
MDAgUnVsZURhdGEncyBvbiBsYXJnZSBzaXRlcy4KLSAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIDog
MjQ7Ci0gICAgdW5zaWduZWQgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgOiAxOwotICAgIHVu
c2lnbmVkIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IgOiAxOwotICAgIHVuc2lnbmVkIG1faGFzUmln
aHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2ggOiAxOwotICAgIHVuc2ln
bmVkIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yIDogMTsKLSAgICB1bnNpZ25l
ZCBtX2xpbmtNYXRjaFR5cGUgOiAyOyAvLyAgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNr
Ci0gICAgdW5zaWduZWQgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMTsKLSAgICB1bnNp
Z25lZCBtX2lzSW5SZWdpb25SdWxlIDogMTsKLSAgICAvLyBVc2UgcGxhaW4gYXJyYXkgaW5zdGVh
ZCBvZiBhIFZlY3RvciB0byBtaW5pbWl6ZSBtZW1vcnkgb3ZlcmhlYWQuCi0gICAgdW5zaWduZWQg
bV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzW21heGltdW1JZGVudGlmaWVyQ291
bnRdOwotfTsKLSAgICAKLXN0cnVjdCBTYW1lU2l6ZUFzUnVsZURhdGEgewotICAgIHZvaWQqIGE7
Ci0gICAgdm9pZCogYjsKLSAgICB1bnNpZ25lZCBjOwotICAgIHVuc2lnbmVkIGQ7Ci0gICAgdW5z
aWduZWQgZVs0XTsKLX07Ci0KLUNPTVBJTEVfQVNTRVJUKHNpemVvZihSdWxlRGF0YSkgPT0gc2l6
ZW9mKFNhbWVTaXplQXNSdWxlRGF0YSksIFJ1bGVEYXRhX3Nob3VsZF9zdGF5X3NtYWxsKTsKLQot
Y2xhc3MgUnVsZVNldCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUnVsZVNldCk7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRv
cHRQdHIobmV3IFJ1bGVTZXQpOyB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
SW1wbCosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKLQotICAgIHZv
aWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldEludGVybmFsKiwgY29uc3QgTWVkaWFRdWVy
eUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAw
KTsKLQotICAgIHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVn
aW9uUnVsZSA9IGZhbHNlKTsKLSAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgQ1NTU2VsZWN0
b3IqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNr
U2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBmYWxzZSk7Ci0gICAgdm9pZCBhZGRQYWdl
UnVsZShTdHlsZVJ1bGVQYWdlKik7Ci0gICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5n
SW1wbCoga2V5LCBBdG9tUnVsZU1hcCYsIGNvbnN0IFJ1bGVEYXRhJik7Ci0gICAgdm9pZCBhZGRS
ZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lvbiosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bik7Ci0gICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwotICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtU
b0ZpdCgpIHsgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkID0gZmFsc2U7IH0KLQotICAgIGNvbnN0
IFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJiBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZXM7IH0KLQotICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGlkUnVsZXMoQXRvbWljU3Ry
aW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KLSAgICBj
b25zdCBWZWN0b3I8UnVsZURhdGE+KiBjbGFzc1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkg
Y29uc3QgeyByZXR1cm4gbV9jbGFzc1J1bGVzLmdldChrZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogdGFnUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVy
biBtX3RhZ1J1bGVzLmdldChrZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogc2hh
ZG93UHNldWRvRWxlbWVudFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1
cm4gbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMuZ2V0KGtleSk7IH0KLSAgICBjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiBsaW5rUHNldWRvQ2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX2xp
bmtQc2V1ZG9DbGFzc1J1bGVzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogZm9jdXNQ
c2V1ZG9DbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVz
OyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdW5pdmVyc2FsUnVsZXMoKSBjb25zdCB7
IHJldHVybiAmbV91bml2ZXJzYWxSdWxlczsgfQotICAgIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQ
YWdlKj4mIHBhZ2VSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJ1bGVzOyB9Ci0KLXB1Ymxp
YzoKLSAgICBSdWxlU2V0KCk7Ci0KLSAgICBBdG9tUnVsZU1hcCBtX2lkUnVsZXM7Ci0gICAgQXRv
bVJ1bGVNYXAgbV9jbGFzc1J1bGVzOwotICAgIEF0b21SdWxlTWFwIG1fdGFnUnVsZXM7Ci0gICAg
QXRvbVJ1bGVNYXAgbV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXM7Ci0gICAgVmVjdG9yPFJ1bGVE
YXRhPiBtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzOwotICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9mb2N1
c1BzZXVkb0NsYXNzUnVsZXM7Ci0gICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3VuaXZlcnNhbFJ1bGVz
OwotICAgIFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4gbV9wYWdlUnVsZXM7Ci0gICAgdW5zaWduZWQg
bV9ydWxlQ291bnQ7Ci0gICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7Ci0gICAgU3R5
bGVSZXNvbHZlcjo6RmVhdHVyZXMgbV9mZWF0dXJlczsKLQotICAgIHN0cnVjdCBSdWxlU2V0U2Vs
ZWN0b3JQYWlyIHsKLSAgICAgICAgUnVsZVNldFNlbGVjdG9yUGFpcihDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IsIFBhc3NPd25QdHI8UnVsZVNldD4gcnVsZVNldCkgOiBzZWxlY3RvcihzZWxlY3Rvciks
IHJ1bGVTZXQocnVsZVNldCkgeyB9Ci0gICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIoY29uc3Qg
UnVsZVNldFNlbGVjdG9yUGFpciYgcnMpIDogc2VsZWN0b3IocnMuc2VsZWN0b3IpLCBydWxlU2V0
KGNvbnN0X2Nhc3Q8UnVsZVNldFNlbGVjdG9yUGFpcio+KCZycyktPnJ1bGVTZXQucmVsZWFzZSgp
KSB7IH0KLSAgICAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOwotICAgICAgICBPd25QdHI8UnVs
ZVNldD4gcnVsZVNldDsKLSAgICB9OwotCi0gICAgVmVjdG9yPFJ1bGVTZXRTZWxlY3RvclBhaXI+
IG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHM7Ci19OwotCi1zdGF0aWMgUnVsZVNldCogZGVm
YXVsdFN0eWxlOwotc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRRdWlya3NTdHlsZTsKLXN0YXRpYyBS
dWxlU2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKLXN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0Vmlld1Nv
dXJjZVN0eWxlOwotc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogc2ltcGxlRGVmYXVsdFN0eWxl
U2hlZXQ7Ci1zdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBkZWZhdWx0U3R5bGVTaGVldDsKLXN0
YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHF1aXJrc1N0eWxlU2hlZXQ7Ci1zdGF0aWMgU3R5bGVT
aGVldEludGVybmFsKiBzdmdTdHlsZVNoZWV0Owotc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCog
bWF0aE1MU3R5bGVTaGVldDsKLXN0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIG1lZGlhQ29udHJv
bHNTdHlsZVNoZWV0Owotc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogZnVsbHNjcmVlblN0eWxl
U2hlZXQ7Ci0KLVJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpzX3N0eWxlTm90WWV0QXZhaWxh
YmxlOwotCi1zdGF0aWMgdm9pZCBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOwotc3RhdGljIHZvaWQg
bG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpOwotdGVtcGxhdGUgPGNsYXNzIExpc3RUeXBlPgotc3Rh
dGljIHZvaWQgY29sbGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8
Q1NTU3R5bGVSdWxlPiA+JiwgTGlzdFR5cGUqKTsKLQotLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5p
Y2UgdG8gdXNlIHNvbWUgbWVjaGFuaXNtIHRoYXQgZ3VhcmFudGVlcyB0aGlzIGlzIGluIHN5bmMg
d2l0aCB0aGUgcmVhbCBVQSBzdHlsZXNoZWV0Lgotc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZVVz
ZXJBZ2VudFN0eWxlU2hlZXQgPSAiaHRtbCxib2R5LGRpdntkaXNwbGF5OmJsb2NrfWhlYWR7ZGlz
cGxheTpub25lfWJvZHl7bWFyZ2luOjhweH1kaXY6Zm9jdXMsc3Bhbjpmb2N1c3tvdXRsaW5lOmF1
dG8gNXB4IC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcn1hOi13ZWJraXQtYW55LWxpbmt7Y29sb3I6
LXdlYmtpdC1saW5rO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9YTotd2Via2l0LWFueS1saW5r
OmFjdGl2ZXtjb2xvcjotd2Via2l0LWFjdGl2ZWxpbmt9IjsKLQotc3RhdGljIGlubGluZSBib29s
IGVsZW1lbnRDYW5Vc2VTaW1wbGVEZWZhdWx0U3R5bGUoRWxlbWVudCogZSkKLXsKLSAgICByZXR1
cm4gZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGhlYWRUYWcpIHx8IGUt
Pmhhc1RhZ05hbWUoYm9keVRhZykgfHwgZS0+aGFzVGFnTmFtZShkaXZUYWcpIHx8IGUtPmhhc1Rh
Z05hbWUoc3BhblRhZykgfHwgZS0+aGFzVGFnTmFtZShiclRhZykgfHwgZS0+aGFzVGFnTmFtZShh
VGFnKTsKLX0KLQotc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVlbkV2YWwo
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwg
c3RhdGljU2NyZWVuRXZhbCwgKCJzY3JlZW4iKSk7Ci0gICAgcmV0dXJuIHN0YXRpY1NjcmVlbkV2
YWw7Ci19Ci0KLXN0YXRpYyBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBwcmludEV2YWwoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwgc3Rh
dGljUHJpbnRFdmFsLCAoInByaW50IikpOwotICAgIHJldHVybiBzdGF0aWNQcmludEV2YWw7Ci19
Ci0KLXN0YXRpYyBTdHlsZVByb3BlcnR5U2V0KiBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkKLXsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiwgbGVmdFRv
UmlnaHREZWNsLCAoU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCkpKTsKLSAgICBpZiAobGVmdFRv
UmlnaHREZWNsLT5pc0VtcHR5KCkpCi0gICAgICAgIGxlZnRUb1JpZ2h0RGVjbC0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlTHRyKTsKLSAgICByZXR1cm4gbGVmdFRv
UmlnaHREZWNsLmdldCgpOwotfQotCi1zdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xl
ZnREZWNsYXJhdGlvbigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4sIHJpZ2h0VG9MZWZ0RGVjbCwgKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgp
KSk7Ci0gICAgaWYgKHJpZ2h0VG9MZWZ0RGVjbC0+aXNFbXB0eSgpKQotICAgICAgICByaWdodFRv
TGVmdERlY2wtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZVJ0bCk7
Ci0gICAgcmV0dXJuIHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKTsKLX0KLQotU3R5bGVSZXNvbHZlcjo6
U3R5bGVSZXNvbHZlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzKQotICAgIDogbV9oYXNVQUFwcGVhcmFuY2UoZmFsc2UpCi0gICAgLCBtX2JhY2tncm91
bmREYXRhKEJhY2tncm91bmRGaWxsTGF5ZXIpCi0gICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCgwKQotICAgICwgbV9jaGVja2VyKGRvY3VtZW50LCAh
ZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpKQotICAgICwgbV9wYXJlbnRTdHlsZSgwKQotICAgICwg
bV9yb290RWxlbWVudFN0eWxlKDApCi0gICAgLCBtX2VsZW1lbnQoMCkKLSAgICAsIG1fc3R5bGVk
RWxlbWVudCgwKQotICAgICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgLCBtX2VsZW1lbnRM
aW5rU3RhdGUoTm90SW5zaWRlTGluaykKLSAgICAsIG1fcGFyZW50Tm9kZSgwKQotICAgICwgbV9s
aW5lSGVpZ2h0VmFsdWUoMCkKLSAgICAsIG1fZm9udERpcnR5KGZhbHNlKQotICAgICwgbV9tYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICwgbV9z
YW1lT3JpZ2luT25seShmYWxzZSkKLSAgICAsIG1fZm9udFNlbGVjdG9yKENTU0ZvbnRTZWxlY3Rv
cjo6Y3JlYXRlKGRvY3VtZW50KSkKLSAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KHRydWUpCi0gICAgLCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCi0g
ICAgLCBtX3N0eWxlQnVpbGRlcihTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpKQot
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2Up
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICwgbV9zY29wZVN0YWNrUGFy
ZW50KDApCi0jZW5kaWYKLXsKLSAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpOwotCi0gICAgaWYgKCFkZWZhdWx0U3R5bGUpIHsKLSAgICAgICAgaWYgKCFyb290
IHx8IGVsZW1lbnRDYW5Vc2VTaW1wbGVEZWZhdWx0U3R5bGUocm9vdCkpCi0gICAgICAgICAgICBs
b2FkU2ltcGxlRGVmYXVsdFN0eWxlKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbG9h
ZEZ1bGxEZWZhdWx0U3R5bGUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIGNvbnN0cnVj
dCBkb2N1bWVudCByb290IGVsZW1lbnQgZGVmYXVsdCBzdHlsZS4gdGhpcyBpcyBuZWVkZWQKLSAg
ICAvLyB0byBldmFsdWF0ZSBtZWRpYSBxdWVyaWVzIHRoYXQgY29udGFpbiByZWxhdGl2ZSBjb25z
dHJhaW50cywgbGlrZSAic2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMGVtKSIKLSAgICAvLyBUaGlz
IGlzIGhlcmUgaW5zdGVhZCBvZiBjb25zdHJ1Y3RvciwgYmVjYXVzZSB3aGVuIGNvbnN0cnVjdG9y
IGlzIHJ1biwKLSAgICAvLyBkb2N1bWVudCBkb2Vzbid0IGhhdmUgZG9jdW1lbnRFbGVtZW50Ci0g
ICAgLy8gTk9URTogdGhpcyBhc3N1bWVzIHRoYXQgZWxlbWVudCB0aGF0IGdldHMgcGFzc2VkIHRv
IHN0eWxlRm9yRWxlbWVudCAtY2FsbAotICAgIC8vIGlzIGFsd2F5cyBmcm9tIHRoZSBkb2N1bWVu
dCB0aGF0IG93bnMgdGhlIHN0eWxlIHNlbGVjdG9yCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9j
dW1lbnQtPnZpZXcoKTsKLSAgICBpZiAodmlldykKLSAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0
cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3LT5tZWRpYVR5cGUoKSkpOwotICAgIGVsc2UK
LSAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcigiYWxs
IikpOwotCi0gICAgaWYgKHJvb3QpCi0gICAgICAgIG1fcm9vdERlZmF1bHRTdHlsZSA9IHN0eWxl
Rm9yRWxlbWVudChyb290LCAwLCBEaXNhbGxvd1N0eWxlU2hhcmluZywgTWF0Y2hPbmx5VXNlckFn
ZW50UnVsZXMpOwotCi0gICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQotICAgICAg
ICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlh
VHlwZSgpLCB2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpKTsKLQotICAg
IG1fYXV0aG9yU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAvLyBBZGRpbmcgcnVsZXMg
ZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgotICAgIC8vIEFkZGluZyBn
bG9iYWwgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgotICAg
IC8vIE5vdGUgdGhhdCB0aGVyZSB1c3VhbGx5IGlzIG9ubHkgMSBzaGVldCBmb3Igc2NvcGVkIHJ1
bGVzLCBzbyBhdXRvLXNocmluay10by1maXQgaXMgZmluZS4KLSAgICBtX2F1dGhvclN0eWxlLT5k
aXNhYmxlQXV0b1Nocmlua1RvRml0KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzdWNrcyEgVGhl
IHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGltZSEKLSAgICBPd25QdHI8UnVsZVNldD4g
dGVtcFVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgIGlmIChTdHlsZVNoZWV0SW50
ZXJuYWwqIHBhZ2VVc2VyU2hlZXQgPSBkb2N1bWVudC0+cGFnZVVzZXJTaGVldCgpKQotICAgICAg
ICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlVXNlclNoZWV0LCAqbV9tZWRp
dW0sIHRoaXMpOwotICAgIGFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVl
dHMoZG9jdW1lbnQtPnBhZ2VHcm91cFVzZXJTaGVldHMoKSwgKnRlbXBVc2VyU3R5bGUpOwotICAg
IGFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoZG9jdW1lbnQtPmRv
Y3VtZW50VXNlclNoZWV0cygpLCAqdGVtcFVzZXJTdHlsZSk7Ci0gICAgaWYgKHRlbXBVc2VyU3R5
bGUtPm1fcnVsZUNvdW50ID4gMCB8fCB0ZW1wVXNlclN0eWxlLT5tX3BhZ2VSdWxlcy5zaXplKCkg
PiAwKQotICAgICAgICBtX3VzZXJTdHlsZSA9IHRlbXBVc2VyU3R5bGUucmVsZWFzZSgpOwotCi0j
aWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoZG9jdW1lbnQtPnN2Z0V4dGVuc2lvbnMoKSkg
ewotICAgICAgICBjb25zdCBIYXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVudCo+JiBzdmdGb250RmFj
ZUVsZW1lbnRzID0gZG9jdW1lbnQtPnN2Z0V4dGVuc2lvbnMoKS0+c3ZnRm9udEZhY2VFbGVtZW50
cygpOwotICAgICAgICBIYXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBzdmdGb250RmFjZUVsZW1lbnRzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8
U1ZHRm9udEZhY2VFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3ZnRm9udEZhY2VFbGVt
ZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBmb250U2VsZWN0b3Io
KS0+YWRkRm9udEZhY2VSdWxlKCgqaXQpLT5mb250RmFjZVJ1bGUoKSk7Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cygwLCBkb2N1bWVudC0+c3R5bGVTaGVldHMo
KS0+dmVjdG9yKCkpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZEF1dGhvclJ1bGVzQW5k
Q29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0
SW50ZXJuYWw+ID4qIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSkKLXsKLSAgICBpZiAo
IXVzZXJTaGVldHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHVz
ZXJTaGVldHMtPnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgY29uc3QgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4mIHNoZWV0ID0g
dXNlclNoZWV0cy0+YXQoaSk7Ci0gICAgICAgIGlmIChzaGVldC0+aXNVc2VyU3R5bGVTaGVldCgp
KQotICAgICAgICAgICAgdXNlclN0eWxlLmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LmdldCgpLCAq
bV9tZWRpdW0sIHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2F1dGhvclN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldChzaGVldC5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsKLSAgICB9
Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3Rv
cjxTdHlsZVJlc29sdmVyOjpSdWxlRmVhdHVyZT4mIHJ1bGVzKQotewotICAgIHNpemVfdCBzaXpl
ID0gcnVsZXMuc2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgcnVsZVNldC0+YWRkUnVs
ZShydWxlc1tpXS5ydWxlLCBydWxlc1tpXS5zZWxlY3RvciwgcnVsZXNbaV0uaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgZmFsc2UpOwotICAgIHJldHVybiBydWxlU2V0LnJlbGVhc2UoKTsKLX0K
LQotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVyZXMoKQotewotICAgIG1fZmVhdHVy
ZXMuY2xlYXIoKTsKLSAgICAvLyBDb2xsZWN0IGFsbCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxp
bmcgc2VsZWN0b3JzICg6Zmlyc3QtY2hpbGQgYW5kIHNpbWlsYXIpCi0gICAgLy8gaW4gdGhlIGN1
cnJlbnQgc2V0IG9mIHN0eWxlc2hlZXRzLiBTdHlsZSBzaGFyaW5nIGNvZGUgdXNlcyB0aGlzIGlu
Zm9ybWF0aW9uIHRvIHJlamVjdAotICAgIC8vIHNoYXJpbmcgY2FuZGlkYXRlcy4KLSAgICBtX2Zl
YXR1cmVzLmFkZChkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkpOwotICAgIG1fZmVhdHVyZXMuYWRk
KG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0g
ICAgZm9yIChTY29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5
bGVzLmJlZ2luKCk7IGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQotICAg
ICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+c2Vjb25kLT5mZWF0dXJlcygpKTsKLSNlbmRpZgotICAg
IGlmIChtX3VzZXJTdHlsZSkKLSAgICAgICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZl
YXR1cmVzKCkpOwotCi0gICAgbV9zaWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVy
ZXMuc2libGluZ1J1bGVzKTsKLSAgICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1ha2VS
dWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7Ci19Ci0KLSNpZiBFTkFC
TEUoU1RZTEVfU0NPUEVEKQotY29uc3QgQ29udGFpbmVyTm9kZSogU3R5bGVSZXNvbHZlcjo6ZGV0
ZXJtaW5lU2NvcGUoY29uc3QgU3R5bGVTaGVldEludGVybmFsKiBzaGVldCkKLXsKLSAgICBBU1NF
UlQoc2hlZXQpOwotCi0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzdHlsZVNjb3Bl
ZEVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOb2RlKiBvd25lck5vZGUgPSBz
aGVldC0+ZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKTsKLSAgICBpZiAoIW93bmVyTm9kZSB8fCAh
b3duZXJOb2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnN0eWxlVGFnKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIVE1MU3R5bGVFbGVt
ZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3duZXJO
b2RlKTsKLSAgICBpZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gc3R5bGVFbGVtZW50LT5wYXJlbnROb2Rl
KCk7Ci0gICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIChw
YXJlbnQtPmlzRWxlbWVudE5vZGUoKSB8fCBwYXJlbnQtPmlzU2hhZG93Um9vdCgpKSA/IHBhcmVu
dCA6IDA7Ci19Ci0KLWlubGluZSBSdWxlU2V0KiBTdHlsZVJlc29sdmVyOjpydWxlU2V0Rm9yU2Nv
cGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY29wZS0+
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgU2NvcGVk
UnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5maW5k
KHNjb3BlKTsKLSAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBp
dC0+c2Vjb25kLmdldCgpIDogMDsgCi19Ci0jZW5kaWYKLQotdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJl
ZlB0cjxTdHlsZVNoZWV0PiA+JiBzdHlsZXNoZWV0cykKLXsKLSAgICAvLyBUaGlzIGhhbmRsZXMg
c2hlZXRzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHN0eWxlc2hlZXQgbGlzdCBvbmx5LiBJbiBv
dGhlciBjYXNlcyB0aGUgc3R5bGUgcmVzb2x2ZXIKLSAgICAvLyBuZWVkcyB0byBiZSByZWNvbnN0
cnVjdGVkLiBUbyBoYW5kbGUgaW5zZXJ0aW9ucyB0b28gdGhlIHJ1bGUgb3JkZXIgbnVtYmVycyB3
b3VsZCBuZWVkIHRvIGJlIHVwZGF0ZWQuCi0gICAgdW5zaWduZWQgc2l6ZSA9IHN0eWxlc2hlZXRz
LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdE5ldzsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBpZiAoIXN0eWxlc2hlZXRzW2ldLT5pc0NTU1N0eWxlU2hlZXQoKSB8fCBzdHls
ZXNoZWV0c1tpXS0+ZGlzYWJsZWQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBD
U1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHls
ZXNoZWV0c1tpXS5nZXQoKSk7Ci0gICAgICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQgPSBj
c3NTaGVldC0+aW50ZXJuYWwoKTsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICAgICBj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IGRldGVybWluZVNjb3BlKHNoZWV0KTsKLSAgICAg
ICAgaWYgKHNjb3BlKSB7Ci0gICAgICAgICAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQg
YWRkUmVzdWx0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKLSAg
ICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgICAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9t
ZWRpdW0sIHRoaXMsIHNjb3BlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0j
ZW5kaWYKLSAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICpt
X21lZGl1bSwgdGhpcyk7Ci0gICAgICAgIGlmICghbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1h
cC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVs
ZVRvQ1NTT01XcmFwcGVyTWFwLCBjc3NTaGVldCk7Ci0gICAgfQotICAgIG1fYXV0aG9yU3R5bGUt
PnNocmlua1RvRml0KCk7Ci0gICAgY29sbGVjdEZlYXR1cmVzKCk7Ci0gICAgCi0gICAgaWYgKGRv
Y3VtZW50KCktPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkK
LSAgICAgICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShm
b250U2VsZWN0b3IoKSk7Ci19Ci0KLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotdm9pZCBTdHls
ZVJlc29sdmVyOjpzZXR1cFNjb3BlU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KQot
ewotICAgIC8vIFRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgc2hvdWxkbid0IGJlIHVzZWQgaWYg
PHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVyZS4KLSAgICBBU1NFUlQoIW1fc2NvcGVk
QXV0aG9yU3R5bGVzLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3Njb3BlU3RhY2suc2hyaW5rKDApOwot
ICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7
Ci0gICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yU2NvcGUocGFyZW50KTsKLSAg
ICAgICAgaWYgKHJ1bGVTZXQpCi0gICAgICAgICAgICBtX3Njb3BlU3RhY2suYXBwZW5kKFNjb3Bl
U3RhY2tGcmFtZShwYXJlbnQsIHJ1bGVTZXQpKTsKLSAgICB9Ci0gICAgbV9zY29wZVN0YWNrLnJl
dmVyc2UoKTsKLSAgICBtX3Njb3BlU3RhY2tQYXJlbnQgPSBwYXJlbnQ7Ci19Ci0KLXZvaWQgU3R5
bGVSZXNvbHZlcjo6cHVzaFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZVBhcmVudCkKLXsKLSAgICAvLyBTaG9ydGN1dDogRG9uJ3QgYm90
aGVyIHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiA8c3R5bGUgc2NvcGVkPiBpc24n
dCB1c2VkIGFueXdoZXJlLgotICAgIGlmIChtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgQVNTRVJUKCFtX3Njb3BlU3RhY2tQYXJlbnQpOwotICAgICAgICBBU1NFUlQo
bV9zY29wZVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8g
SW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZSB3ZSBtYXkgZ2V0IGludm9r
ZWQgZm9yIHJhbmRvbSBlbGVtZW50cy4KLSAgICAvLyBSZWNyZWF0ZSB0aGUgd2hvbGUgc2NvcGlu
ZyBlbGVtZW50IHN0YWNrIGluIHN1Y2ggY2FzZXMuCi0gICAgaWYgKCFzY29wZVN0YWNrSXNDb25z
aXN0ZW50KHNjb3BlUGFyZW50KSkgewotICAgICAgICBzZXR1cFNjb3BlU3RhY2soc2NvcGUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIHBh
cmVudCBvbnRvIHRoZSBzdGFjay4KLSAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvclNj
b3BlKHNjb3BlKTsKLSAgICBpZiAocnVsZVNldCkKLSAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVu
ZChTY29wZVN0YWNrRnJhbWUoc2NvcGUsIHJ1bGVTZXQpKTsKLSAgICBtX3Njb3BlU3RhY2tQYXJl
bnQgPSBzY29wZTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpwb3BTY29wZShjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZSkKLXsKLSAgICAvLyBPbmx5IGJvdGhlciB0byB1cGRhdGUgdGhlIHNj
b3BpbmcgZWxlbWVudCBzdGFjayBpZiBpdCBpcyBjb25zaXN0ZW50LgotICAgIGlmIChzY29wZVN0
YWNrSXNDb25zaXN0ZW50KHNjb3BlKSkgewotICAgICAgICBtX3Njb3BlU3RhY2sucmVtb3ZlTGFz
dCgpOwotICAgICAgICBtX3Njb3BlU3RhY2tQYXJlbnQgPSBzY29wZS0+cGFyZW50T3JIb3N0Tm9k
ZSgpOwotICAgIH0KLX0KLSNlbmRpZgotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRF
bGVtZW50KEVsZW1lbnQqIHBhcmVudCkKLXsKLSAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJl
bnRzUGFyZW50ID0gcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCk7Ci0KLSAgICAvLyBXZSBh
cmUgbm90IGFsd2F5cyBpbnZva2VkIGNvbnNpc3RlbnRseS4gRm9yIGV4YW1wbGUsIHNjcmlwdCBl
eGVjdXRpb24gY2FuIGNhdXNlIHVzIHRvIGVudGVyCi0gICAgLy8gc3R5bGUgcmVjYWxjIGluIHRo
ZSBtaWRkbGUgb2YgdHJlZSBidWlsZGluZy4gV2UgbWF5IGFsc28gYmUgaW52b2tlZCBmcm9tIHNv
bWV3aGVyZSB3aXRoaW4gdGhlIHRyZWUuCi0gICAgLy8gUmVzZXQgdGhlIHN0YWNrIGluIHRoaXMg
Y2FzZSwgb3IgaWYgd2Ugc2VlIGEgbmV3IHJvb3QgZWxlbWVudC4KLSAgICAvLyBPdGhlcndpc2Ug
anVzdCBwdXNoIHRoZSBuZXcgcGFyZW50LgotICAgIGlmICghcGFyZW50c1BhcmVudCB8fCBtX2No
ZWNrZXIucGFyZW50U3RhY2tJc0VtcHR5KCkpCi0gICAgICAgIG1fY2hlY2tlci5zZXR1cFBhcmVu
dFN0YWNrKHBhcmVudCk7Ci0gICAgZWxzZQotICAgICAgICBtX2NoZWNrZXIucHVzaFBhcmVudChw
YXJlbnQpOwotCi0gICAgLy8gTm90ZTogV2UgbXVzdG4ndCBza2lwIFNoYWRvd1Jvb3Qgbm9kZXMg
Zm9yIHRoZSBzY29wZSBzdGFjay4KLSAgICBwdXNoU2NvcGUocGFyZW50LCBwYXJlbnQtPnBhcmVu
dE9ySG9zdE5vZGUoKSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50RWxlbWVu
dChFbGVtZW50KiBwYXJlbnQpCi17Ci0gICAgLy8gTm90ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tl
ZCBmb3Igc29tZSByYW5kb20gZWxlbWVudHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5
bGUgcmVzb2x2ZS4KLSAgICAvLyBQYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBj
YXNlLgotICAgIGlmIChtX2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkK
LSAgICAgICAgbV9jaGVja2VyLnBvcFBhcmVudCgpOwotICAgIHBvcFNjb3BlKHBhcmVudCk7Ci19
Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93
Um9vdCogc2hhZG93Um9vdCkKLXsKLSAgICBBU1NFUlQoc2hhZG93Um9vdC0+aG9zdCgpKTsKLSAg
ICBwdXNoU2NvcGUoc2hhZG93Um9vdCwgc2hhZG93Um9vdC0+aG9zdCgpKTsKLX0KLQotdm9pZCBT
dHlsZVJlc29sdmVyOjpwb3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRv
d1Jvb3QpCi17Ci0gICAgQVNTRVJUKHNoYWRvd1Jvb3QtPmhvc3QoKSk7Ci0gICAgcG9wU2NvcGUo
c2hhZG93Um9vdCk7Ci19Ci0KLS8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHN0eWxlIHNldHRpbmcg
ZnVuY3Rpb24gZm9yIGtleWZyYW1lIHN0eWxlcwotdm9pZCBTdHlsZVJlc29sdmVyOjphZGRLZXlm
cmFtZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiBydWxlKQotewotICAgIEF0
b21pY1N0cmluZyBzKHJ1bGUtPm5hbWUoKSk7Ci0gICAgbV9rZXlmcmFtZXNSdWxlTWFwLnNldChz
LmltcGwoKSwgcnVsZSk7Ci19Ci0KLVN0eWxlUmVzb2x2ZXI6On5TdHlsZVJlc29sdmVyKCkKLXsK
LSAgICBtX2ZvbnRTZWxlY3Rvci0+Y2xlYXJEb2N1bWVudCgpOwotfQotCi12b2lkIFN0eWxlUmVz
b2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCi17Ci0gICAgLy8gTG9vayBmb3Ig
Y2FjaGUgZW50cmllcyBjb250YWluaW5nIGEgc3R5bGUgZGVjbGFyYXRpb24gd2l0aCBhIHNpbmds
ZSByZWYgYW5kIHJlbW92ZSB0aGVtLgotICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGFuIGVs
ZW1lbnQgYXR0cmlidXRlIG11dGF0aW9uIGNhdXNlcyBpdCB0byBzd2FwIG91dCBpdHMgQXR0cmli
dXRlOjpkZWNsKCkKLSAgICAvLyBmb3IgYW5vdGhlciBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJh
dGlvbiwgcG90ZW50aWFsbHkgbGVhdmluZyB0aGlzIGNhY2hlIHdpdGggdGhlIGxhc3QgcmVmLgot
ICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+IHRvUmVtb3ZlOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmJlZ2luKCk7Ci0g
ICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgZW5kID0gbV9tYXRjaGVkUHJvcGVy
dGllc0NhY2hlLmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
VmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiYgbWF0Y2hlZFByb3BlcnRpZXMgPSBpdC0+c2Vjb25k
Lm1hdGNoZWRQcm9wZXJ0aWVzOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hlZFByb3Bl
cnRpZXNbaV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAgICAgICB0b1Jl
bW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvUmVt
b3ZlLnNpemUoKTsgKytpKQotICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUucmVtb3Zl
KHRvUmVtb3ZlW2ldKTsKLX0KLQotU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6OkZlYXR1cmVzKCkK
LSAgICA6IHVzZXNGaXJzdExpbmVSdWxlcyhmYWxzZSkKLSAgICAsIHVzZXNCZWZvcmVBZnRlclJ1
bGVzKGZhbHNlKQotICAgICwgdXNlc0xpbmtSdWxlcyhmYWxzZSkKLXsKLX0KLQotU3R5bGVSZXNv
bHZlcjo6RmVhdHVyZXM6On5GZWF0dXJlcygpCi17Ci19Ci0gICAgCi12b2lkIFN0eWxlUmVzb2x2
ZXI6OkZlYXR1cmVzOjphZGQoY29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIG90aGVyKQot
ewotICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBlbmQgPSBvdGhlci5p
ZHNJblJ1bGVzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0
ZXJhdG9yIGl0ID0gb3RoZXIuaWRzSW5SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGlkc0luUnVsZXMuYWRkKCppdCk7Ci0gICAgZW5kID0gb3RoZXIuYXR0cnNJblJ1bGVz
LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0
ID0gb3RoZXIuYXR0cnNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
YXR0cnNJblJ1bGVzLmFkZCgqaXQpOwotICAgIHNpYmxpbmdSdWxlcy5hcHBlbmQob3RoZXIuc2li
bGluZ1J1bGVzKTsKLSAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChvdGhlci51bmNv
bW1vbkF0dHJpYnV0ZVJ1bGVzKTsKLSAgICB1c2VzRmlyc3RMaW5lUnVsZXMgPSB1c2VzRmlyc3RM
aW5lUnVsZXMgfHwgb3RoZXIudXNlc0ZpcnN0TGluZVJ1bGVzOwotICAgIHVzZXNCZWZvcmVBZnRl
clJ1bGVzID0gdXNlc0JlZm9yZUFmdGVyUnVsZXMgfHwgb3RoZXIudXNlc0JlZm9yZUFmdGVyUnVs
ZXM7Ci0gICAgdXNlc0xpbmtSdWxlcyA9IHVzZXNMaW5rUnVsZXMgfHwgb3RoZXIudXNlc0xpbmtS
dWxlczsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlczo6Y2xlYXIoKQotewotICAg
IGlkc0luUnVsZXMuY2xlYXIoKTsKLSAgICBhdHRyc0luUnVsZXMuY2xlYXIoKTsKLSAgICBzaWJs
aW5nUnVsZXMuY2xlYXIoKTsKLSAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7Ci0g
ICAgdXNlc0ZpcnN0TGluZVJ1bGVzID0gZmFsc2U7Ci0gICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMg
PSBmYWxzZTsKLSAgICB1c2VzTGlua1J1bGVzID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyBTdHlsZVNo
ZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKLXsKLSAgICBTdHls
ZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoKS5sZWFr
UmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBvc2UKLSAgICBzaGVldC0+cGFyc2VTdHJp
bmcoc3RyKTsKLSAgICByZXR1cm4gc2hlZXQ7Ci19Ci0KLXN0YXRpYyBTdHlsZVNoZWV0SW50ZXJu
YWwqIHBhcnNlVUFTaGVldChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzaXplKQot
ewotICAgIHJldHVybiBwYXJzZVVBU2hlZXQoU3RyaW5nKGNoYXJhY3RlcnMsIHNpemUpKTsKLX0K
LQotc3RhdGljIHZvaWQgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKQotewotICAgIGlmIChzaW1wbGVE
ZWZhdWx0U3R5bGVTaGVldCkgewotICAgICAgICBBU1NFUlQoZGVmYXVsdFN0eWxlKTsKLSAgICAg
ICAgQVNTRVJUKGRlZmF1bHRQcmludFN0eWxlID09IGRlZmF1bHRTdHlsZSk7Ci0gICAgICAgIGRl
bGV0ZSBkZWZhdWx0U3R5bGU7Ci0gICAgICAgIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0LT5kZXJl
ZigpOwotICAgICAgICBkZWZhdWx0U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7
Ci0gICAgICAgIGRlZmF1bHRQcmludFN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCkubGVha1B0cigp
OwotICAgICAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKCFkZWZhdWx0U3R5bGUpOwotICAgICAgICBkZWZhdWx0U3R5bGUgPSBSdWxl
U2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7Ci0gICAgICAgIGRlZmF1bHRQcmludFN0eWxlID0gUnVs
ZVNldDo6Y3JlYXRlKCkubGVha1B0cigpOwotICAgICAgICBkZWZhdWx0UXVpcmtzU3R5bGUgPSBS
dWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7Ci0gICAgfQotCi0gICAgLy8gU3RyaWN0LW1vZGUg
cnVsZXMuCi0gICAgU3RyaW5nIGRlZmF1bHRSdWxlcyA9IFN0cmluZyhodG1sVXNlckFnZW50U3R5
bGVTaGVldCwgc2l6ZW9mKGh0bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6
ZGVmYXVsdFRoZW1lKCktPmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKLSAgICBkZWZhdWx0U3R5
bGVTaGVldCA9IHBhcnNlVUFTaGVldChkZWZhdWx0UnVsZXMpOwotICAgIGRlZmF1bHRTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQoZGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0gICAg
ZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGRlZmF1bHRTdHlsZVNoZWV0LCBw
cmludEV2YWwoKSk7Ci0KLSAgICAvLyBRdWlya3MtbW9kZSBydWxlcy4KLSAgICBTdHJpbmcgcXVp
cmtzUnVsZXMgPSBTdHJpbmcocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHF1aXJr
c1VzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+ZXh0
cmFRdWlya3NTdHlsZVNoZWV0KCk7Ci0gICAgcXVpcmtzU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVl
dChxdWlya3NSdWxlcyk7Ci0gICAgZGVmYXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVl
dChxdWlya3NTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotfQotCi1zdGF0aWMgdm9pZCBsb2Fk
U2ltcGxlRGVmYXVsdFN0eWxlKCkKLXsKLSAgICBBU1NFUlQoIWRlZmF1bHRTdHlsZSk7Ci0gICAg
QVNTRVJUKCFzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCk7Ci0KLSAgICBkZWZhdWx0U3R5bGUgPSBS
dWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7Ci0gICAgLy8gVGhlcmUgYXJlIG5vIG1lZGlhLXNw
ZWNpZmljIHJ1bGVzIGluIHRoZSBzaW1wbGUgZGVmYXVsdCBzdHlsZS4KLSAgICBkZWZhdWx0UHJp
bnRTdHlsZSA9IGRlZmF1bHRTdHlsZTsKLSAgICBkZWZhdWx0UXVpcmtzU3R5bGUgPSBSdWxlU2V0
OjpjcmVhdGUoKS5sZWFrUHRyKCk7Ci0KLSAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCA9IHBh
cnNlVUFTaGVldChzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0LCBzdHJsZW4oc2ltcGxlVXNlckFn
ZW50U3R5bGVTaGVldCkpOwotICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2lt
cGxlRGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0KLSAgICAvLyBObyBuZWVkIHRv
IGluaXRpYWxpemUgcXVpcmtzIHNoZWV0IHlldCBhcyB0aGVyZSBhcmUgbm8gcXVpcmsgcnVsZXMg
Zm9yIGVsZW1lbnRzIGFsbG93ZWQgaW4gc2ltcGxlIGRlZmF1bHQgc3R5bGUuCi19Ci0KLXN0YXRp
YyB2b2lkIGxvYWRWaWV3U291cmNlU3R5bGUoKQotewotICAgIEFTU0VSVCghZGVmYXVsdFZpZXdT
b3VyY2VTdHlsZSk7Ci0gICAgZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0
ZSgpLmxlYWtQdHIoKTsKLSAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChwYXJzZVVBU2hlZXQoc291cmNlVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHNvdXJj
ZVVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsKLX0KLQotc3RhdGljIHZvaWQg
ZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQotewot
ICAgIGlmIChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCAmJiAhZWxlbWVudENhblVzZVNpbXBsZURl
ZmF1bHRTdHlsZShlbGVtZW50KSkKLSAgICAgICAgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKTsKLQot
I2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmICFzdmdT
dHlsZVNoZWV0KSB7Ci0gICAgICAgIC8vIFNWRyBydWxlcy4KLSAgICAgICAgc3ZnU3R5bGVTaGVl
dCA9IHBhcnNlVUFTaGVldChzdmdVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yoc3ZnVXNlckFn
ZW50U3R5bGVTaGVldCkpOwotICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0
KHN2Z1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0gICAgICAgIGRlZmF1bHRQcmludFN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldChzdmdTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7Ci0gICAgfQot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoTUFUSE1MKQotICAgIGlmIChlbGVtZW50LT5pc01hdGhNTEVs
ZW1lbnQoKSAmJiAhbWF0aE1MU3R5bGVTaGVldCkgewotICAgICAgICAvLyBNYXRoTUwgcnVsZXMu
Ci0gICAgICAgIG1hdGhNTFN0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQobWF0aG1sVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKG1hdGhtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLSAgICAgICAg
ZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtYXRoTUxTdHlsZVNoZWV0LCBzY3JlZW5F
dmFsKCkpOwotICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWF0
aE1MU3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxF
KFZJREVPKQotICAgIGlmICghbWVkaWFDb250cm9sc1N0eWxlU2hlZXQgJiYgKGVsZW1lbnQtPmhh
c1RhZ05hbWUodmlkZW9UYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXVkaW9UYWcpKSkgewot
ICAgICAgICBTdHJpbmcgbWVkaWFSdWxlcyA9IFN0cmluZyhtZWRpYUNvbnRyb2xzVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBS
ZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVsZW1lbnQtPmRvY3VtZW50KCktPnBhZ2UoKSktPmV4
dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKLSAgICAgICAgbWVkaWFDb250cm9sc1N0eWxl
U2hlZXQgPSBwYXJzZVVBU2hlZXQobWVkaWFSdWxlcyk7Ci0gICAgICAgIGRlZmF1bHRTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQobWVkaWFDb250cm9sc1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7
Ci0gICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQotICAgIGlmICghZnVsbHNjcmVlblN0eWxlU2hlZXQgJiYgZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2NyZWVuKCkpIHsKLSAgICAgICAgU3RyaW5nIGZ1
bGxzY3JlZW5SdWxlcyA9IFN0cmluZyhmdWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKGZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVs
dFRoZW1lKCktPmV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKTsKLSAgICAgICAgZnVsbHNjcmVl
blN0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQoZnVsbHNjcmVlblJ1bGVzKTsKLSAgICAgICAgZGVm
YXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChmdWxsc2NyZWVuU3R5bGVTaGVldCwgc2NyZWVu
RXZhbCgpKTsKLSAgICAgICAgZGVmYXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChm
dWxsc2NyZWVuU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IEFTU0VSVChkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5pc0VtcHR5KCkpOwot
ICAgIEFTU0VSVChtYXRoTUxTdHlsZVNoZWV0IHx8IGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKS5z
aWJsaW5nUnVsZXMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjphZGRNYXRj
aGVkUHJvcGVydGllcyhNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIFN0eWxlUHJvcGVydHlTZXQq
IHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgYm9v
bCBpblJlZ2lvblJ1bGUpCi17Ci0gICAgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuZ3Jv
dyhtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgKyAxKTsKLSAgICBNYXRjaGVk
UHJvcGVydGllcyYgbmV3UHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
Lmxhc3QoKTsKLSAgICBuZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwotICAg
IG5ld1Byb3BlcnRpZXMubGlua01hdGNoVHlwZSA9IGxpbmtNYXRjaFR5cGU7Ci0gICAgbmV3UHJv
cGVydGllcy5pc0luUmVnaW9uUnVsZSA9IGluUmVnaW9uUnVsZTsKLSAgICBtYXRjaFJlc3VsdC5t
YXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOwotfQotCi1pbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVy
OjphZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFN0eWxlUHJv
cGVydHlTZXQqIHByb3BlcnR5U2V0LCBib29sIGlzQ2FjaGVhYmxlKQotewotICAgIGlmICghcHJv
cGVydHlTZXQpCi0gICAgICAgIHJldHVybjsKLSAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JS
dWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsKLSAgICBpZiAocmVzdWx0LnJh
bmdlcy5maXJzdEF1dGhvclJ1bGUgPT0gLTEpCi0gICAgICAgIHJlc3VsdC5yYW5nZXMuZmlyc3RB
dXRob3JSdWxlID0gcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZTsKLSAgICBhZGRNYXRjaGVk
UHJvcGVydGllcyhyZXN1bHQsIHByb3BlcnR5U2V0KTsKLSAgICBpZiAoIWlzQ2FjaGVhYmxlKQot
ICAgICAgICByZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKLX0KLQotdm9pZCBTdHlsZVJlc29s
dmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJ
bmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCi17
Ci0gICAgQVNTRVJUKHJ1bGVzKTsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKLQotICAgIC8vIFdl
IG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0
aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCi0gICAgLy8gdGhlbiBzb3J0IHRoZSBidWZmZXIu
Ci0gICAgaWYgKG1fZWxlbWVudC0+aGFzSUQoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KHJ1bGVzLT5pZFJ1bGVzKG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24o
KS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7Ci0gICAg
aWYgKG1fZWxlbWVudC0+aGFzQ2xhc3MoKSkgewotICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVt
ZW50KTsKLSAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcyA9IG1fc3R5
bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpOwotICAgICAgICBzaXplX3Qgc2l6ZSA9IGNsYXNzTmFt
ZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAg
ICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+Y2xhc3NSdWxlcyhj
bGFzc05hbWVzW2ldLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRp
b25zKTsKLSAgICB9Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IG1fZWxlbWVu
dC0+c2hhZG93UHNldWRvSWQoKTsKLSAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkgewotICAg
ICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KHJ1bGVzLT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgp
KSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwotICAgIH0KLSAgICBp
ZiAobV9lbGVtZW50LT5pc0xpbmsoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KHJ1bGVzLT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1
bGVJbmRleCwgb3B0aW9ucyk7Ci0gICAgaWYgKG1fY2hlY2tlci5tYXRjaGVzRm9jdXNQc2V1ZG9D
bGFzcyhtX2VsZW1lbnQpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVs
ZXMtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRl
eCwgb3B0aW9ucyk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT50YWdS
dWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0
UnVsZUluZGV4LCBvcHRpb25zKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVs
ZXMtPnVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRp
b25zKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJl
Z2lvbihSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUlu
ZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKCFtX3JlZ2lvbkZv
clN0eWxpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy0+
bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0
b3IgPSBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvcjsK
LSAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRpY19j
YXN0PEVsZW1lbnQqPihtX3JlZ2lvbkZvclN0eWxpbmctPm5vZGUoKSkpKSB7Ci0gICAgICAgICAg
ICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IHJ1bGVzLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVT
ZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVnaW9uUnVsZXMp
OwotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMocmVnaW9uUnVsZXMsIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
dm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCkKLXsKLSAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0KLSAgICBpZiAobV9jaGVja2Vy
LmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKSB7Ci0gICAgICAgIGlmICghbV9ydWxlTGlzdCkKLSAg
ICAgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgIG1fcnVsZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ld
LT5ydWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBv
dXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMuCi0gICAgLy8gRklYTUU6IFRoaXMgc3Vja3MsIHRoZSBp
bnNwZWN0b3Igc2hvdWxkIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgdmlzaXRlZCBzdHlsZSBpdHNl
bGYuCi0gICAgYm9vbCBzd2FwVmlzaXRlZFVudmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShtX2VsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNp
dGVkKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgaWYgKG1fc3R5bGUgJiYgbV9tYXRjaGVkUnVsZXNbaV0tPmNvbnRh
aW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
QWZmZWN0ZWRCeVVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3JzKCk7Ci0gICAgICAgIHVuc2lnbmVk
IGxpbmtNYXRjaFR5cGUgPSBtX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpOwotICAg
ICAgICBpZiAoc3dhcFZpc2l0ZWRVbnZpc2l0ZWQgJiYgbGlua01hdGNoVHlwZSAmJiBsaW5rTWF0
Y2hUeXBlICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwpCi0gICAgICAgICAgICBsaW5rTWF0
Y2hUeXBlID0gKGxpbmtNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQp
ID8gU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmsgOiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlz
aXRlZDsKLSAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBtX21hdGNoZWRSdWxl
c1tpXS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCksIGxp
bmtNYXRjaFR5cGUsIG1fbWF0Y2hlZFJ1bGVzW2ldLT5pc0luUmVnaW9uUnVsZSgpKTsKLSAgICB9
Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQotewotI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCi0gICAgaWYgKG1fc2NvcGVkQXV0aG9yU3R5bGVzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTWF0Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMp
OwotCi0gICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBz
Y29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4K
LSAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX2VsZW1lbnQtPnBhcmVudE9ySG9z
dE5vZGUoKTsKLSAgICBpZiAoIXNjb3BlU3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKLSAgICAg
ICAgc2V0dXBTY29wZVN0YWNrKHBhcmVudCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IG1fc2NvcGVT
dGFjay5zaXplKCk7IGk7IC0taSkgewotICAgICAgICBjb25zdCBTY29wZVN0YWNrRnJhbWUmIGZy
YW1lID0gbV9zY29wZVN0YWNrW2kgLSAxXTsKLSAgICAgICAgb3B0aW9ucy5zY29wZSA9IGZyYW1l
Lm1fc2NvcGU7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKGZyYW1lLm1fcnVsZVNldCwg
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIG9wdGlvbnMpOwotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihmcmFt
ZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2Vz
Lmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKLSAgICB9Ci0gICAgLy8gQWxzbyBpbmNsdWRlIHRo
ZSBjdXJyZW50IGVsZW1lbnQuCi0gICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3JTY29w
ZShtX2VsZW1lbnQpOwotICAgIGlmIChydWxlU2V0KSB7Ci0gICAgICAgIG9wdGlvbnMuc2NvcGUg
PSBtX2VsZW1lbnQ7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQsIHJlc3Vs
dC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBv
cHRpb25zKTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24ocnVsZVNldCwg
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIG9wdGlvbnMpOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSNlbmRpZgotfQotCi12b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcykKLXsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwotICAgIHJl
c3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6
ZSgpIC0gMTsKLQotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgotICAgIE1hdGNoT3B0aW9ucyBvcHRpb25zKGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtX2F1dGhvclN0eWxl
LmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSwgb3B0aW9ucyk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24o
bV9hdXRob3JTdHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOwotCi0gICAgbWF0Y2hTY29wZWRBdXRo
b3JSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLQotICAgIHNvcnRBbmRUcmFuc2Zl
ck1hdGNoZWRSdWxlcyhyZXN1bHQpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNl
clJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCi17Ci0g
ICAgaWYgKCFtX3VzZXJTdHlsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbWF0Y2hl
ZFJ1bGVzLmNsZWFyKCk7Ci0KLSAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KG1fdXNlclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIHJlc3VsdC5y
YW5nZXMubGFzdFVzZXJSdWxlLCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JSZWdpb24obV91c2VyU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RV
c2VyUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
LQotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwotfQotCi12b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBy
dWxlcykKLXsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwotICAgIAotICAgIHJlc3VsdC5y
YW5nZXMubGFzdFVBUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwot
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVzLCByZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxl
LCByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKLQotICAgIHNvcnRBbmRUcmFuc2Zl
ck1hdGNoZWRSdWxlcyhyZXN1bHQpOwotfQotCi1jbGFzcyBNYXRjaGluZ1VBUnVsZXNTY29wZSB7
Ci1wdWJsaWM6Ci0gICAgTWF0Y2hpbmdVQVJ1bGVzU2NvcGUoKTsKLSAgICB+TWF0Y2hpbmdVQVJ1
bGVzU2NvcGUoKTsKLQotICAgIHN0YXRpYyBib29sIGlzTWF0Y2hpbmdVQVJ1bGVzKCk7Ci0KLXBy
aXZhdGU6Ci0gICAgc3RhdGljIGJvb2wgbV9tYXRjaGluZ1VBUnVsZXM7Ci19OwotCi1NYXRjaGlu
Z1VBUnVsZXNTY29wZTo6TWF0Y2hpbmdVQVJ1bGVzU2NvcGUoKQotewotICAgIEFTU0VSVCghbV9t
YXRjaGluZ1VBUnVsZXMpOwotICAgIG1fbWF0Y2hpbmdVQVJ1bGVzID0gdHJ1ZTsKLX0KLQotTWF0
Y2hpbmdVQVJ1bGVzU2NvcGU6On5NYXRjaGluZ1VBUnVsZXNTY29wZSgpCi17Ci0gICAgbV9tYXRj
aGluZ1VBUnVsZXMgPSBmYWxzZTsKLX0KLQotaW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2Nv
cGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKLXsKLSAgICByZXR1cm4gbV9tYXRjaGluZ1VBUnVsZXM7
Ci19Ci0KLWJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFs
c2U7Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNv
bnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIXJ1
bGVzKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVw
IGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEg
cmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4KLSAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRl
ciB3b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBm
YXN0IHBhdGguCi0gICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9jaGVja2VyLnBhcmVudFN0
YWNrSXNDb25zaXN0ZW50KG1fcGFyZW50Tm9kZSk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gcnVs
ZXMtPnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSA9IHJ1bGVzLT5hdChpKTsKLSAgICAgICAg
aWYgKGNhblVzZUZhc3RSZWplY3QgJiYgbV9jaGVja2VyLmZhc3RSZWplY3RTZWxlY3RvcjxSdWxl
RGF0YTo6bWF4aW11bUlkZW50aWZpZXJDb3VudD4ocnVsZURhdGEuZGVzY2VuZGFudFNlbGVjdG9y
SWRlbnRpZmllckhhc2hlcygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFN0
eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUoKTsKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1h
dGNoUnVsZShkb2N1bWVudCgpLCBydWxlKTsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAg
ICAgICBpZiAoY2hlY2tTZWxlY3RvcihydWxlRGF0YSwgb3B0aW9ucy5zY29wZSkpIHsKLSNlbHNl
Ci0gICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhKSkgewotI2VuZGlmCi0gICAgICAg
ICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBydWxlIGlzIGFwcGxpY2FibGUgaW4gdGhlIGN1cnJl
bnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6Ci0gICAgICAgICAgICAvLyBhKSBpdCdz
IGEgVUEgcnVsZQotICAgICAgICAgICAgLy8gYikgdGhlIHRyZWUgc2NvcGUgYWxsb3dzIGF1dGhv
ciBydWxlcwotICAgICAgICAgICAgLy8gYykgdGhlIHJ1bGVzIGNvbWVzIGZyb20gYSBzY29wZWQg
c3R5bGUgc2hlZXQgd2l0aGluIHRoZSBzYW1lIHRyZWUgc2NvcGUKLSAgICAgICAgICAgIC8vIGQp
IHRoZSBydWxlIGNvbnRhaW5zIHNoYWRvdy1JRCBwc2V1ZG8gZWxlbWVudHMKLSAgICAgICAgICAg
IFRyZWVTY29wZSogdHJlZVNjb3BlID0gbV9lbGVtZW50LT50cmVlU2NvcGUoKTsKLSAgICAgICAg
ICAgIGlmICghTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKLSAgICAg
ICAgICAgICAgICAmJiAhdHJlZVNjb3BlLT5hcHBseUF1dGhvclNoZWV0cygpCi0jaWYgRU5BQkxF
KFNUWUxFX1NDT1BFRCkKLSAgICAgICAgICAgICAgICAmJiAoIW9wdGlvbnMuc2NvcGUgfHwgb3B0
aW9ucy5zY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKQotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgJiYgIW1fY2hlY2tlci5oYXNVbmtub3duUHNldWRvRWxlbWVudHMoKSkgewotCi0gICAg
ICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2ll
LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBp
Z25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgotICAgICAgICAgICAgU3R5bGVQcm9wZXJ0
eVNldCogcHJvcGVydGllcyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIGlmICgh
cHJvcGVydGllcyB8fCAocHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFvcHRpb25zLmluY2x1ZGVF
bXB0eVJ1bGVzKSkgewotICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gRklYTUU6IEV4cG9zaW5nIHRoZSBub24tc3Rh
bmRhcmQgZ2V0TWF0Y2hlZENTU1J1bGVzIEFQSSB0byB3ZWIgaXMgdGhlIG9ubHkgcmVhc29uIHRo
aXMgaXMgbmVlZGVkLgotICAgICAgICAgICAgaWYgKG1fc2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVE
YXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkgewotICAgICAgICAgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSWYgd2Un
cmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQgYSBwc2V1ZG8gYml0IGlmCi0gICAgICAgICAg
ICAvLyB3ZSByZWFsbHkganVzdCBtYXRjaGVkIGEgcHNldWRvLWVsZW1lbnQuCi0gICAgICAgICAg
ICBpZiAobV9keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIG1fY2hlY2tlci5wc2V1ZG9TdHls
ZSgpID09IE5PUFNFVURPKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY2hlY2tlci5pc0NvbGxl
Y3RpbmdSdWxlc09ubHkoKSkgewotICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtX2R5
bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNldWRvKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1
bGUgaW5kaWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KLSAgICAgICAgICAgICAgICAr
K2xhc3RSdWxlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0UnVsZUluZGV4ID09IC0x
KQotICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCA9IGxhc3RSdWxlSW5kZXg7Ci0K
LSAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1hdGNoZWQg
cnVsZXMuCi0gICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFJ1bGUoJnJ1bGVEYXRhKTsKLSAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUs
IHRydWUpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tp
ZSwgZmFsc2UpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhj
b25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKLXsKLSAgICB1bnNpZ25lZCBz
cGVjaWZpY2l0eTEgPSByMS0+c3BlY2lmaWNpdHkoKTsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0
eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsKLSAgICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVj
aWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5
MSA8IHNwZWNpZmljaXR5MjsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1
bGVzKCkKLXsKLSAgICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVk
UnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0
Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQotewotICAgIG1hdGNoVUFSdWxlcyhyZXN1
bHQpOwotCi0gICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCi0gICAgaWYgKG1f
bWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQs
IGZhbHNlKTsKLSAgICAgICAgCi0gICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxlcywgYmVnaW5u
aW5nIGZpcnN0IHdpdGggcHJlc2VudGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1M
LgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQpIHsKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJv
cGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5bGUoKSk7Ci0KLSAg
ICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9uYWwgbWFwcGVkIGRlY2xhcmF0aW9ucy4KLSAg
ICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxscyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBl
ZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCi0gICAgICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1
dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUgZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11
bHRpcGxlIGF0dHJpYnV0ZXMuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVz
dWx0LCBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpKTsKLQotICAg
ICAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAg
IGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0g
dG9IVE1MRWxlbWVudChtX3N0eWxlZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0
b0F0dHJpYnV0ZShpc0F1dG8pOwotICAgICAgICAgICAgaWYgKGlzQXV0bykKLSAgICAgICAgICAg
ICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRSID8g
bGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNo
ZWV0cyBuZXh0LgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAg
bWF0Y2hBdXRob3JSdWxlcyhyZXN1bHQsIGZhbHNlKTsKLQotICAgIC8vIE5vdyBjaGVjayBvdXIg
aW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMgJiYgbV9zdHlsZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkg
ewotICAgICAgICAvLyBJbmxpbmUgc3R5bGUgaXMgaW1tdXRhYmxlIGFzIGxvbmcgYXMgdGhlcmUg
aXMgbm8gQ1NTT00gd3JhcHBlci4KLSAgICAgICAgLy8gRklYTUU6IE1lZGlhIGNvbnRyb2wgc2hh
ZG93IHRyZWVzIHNlZW0gdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGNhY2hpbmcuCi0gICAgICAgIGJv
b2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxl
KCktPmlzTXV0YWJsZSgpICYmICFtX3N0eWxlZEVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk7Ci0g
ICAgICAgIC8vIEZJWE1FOiBDb25zdGlmeS4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0eVNldCo+KG1fc3R5bGVkRWxlbWVu
dC0+aW5saW5lU3R5bGUoKSksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOwotICAgIH0KLQotI2lm
IEVOQUJMRShTVkcpCi0gICAgLy8gTm93IGNoZWNrIFNNSUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0
eWxlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1l
bnQgJiYgbV9zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxl
ZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNo
ZWFibGUgKi8pOwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRF
bGVtZW50KEVsZW1lbnQqIGUpCi17Ci0gICAgaWYgKG1fZWxlbWVudCAhPSBlKSB7Ci0gICAgICAg
IG1fZWxlbWVudCA9IGU7Ci0gICAgICAgIG1fc3R5bGVkRWxlbWVudCA9IG1fZWxlbWVudCAmJiBt
X2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+
KG1fZWxlbWVudCkgOiAwOwotICAgICAgICBtX2VsZW1lbnRMaW5rU3RhdGUgPSBtX2NoZWNrZXIu
ZGV0ZXJtaW5lTGlua1N0YXRlKG1fZWxlbWVudCk7Ci0gICAgICAgIGlmIChlICYmIGUgPT0gZS0+
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGUtPmRvY3VtZW50
KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKLSAgICAgICAgICAg
IGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2Up
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0
Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNl
dWRvSWQgcHNldWRvSUQpCi17Ci0gICAgbV9jaGVja2VyLnNldFBzZXVkb1N0eWxlKHBzZXVkb0lE
KTsKLQotICAgIG1fcGFyZW50Tm9kZSA9IGUgPyBlLT5wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5k
U3R5bGUoKSA6IDA7Ci0KLSAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgIG1fcGFyZW50U3R5
bGUgPSBwYXJlbnRTdHlsZTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBtX3Bh
cmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOwotCi0gICAgTm9kZSog
ZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7Ci0g
ICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnJlbmRlclN0
eWxlKCk7Ci0gICAgbV9yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBlICE9IGRvY0Vs
ZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7Ci0KLSAgICBtX3N0
eWxlID0gMDsKLQotICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOwotCi0gICAg
bV9ydWxlTGlzdCA9IDA7Ci0KLSAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwotfQotCi1zdGF0aWMg
Y29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7Ci1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgPSAxMDsKLQotTm9kZSogU3R5bGVS
ZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNp
dGVkTm9kZUNvdW50KSBjb25zdAotewotICAgIGlmICh2aXNpdGVkTm9kZUNvdW50ID49IGNTdHls
ZVNlYXJjaFRocmVzaG9sZCAqIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBpZiAocGFy
ZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSNlbmRp
ZgotICAgIFN0eWxlZEVsZW1lbnQqIHAgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFy
ZW50KTsKLSAgICBpZiAocC0+aW5saW5lU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jaWYg
RU5BQkxFKFNWRykKLSAgICBpZiAocC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KHApLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0jZW5kaWYKLSAgICBpZiAocC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVs
ZXMuY29udGFpbnMocC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHAtPnJlbmRlclN0eWxl
KCk7Ci0gICAgdW5zaWduZWQgc3ViY291bnQgPSAwOwotICAgIE5vZGUqIHRoaXNDb3VzaW4gPSBw
OwotICAgIE5vZGUqIGN1cnJlbnROb2RlID0gcC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0KLSAgICAv
LyBSZXNlcnZlIHRoZSB0cmllcyBmb3IgdGhpcyBsZXZlbC4gVGhpcyBlZmZlY3RpdmVseSBtYWtl
cyBzdXJlIHRoYXQgdGhlIGFsZ29yaXRobQotICAgIC8vIHdpbGwgbmV2ZXIgZ28gZGVlcGVyIHRo
YW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVjdXJzaW9uLgotICAg
IHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOwotICAgIHdoaWxlICh0
aGlzQ291c2luKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgewotICAgICAgICAgICAg
KytzdWJjb3VudDsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA9
PSBwYXJlbnRTdHlsZSAmJiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBBZGp1c3QgZm9yIHVudXNlZCByZXNlcnZlZCB0cmllcy4KLSAgICAgICAgICAgICAg
ICB2aXNpdGVkTm9kZUNvdW50IC09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAtIHN1YmNvdW50Owot
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoc3ViY291bnQgPj0gY1N0eWxlU2VhcmNoVGhyZXNob2xk
KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY3VycmVudE5vZGUgPSBj
dXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVu
dE5vZGUgPSBsb2NhdGVDb3VzaW5MaXN0KHRoaXNDb3VzaW4tPnBhcmVudEVsZW1lbnQoKSwgdmlz
aXRlZE5vZGVDb3VudCk7Ci0gICAgICAgIHRoaXNDb3VzaW4gPSBjdXJyZW50Tm9kZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjptYXRjaGVzUnVsZVNl
dChSdWxlU2V0KiBydWxlU2V0KQotewotICAgIGlmICghcnVsZVNldCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7Ci0KLSAgICBpbnQgZmlyc3RSdWxl
SW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KHJ1bGVTZXQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBmYWxzZSk7Ci0KLSAgICBp
ZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTdHls
ZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVu
dCkgY29uc3QKLXsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxl
bWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0
RWxlbWVudCA9IG1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLQotICAgIGlmICghdGhpc0lu
cHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKSAhPSBvdGhlcklucHV0
RWxlbWVudC0+aXNBdXRvZmlsbGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
dGhpc0lucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpICE9IG90aGVySW5wdXRFbGVt
ZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAodGhpc0lucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkgIT0gb3RoZXJJbnB1dEVsZW1l
bnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRo
aXNJbnB1dEVsZW1lbnQtPnJlcXVpcmVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPnJlcXVpcmVk
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRG
b3JtQ29udHJvbCgpICE9IG1fZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZv
cm0oKSAhPSBtX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxp
ZGl0eVN0eWxlUnVsZXMoKSkgewotICAgICAgICBib29sIHdpbGxWYWxpZGF0ZSA9IGVsZW1lbnQt
PndpbGxWYWxpZGF0ZSgpOwotCi0gICAgICAgIGlmICh3aWxsVmFsaWRhdGUgIT0gbV9lbGVtZW50
LT53aWxsVmFsaWRhdGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBp
ZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkg
IT0gbV9lbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBtX2Vs
ZW1lbnQtPmlzSW5SYW5nZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IGlmIChlbGVtZW50LT5pc091dE9mUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlzT3V0T2ZSYW5nZSgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi0vLyBUaGlzIGZ1bmN0aW9uIG1ha2VzIHNvbWUgYXNzdW1wdGlvbnMgdGhhdCBvbmx5IG1h
a2Ugc2Vuc2UgZm9yIGF0dHJpYnV0ZSBzdHlsZXMgKHdlIG9ubHkgY29tcGFyZSBDU1NQcm9wZXJ0
eTo6aWQoKSBhbmQgQ1NTUHJvcGVydHk6OnZhbHVlKCkuKQotc3RhdGljIGlubGluZSBib29sIGF0
dHJpYnV0ZVN0eWxlc0VxdWFsKFN0eWxlUHJvcGVydHlTZXQqIGEsIFN0eWxlUHJvcGVydHlTZXQq
IGIpCi17Ci0gICAgaWYgKGEgPT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGEt
PnByb3BlcnR5Q291bnQoKSAhPSBiLT5wcm9wZXJ0eUNvdW50KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gYS0+cHJvcGVydHlDb3VudCgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKLSAgICAg
ICAgY29uc3QgQ1NTUHJvcGVydHkmIGFQcm9wZXJ0eSA9IGEtPnByb3BlcnR5QXQoaSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGo7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBwcm9wZXJ0eUNvdW50OyAr
K2opIHsKLSAgICAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBiUHJvcGVydHkgPSBiLT5wcm9w
ZXJ0eUF0KGopOwotICAgICAgICAgICAgaWYgKGFQcm9wZXJ0eS5pZCgpICE9IGJQcm9wZXJ0eS5p
ZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gV2UgY291bGQg
Z2V0IGEgZmV3IG1vcmUgaGl0cyBieSBjb21wYXJpbmcgY3NzVGV4dCgpIGhlcmUsIGJ1dCB0aGF0
IGdldHMgZXhwZW5zaXZlIHF1aWNrbHkuCi0gICAgICAgICAgICBpZiAoYVByb3BlcnR5LnZhbHVl
KCkgIT0gYlByb3BlcnR5LnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGogPT0gcHJvcGVydHlD
b3VudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWlubGluZSBib29sIGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1l
bnQpCi17Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVt
ZW50KGVsZW1lbnQpLT5oYXNEaXJlY3Rpb25BdXRvKCk7Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZl
cjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0
Ci17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLQot
ICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3R5bGUtPnVu
aXF1ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1l
KCkgIT0gbV9lbGVtZW50LT50YWdRTmFtZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgIT0gbV9lbGVtZW50LT5oYXNDbGFzcygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChlbGVtZW50LT5pc1NWR0Vs
ZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCktPmFuaW1hdGVkU01J
TFN0eWxlUHJvcGVydGllcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLSAgICBp
ZiAoISFlbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpICE9ICEhbV9zdHlsZWRFbGVtZW50LT5hdHRy
aWJ1dGVTdHlsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3R5bGVQcm9wZXJ0eVNl
dCogYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQSA9IGVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1
dGVTdHlsZSgpOwotICAgIFN0eWxlUHJvcGVydHlTZXQqIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHls
ZUIgPSBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpOwotICAgIGlm
ICghYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQSAhPSAhYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxl
QikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAhPSBt
X2VsZW1lbnQtPmlzTGluaygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0eWxl
LT5hZmZlY3RlZEJ5VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcnMoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gbV9lbGVtZW50LT5ob3ZlcmVk
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgIT0g
bV9lbGVtZW50LT5hY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVt
ZW50LT5mb2N1c2VkKCkgIT0gbV9lbGVtZW50LT5mb2N1c2VkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSAhPSBtX2VsZW1lbnQtPnNo
YWRvd1BzZXVkb0lkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudCA9
PSBlbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
dHlwZUF0dHIpICE9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVz
OjpsYW5nQXR0cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5n
QXR0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0
dHJpYnV0ZShsYW5nQXR0cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRy
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKHJlYWRvbmx5QXR0cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5
QXR0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0
dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIpICE9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShj
ZWxscGFkZGluZ0F0dHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVu
dC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC0+aWRG
b3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNp
ZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGlmIChlbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5
bGVDaGlsZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShQ
Uk9HUkVTU19UQUcpCi0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7
Ci0gICAgICAgIGlmICghbV9lbGVtZW50LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiB0aGlz
UHJvZ3Jlc3NFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KGVsZW1l
bnQpOwotICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBvdGhlclByb2dyZXNzRWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihtX2VsZW1lbnQpOwotICAgICAgICBp
ZiAodGhpc1Byb2dyZXNzRWxlbWVudC0+aXNEZXRlcm1pbmF0ZSgpICE9IG90aGVyUHJvZ3Jlc3NF
bGVtZW50LT5pc0RldGVybWluYXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQtPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCk7Ci0KLSAgICBpZiAoaXNDb250cm9sICE9IG1fZWxlbWVudC0+aXNG
b3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGlz
Q29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGVsZW1lbnQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkgfHwgc3R5bGUtPmFu
aW1hdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgIC8vIFR1cm4gb2ZmIHN0eWxlIHNoYXJpbmcgZm9yIGVsZW1lbnRz
IHRoYXQgY2FuIGdhaW4gbGF5ZXJzIGZvciByZWFzb25zIG91dHNpZGUgb2YgdGhlIHN0eWxlIHN5
c3RlbS4KLSAgICAvLyBTZWUgY29tbWVudHMgaW4gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSgpLgot
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFn
KQotI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgICAgICAvLyBXaXRoIHBy
b3h5aW5nLCB0aGUgbWVkaWEgZWxlbWVudHMgYXJlIGJhY2tlZCBieSBhIFJlbmRlckVtYmVkZGVk
T2JqZWN0LgotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBlbGVt
ZW50LT5oYXNUYWdOYW1lKGF1ZGlvVGFnKQotI2VuZGlmCi0gICAgICAgICkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi0KLSAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oZWxl
bWVudCkgfHwgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8obV9lbGVtZW50KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgbV9lbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRy
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQtPmF0dHJpYnV0ZVN0
eWxlKCkgJiYgIWF0dHJpYnV0ZVN0eWxlc0VxdWFsKGVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCks
IG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5bGUoKSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVBICYmICFhdHRyaWJ1dGVTdHls
ZXNFcXVhbChhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVBLCBhZGRpdGlvbmFsQXR0cmlidXRlU3R5
bGVCKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQtPmlzTGluaygp
ICYmIG1fZWxlbWVudExpbmtTdGF0ZSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIFN0eWxlZEVsZW1l
bnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5vZGUs
IHVuc2lnbmVkJiBjb3VudCkgY29uc3QKLXsKLSAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUt
PnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRo
RWxlbWVudChzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSkpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGVk
RWxlbWVudCo+KG5vZGUpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgcGFyZW50U3R5bGVQcmV2
ZW50c1NoYXJpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQotewotICAgIHJldHVy
biBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5UG9zaXRpb25hbFJ1bGVzKCkKLSAgICAg
ICAgfHwgcGFyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpCi0g
ICAgICAgIHx8IHBhcmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygp
IAotICAgICAgICB8fCBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNl
bnRSdWxlcygpOwotfQotCi1SZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVk
U3R5bGUoKQotewotICAgIGlmICghbV9zdHlsZWRFbGVtZW50IHx8ICFtX3BhcmVudFN0eWxlKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxl
IGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pbmxpbmVT
dHlsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChtX3N0
eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPiht
X3N0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0jZW5kaWYKLSAgICAvLyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkg
c2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFz
SUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMobV9zdHlsZWRFbGVtZW50LT5p
ZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlm
IChwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhtX3BhcmVudFN0eWxlKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICBpZiAobV9zdHlsZWRFbGVtZW50
LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSNlbmRpZgot
Ci0gICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCi0gICAg
dW5zaWduZWQgY291bnQgPSAwOwotICAgIHVuc2lnbmVkIHZpc2l0ZWROb2RlQ291bnQgPSAwOwot
ICAgIFN0eWxlZEVsZW1lbnQqIHNoYXJlRWxlbWVudCA9IDA7Ci0gICAgTm9kZSogY291c2luTGlz
dCA9IG1fc3R5bGVkRWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgd2hpbGUgKGNvdXNp
bkxpc3QpIHsKLSAgICAgICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJp
bmcoY291c2luTGlzdCwgY291bnQpOwotICAgICAgICBpZiAoc2hhcmVFbGVtZW50KQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNvdXNpbkxpc3QgPSBsb2NhdGVDb3VzaW5MaXN0KGNvdXNp
bkxpc3QtPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5vZGVDb3VudCk7Ci0gICAgfQotCi0gICAg
Ly8gSWYgd2UgaGF2ZSBleGhhdXN0ZWQgYWxsIG91ciBidWRnZXQgb3Igb3VyIGNvdXNpbnMuCi0g
ICAgaWYgKCFzaGFyZUVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gQ2FuJ3Qg
c2hhcmUgaWYgc2libGluZyBydWxlcyBhcHBseS4gVGhpcyBpcyBjaGVja2VkIGF0IHRoZSBlbmQg
YXMgaXQgc2hvdWxkIHJhcmVseSBmYWlsLgotICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3NpYmxp
bmdSdWxlU2V0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLy8gQ2FuJ3Qgc2hhcmUg
aWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgotICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3VuY29t
bW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIC8vIFRy
YWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBU
aGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCi0gICAgaWYg
KHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotfQotCi12b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQotewotICAg
IE1hdGNoaW5nVUFSdWxlc1Njb3BlIHNjb3BlOwotCi0gICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVs
ZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KLSAgICBpZiAoc2ltcGxlRGVmYXVsdFN0eWxl
U2hlZXQpCi0gICAgICAgIHJlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOwotICAgIFJ1bGVTZXQq
IHVzZXJBZ2VudFN0eWxlU2hlZXQgPSBtX21lZGl1bS0+bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygi
cHJpbnQiKQotICAgICAgICA/IGRlZmF1bHRQcmludFN0eWxlIDogZGVmYXVsdFN0eWxlOwotICAg
IG1hdGNoVUFSdWxlcyhyZXN1bHQsIHVzZXJBZ2VudFN0eWxlU2hlZXQpOwotCi0gICAgLy8gSW4g
cXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNo
ZWV0LgotICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSkKLSAgICAgICAgbWF0Y2hV
QVJ1bGVzKHJlc3VsdCwgZGVmYXVsdFF1aXJrc1N0eWxlKTsKLQotICAgIC8vIElmIGRvY3VtZW50
IHVzZXMgdmlldyBzb3VyY2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2
aWV3ZXIgbW9kZSksIHRoZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5
bGUgc2hlZXQuCi0gICAgaWYgKG1fY2hlY2tlci5kb2N1bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSkg
ewotICAgICAgICBpZiAoIWRlZmF1bHRWaWV3U291cmNlU3R5bGUpCi0gICAgICAgICAgICBsb2Fk
Vmlld1NvdXJjZVN0eWxlKCk7Ci0gICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIGRlZmF1bHRW
aWV3U291cmNlU3R5bGUpOwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5
bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQsIENTU0ZvbnRT
ZWxlY3RvciogZm9udFNlbGVjdG9yKQotewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5m
cmFtZSgpOwotCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpOwotICAgIGRvY3VtZW50U3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwot
ICAgIGRvY3VtZW50U3R5bGUtPnNldFJUTE9yZGVyaW5nKGRvY3VtZW50LT52aXN1YWxseU9yZGVy
ZWQoKSA/IFZpc3VhbE9yZGVyIDogTG9naWNhbE9yZGVyKTsKLSAgICBkb2N1bWVudFN0eWxlLT5z
ZXRab29tKGZyYW1lICYmICFkb2N1bWVudC0+cHJpbnRpbmcoKSA/IGZyYW1lLT5wYWdlWm9vbUZh
Y3RvcigpIDogMSk7Ci0gICAgZG9jdW1lbnRTdHlsZS0+c2V0UGFnZVNjYWxlVHJhbnNmb3JtKGZy
YW1lID8gZnJhbWUtPmZyYW1lU2NhbGVGYWN0b3IoKSA6IDEpOwotICAgIGRvY3VtZW50U3R5bGUt
PnNldFVzZXJNb2RpZnkoZG9jdW1lbnQtPmluRGVzaWduTW9kZSgpID8gUkVBRF9XUklURSA6IFJF
QURfT05MWSk7Ci0gICAgZG9jdW1lbnRTdHlsZS0+c2V0TG9jYWxlKGRvY3VtZW50LT5jb250ZW50
TGFuZ3VhZ2UoKSk7Ci0KLSAgICBFbGVtZW50KiBkb2NFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3Vt
ZW50RWxlbWVudCgpOwotICAgIFJlbmRlck9iamVjdCogZG9jRWxlbWVudFJlbmRlcmVyID0gZG9j
RWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlcmVyKCkgOiAwOwotICAgIGlmIChkb2NFbGVtZW50
UmVuZGVyZXIpIHsKLSAgICAgICAgLy8gVXNlIHRoZSBkaXJlY3Rpb24gYW5kIHdyaXRpbmctbW9k
ZSBvZiB0aGUgYm9keSB0byBzZXQgdGhlCi0gICAgICAgIC8vIHZpZXdwb3J0J3MgZGlyZWN0aW9u
IGFuZCB3cml0aW5nLW1vZGUgdW5sZXNzIHRoZSBwcm9wZXJ0eSBpcyBzZXQgb24gdGhlIGRvY3Vt
ZW50IGVsZW1lbnQuCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGJvZHksIHRoZW4gdXNlIHRo
ZSBkb2N1bWVudCBlbGVtZW50LgotICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlSZW5kZXJlciA9
IGRvY3VtZW50LT5ib2R5KCkgPyBkb2N1bWVudC0+Ym9keSgpLT5yZW5kZXJlcigpIDogMDsKLSAg
ICAgICAgaWYgKGJvZHlSZW5kZXJlciAmJiAhZG9jdW1lbnQtPndyaXRpbmdNb2RlU2V0T25Eb2N1
bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFdyaXRpbmdNb2Rl
KGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFdyaXRpbmdNb2RlKGRvY0VsZW1lbnRSZW5kZXJl
ci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Ci0gICAgICAgIGlmIChib2R5UmVuZGVyZXIgJiYg
IWRvY3VtZW50LT5kaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAgICAg
ZG9jdW1lbnRTdHlsZS0+c2V0RGlyZWN0aW9uKGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0
aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXREaXJl
Y3Rpb24oZG9jRWxlbWVudFJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7Ci0gICAgfQot
Ci0gICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2Uo
KSkgewotICAgICAgICAgICAgY29uc3QgUGFnZTo6UGFnaW5hdGlvbiYgcGFnaW5hdGlvbiA9IHBh
Z2UtPnBhZ2luYXRpb24oKTsKLSAgICAgICAgICAgIGlmIChwYWdpbmF0aW9uLm1vZGUgIT0gUGFn
ZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQpIHsKLSAgICAgICAgICAgICAgICBkb2N1bWVudFN0
eWxlLT5zZXRDb2x1bW5BeGlzKHBhZ2luYXRpb24ubW9kZSA9PSBQYWdlOjpQYWdpbmF0aW9uOjpI
b3Jpem9udGFsbHlQYWdpbmF0ZWQgPyBIb3Jpem9udGFsQ29sdW1uQXhpcyA6IFZlcnRpY2FsQ29s
dW1uQXhpcyk7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Q29sdW1uR2FwKHBh
Z2luYXRpb24uZ2FwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFVz
ZVByaW50ZXJGb250KGRvY3VtZW50LT5wcmludGluZygpKTsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oZG9jdW1lbnRTdHls
ZS0+bG9jYWxlKCkpKTsKLSAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNl
dHRpbmdzKCkpIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0
dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHN0YW5kYXJkRm9udCA9IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoZm9udERlc2NyaXB0
aW9uLnNjcmlwdCgpKTsKLSAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRp
b246OlN0YW5kYXJkRmFtaWx5KTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZh
bWlseSgpLnNldEZhbWlseShzdGFuZGFyZEZvbnQpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwotICAgICAgICB9Ci0gICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhT
bWFsbCArIDEpOwotICAgICAgICBpbnQgc2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9y
S2V5d29yZChkb2N1bWVudCwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKTsKLSAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgICAgIGJvb2wgdXNlU1ZHWm9v
bVJ1bGVzID0gZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKTsKLSAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3Bl
Y2lmaWVkU2l6ZShkb2N1bWVudCwgZG9jdW1lbnRTdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9u
LmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcykpOwotICAgIH0KLQotICAg
IGRvY3VtZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAg
IGRvY3VtZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKLQotICAgIHJldHVy
biBkb2N1bWVudFN0eWxlLnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzQXRT
aGFkb3dCb3VuZGFyeShFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmICghZWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSBlbGVt
ZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgcmV0dXJuIHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+
aXNTaGFkb3dSb290KCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTdHlsZSogZGVmYXVs
dFBhcmVudCwKLSAgICBTdHlsZVNoYXJpbmdCZWhhdmlvciBzaGFyaW5nQmVoYXZpb3IsIFJ1bGVN
YXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9y
U3R5bGluZykKLXsKLSAgICAvLyBPbmNlIGFuIGVsZW1lbnQgaGFzIGEgcmVuZGVyZXIsIHdlIGRv
bid0IHRyeSB0byBkZXN0cm95IGl0LCBzaW5jZSBvdGhlcndpc2UgdGhlIHJlbmRlcmVyCi0gICAg
Ly8gd2lsbCB2YW5pc2ggaWYgYSBzdHlsZSByZWNhbGMgaGFwcGVucyBkdXJpbmcgbG9hZGluZy4K
LSAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFlbGVtZW50
LT5kb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiAhZWxlbWVudC0+cmVuZGVy
ZXIoKSkgewotICAgICAgICBpZiAoIXNfc3R5bGVOb3RZZXRBdmFpbGFibGUpIHsKLSAgICAgICAg
ICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCkubGVha1Jl
ZigpOwotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+c2V0RGlzcGxheShOT05F
KTsKLSAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPmZvbnQoKS51cGRhdGUobV9m
b250U2VsZWN0b3IpOwotICAgICAgICB9Ci0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnNl
dEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIHNfc3R5bGVO
b3RZZXRBdmFpbGFibGU7Ci0gICAgfQotCi0gICAgaW5pdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAg
aW5pdEZvclN0eWxlUmVzb2x2ZShlbGVtZW50LCBkZWZhdWx0UGFyZW50KTsKLSAgICBtX3JlZ2lv
bkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHlsaW5nOwotICAgIGlmIChzaGFyaW5nQmVoYXZpb3Ig
PT0gQWxsb3dTdHlsZVNoYXJpbmcpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxl
ID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKLSAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQotICAgICAg
ICAgICAgcmV0dXJuIHNoYXJlZFN0eWxlOwotICAgIH0KLQotICAgIG1fc3R5bGUgPSBSZW5kZXJT
dHlsZTo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAobV9wYXJlbnRTdHlsZSkKLSAgICAgICAgbV9zdHls
ZS0+aW5oZXJpdEZyb20obV9wYXJlbnRTdHlsZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fcGFy
ZW50U3R5bGUgPSBzdHlsZSgpOwotICAgICAgICAvLyBNYWtlIHN1cmUgb3VyIGZvbnRzIGFyZSBp
bml0aWFsaXplZCBpZiB3ZSBkb24ndCBpbmhlcml0IHRoZW0gZnJvbSBvdXIgcGFyZW50IHN0eWxl
LgotICAgICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKDApOwotICAgIH0KLQotICAgIC8vIEV2
ZW4gaWYgc3Vycm91bmRpbmcgY29udGVudCBpcyB1c2VyLWVkaXRhYmxlLCBzaGFkb3cgRE9NIHNo
b3VsZCBhY3QgYXMgYSBzaW5nbGUgdW5pdCwgYW5kIG5vdCBuZWNlc3NhcmlseSBiZSBlZGl0YWJs
ZQotICAgIGlmIChpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpCi0gICAgICAgIG1fc3R5bGUt
PnNldFVzZXJNb2RpZnkoUmVuZGVyU3R5bGU6OmluaXRpYWxVc2VyTW9kaWZ5KCkpOwotCi0gICAg
aWYgKGVsZW1lbnQtPmlzTGluaygpKSB7Ci0gICAgICAgIG1fc3R5bGUtPnNldElzTGluayh0cnVl
KTsKLSAgICAgICAgbV9zdHlsZS0+c2V0SW5zaWRlTGluayhtX2VsZW1lbnRMaW5rU3RhdGUpOwot
ICAgIH0KLQotICAgIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxlbWVudCk7
Ci0KLSAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKLSAgICBpZiAobWF0Y2hpbmdCZWhhdmlv
ciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKG1hdGNo
UmVzdWx0KTsKLSAgICBlbHNlCi0gICAgICAgIG1hdGNoQWxsUnVsZXMobWF0Y2hSZXN1bHQpOwot
Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCk7Ci0KLSAgICAvLyBDbGVh
biB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1v
bmcgb3RoZXIgZml4dXBzKS4KLSAgICBhZGp1c3RSZW5kZXJTdHlsZShzdHlsZSgpLCBtX3BhcmVu
dFN0eWxlLCBlbGVtZW50KTsKLQotICAgIGluaXRFbGVtZW50KDApOyAvLyBDbGVhciBvdXQgZm9y
IHRoZSBuZXh0IHJlc29sdmUuCi0KLSAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICBy
ZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRT
dHlsZSwgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZy
YW1lVmFsdWUpCi17Ci0gICAgTWF0Y2hSZXN1bHQgcmVzdWx0OwotICAgIGlmIChrZXlmcmFtZS0+
cHJvcGVydGllcygpKQotICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIGtleWZy
YW1lLT5wcm9wZXJ0aWVzKCkpOwotCi0gICAgQVNTRVJUKCFtX3N0eWxlKTsKLQotICAgIC8vIENy
ZWF0ZSB0aGUgc3R5bGUKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRT
dHlsZSk7Ci0KLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0KLSAgICAvLyBXZSBkb24ndCBu
ZWVkIHRvIGJvdGhlciB3aXRoICFpbXBvcnRhbnQuIFNpbmNlIHRoZXJlIGlzIG9ubHkgZXZlciBv
bmUKLSAgICAvLyBkZWNsLCB0aGVyZSdzIG5vdGhpbmcgdG8gb3ZlcnJpZGUuIFNvIGp1c3QgYWRk
IHRoZSBmaXJzdCBwcm9wZXJ0aWVzLgotICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwot
ICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzPHRydWU+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKLQotICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0
aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KCk7Ci0KLSAg
ICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRo
ZSBmb250LXNpemUKLSAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7Ci0KLSAgICAv
LyBOb3cgZG8gcmVzdCBvZiB0aGUgcHJvcGVydGllcy4KLSAgICBpZiAoa2V5ZnJhbWUtPnByb3Bl
cnRpZXMoKSkKLSAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4ocmVzdWx0LCBm
YWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9u
bHkpOwotCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRoZSBub24t
ZXNzZW50aWFsIGZvbnQgcHJvcHMsCi0gICAgLy8gZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBhIHNl
Y29uZCB0aW1lLgotICAgIHVwZGF0ZUZvbnQoKTsKLQotICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1h
Z2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ0ltYWdlcygpOwot
ICAgIAotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBz
aGFkZXJzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1NoYWRlcnMo
KTsKLSNlbmRpZgotCi0gICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3BlcnRpZXMgdG8g
dGhlIGtleWZyYW1lLgotICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0aW9u
ID0ga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkgewotICAgICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNv
dW50ID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlDb3VudCgpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5ID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlBdChpKS5pZCgp
OwotICAgICAgICAgICAgLy8gVGltaW5nLWZ1bmN0aW9uIHdpdGhpbiBrZXlmcmFtZXMgaXMgc3Bl
Y2lhbCwgYmVjYXVzZSBpdCBpcyBub3QgYW5pbWF0ZWQ7IGl0IGp1c3QKLSAgICAgICAgICAgIC8v
IGRlc2NyaWJlcyB0aGUgdGltaW5nIGZ1bmN0aW9uIGJldHdlZW4gdGhpcyBrZXlmcmFtZSBhbmQg
dGhlIG5leHQuCi0gICAgICAgICAgICBpZiAocHJvcGVydHkgIT0gQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25UaW1pbmdGdW5jdGlvbikKLSAgICAgICAgICAgICAgICBrZXlmcmFtZVZhbHVlLmFk
ZFByb3BlcnR5KHByb3BlcnR5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtX3N0
eWxlLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0Zv
ckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBL
ZXlmcmFtZUxpc3QmIGxpc3QpCi17Ci0gICAgbGlzdC5jbGVhcigpOwotCi0gICAgLy8gR2V0IHRo
ZSBrZXlmcmFtZXNSdWxlIGZvciB0aGlzIG5hbWUKLSAgICBpZiAoIWUgfHwgbGlzdC5hbmltYXRp
b25OYW1lKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2tleWZyYW1lc1J1
bGVNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgS2V5ZnJhbWVzUnVsZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX2tleWZyYW1lc1J1bGVNYXAuZmluZChsaXN0LmFuaW1hdGlvbk5hbWUoKS5pbXBs
KCkpOwotICAgIGlmIChpdCA9PSBtX2tleWZyYW1lc1J1bGVNYXAuZW5kKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyoga2V5ZnJhbWVzUnVsZSA9IGl0
LT5zZWNvbmQuZ2V0KCk7Ci0KLSAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHls
ZSBmb3IgZWFjaCBrZXlmcmFtZQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICAvLyBB
cHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2
ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQKLSAgICAgICAgaW5pdEVsZW1l
bnQoZSk7Ci0gICAgICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSk7Ci0KLSAgICAgICAgY29uc3Qg
U3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUgPSBrZXlmcmFtZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAg
S2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVl
LnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBrZXlmcmFtZSwga2V5ZnJh
bWVWYWx1ZSkpOwotCi0gICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHN0eWxlIHRvIGFsbCB0
aGUgaW5kaWNhdGVkIGtleSB0aW1lcwotICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtleXM7Ci0gICAg
ICAgIGtleWZyYW1lLT5nZXRLZXlzKGtleXMpOwotICAgICAgICBmb3IgKHNpemVfdCBrZXlJbmRl
eCA9IDA7IGtleUluZGV4IDwga2V5cy5zaXplKCk7ICsra2V5SW5kZXgpIHsKLSAgICAgICAgICAg
IGtleWZyYW1lVmFsdWUuc2V0S2V5KGtleXNba2V5SW5kZXhdKTsKLSAgICAgICAgICAgIGxpc3Qu
aW5zZXJ0KGtleWZyYW1lVmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhl
IDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBpdCAoYnV0IG9ubHkgaWYgdGhlcmUgaXMg
YXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQotICAgIGludCBpbml0aWFsTGlzdFNpemUgPSBs
aXN0LnNpemUoKTsKLSAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiBsaXN0WzBdLmtleSgp
ICE9IDApIHsKLSAgICAgICAgc3RhdGljIFN0eWxlS2V5ZnJhbWUqIHplcm9QZXJjZW50S2V5ZnJh
bWU7Ci0gICAgICAgIGlmICghemVyb1BlcmNlbnRLZXlmcmFtZSkgewotICAgICAgICAgICAgemVy
b1BlcmNlbnRLZXlmcmFtZSA9IFN0eWxlS2V5ZnJhbWU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAg
ICAgICAgICAgIHplcm9QZXJjZW50S2V5ZnJhbWUtPnNldEtleVRleHQoIjAlIik7Ci0gICAgICAg
IH0KLSAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDApOwotICAgICAgICBr
ZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCB6ZXJv
UGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7Ci0gICAgICAgIGxpc3QuaW5zZXJ0KGtl
eWZyYW1lVmFsdWUpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSAxMDAlIGtleWZyYW1lIGlzIG1p
c3NpbmcsIGNyZWF0ZSBpdCAoYnV0IG9ubHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVy
IGtleWZyYW1lKQotICAgIGlmIChpbml0aWFsTGlzdFNpemUgPiAwICYmIChsaXN0W2xpc3Quc2l6
ZSgpIC0gMV0ua2V5KCkgIT0gMSkpIHsKLSAgICAgICAgc3RhdGljIFN0eWxlS2V5ZnJhbWUqIGh1
bmRyZWRQZXJjZW50S2V5ZnJhbWU7Ci0gICAgICAgIGlmICghaHVuZHJlZFBlcmNlbnRLZXlmcmFt
ZSkgewotICAgICAgICAgICAgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSA9IFN0eWxlS2V5ZnJhbWU6
OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICAgICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUt
PnNldEtleVRleHQoIjEwMCUiKTsKLSAgICAgICAgfQotICAgICAgICBLZXlmcmFtZVZhbHVlIGtl
eWZyYW1lVmFsdWUoMSwgMCk7Ci0gICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVG
b3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1l
VmFsdWUpKTsKLSAgICAgICAgbGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1ZSk7Ci0gICAgfQotfQot
Ci1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVs
ZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUpCi17Ci0gICAgaWYgKCFlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGluaXRFbGVtZW50
KGUpOwotCi0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsK
LSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotCi0gICAgaWYgKG1fcGFyZW50
U3R5bGUpCi0gICAgICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUpOwotCi0g
ICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3VyIHF1
aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZwotICAg
IC8vIHRob3NlIHJ1bGVzLgotCi0gICAgLy8gQ2hlY2sgVUEsIHVzZXIgYW5kIGF1dGhvciBydWxl
cy4KLSAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKLSAgICBtYXRjaFVBUnVsZXMobWF0Y2hS
ZXN1bHQpOwotCi0gICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7Ci0gICAgICAg
IG1hdGNoVXNlclJ1bGVzKG1hdGNoUmVzdWx0LCBmYWxzZSk7Ci0gICAgICAgIG1hdGNoQXV0aG9y
UnVsZXMobWF0Y2hSZXN1bHQsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAobWF0Y2hSZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIG1f
c3R5bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8pOwotCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
cyhtYXRjaFJlc3VsdCk7Ci0KLSAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlz
cGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KLSAgICBhZGp1
c3RSZW5kZXJTdHlsZShzdHlsZSgpLCBwYXJlbnRTdHlsZSwgMCk7Ci0KLSAgICAvLyBTdGFydCBs
b2FkaW5nIGltYWdlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdJ
bWFnZXMoKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAvLyBTdGFydCBsb2FkaW5n
IHRoZSBzaGFkZXJzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1No
YWRlcnMoKTsKLSNlbmRpZgotCi0gICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0
dXJuIG1fc3R5bGUucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKLXsKLSAgICBpbml0Rm9yU3R5
bGVSZXNvbHZlKG1fY2hlY2tlci5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1f
cm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCi0KLSAg
ICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRG
cm9tKG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0KLSAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVm
dFBhZ2UocGFnZUluZGV4KTsKLSAgICBjb25zdCBib29sIGlzRmlyc3QgPSBpc0ZpcnN0UGFnZShw
YWdlSW5kZXgpOwotICAgIGNvbnN0IFN0cmluZyBwYWdlID0gcGFnZU5hbWUocGFnZUluZGV4KTsK
LSAgICAKLSAgICBNYXRjaFJlc3VsdCByZXN1bHQ7Ci0gICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0
LCBkZWZhdWx0UHJpbnRTdHlsZSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtYXRjaFBh
Z2VSdWxlcyhyZXN1bHQsIG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2Up
OwotICAgIC8vIE9ubHkgY29uc2lkZXIgdGhlIGdsb2JhbCBhdXRob3IgUnVsZVNldCBmb3IgQHBh
Z2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KLSAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1
bHQsIG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbV9s
aW5lSGVpZ2h0VmFsdWUgPSAwOwotICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwotICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8dHJ1ZT4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwotCi0gICAgLy8gSWYg
b3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVw
ZGF0ZUZvbnQoKTsKLQotICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJl
IHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KLSAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUp
Ci0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWln
aHRWYWx1ZSk7Ci0KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihyZXN1bHQsIGZh
bHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25s
eSk7Ci0KLSAgICAvLyBTdGFydCBsb2FkaW5nIGltYWdlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5
bGUuCi0gICAgbG9hZFBlbmRpbmdJbWFnZXMoKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
LSAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHls
ZS4KLSAgICBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKLSNlbmRpZgotCi0gICAgLy8gTm93IHJldHVy
biB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOwotfQotCi1zdGF0aWMg
dm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICAvLyBJ
bnRyaW5zaWMgbWFyZ2luIHZhbHVlLgotICAgIGNvbnN0IGludCBpbnRyaW5zaWNNYXJnaW4gPSAy
ICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIC8vIEZJWE1FOiBVc2luZyB3aWR0aC9o
ZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4td2lkdGgvbWF4LXdpZHRo
IGlzIGZsYXdlZC4KLSAgICAvLyBGSVhNRTogVXNpbmcgInF1aXJrIiB0byBkZWNpZGUgdGhlIG1h
cmdpbiB3YXNuJ3Qgc2V0IGlzIGtpbmQgb2YgbGFtZS4KLSAgICBpZiAoc3R5bGUtPndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSkgewotICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkxlZnQoKS5x
dWlyaygpKQotICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpbkxlZnQoTGVuZ3RoKGludHJpbnNp
Y01hcmdpbiwgRml4ZWQpKTsKLSAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5SaWdodCgpLnF1aXJr
KCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luUmlnaHQoTGVuZ3RoKGludHJpbnNpY01h
cmdpbiwgRml4ZWQpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KSB7Ci0gICAgICAgIGlmIChzdHlsZS0+bWFyZ2luVG9wKCkucXVpcmsoKSkKLSAgICAgICAgICAg
IHN0eWxlLT5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKLSAg
ICAgICAgaWYgKHN0eWxlLT5tYXJnaW5Cb3R0b20oKS5xdWlyaygpKQotICAgICAgICAgICAgc3R5
bGUtPnNldE1hcmdpbkJvdHRvbShMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOwotICAg
IH0KLX0KLQotc3RhdGljIEVEaXNwbGF5IGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoRURpc3BsYXkg
ZGlzcGxheSwgYm9vbCBpc0Zsb2F0aW5nLCBib29sIHN0cmljdFBhcnNpbmcpCi17Ci0gICAgc3dp
dGNoIChkaXNwbGF5KSB7Ci0gICAgY2FzZSBCTE9DSzoKLSAgICBjYXNlIFRBQkxFOgotICAgIGNh
c2UgQk9YOgotICAgIGNhc2UgRkxFWEJPWDoKLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQot
ICAgIGNhc2UgR1JJRDoKLSNlbmRpZgotICAgICAgICByZXR1cm4gZGlzcGxheTsKLQotICAgIGNh
c2UgTElTVF9JVEVNOgotICAgICAgICAvLyBJdCBpcyBhIFdpbklFIGJ1ZyB0aGF0IGZsb2F0ZWQg
bGlzdCBpdGVtcyBsb3NlIHRoZWlyIGJ1bGxldHMsIHNvIHdlJ2xsIGVtdWxhdGUgdGhlIHF1aXJr
LCBidXQgb25seSBpbiBxdWlya3MgbW9kZS4KLSAgICAgICAgaWYgKCFzdHJpY3RQYXJzaW5nICYm
IGlzRmxvYXRpbmcpCi0gICAgICAgICAgICByZXR1cm4gQkxPQ0s7Ci0gICAgICAgIHJldHVybiBk
aXNwbGF5OwotICAgIGNhc2UgSU5MSU5FX1RBQkxFOgotICAgICAgICByZXR1cm4gVEFCTEU7Ci0g
ICAgY2FzZSBJTkxJTkVfQk9YOgotICAgICAgICByZXR1cm4gQk9YOwotICAgIGNhc2UgSU5MSU5F
X0ZMRVhCT1g6Ci0gICAgICAgIHJldHVybiBGTEVYQk9YOwotI2lmIEVOQUJMRShDU1NfR1JJRF9M
QVlPVVQpCi0gICAgY2FzZSBJTkxJTkVfR1JJRDoKLSAgICAgICAgcmV0dXJuIEdSSUQ7Ci0jZW5k
aWYKLQotICAgIGNhc2UgSU5MSU5FOgotICAgIGNhc2UgUlVOX0lOOgotICAgIGNhc2UgQ09NUEFD
VDoKLSAgICBjYXNlIElOTElORV9CTE9DSzoKLSAgICBjYXNlIFRBQkxFX1JPV19HUk9VUDoKLSAg
ICBjYXNlIFRBQkxFX0hFQURFUl9HUk9VUDoKLSAgICBjYXNlIFRBQkxFX0ZPT1RFUl9HUk9VUDoK
LSAgICBjYXNlIFRBQkxFX1JPVzoKLSAgICBjYXNlIFRBQkxFX0NPTFVNTl9HUk9VUDoKLSAgICBj
YXNlIFRBQkxFX0NPTFVNTjoKLSAgICBjYXNlIFRBQkxFX0NFTEw6Ci0gICAgY2FzZSBUQUJMRV9D
QVBUSU9OOgotICAgICAgICByZXR1cm4gQkxPQ0s7Ci0gICAgY2FzZSBOT05FOgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIE5PTkU7Ci0gICAgfQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBCTE9DSzsKLX0KLQotdm9pZCBTdHlsZVJl
c29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSwgRWxlbWVudCAqZSkKLXsKLSAgICAvLyBDYWNoZSBvdXIgb3JpZ2luYWwg
ZGlzcGxheS4KLSAgICBzdHlsZS0+c2V0T3JpZ2luYWxEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCkp
OwotCi0gICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgIT0gTk9ORSkgewotICAgICAgICAvLyBJZiB3
ZSBoYXZlIGEgPHRkPiB0aGF0IHNwZWNpZmllcyBhIGZsb2F0IHByb3BlcnR5LCBpbiBxdWlya3Mg
bW9kZSB3ZSBqdXN0IGRyb3AgdGhlIGZsb2F0Ci0gICAgICAgIC8vIHByb3BlcnR5LgotICAgICAg
ICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVzZSBkaXNwbGF5OmlubGluZS9ibG9jayBvbiA8dGQ+
cyBhbmQgPHRhYmxlPnMuICBJbiBxdWlya3MgbW9kZSB3ZSBmb3JjZQotICAgICAgICAvLyB0aGVz
ZSB0YWdzIHRvIHJldGFpbiB0aGVpciBkaXNwbGF5IHR5cGVzLgotICAgICAgICBpZiAoIW1fY2hl
Y2tlci5zdHJpY3RQYXJzaW5nKCkgJiYgZSkgewotICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05h
bWUodGRUYWcpKSB7Ci0gICAgICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VM
TCk7Ci0gICAgICAgICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCi0g
ICAgICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoc3R5bGUtPmlzRGlzcGxheUlubGluZVR5
cGUoKSA/IElOTElORV9UQUJMRSA6IFRBQkxFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChl
ICYmIChlLT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBlLT5oYXNUYWdOYW1lKHRoVGFnKSkpIHsKLSAg
ICAgICAgICAgIGlmIChzdHlsZS0+d2hpdGVTcGFjZSgpID09IEtIVE1MX05PV1JBUCkgewotICAg
ICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgYXJlIHJlYWxseSBub3dyYXBwaW5nIG9y
IGlmIHdlIHNob3VsZCBqdXN0Ci0gICAgICAgICAgICAgICAgLy8gdXNlIG5vcm1hbCBpbnN0ZWFk
LiAgSWYgdGhlIHdpZHRoIG9mIHRoZSBjZWxsIGlzIGZpeGVkLCB0aGVuCi0gICAgICAgICAgICAg
ICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIE5PV1JBUC4KLSAgICAgICAgICAgICAgICBpZiAo
c3R5bGUtPndpZHRoKCkuaXNGaXhlZCgpKQotICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0
V2hpdGVTcGFjZShOT1JNQUwpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoTk9XUkFQKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIFRhYmxlcyBuZXZlciBzdXBwb3J0IHRoZSAtd2Via2l0LSogdmFs
dWVzIGZvciB0ZXh0LWFsaWduIGFuZCB3aWxsIHJlc2V0IGJhY2sgdG8gdGhlIGRlZmF1bHQuCi0g
ICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUodGFibGVUYWcpICYmIChzdHlsZS0+dGV4dEFs
aWduKCkgPT0gV0VCS0lUX0xFRlQgfHwgc3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9DRU5U
RVIgfHwgc3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9SSUdIVCkpCi0gICAgICAgICAgICBz
dHlsZS0+c2V0VGV4dEFsaWduKFRBQVVUTyk7Ci0KLSAgICAgICAgLy8gRnJhbWVzIGFuZCBmcmFt
ZXNldHMgbmV2ZXIgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9zaXRpb246YWJzb2x1dGUu
ICBUaGlzIGlzIG5lY2Vzc2FyeSB0bwotICAgICAgICAvLyBmaXggYSBjcmFzaCB3aGVyZSBhIHNp
dGUgdHJpZXMgdG8gcG9zaXRpb24gdGhlc2Ugb2JqZWN0cy4gIFRoZXkgYWxzbyBuZXZlciBob25v
ciBkaXNwbGF5LgotICAgICAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwg
ZS0+aGFzVGFnTmFtZShmcmFtZXNldFRhZykpKSB7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UG9z
aXRpb24oU3RhdGljUG9zaXRpb24pOwotICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxP
Q0spOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUnVieSB0ZXh0IGRvZXMgbm90IHN1cHBvcnQg
ZmxvYXQgb3IgcG9zaXRpb24uIFRoaXMgbWlnaHQgY2hhbmdlIHdpdGggZXZvbHV0aW9uIG9mIHRo
ZSBzcGVjaWZpY2F0aW9uLgotICAgICAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKHJ0VGFnKSkg
ewotICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKLSAgICAg
ICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhOb0Zsb2F0KTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFRhYmxlIGhlYWRlcnMgd2l0aCBhIHRleHQtYWxpZ24gb2YgYXV0byB3aWxsIGNoYW5nZSB0
aGUgdGV4dC1hbGlnbiB0byBjZW50ZXIuCi0gICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUo
dGhUYWcpICYmIHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCi0gICAgICAgICAgICBzdHls
ZS0+c2V0VGV4dEFsaWduKENFTlRFUik7Ci0KLSAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFt
ZShsZWdlbmRUYWcpKQotICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwotCi0g
ICAgICAgIC8vIEFic29sdXRlL2ZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMsIGZsb2F0aW5nIGVs
ZW1lbnRzIGFuZCB0aGUgZG9jdW1lbnQgZWxlbWVudCBuZWVkIGJsb2NrLWxpa2Ugb3V0c2lkZSBk
aXNwbGF5LgotICAgICAgICBpZiAoc3R5bGUtPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlv
biB8fCBzdHlsZS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uIHx8IHN0eWxlLT5pc0Zsb2F0
aW5nKCkgfHwgKGUgJiYgZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkpCi0g
ICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxl
LT5kaXNwbGF5KCksIHN0eWxlLT5pc0Zsb2F0aW5nKCksIG1fY2hlY2tlci5zdHJpY3RQYXJzaW5n
KCkpKTsKLQotICAgICAgICAvLyBGSVhNRTogRG9uJ3Qgc3VwcG9ydCB0aGlzIG11dGF0aW9uIGZv
ciBwc2V1ZG8gc3R5bGVzIGxpa2UgZmlyc3QtbGV0dGVyIG9yIGZpcnN0LWxpbmUsIHNpbmNlIGl0
J3Mgbm90IGNvbXBsZXRlbHkKLSAgICAgICAgLy8gY2xlYXIgaG93IHRoYXQgc2hvdWxkIHdvcmsu
Ci0gICAgICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IElOTElORSAmJiBzdHlsZS0+c3R5bGVU
eXBlKCkgPT0gTk9QU0VVRE8gJiYgcGFyZW50U3R5bGUgJiYgc3R5bGUtPndyaXRpbmdNb2RlKCkg
IT0gcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0RGlz
cGxheShJTkxJTkVfQkxPQ0spOwotCi0gICAgICAgIC8vIEFmdGVyIHBlcmZvcm1pbmcgdGhlIGRp
c3BsYXkgbXV0YXRpb24sIGNoZWNrIHRhYmxlIHJvd3MuICBXZSBkbyBub3QgaG9ub3IgcG9zaXRp
b246cmVsYXRpdmUgb24KLSAgICAgICAgLy8gdGFibGUgcm93cyBvciBjZWxscy4gIFRoaXMgaGFz
IGJlZW4gZXN0YWJsaXNoZWQgaW4gQ1NTMi4xIChhbmQgY2F1c2VkIGEgY3Jhc2ggaW4gY29udGFp
bmluZ0Jsb2NrKCkKLSAgICAgICAgLy8gb24gc29tZSBzaXRlcykuCi0gICAgICAgIGlmICgoc3R5
bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9IRUFERVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9
PSBUQUJMRV9ST1dfR1JPVVAKLSAgICAgICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRB
QkxFX0ZPT1RFUl9HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVykgJiYKLSAg
ICAgICAgICAgICBzdHlsZS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKQotICAgICAg
ICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKLQotICAgICAgICAvLyB3
cml0aW5nLW1vZGUgZG9lcyBub3QgYXBwbHkgdG8gdGFibGUgcm93IGdyb3VwcywgdGFibGUgY29s
dW1uIGdyb3VwcywgdGFibGUgcm93cywgYW5kIHRhYmxlIGNvbHVtbnMuCi0gICAgICAgIC8vIEZJ
WE1FOiBUYWJsZSBjZWxscyBzaG91bGQgYmUgYWxsb3dlZCB0byBiZSBwZXJwZW5kaWN1bGFyIG9y
IGZsaXBwZWQgd2l0aCByZXNwZWN0IHRvIHRoZSB0YWJsZSwgdGhvdWdoLgotICAgICAgICBpZiAo
c3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9DT0xVTU4gfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBU
QUJMRV9DT0xVTU5fR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9GT09URVJfR1JP
VVAKLSAgICAgICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfSEVBREVSX0dST1VQ
IHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0g
VEFCTEVfUk9XX0dST1VQCi0gICAgICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxF
X0NFTEwpCi0gICAgICAgICAgICBzdHlsZS0+c2V0V3JpdGluZ01vZGUocGFyZW50U3R5bGUtPndy
aXRpbmdNb2RlKCkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBkb24ndCBzdXBwb3J0
IGJsb2NrLWZsb3cgb24gZmxleGlibGUgYm94ZXMgeWV0LCBkaXNhbGxvdyBzZXR0aW5nCi0gICAg
ICAgIC8vIG9mIGJsb2NrLWZsb3cgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBUb3BUb0JvdHRvbVdy
aXRpbmdNb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDY0MTggLSBGbGV4aWJsZSBib3ggc3VwcG9ydC4KLSAgICAgICAgaWYgKHN0eWxlLT53
cml0aW5nTW9kZSgpICE9IFRvcFRvQm90dG9tV3JpdGluZ01vZGUgJiYgKHN0eWxlLT5kaXNwbGF5
KCkgPT0gQk9YIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JPWCkpCi0gICAgICAgICAg
ICBzdHlsZS0+c2V0V3JpdGluZ01vZGUoVG9wVG9Cb3R0b21Xcml0aW5nTW9kZSk7Ci0gICAgfQot
Ci0gICAgLy8gTWFrZSBzdXJlIG91ciB6LWluZGV4IHZhbHVlIGlzIG9ubHkgYXBwbGllZCBpZiB0
aGUgb2JqZWN0IGlzIHBvc2l0aW9uZWQuCi0gICAgaWYgKHN0eWxlLT5wb3NpdGlvbigpID09IFN0
YXRpY1Bvc2l0aW9uKQotICAgICAgICBzdHlsZS0+c2V0SGFzQXV0b1pJbmRleCgpOwotCi0gICAg
Ly8gQXV0byB6LWluZGV4IGJlY29tZXMgMCBmb3IgdGhlIHJvb3QgZWxlbWVudCBhbmQgdHJhbnNw
YXJlbnQgb2JqZWN0cy4gIFRoaXMgcHJldmVudHMKLSAgICAvLyBjYXNlcyB3aGVyZSBvYmplY3Rz
IHRoYXQgc2hvdWxkIGJlIGJsZW5kZWQgYXMgYSBzaW5nbGUgdW5pdCBlbmQgdXAgd2l0aCBhIG5v
bi10cmFuc3BhcmVudAotICAgIC8vIG9iamVjdCB3ZWRnZWQgaW4gYmV0d2VlbiB0aGVtLiAgQXV0
byB6LWluZGV4IGFsc28gYmVjb21lcyAwIGZvciBvYmplY3RzIHRoYXQgc3BlY2lmeSB0cmFuc2Zv
cm1zL21hc2tzL3JlZmxlY3Rpb25zLgotICAgIGlmIChzdHlsZS0+aGFzQXV0b1pJbmRleCgpICYm
ICgoZSAmJiBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSBlKSB8fCBzdHlsZS0+
b3BhY2l0eSgpIDwgMS4wZgotICAgICAgICB8fCBzdHlsZS0+aGFzVHJhbnNmb3JtUmVsYXRlZFBy
b3BlcnR5KCkgfHwgc3R5bGUtPmhhc01hc2soKSB8fCBzdHlsZS0+Ym94UmVmbGVjdCgpIHx8IHN0
eWxlLT5oYXNGaWx0ZXIoKQotI2lmZGVmIEZJWEVEX1BPU0lUSU9OX0NSRUFURVNfU1RBQ0tJTkdf
Q09OVEVYVAotICAgICAgICB8fCBzdHlsZS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uCi0j
ZW5kaWYKLSNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HKQotICAgICAgICAvLyBUb3VjaCBv
dmVyZmxvdyBzY3JvbGxpbmcgY3JlYXRlcyBhIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgIHx8
IHN0eWxlLT51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkKLSNlbmRpZgotICAgICAgICApKQot
ICAgICAgICBzdHlsZS0+c2V0WkluZGV4KDApOwotCi0gICAgLy8gVGV4dGFyZWEgY29uc2lkZXJz
IG92ZXJmbG93IHZpc2libGUgYXMgYXV0by4KLSAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKHRl
eHRhcmVhVGFnKSkgewotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKHN0eWxlLT5vdmVyZmxv
d1goKSA9PSBPVklTSUJMRSA/IE9BVVRPIDogc3R5bGUtPm92ZXJmbG93WCgpKTsKLSAgICAgICAg
c3R5bGUtPnNldE92ZXJmbG93WShzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUgPyBPQVVU
TyA6IHN0eWxlLT5vdmVyZmxvd1koKSk7Ci0gICAgfQotCi0gICAgLy8gRmluYWxseSB1cGRhdGUg
b3VyIHRleHQgZGVjb3JhdGlvbnMgaW4gZWZmZWN0LCBidXQgZG9uJ3QgYWxsb3cgdGV4dC1kZWNv
cmF0aW9uIHRvIHBlcmNvbGF0ZSB0aHJvdWdoCi0gICAgLy8gdGFibGVzLCBpbmxpbmUgYmxvY2tz
LCBpbmxpbmUgdGFibGVzLCBydW4taW5zLCBvciBzaGFkb3cgRE9NLgotICAgIGlmIChzdHlsZS0+
ZGlzcGxheSgpID09IFRBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFIHx8
IHN0eWxlLT5kaXNwbGF5KCkgPT0gUlVOX0lOCi0gICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkg
PT0gSU5MSU5FX0JMT0NLIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JPWCB8fCBpc0F0
U2hhZG93Qm91bmRhcnkoZSkpCi0gICAgICAgIHN0eWxlLT5zZXRUZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdChzdHlsZS0+dGV4dERlY29yYXRpb24oKSk7Ci0gICAgZWxzZQotICAgICAgICBzdHlsZS0+
YWRkVG9UZXh0RGVjb3JhdGlvbnNJbkVmZmVjdChzdHlsZS0+dGV4dERlY29yYXRpb24oKSk7Ci0K
LSAgICAvLyBJZiBlaXRoZXIgb3ZlcmZsb3cgdmFsdWUgaXMgbm90IHZpc2libGUsIGNoYW5nZSB0
byBhdXRvLgotICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT01BUlFVRUUgJiYgc3R5bGUt
Pm92ZXJmbG93WSgpICE9IE9NQVJRVUVFKQotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9N
QVJRVUVFKTsKLSAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT01BUlFVRUUgJiYg
c3R5bGUtPm92ZXJmbG93WCgpICE9IE9NQVJRVUVFKQotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZs
b3dYKE9NQVJRVUVFKTsKLSAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT1ZJU0lC
TEUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9WSVNJQkxFKQotICAgICAgICBzdHlsZS0+c2V0
T3ZlcmZsb3dYKE9BVVRPKTsKLSAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1ZJ
U0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFKQotICAgICAgICBzdHlsZS0+
c2V0T3ZlcmZsb3dZKE9BVVRPKTsKLQotICAgIC8vIFRhYmxlIHJvd3MsIHNlY3Rpb25zIGFuZCB0
aGUgdGFibGUgaXRzZWxmIHdpbGwgc3VwcG9ydCBvdmVyZmxvdzpoaWRkZW4gYW5kIHdpbGwgaWdu
b3JlIHNjcm9sbC9hdXRvLgotICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHRhYmxlIHNlY3Rpb25z
IHdpbGwgc3VwcG9ydCBhdXRvIGFuZCBzY3JvbGwuCi0gICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkg
PT0gVEFCTEUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVfVEFCTEUgfHwKLSAgICAgICAg
c3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1dfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9
PSBUQUJMRV9ST1cpIHsKLSAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPVklTSUJM
RSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT0hJRERFTikKLSAgICAgICAgICAgIHN0eWxlLT5z
ZXRPdmVyZmxvd1goT1ZJU0lCTEUpOwotICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WSgpICE9
IE9WSVNJQkxFICYmIHN0eWxlLT5vdmVyZmxvd1koKSAhPSBPSElEREVOKQotICAgICAgICAgICAg
c3R5bGUtPnNldE92ZXJmbG93WShPVklTSUJMRSk7Ci0gICAgfQotCi0gICAgLy8gTWVudWxpc3Rz
IHNob3VsZCBoYXZlIHZpc2libGUgb3ZlcmZsb3cKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPVklTSUJM
RSk7Ci0gICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koT1ZJU0lCTEUpOwotICAgIH0KLQotICAg
IC8vIEN1bGwgb3V0IGFueSB1c2VsZXNzIGxheWVycyBhbmQgYWxzbyByZXBlYXQgcGF0dGVybnMg
aW50byBhZGRpdGlvbmFsIGxheWVycy4KLSAgICBzdHlsZS0+YWRqdXN0QmFja2dyb3VuZExheWVy
cygpOwotICAgIHN0eWxlLT5hZGp1c3RNYXNrTGF5ZXJzKCk7Ci0KLSAgICAvLyBEbyB0aGUgc2Ft
ZSBmb3IgYW5pbWF0aW9ucyBhbmQgdHJhbnNpdGlvbnMuCi0gICAgc3R5bGUtPmFkanVzdEFuaW1h
dGlvbnMoKTsKLSAgICBzdHlsZS0+YWRqdXN0VHJhbnNpdGlvbnMoKTsKLQotICAgIC8vIEltcG9y
dGFudDogSW50cmluc2ljIG1hcmdpbnMgZ2V0IGFkZGVkIHRvIGNvbnRyb2xzIGJlZm9yZSB0aGUg
dGhlbWUgaGFzIGFkanVzdGVkIHRoZSBzdHlsZSwgc2luY2UgdGhlIHRoZW1lIHdpbGwKLSAgICAv
LyBhbHRlciBmb250cyBhbmQgaGVpZ2h0cy93aWR0aHMuCi0gICAgaWYgKGUgJiYgZS0+aXNGb3Jt
Q29udHJvbEVsZW1lbnQoKSAmJiBzdHlsZS0+Zm9udFNpemUoKSA+PSAxMSkgewotICAgICAgICAv
LyBEb24ndCBhcHBseSBpbnRyaW5zaWMgbWFyZ2lucyB0byBpbWFnZSBidXR0b25zLiAgVGhlIGRl
c2lnbmVyIGtub3dzIGhvdyBiaWcgdGhlIGltYWdlcyBhcmUsCi0gICAgICAgIC8vIHNvIHdlIGhh
dmUgdG8gdHJlYXQgYWxsIGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNp
dGx5IHNpemVkLgotICAgICAgICBpZiAoIWUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8ICFzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZSktPmlzSW1hZ2VCdXR0b24oKSkKLSAgICAgICAg
ICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOwotICAgIH0KLQotICAgIC8vIExldCB0aGUg
dGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KLSAgICBpZiAo
c3R5bGUtPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9y
ZGVyRGF0YSwgbV9iYWNrZ3JvdW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOwotCi0gICAgLy8g
SWYgd2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBz
dHlsZS4KLSAgICBpZiAoc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCi0gICAg
ICAgIHN0eWxlLT5zZXRVbmlxdWUoKTsKLQotICAgIC8vIEZJWE1FOiB3aGVuIGRyb3BwaW5nIHRo
ZSAtd2Via2l0IHByZWZpeCBvbiB0cmFuc2Zvcm0tc3R5bGUsIHdlIHNob3VsZCBhbHNvIGhhdmUg
b3BhY2l0eSA8IDEgY2F1c2UgZmxhdHRlbmluZy4KLSAgICBpZiAoc3R5bGUtPnByZXNlcnZlczNE
KCkgJiYgKHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRQotICAgICAgICB8fCBzdHlsZS0+
b3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUKLSAgICAgICAgfHwgc3R5bGUtPmhhc0ZpbHRlcigpKSkK
LSAgICAgICAgc3R5bGUtPnNldFRyYW5zZm9ybVN0eWxlM0QoVHJhbnNmb3JtU3R5bGUzREZsYXQp
OwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoZSAmJiBlLT5pc1NWR0VsZW1lbnQoKSkgewot
ICAgICAgICAvLyBTcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvbWFza2luZy5odG1sI092
ZXJmbG93UHJvcGVydHkKLSAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xM
KQotICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPSElEREVOKTsKLSAgICAgICAgZWxz
ZSBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9BVVRPKQotICAgICAgICAgICAgc3R5bGUtPnNl
dE92ZXJmbG93WShPVklTSUJMRSk7Ci0KLSAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9
PSBPU0NST0xMKQotICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPSElEREVOKTsKLSAg
ICAgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9BVVRPKQotICAgICAgICAgICAg
c3R5bGUtPnNldE92ZXJmbG93WChPVklTSUJMRSk7Ci0KLSAgICAgICAgLy8gT25seSB0aGUgcm9v
dCA8c3ZnPiBlbGVtZW50IGluIGFuIFNWRyBkb2N1bWVudCBmcmFnbWVudCB0cmVlIGhvbm9ycyBj
c3MgcG9zaXRpb24KLSAgICAgICAgaWYgKCEoZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFn
KSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgIWUtPnBhcmVudE5vZGUoKS0+aXNTVkdFbGVtZW50KCkp
KQotICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsUG9z
aXRpb24oKSk7Ci0KLSAgICAgICAgLy8gUmVuZGVyU1ZHUm9vdCBoYW5kbGVzIHpvb21pbmcgZm9y
IHRoZSB3aG9sZSBTVkcgc3VidHJlZSwgc28gZm9yZWlnbk9iamVjdCBjb250ZW50IHNob3VsZAot
ICAgICAgICAvLyBub3QgYmUgc2NhbGVkIGFnYWluLgotICAgICAgICBpZiAoZS0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZykpCi0gICAgICAgICAgICBzdHlsZS0+c2V0RWZm
ZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiByZWdpb25F
bGVtZW50KQotewotICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJr
aXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQsCi0g
ICAgLy8gc28gYWxsIHJlZ2lvbiBydWxlcyBhcmUgZ2xvYmFsIGJ5IGRlZmF1bHQuIFZlcmlmeSB3
aGV0aGVyIHRoYXQgY2FuIHN0YW5kIG9yIG5lZWRzIGNoYW5naW5nLgotCi0gICAgdW5zaWduZWQg
cnVsZXNTaXplID0gbV9hdXRob3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5z
aXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7Ci0g
ICAgICAgIEFTU0VSVChtX2F1dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRz
LmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3Rvciht
X2F1dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9y
LCByZWdpb25FbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IGlmIChtX3VzZXJTdHlsZSkgewotICAgICAgICBydWxlc1NpemUgPSBtX3VzZXJTdHlsZS0+bV9y
ZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBydWxlc1NpemU7ICsraSkgewotICAgICAgICAgICAgQVNTRVJUKG1fdXNlclN0
eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOwot
ICAgICAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IobV91c2VyU3R5bGUtPm1fcmVnaW9u
U2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQotewotICAgIGlm
ICghbV9mb250RGlydHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNoZWNrRm9yVGV4dFNpemVB
ZGp1c3QoKTsKLSAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUoKSwgbV9wYXJl
bnRTdHlsZSk7Ci0gICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUp
OwotICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fZm9u
dERpcnR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRC
YWNrZ3JvdW5kKCkKLXsKLSAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVh
cmFuY2UoKTsKLSAgICBpZiAobV9oYXNVQUFwcGVhcmFuY2UpIHsKLSAgICAgICAgbV9ib3JkZXJE
YXRhID0gbV9zdHlsZS0+Ym9yZGVyKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqbV9z
dHlsZS0+YmFja2dyb3VuZExheWVycygpOwotICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IG1f
c3R5bGUtPmJhY2tncm91bmRDb2xvcigpOwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxDU1NSdWxl
TGlzdD4gU3R5bGVSZXNvbHZlcjo6c3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgdW5z
aWduZWQgcnVsZXNUb0luY2x1ZGUpCi17Ci0gICAgcmV0dXJuIHBzZXVkb1N0eWxlUnVsZXNGb3JF
bGVtZW50KGUsIE5PUFNFVURPLCBydWxlc1RvSW5jbHVkZSk7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NT
UnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1l
bnQqIGUsIFBzZXVkb0lkIHBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKLXsKLSAg
ICBpZiAoIWUgfHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KHRy
dWUpOwotCi0gICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCAw
LCBwc2V1ZG9JZCk7Ci0KLSAgICBNYXRjaFJlc3VsdCBkdW1teTsKLSAgICBpZiAocnVsZXNUb0lu
Y2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykgewotICAgICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBy
dWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0LgotICAgICAgICBtYXRjaFVBUnVsZXMoZHVt
bXkpOwotCi0gICAgICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgotICAgICAg
ICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgICAgICBtYXRjaFVzZXJS
dWxlcyhkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0
aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNs
dWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVz
IGluIGF1dGhvciBzaGVldHMuCi0gICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVz
VG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7Ci0KLSAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9
IGZhbHNlOwotICAgIH0KLQotICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KGZh
bHNlKTsKLQotICAgIHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKLX0KLQotaW5saW5lIGJv
b2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEs
IGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQotewotICAgIG1fZHluYW1pY1BzZXVkbyA9IE5P
UFNFVURPOwotICAgIG1fY2hlY2tlci5jbGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpOwot
Ci0gICAgaWYgKHJ1bGVEYXRhLmhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpKSB7Ci0gICAgICAg
IC8vIFdlIGtub3cgdGhpcyBzZWxlY3RvciBkb2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8gZWxl
bWVudHMuCi0gICAgICAgIGlmIChtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETykK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gV2Uga25vdyBhIHN1ZmZpY2ll
bnRseSBzaW1wbGUgc2luZ2xlIHBhcnQgc2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3
ZSBmb3VuZCBpdCBmcm9tIHRoZSBydWxlIGhhc2guCi0gICAgICAgIC8vIFRoaXMgaXMgbGltaXRl
ZCB0byBIVE1MIG9ubHkgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbmFtZXNwYWNlLgot
ICAgICAgICBpZiAocnVsZURhdGEuaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNl
ZE9uUnVsZUhhc2goKSAmJiBtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICAg
ICAgaWYgKCFydWxlRGF0YS5oYXNNdWx0aXBhcnRTZWxlY3RvcigpKQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCFTZWxlY3RvckNoZWNrZXI6OnRhZ01h
dGNoZXMobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9z
dEF0dHJpYnV0ZVNlbGVjdG9yKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX2NoZWNrZXIuZmFzdENoZWNr
U2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50KTsKLSAgICB9Ci0KLSAgICAv
LyBTbG93IHBhdGguCi0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4
dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2Vy
OjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKLSAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0eWxl
KCk7Ci0gICAgY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgPSBtX3BhcmVudE5vZGUgPyBtX3Bh
cmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOwotICAgIGNvbnRleHQuc2NvcGUgPSBzY29wZTsK
LSAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hl
Y2tTZWxlY3Rvcihjb250ZXh0LCBtX2R5bmFtaWNQc2V1ZG8pOwotICAgIGlmIChtYXRjaCAhPSBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIu
cHNldWRvU3R5bGUoKSAhPSBtX2R5bmFtaWNQc2V1ZG8pCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNl
bGVjdG9yKENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVu
dCkKLXsKLSAgICBpZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2NoZWNrZXIuY2xlYXJIYXNVbmtub3duUHNldWRvRWxl
bWVudHMoKTsKLSAgICBtX2NoZWNrZXIuc2V0UHNldWRvU3R5bGUoTk9QU0VVRE8pOwotCi0gICAg
Zm9yIChDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JM
aXN0OjpuZXh0KHMpKQotICAgICAgICBpZiAobV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocywgcmVn
aW9uRWxlbWVudCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLSAgICAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVj
dG9yU2NvcGVzKFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVzaGVldCwgSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NT
Y29wZXMpCi17Ci0gICAgQVNTRVJUKCFzdHlsZXNoZWV0LT5pc0xvYWRpbmcoKSk7Ci0KLSAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzdHls
ZXNoZWV0LT5pbXBvcnRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbXBv
cnRSdWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWltcG9ydFJ1bGVzW2ldLT5zdHls
ZVNoZWV0KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFkZXRlcm1pbmVT
dHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoaW1wb3J0UnVsZXNbaV0tPnN0eWxlU2hlZXQoKSwgaWRT
Y29wZXMsIGNsYXNzU2NvcGVzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIHJ1bGVzID0gc3R5bGVz
aGVldC0+Y2hpbGRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlcy5z
aXplKCk7IGkrKykgewotICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0gcnVsZXNbaV0uZ2V0
KCk7Ci0gICAgICAgIGlmIChydWxlLT5pc1N0eWxlUnVsZSgpKSB7Ci0gICAgICAgICAgICBTdHls
ZVJ1bGUqIHN0eWxlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpOwotICAgICAg
ICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZVNlbGVjdG9yU2NvcGVzKHN0eWxl
UnVsZS0+c2VsZWN0b3JMaXN0KCksIGlkU2NvcGVzLCBjbGFzc1Njb3BlcykpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0gCi0g
ICAgICAgIC8vIEZJWE1FOiBNZWRpYSBydWxlcyBhbmQgbWF5YmUgc29tZSBvdGhlcnMgY291bGQg
YmUgYWxsb3dlZC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGlubGluZSBib29sIGlzU2VsZWN0b3JNYXRj
aGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JOYW1lc3BhY2UgPSBzZWxlY3Rvci0+dGFn
KCkubmFtZXNwYWNlVVJJKCk7Ci0gICAgaWYgKHNlbGVjdG9yTmFtZXNwYWNlICE9IHN0YXJBdG9t
ICYmIHNlbGVjdG9yTmFtZXNwYWNlICE9IHhodG1sTmFtZXNwYWNlVVJJKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpOb25l
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoc2VsZWN0b3ItPnRhZygpICE9IHN0YXJB
dG9tKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXND
b21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgcmV0dXJuIHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JM
aXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpOwotICAgIGlmICghc2VsZWN0b3JMaXN0KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3Ig
PSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1Nl
bGVjdG9yTGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKLSAgICAgICAgaWYgKHN1YlNlbGVjdG9y
LT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tb25BdHRy
aWJ1dGVTZWxlY3RvckF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCi17
Ci0gICAgLy8gVGhlc2UgYXJlIGV4cGxpY2l0bHkgdGVzdGVkIGZvciBlcXVhbGl0eSBpbiBjYW5T
aGFyZVN0eWxlV2l0aEVsZW1lbnQuCi0gICAgcmV0dXJuIGF0dHJpYnV0ZSA9PSB0eXBlQXR0ciB8
fCBhdHRyaWJ1dGUgPT0gcmVhZG9ubHlBdHRyOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29u
dGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikKLXsKLSAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3Rv
cnkoKSkgewotICAgICAgICAvLyBBbGxvdyBjZXJ0YWluIGNvbW1vbiBhdHRyaWJ1dGVzICh1c2Vk
IGluIHRoZSBkZWZhdWx0IHN0eWxlKSBpbiB0aGUgc2VsZWN0b3JzIHRoYXQgbWF0Y2ggdGhlIGN1
cnJlbnQgZWxlbWVudC4KLSAgICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9y
KCkgJiYgIWlzQ29tbW9uQXR0cmlidXRlU2VsZWN0b3JBdHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJp
YnV0ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoc2VsZWN0b3JM
aXN0Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NT
U2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9y
LT50YWdIaXN0b3J5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7
Ci0gICAgICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9u
QXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUnVsZURhdGE6OlJ1bGVEYXRhKFN0eWxlUnVs
ZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBi
b29sIGluUmVnaW9uUnVsZSkKLSAgICA6IG1fcnVsZShydWxlKQotICAgICwgbV9zZWxlY3Rvcihz
ZWxlY3RvcikKLSAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3ItPnNwZWNpZmljaXR5KCkpCi0g
ICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQotICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0
b3IoY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVj
a2FibGVTZWxlY3RvcihzZWxlY3RvcikpCi0gICAgLCBtX2hhc011bHRpcGFydFNlbGVjdG9yKCEh
c2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkKLSAgICAsIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRj
aGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxl
SGFzaChzZWxlY3RvcikpCi0gICAgLCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rv
cihXZWJDb3JlOjpjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQot
ICAgICwgbV9saW5rTWF0Y2hUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNo
VHlwZShzZWxlY3RvcikpCi0gICAgLCBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbikKLSAgICAsIG1faXNJblJlZ2lvblJ1bGUoaW5SZWdpb25SdWxl
KQotewotICAgIFNlbGVjdG9yQ2hlY2tlcjo6Y29sbGVjdElkZW50aWZpZXJIYXNoZXMobV9zZWxl
Y3RvciwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRp
ZmllckNvdW50KTsKLX0KLQotUnVsZVNldDo6UnVsZVNldCgpCi0gICAgOiBtX3J1bGVDb3VudCgw
KQotICAgICwgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKHRydWUpCi17Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoU3R5bGVSZXNvbHZlcjo6RmVh
dHVyZXMmIGZlYXR1cmVzLCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYg
KHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkKLSAgICAgICAgZmVhdHVyZXMu
aWRzSW5SdWxlcy5hZGQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKLSAgICBpZiAoc2VsZWN0
b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgZmVhdHVyZXMuYXR0cnNJblJ1bGVz
LmFkZChzZWxlY3Rvci0+YXR0cmlidXRlKCkubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICBzd2l0
Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9GaXJzdExpbmU6Ci0gICAgICAgIGZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlcyA9IHRydWU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0JlZm9yZToKLSAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BZnRlcjoKLSAgICAgICAgZmVhdHVyZXMudXNlc0Jl
Zm9yZUFmdGVyUnVsZXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9MaW5rOgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6Ci0g
ICAgICAgIGZlYXR1cmVzLnVzZXNMaW5rUnVsZXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxl
Y3RGZWF0dXJlc0Zyb21SdWxlRGF0YShTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgZmVhdHVyZXMs
IGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKLXsKLSAgICBib29sIGZvdW5kU2libGluZ1NlbGVj
dG9yID0gZmFsc2U7Ci0gICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5z
ZWxlY3RvcigpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7
Ci0gICAgICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc2VsZWN0b3Ip
OwotICAgICAgICAKLSAgICAgICAgaWYgKENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0g
c2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKSB7Ci0gICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9y
KiBzdWJTZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3I7IHN1YlNl
bGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9yKSkgewotICAgICAgICAg
ICAgICAgIGlmICghZm91bmRTaWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1Nl
bGVjdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMs
IHN1YlNlbGVjdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghZm91bmRT
aWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCi0gICAgICAg
ICAgICBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7Ci0gICAgfQotICAgIGlmIChmb3VuZFNp
YmxpbmdTZWxlY3RvcikKLSAgICAgICAgZmVhdHVyZXMuc2libGluZ1J1bGVzLmFwcGVuZChTdHls
ZVJlc29sdmVyOjpSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9y
KCksIHJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkpOwotICAgIGlmIChydWxl
RGF0YS5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgZmVhdHVy
ZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBlbmQoU3R5bGVSZXNvbHZlcjo6UnVsZUZlYXR1
cmUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvcigpLCBydWxlRGF0YS5oYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luKCkpKTsKLX0KLSAgICAKLXZvaWQgUnVsZVNldDo6YWRkVG9SdWxl
U2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURh
dGEmIHJ1bGVEYXRhKQotewotICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm47Ci0gICAgT3du
UHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYgcnVsZXMgPSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRl
cmF0b3ItPnNlY29uZDsKLSAgICBpZiAoIXJ1bGVzKQotICAgICAgICBydWxlcyA9IGFkb3B0UHRy
KG5ldyBWZWN0b3I8UnVsZURhdGE+KTsKLSAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKLX0K
LQotdm9pZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENo
ZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQotewotICAgIFJ1bGVEYXRhIHJ1bGVEYXRh
KHJ1bGUsIHNlbGVjdG9yLCBtX3J1bGVDb3VudCsrLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaW5SZWdpb25SdWxlKTsKLSAgICBjb2xsZWN0RmVh
dHVyZXNGcm9tUnVsZURhdGEobV9mZWF0dXJlcywgcnVsZURhdGEpOwotCi0gICAgaWYgKHNlbGVj
dG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgewotICAgICAgICBhZGRUb1J1bGVTZXQo
c2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX2lkUnVsZXMsIHJ1bGVEYXRhKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OkNsYXNzKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCks
IG1fY2xhc3NSdWxlcywgcnVsZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChzZWxlY3Rvci0+aXNVbmtub3duUHNldWRvRWxlbWVudCgpKSB7Ci0gICAgICAgIGFkZFRvUnVs
ZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVz
LCBydWxlRGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKFNlbGVjdG9yQ2hl
Y2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKSkgewotICAgICAgICBz
d2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvTGluazoKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoK
LSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKLSAgICAgICAgICAgIG1f
bGlua1BzZXVkb0NsYXNzUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6Ci0gICAgICAgICAgICBt
X2ZvY3VzUHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQocnVsZURhdGEpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsTmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUoKTsKLSAgICBpZiAobG9j
YWxOYW1lICE9IHN0YXJBdG9tKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChsb2NhbE5hbWUuaW1w
bCgpLCBtX3RhZ1J1bGVzLCBydWxlRGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV91bml2ZXJzYWxSdWxlcy5hcHBlbmQocnVsZURhdGEpOwotfQotCi12b2lkIFJ1bGVTZXQ6OmFk
ZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UqIHJ1bGUpCi17Ci0gICAgbV9wYWdlUnVsZXMuYXBwZW5k
KHJ1bGUpOwotfQotCi12b2lkIFJ1bGVTZXQ6OmFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9u
KiByZWdpb25SdWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgT3du
UHRyPFJ1bGVTZXQ+IHJlZ2lvblJ1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAvLyBU
aGUgcmVnaW9uIHJ1bGUgc2V0IHNob3VsZCB0YWtlIGludG8gYWNjb3VudCB0aGUgcG9zaXRpb24g
aW5zaWRlIHRoZSBwYXJlbnQgcnVsZSBzZXQuCi0gICAgLy8gT3RoZXJ3aXNlLCB0aGUgcnVsZXMg
aW5zaWRlIHJlZ2lvbiBibG9jayBtaWdodCBiZSBpbmNvcnJlY3RseSBwb3NpdGlvbmVkIGJlZm9y
ZSBvdGhlciBzaW1pbGFyIHJ1bGVzIGZyb20KLSAgICAvLyB0aGUgc3R5bGVzaGVldCB0aGF0IGNv
bnRhaW5zIHRoZSByZWdpb24gYmxvY2suCi0gICAgcmVnaW9uUnVsZVNldC0+bV9ydWxlQ291bnQg
PSBtX3J1bGVDb3VudDsKLQotICAgIC8vIENvbGxlY3QgdGhlIHJlZ2lvbiBydWxlcyBpbnRvIGEg
cnVsZSBzZXQKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxk
UnVsZXMgPSByZWdpb25SdWxlLT5jaGlsZFJ1bGVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxlQmFzZSog
cmVnaW9uU3R5bGluZ1J1bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgpOwotICAgICAgICBpZiAocmVn
aW9uU3R5bGluZ1J1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICByZWdpb25SdWxlU2V0
LT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUp
LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVlLCB0cnVlKTsKLSAgICB9Ci0gICAgLy8g
VXBkYXRlIHRoZSAiZ2xvYmFsIiBydWxlIGNvdW50IHNvIHRoYXQgcHJvcGVyIG9yZGVyIGlzIG1h
aW50YWluZWQKLSAgICBtX3J1bGVDb3VudCA9IHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50Owot
Ci0gICAgbV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hcHBlbmQoUnVsZVNldFNlbGVjdG9y
UGFpcihyZWdpb25SdWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCByZWdpb25SdWxlU2V0LnJl
bGVhc2UoKSkpOwotfQotCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hl
ZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5
bGVSZXNvbHZlciogc3R5bGVTZWxlY3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCi17
Ci0gICAgQVNTRVJUKHNoZWV0KTsKLQotICAgIC8vIE5vIG1lZGlhIGltcGxpZXMgImFsbCIsIGJ1
dCBpZiBhIG1lZGlhIGxpc3QgZXhpc3RzIGl0IG11c3QKLSAgICAvLyBjb250YWluIG91ciBjdXJy
ZW50IG1lZGl1bQotICAgIGlmIChzaGVldC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1lZGl1bS5ldmFs
KHNoZWV0LT5tZWRpYVF1ZXJpZXMoKSwgc3R5bGVTZWxlY3RvcikpCi0gICAgICAgIHJldHVybjsg
Ly8gdGhlIHN0eWxlIHNoZWV0IGRvZXNuJ3QgYXBwbHkKLSAgICAKLSAgICBjb25zdCBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzaGVldC0+aW1wb3J0UnVs
ZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0gaW1wb3J0UnVsZXNb
aV0uZ2V0KCk7Ci0gICAgICAgIGlmIChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFpbXBv
cnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnRSdWxlLT5tZWRpYVF1
ZXJpZXMoKSwgc3R5bGVTZWxlY3RvcikpKQotICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQo
aW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IsIHNjb3BlKTsK
LSAgICB9Ci0gICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID0gc3R5bGVTZWxlY3Rv
ciAmJiBzdHlsZVNlbGVjdG9yLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1
ZXN0KHNoZWV0LT5iYXNlVVJMKCkpOwotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1
bGVCYXNlPiA+JiBydWxlcyA9IHNoZWV0LT5jaGlsZFJ1bGVzKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0eWxlUnVsZUJhc2Uq
IHJ1bGUgPSBydWxlc1tpXS5nZXQoKTsKLQotICAgICAgICBBU1NFUlQoIXJ1bGUtPmlzSW1wb3J0
UnVsZSgpKTsKLSAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICBh
ZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4sICFzY29wZSk7Ci0gICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUo
KSkKLSAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihy
dWxlKSk7Ci0gICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKLSAgICAgICAg
ICAgIFN0eWxlUnVsZU1lZGlhKiBtZWRpYVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVNZWRp
YSo+KHJ1bGUpOwotCi0gICAgICAgICAgICBpZiAoKCFtZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygp
IHx8IG1lZGl1bS5ldmFsKG1lZGlhUnVsZS0+bWVkaWFRdWVyaWVzKCksIHN0eWxlU2VsZWN0b3Ip
KSkgewotICAgICAgICAgICAgICAgIC8vIFRyYXZlcnNlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBA
bWVkaWEgcnVsZS4KLSAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVs
ZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSBtZWRpYVJ1bGUtPmNoaWxkUnVsZXMoKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraikg
ewotICAgICAgICAgICAgICAgICAgICBTdHlsZVJ1bGVCYXNlKiBjaGlsZFJ1bGUgPSBjaGlsZFJ1
bGVzW2pdLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRSdWxlLT5pc1N0eWxl
UnVsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0
PFN0eWxlUnVsZSo+KGNoaWxkUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29w
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNQYWdlUnVsZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVS
dWxlUGFnZSo+KGNoaWxkUnVsZSkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGls
ZFJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFj
ZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHNjb3BlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2Uq
IGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4oY2hpbGRSdWxl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3Rvcigp
LT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0eWxlU2VsZWN0b3ItPmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRSdWxlLT5pc0tleWZyYW1lc1J1bGUoKSAm
JiBzdHlsZVNlbGVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBr
ZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RShCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHls
ZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Nv
cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFN0
eWxlUnVsZUtleWZyYW1lcyo+KGNoaWxkUnVsZSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSAgIC8vIGZvciBydWxlcwotICAgICAgICAgICAgfSAgIC8vIGlmIHJ1
bGVzCi0gICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNl
bGVjdG9yKSB7Ci0gICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4K
LSAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNl
IHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAg
ICBpZiAoc2NvcGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb25z
dCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxl
Rm9udEZhY2UqPihydWxlKTsKLSAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3Rv
cigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKLSAgICAgICAgICAgIHN0eWxlU2Vs
ZWN0b3ItPmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAocnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewotICAgICAg
ICAgICAgLy8gRklYTUUgKEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMg
b2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KLSAgICAgICAgICAgIGlmIChz
Y29wZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN0eWxlU2VsZWN0
b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4ocnVs
ZSkpOwotICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzUmVnaW9uUnVsZSgpICYmIHN0eWxlU2Vs
ZWN0b3IpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQg
QC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21l
bnQuCi0gICAgICAgICAgICBpZiAoc2NvcGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBhZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1
bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBp
ZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwotfQot
Ci12b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBp
c0luUmVnaW9uUnVsZSkKLXsKLSAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcnVsZS0+c2VsZWN0
b3JMaXN0KCkuZmlyc3QoKTsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkKLSAgICAg
ICAgYWRkUnVsZShydWxlLCBzLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvciwgaXNJblJlZ2lvblJ1bGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQg
c2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBtYXApCi17Ci0gICAg
UnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKLSAgICBmb3Ig
KFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNocmlua1RvRml0KCk7Ci19Ci0KLXZvaWQg
UnVsZVNldDo6c2hyaW5rVG9GaXQoKQotewotICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2lk
UnVsZXMpOwotICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2NsYXNzUnVsZXMpOwotICAgIHNo
cmlua01hcFZlY3RvcnNUb0ZpdChtX3RhZ1J1bGVzKTsKLSAgICBzaHJpbmtNYXBWZWN0b3JzVG9G
aXQobV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOwotICAgIG1fbGlua1BzZXVkb0NsYXNzUnVs
ZXMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlcy5zaHJpbmtUb0Zp
dCgpOwotICAgIG1fdW5pdmVyc2FsUnVsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX3BhZ2VSdWxl
cy5zaHJpbmtUb0ZpdCgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyB0aGlzIGlzIG1vc3RseSBib3Jpbmcgc3R1ZmYgb24gaG93IHRvIGFwcGx5IGEgY2VydGFpbiBy
dWxlIHRvIHRoZSByZW5kZXJzdHlsZS4uLgotCi1MZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVy
dFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKLXsK
LSAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUgPyBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVu
Z3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9u
Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlLCByb290U3R5
bGUsIG11bHRpcGxpZXIpIDogTGVuZ3RoKFVuZGVmaW5lZCk7Ci19Ci0KLUxlbmd0aCBTdHlsZVJl
c29sdmVyOjpjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91Ymxl
IG11bHRpcGxpZXIpCi17Ci0gICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlID8gcHJpbWl0aXZlVmFs
dWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJz
aW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4o
c3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllcikgOiBMZW5ndGgoVW5kZWZpbmVkKTsKLX0KLQot
dGVtcGxhdGUgPGJvb2wgYXBwbHlGaXJzdD4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVs
ZSwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBib29sIGZpbHRlclJlZ2lv
blByb3BlcnRpZXMpCi17Ci0gICAgQVNTRVJUKCFmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzIHx8IG1f
cmVnaW9uRm9yU3R5bGluZyk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNv
b2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50
KCksIHJ1bGUpOwotCi0gICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnRpZXMtPnBy
b3BlcnR5Q291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3Vu
dDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBjdXJyZW50ID0gcHJvcGVydGll
cy0+cHJvcGVydHlBdChpKTsKLSAgICAgICAgaWYgKGlzSW1wb3J0YW50ICE9IGN1cnJlbnQuaXNJ
bXBvcnRhbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaW5oZXJpdGVk
T25seSAmJiAhY3VycmVudC5pc0luaGVyaXRlZCgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUg
cHJvcGVydHkgdmFsdWUgaXMgZXhwbGljaXRseSBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gYXBwbHkg
ZnVydGhlciBub24taW5oZXJpdGVkIHByb3BlcnRpZXMKLSAgICAgICAgICAgIC8vIGFzIHRoZXkg
bWlnaHQgb3ZlcnJpZGUgdGhlIHZhbHVlIGluaGVyaXRlZCBoZXJlLiBGb3IgdGhpcyByZWFzb24g
d2UgZG9uJ3QgYWxsb3cgZGVjbGFyYXRpb25zIHdpdGgKLSAgICAgICAgICAgIC8vIGV4cGxpY2l0
bHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gYmUgY2FjaGVkLgotICAgICAgICAgICAgQVNTRVJU
KCFjdXJyZW50LnZhbHVlKCktPmlzSW5oZXJpdGVkVmFsdWUoKSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5ID0gY3VycmVu
dC5pZCgpOwotCi0gICAgICAgIGlmIChmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzICYmICFTdHlsZVJl
c29sdmVyOjppc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShwcm9wZXJ0eSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBpZiAoYXBwbHlGaXJzdCkgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoZmlyc3RDU1NQcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUNvbG9yLCBDU1NfY29s
b3JfaXNfZmlyc3RfcHJvcGVydHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJv
cGVydHlab29tID09IENTU1Byb3BlcnR5Q29sb3IgKyAxOCwgQ1NTX3pvb21faXNfZW5kX29mX2Zp
cnN0X3Byb3BfcmFuZ2UpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJvcGVydHlM
aW5lSGVpZ2h0ID09IENTU1Byb3BlcnR5Wm9vbSArIDEsIENTU19saW5lX2hlaWdodF9pc19hZnRl
cl96b29tKTsKLSAgICAgICAgICAgIC8vIGdpdmUgc3BlY2lhbCBwcmlvcml0eSB0byBmb250LXh4
eCwgY29sb3IgcHJvcGVydGllcywgZXRjCi0gICAgICAgICAgICBpZiAocHJvcGVydHkgPiBDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAvLyB3ZSBhcHBseSBsaW5lLWhlaWdodCBsYXRlcgotICAgICAgICAgICAgaWYgKHByb3BlcnR5
ID09IENTU1Byb3BlcnR5TGluZUhlaWdodCkgewotICAgICAgICAgICAgICAgIG1fbGluZUhlaWdo
dFZhbHVlID0gY3VycmVudC52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJl
bnQudmFsdWUoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAocHJvcGVydHkgPiBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAgICBhcHBseVBy
b3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKLSAgICB9Ci0gICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQcm9jZXNzUnVsZShjb29raWUpOwotfQotCi10ZW1wbGF0
ZSA8Ym9vbCBhcHBseUZpcnN0Pgotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbCBpc0ltcG9ydGFudCwg
aW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KQotewotICAg
IGlmIChzdGFydEluZGV4ID09IC0xKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdHls
ZS0+aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmspIHsKLSAgICAgICAgZm9yIChpbnQgaSA9
IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewotICAgICAgICAgICAgY29uc3QgTWF0
Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXNbaV07Ci0gICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbWF0Y2hl
ZFByb3BlcnRpZXMubGlua01hdGNoVHlwZTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBuaWNlciB0byBwYXNzIHRoZXNlIGFzIGFyZ3VtZW50cyBidXQgdGhhdCByZXF1aXJlcyBj
aGFuZ2VzIGluIG1hbnkgcGxhY2VzLgotICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7Ci0g
ICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hU
eXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7Ci0KLSAgICAgICAgICAgIGFwcGx5
UHJvcGVydGllczxhcHBseUZpcnN0PihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgp
LCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5
LCBtYXRjaGVkUHJvcGVydGllcy5pc0luUmVnaW9uUnVsZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
bV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSB0cnVlOwotICAgICAgICBtX2FwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldOwotICAgICAgICBhcHBseVByb3BlcnRpZXM8YXBwbHlG
aXJzdD4obWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0
Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgbWF0Y2hlZFByb3BlcnRp
ZXMuaXNJblJlZ2lvblJ1bGUpOwotICAgIH0KLX0KLQotdW5zaWduZWQgU3R5bGVSZXNvbHZlcjo6
Y29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyogcHJv
cGVydGllcywgdW5zaWduZWQgc2l6ZSkKLXsKLSAgICAKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVy
OjpoYXNoTWVtb3J5KHByb3BlcnRpZXMsIHNpemVvZihNYXRjaGVkUHJvcGVydGllcykgKiBzaXpl
KTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2Vz
JiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJhbmdlcyYgYikKLXsKLSAgICByZXR1cm4g
YS5maXJzdFVBUnVsZSA9PSBiLmZpcnN0VUFSdWxlCi0gICAgICAgICYmIGEubGFzdFVBUnVsZSA9
PSBiLmxhc3RVQVJ1bGUKLSAgICAgICAgJiYgYS5maXJzdEF1dGhvclJ1bGUgPT0gYi5maXJzdEF1
dGhvclJ1bGUKLSAgICAgICAgJiYgYS5sYXN0QXV0aG9yUnVsZSA9PSBiLmxhc3RBdXRob3JSdWxl
Ci0gICAgICAgICYmIGEuZmlyc3RVc2VyUnVsZSA9PSBiLmZpcnN0VXNlclJ1bGUKLSAgICAgICAg
JiYgYS5sYXN0VXNlclJ1bGUgPT0gYi5sYXN0VXNlclJ1bGU7Ci19Ci0KLWJvb2wgb3BlcmF0b3Ih
PShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJhbmdlcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZl
cjo6TWF0Y2hSYW5nZXMmIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25z
dCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYgYikKLXsKLSAgICByZXR1cm4gYS5w
cm9wZXJ0aWVzID09IGIucHJvcGVydGllcyAmJiBhLmxpbmtNYXRjaFR5cGUgPT0gYi5saW5rTWF0
Y2hUeXBlOwotfQotCi1ib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hl
ZFByb3BlcnRpZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBi
KQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KLWNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBTdHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUodW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0KQotewotICAgIEFTU0VSVChoYXNoKTsKLQotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6
Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmZpbmQoaGFzaCk7Ci0gICAg
aWYgKGl0ID09IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0mIGNhY2hlSXRlbSA9IGl0LT5zZWNv
bmQ7Ci0KLSAgICBzaXplX3Qgc2l6ZSA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNp
emUoKTsKLSAgICBpZiAoc2l6ZSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewotICAgICAgICBpZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV0gIT0gY2Fj
aGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzW2ldKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIGlmIChjYWNoZUl0ZW0ucmFuZ2VzICE9IG1hdGNoUmVzdWx0LnJhbmdlcykKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuICZjYWNoZUl0ZW07Ci19Ci0KLXZvaWQgU3R5bGVSZXNv
bHZlcjo6YWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCB1bnNpZ25lZCBoYXNoLCBjb25zdCBN
YXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCi17Ci0gICAgc3RhdGljIHVuc2lnbmVkIG1hdGNoZWRE
ZWNsYXJhdGlvbkNhY2hlQWRkaXRpb25zQmV0d2VlblN3ZWVwcyA9IDEwMDsKLSAgICBpZiAoKytt
X21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA+PSBtYXRjaGVk
RGVjbGFyYXRpb25DYWNoZUFkZGl0aW9uc0JldHdlZW5Td2VlcHMpIHsKLSAgICAgICAgc3dlZXBN
YXRjaGVkUHJvcGVydGllc0NhY2hlKCk7Ci0gICAgICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwID0gMDsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzaCk7
Ci0gICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0gY2FjaGVJdGVtOwotICAgIGNhY2hlSXRl
bS5tYXRjaGVkUHJvcGVydGllcy5hcHBlbmQobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMp
OwotICAgIGNhY2hlSXRlbS5yYW5nZXMgPSBtYXRjaFJlc3VsdC5yYW5nZXM7Ci0gICAgLy8gTm90
ZSB0aGF0IHdlIGRvbid0IGNhY2hlIHRoZSBvcmlnaW5hbCBSZW5kZXJTdHlsZSBpbnN0YW5jZS4g
SXQgbWF5IGJlIGZ1cnRoZXIgbW9kaWZpZWQuCi0gICAgLy8gVGhlIFJlbmRlclN0eWxlIGluIHRo
ZSBjYWNoZSBpcyByZWFsbHkganVzdCBhIGhvbGRlciBmb3IgdGhlIHN1YnN0cnVjdHVyZXMgYW5k
IG5ldmVyIHVzZWQgYXMtaXMuCi0gICAgY2FjaGVJdGVtLnJlbmRlclN0eWxlID0gUmVuZGVyU3R5
bGU6OmNsb25lKHN0eWxlKTsKLSAgICBjYWNoZUl0ZW0ucGFyZW50UmVuZGVyU3R5bGUgPSBSZW5k
ZXJTdHlsZTo6Y2xvbmUocGFyZW50U3R5bGUpOwotICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZS5hZGQoaGFzaCwgY2FjaGVJdGVtKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjppbnZhbGlk
YXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCi17Ci0gICAgbV9tYXRjaGVkUHJvcGVydGllc0Nh
Y2hlLmNsZWFyKCk7Ci19Ci0KLXN0YXRpYyBib29sIGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVy
dGllc0NhY2hlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQotewotICAgIC8vIEZJWE1FOiBDU1NQ
cm9wZXJ0eVdlYmtpdFdyaXRpbmdNb2RlIG1vZGlmaWVzIHN0YXRlIHdoZW4gYXBwbHlpbmcgdG8g
ZG9jdW1lbnQgZWxlbWVudC4gV2UgY2FuJ3Qgc2tpcCB0aGUgYXBwbHlpbmcgYnkgY2FjaGluZy4K
LSAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQo
KSAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT53cml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3R5bGUtPnVuaXF1ZSgpIHx8IChz
dHlsZS0+c3R5bGVUeXBlKCkgIT0gTk9QU0VVRE8gJiYgcGFyZW50U3R5bGUtPnVuaXF1ZSgpKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0eWxlLT56b29tKCkgIT0gUmVuZGVyU3R5
bGU6OmluaXRpYWxab29tKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBUaGUgY2Fj
aGUgYXNzdW1lcyBzdGF0aWMga25vd2xlZGdlIGFib3V0IHdoaWNoIHByb3BlcnRpZXMgYXJlIGlu
aGVyaXRlZC4KLSAgICBpZiAocGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9w
ZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVz
dWx0JiBtYXRjaFJlc3VsdCkKLXsKLSAgICB1bnNpZ25lZCBjYWNoZUhhc2ggPSBtYXRjaFJlc3Vs
dC5pc0NhY2hlYWJsZSA/IGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2gobWF0Y2hSZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuZGF0YSgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCkpIDogMDsKLSAgICBib29sIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwotICAgIGNv
bnN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBjYWNoZUl0ZW0gPSAwOwotICAgIGlmIChj
YWNoZUhhc2ggJiYgKGNhY2hlSXRlbSA9IGZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShj
YWNoZUhhc2gsIG1hdGNoUmVzdWx0KSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIGJ1aWxkIHVwIHRo
ZSBzdHlsZSBieSBjb3B5aW5nIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIGFuIGVhcmxp
ZXIgc3R5bGUgb2JqZWN0IGJ1aWx0IHVzaW5nIHRoZSBzYW1lIGV4YWN0Ci0gICAgICAgIC8vIHN0
eWxlIGRlY2xhcmF0aW9ucy4gV2UgdGhlbiBvbmx5IG5lZWQgdG8gYXBwbHkgdGhlIGluaGVyaXRl
ZCBwcm9wZXJ0aWVzLCBpZiBhbnksIGFzIHRoZWlyIHZhbHVlcyBjYW4gZGVwZW5kIG9uIHRoZSAK
LSAgICAgICAgLy8gZWxlbWVudCBjb250ZXh0LiBUaGlzIGlzIGZhc3QgYW5kIHNhdmVzIG1lbW9y
eSBieSByZXVzaW5nIHRoZSBzdHlsZSBkYXRhIHN0cnVjdHVyZXMuCi0gICAgICAgIG1fc3R5bGUt
PmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwotICAg
ICAgICBpZiAobV9wYXJlbnRTdHlsZS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBh
cmVudFJlbmRlclN0eWxlLmdldCgpKSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0
YXR1cyA9IG1fc3R5bGUtPmluc2lkZUxpbmsoKTsKLSAgICAgICAgICAgIC8vIElmIHRoZSBjYWNo
ZSBpdGVtIHBhcmVudCBzdHlsZSBoYXMgaWRlbnRpY2FsIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRv
IHRoZSBjdXJyZW50IHBhcmVudCBzdHlsZSB0aGVuIHRoZQotICAgICAgICAgICAgLy8gcmVzdWx0
aW5nIHN0eWxlIHdpbGwgYmUgaWRlbnRpY2FsIHRvby4gV2UgY29weSB0aGUgaW5oZXJpdGVkIHBy
b3BlcnRpZXMgb3ZlciBmcm9tIHRoZSBjYWNoZSBhbmQgYXJlIGRvbmUuCi0gICAgICAgICAgICBt
X3N0eWxlLT5pbmhlcml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKLSAgICAg
ICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgdGhlIGxpbmsgc3RhdHVzIGlzIHRyZWF0ZWQgbGlrZSBh
biBpbmhlcml0ZWQgcHJvcGVydHkuIFdlIG5lZWQgdG8gZXhwbGljaXRseSByZXN0b3JlIGl0Lgot
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSB0cnVl
OyAKLSAgICB9Ci0gICAgLy8gTm93IHdlIGhhdmUgYWxsIG9mIHRoZSBtYXRjaGVkIHJ1bGVzIGlu
IHRoZSBhcHByb3ByaWF0ZSBvcmRlci4gV2FsayB0aGUgcnVsZXMgYW5kIGFwcGx5Ci0gICAgLy8g
aGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZpcnN0LCBpLmUuLCB0aG9zZSBwcm9wZXJ0aWVzIHRo
YXQgb3RoZXIgcHJvcGVydGllcyBkZXBlbmQgb24uCi0gICAgLy8gVGhlIG9yZGVyIGlzICgxKSBo
aWdoLXByaW9yaXR5IG5vdCBpbXBvcnRhbnQsICgyKSBoaWdoLXByaW9yaXR5IGltcG9ydGFudCwg
KDMpIG5vcm1hbCBub3QgaW1wb3J0YW50Ci0gICAgLy8gYW5kICg0KSBub3JtYWwgaW1wb3J0YW50
LgotICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PHRydWU+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzPHRydWU+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RB
dXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJp
dGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczx0cnVlPihtYXRjaFJlc3VsdCwg
dHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczx0cnVlPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0
VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKLQotICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpICE9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBtX2ZvbnRE
aXJ0eSA9IHRydWU7Ci0gICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwotICAgIH0K
LQotICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0
IG5vdy4KLSAgICB1cGRhdGVGb250KCk7Ci0KLSAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hl
biB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYgKG1fbGlu
ZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdo
dCwgbV9saW5lSGVpZ2h0VmFsdWUpOwotCi0gICAgLy8gTWFueSBwcm9wZXJ0aWVzIGRlcGVuZCBv
biB0aGUgZm9udC4gSWYgaXQgY2hhbmdlcyB3ZSBqdXN0IGFwcGx5IGFsbCBwcm9wZXJ0aWVzLgot
ICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkgIT0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpCi0gICAgICAgIGFwcGx5SW5oZXJp
dGVkT25seSA9IGZhbHNlOwotCi0gICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgVUEg
cHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihtYXRjaFJlc3Vs
dCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgCi0gICAgLy8gQ2FjaGUg
b3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBzbyB0aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0
ZXIuCi0gICAgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7Ci0gICAgCi0gICAgLy8gTm93IGRv
IHRoZSBhdXRob3IgYW5kIHVzZXIgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0
aGUgIWltcG9ydGFudCBwcm9wZXJ0aWVzLgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8ZmFs
c2U+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgKyAx
LCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KG1hdGNoUmVzdWx0LCB0
cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVk
UHJvcGVydGllczxmYWxzZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5m
aXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVy
aXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KG1hdGNoUmVzdWx0
LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIAotICAgIGxvYWRQZW5kaW5n
SW1hZ2VzKCk7Ci0gICAgCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGxvYWRQZW5kaW5n
U2hhZGVycygpOwotI2VuZGlmCi0gICAgCi0gICAgQVNTRVJUKCFtX2ZvbnREaXJ0eSk7Ci0gICAg
Ci0gICAgaWYgKGNhY2hlSXRlbSB8fCAhY2FjaGVIYXNoKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShtX2VsZW1lbnQsIG1fc3R5
bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUpKQotICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9NYXRj
aGVkUHJvcGVydGllc0NhY2hlKG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUsIGNhY2hlSGFz
aCwgbWF0Y2hSZXN1bHQpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVBhZ2VSdWxl
cyhjb25zdCBTdHlsZVJ1bGVQYWdlKiByMSwgY29uc3QgU3R5bGVSdWxlUGFnZSogcjIpCi17Ci0g
ICAgcmV0dXJuIHIxLT5zZWxlY3RvcigpLT5zcGVjaWZpY2l0eSgpIDwgcjItPnNlbGVjdG9yKCkt
PnNwZWNpZmljaXR5KCk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hQYWdlUnVsZXMo
TWF0Y2hSZXN1bHQmIHJlc3VsdCwgUnVsZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9v
bCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSkKLXsKLSAgICBpZiAoIXJ1bGVz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+IG1hdGNoZWRQ
YWdlUnVsZXM7Ci0gICAgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KG1hdGNoZWRQYWdlUnVsZXMsIHJ1
bGVzLT5wYWdlUnVsZXMoKSwgaXNMZWZ0UGFnZSwgaXNGaXJzdFBhZ2UsIHBhZ2VOYW1lKTsKLSAg
ICBpZiAobWF0Y2hlZFBhZ2VSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHN0ZDo6c3RhYmxlX3NvcnQobWF0Y2hlZFBhZ2VSdWxlcy5iZWdpbigpLCBtYXRjaGVkUGFnZVJ1
bGVzLmVuZCgpLCBjb21wYXJlUGFnZVJ1bGVzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtYXRjaGVkUGFnZVJ1bGVzLnNpemUoKTsgaSsrKQotICAgICAgICBhZGRNYXRjaGVkUHJv
cGVydGllcyhyZXN1bHQsIG1hdGNoZWRQYWdlUnVsZXNbaV0tPnByb3BlcnRpZXMoKSk7Ci19Ci0K
LXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1
bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgcnVs
ZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdl
TmFtZSkKLXsKLSAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMuc2l6ZSgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxlUGFnZSogcnVs
ZSA9IHJ1bGVzW2ldOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yTG9jYWxO
YW1lID0gcnVsZS0+c2VsZWN0b3IoKS0+dGFnKCkubG9jYWxOYW1lKCk7Ci0gICAgICAgIGlmIChz
ZWxlY3RvckxvY2FsTmFtZSAhPSBzdGFyQXRvbSAmJiBzZWxlY3RvckxvY2FsTmFtZSAhPSBwYWdl
TmFtZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBDU1NTZWxlY3Rvcjo6UHNldWRv
VHlwZSBwc2V1ZG9UeXBlID0gcnVsZS0+c2VsZWN0b3IoKS0+cHNldWRvVHlwZSgpOwotICAgICAg
ICBpZiAoKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0xlZnRQYWdlICYmICFpc0xl
ZnRQYWdlKQotICAgICAgICAgICAgfHwgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b1JpZ2h0UGFnZSAmJiBpc0xlZnRQYWdlKQotICAgICAgICAgICAgfHwgKHBzZXVkb1R5cGUgPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0UGFnZSAmJiAhaXNGaXJzdFBhZ2UpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMg
dG8gYXBwbHksIHRoZW4gaWdub3JlIGl0LgotICAgICAgICBTdHlsZVByb3BlcnR5U2V0KiBwcm9w
ZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOwotICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwg
cHJvcGVydGllcy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
Ly8gQWRkIHRoaXMgcnVsZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgICAgICBt
YXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOwotICAgIH0KLX0KLQotYm9vbCBTdHlsZVJlc29sdmVy
Ojppc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0Ci17Ci0gICAgYm9vbCBpc0ZpcnN0UGFn
ZUxlZnQgPSBmYWxzZTsKLSAgICBpZiAoIW1fcm9vdEVsZW1lbnRTdHlsZS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQotICAgICAgICBpc0ZpcnN0UGFnZUxlZnQgPSB0cnVlOwotCi0gICAgcmV0
dXJuIChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7Ci19Ci0KLWJv
b2wgU3R5bGVSZXNvbHZlcjo6aXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKLXsKLSAg
ICAvLyBGSVhNRTogSW4gY2FzZSBvZiBmb3JjZWQgbGVmdC9yaWdodCBwYWdlLCBwYWdlIGF0IGlu
ZGV4IDEgKG5vdCAwKSBjYW4gYmUgdGhlIGZpcnN0IHBhZ2UuCi0gICAgcmV0dXJuICghcGFnZUlu
ZGV4KTsKLX0KLQotU3RyaW5nIFN0eWxlUmVzb2x2ZXI6OnBhZ2VOYW1lKGludCAvKiBwYWdlSW5k
ZXggKi8pIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBwYWdlIGluZGV4IHRvIHBh
Z2UgbmFtZSBtYXBwaW5nLgotICAgIHJldHVybiAiIjsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIExp
c3RUeXBlPgotc3RhdGljIHZvaWQgY29sbGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1
bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+JiB3cmFwcGVyTWFwLCBMaXN0VHlwZSogbGlzdFR5
cGUpCi17Ci0gICAgaWYgKCFsaXN0VHlwZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVk
IHNpemUgPSBsaXN0VHlwZS0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBDU1NSdWxlKiBjc3NSdWxlID0gbGlzdFR5cGUtPml0ZW0o
aSk7Ci0gICAgICAgIGlmIChjc3NSdWxlLT5pc0ltcG9ydFJ1bGUoKSkKLSAgICAgICAgICAgIGNv
bGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUq
Pihjc3NSdWxlKS0+c3R5bGVTaGVldCgpKTsKLSAgICAgICAgZWxzZSBpZiAoY3NzUnVsZS0+aXNN
ZWRpYVJ1bGUoKSkKLSAgICAgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAs
IHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KGNzc1J1bGUpKTsKLSAgICAgICAgZWxzZSBpZiAo
Y3NzUnVsZS0+aXNSZWdpb25SdWxlKCkpCi0gICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVy
cyh3cmFwcGVyTWFwLCBzdGF0aWNfY2FzdDxXZWJLaXRDU1NSZWdpb25SdWxlKj4oY3NzUnVsZSkp
OwotICAgICAgICBlbHNlIGlmIChjc3NSdWxlLT5pc1N0eWxlUnVsZSgpKSB7Ci0gICAgICAgICAg
ICBDU1NTdHlsZVJ1bGUqIGNzc1N0eWxlUnVsZSA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+
KGNzc1J1bGUpOwotICAgICAgICAgICAgd3JhcHBlck1hcC5hZGQoY3NzU3R5bGVSdWxlLT5zdHls
ZVJ1bGUoKSwgY3NzU3R5bGVSdWxlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIHZv
aWQgY29sbGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5
bGVSdWxlPiA+JiB3cmFwcGVyTWFwLCBIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBz
aGVldFdyYXBwZXJTZXQsIFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKLXsKLSAgICBp
ZiAoIXN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gc3R5bGVTaGVldFdyYXBwZXIgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldCk7
Ci0gICAgc2hlZXRXcmFwcGVyU2V0LmFkZChzdHlsZVNoZWV0V3JhcHBlcik7Ci0gICAgY29sbGVj
dENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwgc3R5bGVTaGVldFdyYXBwZXIuZ2V0KCkpOwotfQot
Ci1zdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJl
ZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdyYXBwZXJNYXAsIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxl
U2hlZXQ+ID4mIHNoZWV0V3JhcHBlclNldCwgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYgc3R5bGVTaGVldHMgPSBkb2N1bWVudC0+
c3R5bGVTaGVldHMoKS0+dmVjdG9yKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
eWxlU2hlZXRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQg
PSBzdHlsZVNoZWV0c1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKCFzdHlsZVNoZWV0LT5pc0NTU1N0
eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb2xsZWN0Q1NTT01X
cmFwcGVycyh3cmFwcGVyTWFwLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVl
dCkpOwotICAgIH0KLSAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzaGVldFdy
YXBwZXJTZXQsIGRvY3VtZW50LT5wYWdlVXNlclNoZWV0KCkpOwotfQotCi1DU1NTdHlsZVJ1bGUq
IFN0eWxlUmVzb2x2ZXI6OmVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVS
dWxlKiBydWxlKQotewotICAgIGlmIChtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLmlzRW1w
dHkoKSkgewotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01X
cmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIHNpbXBsZURlZmF1bHRTdHls
ZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09N
V3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBkZWZhdWx0U3R5bGVTaGVl
dCk7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBw
ZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgcXVpcmtzU3R5bGVTaGVldCk7Ci0g
ICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAs
IG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgc3ZnU3R5bGVTaGVldCk7Ci0gICAgICAgIGNv
bGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVT
aGVldENTU09NV3JhcHBlclNldCwgbWF0aE1MU3R5bGVTaGVldCk7Ci0gICAgICAgIGNvbGxlY3RD
U1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENT
U09NV3JhcHBlclNldCwgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0
Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRD
U1NPTVdyYXBwZXJTZXQsIGZ1bGxzY3JlZW5TdHlsZVNoZWV0KTsKLQotICAgICAgICBjb2xsZWN0
Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRD
U1NPTVdyYXBwZXJTZXQsIGRvY3VtZW50KCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9zdHlsZVJ1
bGVUb0NTU09NV3JhcHBlck1hcC5nZXQocnVsZSkuZ2V0KCk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlLCBSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgaW5pdEVsZW1lbnQoMCk7Ci0gICAgaW5p
dEZvclN0eWxlUmVzb2x2ZSgwLCBzdHlsZSk7Ci0gICAgbV9zdHlsZSA9IHN0eWxlOwotICAgIGFw
cGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwgdmFsdWUpOwotfQotCi12b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KGlk
LCB2YWx1ZSk7Ci19Ci0KLWlubGluZSBib29sIGlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQpCi17Ci0gICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVm
dENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoKLSAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tQ29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRleHRFbXBoYXNpc0NvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZp
bGxDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoK
LSAgICAgICAgLy8gQWxzbyBhbGxvdyBzaG9ydGhhbmRzIHNvIHRoYXQgaW5oZXJpdC9pbml0aWFs
IHN0aWxsIHdvcmsuCi0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgotICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlclJpZ2h0OgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wOgotICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0
bGluZToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6Ci0jaWYgRU5B
QkxFKFNWRykKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGw6Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlTdHJva2U6Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi0vLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLXJlZ2lvbnMvI3RoZS1hdC1y
ZWdpb24tc3R5bGUtcnVsZQotLy8gRklYTUU6IGFkZCBpbmNyZW1lbnRhbCBzdXBwb3J0IGZvciBv
dGhlciByZWdpb24gc3R5bGluZyBwcm9wZXJ0aWVzLgotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZl
cjo6aXNWYWxpZFJlZ2lvblN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKLXsKLSAgICBz
d2l0Y2ggKGlkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBTVkcgaGFuZGxlcyB6b29taW5nIGluIGEgZGlmZmVy
ZW50IHdheSBjb21wYXJlZCB0byBDU1MuIFRoZSB3aG9sZSBkb2N1bWVudCBpcyBzY2FsZWQgaW5z
dGVhZAotLy8gb2YgZWFjaCBpbmRpdmlkdWFsIGxlbmd0aCB2YWx1ZSBpbiB0aGUgcmVuZGVyIHN0
eWxlIC8gdHJlZS4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGgqKCkKLS8vIG11bHRp
cGxpZXMgZWFjaCByZXNvbHZlZCBsZW5ndGggd2l0aCB0aGUgem9vbSBtdWx0aXBsaWVyIC0gc28g
Zm9yIFNWRyB3ZSBuZWVkIHRvIGRpc2FibGUgdGhhdC4KLS8vIFRob3VnaCBhbGwgQ1NTIHZhbHVl
cyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG91dGVybW9zdCA8c3ZnPiBlbGVtZW50cyAod2lkdGgv
aGVpZ2h0L2JvcmRlci9wYWRkaW5nLi4uKQotLy8gbmVlZCB0byByZXNwZWN0IHRoZSBzY2FsaW5n
LiBSZW5kZXJCb3ggKHRoZSBwYXJlbnQgY2xhc3Mgb2YgUmVuZGVyU1ZHUm9vdCkgZ3JhYnMgdmFs
dWVzIGxpa2UKLS8vIHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy8uLi4gZnJvbSB0aGUgUmVu
ZGVyU3R5bGUgLT4gZm9yIFNWRyB0aGVzZSB2YWx1ZXMgd291bGQgbmV2ZXIgc2NhbGUsCi0vLyBp
ZiB3ZSdkIHBhc3MgYSAxLjAgem9vbSBmYWN0b3IgZXZlcnlod2VyZS4gU28gd2Ugb25seSBwYXNz
IGEgem9vbSBmYWN0b3Igb2YgMS4wIGZvciBzcGVjaWZpYwotLy8gcHJvcGVydGllcyB0aGF0IGFy
ZSBOT1QgYWxsb3dlZCB0byBzY2FsZSB3aXRoaW4gYSB6b29tZWQgU1ZHIGRvY3VtZW50IChsZXR0
ZXIvd29yZC1zcGFjaW5nL2ZvbnQtc2l6ZSkuCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pv
b21SdWxlcygpCi17Ci0gICAgcmV0dXJuIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxl
bWVudCgpOwotfQotCi0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLQotc3RhdGljIGJvb2wg
Y3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUs
IFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBMZW5ndGgmIGxlbmd0aCkKLXsKLSAgICBMZW5ndGgg
d29ya2luZ0xlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRl
Z2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29u
dmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzZWxlY3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJv
b3RFbGVtZW50U3R5bGUoKSwgc2VsZWN0b3ItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0g
ICAgaWYgKHdvcmtpbmdMZW5ndGguaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICB3b3JraW5n
TGVuZ3RoLnNldFF1aXJrKHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSk7Ci0KLSAgICBs
ZW5ndGggPSB3b3JraW5nTGVuZ3RoOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9v
bCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPExlbmd0aD4mIGxl
bmd0aHMsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQotewotICAgIC8vIEhhbmRsZSAnbm9uZScu
Ci0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIGxlbmd0aHMuYXBwZW5kKExlbmd0aChVbmRlZmluZWQp
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAg
Zm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFu
Y2UoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAg
ICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBMZW5ndGggbGVuZ3RoOwotICAgICAg
ICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4oY3VyclZhbHVlKSwgc2VsZWN0b3IsIGxlbmd0aCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBsZW5ndGhzLmFwcGVuZChsZW5ndGgpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkUG9zaXRpb24oQ1NTVmFsdWUqIHZhbHVlLCBM
ZW5ndGgmIHBvc2l0aW9uKQotewotICAgIC8vIEZvciBub3csIHdlIG9ubHkgYWNjZXB0OiA8aW50
ZWdlcj4gfCAnYXV0bycKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKTsKLSAgICBwb3Np
dGlvbi5zZXRWYWx1ZShwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0jZW5kaWYKLQotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKLXsKLSAgICBib29sIGlzSW5oZXJpdCA9
IG1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOwotICAgIGJvb2wgaXNJ
bml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFtX3BhcmVudE5vZGUgJiYgdmFs
dWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7Ci0KLSAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJ
bml0aWFsKTsgLy8gaXNJbmhlcml0IC0+ICFpc0luaXRpYWwgJiYgaXNJbml0aWFsIC0+ICFpc0lu
aGVyaXQKLQotICAgIGlmICghYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgJiYgKCFhcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3Bl
cnR5KGlkKSkpIHsKLSAgICAgICAgLy8gTGltaXQgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUg
YXBwbGllZCB0byBvbmx5IHRoZSBvbmVzIGhvbm9yZWQgYnkgOnZpc2l0ZWQuCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXNJbmhlcml0ICYmIG1fcGFyZW50U3R5bGUgJiYgIW1f
cGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1By
b3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgbV9wYXJlbnRTdHlsZS0+
c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKLQotICAgIC8vIGNoZWNrIGxv
b2t1cCB0YWJsZSBmb3IgaW1wbGVtZW50YXRpb25zIGFuZCB1c2Ugd2hlbiBhdmFpbGFibGUKLSAg
ICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSBtX3N0eWxlQnVpbGRlci5wcm9wZXJ0
eUhhbmRsZXIoaWQpOwotICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkgewotICAgICAgICBpZiAo
aXNJbmhlcml0KQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZSh0aGlzKTsK
LSAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUlu
aXRpYWxWYWx1ZSh0aGlzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlci5hcHBs
eVZhbHVlKHRoaXMsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkg
PyBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSA6IDA7Ci0KLSAgICBmbG9h
dCB6b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgLy8gV2hhdCBm
b2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIg
Y29ycmVzcG9uZGluZyBmcm9udC1lbmQKLSAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuICBTaG9y
dGhhbmRzIChlLmcuIGJvcmRlciwgYmFja2dyb3VuZCkgb2NjdXIgaW4gdGhpcyBsaXN0IGFzIHdl
bGwgYW5kCi0gICAgLy8gYXJlIG9ubHkgaGl0IHdoZW4gbWFwcGluZyAiaW5oZXJpdCIgb3IgImlu
aXRpYWwiIGludG8gZnJvbnQtZW5kIHZhbHVlcy4KLSAgICBzd2l0Y2ggKGlkKSB7Ci0vLyBsaXN0
cwotICAgIGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OgotICAgICAgICAvLyBsaXN0IG9mIHN0cmlu
ZywgdXJpLCBjb3VudGVyLCBhdHRyLCBpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW4gQ1NT
MywgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBpbmhlcml0IGNvbnRlbnQuICBJbiBDU1MyIGl0IGlz
IG5vdC4gIFRoaXMKLSAgICAgICAgLy8gbm90ZSBpcyBhIHJlbWluZGVyIHRoYXQgZXZlbnR1YWxs
eSAiaW5oZXJpdCIgbmVlZHMgdG8gYmUgc3VwcG9ydGVkLgotCi0gICAgICAgIGlmIChpc0luaXRp
YWwpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQ29udGVudCgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBib29sIGRpZFNldCA9IGZhbHNlOwotICAg
ICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGku
YWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKLSAg
ICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgewotICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0
YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7Ci0gICAg
ICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9w
ZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNl
dCk7Ci0gICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSNlbmRpZgotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9w
ZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7
Ci0gICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KGl0ZW0pOwotCi0gICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKSB7Ci0g
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNlIGJlIHNwZWNpZmllZCBmb3IgYW4g
YXR0cihmb28pPwotICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5zdHlsZVR5cGUoKSA9PSBO
T1BTRVVETykKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFN0eWxlLT5zZXRV
bmlxdWUoKTsKLSAgICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNv
bnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKLSAgICAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1
dGUoYXR0cik7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051
bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAg
ICBkaWRTZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRo
YXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQotICAgICAgICAgICAgICAg
IG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNDb3VudGVyKCkpIHsKLSAgICAg
ICAgICAgICAgICBDb3VudGVyKiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFsdWUtPmdldENvdW50
ZXJWYWx1ZSgpOwotICAgICAgICAgICAgICAgIEVMaXN0U3R5bGVUeXBlIGxpc3RTdHlsZVR5cGUg
PSBOb25lTGlzdFN0eWxlOwotICAgICAgICAgICAgICAgIGludCBsaXN0U3R5bGVJZGVudCA9IGNv
dW50ZXJWYWx1ZS0+bGlzdFN0eWxlSWRlbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAobGlzdFN0
eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgICAgICBsaXN0U3R5bGVU
eXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFs
dWVEaXNjKTsKLSAgICAgICAgICAgICAgICBPd25QdHI8Q291bnRlckNvbnRlbnQ+IGNvdW50ZXIg
PSBhZG9wdFB0cihuZXcgQ291bnRlckNvbnRlbnQoY291bnRlclZhbHVlLT5pZGVudGlmaWVyKCks
IGxpc3RTdHlsZVR5cGUsIGNvdW50ZXJWYWx1ZS0+c2VwYXJhdG9yKCkpKTsKLSAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwotICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29udGVudChDTE9TRV9RVU9URSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICAgICAgZGlk
U2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRDb250ZW50KE5PX09QRU5fUVVPVEUsIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVOb0Nsb3NlUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUt
PnNldENvbnRlbnQoTk9fQ0xPU0VfUVVPVEUsIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgICAg
IGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbCBhbmQgbm9uZSBkbyBu
b3QgaGF2ZSBhbnkgZWZmZWN0LgotICAgICAgICAgICAgICAgICAgICB7fQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWRpZFNldCkKLSAg
ICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQ29udGVudCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNhc2UgQ1NTUHJvcGVydHlRdW90ZXM6Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsK
LSAgICAgICAgICAgIGlmIChtX3BhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUt
PnNldFF1b3RlcyhtX3BhcmVudFN0eWxlLT5xdW90ZXMoKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0UXVvdGVzKDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBs
aXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwotICAgICAgICAgICAgUXVv
dGVzRGF0YSogZGF0YSA9IFF1b3Rlc0RhdGE6OmNyZWF0ZShsaXN0LT5sZW5ndGgoKSk7Ci0gICAg
ICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBPdXQgb2YgbWVt
b3J5Ci0gICAgICAgICAgICBTdHJpbmcqIHF1b3RlcyA9IGRhdGEtPmRhdGEoKTsKLSAgICAgICAg
ICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IGxpc3Q7IGkuaGFzTW9yZSgpOyBpLmFk
dmFuY2UoKSkgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAg
ICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihpdGVtKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5n
KCkpOwotICAgICAgICAgICAgICAgIHF1b3Rlc1tpLmluZGV4KCldID0gcHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3N0eWxlLT5z
ZXRRdW90ZXMoYWRvcHRSZWYoZGF0YSkpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlKSB7Ci0gICAgICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSk7Ci0g
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25l
KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhhZG9wdFJlZihRdW90ZXNEYXRh
OjpjcmVhdGUoMCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUZvbnRGYW1pbHk6IHsKLSAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFuZCBpZHMK
LSAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBh
cmVudEZvbnREZXNjcmlwdGlvbiA9IG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwot
ICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNG
YW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7Ci0gICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZh
bWlseSgpKTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQo
cGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKLSAgICAgICAgICAgIHNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0g
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0
aGUgZ2VuZXJpYyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlCi0gICAgICAgICAgICAvLyB0
byBub24tbW9ub3NwYWNlLgotICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3Jk
U2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpCi0gICAgICAg
ICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQo
bV9jaGVja2VyLmRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5r
ZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2UpKTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRHZW5lcmljRmFtaWx5KGluaXRpYWxEZXNjLmdlbmVyaWNGYW1pbHkoKSk7Ci0gICAgICAgICAg
ICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5SXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoaW5pdGlhbERlc2MuZmlyc3RGYW1p
bHkoKSk7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdmFsdWUtPmlz
VmFsdWVMaXN0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAg
Rm9udEZhbWlseSYgZmlyc3RGYW1pbHkgPSBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsK
LSAgICAgICAgRm9udEZhbWlseSogY3VyckZhbWlseSA9IDA7Ci0KLSAgICAgICAgLy8gQmVmb3Jl
IG1hcHBpbmcgaW4gYSBuZXcgZm9udC1mYW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0
aGUgZ2VuZXJpYyBmYW1pbHkuCi0gICAgICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVs
dFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpOwotICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5
KTsKLQotICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNN
b3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFs
dWUoKTsKLSAgICAgICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRl
bnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7Ci0gICAgICAg
ICAgICBBdG9taWNTdHJpbmcgZmFjZTsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwotICAgICAgICAgICAgaWYgKGNvbnRl
bnRWYWx1ZS0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBmYWNlID0gY29udGVudFZhbHVl
LT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgZWxzZSBpZiAoc2V0dGluZ3MpIHsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Qm9keToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZhY2UgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNl
cmlmOgotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHNlcmlmRmFtaWx5OwotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERl
c2NyaXB0aW9uOjpTZXJpZkZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZhY2UgPSBzYW5zU2VyaWZGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlNh
bnNTZXJpZkZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmYWNlID0gY3Vyc2l2ZUZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUZhbnRhc3k6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gZmFudGFz
eUZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5l
cmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1vbm9z
cGFjZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBtb25vc3BhY2VGYW1pbHk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShG
b250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3Jh
cGg6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gcGljdG9ncmFwaEZhbWlseTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZv
bnREZXNjcmlwdGlvbjo6UGljdG9ncmFwaEZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICghZmFjZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWN1cnJGYW1pbHkp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmlsbGluZyBpbiB0aGUgZmlyc3QgZmFtaWx5Lgot
ICAgICAgICAgICAgICAgICAgICBmaXJzdEZhbWlseS5zZXRGYW1pbHkoZmFjZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZpcnN0RmFtaWx5LmFwcGVuZEZhbWlseSgwKTsgLy8gUmVtb3ZlIGFueSBp
bmhlcml0ZWQgZmFtaWx5LWZhbGxiYWNrIGxpc3QuCi0gICAgICAgICAgICAgICAgICAgIGN1cnJG
YW1pbHkgPSAmZmlyc3RGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJc1NwZWNpZmllZEZvbnQoZm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSA9PSBG
b250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hh
cmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0ZhbWlseS0+
c2V0RmFtaWx5KGZhY2UpOwotICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5LT5hcHBlbmRG
YW1pbHkobmV3RmFtaWx5KTsKLSAgICAgICAgICAgICAgICAgICAgY3VyckZhbWlseSA9IG5ld0Zh
bWlseS5nZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBXZSBjYW4ndCBjYWxsIHVzZUZpeGVkRGVmYXVsdFNpemUoKSB1bnRpbCBh
bGwgbmV3IGZvbnQgZmFtaWxpZXMgaGF2ZSBiZWVuIGFkZGVkCi0gICAgICAgIC8vIElmIGN1cnJG
YW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVhc3Qgb25lIGZhbWlseSBvbiB0aGlz
IGRlc2NyaXB0aW9uLgotICAgICAgICBpZiAoY3VyckZhbWlseSkgewotICAgICAgICAgICAgaWYg
KGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhl
ZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpCi0gICAgICAg
ICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQo
bV9jaGVja2VyLmRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5r
ZXl3b3JkU2l6ZSgpIC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7Ci0KLSAg
ICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0vLyBzaG9ydGhhbmQgcHJvcGVydGllcwotICAgIGNh
c2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgotICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAg
ICAgICAgICBtX3N0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKLSAgICAgICAgICAgIG1f
c3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRCYWNrZ3Jv
dW5kTGF5ZXJzKCptX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKG1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRD
b2xvcigpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2s6Ci0gICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxl
LT5jbGVhck1hc2tMYXllcnMoKTsKLSAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAg
ICAgICAgbV9zdHlsZS0+aW5oZXJpdE1hc2tMYXllcnMoKm1fcGFyZW50U3R5bGUtPm1hc2tMYXll
cnMoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKLSAgICAg
ICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TGluZUhlaWdodChtX3BhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkpOwotICAg
ICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotICAgICAgICAgICAgc2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7
Ci0gICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+
c2V0dGluZ3MoKTsKLSAgICAgICAgICAgIEFTU0VSVChzZXR0aW5ncyk7IC8vIElmIHdlJ3JlIGRv
aW5nIHN0eWxlIHJlc29sdXRpb24sIHRoaXMgZG9jdW1lbnQgc2hvdWxkIGFsd2F5cyBiZSBpbiBh
IGZyYW1lIGFuZCB0aHVzIGhhdmUgc2V0dGluZ3MKLSAgICAgICAgICAgIGlmICghc2V0dGluZ3Mp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbjsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFt
aWx5KEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHkpOwotICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkp
OwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KG1fY2hlY2tl
ci5kb2N1bWVudCgpLT5wcmludGluZygpKTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc3RhbmRhcmRGb250RmFtaWx5ID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCkt
PnN0YW5kYXJkRm9udEZhbWlseSgpOwotICAgICAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnRGYW1p
bHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFt
aWx5KCkuc2V0RmFtaWx5KHN0YW5kYXJkRm9udEZhbWlseSk7Ci0gICAgICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVk
aXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgICAgICAgICBzZXRGb250U2l6ZShmb250
RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NT
VmFsdWVNZWRpdW0sIGZhbHNlKSk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0
KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1fbGluZUhl
aWdodFZhbHVlID0gMDsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgp
KTsKLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKLQotICAgICAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKLSAgICAgICAgICAgIFJlbmRlclRoZW1lOjpk
ZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9u
dERlc2NyaXB0aW9uKTsKLQotICAgICAgICAgICAgLy8gRG91YmxlLWNoZWNrIGFuZCBzZWUgaWYg
dGhlIHRoZW1lIGRpZCBhbnl0aGluZy4gIElmIG5vdCwgZG9uJ3QgYm90aGVyIHVwZGF0aW5nIHRo
ZSBmb250LgotICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSByZW5kZXJpbmcgbW9kZSBhbmQg
cHJpbnRlciBmb250IHNldHRpbmdzIGFyZSB1cGRhdGVkLgotICAgICAgICAgICAgICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVChzZXR0aW5ncyk7IC8vIElmIHdlJ3JlIGRvaW5nIHN0eWxlIHJlc29s
dXRpb24sIHRoaXMgZG9jdW1lbnQgc2hvdWxkIGFsd2F5cyBiZSBpbiBhIGZyYW1lIGFuZCB0aHVz
IGhhdmUgc2V0dGluZ3MKLSAgICAgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJl
bmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwotICAgICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChtX2NoZWNrZXIuZG9jdW1lbnQo
KS0+cHJpbnRpbmcoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFj
dG9yLgotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0
Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUobV9jaGVja2VyLmRvY3VtZW50KCksIG1fc3R5
bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRp
b24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwotICAgICAgICAgICAgICAg
IHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBGb250
VmFsdWUgKmZvbnQgPSBzdGF0aWNfY2FzdDxGb250VmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgICAg
ICBpZiAoIWZvbnQtPnN0eWxlIHx8ICFmb250LT52YXJpYW50IHx8ICFmb250LT53ZWlnaHQgfHwK
LSAgICAgICAgICAgICAgICAgIWZvbnQtPnNpemUgfHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZv
bnQtPmZhbWlseSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAg
ICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQu
Z2V0KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQs
IGZvbnQtPndlaWdodC5nZXQoKSk7Ci0gICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcHJvcGVy
dGllcyBjYW4gZGlydHkgb3VyIGZvbnQgYnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZv
bnQncwotICAgICAgICAgICAgLy8gcHJvcGVydGllcyBiYWNrLCB3aGljaCBpcyBzYWZlLiBIb3dl
dmVyIGlmIGZvbnQtc2l6ZSBpcyB1c2luZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxsCi0gICAgICAg
ICAgICAvLyBuZWVkIHF1ZXJ5IHRoZSBkaXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0byBnZXQgdGhl
IGNvbXB1dGVkIHNpemUuIFRvIGJlIHNhZmUgaW4gdGhpcwotICAgICAgICAgICAgLy8gY2FzZSwg
bGV0J3MganVzdCB1cGRhdGUgdGhlIGZvbnQgbm93LgotICAgICAgICAgICAgdXBkYXRlRm9udCgp
OwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5z
aXplLmdldCgpKTsKLQotICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBmb250LT5saW5l
SGVpZ2h0LmdldCgpOwotCi0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9u
dEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBDU1MzIFByb3BlcnRpZXMKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRv
dzoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm94U2hhZG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3hTaGFkb3c6IHsKLSAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAg
aWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICByZXR1cm4g
bV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhtX3BhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkgPyBhZG9w
dFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpKSkgOiBudWxs
cHRyKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0eWxlLT5zZXRCb3hTaGFkb3cobV9wYXJlbnRT
dHlsZS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHls
ZS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0lu
aXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCi0gICAgICAgICAgICBy
ZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gbV9zdHlsZS0+c2V0VGV4dFNoYWRv
dyhudWxscHRyKSA6IG1fc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKLQotICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZh
bmNlKCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7Ci0g
ICAgICAgICAgICBpZiAoIWN1cnJWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2Fz
dDxTaGFkb3dWYWx1ZSo+KGN1cnJWYWx1ZSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngt
PmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0
b3IpOwotICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5
bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCBi
bHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgp
LCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKLSAgICAgICAgICAgIGludCBz
cHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50Pihz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKLSAgICAgICAgICAg
IFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwotICAgICAgICAgICAg
Q29sb3IgY29sb3I7Ci0gICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAg
ICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtX3N0eWxlKQotICAgICAgICAgICAgICAgIGNvbG9yID0gbV9z
dHlsZS0+Y29sb3IoKTsKLQotICAgICAgICAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0Rh
dGEgPSBhZG9wdFB0cihuZXcgU2hhZG93RGF0YShJbnRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFk
LCBzaGFkb3dTdHlsZSwgaWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlz
VmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KSk7Ci0gICAgICAgICAgICBpZiAo
aWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0
aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNl
KCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmly
c3QgZW50cnkKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKGJveFJlZmxlY3QsIEJveFJlZmxlY3QpCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5p
dGlhbEJveFJlZmxlY3QoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIXZhbHVlLT5pc1JlZmxlY3RWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIENTU1JlZmxlY3RWYWx1ZSogcmVmbGVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UmVmbGVjdFZhbHVlKj4odmFsdWUpOwotICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiBy
ZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgcmVmbGVjdGlv
bi0+c2V0RGlyZWN0aW9uKHJlZmxlY3RWYWx1ZS0+ZGlyZWN0aW9uKCkpOwotICAgICAgICBpZiAo
cmVmbGVjdFZhbHVlLT5vZmZzZXQoKSkKLSAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNl
dChyZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29u
dmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOwotICAgICAgICBOaW5lUGllY2VJ
bWFnZSBtYXNrOwotICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwotICAgICAgICBtYXBO
aW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOwotICAgICAgICBy
ZWZsZWN0aW9uLT5zZXRNYXNrKG1hc2spOwotCi0gICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxl
Y3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNh
c2UgQ1NTUHJvcGVydHlPcGFjaXR5OgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TF9BTkRfUFJJTUlUSVZFKG9wYWNpdHksIE9wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2U6IC8vIE9ubHkg
dXNlZCBpbiBAZm9udC1mYWNlIHJ1bGVzLgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVDb2xvcihtX3BhcmVudFN0eWxlLT5jb2x1bW5S
dWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSA6
IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1u
UnVsZVN0eWxlKG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1bGVTdHlsZSgpKTsKLSAgICAgICAgICAg
IG1fc3R5bGUtPnNldENvbHVtblJ1bGVXaWR0aChtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlV2lk
dGgoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQotICAgICAgICAg
ICAgbV9zdHlsZS0+cmVzZXRDb2x1bW5SdWxlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZToKLSAgICAgICAgaWYgKCFtX3BhcmVudE5vZGUgfHwg
IXZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG1fc3R5bGUtPnNldE1hcnF1ZWVEaXJlY3Rpb24obV9wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVj
dGlvbigpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtX3BhcmVudFN0
eWxlLT5tYXJxdWVlSW5jcmVtZW50KCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3Bl
ZWQobV9wYXJlbnRTdHlsZS0+bWFycXVlZVNwZWVkKCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRN
YXJxdWVlTG9vcENvdW50KG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7Ci0gICAg
ICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVCZWhhdmlvcihtX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVo
YXZpb3IoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
cXVlZVJlcGV0aXRpb246IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFy
cXVlZUxvb3BDb3VudCwgTWFycXVlZUxvb3BDb3VudCkKLSAgICAgICAgaWYgKCFwcmltaXRpdmVW
YWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRN
YXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCi0gICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKQotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVT
cGVlZDogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVlU3BlZWQs
IE1hcnF1ZWVTcGVlZCkKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKGludCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVNsb3c6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVT
cGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4K
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUZhc3Q6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7
IC8vIDEwbXNlYy4gU3VwZXIgZmFzdC4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQot
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOwotICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3Vu
dCBzdXBwb3J0LgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2
ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDogewotICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChtYXJxdWVlSW5jcmVtZW50LCBNYXJxdWVlSW5jcmVtZW50KQotICAg
ICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
U21hbGw6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQo
TGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBU
aGUgV2luSUUgZGVmYXVsdC4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlOgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4KLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChwcmltaXRp
dmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKLSAgICAgICAgICAgIGlmICgh
bWFycXVlZUxlbmd0aC5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dE1hcnF1ZWVJbmNyZW1lbnQobWFycXVlZUxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUNsYW1wOgotICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKGxpbmVDbGFtcCwgTGlu
ZUNsYW1wKQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvY2Fs
ZTogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsb2NhbGUsIExvY2FsZSk7
Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUobnVsbEF0b20pOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVl
KCkpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9j
YWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX3N0eWxlLT5sb2NhbGUoKSkpOwotICAg
ICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6IHsKLSAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dFNpemVBZGp1c3QsIFRleHRTaXpl
QWRqdXN0KQotICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2V0VGV4dFNpemVBZGp1
c3QocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdERhc2hib2FyZFJlZ2lvbjogewotICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTChkYXNoYm9hcmRSZWdpb25zLCBEYXNoYm9hcmRSZWdpb25zKQotICAgICAg
ICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9h
cmRSZWdpb25zKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
RGFzaGJvYXJkUmVnaW9uICpyZWdpb24gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RGFzaGJvYXJkUmVn
aW9uVmFsdWUoKTsKLSAgICAgICAgaWYgKCFyZWdpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgRGFzaGJvYXJkUmVnaW9uICpmaXJzdCA9IHJlZ2lvbjsKLSAgICAgICAgd2hpbGUg
KHJlZ2lvbikgewotICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0aChy
ZWdpb24tPnRvcCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAg
TGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3R5bGUo
KSwgbV9yb290RWxlbWVudFN0eWxlKTsKLSAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252
ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5ib3R0b20oKSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlKTsKLSAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lv
bi0+bGVmdCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwotCi0gICAgICAgICAgICBp
ZiAodG9wLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgdG9wID0gTGVuZ3RoKCk7Ci0g
ICAgICAgICAgICBpZiAocmlnaHQuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICByaWdo
dCA9IExlbmd0aCgpOwotICAgICAgICAgICAgaWYgKGJvdHRvbS5pc1VuZGVmaW5lZCgpKQotICAg
ICAgICAgICAgICAgIGJvdHRvbSA9IExlbmd0aCgpOwotICAgICAgICAgICAgaWYgKGxlZnQuaXNV
bmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBsZWZ0ID0gTGVuZ3RoKCk7Ci0KLSAgICAgICAg
ICAgIGlmIChyZWdpb24tPm1faXNDaXJjbGUpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9s
YWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6
IHRydWUpOwotICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQotICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJl
Z2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVm
dCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKLSAgICAgICAgICAgIHJlZ2lvbiA9
IHJlZ2lvbi0+bV9uZXh0LmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9lbGVtZW50LT5k
b2N1bWVudCgpLT5zZXRIYXNEYXNoYm9hcmRSZWdpb25zKHRydWUpOwotCi0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZVdp
ZHRoOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRTdHJva2VXaWR0
aCwgVGV4dFN0cm9rZVdpZHRoKQotICAgICAgICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgICAgIHN3
aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVUaGluOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1lZGl1bToKLSAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVUaGljazogewotICAgICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSAx
LjAgLyA0ODsKLSAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVNZWRpdW0pCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOwotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlVGhpY2spCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCAqPSA1OwotICAgICAgICAgICAg
ICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBtX3N0eWxlLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06IHsKLSAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodHJhbnNmb3JtLCBUcmFuc2Zvcm0pOwotICAgICAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGNyZWF0ZVRyYW5zZm9y
bU9wZXJhdGlvbnModmFsdWUsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9u
cyk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmU6IHsK
LSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocGVyc3BlY3RpdmUsIFBlcnNwZWN0
aXZlKQotCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9u
ZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUoMCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBwZXJzcGVjdGl2ZVZhbHVlOwot
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICBwZXJz
cGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAvLyBGb3IgYmFja3dhcmQg
Y29tcGF0aWJpbGl0eSwgdHJlYXQgdmFsdWVsZXNzIG51bWJlcnMgYXMgcHguCi0gICAgICAgICAg
ICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRpdmVW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCktPmNvbXB1
dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChwZXJz
cGVjdGl2ZVZhbHVlID49IDAuMGYpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2
ZShwZXJzcGVjdGl2ZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOgotICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAg
ICAgICAgbV9zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5o
ZXJpdCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRBbmltYXRpb25zKG1fcGFyZW50U3R5
bGUtPmFuaW1hdGlvbnMoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VHJhbnNpdGlvbjoKLSAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1f
c3R5bGUtPmNsZWFyVHJhbnNpdGlvbnMoKTsKLSAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQot
ICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdFRyYW5zaXRpb25zKG1fcGFyZW50U3R5bGUtPnRy
YW5zaXRpb25zKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50
ZXJFdmVudHM6Ci0gICAgewotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICAgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzY1NjEwNzc+IFdvcmsgYXJvdW5kIHRoZSBTdG9ja3Mgd2lkZ2V0
J3MgbWlzdXNlIG9mIHRoZQotICAgICAgICAvLyBwb2ludGVyLWV2ZW50cyBwcm9wZXJ0eSBieSBu
b3QgYXBwbHlpbmcgaXQgaW4gRGFzaGJvYXJkLgotICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKLSAgICAgICAgaWYgKHNldHRpbmdz
ICYmIHNldHRpbmdzLT51c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMX0FORF9QUklNSVRJVkUocG9pbnRlckV2ZW50cywgUG9pbnRlckV2ZW50cykKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogewotICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTCh0YXBIaWdobGlnaHRDb2xvciwgVGFwSGlnaGxpZ2h0Q29sb3IpOwotICAg
ICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Q29sb3IgY29sID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpOwotICAg
ICAgICBtX3N0eWxlLT5zZXRUYXBIaWdobGlnaHRDb2xvcihjb2wpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElORykKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6IHsKLSAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwodXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZywgVXNlVG91Y2hPdmVy
Zmxvd1Njcm9sbGluZyk7Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgbV9zdHlsZS0+c2V0VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRvdWNoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgotICAgICAg
ICByZXR1cm47Ci0gICAgLy8gRGlyZWN0aW9uYWwgcHJvcGVydGllcyBhcmUgcmVzb2x2ZWQgYnkg
cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoKSBiZWZvcmUgdGhlIHN3aXRjaC4KLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJFbmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kU3R5
bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZFdpZHRoOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyU3RhcnRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRT
dHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRXaWR0aDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3JkZXJCZWZvcmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
QmVmb3JlU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZVdpZHRo
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlcjoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyQWZ0ZXJTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJX
aWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luRW5kOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXJnaW5TdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
Z2luQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRlcjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQ29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5Ub3BDb2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQWZ0ZXJD
b2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdFbmQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFBhZGRpbmdTdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGlu
Z0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0FmdGVyOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRMb2dpY2FsV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdExvZ2ljYWxIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2ljYWxX
aWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNhbEhlaWdodDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXhMb2dpY2FsSGVpZ2h0OgotICAgIHsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBu
ZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgbV9z
dHlsZS0+ZGlyZWN0aW9uKCksIG1fc3R5bGUtPndyaXRpbmdNb2RlKCkpOwotICAgICAgICBBU1NF
UlQobmV3SWQgIT0gaWQpOwotICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFs
dWUpOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0cmV0Y2g6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVBhZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRMaW5lVGhyb3VnaE1vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhy
b3VnaFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hXaWR0aDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
T3ZlcmxpbmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lTW9kZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRPdmVybGluZVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRVbmRlcmxpbmVNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5l
U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVXaWR0aDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Rm9udFNpemVEZWx0YToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3Q6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTdHJva2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpczoKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gQ1NTIFRleHQgTGF5b3V0IE1vZHVsZSBMZXZlbCAzOiBWZXJ0
aWNhbCB3cml0aW5nIHN1cHBvcnQKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01v
ZGU6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh3
cml0aW5nTW9kZSwgV3JpdGluZ01vZGUpCi0gICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3Qgb2sg
dG8gbW9kaWZ5IGRvY3VtZW50IHN0YXRlIHdoaWxlIGFwcGx5aW5nIHN0eWxlLgotICAgICAgICBp
ZiAoIWlzSW5oZXJpdCAmJiAhaXNJbml0aWFsICYmIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQgPT0g
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0
cnVlKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRp
b24obV9zdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhvcml6b250YWwgOiBWZXJ0
aWNhbCk7Ci0gICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCb3hD
b250YWluOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpbmVCb3hDb250
YWluLCBMaW5lQm94Q29udGFpbikKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TGluZUJveENvbnRhaW4oTGluZUJveENvbnRhaW5Ob25lKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdmFsdWUtPmlzQ1NTTGluZUJveENv
bnRhaW5WYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU0xpbmVCb3hD
b250YWluVmFsdWUqIGxpbmVCb3hDb250YWluVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NMaW5lQm94
Q29udGFpblZhbHVlKj4odmFsdWUpOwotICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFp
bihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lkZToKLSAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwod3JhcFNoYXBlSW5zaWRlLCBXcmFwU2hhcGVJbnNpZGUpOwot
ICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0V3JhcFNoYXBlSW5zaWRlKDApOwotICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0V3JhcFNo
YXBlSW5zaWRlKHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpOwotICAgICAgICByZXR1
cm47Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlOgotICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh3cmFwU2hhcGVPdXRzaWRlLCBXcmFwU2hhcGVPdXRz
aWRlKTsKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykK
LSAgICAgICAgICAgIG1fc3R5bGUtPnNldFdyYXBTaGFwZU91dHNpZGUoMCk7Ci0gICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkpCi0gICAgICAgICAgICBtX3N0eWxlLT5z
ZXRXcmFwU2hhcGVPdXRzaWRlKHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpOwotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBDU1MgRm9udHMgTW9kdWxlIExldmVsIDMKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Rm9udEZlYXR1cmVTZXR0aW5nczogewotICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3Jt
YWwpIHsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihtX3N0eWxlLT5mb250RGVzY3Jp
cHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIENTU1ZhbHVlTGlzdCogbGlz
dCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgUmVmUHRyPEZv
bnRGZWF0dXJlU2V0dGluZ3M+IHNldHRpbmdzID0gRm9udEZlYXR1cmVTZXR0aW5nczo6Y3JlYXRl
KCk7Ci0gICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgaWYgKCFpdGVtLT5pc0Zv
bnRGZWF0dXJlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IEZvbnRGZWF0dXJlVmFsdWUqIGZlYXR1cmUgPSBzdGF0aWNfY2FzdDxGb250RmVhdHVyZVZhbHVl
Kj4oaXRlbSk7Ci0gICAgICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZvbnRGZWF0dXJlKGZlYXR1
cmUtPnRhZygpLCBmZWF0dXJlLT52YWx1ZSgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEZlYXR1cmVTZXR0aW5ncyhzZXR0aW5ncy5yZWxlYXNlKCkpOwotICAgICAg
ICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0RmlsdGVyOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZpbHRlciwg
RmlsdGVyKTsKLSAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBp
ZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlLCBvcGVyYXRpb25zKSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEZpbHRlcihvcGVyYXRp
b25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfR1JJ
RF9MQVlPVVQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5zOiB7Ci0gICAg
ICAgIFZlY3RvcjxMZW5ndGg+IGxlbmd0aHM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNr
TGlzdCh2YWx1ZSwgbGVuZ3RocywgdGhpcykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG1fc3R5bGUtPnNldEdyaWRDb2x1bW5zKGxlbmd0aHMpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93czogewotICAgICAgICBWZWN0b3I8
TGVuZ3RoPiBsZW5ndGhzOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUs
IGxlbmd0aHMsIHRoaXMpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5z
ZXRHcmlkUm93cyhsZW5ndGhzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uOiB7Ci0gICAgICAgIExlbmd0aCBjb2x1bW47Ci0g
ICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1bW4pKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93
OiB7Ci0gICAgICAgIExlbmd0aCByb3c7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9u
KHZhbHVlLCByb3cpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRH
cmlkSXRlbVJvdyhyb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICAv
LyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgU3R5bGVCdWlsZGVyIGxv
b2t1cCB0YWJsZS4KLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQ6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZFBvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRp
b25YOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUmVwZWF0WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFk6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxl
ZnRSYWRpdXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlT3V0c2V0OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVJlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTbGljZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckxlZnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJMZWZ0V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJhZGl1czoKLSAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJp
Z2h0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
clNwYWNpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclN0eWxlOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJUb3A6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJUb3BSaWdodFJhZGl1czoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9w
U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3hTaXppbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNhcHRpb25TaWRl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlDbGVhcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvdW50ZXJJ
bmNyZW1lbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvdW50ZXJSZXNldDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5Q3Vyc29yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eURpc3BsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUZsb2F0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
VmFyaWFudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFdlaWdodDoKLSAgICBjYXNlIENTU1By
b3BlcnR5SGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZVJlbmRlcmluZzoKLSAgICBj
YXNlIENTU1Byb3BlcnR5TGVmdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZzoK
LSAgICBjYXNlIENTU1Byb3BlcnR5TGluZUhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlz
dFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5TGlzdFN0eWxlUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHls
ZVR5cGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
TWFyZ2luQm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlNYXJnaW5SaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luVG9wOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdp
ZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eU1pbldpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPcnBoYW5zOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlPdXRsaW5lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVT
dHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVdpZHRoOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlPdmVyZmxvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dYOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlPdmVyZmxvd1k6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmc6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRp
bmdMZWZ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQ6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVBhZGRpbmdUb3A6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVBhZ2VCcmVha0luc2lkZToKLSAgICBjYXNlIENTU1Byb3BlcnR5UG9zaXRpb246Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVJlc2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVNwZWFrOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlUYWJsZUxheW91dDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEFsaWduOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dEluZGVudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJmbG93OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0UmVuZGVyaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VHJhbnNm
b3JtOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUb3A6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNv
ZGVCaWRpOgotICAgIGNhc2UgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlWaXNpYmlsaXR5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25E
ZWxheToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlvbjoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uRmlsbE1vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25OYW1lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25QbGF5U3RhdGU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBcHBlYXJhbmNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRBc3BlY3RSYXRpbzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2ZhY2VWaXNp
YmlsaXR5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QmFja2dyb3VuZE9yaWdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QmFja2dyb3VuZFNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmc6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJSYWRpdXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2Fs
U3BhY2luZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94QWxpZ246Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJveERpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm94RmxleDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RmxleEdyb3VwOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3hMaW5lczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm94T3JkaW5hbEdyb3VwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmllbnQ6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFBhY2s6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdENvbG9yQ29ycmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQXhp
czoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtBZnRlcjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5Db3VudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uR2FwOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtblJ1bGVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVs
ZVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5zOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRDb2x1bW5TcGFuOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5XaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleDoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0RmxleEFsaWduOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4RGly
ZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4RmxvdzoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0RmxleEl0ZW1BbGlnbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
RmxleExpbmVQYWNrOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4T3JkZXI6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhQYWNrOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRGbGV4V3JhcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxvd0Zyb206Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dJbnRvOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRG
b250S2VybmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEhpZ2hsaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlw
aGVuYXRlQ2hhcmFjdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1p
dEFmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEJlZm9yZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lczoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0SHlwaGVuczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGlu
ZUFsaWduOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdExpbmVHcmlkOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5l
U25hcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZURpcmVjdGlvbjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrQXR0YWNobWVudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveElt
YWdlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VPdXRzZXQ6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVJlcGVhdDoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFza0JveEltYWdlU2xpY2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tCb3hJbWFnZVNvdXJjZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveElt
YWdlV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrQ29tcG9zaXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrSW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW46Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza1Bvc2l0aW9uWDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uWToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tSZXBlYXRZOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFBlcnNwZWN0aXZlT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2
ZU9yaWdpblg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWToK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UHJpbnRDb2xvckFkanVzdDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0UmVnaW9uQnJlYWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJy
ZWFrSW5zaWRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25PdmVyZmxvdzoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnRsT3JkZXJpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFRleHRDb21iaW5lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFz
aXNDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb246
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0T3JpZW50YXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1cml0
eToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybU9yaWdpblg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bU9yaWdpblk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybVN0eWxlOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb25EdXJhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblBy
b3BlcnR5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rp
b246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRVc2VyTW9kaWZ5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyU2Vs
ZWN0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRXcmFwRmxvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcE1hcmdpbjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcFBhZGRpbmc6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFdyYXBUaHJvdWdoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXaWRvd3M6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkQnJlYWs6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRT
cGFjaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkV3JhcDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5WkluZGV4OgotICAgIGNhc2UgQ1NTUHJvcGVydHlab29tOgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotI2lmIEVOQUJMRShTVkcpCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgLy8gVHJ5IHRoZSBTVkcgcHJvcGVydGllcwotICAgICAgICBhcHBseVNWR1By
b3BlcnR5KGlkLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIH0KLX0KLQot
dm9pZCBTdHlsZVJlc29sdmVyOjptYXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxs
TGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRp
YWxWYWx1ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KEZpbGxMYXllcjo6aW5p
dGlhbEZpbGxBdHRhY2htZW50KGxheWVyLT50eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSkgewotICAgICAgICBjYXNlIENTU1ZhbHVlRml4ZWQ6Ci0gICAgICAgICAgICBs
YXllci0+c2V0QXR0YWNobWVudChGaXhlZEJhY2tncm91bmRBdHRhY2htZW50KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlU2Nyb2xsOgotICAgICAgICAgICAgbGF5
ZXItPnNldEF0dGFjaG1lbnQoU2Nyb2xsQmFja2dyb3VuZEF0dGFjaG1lbnQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMb2NhbDoKLSAgICAgICAgICAgIGxheWVy
LT5zZXRBdHRhY2htZW50KExvY2FsQmFja2dyb3VuZEF0dGFjaG1lbnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotfQot
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZh
bHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldENsaXAoRmlsbExheWVyOjppbml0aWFsRmlsbENs
aXAobGF5ZXItPnR5cGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKLSAgICBsYXllci0+c2V0Q2xpcCgqcHJpbWl0aXZlVmFsdWUpOwotfQotCi12
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxDb21wb3NpdGUoQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSkgewotICAgICAgICBsYXllci0+c2V0Q29tcG9zaXRlKEZpbGxMYXllcjo6aW5pdGlh
bEZpbGxDb21wb3NpdGUobGF5ZXItPnR5cGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBsYXllci0+c2V0Q29tcG9zaXRlKCpwcmltaXRp
dmVWYWx1ZSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbE9yaWdpbihDU1NQcm9w
ZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRPcmlnaW4oRmlsbExh
eWVyOjppbml0aWFsRmlsbE9yaWdpbihsYXllci0+dHlwZSgpKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGxheWVyLT5zZXRPcmlnaW4oKnBy
aW1pdGl2ZVZhbHVlKTsKLX0KLQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4odmFs
dWUpKTsKLQotICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpCi0gICAgICAg
IHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0
PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPih2YWx1ZSkpOwotCi0jaWYgRU5BQkxFKENTU19JTUFH
RV9TRVQpCi0gICAgaWYgKHZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
IHNldE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRW
YWx1ZSo+KHZhbHVlKSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiAwOwotfQotCi1QYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKLXsKLSAgICBSZWZQdHI8
U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKLSAgICBp
ZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fcGVuZGluZ0lt
YWdlUHJvcGVydGllcy5hZGQocHJvcGVydHkpOwotICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7
Ci19Ci0KLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9y
VmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsKLSAgICAgICAg
bV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7Ci0gICAgICAgIHJldHVybiBT
dHlsZVBlbmRpbmdJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0lNQUdF
X1NFVCkKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5n
RnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUqIHZhbHVl
KQotewotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRp
bmdJbWFnZVNldChkb2N1bWVudCgpKTsKLSAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGlu
Z0ltYWdlKCkpCi0gICAgICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5hZGQocHJvcGVydHkp
OwotICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBTdHlsZVJl
c29sdmVyOjptYXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgRmlsbExheWVyKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUo
KSkgewotICAgICAgICBsYXllci0+c2V0SW1hZ2UoRmlsbExheWVyOjppbml0aWFsRmlsbEltYWdl
KGxheWVyLT50eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxheWVyLT5z
ZXRJbWFnZShzdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOwotfQotCi12b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hcEZpbGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAg
ICAgICAgbGF5ZXItPnNldFJlcGVhdFgoRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFgobGF5
ZXItPnR5cGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKLSAgICBsYXllci0+c2V0UmVwZWF0WCgqcHJpbWl0aXZlVmFsdWUpOwotfQotCi12b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxSZXBlYXRZKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciog
bGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVl
KCkpIHsKLSAgICAgICAgbGF5ZXItPnNldFJlcGVhdFkoRmlsbExheWVyOjppbml0aWFsRmlsbFJl
cGVhdFkobGF5ZXItPnR5cGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKLSAgICBsYXllci0+c2V0UmVwZWF0WSgqcHJpbWl0aXZlVmFsdWUpOwot
fQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxM
YXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVOb25lKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNvbnRhaW4pCi0gICAgICAgIGxh
eWVyLT5zZXRTaXplVHlwZShDb250YWluKTsKLSAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNvdmVyKQotICAgICAgICBsYXllci0+c2V0U2l6ZVR5cGUo
Q292ZXIpOwotICAgIGVsc2UKLSAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVMZW5ndGgp
OwotCi0gICAgTGVuZ3RoU2l6ZSBiID0gRmlsbExheWVyOjppbml0aWFsRmlsbFNpemVMZW5ndGgo
bGF5ZXItPnR5cGUoKSk7Ci0KLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgcHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVDb250YWluIHx8IHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ292ZXIpIHsKLSAgICAgICAgbGF5ZXItPnNldFNp
emVMZW5ndGgoYik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmbG9hdCB6b29tRmFj
dG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgTGVuZ3RoIGZpcnN0TGVuZ3Ro
OwotICAgIExlbmd0aCBzZWNvbmRMZW5ndGg7Ci0KLSAgICBpZiAoUGFpciogcGFpciA9IHByaW1p
dGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
Zmlyc3QgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0KCkpOwot
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihwYWlyLT5zZWNvbmQoKSk7Ci0gICAgICAgIGZpcnN0TGVuZ3RoID0gZmlyc3Qt
PmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpOwotICAgICAgICBzZWNvbmRMZW5ndGggPSBzZWNvbmQtPmNvbnZlcnRU
b0xlbmd0aDxBbnlDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21G
YWN0b3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpcnN0TGVuZ3RoID0gcHJpbWl0aXZlVmFs
dWUtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50
U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICBzZWNvbmRMZW5ndGggPSBMZW5ndGgoKTsKLSAg
ICB9Ci0KLSAgICBpZiAoZmlyc3RMZW5ndGguaXNVbmRlZmluZWQoKSB8fCBzZWNvbmRMZW5ndGgu
aXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYi5zZXRXaWR0aChmaXJzdExl
bmd0aCk7Ci0gICAgYi5zZXRIZWlnaHQoc2Vjb25kTGVuZ3RoKTsKLSAgICBsYXllci0+c2V0U2l6
ZUxlbmd0aChiKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBGaWxsWFBvc2l0aW9uKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldFhQb3NpdGlv
bihGaWxsTGF5ZXI6OmluaXRpYWxGaWxsWFBvc2l0aW9uKGxheWVyLT50eXBlKCkpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIExlbmd0aCBsOwotICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgbCA9IHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6
b29tRmFjdG9yKTsKLSAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkp
Ci0gICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBl
cmNlbnQpOwotICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50
YWdlV2l0aExlbmd0aCgpKQotICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3ND
YWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29t
RmFjdG9yKSk7Ci0gICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50
YWdlTGVuZ3RoKCkpCi0gICAgICAgIGwgPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50
YWdlTGVuZ3RoKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXItPnNldFhQ
b3NpdGlvbihsKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBGaWxsWVBvc2l0aW9uKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldFlQb3NpdGlv
bihGaWxsTGF5ZXI6OmluaXRpYWxGaWxsWVBvc2l0aW9uKGxheWVyLT50eXBlKCkpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIExlbmd0aCBsOwotICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgbCA9IHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6
b29tRmFjdG9yKTsKLSAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkp
Ci0gICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBl
cmNlbnQpOwotICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50
YWdlV2l0aExlbmd0aCgpKQotICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3ND
YWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29t
RmFjdG9yKSk7Ci0gICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50
YWdlTGVuZ3RoKCkpCi0gICAgICAgIGwgPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50
YWdlTGVuZ3RoKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXItPnNldFlQ
b3NpdGlvbihsKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25EZWxheShB
bmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+
aXNJbml0aWFsVmFsdWUoKSkgewotICAgICAgICBhbmltYXRpb24tPnNldERlbGF5KEFuaW1hdGlv
bjo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBhbmltYXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlVGltZTxmbG9hdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOwot
fQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24q
IGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1
ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjppbml0aWFsQW5p
bWF0aW9uRGlyZWN0aW9uKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0g
ICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmlt
YXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbk5vcm1hbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTVmFsdWVBbHRlcm5hdGU6Ci0gICAgICAgIGxheWVyLT5zZXREaXJlY3Rpb24oQW5pbWF0
aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1ZhbHVlUmV2ZXJzZToKLSAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRp
b246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1ZhbHVlQWx0ZXJuYXRlUmV2ZXJzZToKLSAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihB
bmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uRHVyYXRp
b24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihB
bmltYXRpb246OmluaXRpYWxBbmltYXRpb25EdXJhdGlvbigpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlv
bihwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8ZmxvYXQsIENTU1ByaW1pdGl2ZVZhbHVlOjpT
ZWNvbmRzPigpKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25GaWxsTW9k
ZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5p
c0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb246
OmluaXRpYWxBbmltYXRpb25GaWxsTW9kZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSkgewotICAgIGNhc2UgQ1NTVmFsdWVOb25lOgotICAgICAgICBsYXllci0+c2V0RmlsbE1v
ZGUoQW5pbWF0aW9uRmlsbE1vZGVOb25lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NW
YWx1ZUZvcndhcmRzOgotICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9uRmlsbE1v
ZGVGb3J3YXJkcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVCYWNrd2FyZHM6
Ci0gICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZUJhY2t3YXJkcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVCb3RoOgotICAgICAgICBsYXllci0+
c2V0RmlsbE1vZGUoQW5pbWF0aW9uRmlsbE1vZGVCb3RoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5p
c0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQo
QW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICBhbmltYXRpb24t
PnNldEl0ZXJhdGlvbkNvdW50KC0xKTsKLSAgICBlbHNlCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0
SXRlcmF0aW9uQ291bnQocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7Ci19Ci0KLXZv
aWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qIGxheWVyLCBDU1NW
YWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAg
ICAgIGxheWVyLT5zZXROYW1lKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbk5hbWUoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgIGxheWVy
LT5zZXRJc05vbmVBbmltYXRpb24odHJ1ZSk7Ci0gICAgZWxzZQotICAgICAgICBsYXllci0+c2V0
TmFtZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7Ci19Ci0KLXZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAg
bGF5ZXItPnNldFBsYXlTdGF0ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAg
IEVBbmltUGxheVN0YXRlIHBsYXlTdGF0ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZVBhdXNlZCkgPyBBbmltUGxheVN0YXRlUGF1c2VkIDogQW5pbVBsYXlTdGF0ZVBs
YXlpbmc7Ci0gICAgbGF5ZXItPnNldFBsYXlTdGF0ZShwbGF5U3RhdGUpOwotfQotCi12b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBD
U1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0g
ICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVBbGwp
OwotICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUFsbCkgewotICAgICAgICBhbmlt
YXRpb24tPnNldEFuaW1hdGlvbk1vZGUoQW5pbWF0aW9uOjpBbmltYXRlQWxsKTsKLSAgICAgICAg
YW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQpOwotICAgIH0gZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAg
IGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVOb25lKTsKLSAg
ICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFu
aW1hdGVTaW5nbGVQcm9wZXJ0eSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoc3Rh
dGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24o
QW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUt
PmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlv
bihBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0g
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGluZWFyOgotICAgICAg
ICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rp
b246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVFYXNlOgotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rp
b24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbjoKLSAgICAgICAgICAgICAg
ICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246
OmNyZWF0ZSgwLjQyLCAwLjAsIDEuMCwgMS4wKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlRWFzZU91dDoKLSAgICAgICAgICAgICAgICBhbmltYXRp
b24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgw
LjAsIDAuMCwgMC41OCwgMS4wKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlRWFzZUluT3V0OgotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0
VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDAuNDIsIDAu
MCwgMC41OCwgMS4wKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IENTU1ZhbHVlU3RlcFN0YXJ0OgotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5n
RnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDEsIHRydWUpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTdGVwRW5kOgotICAgICAg
ICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKDEsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2YWx1ZS0+aXNDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uVmFsdWUoKSkgewotICAgICAgICBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uVmFsdWUqIGN1YmljVGltaW5nRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxDU1NDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGlt
aW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKGN1YmljVGltaW5n
RnVuY3Rpb24tPngxKCksIGN1YmljVGltaW5nRnVuY3Rpb24tPnkxKCksIGN1YmljVGltaW5nRnVu
Y3Rpb24tPngyKCksIGN1YmljVGltaW5nRnVuY3Rpb24tPnkyKCkpKTsKLSAgICB9IGVsc2UgaWYg
KHZhbHVlLT5pc1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7Ci0gICAgICAgIENTU1N0ZXBz
VGltaW5nRnVuY3Rpb25WYWx1ZSogc3RlcHNUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENT
U1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgYW5pbWF0aW9uLT5z
ZXRUaW1pbmdGdW5jdGlvbihTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoc3RlcHNUaW1pbmdG
dW5jdGlvbi0+bnVtYmVyT2ZTdGVwcygpLCBzdGVwc1RpbWluZ0Z1bmN0aW9uLT5zdGVwQXRTdGFy
dCgpKSk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNMaW5lYXJUaW1pbmdGdW5jdGlvblZhbHVl
KCkpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVu
Y3Rpb246OmNyZWF0ZSgpKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJ
bWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUlt
YWdlJiBpbWFnZSkKLXsKLSAgICAvLyBJZiB3ZSdyZSBub3QgYSB2YWx1ZSBsaXN0LCB0aGVuIHdl
IGFyZSAibm9uZSIgYW5kIGRvbid0IG5lZWQgdG8gYWx0ZXIgdGhlIGVtcHR5IGltYWdlIGF0IGFs
bC4KLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1ZS4KLSAgICBDU1NW
YWx1ZUxpc3QqIGJvcmRlckltYWdlID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUp
OwotCi0gICAgLy8gU2V0IHRoZSBpbWFnZSAodGhpcyBraWNrcyBvZmYgdGhlIGxvYWQpLgotICAg
IENTU1Byb3BlcnR5SUQgaW1hZ2VQcm9wZXJ0eTsKLSAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJJbWFnZSkKLSAgICAgICAgaW1hZ2VQcm9wZXJ0eSA9IENTU1Byb3Bl
cnR5Qm9yZGVySW1hZ2VTb3VyY2U7Ci0gICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlXZWJraXRNYXNrQm94SW1hZ2UpCi0gICAgICAgIGltYWdlUHJvcGVydHkgPSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlUHJvcGVy
dHkgPSBwcm9wZXJ0eTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgYm9yZGVySW1h
Z2UtPmxlbmd0aCgpIDsgKytpKSB7Ci0gICAgICAgIENTU1ZhbHVlKiBjdXJyZW50ID0gYm9yZGVy
SW1hZ2UtPml0ZW0oaSk7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzSW1hZ2VWYWx1ZSgpIHx8
IGN1cnJlbnQtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpCi0jaWYgRU5BQkxFKENTU19JTUFHRV9T
RVQpCi0gICAgICAgICAgICB8fCBjdXJyZW50LT5pc0ltYWdlU2V0VmFsdWUoKQotI2VuZGlmCi0g
ICAgICAgICAgICApCi0gICAgICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdl
UHJvcGVydHksIGN1cnJlbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNCb3JkZXJJ
bWFnZVNsaWNlVmFsdWUoKSkKLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoY3Vy
cmVudCwgaW1hZ2UpOwotICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5pc1ZhbHVlTGlzdCgpKSB7
Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIHNsYXNoTGlzdCA9IHN0YXRpY19jYXN0PENTU1Zh
bHVlTGlzdCo+KGN1cnJlbnQpOwotICAgICAgICAgICAgLy8gTWFwIGluIHRoZSBpbWFnZSBzbGlj
ZXMuCi0gICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5pdGVtKDApICYmIHNsYXNoTGlzdC0+aXRl
bSgwKS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtYXBOaW5l
UGllY2VJbWFnZVNsaWNlKHNsYXNoTGlzdC0+aXRlbSgwKSwgaW1hZ2UpOwotCi0gICAgICAgICAg
ICAvLyBNYXAgaW4gdGhlIGJvcmRlciBzbGljZXMuCi0gICAgICAgICAgICBpZiAoc2xhc2hMaXN0
LT5pdGVtKDEpKQotICAgICAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhtYXBOaW5l
UGllY2VJbWFnZVF1YWQoc2xhc2hMaXN0LT5pdGVtKDEpKSk7Ci0KLSAgICAgICAgICAgIC8vIE1h
cCBpbiB0aGUgb3V0c2V0LgotICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgyKSkKLSAg
ICAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNo
TGlzdC0+aXRlbSgyKSkpOwotICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQtPmlzUHJpbWl0aXZl
VmFsdWUoKSkgewotICAgICAgICAgICAgLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBydWxlcyBmb3Ig
c3RyZXRjaC9yb3VuZC9yZXBlYXQgb2YgdGhlIHNsaWNlcy4KLSAgICAgICAgICAgIG1hcE5pbmVQ
aWVjZUltYWdlUmVwZWF0KGN1cnJlbnQsIGltYWdlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlKSB7Ci0gICAgICAg
IC8vIFdlIGhhdmUgdG8gcHJlc2VydmUgdGhlIGxlZ2FjeSBiZWhhdmlvciBvZiAtd2Via2l0LWJv
cmRlci1pbWFnZSBhbmQgbWFrZSB0aGUgYm9yZGVyIHNsaWNlcwotICAgICAgICAvLyBhbHNvIHNl
dCB0aGUgYm9yZGVyIHdpZHRocy4gV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBwZXJjZW50
YWdlcywgc2luY2Ugd2UgZG9uJ3QgZXZlbiBzdXBwb3J0Ci0gICAgICAgIC8vIHRob3NlIG9uIHJl
YWwgYm9yZGVycyB5ZXQuCi0gICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS50b3AoKS5p
c0ZpeGVkKCkpCi0gICAgICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJUb3BXaWR0aChpbWFnZS5i
b3JkZXJTbGljZXMoKS50b3AoKS52YWx1ZSgpKTsKLSAgICAgICAgaWYgKGltYWdlLmJvcmRlclNs
aWNlcygpLnJpZ2h0KCkuaXNGaXhlZCgpKQotICAgICAgICAgICAgc3R5bGUoKS0+c2V0Qm9yZGVy
UmlnaHRXaWR0aChpbWFnZS5ib3JkZXJTbGljZXMoKS5yaWdodCgpLnZhbHVlKCkpOwotICAgICAg
ICBpZiAoaW1hZ2UuYm9yZGVyU2xpY2VzKCkuYm90dG9tKCkuaXNGaXhlZCgpKQotICAgICAgICAg
ICAgc3R5bGUoKS0+c2V0Qm9yZGVyQm90dG9tV2lkdGgoaW1hZ2UuYm9yZGVyU2xpY2VzKCkuYm90
dG9tKCkudmFsdWUoKSk7Ci0gICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS5sZWZ0KCku
aXNGaXhlZCgpKQotICAgICAgICAgICAgc3R5bGUoKS0+c2V0Qm9yZGVyTGVmdFdpZHRoKGltYWdl
LmJvcmRlclNsaWNlcygpLmxlZnQoKS52YWx1ZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVj
ZUltYWdlJiBpbWFnZSkKLXsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNCb3JkZXJJbWFn
ZVNsaWNlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIGJv
cmRlciBpbWFnZSB2YWx1ZS4KLSAgICBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUqIGJvcmRlcklt
YWdlU2xpY2UgPSBzdGF0aWNfY2FzdDxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUqPih2YWx1ZSk7
Ci0KLSAgICAvLyBTZXQgdXAgYSBsZW5ndGggYm94IHRvIHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xp
Y2VzLgotICAgIExlbmd0aEJveCBib3g7Ci0gICAgUXVhZCogc2xpY2VzID0gYm9yZGVySW1hZ2VT
bGljZS0+c2xpY2VzKCk7Ci0gICAgaWYgKHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQot
ICAgICAgICBib3gubV90b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUo
KSwgUGVyY2VudCk7Ci0gICAgZWxzZQotICAgICAgICBib3gubV90b3AgPSBMZW5ndGgoc2xpY2Vz
LT50b3AoKS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBGaXhl
ZCk7Ci0gICAgaWYgKHNsaWNlcy0+Ym90dG9tKCktPmlzUGVyY2VudGFnZSgpKQotICAgICAgICBi
b3gubV9ib3R0b20gPSBMZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+Z2V0RG91YmxlVmFsdWUoKSwg
UGVyY2VudCk7Ci0gICAgZWxzZQotICAgICAgICBib3gubV9ib3R0b20gPSBMZW5ndGgoKGludClz
bGljZXMtPmJvdHRvbSgpLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSwgRml4ZWQpOwotICAgIGlmIChzbGljZXMtPmxlZnQoKS0+aXNQZXJjZW50YWdlKCkpCi0g
ICAgICAgIGJveC5tX2xlZnQgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdldERvdWJsZVZhbHVl
KCksIFBlcmNlbnQpOwotICAgIGVsc2UKLSAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGlj
ZXMtPmxlZnQoKS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBG
aXhlZCk7Ci0gICAgaWYgKHNsaWNlcy0+cmlnaHQoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAg
IGJveC5tX3JpZ2h0ID0gTGVuZ3RoKHNsaWNlcy0+cmlnaHQoKS0+Z2V0RG91YmxlVmFsdWUoKSwg
UGVyY2VudCk7Ci0gICAgZWxzZQotICAgICAgICBib3gubV9yaWdodCA9IExlbmd0aChzbGljZXMt
PnJpZ2h0KCktPmdldEludFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4
ZWQpOwotICAgIGltYWdlLnNldEltYWdlU2xpY2VzKGJveCk7Ci0KLSAgICAvLyBTZXQgb3VyIGZp
bGwgbW9kZS4KLSAgICBpbWFnZS5zZXRGaWxsKGJvcmRlckltYWdlU2xpY2UtPm1fZmlsbCk7Ci19
Ci0KLUxlbmd0aEJveCBTdHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFs
dWUqIHZhbHVlKQotewotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCi0gICAgICAgIHJldHVybiBMZW5ndGhCb3goKTsKLQotICAgIC8vIEdldCBvdXIgem9vbSB2
YWx1ZS4KLSAgICBmbG9hdCB6b29tID0gdXNlU1ZHWm9vbVJ1bGVzKCkgPyAxLjBmIDogc3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIHByaW1pdGl2ZSB2YWx1
ZS4KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogYm9yZGVyV2lkdGhzID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0KLSAgICAvLyBTZXQgdXAgYSBsZW5ndGggYm94IHRv
IHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xpY2VzLgotICAgIExlbmd0aEJveCBib3g7IC8vIERlZmF1
bHRzIHRvICdhdXRvJyBzbyB3ZSBkb24ndCBoYXZlIHRvIGhhbmRsZSB0aGF0IGV4cGxpY2l0bHkg
YmVsb3cuCi0gICAgUXVhZCogc2xpY2VzID0gYm9yZGVyV2lkdGhzLT5nZXRRdWFkVmFsdWUoKTsK
LSAgICBpZiAoc2xpY2VzLT50b3AoKS0+aXNOdW1iZXIoKSkKLSAgICAgICAgYm94Lm1fdG9wID0g
TGVuZ3RoKHNsaWNlcy0+dG9wKCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKLSAgICBlbHNl
IGlmIChzbGljZXMtPnRvcCgpLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgYm94Lm1fdG9wID0g
TGVuZ3RoKHNsaWNlcy0+dG9wKCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQpOwotICAgIGVsc2UgaWYgKHNsaWNlcy0+dG9wKCktPmdl
dElkZW50KCkgIT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICBib3gubV90b3AgPSBzbGljZXMtPnRv
cCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6
b29tKTsKLQotICAgIGlmIChzbGljZXMtPnJpZ2h0KCktPmlzTnVtYmVyKCkpCi0gICAgICAgIGJv
eC5tX3JpZ2h0ID0gTGVuZ3RoKHNsaWNlcy0+cmlnaHQoKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRp
dmUpOwotICAgIGVsc2UgaWYgKHNsaWNlcy0+cmlnaHQoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAg
ICAgIGJveC5tX3JpZ2h0ID0gTGVuZ3RoKHNsaWNlcy0+cmlnaHQoKS0+Z2V0RG91YmxlVmFsdWUo
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7Ci0gICAgZWxzZSBp
ZiAoc2xpY2VzLT5yaWdodCgpLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlQXV0bykKLSAgICAgICAg
Ym94Lm1fcmlnaHQgPSBzbGljZXMtPnJpZ2h0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHls
ZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb20pOwotCi0gICAgaWYgKHNsaWNlcy0+Ym90dG9t
KCktPmlzTnVtYmVyKCkpCi0gICAgICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJv
dHRvbSgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7Ci0gICAgZWxzZSBpZiAoc2xpY2VzLT5i
b3R0b20oKS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aChz
bGljZXMtPmJvdHRvbSgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UpLCBQZXJjZW50KTsKLSAgICBlbHNlIGlmIChzbGljZXMtPmJvdHRvbSgpLT5nZXRJ
ZGVudCgpICE9IENTU1ZhbHVlQXV0bykKLSAgICAgICAgYm94Lm1fYm90dG9tID0gc2xpY2VzLT5i
b3R0b20oKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUo
KSwgem9vbSk7Ci0KLSAgICBpZiAoc2xpY2VzLT5sZWZ0KCktPmlzTnVtYmVyKCkpCi0gICAgICAg
IGJveC5tX2xlZnQgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdldEludFZhbHVlKCksIFJlbGF0
aXZlKTsKLSAgICBlbHNlIGlmIChzbGljZXMtPmxlZnQoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAg
ICAgIGJveC5tX2xlZnQgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdldERvdWJsZVZhbHVlKENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQpOwotICAgIGVsc2UgaWYg
KHNsaWNlcy0+bGVmdCgpLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlQXV0bykKLSAgICAgICAgYm94
Lm1fbGVmdCA9IHNsaWNlcy0+bGVmdCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwg
cm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKLQotICAgIHJldHVybiBib3g7Ci19Ci0KLXZvaWQg
U3R5bGVSZXNvbHZlcjo6bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUqIHZhbHVlLCBO
aW5lUGllY2VJbWFnZSYgaW1hZ2UpCi17Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
Ci0gICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKLSAgICBp
ZiAoIXBhaXIgfHwgIXBhaXItPmZpcnN0KCkgfHwgIXBhaXItPnNlY29uZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpbnQgZmlyc3RJZGVudGlmaWVyID0gcGFpci0+Zmlyc3QoKS0+Z2V0SWRl
bnQoKTsKLSAgICBpbnQgc2Vjb25kSWRlbnRpZmllciA9IHBhaXItPnNlY29uZCgpLT5nZXRJZGVu
dCgpOwotCi0gICAgRU5pbmVQaWVjZUltYWdlUnVsZSBob3Jpem9udGFsUnVsZTsKLSAgICBzd2l0
Y2ggKGZpcnN0SWRlbnRpZmllcikgewotICAgIGNhc2UgQ1NTVmFsdWVTdHJldGNoOgotICAgICAg
ICBob3Jpem9udGFsUnVsZSA9IFN0cmV0Y2hJbWFnZVJ1bGU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTVmFsdWVSb3VuZDoKLSAgICAgICAgaG9yaXpvbnRhbFJ1bGUgPSBSb3VuZEltYWdl
UnVsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVNwYWNlOgotICAgICAgICBo
b3Jpem9udGFsUnVsZSA9IFNwYWNlSW1hZ2VSdWxlOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OiAvLyBDU1NWYWx1ZVJlcGVhdAotICAgICAgICBob3Jpem9udGFsUnVsZSA9IFJlcGVhdElt
YWdlUnVsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGltYWdlLnNldEhvcml6b250YWxS
dWxlKGhvcml6b250YWxSdWxlKTsKLQotICAgIEVOaW5lUGllY2VJbWFnZVJ1bGUgdmVydGljYWxS
dWxlOwotICAgIHN3aXRjaCAoc2Vjb25kSWRlbnRpZmllcikgewotICAgIGNhc2UgQ1NTVmFsdWVT
dHJldGNoOgotICAgICAgICB2ZXJ0aWNhbFJ1bGUgPSBTdHJldGNoSW1hZ2VSdWxlOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlUm91bmQ6Ci0gICAgICAgIHZlcnRpY2FsUnVsZSA9
IFJvdW5kSW1hZ2VSdWxlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlU3BhY2U6
Ci0gICAgICAgIHZlcnRpY2FsUnVsZSA9IFNwYWNlSW1hZ2VSdWxlOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OiAvLyBDU1NWYWx1ZVJlcGVhdAotICAgICAgICB2ZXJ0aWNhbFJ1bGUgPSBS
ZXBlYXRJbWFnZVJ1bGU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpbWFnZS5zZXRWZXJ0
aWNhbFJ1bGUodmVydGljYWxSdWxlKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zv
clRleHRTaXplQWRqdXN0KCkKLXsKLSAgICBpZiAobV9zdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlv
bihtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7Ci0gICAgbmV3Rm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpKTsKLSAgICBt
X3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLX0KLQotdm9p
ZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCi17Ci0gICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29t
KCkgPT0gcGFyZW50U3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCk7Ci0gICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQp
OwotICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRGb250LnNwZWNpZmll
ZFNpemUoKSk7Ci0gICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRp
b24pOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5n
ZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICBj
b25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24o
KTsKLQotICAgIGlmIChjaGlsZEZvbnQuaXNBYnNvbHV0ZVNpemUoKSB8fCAhcGFyZW50U3R5bGUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9u
dCA9IHBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBpZiAoY2hpbGRGb250LnVz
ZUZpeGVkRGVmYXVsdFNpemUoKSA9PSBwYXJlbnRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRm9yIG5vdywgbHVtcCBhbGwgZmFtaWxpZXMgYnV0
IG1vbm9zcGFjZSB0b2dldGhlci4KLSAgICBpZiAoY2hpbGRGb250LmdlbmVyaWNGYW1pbHkoKSAh
PSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSAmJgotICAgICAgICBwYXJlbnRGb250
LmdlbmVyaWNGYW1pbHkoKSAhPSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2Uga25vdyB0aGUgcGFyZW50IGlzIG1vbm9zcGFjZSBv
ciB0aGUgY2hpbGQgaXMgbW9ub3NwYWNlLCBhbmQgdGhhdCBmb250Ci0gICAgLy8gc2l6ZSB3YXMg
dW5zcGVjaWZpZWQuICBXZSB3YW50IHRvIHNjYWxlIG91ciBmb250IHNpemUgYXMgYXBwcm9wcmlh
dGUuCi0gICAgLy8gSWYgdGhlIGZvbnQgdXNlcyBhIGtleXdvcmQgc2l6ZSwgdGhlbiB3ZSByZWZl
dGNoIGZyb20gdGhlIHRhYmxlIHJhdGhlciB0aGFuCi0gICAgLy8gbXVsdGlwbHlpbmcgYnkgb3Vy
IHNjYWxlIGZhY3Rvci4KLSAgICBmbG9hdCBzaXplOwotICAgIGlmIChjaGlsZEZvbnQua2V5d29y
ZFNpemUoKSkKLSAgICAgICAgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9j
dW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgY2hpbGRGb250LmtleXdvcmRTaXplKCkgLSAxLCBj
aGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7Ci0gICAg
ICAgIGZsb2F0IGZpeGVkU2NhbGVGYWN0b3IgPSBzZXR0aW5ncwotICAgICAgICAgICAgPyBzdGF0
aWNfY2FzdDxmbG9hdD4oc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkpIC8gc2V0dGlu
Z3MtPmRlZmF1bHRGb250U2l6ZSgpCi0gICAgICAgICAgICA6IDE7Ci0gICAgICAgIHNpemUgPSBw
YXJlbnRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSA/Ci0gICAgICAgICAgICAgICAgY2hpbGRG
b250LnNwZWNpZmllZFNpemUoKSAvIGZpeGVkU2NhbGVGYWN0b3IgOgotICAgICAgICAgICAgICAg
IGNoaWxkRm9udC5zcGVjaWZpZWRTaXplKCkgKiBmaXhlZFNjYWxlRmFjdG9yOwotICAgIH0KLQot
ICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKLSAgICBz
ZXRGb250U2l6ZShuZXdGb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgIHN0eWxlLT5zZXRGb250
RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVy
OjpzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6
ZSkKLXsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZp
ZWRTaXplKG1fY2hlY2tlci5kb2N1bWVudCgpLCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRp
b24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKLX0KLQotZmxv
YXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1l
bnQqIGRvY3VtZW50LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZs
b2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKQotewotICAgIGZsb2F0IHpv
b21GYWN0b3IgPSAxLjBmOwotICAgIGlmICghdXNlU1ZHWm9vbVJ1bGVzKSB7Ci0gICAgICAgIHpv
b21GYWN0b3IgPSBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBpZiAoRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgICAgICB6b29tRmFjdG9yICo9IGZyYW1l
LT50ZXh0Wm9vbUZhY3RvcigpOwotICAgIH0KLQotICAgIHJldHVybiBTdHlsZVJlc29sdmVyOjpn
ZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgem9vbUZhY3RvciwgaXNB
YnNvbHV0ZVNpemUsIHNwZWNpZmllZFNpemUpOwotfQotCi1mbG9hdCBTdHlsZVJlc29sdmVyOjpn
ZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGZsb2F0
IHpvb21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVT
bWFydE1pbmltdW1Gb3JGb250U2l6ZSB1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSkKLXsKLSAg
ICAvLyBUZXh0IHdpdGggYSAwcHggZm9udCBzaXplIHNob3VsZCBub3QgYmUgdmlzaWJsZSBhbmQg
dGhlcmVmb3JlIG5lZWRzIHRvIGJlCi0gICAgLy8gZXhlbXB0IGZyb20gbWluaW11bSBmb250IHNp
emUgcnVsZXMuIEFjaWQzIHJlbGllcyBvbiB0aGlzIGZvciBwaXhlbC1wZXJmZWN0Ci0gICAgLy8g
cmVuZGVyaW5nLiBUaGlzIGlzIGFsc28gY29tcGF0aWJsZSB3aXRoIG90aGVyIGJyb3dzZXJzIHRo
YXQgaGF2ZSBtaW5pbXVtCi0gICAgLy8gZm9udCBzaXplIHNldHRpbmdzIChlLmcuIEZpcmVmb3gp
LgotICAgIGlmIChmYWJzZihzcGVjaWZpZWRTaXplKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjplcHNpbG9uKCkpCi0gICAgICAgIHJldHVybiAwLjBmOwotCi0gICAgLy8gV2Ugc3VwcG9y
dCB0d28gdHlwZXMgb2YgbWluaW11bSBmb250IHNpemUuICBUaGUgZmlyc3QgaXMgYSBoYXJkIG92
ZXJyaWRlIHRoYXQgYXBwbGllcyB0bwotICAgIC8vIGFsbCBmb250cy4gIFRoaXMgaXMgIm1pblNp
emUuIiAgVGhlIHNlY29uZCB0eXBlIG9mIG1pbmltdW0gZm9udCBzaXplIGlzIGEgInNtYXJ0IG1p
bmltdW0iCi0gICAgLy8gdGhhdCBpcyBhcHBsaWVkIG9ubHkgd2hlbiB0aGUgV2ViIHBhZ2UgY2Fu
J3Qga25vdyB3aGF0IHNpemUgaXQgcmVhbGx5IGFza2VkIGZvciwgZS5nLiwKLSAgICAvLyB3aGVu
IGl0IHVzZXMgbG9naWNhbCBzaXplcyBsaWtlICJzbWFsbCIgb3IgZXhwcmVzc2VzIHRoZSBmb250
LXNpemUgYXMgYSBwZXJjZW50YWdlIG9mCi0gICAgLy8gdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQg
c2V0dGluZy4KLQotICAgIC8vIFdpdGggdGhlIHNtYXJ0IG1pbmltdW0sIHdlIG5ldmVyIHdhbnQg
dG8gZ2V0IHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSBmb250IHNpemUgdG8ga2VlcCBmb250cyBy
ZWFkYWJsZS4KLSAgICAvLyBIb3dldmVyIHdlIGFsd2F5cyBhbGxvdyB0aGUgcGFnZSB0byBzZXQg
YW4gZXhwbGljaXQgcGl4ZWwgc2l6ZSB0aGF0IGlzIHNtYWxsZXIsCi0gICAgLy8gc2luY2Ugc2l0
ZXMgd2lsbCBtaXMtcmVuZGVyIG90aGVyd2lzZSAoZS5nLiwgaHR0cDovL3d3dy5nYW1lc3BvdC5j
b20gd2l0aCBhIDlweCBtaW5pbXVtKS4KLQotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3Vt
ZW50LT5zZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybiAxLjBm
OwotCi0gICAgaW50IG1pblNpemUgPSBzZXR0aW5ncy0+bWluaW11bUZvbnRTaXplKCk7Ci0gICAg
aW50IG1pbkxvZ2ljYWxTaXplID0gc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsK
LSAgICBmbG9hdCB6b29tZWRTaXplID0gc3BlY2lmaWVkU2l6ZSAqIHpvb21GYWN0b3I7Ci0KLSAg
ICAvLyBBcHBseSB0aGUgaGFyZCBtaW5pbXVtIGZpcnN0LiAgV2Ugb25seSBhcHBseSB0aGUgaGFy
ZCBtaW5pbXVtIGlmIGFmdGVyIHpvb21pbmcgd2UncmUgc3RpbGwgdG9vIHNtYWxsLgotICAgIGlm
ICh6b29tZWRTaXplIDwgbWluU2l6ZSkKLSAgICAgICAgem9vbWVkU2l6ZSA9IG1pblNpemU7Ci0K
LSAgICAvLyBOb3cgYXBwbHkgdGhlICJzbWFydCBtaW5pbXVtLiIgIFRoaXMgbWluaW11bSBpcyBh
bHNvIG9ubHkgYXBwbGllZCBpZiB3ZSdyZSBzdGlsbCB0b28gc21hbGwKLSAgICAvLyBhZnRlciB6
b29taW5nLiAgVGhlIGZvbnQgc2l6ZSBtdXN0IGVpdGhlciBiZSByZWxhdGl2ZSB0byB0aGUgdXNl
ciBkZWZhdWx0IG9yIHRoZSBvcmlnaW5hbCBzaXplCi0gICAgLy8gbXVzdCBoYXZlIGJlZW4gYWNj
ZXB0YWJsZS4gIEluIG90aGVyIHdvcmRzLCB3ZSBvbmx5IGFwcGx5IHRoZSBzbWFydCBtaW5pbXVt
IHdoZW5ldmVyIHdlJ3JlIHBvc2l0aXZlCi0gICAgLy8gZG9pbmcgc28gd29uJ3QgZGlzcnVwdCB0
aGUgbGF5b3V0LgotICAgIGlmICh1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSAmJiB6b29tZWRT
aXplIDwgbWluTG9naWNhbFNpemUgJiYgKHNwZWNpZmllZFNpemUgPj0gbWluTG9naWNhbFNpemUg
fHwgIWlzQWJzb2x1dGVTaXplKSkKLSAgICAgICAgem9vbWVkU2l6ZSA9IG1pbkxvZ2ljYWxTaXpl
OwotCi0gICAgLy8gQWxzbyBjbGFtcCB0byBhIHJlYXNvbmFibGUgbWF4aW11bSB0byBwcmV2ZW50
IGluc2FuZSBmb250IHNpemVzIGZyb20gY2F1c2luZyBjcmFzaGVzIG9uIHZhcmlvdXMKLSAgICAv
LyBwbGF0Zm9ybXMgKEknbSBsb29raW5nIGF0IHlvdSwgV2luZG93cy4pCi0gICAgcmV0dXJuIG1p
bigxMDAwMDAwLjBmLCB6b29tZWRTaXplKTsKLX0KLQotY29uc3QgaW50IGZvbnRTaXplVGFibGVN
YXggPSAxNjsKLWNvbnN0IGludCBmb250U2l6ZVRhYmxlTWluID0gOTsKLWNvbnN0IGludCB0b3Rh
bEtleXdvcmRzID0gODsKLQotLy8gV2luSUUvTmF2NCB0YWJsZSBmb3IgZm9udCBzaXplcy4gIERl
c2lnbmVkIHRvIG1hdGNoIHRoZSBsZWdhY3kgZm9udCBtYXBwaW5nIHN5c3RlbSBvZiBIVE1MLgot
c3RhdGljIGNvbnN0IGludCBxdWlya3NGb250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBm
b250U2l6ZVRhYmxlTWluICsgMV1bdG90YWxLZXl3b3Jkc10gPQotewotICAgICAgeyA5LCAgICA5
LCAgICAgOSwgICAgIDksICAgIDExLCAgICAxNCwgICAgMTgsICAgIDI4IH0sCi0gICAgICB7IDks
ICAgIDksICAgICA5LCAgICAxMCwgICAgMTIsICAgIDE1LCAgICAyMCwgICAgMzEgfSwKLSAgICAg
IHsgOSwgICAgOSwgICAgIDksICAgIDExLCAgICAxMywgICAgMTcsICAgIDIyLCAgICAzNCB9LAot
ICAgICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQsICAgIDM3
IH0sCi0gICAgICB7IDksICAgIDksICAgIDEwLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwg
ICAgNDAgfSwgLy8gZml4ZWQgZm9udCBkZWZhdWx0ICgxMykKLSAgICAgIHsgOSwgICAgOSwgICAg
MTEsICAgIDE0LCAgICAxNywgICAgMjEsICAgIDI4LCAgICA0MiB9LAotICAgICAgeyA5LCAgIDEw
LCAgICAxMiwgICAgMTUsICAgIDE3LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCi0gICAgICB7IDks
ICAgMTAsICAgIDEzLCAgICAxNiwgICAgMTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAgLy8gcHJv
cG9ydGlvbmFsIGZvbnQgZGVmYXVsdCAoMTYpCi19OwotLy8gSFRNTCAgICAgICAxICAgICAgMiAg
ICAgIDMgICAgICA0ICAgICAgNSAgICAgIDYgICAgICA3Ci0vLyBDU1MgIHh4cyAgIHhzICAgICBz
ICAgICAgbSAgICAgIGwgICAgIHhsICAgICB4eGwKLS8vICAgICAgICAgICAgICAgICAgICAgICAg
ICB8Ci0vLyAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByZWYKLQotLy8gU3RyaWN0IG1vZGUg
dGFibGUgbWF0Y2hlcyBNYWNJRSBhbmQgTW96aWxsYSdzIHNldHRpbmdzIGV4YWN0bHkuCi1zdGF0
aWMgY29uc3QgaW50IHN0cmljdEZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1heCAtIGZvbnRT
aXplVGFibGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9Ci17Ci0gICAgICB7IDksICAgIDksICAg
ICA5LCAgICAgOSwgICAgMTEsICAgIDE0LCAgICAxOCwgICAgMjcgfSwKLSAgICAgIHsgOSwgICAg
OSwgICAgIDksICAgIDEwLCAgICAxMiwgICAgMTUsICAgIDIwLCAgICAzMCB9LAotICAgICAgeyA5
LCAgICA5LCAgICAxMCwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDMzIH0sCi0gICAg
ICB7IDksICAgIDksICAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE4LCAgICAyNCwgICAgMzYgfSwK
LSAgICAgIHsgOSwgICAxMCwgICAgMTIsICAgIDEzLCAgICAxNiwgICAgMjAsICAgIDI2LCAgICAz
OSB9LCAvLyBmaXhlZCBmb250IGRlZmF1bHQgKDEzKQotICAgICAgeyA5LCAgIDEwLCAgICAxMiwg
ICAgMTQsICAgIDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0sCi0gICAgICB7IDksICAgMTAsICAg
IDEzLCAgICAxNSwgICAgMTgsICAgIDIzLCAgICAzMCwgICAgNDUgfSwKLSAgICAgIHsgOSwgICAx
MCwgICAgMTMsICAgIDE2LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9ICAvLyBwcm9wb3J0
aW9uYWwgZm9udCBkZWZhdWx0ICgxNikKLX07Ci0vLyBIVE1MICAgICAgIDEgICAgICAyICAgICAg
MyAgICAgIDQgICAgICA1ICAgICAgNiAgICAgIDcKLS8vIENTUyAgeHhzICAgeHMgICAgIHMgICAg
ICBtICAgICAgbCAgICAgeGwgICAgIHh4bAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHwK
LS8vICAgICAgICAgICAgICAgICAgICAgIHVzZXIgcHJlZgotCi0vLyBGb3IgdmFsdWVzIG91dHNp
ZGUgdGhlIHJhbmdlIG9mIHRoZSB0YWJsZSwgd2UgdXNlIFRvZGQgRmFocm5lcidzIHN1Z2dlc3Rl
ZCBzY2FsZQotLy8gZmFjdG9ycyBmb3IgZWFjaCBrZXl3b3JkIHZhbHVlLgotc3RhdGljIGNvbnN0
IGZsb2F0IGZvbnRTaXplRmFjdG9yc1t0b3RhbEtleXdvcmRzXSA9IHsgMC42MGYsIDAuNzVmLCAw
Ljg5ZiwgMS4wZiwgMS4yZiwgMS41ZiwgMi4wZiwgMy4wZiB9OwotCi1mbG9hdCBTdHlsZVJlc29s
dmVyOjpmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29yZCwg
Ym9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKQotewotICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJl
dHVybiAxLjBmOwotCi0gICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVpcmtzTW9k
ZSgpOwotICAgIGludCBtZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/IHNl
dHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6
ZSgpOwotICAgIGlmIChtZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVtU2l6
ZSA8PSBmb250U2l6ZVRhYmxlTWF4KSB7Ci0gICAgICAgIC8vIExvb2sgdXAgdGhlIGVudHJ5IGlu
IHRoZSB0YWJsZS4KLSAgICAgICAgaW50IHJvdyA9IG1lZGl1bVNpemUgLSBmb250U2l6ZVRhYmxl
TWluOwotICAgICAgICBpbnQgY29sID0gKGtleXdvcmQgLSBDU1NWYWx1ZVh4U21hbGwpOwotICAg
ICAgICByZXR1cm4gcXVpcmtzTW9kZSA/IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93XVtjb2xdIDog
c3RyaWN0Rm9udFNpemVUYWJsZVtyb3ddW2NvbF07Ci0gICAgfQotCi0gICAgLy8gVmFsdWUgaXMg
b3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIHRhYmxlLiBBcHBseSB0aGUgc2NhbGUgZmFjdG9yIGlu
c3RlYWQuCi0gICAgZmxvYXQgbWluTG9naWNhbFNpemUgPSBtYXgoc2V0dGluZ3MtPm1pbmltdW1M
b2dpY2FsRm9udFNpemUoKSwgMSk7Ci0gICAgcmV0dXJuIG1heChmb250U2l6ZUZhY3RvcnNba2V5
d29yZCAtIENTU1ZhbHVlWHhTbWFsbF0qbWVkaXVtU2l6ZSwgbWluTG9naWNhbFNpemUpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGludCBmaW5kTmVhcmVzdExlZ2FjeUZvbnRT
aXplKGludCBwaXhlbEZvbnRTaXplLCBjb25zdCBUKiB0YWJsZSwgaW50IG11bHRpcGxpZXIpCi17
Ci0gICAgLy8gSWdub3JlIHRhYmxlWzBdIGJlY2F1c2UgeHgtc21hbGwgZG9lcyBub3QgY29ycmVz
cG9uZCB0byBhbnkgbGVnYWN5IGZvbnQgc2l6ZS4KLSAgICBmb3IgKGludCBpID0gMTsgaSA8IHRv
dGFsS2V5d29yZHMgLSAxOyBpKyspIHsKLSAgICAgICAgaWYgKHBpeGVsRm9udFNpemUgKiAyIDwg
KHRhYmxlW2ldICsgdGFibGVbaSArIDFdKSAqIG11bHRpcGxpZXIpCi0gICAgICAgICAgICByZXR1
cm4gaTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvdGFsS2V5d29yZHMgLSAxOwotfQotCi1pbnQgU3R5
bGVSZXNvbHZlcjo6bGVnYWN5Rm9udFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgcGl4ZWxG
b250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKQotewotICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MpCi0g
ICAgICAgIHJldHVybiAxOwotCi0gICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVp
cmtzTW9kZSgpOwotICAgIGludCBtZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6
ZSA/IHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRG
b250U2l6ZSgpOwotICAgIGlmIChtZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVk
aXVtU2l6ZSA8PSBmb250U2l6ZVRhYmxlTWF4KSB7Ci0gICAgICAgIGludCByb3cgPSBtZWRpdW1T
aXplIC0gZm9udFNpemVUYWJsZU1pbjsKLSAgICAgICAgcmV0dXJuIGZpbmROZWFyZXN0TGVnYWN5
Rm9udFNpemU8aW50PihwaXhlbEZvbnRTaXplLCBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVU
YWJsZVtyb3ddIDogc3RyaWN0Rm9udFNpemVUYWJsZVtyb3ddLCAxKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmluZE5lYXJlc3RMZWdhY3lGb250U2l6ZTxmbG9hdD4ocGl4ZWxGb250U2l6ZSwgZm9u
dFNpemVGYWN0b3JzLCBtZWRpdW1TaXplKTsKLX0KLQotc3RhdGljIENvbG9yIGNvbG9yRm9yQ1NT
VmFsdWUoaW50IGNzc1ZhbHVlSWQpCi17Ci0gICAgc3RydWN0IENvbG9yVmFsdWUgewotICAgICAg
ICBpbnQgY3NzVmFsdWVJZDsKLSAgICAgICAgUkdCQTMyIGNvbG9yOwotICAgIH07Ci0KLSAgICBz
dGF0aWMgY29uc3QgQ29sb3JWYWx1ZSBjb2xvclZhbHVlc1tdID0gewotICAgICAgICB7IENTU1Zh
bHVlQXF1YSwgMHhGRjAwRkZGRiB9LAotICAgICAgICB7IENTU1ZhbHVlQmxhY2ssIDB4RkYwMDAw
MDAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZUJsdWUsIDB4RkYwMDAwRkYgfSwKLSAgICAgICAgeyBD
U1NWYWx1ZUZ1Y2hzaWEsIDB4RkZGRjAwRkYgfSwKLSAgICAgICAgeyBDU1NWYWx1ZUdyYXksIDB4
RkY4MDgwODAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZUdyZWVuLCAweEZGMDA4MDAwICB9LAotICAg
ICAgICB7IENTU1ZhbHVlR3JleSwgMHhGRjgwODA4MCB9LAotICAgICAgICB7IENTU1ZhbHVlTGlt
ZSwgMHhGRjAwRkYwMCB9LAotICAgICAgICB7IENTU1ZhbHVlTWFyb29uLCAweEZGODAwMDAwIH0s
Ci0gICAgICAgIHsgQ1NTVmFsdWVOYXZ5LCAweEZGMDAwMDgwIH0sCi0gICAgICAgIHsgQ1NTVmFs
dWVPbGl2ZSwgMHhGRjgwODAwMCAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZU9yYW5nZSwgMHhGRkZG
QTUwMCB9LAotICAgICAgICB7IENTU1ZhbHVlUHVycGxlLCAweEZGODAwMDgwIH0sCi0gICAgICAg
IHsgQ1NTVmFsdWVSZWQsIDB4RkZGRjAwMDAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZVNpbHZlciwg
MHhGRkMwQzBDMCB9LAotICAgICAgICB7IENTU1ZhbHVlVGVhbCwgMHhGRjAwODA4MCAgfSwKLSAg
ICAgICAgeyBDU1NWYWx1ZVRyYW5zcGFyZW50LCAweDAwMDAwMDAwIH0sCi0gICAgICAgIHsgQ1NT
VmFsdWVXaGl0ZSwgMHhGRkZGRkZGRiB9LAotICAgICAgICB7IENTU1ZhbHVlWWVsbG93LCAweEZG
RkZGRjAwIH0sCi0gICAgICAgIHsgMCwgMCB9Ci0gICAgfTsKLQotICAgIGZvciAoY29uc3QgQ29s
b3JWYWx1ZSogY29sID0gY29sb3JWYWx1ZXM7IGNvbC0+Y3NzVmFsdWVJZDsgKytjb2wpIHsKLSAg
ICAgICAgaWYgKGNvbC0+Y3NzVmFsdWVJZCA9PSBjc3NWYWx1ZUlkKQotICAgICAgICAgICAgcmV0
dXJuIGNvbC0+Y29sb3I7Ci0gICAgfQotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRo
ZW1lKCktPnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwotfQotCi1Db2xvciBTdHlsZVJlc29sdmVy
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wg
Zm9yVmlzaXRlZExpbmspIGNvbnN0Ci17Ci0gICAgaWYgKHZhbHVlLT5pc1JHQkNvbG9yKCkpCi0g
ICAgICAgIHJldHVybiBDb2xvcih2YWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7Ci0KLSAgICBpbnQg
aWRlbnQgPSB2YWx1ZS0+Z2V0SWRlbnQoKTsKLSAgICBzd2l0Y2ggKGlkZW50KSB7Ci0gICAgY2Fz
ZSAwOgotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4
dDoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7Ci0g
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6Ci0gICAgICAgIHJldHVybiAobV9lbGVtZW50LT5p
c0xpbmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0
ZWRMaW5rQ29sb3IoKSA6IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7Ci0gICAg
Y2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbms6Ci0gICAgICAgIHJldHVybiBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRG
b2N1c1JpbmdDb2xvcjoKLSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpmb2N1c1JpbmdDb2xv
cigpOwotICAgIGNhc2UgQ1NTVmFsdWVDdXJyZW50Y29sb3I6Ci0gICAgICAgIHJldHVybiBtX3N0
eWxlLT5jb2xvcigpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBjb2xvckZvckNTU1Zh
bHVlKGlkZW50KTsKLSAgICB9Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JG
b3JBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nICZhdHRybmFtZSkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9mZWF0dXJlcy5hdHRyc0luUnVsZXMuY29udGFpbnMoYXR0cm5hbWUuaW1wbCgpKTsK
LX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlS
ZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwciwgYm9vbCByZXN1bHQpCi17Ci0gICAgbV92
aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmFwcGVuZChhZG9wdFB0cihuZXcgTWVk
aWFRdWVyeVJlc3VsdCgqZXhwciwgcmVzdWx0KSkpOwotfQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6
OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgcyA9IG1f
dmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHM7IGkrKykgewotICAgICAgICBpZiAobV9tZWRpdW0tPmV2YWwoJm1f
dmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9leHByZXNzaW9uKSAhPSBt
X3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1fcmVzdWx0KQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGlj
IFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRUcmFuc2Zvcm1PcGVyYXRpb25U
eXBlKFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5cGUp
Ci17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgICByZXR1cm4gVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTQ0FMRTsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRp
b246OlNDQUxFX1g7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxl
WVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpT
Q0FMRV9ZOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFu
c2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVf
WjsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUzRFRyYW5zZm9y
bU9wZXJhdGlvbjogICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOwot
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246ICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOwotICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3Bl
cmF0aW9uOiAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g7Ci0gICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVy
YXRpb246ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWTsKLSAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJh
dGlvbjogICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOwotICAgICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJh
dGlvbjogICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOwotICAgICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246
ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOwotICAgICAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAg
ICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g7Ci0gICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICBy
ZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWTsKLSAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgIHJldHVy
biBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9aOwotICAgICAgICBjYXNlIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgcmV0dXJuIFRy
YW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgICAgcmV0dXJuIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0tFVzsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6U2tld1hUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVy
YXRpb246OlNLRVdfWDsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tl
d1lUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246
OlNLRVdfWTsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uOiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJ
WDsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb246ICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDsK
LSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zv
cm1PcGVyYXRpb246ICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOwot
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpVbmtub3duVHJhbnNmb3JtT3Bl
cmF0aW9uOiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORTsKLSAgICB9Ci0g
ICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORTsKLX0KLQotYm9vbCBTdHlsZVJlc29s
dmVyOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMm
IG91dE9wZXJhdGlvbnMpCi17Ci0gICAgaWYgKCFpblZhbHVlIHx8ICFpblZhbHVlLT5pc1ZhbHVl
TGlzdCgpKSB7Ci0gICAgICAgIG91dE9wZXJhdGlvbnMuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSA/IHN0eWxlLT5l
ZmZlY3RpdmVab29tKCkgOiAxOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsK
LSAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBpblZhbHVlOyBpLmhhc01vcmUoKTsg
aS5hZHZhbmNlKCkpIHsKLSAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsK
LSAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKiB0
cmFuc2Zvcm1WYWx1ZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4oaS52
YWx1ZSgpKTsKLSAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBib29sIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IGZh
bHNlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdHJhbnNmb3JtVmFsdWUtPmxl
bmd0aCgpOyArK2opIHsKLSAgICAgICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soaiktPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgICAg
IGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1
ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBm
aXJzdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7Ci0KLSAgICAgICAgc3dpdGNoICh0cmFuc2Zv
cm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJh
dGlvbjogewotICAgICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKLSAgICAgICAgICAgICAg
ICBkb3VibGUgc3kgPSAxLjA7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5v
cGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9y
bU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBz
eCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN5ID0gc3g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5k
KFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoc3gsIHN5LCAxLjAsIGdldFRyYW5zZm9y
bU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlM0RUcmFuc2Zvcm1PcGVyYXRpb246
IHsKLSAgICAgICAgICAgICAgICBkb3VibGUgc3ggPSAxLjA7Ci0gICAgICAgICAgICAgICAgZG91
YmxlIHN5ID0gMS4wOwotICAgICAgICAgICAgICAgIGRvdWJsZSBzeiA9IDEuMDsKLSAgICAgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAg
ICAgICBzeiA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICAg
ICBzeSA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBl
KCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+
IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhp
cmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN6ID0gdGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3Ro
KCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1W
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
b3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoc3gsIHN5LCBzeiwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1
ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAg
ICAgICAgICAgICAgICBMZW5ndGggdHggPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAg
ICAgIExlbmd0aCB0eSA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRy
YW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHR5ID0g
Y29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZh
Y3Rvcik7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHR4ID0g
Y29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZh
Y3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9u
VHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3Bl
cmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxl
bmd0aCgpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNm
b3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoc2Vjb25kVmFsdWUsIHN0eWxlLCBy
b290U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHR4LmlzVW5kZWZpbmVkKCkgfHwgdHkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25z
KCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVu
Z3RoKDAsIEZpeGVkKSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+
b3BlcmF0aW9uVHlwZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRy
YW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlRyYW5zbGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgTGVu
Z3RoIHR4ID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICBMZW5ndGggdHkgPSBM
ZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgICAgIExlbmd0aCB0eiA9IExlbmd0aCgwLCBG
aXhlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBl
KCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRp
b24pCi0gICAgICAgICAgICAgICAgICAgIHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RW
YWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAg
ICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxl
LCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxl
LCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5v
cGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFu
c2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1W
YWx1ZS0+bGVuZ3RoKCkgPiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKHRoaXJkVmFsdWUsIHN0
eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25k
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKHNlY29uZFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6
b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0eC5pc1VuZGVm
aW5lZCgpIHx8IHR5LmlzVW5kZWZpbmVkKCkgfHwgdHouaXNVbmRlZmluZWQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4
LCB0eSwgdHosIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJh
dGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjogewotICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmNv
bXB1dGVEZWdyZWVzKCk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDAsIDAsIDEsIGFuZ2xlLCBn
ZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkp
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
YXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOgot
ICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9y
bU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJv
dGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICBkb3VibGUgeCA9IDA7
Ci0gICAgICAgICAgICAgICAgZG91YmxlIHkgPSAwOwotICAgICAgICAgICAgICAgIGRvdWJsZSB6
ID0gMDsKLSAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRl
RGVncmVlcygpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRp
b25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVy
YXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHkg
PSAxOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgeiA9IDE7Ci0g
ICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRp
b25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpSb3RhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAg
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPCA0KQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhp
cmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOwotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBmb3VydGhWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJh
bnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMykpOwotICAgICAgICAgICAgICAg
IGRvdWJsZSB4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICBkb3VibGUgeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAg
ICAgIGRvdWJsZSB6ID0gdGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAg
ICAgICBkb3VibGUgYW5nbGUgPSBmb3VydGhWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLSAgICAg
ICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5
cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNh
c2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0g
ICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlWCA9IDA7Ci0gICAgICAgICAgICAgICAgZG91Ymxl
IGFuZ2xlWSA9IDA7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+
Y29tcHV0ZURlZ3JlZXMoKTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1P
cGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIGFuZ2xlWSA9IGFuZ2xlOwotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhbmdsZVggPSBhbmdsZTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVZID0g
c2Vjb25kVmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZShhbmdsZVgsIGFuZ2xlWSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zv
cm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZh
bHVlLT5sZW5ndGgoKSA8IDYpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGRvdWJsZSBhID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAg
ICAgICAgICBkb3VibGUgYiA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNm
b3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpLT5nZXREb3VibGVWYWx1ZSgpOwot
ICAgICAgICAgICAgICAgIGRvdWJsZSBjID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSktPmdldERvdWJsZVZh
bHVlKCk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0
RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgZSA9IHpvb21GYWN0b3IgKiBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3Vi
bGUgZiA9IHpvb21GYWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKTsK
LSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoYSwgYiwgYywgZCwgZSwgZikpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgMTYpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDApKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLT5nZXREb3VibGVW
YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDMpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayg0KSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNm
b3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLT5nZXREb3VibGVWYWx1ZSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDYpKS0+Z2V0
RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayg3KSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soOCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFs
dWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
MCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDExKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHpvb21GYWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEyKSktPmdldERv
dWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb21GYWN0
b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEzKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJh
bnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTQpKS0+Z2V0RG91YmxlVmFsdWUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNSkp
LT5nZXREb3VibGVWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlv
bnMoKS5hcHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtYXRyaXgpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOiB7
Ci0gICAgICAgICAgICAgICAgTGVuZ3RoIHAgPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAg
ICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgICAgICAgICBw
ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9v
bUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFRoaXMgaXMgYSBxdWlyayB0aGF0IHNob3VsZCBnbyBhd2F5IHdoZW4gM2QgdHJhbnNmb3JtcyBh
cmUgZmluYWxpemVkLgotICAgICAgICAgICAgICAgICAgICBkb3VibGUgdmFsID0gZmlyc3RWYWx1
ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgcCA9IHZhbCA+PSAwID8g
TGVuZ3RoKGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIodmFsKSwgRml4ZWQpIDogTGVuZ3RoKFVuZGVm
aW5lZCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHAuaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUocCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRy
YW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG91dE9wZXJh
dGlvbnMgPSBvcGVyYXRpb25zOwotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5BQkxFKENT
U19GSUxURVJTKQotc3RhdGljIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBmaWx0ZXJP
cGVyYXRpb25Gb3JUeXBlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRpb25UeXBl
IHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3Bl
cmF0aW9uOjpSRUZFUkVOQ0U7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNj
YWxlRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpHUkFZ
U0NBTEU7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRp
b246Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OlNFUElBOwotICAgIGNhc2UgV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1
cm4gRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZh
bHVlOjpIdWVSb3RhdGVGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVy
YXRpb246OkhVRV9ST1RBVEU7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SW52ZXJ0
RmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ7
Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9wZXJhdGlvbjoK
LSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTsKLSAgICBjYXNlIFdlYktp
dENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1
cm4gRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOwotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3Bl
cmF0aW9uOjpDT05UUkFTVDsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmls
dGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpCTFVSOwotICAg
IGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Ci0g
ICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOwotI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDdXN0b21GaWx0ZXJP
cGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTTsKLSNlbmRp
ZgotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRpb246
Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246Ok5PTkU7Ci0gICAgfQotICAgIHJldHVy
biBGaWx0ZXJPcGVyYXRpb246Ok5PTkU7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi1T
dHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFkZXIoQ1NTVmFsdWUqIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZS0+aXNXZWJLaXRDU1NTaGFkZXJWYWx1ZSgpKQotICAgICAgICByZXR1
cm4gY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoc3RhdGljX2Nhc3Q8V2ViS2l0
Q1NTU2hhZGVyVmFsdWUqPih2YWx1ZSkpOwotICAgIHJldHVybiAwOwotfQotCi1TdHlsZVNoYWRl
ciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2Vi
S2l0Q1NTU2hhZGVyVmFsdWUqIHZhbHVlKQotewotICAgIFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2
YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nU2hhZGVyKCk7Ci0gICAgaWYgKHNoYWRlciAmJiBzaGFkZXIt
PmlzUGVuZGluZ1NoYWRlcigpKQotICAgICAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsK
LSAgICByZXR1cm4gc2hhZGVyOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5n
U2hhZGVycygpCi17Ci0gICAgaWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9oYXNQZW5k
aW5nU2hhZGVycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZp
bHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5maWx0ZXIoKS5vcGVyYXRpb25zKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlck9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVyT3Bl
cmF0aW9ucy5hdChpKTsKLSAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9u
VHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NKSB7Ci0gICAgICAgICAgICBDdXN0b21G
aWx0ZXJPcGVyYXRpb24qIGN1c3RvbUZpbHRlciA9IHN0YXRpY19jYXN0PEN1c3RvbUZpbHRlck9w
ZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoY3Vz
dG9tRmlsdGVyLT5wcm9ncmFtKCkpOwotICAgICAgICAgICAgU3R5bGVDdXN0b21GaWx0ZXJQcm9n
cmFtKiBwcm9ncmFtID0gc3RhdGljX2Nhc3Q8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtKj4oY3Vz
dG9tRmlsdGVyLT5wcm9ncmFtKCkpOwotICAgICAgICAgICAgaWYgKHByb2dyYW0tPnZlcnRleFNo
YWRlcigpICYmIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLT5pc1BlbmRpbmdTaGFkZXIoKSkgewot
ICAgICAgICAgICAgICAgIFdlYktpdENTU1NoYWRlclZhbHVlKiBzaGFkZXJWYWx1ZSA9IHN0YXRp
Y19jYXN0PFN0eWxlUGVuZGluZ1NoYWRlcio+KHByb2dyYW0tPnZlcnRleFNoYWRlcigpKS0+Y3Nz
U2hhZGVyVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBwcm9ncmFtLT5zZXRWZXJ0ZXhTaGFkZXIo
c2hhZGVyVmFsdWUtPmNhY2hlZFNoYWRlcihjYWNoZWRSZXNvdXJjZUxvYWRlcikpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkgJiYgcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS0+aXNQZW5kaW5nU2hhZGVyKCkpIHsKLSAgICAgICAgICAg
ICAgICBXZWJLaXRDU1NTaGFkZXJWYWx1ZSogc2hhZGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxTdHls
ZVBlbmRpbmdTaGFkZXIqPihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpKS0+Y3NzU2hhZGVyVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICBwcm9ncmFtLT5zZXRGcmFnbWVudFNoYWRlcihzaGFkZXJW
YWx1ZS0+Y2FjaGVkU2hhZGVyKGNhY2hlZFJlc291cmNlTG9hZGVyKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IGZhbHNlOwotfQot
Ci1zdGF0aWMgYm9vbCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRy
PEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGEsIGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJh
bWV0ZXI+JiBiKQotewotICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYS0+bmFt
ZSgpLCBiLT5uYW1lKCkpOwotfQotCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4g
U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbXRlcihjb25zdCBTdHJp
bmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVzKQotewotICAgIFJlZlB0cjxDdXN0b21GaWx0
ZXJOdW1iZXJQYXJhbWV0ZXI+IG51bWJlclBhcmFtZXRlciA9IEN1c3RvbUZpbHRlck51bWJlclBh
cmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZXMtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gdmFsdWVzLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpICE9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IG51bWJlclBhcmFtZXRlci0+YWRkVmFsdWUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVl
KCkpOwotICAgIH0KLSAgICByZXR1cm4gbnVtYmVyUGFyYW1ldGVyLnJlbGVhc2UoKTsKLX0KLQot
Ym9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFs
dWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVy
TGlzdCkKLXsKLSAgICBIYXNoU2V0PFN0cmluZz4ga25vd25QYXJhbWV0ZXJOYW1lczsKLSAgICBD
U1NWYWx1ZUxpc3RJdGVyYXRvciBwYXJhbWV0ZXJJdGVyYXRvcihwYXJhbWV0ZXJzVmFsdWUpOwot
ICAgIGZvciAoOyBwYXJhbWV0ZXJJdGVyYXRvci5oYXNNb3JlKCk7IHBhcmFtZXRlckl0ZXJhdG9y
LmFkdmFuY2UoKSkgewotICAgICAgICBpZiAoIXBhcmFtZXRlckl0ZXJhdG9yLnZhbHVlKCktPmlz
VmFsdWVMaXN0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENTU1ZhbHVl
TGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKHBhcmFtZXRlckl0ZXJhdG9yLnZhbHVlKCkpOwotICAgICAg
ICBpZiAoIWl0ZXJhdG9yLmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52YWx1ZSgpKTsKLSAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TVFJJTkcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBT
dHJpbmcgbmFtZSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAv
LyBEbyBub3QgYWxsb3cgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcy4KLSAgICAgICAgaWYgKGtu
b3duUGFyYW1ldGVyTmFtZXMuY29udGFpbnMobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGtub3duUGFyYW1ldGVyTmFtZXMuYWRkKG5hbWUpOwotICAgICAgICAKLSAg
ICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFpdGVyYXRv
ci5oYXNNb3JlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhcmFtZXRlcnMgdHlwZXMgcGFyc2luZy4KLSAg
ICAgICAgLy8gYm9vbGVhbnM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NjQzOAotICAgICAgICAvLyB0ZXh0dXJlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcxNDQyCi0gICAgICAgIC8vIDNkLXRyYW5zZm9ybXM6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQ0MwotICAgICAgICAvLyBtYXQyLCBtYXQz
LCBtYXQ0OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0NDQKLSAg
ICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyYW1ldGVyOwotICAgICAgICBp
ZiAoaXRlcmF0b3IudmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAgICAgQ1NTVmFs
dWVMaXN0KiB2YWx1ZXMgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihpdGVyYXRvci52YWx1
ZSgpKTsKLSAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gV2UgY2FuIGhhdmUgb25seSBhcnJheXMgb2YgYm9vbGVhbnMgb3IgbnVtYmVy
cywgc28gdXNlIHRoZSBmaXJzdCB2YWx1ZSB0byBjaG9vc2UgYmV0d2VlbiB0aG9zZSB0d28uCi0g
ICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgdmFsdWUuIFdlIG5l
ZWQgdXAgdG8gNCB2YWx1ZXMgKGFsbCBib29sZWFucyBvciBhbGwgbnVtYmVycykuCi0gICAgICAg
ICAgICBpZiAoIXZhbHVlcy0+bGVuZ3RoKCkgfHwgdmFsdWVzLT5sZW5ndGgoKSA+IDQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
IXZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0UHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7Ci0gICAg
ICAgICAgICBpZiAoZmlyc3RQcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQotICAgICAgICAgICAgICAgIHBhcmFtZXRlciA9IHBh
cnNlQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW10ZXIobmFtZSwgdmFsdWVzKTsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIGJvb2xlYW4gYXJyYXkgcGFyYW1ldGVyIGhlcmUuCi0g
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0
MzgKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXIpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBwYXJhbWV0ZXJMaXN0LmFwcGVu
ZChwYXJhbWV0ZXIucmVsZWFzZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBzdXJlIHdl
IHNvcnQgdGhlIHBhcmFtZXRlcnMgYmVmb3JlIHBhc3NpbmcgdGhlbSBkb3duIHRvIHRoZSBDdXN0
b21GaWx0ZXJPcGVyYXRpb24uCi0gICAgc3RkOjpzb3J0KHBhcmFtZXRlckxpc3QuYmVnaW4oKSwg
cGFyYW1ldGVyTGlzdC5lbmQoKSwgc29ydFBhcmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKTsKLSAg
ICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRp
b24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NG
aWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCi17Ci0gICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5n
dGgoKSk7Ci0KLSAgICBDU1NWYWx1ZSogc2hhZGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMCk7Ci0gICAgQVNTRVJUKHNoYWRlcnNWYWx1ZS0+aXNWYWx1ZUxp
c3QoKSk7Ci0gICAgQ1NTVmFsdWVMaXN0KiBzaGFkZXJzTGlzdCA9IHN0YXRpY19jYXN0PENTU1Zh
bHVlTGlzdCo+KHNoYWRlcnNWYWx1ZSk7Ci0KLSAgICBBU1NFUlQoc2hhZGVyc0xpc3QtPmxlbmd0
aCgpKTsKLSAgICBSZWZQdHI8U3R5bGVTaGFkZXI+IHZlcnRleFNoYWRlciA9IHN0eWxlU2hhZGVy
KHNoYWRlcnNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKLSAgICBSZWZQdHI8U3R5
bGVTaGFkZXI+IGZyYWdtZW50U2hhZGVyID0gKHNoYWRlcnNMaXN0LT5sZW5ndGgoKSA+IDEpID8g
c3R5bGVTaGFkZXIoc2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpIDogMDsK
LSAgICAKLSAgICB1bnNpZ25lZCBtZXNoUm93cyA9IDE7Ci0gICAgdW5zaWduZWQgbWVzaENvbHVt
bnMgPSAxOwotICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUgbWVzaEJveFR5
cGUgPSBDdXN0b21GaWx0ZXJPcGVyYXRpb246OkZJTFRFUl9CT1g7Ci0gICAgQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uOjpNZXNoVHlwZSBtZXNoVHlwZSA9IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6QVRU
QUNIRUQ7Ci0gICAgCi0gICAgQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSA9IDA7Ci0gICAgCi0g
ICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgQ1NTVmFsdWVMaXN0
SXRlcmF0b3IgaXRlcmF0b3IoZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkp
OwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHNlY29uZCB2YWx1ZSBtaWdodCBiZSB0aGUgbWVz
aCBib3ggb3IgdGhlIGxpc3Qgb2YgcGFyYW1ldGVyczoKLSAgICAgICAgLy8gSWYgaXQgc3RhcnRz
IHdpdGggYSBudW1iZXIgb3IgYW55IG9mIHRoZSBtZXNoLWJveCBpZGVudGlmaWVycyBpdCBpcyAK
LSAgICAgICAgLy8gdGhlIG1lc2gtYm94IGxpc3QsIGlmIG5vdCBpdCBtZWFucyBpdCBpcyB0aGUg
cGFyYW1ldGVycyBsaXN0LgotCi0gICAgICAgIGlmIChpdGVyYXRvci5oYXNNb3JlKCkgJiYgaXRl
cmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJh
dG9yLnZhbHVlKCkpOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgb25seSBvbmUgaW50ZWdlciB2YWx1ZSBpcyBzcGVj
aWZpZWQsIGl0IHdpbGwgc2V0IGJvdGgKLSAgICAgICAgICAgICAgICAvLyB0aGUgcm93cyBhbmQg
dGhlIGNvbHVtbnMuCi0gICAgICAgICAgICAgICAgbWVzaFJvd3MgPSBtZXNoQ29sdW1ucyA9IHBy
aW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFk
dmFuY2UoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbWF0
Y2ggYW5vdGhlciBudW1iZXIgZm9yIHRoZSBjb2x1bW5zLgotICAgICAgICAgICAgICAgIGlmIChp
dGVyYXRvci5oYXNNb3JlKCkgJiYgaXRlcmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzaENvbHVtbnMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc01vcmUoKSAmJiBpdGVyYXRvci5pc1By
aW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUo
KSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVCb3JkZXJCb3gKLSAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZVBhZGRpbmdCb3gKLSAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKLSAgICAgICAgICAgICAgICB8fCBw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUZpbHRlckJveCkgewotICAgICAg
ICAgICAgICAgIG1lc2hCb3hUeXBlID0gKnByaW1pdGl2ZVZhbHVlOwotICAgICAgICAgICAgICAg
IGl0ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc01vcmUoKSAmJiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZh
bHVlKCkpIHsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7Ci0gICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEZXRhY2hl
ZCkgewotICAgICAgICAgICAgICAgIG1lc2hUeXBlID0gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpE
RVRBQ0hFRDsKLSAgICAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghaXRlcmF0b3IuaW5kZXgoKSkg
ewotICAgICAgICAgICAgLy8gSWYgbm8gdmFsdWUgd2FzIGNvbnN1bWVkIGZyb20gdGhlIG1lc2gg
dmFsdWUsIHRoZW4gaXQgaXMganVzdCBhIHBhcmFtZXRlciBsaXN0LCBtZWFuaW5nIHRoYXQgd2Ug
ZW5kIHVwCi0gICAgICAgICAgICAvLyBoYXZpbmcganVzdCB0d28gQ1NTTGlzdFZhbHVlczogbGlz
dCBvZiBzaGFkZXJzIGFuZCBsaXN0IG9mIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICBBU1NFUlQo
ZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09IDIpOwotICAgICAgICAgICAgcGFyYW1ldGVyc1ZhbHVl
ID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA+IDIgJiYgIXBhcmFtZXRl
cnNWYWx1ZSkKLSAgICAgICAgcGFyYW1ldGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMik7Ci0gICAgCi0gICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBw
YXJhbWV0ZXJMaXN0OwotICAgIGlmIChwYXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmls
dGVyUGFyYW1ldGVyTGlzdChwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICAKLSAgICBSZWZQdHI8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBw
cm9ncmFtID0gU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUodmVydGV4U2hhZGVyLnJl
bGVhc2UoKSwgZnJhZ21lbnRTaGFkZXIucmVsZWFzZSgpKTsKLSAgICByZXR1cm4gQ3VzdG9tRmls
dGVyT3BlcmF0aW9uOjpjcmVhdGUocHJvZ3JhbS5yZWxlYXNlKCksIHBhcmFtZXRlckxpc3QsIG1l
c2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaEJveFR5cGUsIG1lc2hUeXBlKTsKLX0KLSNlbmRpZgot
Ci1ib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGlu
VmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVy
T3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKLXsKLSAgICBBU1NFUlQob3V0T3BlcmF0aW9ucy5p
c0VtcHR5KCkpOwotICAgIAotICAgIGlmICghaW5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIGlmIChpblZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihpblZhbHVlKTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoIWluVmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSA/IHN0eWxlLT5lZmZlY3RpdmVab29t
KCkgOiAxOwotICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBmb3IgKENTU1Zh
bHVlTGlzdEl0ZXJhdG9yIGkgPSBpblZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsK
LSAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgaWYgKCFj
dXJyVmFsdWUtPmlzV2ViS2l0Q1NTRmlsdGVyVmFsdWUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19j
YXN0PFdlYktpdENTU0ZpbHRlclZhbHVlKj4oaS52YWx1ZSgpKTsKLSAgICAgICAgRmlsdGVyT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBmaWx0ZXJPcGVyYXRpb25Gb3JU
eXBlKGZpbHRlclZhbHVlLT5vcGVyYXRpb25UeXBlKCkpOwotCi0jaWYgRU5BQkxFKENTU19TSEFE
RVJTKQotICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RP
TSkgewotICAgICAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9u
ID0gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKGZpbHRlclZhbHVlKTsKLSAgICAgICAgICAg
IGlmICghb3BlcmF0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKG9wZXJhdGlv
bik7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBhbGwgcGFyYW1ldGVycyBhcmUgcHJpbWl0aXZlIHZhbHVlcywgd2l0aCB0
aGUKLSAgICAgICAgLy8gZXhjZXB0aW9uIG9mIGRyb3Agc2hhZG93IHdoaWNoIGhhcyBhIFNoYWRv
d1ZhbHVlIHBhcmFtZXRlci4KLSAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgIT0gRmlsdGVyT3Bl
cmF0aW9uOjpEUk9QX1NIQURPVykgewotICAgICAgICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0aXZl
VmFsdWUgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBmaWx0
ZXJWYWx1ZS0+bGVuZ3RoKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmICghZmlsdGVyVmFs
dWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaiktPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoaGF2ZU5vblByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUg
PSBmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPyBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKSA6IDA7Ci0gICAgICAgIHN3
aXRjaCAoZmlsdGVyVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkgewotICAgICAgICBjYXNlIFdlYktp
dENTU0ZpbHRlclZhbHVlOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246IHsKLSAgICAgICAgICAg
IGlmIChmaXJzdFZhbHVlKQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygp
LmFwcGVuZChSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShmaXJzdFZhbHVlLT5nZXRT
dHJpbmdWYWx1ZSgpLCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpHcmF5c2NhbGVGaWx0ZXJP
cGVyYXRpb246Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVy
T3BlcmF0aW9uOgotICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZp
bHRlck9wZXJhdGlvbjogewotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7Ci0gICAgICAg
ICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBh
bW91bnQgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlm
IChmaXJzdFZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgYW1vdW50
IC89IDEwMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbW91
bnQsIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlvbjog
ewotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gMDsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJW
YWx1ZS0+bGVuZ3RoKCkgPT0gMSkKLSAgICAgICAgICAgICAgICBhbmdsZSA9IGZpcnN0VmFsdWUt
PmNvbXB1dGVEZWdyZWVzKCk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygp
LmFwcGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW5nbGUsIG9w
ZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkludmVydEZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAg
Y2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjoKLSAg
ICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb246
Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRp
b246IHsKLSAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAoZmlsdGVyVmFsdWUtPm9wZXJhdGlv
blR5cGUoKSA9PSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlv
bikgPyAwIDogMTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkg
ewotICAgICAgICAgICAgICAgIGFtb3VudCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAg
ICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFtb3VudCwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6
Qmx1ckZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAgICAgTGVuZ3RoIHN0ZERldmlhdGlvbiA9
IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgp
ID49IDEpIHsKLSAgICAgICAgICAgICAgICBzdGREZXZpYXRpb24gPSBjb252ZXJ0VG9GbG9hdExl
bmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChzdGREZXZpYXRpb24uaXNVbmRlZmluZWQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0
aW9ucygpLmFwcGVuZChCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBv
cGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOiB7Ci0g
ICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpICE9IDEpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWUgPSBmaWx0
ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKLSAgICAgICAgICAgIGlmICghY3Nz
VmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGNz
c1ZhbHVlKTsKLSAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNvbXB1dGVM
ZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0
eWxlLCB6b29tRmFjdG9yKSk7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBp
dGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rv
cikgOiAwOwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBpZiAoaXRlbS0+
Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShp
dGVtLT5jb2xvci5nZXQoKSk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygp
LmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRpb24sIGJsdXIs
IGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50LCBvcGVyYXRpb25U
eXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYktp
dENTU0ZpbHRlclZhbHVlOjpVbmtub3duRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIG91dE9wZXJhdGlvbnMgPSBvcGVyYXRpb25zOwotICAg
IHJldHVybiB0cnVlOwotfQotCi0jZW5kaWYKLQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1h
Z2UpCi17Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0g
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwotCi0gICAgaWYg
KHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgIENTU0ltYWdlVmFsdWUq
IGltYWdlVmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFsdWUoKTsKLSAgICAgICAgcmV0
dXJuIGltYWdlVmFsdWUtPmNhY2hlZEltYWdlKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLSAgICB9
Ci0KLSAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKLSAg
ICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogaW1hZ2VHZW5lcmF0b3JWYWx1ZSA9IHBlbmRp
bmdJbWFnZS0+Y3NzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpOwotICAgICAgICBpbWFnZUdlbmVyYXRv
clZhbHVlLT5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLSAgICAgICAgcmV0
dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShpbWFnZUdlbmVyYXRvclZhbHVlKTsKLSAg
ICB9Ci0KLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBpZiAocGVuZGluZ0ltYWdlLT5j
c3NJbWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAgQ1NTSW1hZ2VTZXRWYWx1ZSogaW1hZ2VTZXRW
YWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VTZXRWYWx1ZSgpOwotICAgICAgICByZXR1cm4g
aW1hZ2VTZXRWYWx1ZS0+Y2FjaGVkSW1hZ2VTZXQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotICAg
IH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9h
ZFBlbmRpbmdJbWFnZXMoKQotewotICAgIGlmIChtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGlu
Z0ltYWdlUHJvcGVydGllcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ1NT
UHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSAqaXQ7Ci0KLSAgICAgICAgc3dpdGNoIChjdXJy
ZW50UHJvcGVydHkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1h
Z2U6IHsKLSAgICAgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0g
bV9zdHlsZS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tn
cm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFn
ZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3Vu
ZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGlu
Z0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlDb250ZW50OiB7Ci0gICAgICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSog
Y29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdHlsZS0+Y29udGVudERh
dGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2VD
b250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+aW1hZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uo
c3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChsb2FkZWRJbWFnZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+c2V0SW1h
Z2UobG9hZGVkSW1hZ2UucmVsZWFzZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDdXJzb3I6
IHsKLSAgICAgICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IG1fc3R5bGUt
PmN1cnNvcnMoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDdXJz
b3JEYXRhJiBjdXJyZW50Q3Vyc29yID0gY3Vyc29yTGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdl
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDdXJzb3Iuc2V0SW1h
Z2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdl
KSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9zdHlsZS0+bGlzdFN0eWxl
SW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRp
bmdJbWFnZSo+KG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+Ym9yZGVySW1hZ2VT
b3VyY2UoKSAmJiBtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgp
KQotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2Fk
UGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+Ym9y
ZGVySW1hZ2VTb3VyY2UoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1fc3R5bGUtPmJv
eFJlZmxlY3QoKSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYg
bWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
bWFza0ltYWdlLmltYWdlKCkgJiYgbWFza0ltYWdlLmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFn
ZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNr
SW1hZ2UuaW1hZ2UoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0
TWFzayhOaW5lUGllY2VJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCksIG1hc2tJbWFnZS5pbWFn
ZVNsaWNlcygpLCBtYXNrSW1hZ2UuZmlsbCgpLCBtYXNrSW1hZ2UuYm9yZGVyU2xpY2VzKCksIG1h
c2tJbWFnZS5vdXRzZXQoKSwgbWFza0ltYWdlLmhvcml6b250YWxSdWxlKCksIG1hc2tJbWFnZS52
ZXJ0aWNhbFJ1bGUoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgICAg
IGlmIChtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0eWxlLT5tYXNrQm94SW1h
Z2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrSW1hZ2U6IHsKLSAgICAgICAgICAgICAgICBmb3IgKEZpbGxMYXllciog
bWFza0xheWVyID0gbV9zdHlsZS0+YWNjZXNzTWFza0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tM
YXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXNr
TGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgbWFza0xheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0lt
YWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMu
Y2xlYXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MTM5NmNiOGMz
Y2ExM2Y2MDk5NDE2YTE1ZWY1MTk2YjNlYWFiMDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
aAorKysgL2Rldi9udWxsCkBAIC0xLDU0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBDU1NTdHlsZVNlbGVjdG9yX2gKLSNkZWZp
bmUgQ1NTU3R5bGVTZWxlY3Rvcl9oCi0KLSNpbmNsdWRlICJDU1NSdWxlLmgiCi0jaW5jbHVkZSAi
Q1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSAiTGlua0hhc2guaCIKLSNpbmNsdWRlICJNZWRpYVF1
ZXJ5RXhwLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTZWxlY3RvckNo
ZWNrZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
ZW51bSBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgeyBEb05vdFVzZVNtYXJ0TWluaW11bUZvckZv
bnRTaXplLCBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSB9OwotCi1jbGFzcyBDU1NGb250U2Vs
ZWN0b3I7Ci1jbGFzcyBDU1NQYWdlUnVsZTsKLWNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwotY2xh
c3MgQ1NTUHJvcGVydHk7Ci1jbGFzcyBDU1NSdWxlTGlzdDsKLWNsYXNzIENTU0ZvbnRGYWNlOwot
Y2xhc3MgQ1NTRm9udEZhY2VSdWxlOwotY2xhc3MgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTsKLWNs
YXNzIENTU0ltYWdlU2V0VmFsdWU7Ci1jbGFzcyBDU1NJbWFnZVZhbHVlOwotY2xhc3MgQ1NTU2Vs
ZWN0b3I7Ci1jbGFzcyBDU1NTdHlsZVJ1bGU7Ci1jbGFzcyBDU1NTdHlsZVNoZWV0OwotY2xhc3Mg
Q1NTVmFsdWU7Ci1jbGFzcyBDb250YWluZXJOb2RlOwotY2xhc3MgQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uOwotY2xhc3MgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFz
cyBFbGVtZW50OwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBLVVJMOwot
Y2xhc3MgS2V5ZnJhbWVMaXN0OwotY2xhc3MgS2V5ZnJhbWVWYWx1ZTsKLWNsYXNzIE1lZGlhUXVl
cnlFdmFsdWF0b3I7Ci1jbGFzcyBOb2RlOwotY2xhc3MgUmVuZGVyUmVnaW9uOwotY2xhc3MgUnVs
ZURhdGE7Ci1jbGFzcyBSdWxlU2V0OwotY2xhc3MgU2V0dGluZ3M7Ci1jbGFzcyBTdGF0aWNDU1NS
dWxlTGlzdDsKLWNsYXNzIFN0eWxlQnVpbGRlcjsKLWNsYXNzIFN0eWxlSW1hZ2U7Ci1jbGFzcyBT
dHlsZUtleWZyYW1lOwotY2xhc3MgU3R5bGVQZW5kaW5nSW1hZ2U7Ci1jbGFzcyBTdHlsZVByb3Bl
cnR5U2V0OwotY2xhc3MgU3R5bGVSdWxlOwotY2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwotY2xh
c3MgU3R5bGVSdWxlUGFnZTsKLWNsYXNzIFN0eWxlUnVsZVJlZ2lvbjsKLWNsYXNzIFN0eWxlU2hh
ZGVyOwotY2xhc3MgU3R5bGVTaGVldDsKLWNsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKLWNsYXNz
IFN0eWxlU2hlZXRMaXN0OwotY2xhc3MgU3R5bGVkRWxlbWVudDsKLWNsYXNzIFdlYktpdENTU0Zp
bHRlclZhbHVlOwotY2xhc3MgV2ViS2l0Q1NTU2hhZGVyVmFsdWU7Ci0KLSNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiA+
IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3Q7Ci0jZW5kaWYKLQotY2xhc3MgTWVkaWFRdWVyeVJl
c3VsdCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVkaWFRdWVyeVJlc3VsdCk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE1lZGlhUXVlcnlSZXN1bHQoY29uc3Qg
TWVkaWFRdWVyeUV4cCYgZXhwciwgYm9vbCByZXN1bHQpCi0gICAgICAgIDogbV9leHByZXNzaW9u
KGV4cHIpCi0gICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQotICAgIHsKLSAgICB9Ci0KLSAgICBN
ZWRpYVF1ZXJ5RXhwIG1fZXhwcmVzc2lvbjsKLSAgICBib29sIG1fcmVzdWx0OwotfTsKLQotZW51
bSBTdHlsZVNoYXJpbmdCZWhhdmlvciB7Ci0gICAgQWxsb3dTdHlsZVNoYXJpbmcsCi0gICAgRGlz
YWxsb3dTdHlsZVNoYXJpbmcsCi19OwotCi0vLyBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyBpcyB1
c2VkIGluIG1lZGlhIHF1ZXJpZXMsIHdoZXJlIHJlbGF0aXZlIHVuaXRzCi0vLyBhcmUgaW50ZXJw
cmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudCByb290IGVsZW1lbnQgc3R5bGUsIGFuZCBz
dHlsZWQgb25seQotLy8gZnJvbSB0aGUgVXNlciBBZ2VudCBTdHlsZXNoZWV0IHJ1bGVzLgotCi1l
bnVtIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIHsKLSAgICBNYXRjaEFsbFJ1bGVzLAotICAgIE1hdGNo
T25seVVzZXJBZ2VudFJ1bGVzLAotfTsKLQotLy8gVGhpcyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVy
U3R5bGUgZm9yIGEgZ2l2ZW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVz
aGVldHMuCi1jbGFzcyBTdHlsZVJlc29sdmVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
dHlsZVJlc29sdmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgU3R5
bGVSZXNvbHZlcihEb2N1bWVudCosIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKLSAg
ICB+U3R5bGVSZXNvbHZlcigpOwotCi0gICAgLy8gVXNpbmcgdGhlc2UgZHVyaW5nIHRyZWUgd2Fs
ayB3aWxsIGFsbG93IHN0eWxlIHNlbGVjdG9yIHRvIG9wdGltaXplIGNoaWxkIGFuZCBkZXNjZW5k
YW50IHNlbGVjdG9yIGxvb2t1cHMuCi0gICAgdm9pZCBwdXNoUGFyZW50RWxlbWVudChFbGVtZW50
Kik7Ci0gICAgdm9pZCBwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKLSAgICB2b2lkIHB1c2hQ
YXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKLSAgICB2b2lkIHBvcFBhcmVudFNo
YWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCopOwotCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAw
LCBTdHlsZVNoYXJpbmdCZWhhdmlvciA9IEFsbG93U3R5bGVTaGFyaW5nLAotICAgICAgICBSdWxl
TWF0Y2hpbmdCZWhhdmlvciA9IE1hdGNoQWxsUnVsZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9y
U3R5bGluZyA9IDApOwotCi0gICAgdm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVt
ZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBLZXlmcmFtZUxpc3QmKTsKLQotICAgIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCwgRWxlbWVudCos
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDApOwotCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gc3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpOwotCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqLCBDU1NGb250U2VsZWN0
b3IqID0gMCk7Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0
eWxlLmdldCgpOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJlbnRTdHlsZTsgfQotICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9Ci0gICAgRWxlbWVudCogZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQotICAgIERvY3VtZW50KiBkb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2hlY2tlci5kb2N1bWVudCgpOyB9Ci0gICAgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBzdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKTsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0
aW9uKCkgeyByZXR1cm4gcGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICB2
b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsgfQotICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9
IHN0eWxlKCktPnNldFpvb20oZik7IH0KLSAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQg
ZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9Ci0gICAg
dm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+
c2V0VGV4dFNpemVBZGp1c3QoYik7IH0KLSAgICBib29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudE5vZGU7IH0KLSAgICAKLSAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxl
c2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+
ID4mKTsKLSAgICAKLSAgICAvLyBGaW5kIHRoZSBpZHMgb3IgY2xhc3NlcyB0aGUgc2VsZWN0b3Jz
IG9uIGEgc3R5bGVzaGVldCBhcmUgc2NvcGVkIHRvLiBUaGUgc2VsZWN0b3JzIG9ubHkgYXBwbHkg
dG8gZWxlbWVudHMgaW4gc3VidHJlZXMgd2hlcmUgdGhlIHJvb3QgZWxlbWVudCBtYXRjaGVzIHRo
ZSBzY29wZS4KLSAgICBzdGF0aWMgYm9vbCBkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29w
ZXMoU3R5bGVTaGVldEludGVybmFsKiwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2Nv
cGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpOwotCi1wcml2YXRl
OgotICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7Ci0gICAgdm9pZCBpbml0RWxlbWVu
dChFbGVtZW50Kik7Ci0gICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMoKTsKLSAgICBSZW5kZXJTdHls
ZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKLSAgICBib29sIG1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQq
KTsKLSAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQm
IHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0OwotICAgIFN0eWxlZEVsZW1lbnQqIGZpbmRTaWJsaW5n
Rm9yU3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OwotICAgIGJvb2wg
Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKLQotICAgIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBTdHlsZUtleWZyYW1lKiwgS2V5ZnJhbWVWYWx1ZSYpOwotCi0jaWYgRU5BQkxFKFNU
WUxFX1NDT1BFRCkKLSAgICB2b2lkIHB1c2hTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVQYXJlbnQpOwotICAgIHZvaWQgcG9wU2NvcGUo
Y29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOwotI2Vsc2UKLSAgICB2b2lkIHB1c2hTY29wZShj
b25zdCBDb250YWluZXJOb2RlKiwgY29uc3QgQ29udGFpbmVyTm9kZSopIHsgfQotICAgIHZvaWQg
cG9wU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSopIHsgfQotI2VuZGlmCi0KLXB1YmxpYzoKLSAg
ICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBiYWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBt
YXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9yIGEgcHNldWRvLWVsZW1lbnQpLgotICAgIGVu
dW0gQ1NTUnVsZUZpbHRlciB7Ci0gICAgICAgIFVBQW5kVXNlckNTU1J1bGVzICAgPSAxIDw8IDEs
Ci0gICAgICAgIEF1dGhvckNTU1J1bGVzICAgICAgPSAxIDw8IDIsCi0gICAgICAgIEVtcHR5Q1NT
UnVsZXMgICAgICAgPSAxIDw8IDMsCi0gICAgICAgIENyb3NzT3JpZ2luQ1NTUnVsZXMgPSAxIDw8
IDQsCi0gICAgICAgIEFsbEJ1dEVtcHR5Q1NTUnVsZXMgPSBVQUFuZFVzZXJDU1NSdWxlcyB8IEF1
dGhvckNTU1J1bGVzIHwgQ3Jvc3NPcmlnaW5DU1NSdWxlcywKLSAgICAgICAgQWxsQ1NTUnVsZXMg
ICAgICAgICA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMgfCBFbXB0eUNTU1J1bGVzLAotICAgIH07Ci0g
ICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gc3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCos
IHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlID0gQWxsQnV0RW1wdHlDU1NSdWxlcyk7Ci0gICAgUGFz
c1JlZlB0cjxDU1NSdWxlTGlzdD4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCos
IFBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMp
OwotCi0gICAgLy8gR2l2ZW4gYSBDU1Mga2V5d29yZCBpbiB0aGUgcmFuZ2UgKHh4LXNtYWxsIHRv
IC13ZWJraXQteHh4LWxhcmdlKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybgotICAgIC8vIHRo
ZSBjb3JyZWN0IGZvbnQgc2l6ZSBzY2FsZWQgcmVsYXRpdmUgdG8gdGhlIHVzZXIncyBkZWZhdWx0
IChtZWRpdW0pLgotICAgIHN0YXRpYyBmbG9hdCBmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQq
LCBpbnQga2V5d29yZCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKTsKLQotICAgIC8v
IEdpdmVuIGEgZm9udCBzaXplIGluIHBpeGVsLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGxl
Z2FjeSBmb250IHNpemUgYmV0d2VlbiAxIGFuZCA3LgotICAgIHN0YXRpYyBpbnQgbGVnYWN5Rm9u
dFNpemUoRG9jdW1lbnQqLCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhlZERl
ZmF1bHRTaXplKTsKLQotcHVibGljOgotICAgIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gcykgeyBtX3N0eWxlID0gczsgfSAvLyBVc2VkIGJ5IHRoZSBkb2N1bWVudCB3aGVu
IHNldHRpbmcgdXAgaXRzIHJvb3Qgc3R5bGUuCi0KLSAgICB2b2lkIGFwcGx5UHJvcGVydHlUb1N0
eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqKTsKLQotICAgIHZvaWQg
YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0K
LSAgICB2b2lkIHVwZGF0ZUZvbnQoKTsKLQotICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNp
emVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIGZsb2F0IHpvb21GYWN0b3IsIGJvb2wgaXNB
YnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1pbmltdW1Gb3JGb250U2l6
ZSA9IFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplKTsKLQotICAgIHZvaWQgc2V0Rm9udFNpemUo
Rm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGZs
b2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiwgUmVuZGVyU3R5
bGUqLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNW
R1pvb21SdWxlcyk7Ci0KLXB1YmxpYzoKLSAgICBib29sIHVzZVNWR1pvb21SdWxlcygpOwotCi0g
ICAgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29s
IGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNTZWxlY3RvckZv
ckF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLQotICAgIENTU0ZvbnRTZWxl
Y3RvciogZm9udFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0b3IuZ2V0KCk7
IH0KLQotICAgIHZvaWQgYWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0
IE1lZGlhUXVlcnlFeHAqLCBib29sIHJlc3VsdCk7Ci0KLSAgICBib29sIGFmZmVjdGVkQnlWaWV3
cG9ydENoYW5nZSgpIGNvbnN0OwotCi0gICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCkg
eyBtX2NoZWNrZXIuYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOyB9Ci0gICAgdm9pZCB2aXNpdGVk
U3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKSB7IG1fY2hlY2tlci52aXNpdGVkU3Rh
dGVDaGFuZ2VkKHZpc2l0ZWRIYXNoKTsgfQotCi0gICAgdm9pZCBhZGRLZXlmcmFtZVN0eWxlKFBh
c3NSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPik7Ci0KLSAgICBib29sIGNoZWNrUmVnaW9uU3R5
bGUoRWxlbWVudCogcmVnaW9uRWxlbWVudCk7Ci0KLSAgICBib29sIHVzZXNTaWJsaW5nUnVsZXMo
KSBjb25zdCB7IHJldHVybiAhbV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpOyB9Ci0g
ICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVz
ZXNGaXJzdExpbmVSdWxlczsgfQotICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXMoKSBjb25z
dCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNCZWZvcmVBZnRlclJ1bGVzOyB9Ci0gICAgYm9vbCB1
c2VzTGlua1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzTGlua1J1bGVzOyB9
Ci0KLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgVHJh
bnNmb3JtT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7Ci0gICAgCi0gICAgdm9pZCBpbnZhbGlk
YXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwotICAgIAotICAgIC8vIFdBUk5JTkcuIFRoaXMg
d2lsbCBjb25zdHJ1Y3QgQ1NTT00gd3JhcHBlcnMgZm9yIGFsbCBzdHlsZSBydWxlcyBhbmQgY2Fj
aGUgdGhlbiBpbiBhIG1hcCBmb3Igc2lnbmlmaWNhbnQgbWVtb3J5IGNvc3QuCi0gICAgLy8gSXQg
aXMgaGVyZSB0byBzdXBwb3J0IGluc3BlY3Rvci4gRG9uJ3QgdXNlIGZvciBhbnkgcmVndWxhciBl
bmdpbmUgZnVuY3Rpb25zLgotICAgIENTU1N0eWxlUnVsZSogZW5zdXJlRnVsbENTU09NV3JhcHBl
ckZvckluc3BlY3RvcihTdHlsZVJ1bGUqKTsKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAg
ICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0
eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBv
dXRPcGVyYXRpb25zKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgU3R5bGVTaGFkZXIq
IHN0eWxlU2hhZGVyKENTU1ZhbHVlKik7Ci0gICAgU3R5bGVTaGFkZXIqIGNhY2hlZE9yUGVuZGlu
Z1N0eWxlU2hhZGVyRnJvbVZhbHVlKFdlYktpdENTU1NoYWRlclZhbHVlKik7Ci0gICAgYm9vbCBw
YXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqLCBDdXN0b21GaWx0ZXJQYXJh
bWV0ZXJMaXN0Jik7Ci0gICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNl
Q3VzdG9tRmlsdGVyTnVtYmVyUGFyYW10ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxp
c3QqKTsKLSAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uKFdlYktpdENTU0ZpbHRlclZhbHVlKik7Ci0gICAgdm9pZCBsb2FkUGVu
ZGluZ1NoYWRlcnMoKTsKLSNlbmRpZgotI2VuZGlmIC8vIEVOQUJMRShDU1NfRklMVEVSUykKLQot
ICAgIHN0cnVjdCBSdWxlRmVhdHVyZSB7Ci0gICAgICAgIFJ1bGVGZWF0dXJlKFN0eWxlUnVsZSog
cnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4pCi0gICAgICAgICAgICA6IHJ1bGUocnVsZSkKLSAgICAgICAgICAgICwgc2VsZWN0b3Ioc2Vs
ZWN0b3IpCi0gICAgICAgICAgICAsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbikgCi0gICAgICAgIHsgCi0gICAgICAgIH0KLSAgICAgICAgU3R5bGVS
dWxlKiBydWxlOwotICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgICAgIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbjsKLSAgICB9OwotICAgIHN0cnVjdCBGZWF0dXJlcyB7
Ci0gICAgICAgIEZlYXR1cmVzKCk7Ci0gICAgICAgIH5GZWF0dXJlcygpOwotICAgICAgICB2b2lk
IGFkZChjb25zdCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYpOwotICAgICAgICB2b2lkIGNsZWFy
KCk7Ci0gICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlkc0luUnVsZXM7Ci0gICAg
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGF0dHJzSW5SdWxlczsKLSAgICAgICAgVmVj
dG9yPFJ1bGVGZWF0dXJlPiBzaWJsaW5nUnVsZXM7Ci0gICAgICAgIFZlY3RvcjxSdWxlRmVhdHVy
ZT4gdW5jb21tb25BdHRyaWJ1dGVSdWxlczsKLSAgICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVs
ZXM7Ci0gICAgICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXM7Ci0gICAgICAgIGJvb2wgdXNl
c0xpbmtSdWxlczsKLSAgICB9OwotCi1wcml2YXRlOgotICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4
ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgY3VycmVu
dCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoCi0gICAgdm9pZCBjaGVja0Zv
ckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUpOwotICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKLQot
ICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCopOwotCi0gICAgdm9pZCBhZGRNYXRjaGVk
UnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7
IH0KLQotICAgIHN0cnVjdCBNYXRjaFJhbmdlcyB7Ci0gICAgICAgIE1hdGNoUmFuZ2VzKCkgOiBm
aXJzdFVBUnVsZSgtMSksIGxhc3RVQVJ1bGUoLTEpLCBmaXJzdEF1dGhvclJ1bGUoLTEpLCBsYXN0
QXV0aG9yUnVsZSgtMSksIGZpcnN0VXNlclJ1bGUoLTEpLCBsYXN0VXNlclJ1bGUoLTEpIHsgfQot
ICAgICAgICBpbnQgZmlyc3RVQVJ1bGU7Ci0gICAgICAgIGludCBsYXN0VUFSdWxlOwotICAgICAg
ICBpbnQgZmlyc3RBdXRob3JSdWxlOwotICAgICAgICBpbnQgbGFzdEF1dGhvclJ1bGU7Ci0gICAg
ICAgIGludCBmaXJzdFVzZXJSdWxlOwotICAgICAgICBpbnQgbGFzdFVzZXJSdWxlOwotICAgIH07
Ci0KLSAgICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXMgewotICAgICAgICBNYXRjaGVkUHJvcGVy
dGllcygpIDogcG9zc2libHlQYWRkZWRNZW1iZXIoMCkgeyB9Ci0gICAgICAgIAotICAgICAgICBS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gcHJvcGVydGllczsKLSAgICAgICAgdW5pb24gewotICAg
ICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBl
IDogMjsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpc0luUmVnaW9uUnVsZSA6IDE7Ci0gICAg
ICAgICAgICB9OwotICAgICAgICAgICAgLy8gVXNlZCB0byBtYWtlIHN1cmUgYWxsIG1lbW9yeSBp
cyB6ZXJvLWluaXRpYWxpemVkIHNpbmNlIHdlIGNvbXB1dGUgdGhlIGhhc2ggb3ZlciB0aGUgYnl0
ZXMgb2YgdGhpcyBvYmplY3QuCi0gICAgICAgICAgICB2b2lkKiBwb3NzaWJseVBhZGRlZE1lbWJl
cjsKLSAgICAgICAgfTsKLSAgICB9OwotCi0gICAgc3RydWN0IE1hdGNoUmVzdWx0IHsKLSAgICAg
ICAgTWF0Y2hSZXN1bHQoKSA6IGlzQ2FjaGVhYmxlKHRydWUpIHsgfQotICAgICAgICBWZWN0b3I8
TWF0Y2hlZFByb3BlcnRpZXMsIDY0PiBtYXRjaGVkUHJvcGVydGllczsKLSAgICAgICAgVmVjdG9y
PFN0eWxlUnVsZSosIDY0PiBtYXRjaGVkUnVsZXM7Ci0gICAgICAgIE1hdGNoUmFuZ2VzIHJhbmdl
czsKLSAgICAgICAgYm9vbCBpc0NhY2hlYWJsZTsKLSAgICB9OwotCi0gICAgc3RydWN0IE1hdGNo
T3B0aW9ucyB7Ci0gICAgICAgIE1hdGNoT3B0aW9ucyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IDApIDogc2NvcGUoc2NvcGUpLCBpbmNsdWRlRW1w
dHlSdWxlcyhpbmNsdWRlRW1wdHlSdWxlcykgeyB9Ci0gICAgICAgIGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlOwotICAgICAgICBib29sIGluY2x1ZGVFbXB0eVJ1bGVzOwotICAgIH07Ci0KLSAg
ICBzdGF0aWMgdm9pZCBhZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaFJlc3VsdCYsIFN0eWxlUHJv
cGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogPSAwLCB1bnNpZ25lZCBsaW5rTWF0Y2hU
eXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCwgYm9vbCBpblJlZ2lvblJ1bGUgPSBmYWxz
ZSk7Ci0gICAgdm9pZCBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgU3R5
bGVQcm9wZXJ0eVNldCosIGJvb2wgaXNDYWNoZWFibGUgPSB0cnVlKTsKLQotICAgIHZvaWQgbWF0
Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYpOwotICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVz
dWx0Jik7Ci0gICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmLCBSdWxlU2V0Kik7Ci0g
ICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcyk7Ci0gICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVk
ZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3Vs
dCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVs
ZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29u
c3QgTWF0Y2hPcHRpb25zJik7Ci0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lv
bihSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25z
dCBNYXRjaE9wdGlvbnMmKTsKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChj
b25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVs
ZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKLSAgICBib29sIGZhc3RSZWplY3RTZWxlY3Rv
cihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwotICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygpOwot
ICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7Ci0KLSAg
ICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmLCBjb25zdCBDb250YWluZXJOb2Rl
KiBzY29wZSA9IDApOwotICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3RvcihDU1NTZWxlY3Rvciog
cmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwotICAgIHZvaWQgYXBwbHlN
YXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYpOwotICAgIHRlbXBsYXRlIDxib29s
IGZpcnN0UGFzcz4KLSAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hS
ZXN1bHQmLCBib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9v
bCBpbmhlcml0ZWRPbmx5KTsKLSAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+Ci0gICAgdm9p
ZCBhcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5
bGVSdWxlKiwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBib29sIGZpbHRl
clJlZ2lvblByb3BlcnRpZXMpOwotCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFJlZ2lvblN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7Ci0KLSAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzKE1hdGNo
UmVzdWx0JiwgUnVsZVNldCosIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29u
c3QgU3RyaW5nJiBwYWdlTmFtZSk7Ci0gICAgdm9pZCBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVj
dG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLCBjb25zdCBWZWN0b3I8U3R5bGVSdWxl
UGFnZSo+JiwgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcm
IHBhZ2VOYW1lKTsKLSAgICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0
UGFnZShwYWdlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBj
b25zdDsKLSAgICBTdHJpbmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0KLSAgICBP
d25QdHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKLSAgICBPd25QdHI8UnVsZVNldD4gbV91c2Vy
U3R5bGU7Ci0KLSAgICBGZWF0dXJlcyBtX2ZlYXR1cmVzOwotICAgIE93blB0cjxSdWxlU2V0PiBt
X3NpYmxpbmdSdWxlU2V0OwotICAgIE93blB0cjxSdWxlU2V0PiBtX3VuY29tbW9uQXR0cmlidXRl
UnVsZVNldDsKLQotICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7Ci0gICAgQm9yZGVyRGF0YSBt
X2JvcmRlckRhdGE7Ci0gICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7Ci0gICAgQ29sb3Ig
bV9iYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1w
bCosIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+ID4gS2V5ZnJhbWVzUnVsZU1hcDsKLSAgICBL
ZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKLQotcHVibGljOgotICAgIHN0YXRp
YyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7IHJldHVybiBzX3N0eWxlTm90
WWV0QXZhaWxhYmxlOyB9Ci0KLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2Uo
Q1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNh
Y2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7Ci0g
ICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NT
UHJvcGVydHlJRCwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSopOwotI2lmIEVOQUJMRShDU1NfSU1B
R0VfU0VUKQotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc2V0T3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQsIENTU0ltYWdlU2V0VmFsdWUqKTsKLSNlbmRpZgotCi0gICAgYm9vbCBh
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZTsgfQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsg
fQotCi0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFs
dWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBs
aWVyID0gMSk7Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmlt
aXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91Ymxl
IG11bHRpcGxpZXIgPSAxKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHNf
c3R5bGVOb3RZZXRBdmFpbGFibGU7Ci0KLSAgICB2b2lkIGFkZEF1dGhvclJ1bGVzQW5kQ29sbGVj
dFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJu
YWw+ID4qLCBSdWxlU2V0JiB1c2VyU3R5bGUpOwotCi0gICAgdm9pZCBjYWNoZUJvcmRlckFuZEJh
Y2tncm91bmQoKTsKLQotICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwg
RmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxDbGlwKENTU1Byb3BlcnR5
SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsQ29tcG9zaXRlKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsT3Jp
Z2luKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBG
aWxsSW1hZ2UoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lk
IG1hcEZpbGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0g
ICAgdm9pZCBtYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1
ZSopOwotICAgIHZvaWQgbWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NT
VmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLQotICAgIHZvaWQgbWFwQW5pbWF0aW9uRGVsYXko
QW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvbkRpcmVjdGlvbihB
bmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uRHVyYXRpb24oQW5p
bWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1h
dGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChB
bmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uTmFtZShBbmltYXRp
b24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlv
biosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb24q
LCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0
aW9uKiwgQ1NTVmFsdWUqKTsKLQotcHVibGljOgotICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2Uo
Q1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwotICAgIHZvaWQgbWFw
TmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0gICAgTGVu
Z3RoQm94IG1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwTmlu
ZVBpZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwotcHJpdmF0ZToK
LSAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KikgY29uc3Q7
Ci0KLSAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLQot
I2lmIEVOQUJMRShTVkcpCi0gICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQs
IENTU1ZhbHVlKik7Ci0jZW5kaWYKLQotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZFBl
bmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSopOwotICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFn
ZXMoKTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNo
KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiwgdW5zaWduZWQgc2l6ZSk7Ci0gICAgc3RydWN0IE1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtIHsKLSAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0
aWVzPiBtYXRjaGVkUHJvcGVydGllczsKLSAgICAgICAgTWF0Y2hSYW5nZXMgcmFuZ2VzOwotICAg
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlbmRlclN0eWxlOwotICAgICAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IHBhcmVudFJlbmRlclN0eWxlOwotICAgIH07Ci0gICAgY29uc3QgTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZUl0ZW0qIGZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSh1bnNpZ25l
ZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYpOwotICAgIHZvaWQgYWRkVG9NYXRjaGVkUHJvcGVy
dGllc0NhY2hlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlLCB1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYpOwotCi0gICAgLy8gRXZlcnkg
TiBhZGRpdGlvbnMgdG8gdGhlIG1hdGNoZWQgZGVjbGFyYXRpb24gY2FjaGUgdHJpZ2dlciBhIHN3
ZWVwIHdoZXJlIGVudHJpZXMgaG9sZGluZwotICAgIC8vIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBh
IHN0eWxlIGRlY2xhcmF0aW9uIGFyZSBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICB2b2lkIHN3ZWVw
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwotCi0gICAgdW5zaWduZWQgbV9tYXRjaGVkUHJvcGVy
dGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXA7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8
dW5zaWduZWQsIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtPiBNYXRjaGVkUHJvcGVydGllc0Nh
Y2hlOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hl
OwotCi0gICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxl
cyBmb3IgYW4gZWxlbWVudCwgYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZvcgotICAgIC8v
IG1lcmdlIHNvcnRpbmcuCi0gICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hl
ZFJ1bGVzOwotCi0gICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OwotCi0g
ICAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7Ci0KLSAg
ICBPd25QdHI8TWVkaWFRdWVyeUV2YWx1YXRvcj4gbV9tZWRpdW07Ci0gICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBtX3Jvb3REZWZhdWx0U3R5bGU7Ci0KLSAgICBQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1
ZG87Ci0KLSAgICBTZWxlY3RvckNoZWNrZXIgbV9jaGVja2VyOwotCi0gICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBtX3N0eWxlOwotICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOwotICAgIFJl
bmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7Ci0gICAgRWxlbWVudCogbV9lbGVtZW50Owot
ICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVkRWxlbWVudDsKLSAgICBSZW5kZXJSZWdpb24qIG1f
cmVnaW9uRm9yU3R5bGluZzsKLSAgICBFSW5zaWRlTGluayBtX2VsZW1lbnRMaW5rU3RhdGU7Ci0g
ICAgQ29udGFpbmVyTm9kZSogbV9wYXJlbnROb2RlOwotICAgIENTU1ZhbHVlKiBtX2xpbmVIZWln
aHRWYWx1ZTsKLSAgICBib29sIG1fZm9udERpcnR5OwotICAgIGJvb2wgbV9tYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXM7Ci0gICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OwotCi0gICAgUmVmUHRyPENT
U0ZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7Ci0gICAgVmVjdG9yPE93blB0cjxNZWRpYVF1
ZXJ5UmVzdWx0PiA+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKLQotICAg
IGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7Ci0gICAgYm9vbCBtX2FwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7Ci0gICAgY29uc3QgU3R5bGVCdWlsZGVyJiBtX3N0eWxl
QnVpbGRlcjsKLSAgICAKLSAgICBIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1
bGU+ID4gbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcDsKLSAgICBIYXNoU2V0PFJlZlB0cjxD
U1NTdHlsZVNoZWV0PiA+IG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldDsKLQotI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKLSAgICBib29sIG1faGFzUGVuZGluZ1NoYWRlcnM7Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgc3RhdGljIGNvbnN0IENvbnRhaW5lck5vZGUq
IGRldGVybWluZVNjb3BlKGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCopOwotCi0gICAgdHlwZWRl
ZiBIYXNoTWFwPGNvbnN0IENvbnRhaW5lck5vZGUqLCBPd25QdHI8UnVsZVNldD4gPiBTY29wZWRS
dWxlU2V0TWFwOwotCi0gICAgUnVsZVNldCogcnVsZVNldEZvclNjb3BlKGNvbnN0IENvbnRhaW5l
ck5vZGUqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5l
ck5vZGUqKTsKLSAgICBib29sIHNjb3BlU3RhY2tJc0NvbnNpc3RlbnQoY29uc3QgQ29udGFpbmVy
Tm9kZSogcGFyZW50KSBjb25zdCB7IHJldHVybiBwYXJlbnQgJiYgcGFyZW50ID09IG1fc2NvcGVT
dGFja1BhcmVudDsgfQotCi0gICAgU2NvcGVkUnVsZVNldE1hcCBtX3Njb3BlZEF1dGhvclN0eWxl
czsKLSAgICAKLSAgICBzdHJ1Y3QgU2NvcGVTdGFja0ZyYW1lIHsKLSAgICAgICAgU2NvcGVTdGFj
a0ZyYW1lKCkgOiBtX3Njb3BlKDApLCBtX3J1bGVTZXQoMCkgeyB9Ci0gICAgICAgIFNjb3BlU3Rh
Y2tGcmFtZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgUnVsZVNldCogcnVsZVNldCkgOiBt
X3Njb3BlKHNjb3BlKSwgbV9ydWxlU2V0KHJ1bGVTZXQpIHsgfQotICAgICAgICBjb25zdCBDb250
YWluZXJOb2RlKiBtX3Njb3BlOwotICAgICAgICBSdWxlU2V0KiBtX3J1bGVTZXQ7Ci0gICAgfTsK
LSAgICAvLyBWZWN0b3IgKHVzZWQgYXMgc3RhY2spIHRoYXQga2VlcHMgdHJhY2sgb2Ygc2NvcGlu
ZyBlbGVtZW50cyAoaS5lLiwgZWxlbWVudHMgd2l0aCBhIDxzdHlsZSBzY29wZWQ+IGNoaWxkKQot
ICAgIC8vIGVuY291bnRlcmVkIGR1cmluZyB0cmVlIGl0ZXJhdGlvbiBmb3Igc3R5bGUgcmVzb2x1
dGlvbi4KLSAgICBWZWN0b3I8U2NvcGVTdGFja0ZyYW1lPiBtX3Njb3BlU3RhY2s7Ci0gICAgLy8g
RWxlbWVudCBsYXN0IHNlZW4gYXMgcGFyZW50IGVsZW1lbnQgd2hlbiB1cGRhdGluZyBtX3Njb3Bp
bmdFbGVtZW50U3RhY2suCi0gICAgLy8gVGhpcyBpcyB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIG1f
c2NvcGluZ0VsZW1lbnRTdGFjayBpcyBjb25zaXN0ZW50LCBzZXBhcmF0ZWx5IGZyb20gU2VsZWN0
b3JDaGVja2VyOjptX3BhcmVudFN0YWNrLgotICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2Nv
cGVTdGFja1BhcmVudDsKLSNlbmRpZgotCi0gICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsK
LSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29u
c3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKLSAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoUmFuZ2VzJiwgY29uc3QgTWF0Y2hSYW5nZXMm
KTsKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNoUmFuZ2VzJiwgY29uc3Qg
TWF0Y2hSYW5nZXMmKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IENTU1N0eWxlU2VsZWN0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlh
UXVlcnlFdmFsdWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0
b3IuY3BwCmluZGV4IGExODgwZTJhOGFjYjA1MDg0YmI5Mzk5NzdiMTJjNTI3MjJmMWJmMDUuLjRm
MDQ1YzY3YWVlYjE5ZDZhZTQwMTFiMmU1NDJiMGY2MzQ4ZDg1YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRl
ICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDU1NQcmlt
aXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgpAQCAtNDMsOSArNDIsMTAgQEAKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU2NyZWVuLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlclN0
eWxlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKKyNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogI2lmIEVOQUJMRSgzRF9SRU5ERVJJ
TkcpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFRdWVyeU1hdGNoZXIuY3BwCmluZGV4IDY2MDE0MTFhYThjYTM4NDZjMzVlMGUwMmY3NmM2M2Vk
MmYxNmEyNGIuLmVmZDVkZWRkODYxYzg2NmY4YjBlNmYyZjA1ZmYyNmNlODVlYTg2YjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcApAQCAtMjAsNyArMjAsNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlNYXRjaGVyLmgiCiAKLSNp
bmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTI5LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUxpc3Qu
aCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgiCisjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
VkdDU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCBkN2M2YWQ2MDljMTFhMjcyNTJiMzgxOTQ3MjVk
Y2E2OTY1ZDZkOTdjLi5lNjU3ZDZlZjU0YTVmNTEwNmI5OWNlZTdiMTQwMzVkNWZlYzJmY2U3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0yOSw3ICsy
OSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUg
IkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKICNpbmNs
dWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlO
YW1lcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAppbmRleCA1NzQxNmFmNzRiNjE0
Zjk4MzVlNGY1YzkxNGVkNTYzNjBkOTAzZmY4Li43OWVkZjdjMmU5MDg2MGFjOWFiMGFkOTkzMzUw
MmU0NzBlMDUzZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcApAQCAtMjksNyAr
MjksNiBAQAogI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1ND
dXJzb3JJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5o
IgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3Qu
aCIKICNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQw
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZp
ZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAppbmRleCA5MzFlNmJiMjRjODhjMDgzYzk2
NGI1MzE3NThjMzhlM2MzMTc3NmIzLi5jNzhjMDBhMjIxODllZGJhYWVmNmFkYmUwNjZlNTAxYTAz
MjZjNGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCkBAIC0yNiwxMiArMjYsMTIgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHlsZU1lZGlhLmgiCiAKLSNpbmNsdWRl
ICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgog
I2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmIxZjZkZWI5NGI4NGE0NjZiMTY2ODIxNGE3NTQ2ZTE0YjI4YjcyNTQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAK
QEAgLTAsMCArMSw1ODYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVs
ZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
TmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9z
a3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQorICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKworI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgorI2luY2x1
ZGUgIkNTU0JvcmRlckltYWdlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgor
I2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVJ1
bGUuaCIKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NJbXBvcnRS
dWxlLmgiCisjaW5jbHVkZSAiQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIgorI2luY2x1ZGUgIkNT
U01lZGlhUnVsZS5oIgorI2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUGFy
c2VyLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKKyNpbmNs
dWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAi
Q1NTU2VsZWN0b3JMaXN0LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCIKKyNp
bmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1
ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDb250ZW50RGF0YS5oIgorI2luY2x1
ZGUgIkNvdW50ZXIuaCIKKyNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgorI2luY2x1ZGUgIkN1
cnNvckxpc3QuaCIKKyNpbmNsdWRlICJGb250RmVhdHVyZVZhbHVlLmgiCisjaW5jbHVkZSAiRm9u
dFZhbHVlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTFByb2dyZXNzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCisjaW5jbHVkZSAi
TGlua0hhc2guaCIKKyNpbmNsdWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIKKyNpbmNsdWRl
ICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgorI2luY2x1ZGUgIk1lZGlhUXVl
cnlFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUGFpci5oIgorI2luY2x1
ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUXVvdGVzRGF0
YS5oIgorI2luY2x1ZGUgIlJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKKyNpbmNs
dWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXJUaGVtZS5o
IgorI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKKyNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25z
LmgiCisjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCisjaW5jbHVkZSAiU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUg
IlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgorI2luY2x1ZGUgIlNoYWRvd1Jv
b3QuaCIKKyNpbmNsdWRlICJTaGFkb3dWYWx1ZS5oIgorI2luY2x1ZGUgIlNrZXdUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTdHlsZUNh
Y2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUg
IlN0eWxlUGVuZGluZ0ltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAi
U3R5bGVTaGVldExpc3QuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
KyNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgIldlYktpdENTU0tl
eWZyYW1lUnVsZS5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRDU1NSZWdpb25SdWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuaCIKKyNpbmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFtZXMuaCIKKyNpbmNsdWRlICJY
TUxOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyT3Bl
cmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCIKKyNlbmRpZgorCisj
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorI2luY2x1ZGUgIkRhc2hib2FyZFJlZ2lvbi5o
IgorI2VuZGlmCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJTVkdOYW1lcy5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisj
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVyLmgiCisj
aW5jbHVkZSAiU3R5bGVDYWNoZWRTaGFkZXIuaCIKKyNpbmNsdWRlICJTdHlsZUN1c3RvbUZpbHRl
clByb2dyYW0uaCIKKyNpbmNsdWRlICJTdHlsZVBlbmRpbmdTaGFkZXIuaCIKKyNpbmNsdWRlICJT
dHlsZVNoYWRlci5oIgorI2luY2x1ZGUgIldlYktpdENTU1NoYWRlclZhbHVlLmgiCisjZW5kaWYK
KworI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQorI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUu
aCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlU2V0LmgiCisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKFFUKQorI2RlZmluZSBGSVhFRF9QT1NJVElPTl9DUkVBVEVTX1NUQUNLSU5HX0NPTlRFWFQg
MQorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworI2RlZmluZSBIQU5ETEVfSU5IRVJJVChw
cm9wLCBQcm9wKSBcCitpZiAoaXNJbmhlcml0KSB7IFwKKyAgICBtX3N0eWxlLT5zZXQjI1Byb3Ao
bV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAorICAgIHJldHVybjsgXAorfQorCisjZGVmaW5lIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKK0hBTkRMRV9JTkhFUklUKHBy
b3AsIFByb3ApIFwKK2lmIChpc0luaXRpYWwpIHsgXAorICAgIG1fc3R5bGUtPnNldCMjUHJvcChS
ZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIHJldHVybjsgXAorfQorCisjZGVm
aW5lIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX1dJVEhfVkFMVUUocHJvcCwgUHJvcCwgVmFs
dWUpIFwKK0hBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKK2lmIChpc0luaXRpYWwpIHsgXAor
ICAgIG1fc3R5bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjVmFsdWUoKSk7XAor
ICAgIHJldHVybjtcCit9CisKKyNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5E
X1BSSU1JVElWRShwcm9wLCBQcm9wKSBcCitIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChwcm9w
LCBQcm9wKSBcCitpZiAocHJpbWl0aXZlVmFsdWUpIFwKKyAgICBtX3N0eWxlLT5zZXQjI1Byb3Ao
KnByaW1pdGl2ZVZhbHVlKTsKKworY2xhc3MgUnVsZURhdGEgeworcHVibGljOgorICAgIFJ1bGVE
YXRhKFN0eWxlUnVsZSosIENTU1NlbGVjdG9yKiwgdW5zaWduZWQgcG9zaXRpb24sIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9v
bCBpblJlZ2lvblJ1bGUpOworCisgICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Bvc2l0aW9uOyB9CisgICAgU3R5bGVSdWxlKiBydWxlKCkgY29uc3QgeyByZXR1cm4gbV9y
dWxlOyB9CisgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3RvcjsgfQorCisgICAgYm9vbCBoYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcjsgfQorICAgIGJvb2wgaGFzTXVsdGlwYXJ0
U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc011bHRpcGFydFNlbGVjdG9yOyB9CisgICAg
Ym9vbCBoYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVs
ZUhhc2g7IH0KKyAgICBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yOyB9CisgICAg
dW5zaWduZWQgc3BlY2lmaWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmljaXR5OyB9Cisg
ICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoVHlw
ZTsgfQorICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbjsgfQorICAgIGJvb2wgaXNJblJlZ2lvblJ1bGUo
KSBjb25zdCB7IHJldHVybiBtX2lzSW5SZWdpb25SdWxlOyB9CisKKyAgICAvLyBUcnkgdG8gYmFs
YW5jZSBiZXR3ZWVuIG1lbW9yeSB1c2FnZSAodGhlcmUgY2FuIGJlIGxvdHMgb2YgUnVsZURhdGEg
b2JqZWN0cykgYW5kIGdvb2QgZmlsdGVyaW5nIHBlcmZvcm1hbmNlLgorICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmllckNvdW50ID0gNDsKKyAgICBjb25zdCB1bnNpZ25l
ZCogZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlczsgfQorCitwcml2YXRlOgorICAgIFN0
eWxlUnVsZSogbV9ydWxlOworICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9yOworICAgIHVuc2ln
bmVkIG1fc3BlY2lmaWNpdHk7CisgICAgLy8gVGhpcyBudW1iZXIgd2FzIHBpY2tlZCBmYWlybHkg
YXJiaXRyYXJpbHkuIFdlIGNhbiBwcm9iYWJseSBsb3dlciBpdCBpZiB3ZSBuZWVkIHRvLgorICAg
IC8vIFNvbWUgc2ltcGxlIHRlc3Rpbmcgc2hvd2VkIDwxMDAsMDAwIFJ1bGVEYXRhJ3Mgb24gbGFy
Z2Ugc2l0ZXMuCisgICAgdW5zaWduZWQgbV9wb3NpdGlvbiA6IDI0OworICAgIHVuc2lnbmVkIG1f
aGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2hhc011bHRpcGFy
dFNlbGVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hp
bmdIVE1MQmFzZWRPblJ1bGVIYXNoIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvbnRhaW5zVW5jb21t
b25BdHRyaWJ1dGVTZWxlY3RvciA6IDE7CisgICAgdW5zaWduZWQgbV9saW5rTWF0Y2hUeXBlIDog
MjsgLy8gIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzaworICAgIHVuc2lnbmVkIG1faGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IDE7CisgICAgdW5zaWduZWQgbV9pc0luUmVnaW9uUnVs
ZSA6IDE7CisgICAgLy8gVXNlIHBsYWluIGFycmF5IGluc3RlYWQgb2YgYSBWZWN0b3IgdG8gbWlu
aW1pemUgbWVtb3J5IG92ZXJoZWFkLgorICAgIHVuc2lnbmVkIG1fZGVzY2VuZGFudFNlbGVjdG9y
SWRlbnRpZmllckhhc2hlc1ttYXhpbXVtSWRlbnRpZmllckNvdW50XTsKK307CisgICAgCitzdHJ1
Y3QgU2FtZVNpemVBc1J1bGVEYXRhIHsKKyAgICB2b2lkKiBhOworICAgIHZvaWQqIGI7CisgICAg
dW5zaWduZWQgYzsKKyAgICB1bnNpZ25lZCBkOworICAgIHVuc2lnbmVkIGVbNF07Cit9OworCitD
T01QSUxFX0FTU0VSVChzaXplb2YoUnVsZURhdGEpID09IHNpemVvZihTYW1lU2l6ZUFzUnVsZURh
dGEpLCBSdWxlRGF0YV9zaG91bGRfc3RheV9zbWFsbCk7CisKK2NsYXNzIFJ1bGVTZXQgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFJ1bGVTZXQpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPFJ1bGVTZXQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsg
fQorCisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9y
PFJ1bGVEYXRhPiA+ID4gQXRvbVJ1bGVNYXA7CisKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0
KFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBTdHlsZVJl
c29sdmVyKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7CisKKyAgICB2b2lkIGFkZFN0
eWxlUnVsZShTdHlsZVJ1bGUqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wg
Y2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBmYWxzZSk7Cisg
ICAgdm9pZCBhZGRSdWxlKFN0eWxlUnVsZSosIENTU1NlbGVjdG9yKiwgYm9vbCBoYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5S
ZWdpb25SdWxlID0gZmFsc2UpOworICAgIHZvaWQgYWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSop
OworICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVN
YXAmLCBjb25zdCBSdWxlRGF0YSYpOworICAgIHZvaWQgYWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVS
ZWdpb24qLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOworICAgIHZvaWQgc2hyaW5r
VG9GaXQoKTsKKyAgICB2b2lkIGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1fYXV0b1Nocmlu
a1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9CisKKyAgICBjb25zdCBTdHlsZVJlc29sdmVyOjpGZWF0
dXJlcyYgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CisKKyAgICBjb25z
dCBWZWN0b3I8UnVsZURhdGE+KiBpZFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3Qg
eyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiogY2xhc3NSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fY2xh
c3NSdWxlcy5nZXQoa2V5KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHRhZ1J1bGVz
KEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV90YWdSdWxlcy5nZXQoa2V5
KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHNoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
cyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93UHNldWRvRWxl
bWVudFJ1bGVzLmdldChrZXkpOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogbGlua1Bz
ZXVkb0NsYXNzUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV9saW5rUHNldWRvQ2xhc3NSdWxlczsg
fQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGZvY3VzUHNldWRvQ2xhc3NSdWxlcygpIGNv
bnN0IHsgcmV0dXJuICZtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsgfQorICAgIGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qIHVuaXZlcnNhbFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fdW5pdmVyc2Fs
UnVsZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBwYWdlUnVsZXMoKSBj
b25zdCB7IHJldHVybiBtX3BhZ2VSdWxlczsgfQorCitwdWJsaWM6CisgICAgUnVsZVNldCgpOwor
CisgICAgQXRvbVJ1bGVNYXAgbV9pZFJ1bGVzOworICAgIEF0b21SdWxlTWFwIG1fY2xhc3NSdWxl
czsKKyAgICBBdG9tUnVsZU1hcCBtX3RhZ1J1bGVzOworICAgIEF0b21SdWxlTWFwIG1fc2hhZG93
UHNldWRvRWxlbWVudFJ1bGVzOworICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9saW5rUHNldWRvQ2xh
c3NSdWxlczsKKyAgICBWZWN0b3I8UnVsZURhdGE+IG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzOwor
ICAgIFZlY3RvcjxSdWxlRGF0YT4gbV91bml2ZXJzYWxSdWxlczsKKyAgICBWZWN0b3I8U3R5bGVS
dWxlUGFnZSo+IG1fcGFnZVJ1bGVzOworICAgIHVuc2lnbmVkIG1fcnVsZUNvdW50OworICAgIGJv
b2wgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkOworICAgIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVz
IG1fZmVhdHVyZXM7CisKKyAgICBzdHJ1Y3QgUnVsZVNldFNlbGVjdG9yUGFpciB7CisgICAgICAg
IFJ1bGVTZXRTZWxlY3RvclBhaXIoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBQYXNzT3duUHRyPFJ1
bGVTZXQ+IHJ1bGVTZXQpIDogc2VsZWN0b3Ioc2VsZWN0b3IpLCBydWxlU2V0KHJ1bGVTZXQpIHsg
fQorICAgICAgICBSdWxlU2V0U2VsZWN0b3JQYWlyKGNvbnN0IFJ1bGVTZXRTZWxlY3RvclBhaXIm
IHJzKSA6IHNlbGVjdG9yKHJzLnNlbGVjdG9yKSwgcnVsZVNldChjb25zdF9jYXN0PFJ1bGVTZXRT
ZWxlY3RvclBhaXIqPigmcnMpLT5ydWxlU2V0LnJlbGVhc2UoKSkgeyB9CisgICAgICAgIENTU1Nl
bGVjdG9yKiBzZWxlY3RvcjsKKyAgICAgICAgT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQ7CisgICAg
fTsKKworICAgIFZlY3RvcjxSdWxlU2V0U2VsZWN0b3JQYWlyPiBtX3JlZ2lvblNlbGVjdG9yc0Fu
ZFJ1bGVTZXRzOworfTsKKworc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRTdHlsZTsKK3N0YXRpYyBS
dWxlU2V0KiBkZWZhdWx0UXVpcmtzU3R5bGU7CitzdGF0aWMgUnVsZVNldCogZGVmYXVsdFByaW50
U3R5bGU7CitzdGF0aWMgUnVsZVNldCogZGVmYXVsdFZpZXdTb3VyY2VTdHlsZTsKK3N0YXRpYyBT
dHlsZVNoZWV0SW50ZXJuYWwqIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxl
U2hlZXRJbnRlcm5hbCogZGVmYXVsdFN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVldEludGVy
bmFsKiBxdWlya3NTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogc3ZnU3R5
bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIG1hdGhNTFN0eWxlU2hlZXQ7Citz
dGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsKK3N0YXRp
YyBTdHlsZVNoZWV0SW50ZXJuYWwqIGZ1bGxzY3JlZW5TdHlsZVNoZWV0OworCitSZW5kZXJTdHls
ZSogU3R5bGVSZXNvbHZlcjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKKworc3RhdGljIHZvaWQg
bG9hZEZ1bGxEZWZhdWx0U3R5bGUoKTsKK3N0YXRpYyB2b2lkIGxvYWRTaW1wbGVEZWZhdWx0U3R5
bGUoKTsKK3RlbXBsYXRlIDxjbGFzcyBMaXN0VHlwZT4KK3N0YXRpYyB2b2lkIGNvbGxlY3RDU1NP
TVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYsIExp
c3RUeXBlKik7CisKKy8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSBzb21lIG1lY2hh
bmlzbSB0aGF0IGd1YXJhbnRlZXMgdGhpcyBpcyBpbiBzeW5jIHdpdGggdGhlIHJlYWwgVUEgc3R5
bGVzaGVldC4KK3N0YXRpYyBjb25zdCBjaGFyKiBzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0ID0g
Imh0bWwsYm9keSxkaXZ7ZGlzcGxheTpibG9ja31oZWFke2Rpc3BsYXk6bm9uZX1ib2R5e21hcmdp
bjo4cHh9ZGl2OmZvY3VzLHNwYW46Zm9jdXN7b3V0bGluZTphdXRvIDVweCAtd2Via2l0LWZvY3Vz
LXJpbmctY29sb3J9YTotd2Via2l0LWFueS1saW5re2NvbG9yOi13ZWJraXQtbGluazt0ZXh0LWRl
Y29yYXRpb246dW5kZXJsaW5lfWE6LXdlYmtpdC1hbnktbGluazphY3RpdmV7Y29sb3I6LXdlYmtp
dC1hY3RpdmVsaW5rfSI7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50Q2FuVXNlU2ltcGxl
RGVmYXVsdFN0eWxlKEVsZW1lbnQqIGUpCit7CisgICAgcmV0dXJuIGUtPmhhc1RhZ05hbWUoaHRt
bFRhZykgfHwgZS0+aGFzVGFnTmFtZShoZWFkVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGJvZHlUYWcp
IHx8IGUtPmhhc1RhZ05hbWUoZGl2VGFnKSB8fCBlLT5oYXNUYWdOYW1lKHNwYW5UYWcpIHx8IGUt
Pmhhc1RhZ05hbWUoYnJUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYVRhZyk7Cit9CisKK3N0YXRpYyBj
b25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBzY3JlZW5FdmFsKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3IsIHN0YXRpY1NjcmVlbkV2YWwsICgi
c2NyZWVuIikpOworICAgIHJldHVybiBzdGF0aWNTY3JlZW5FdmFsOworfQorCitzdGF0aWMgY29u
c3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgcHJpbnRFdmFsKCkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3IsIHN0YXRpY1ByaW50RXZhbCwgKCJwcmlu
dCIpKTsKKyAgICByZXR1cm4gc3RhdGljUHJpbnRFdmFsOworfQorCitzdGF0aWMgU3R5bGVQcm9w
ZXJ0eVNldCogbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4sIGxlZnRUb1JpZ2h0RGVjbCwgKFN0eWxlUHJv
cGVydHlTZXQ6OmNyZWF0ZSgpKSk7CisgICAgaWYgKGxlZnRUb1JpZ2h0RGVjbC0+aXNFbXB0eSgp
KQorICAgICAgICBsZWZ0VG9SaWdodERlY2wtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0
aW9uLCBDU1NWYWx1ZUx0cik7CisgICAgcmV0dXJuIGxlZnRUb1JpZ2h0RGVjbC5nZXQoKTsKK30K
Kworc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+LCByaWdodFRv
TGVmdERlY2wsIChTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKSkpOworICAgIGlmIChyaWdodFRv
TGVmdERlY2wtPmlzRW1wdHkoKSkKKyAgICAgICAgcmlnaHRUb0xlZnREZWNsLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVSdGwpOworICAgIHJldHVybiByaWdodFRv
TGVmdERlY2wuZ2V0KCk7Cit9CisKK1N0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICA6IG1faGFz
VUFBcHBlYXJhbmNlKGZhbHNlKQorICAgICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5kRmls
bExheWVyKQorICAgICwgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0
U3dlZXAoMCkKKyAgICAsIG1fY2hlY2tlcihkb2N1bWVudCwgIWRvY3VtZW50LT5pblF1aXJrc01v
ZGUoKSkKKyAgICAsIG1fcGFyZW50U3R5bGUoMCkKKyAgICAsIG1fcm9vdEVsZW1lbnRTdHlsZSgw
KQorICAgICwgbV9lbGVtZW50KDApCisgICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkKKyAgICAsIG1f
cmVnaW9uRm9yU3R5bGluZygwKQorICAgICwgbV9lbGVtZW50TGlua1N0YXRlKE5vdEluc2lkZUxp
bmspCisgICAgLCBtX3BhcmVudE5vZGUoMCkKKyAgICAsIG1fbGluZUhlaWdodFZhbHVlKDApCisg
ICAgLCBtX2ZvbnREaXJ0eShmYWxzZSkKKyAgICAsIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
KG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFsc2Up
CisgICAgLCBtX2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShkb2N1bWVudCkp
CisgICAgLCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQorICAgICwgbV9hcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKQorICAgICwgbV9zdHlsZUJ1aWxkZXIo
U3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKSkKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgLCBtX2hhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKQorI2VuZGlmCisjaWYgRU5BQkxF
KFNUWUxFX1NDT1BFRCkKKyAgICAsIG1fc2NvcGVTdGFja1BhcmVudCgwKQorI2VuZGlmCit7Cisg
ICAgRWxlbWVudCogcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKworICAgIGlm
ICghZGVmYXVsdFN0eWxlKSB7CisgICAgICAgIGlmICghcm9vdCB8fCBlbGVtZW50Q2FuVXNlU2lt
cGxlRGVmYXVsdFN0eWxlKHJvb3QpKQorICAgICAgICAgICAgbG9hZFNpbXBsZURlZmF1bHRTdHls
ZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOwor
ICAgIH0KKworICAgIC8vIGNvbnN0cnVjdCBkb2N1bWVudCByb290IGVsZW1lbnQgZGVmYXVsdCBz
dHlsZS4gdGhpcyBpcyBuZWVkZWQKKyAgICAvLyB0byBldmFsdWF0ZSBtZWRpYSBxdWVyaWVzIHRo
YXQgY29udGFpbiByZWxhdGl2ZSBjb25zdHJhaW50cywgbGlrZSAic2NyZWVuIGFuZCAobWF4LXdp
ZHRoOiAxMGVtKSIKKyAgICAvLyBUaGlzIGlzIGhlcmUgaW5zdGVhZCBvZiBjb25zdHJ1Y3Rvciwg
YmVjYXVzZSB3aGVuIGNvbnN0cnVjdG9yIGlzIHJ1biwKKyAgICAvLyBkb2N1bWVudCBkb2Vzbid0
IGhhdmUgZG9jdW1lbnRFbGVtZW50CisgICAgLy8gTk9URTogdGhpcyBhc3N1bWVzIHRoYXQgZWxl
bWVudCB0aGF0IGdldHMgcGFzc2VkIHRvIHN0eWxlRm9yRWxlbWVudCAtY2FsbAorICAgIC8vIGlz
IGFsd2F5cyBmcm9tIHRoZSBkb2N1bWVudCB0aGF0IG93bnMgdGhlIHN0eWxlIHNlbGVjdG9yCisg
ICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBpZiAodmlldykKKyAg
ICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3LT5t
ZWRpYVR5cGUoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcg
TWVkaWFRdWVyeUV2YWx1YXRvcigiYWxsIikpOworCisgICAgaWYgKHJvb3QpCisgICAgICAgIG1f
cm9vdERlZmF1bHRTdHlsZSA9IHN0eWxlRm9yRWxlbWVudChyb290LCAwLCBEaXNhbGxvd1N0eWxl
U2hhcmluZywgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOworCisgICAgaWYgKG1fcm9vdERlZmF1
bHRTdHlsZSAmJiB2aWV3KQorICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1
ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZh
dWx0U3R5bGUuZ2V0KCkpKTsKKworICAgIG1fYXV0aG9yU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUo
KTsKKyAgICAvLyBBZGRpbmcgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0
aGUgZW5kLgorICAgIC8vIEFkZGluZyBnbG9iYWwgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMs
IHNocmluayBhdCB0aGUgZW5kLgorICAgIC8vIE5vdGUgdGhhdCB0aGVyZSB1c3VhbGx5IGlzIG9u
bHkgMSBzaGVldCBmb3Igc2NvcGVkIHJ1bGVzLCBzbyBhdXRvLXNocmluay10by1maXQgaXMgZmlu
ZS4KKyAgICBtX2F1dGhvclN0eWxlLT5kaXNhYmxlQXV0b1Nocmlua1RvRml0KCk7CisKKyAgICAv
LyBGSVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGlt
ZSEKKyAgICBPd25QdHI8UnVsZVNldD4gdGVtcFVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgp
OworICAgIGlmIChTdHlsZVNoZWV0SW50ZXJuYWwqIHBhZ2VVc2VyU2hlZXQgPSBkb2N1bWVudC0+
cGFnZVVzZXJTaGVldCgpKQorICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVl
dChwYWdlVXNlclNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgIGFkZEF1dGhvclJ1bGVzQW5k
Q29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoZG9jdW1lbnQtPnBhZ2VHcm91cFVzZXJTaGVldHMo
KSwgKnRlbXBVc2VyU3R5bGUpOworICAgIGFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxl
c0Zyb21TaGVldHMoZG9jdW1lbnQtPmRvY3VtZW50VXNlclNoZWV0cygpLCAqdGVtcFVzZXJTdHls
ZSk7CisgICAgaWYgKHRlbXBVc2VyU3R5bGUtPm1fcnVsZUNvdW50ID4gMCB8fCB0ZW1wVXNlclN0
eWxlLT5tX3BhZ2VSdWxlcy5zaXplKCkgPiAwKQorICAgICAgICBtX3VzZXJTdHlsZSA9IHRlbXBV
c2VyU3R5bGUucmVsZWFzZSgpOworCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBpZiAoZG9j
dW1lbnQtPnN2Z0V4dGVuc2lvbnMoKSkgeworICAgICAgICBjb25zdCBIYXNoU2V0PFNWR0ZvbnRG
YWNlRWxlbWVudCo+JiBzdmdGb250RmFjZUVsZW1lbnRzID0gZG9jdW1lbnQtPnN2Z0V4dGVuc2lv
bnMoKS0+c3ZnRm9udEZhY2VFbGVtZW50cygpOworICAgICAgICBIYXNoU2V0PFNWR0ZvbnRGYWNl
RWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdmdGb250RmFjZUVsZW1lbnRzLmVuZCgp
OworICAgICAgICBmb3IgKEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gc3ZnRm9udEZhY2VFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgICAgICBmb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKCgqaXQpLT5mb250RmFj
ZVJ1bGUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cygw
LCBkb2N1bWVudC0+c3R5bGVTaGVldHMoKS0+dmVjdG9yKCkpOworfQorCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4qIHVzZXJTaGVldHMsIFJ1bGVTZXQm
IHVzZXJTdHlsZSkKK3sKKyAgICBpZiAoIXVzZXJTaGVldHMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHVzZXJTaGVldHMtPnNpemUoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgY29uc3QgUmVmUHRyPFN0eWxl
U2hlZXRJbnRlcm5hbD4mIHNoZWV0ID0gdXNlclNoZWV0cy0+YXQoaSk7CisgICAgICAgIGlmIChz
aGVldC0+aXNVc2VyU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgdXNlclN0eWxlLmFkZFJ1bGVz
RnJvbVNoZWV0KHNoZWV0LmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldC5nZXQoKSwg
Km1fbWVkaXVtLCB0aGlzKTsKKyAgICB9Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+
IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3RvcjxTdHlsZVJlc29sdmVyOjpSdWxlRmVhdHVyZT4mIHJ1
bGVzKQoreworICAgIHNpemVfdCBzaXplID0gcnVsZXMuc2l6ZSgpOworICAgIGlmICghc2l6ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQgPSBS
dWxlU2V0OjpjcmVhdGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkK
KyAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5ydWxlLCBydWxlc1tpXS5zZWxlY3Rv
ciwgcnVsZXNbaV0uaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgZmFsc2UpOworICAgIHJldHVy
biBydWxlU2V0LnJlbGVhc2UoKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0RmVh
dHVyZXMoKQoreworICAgIG1fZmVhdHVyZXMuY2xlYXIoKTsKKyAgICAvLyBDb2xsZWN0IGFsbCBp
ZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxpbmcgc2VsZWN0b3JzICg6Zmlyc3QtY2hpbGQgYW5kIHNp
bWlsYXIpCisgICAgLy8gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIHN0eWxlc2hlZXRzLiBTdHlsZSBz
aGFyaW5nIGNvZGUgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRvIHJlamVjdAorICAgIC8vIHNoYXJp
bmcgY2FuZGlkYXRlcy4KKyAgICBtX2ZlYXR1cmVzLmFkZChkZWZhdWx0U3R5bGUtPmZlYXR1cmVz
KCkpOworICAgIG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVzKCkpOworI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgZm9yIChTY29wZWRSdWxlU2V0TWFwOjppdGVyYXRv
ciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fc2NvcGVkQXV0aG9y
U3R5bGVzLmVuZCgpOyArK2l0KQorICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+c2Vjb25kLT5m
ZWF0dXJlcygpKTsKKyNlbmRpZgorICAgIGlmIChtX3VzZXJTdHlsZSkKKyAgICAgICAgbV9mZWF0
dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOworCisgICAgbV9zaWJsaW5nUnVsZVNl
dCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKTsKKyAgICBtX3VuY29tbW9u
QXR0cmlidXRlUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1
dGVSdWxlcyk7Cit9CisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorY29uc3QgQ29udGFpbmVy
Tm9kZSogU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU2NvcGUoY29uc3QgU3R5bGVTaGVldEludGVy
bmFsKiBzaGVldCkKK3sKKyAgICBBU1NFUlQoc2hlZXQpOworCisgICAgaWYgKCFSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+ZmluZFN0eWxlU2hlZXRPd25lck5vZGUoKTsK
KyAgICBpZiAoIW93bmVyTm9kZSB8fCAhb3duZXJOb2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW93
bmVyTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MU3R5bGVFbGVtZW50Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAoIXN0eWxlRWxlbWVudC0+c2Nv
cGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
c3R5bGVFbGVtZW50LT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIChwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSB8fCBwYXJlbnQt
PmlzU2hhZG93Um9vdCgpKSA/IHBhcmVudCA6IDA7Cit9CisKK2lubGluZSBSdWxlU2V0KiBTdHls
ZVJlc29sdmVyOjpydWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNv
bnN0Cit7CisgICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3Njb3BlZEF1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKKyAgICByZXR1cm4gaXQgIT0gbV9zY29w
ZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsgCit9CisjZW5kaWYK
Kwordm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBm
aXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBzdHlsZXNoZWV0cykK
K3sKKyAgICAvLyBUaGlzIGhhbmRsZXMgc2hlZXRzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHN0
eWxlc2hlZXQgbGlzdCBvbmx5LiBJbiBvdGhlciBjYXNlcyB0aGUgc3R5bGUgcmVzb2x2ZXIKKyAg
ICAvLyBuZWVkcyB0byBiZSByZWNvbnN0cnVjdGVkLiBUbyBoYW5kbGUgaW5zZXJ0aW9ucyB0b28g
dGhlIHJ1bGUgb3JkZXIgbnVtYmVycyB3b3VsZCBuZWVkIHRvIGJlIHVwZGF0ZWQuCisgICAgdW5z
aWduZWQgc2l6ZSA9IHN0eWxlc2hlZXRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBm
aXJzdE5ldzsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAoIXN0eWxlc2hlZXRzW2ldLT5p
c0NTU1N0eWxlU2hlZXQoKSB8fCBzdHlsZXNoZWV0c1tpXS0+ZGlzYWJsZWQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9IHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZXNoZWV0c1tpXS5nZXQoKSk7CisgICAgICAgIFN0eWxl
U2hlZXRJbnRlcm5hbCogc2hlZXQgPSBjc3NTaGVldC0+aW50ZXJuYWwoKTsKKyNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKQorICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IGRldGVy
bWluZVNjb3BlKHNoZWV0KTsKKyAgICAgICAgaWYgKHNjb3BlKSB7CisgICAgICAgICAgICBTY29w
ZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMu
YWRkKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6
OmNyZWF0ZSgpOworICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFJ1
bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRk
UnVsZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgIGlmICghbV9z
dHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb2xsZWN0
Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBjc3NTaGVldCk7Cisg
ICAgfQorICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1RvRml0KCk7CisgICAgY29sbGVjdEZlYXR1
cmVzKCk7CisgICAgCisgICAgaWYgKGRvY3VtZW50KCktPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQo
KS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+
c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7Cit9CisKKyNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKQordm9pZCBTdHlsZVJlc29sdmVyOjpzZXR1cFNjb3BlU3RhY2soY29uc3Qg
Q29udGFpbmVyTm9kZSogcGFyZW50KQoreworICAgIC8vIFRoZSBzY29waW5nIGVsZW1lbnQgc3Rh
Y2sgc2hvdWxkbid0IGJlIHVzZWQgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVy
ZS4KKyAgICBBU1NFUlQoIW1fc2NvcGVkQXV0aG9yU3R5bGVzLmlzRW1wdHkoKSk7CisKKyAgICBt
X3Njb3BlU3RhY2suc2hyaW5rKDApOworICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVu
dC0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxl
U2V0Rm9yU2NvcGUocGFyZW50KTsKKyAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAgICBt
X3Njb3BlU3RhY2suYXBwZW5kKFNjb3BlU3RhY2tGcmFtZShwYXJlbnQsIHJ1bGVTZXQpKTsKKyAg
ICB9CisgICAgbV9zY29wZVN0YWNrLnJldmVyc2UoKTsKKyAgICBtX3Njb3BlU3RhY2tQYXJlbnQg
PSBwYXJlbnQ7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFNjb3BlKGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZVBhcmVudCkKK3sKKyAg
ICAvLyBTaG9ydGN1dDogRG9uJ3QgYm90aGVyIHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFj
ayBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgorICAgIGlmIChtX3Njb3Bl
ZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX3Njb3BlU3RhY2tQ
YXJlbnQpOworICAgICAgICBBU1NFUlQobV9zY29wZVN0YWNrLmlzRW1wdHkoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgLy8gSW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUg
cmVzb2x2ZSB3ZSBtYXkgZ2V0IGludm9rZWQgZm9yIHJhbmRvbSBlbGVtZW50cy4KKyAgICAvLyBS
ZWNyZWF0ZSB0aGUgd2hvbGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGluIHN1Y2ggY2FzZXMuCisg
ICAgaWYgKCFzY29wZVN0YWNrSXNDb25zaXN0ZW50KHNjb3BlUGFyZW50KSkgeworICAgICAgICBz
ZXR1cFNjb3BlU3RhY2soc2NvcGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIE90
aGVyd2lzZSBqdXN0IHB1c2ggdGhlIHBhcmVudCBvbnRvIHRoZSBzdGFjay4KKyAgICBSdWxlU2V0
KiBydWxlU2V0ID0gcnVsZVNldEZvclNjb3BlKHNjb3BlKTsKKyAgICBpZiAocnVsZVNldCkKKyAg
ICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChTY29wZVN0YWNrRnJhbWUoc2NvcGUsIHJ1bGVTZXQp
KTsKKyAgICBtX3Njb3BlU3RhY2tQYXJlbnQgPSBzY29wZTsKK30KKwordm9pZCBTdHlsZVJlc29s
dmVyOjpwb3BTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK3sKKyAgICAvLyBPbmx5
IGJvdGhlciB0byB1cGRhdGUgdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiBpdCBpcyBjb25z
aXN0ZW50LgorICAgIGlmIChzY29wZVN0YWNrSXNDb25zaXN0ZW50KHNjb3BlKSkgeworICAgICAg
ICBtX3Njb3BlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICBtX3Njb3BlU3RhY2tQYXJlbnQg
PSBzY29wZS0+cGFyZW50T3JIb3N0Tm9kZSgpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKK3sKKyAgICBj
b25zdCBDb250YWluZXJOb2RlKiBwYXJlbnRzUGFyZW50ID0gcGFyZW50LT5wYXJlbnRPckhvc3RF
bGVtZW50KCk7CisKKyAgICAvLyBXZSBhcmUgbm90IGFsd2F5cyBpbnZva2VkIGNvbnNpc3RlbnRs
eS4gRm9yIGV4YW1wbGUsIHNjcmlwdCBleGVjdXRpb24gY2FuIGNhdXNlIHVzIHRvIGVudGVyCisg
ICAgLy8gc3R5bGUgcmVjYWxjIGluIHRoZSBtaWRkbGUgb2YgdHJlZSBidWlsZGluZy4gV2UgbWF5
IGFsc28gYmUgaW52b2tlZCBmcm9tIHNvbWV3aGVyZSB3aXRoaW4gdGhlIHRyZWUuCisgICAgLy8g
UmVzZXQgdGhlIHN0YWNrIGluIHRoaXMgY2FzZSwgb3IgaWYgd2Ugc2VlIGEgbmV3IHJvb3QgZWxl
bWVudC4KKyAgICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRoZSBuZXcgcGFyZW50LgorICAgIGlm
ICghcGFyZW50c1BhcmVudCB8fCBtX2NoZWNrZXIucGFyZW50U3RhY2tJc0VtcHR5KCkpCisgICAg
ICAgIG1fY2hlY2tlci5zZXR1cFBhcmVudFN0YWNrKHBhcmVudCk7CisgICAgZWxzZQorICAgICAg
ICBtX2NoZWNrZXIucHVzaFBhcmVudChwYXJlbnQpOworCisgICAgLy8gTm90ZTogV2UgbXVzdG4n
dCBza2lwIFNoYWRvd1Jvb3Qgbm9kZXMgZm9yIHRoZSBzY29wZSBzdGFjay4KKyAgICBwdXNoU2Nv
cGUocGFyZW50LCBwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSk7Cit9CisKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6cG9wUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCit7CisgICAgLy8gTm90
ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSByYW5kb20gZWxlbWVudHMgaW4gc29t
ZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4KKyAgICAvLyBQYXVzZSBtYWludGFp
bmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgorICAgIGlmIChtX2NoZWNrZXIucGFyZW50U3Rh
Y2tJc0NvbnNpc3RlbnQocGFyZW50KSkKKyAgICAgICAgbV9jaGVja2VyLnBvcFBhcmVudCgpOwor
ICAgIHBvcFNjb3BlKHBhcmVudCk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFBhcmVu
dFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3sKKyAgICBBU1NFUlQo
c2hhZG93Um9vdC0+aG9zdCgpKTsKKyAgICBwdXNoU2NvcGUoc2hhZG93Um9vdCwgc2hhZG93Um9v
dC0+aG9zdCgpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRTaGFkb3dSb290
KGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCit7CisgICAgQVNTRVJUKHNoYWRvd1Jvb3Qt
Pmhvc3QoKSk7CisgICAgcG9wU2NvcGUoc2hhZG93Um9vdCk7Cit9CisKKy8vIFRoaXMgaXMgYSBz
aW1wbGlmaWVkIHN0eWxlIHNldHRpbmcgZnVuY3Rpb24gZm9yIGtleWZyYW1lIHN0eWxlcwordm9p
ZCBTdHlsZVJlc29sdmVyOjphZGRLZXlmcmFtZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlS2V5
ZnJhbWVzPiBydWxlKQoreworICAgIEF0b21pY1N0cmluZyBzKHJ1bGUtPm5hbWUoKSk7CisgICAg
bV9rZXlmcmFtZXNSdWxlTWFwLnNldChzLmltcGwoKSwgcnVsZSk7Cit9CisKK1N0eWxlUmVzb2x2
ZXI6On5TdHlsZVJlc29sdmVyKCkKK3sKKyAgICBtX2ZvbnRTZWxlY3Rvci0+Y2xlYXJEb2N1bWVu
dCgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZSgpCit7CisgICAgLy8gTG9vayBmb3IgY2FjaGUgZW50cmllcyBjb250YWluaW5nIGEgc3R5bGUg
ZGVjbGFyYXRpb24gd2l0aCBhIHNpbmdsZSByZWYgYW5kIHJlbW92ZSB0aGVtLgorICAgIC8vIFRo
aXMgbWF5IGhhcHBlbiB3aGVuIGFuIGVsZW1lbnQgYXR0cmlidXRlIG11dGF0aW9uIGNhdXNlcyBp
dCB0byBzd2FwIG91dCBpdHMgQXR0cmlidXRlOjpkZWNsKCkKKyAgICAvLyBmb3IgYW5vdGhlciBD
U1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiwgcG90ZW50aWFsbHkgbGVhdmluZyB0aGlzIGNh
Y2hlIHdpdGggdGhlIGxhc3QgcmVmLgorICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+IHRvUmVtb3Zl
OworICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJv
cGVydGllc0NhY2hlLmJlZ2luKCk7CisgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0
b3IgZW5kID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpOworICAgIGZvciAoOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiYgbWF0Y2hl
ZFByb3BlcnRpZXMgPSBpdC0+c2Vjb25kLm1hdGNoZWRQcm9wZXJ0aWVzOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRpZXNbaV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkp
IHsKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICBtX21hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGUucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKK30KKworU3R5bGVSZXNvbHZl
cjo6RmVhdHVyZXM6OkZlYXR1cmVzKCkKKyAgICA6IHVzZXNGaXJzdExpbmVSdWxlcyhmYWxzZSkK
KyAgICAsIHVzZXNCZWZvcmVBZnRlclJ1bGVzKGZhbHNlKQorICAgICwgdXNlc0xpbmtSdWxlcyhm
YWxzZSkKK3sKK30KKworU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6On5GZWF0dXJlcygpCit7Cit9
CisgICAgCit2b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjphZGQoY29uc3QgU3R5bGVSZXNv
bHZlcjo6RmVhdHVyZXMmIG90aGVyKQoreworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+
OjppdGVyYXRvciBlbmQgPSBvdGhlci5pZHNJblJ1bGVzLmVuZCgpOworICAgIGZvciAoSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuaWRzSW5SdWxlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGlkc0luUnVsZXMuYWRkKCppdCk7CisgICAg
ZW5kID0gb3RoZXIuYXR0cnNJblJ1bGVzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuYXR0cnNJblJ1bGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYXR0cnNJblJ1bGVzLmFkZCgqaXQpOworICAgIHNpYmxp
bmdSdWxlcy5hcHBlbmQob3RoZXIuc2libGluZ1J1bGVzKTsKKyAgICB1bmNvbW1vbkF0dHJpYnV0
ZVJ1bGVzLmFwcGVuZChvdGhlci51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKKyAgICB1c2VzRmly
c3RMaW5lUnVsZXMgPSB1c2VzRmlyc3RMaW5lUnVsZXMgfHwgb3RoZXIudXNlc0ZpcnN0TGluZVJ1
bGVzOworICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gdXNlc0JlZm9yZUFmdGVyUnVsZXMgfHwg
b3RoZXIudXNlc0JlZm9yZUFmdGVyUnVsZXM7CisgICAgdXNlc0xpbmtSdWxlcyA9IHVzZXNMaW5r
UnVsZXMgfHwgb3RoZXIudXNlc0xpbmtSdWxlczsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpG
ZWF0dXJlczo6Y2xlYXIoKQoreworICAgIGlkc0luUnVsZXMuY2xlYXIoKTsKKyAgICBhdHRyc0lu
UnVsZXMuY2xlYXIoKTsKKyAgICBzaWJsaW5nUnVsZXMuY2xlYXIoKTsKKyAgICB1bmNvbW1vbkF0
dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7CisgICAgdXNlc0ZpcnN0TGluZVJ1bGVzID0gZmFsc2U7Cisg
ICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSBmYWxzZTsKKyAgICB1c2VzTGlua1J1bGVzID0gZmFs
c2U7Cit9CisKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVldChjb25zdCBT
dHJpbmcmIHN0cikKK3sKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0gU3R5bGVTaGVl
dEludGVybmFsOjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBv
c2UKKyAgICBzaGVldC0+cGFyc2VTdHJpbmcoc3RyKTsKKyAgICByZXR1cm4gc2hlZXQ7Cit9CisK
K3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVldChjb25zdCBjaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBzaXplKQoreworICAgIHJldHVybiBwYXJzZVVBU2hlZXQoU3RyaW5n
KGNoYXJhY3RlcnMsIHNpemUpKTsKK30KKworc3RhdGljIHZvaWQgbG9hZEZ1bGxEZWZhdWx0U3R5
bGUoKQoreworICAgIGlmIChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCkgeworICAgICAgICBBU1NF
UlQoZGVmYXVsdFN0eWxlKTsKKyAgICAgICAgQVNTRVJUKGRlZmF1bHRQcmludFN0eWxlID09IGRl
ZmF1bHRTdHlsZSk7CisgICAgICAgIGRlbGV0ZSBkZWZhdWx0U3R5bGU7CisgICAgICAgIHNpbXBs
ZURlZmF1bHRTdHlsZVNoZWV0LT5kZXJlZigpOworICAgICAgICBkZWZhdWx0U3R5bGUgPSBSdWxl
U2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisgICAgICAgIGRlZmF1bHRQcmludFN0eWxlID0gUnVs
ZVNldDo6Y3JlYXRlKCkubGVha1B0cigpOworICAgICAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVl
dCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFkZWZhdWx0U3R5bGUpOworICAg
ICAgICBkZWZhdWx0U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisgICAgICAg
IGRlZmF1bHRQcmludFN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCkubGVha1B0cigpOworICAgICAg
ICBkZWZhdWx0UXVpcmtzU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisgICAg
fQorCisgICAgLy8gU3RyaWN0LW1vZGUgcnVsZXMuCisgICAgU3RyaW5nIGRlZmF1bHRSdWxlcyA9
IFN0cmluZyhodG1sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKGh0bWxVc2VyQWdlbnRTdHls
ZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJhRGVmYXVsdFN0eWxl
U2hlZXQoKTsKKyAgICBkZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChkZWZhdWx0UnVs
ZXMpOworICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZGVmYXVsdFN0eWxlU2hl
ZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNo
ZWV0KGRlZmF1bHRTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CisKKyAgICAvLyBRdWlya3MtbW9k
ZSBydWxlcy4KKyAgICBTdHJpbmcgcXVpcmtzUnVsZXMgPSBTdHJpbmcocXVpcmtzVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKHF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRo
ZW1lOjpkZWZhdWx0VGhlbWUoKS0+ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7CisgICAgcXVpcmtz
U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChxdWlya3NSdWxlcyk7CisgICAgZGVmYXVsdFF1aXJr
c1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChxdWlya3NTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkp
OworfQorCitzdGF0aWMgdm9pZCBsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKCkKK3sKKyAgICBBU1NF
UlQoIWRlZmF1bHRTdHlsZSk7CisgICAgQVNTRVJUKCFzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCk7
CisKKyAgICBkZWZhdWx0U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisgICAg
Ly8gVGhlcmUgYXJlIG5vIG1lZGlhLXNwZWNpZmljIHJ1bGVzIGluIHRoZSBzaW1wbGUgZGVmYXVs
dCBzdHlsZS4KKyAgICBkZWZhdWx0UHJpbnRTdHlsZSA9IGRlZmF1bHRTdHlsZTsKKyAgICBkZWZh
dWx0UXVpcmtzU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisKKyAgICBzaW1w
bGVEZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChzaW1wbGVVc2VyQWdlbnRTdHlsZVNo
ZWV0LCBzdHJsZW4oc2ltcGxlVXNlckFnZW50U3R5bGVTaGVldCkpOworICAgIGRlZmF1bHRTdHls
ZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwo
KSk7CisKKyAgICAvLyBObyBuZWVkIHRvIGluaXRpYWxpemUgcXVpcmtzIHNoZWV0IHlldCBhcyB0
aGVyZSBhcmUgbm8gcXVpcmsgcnVsZXMgZm9yIGVsZW1lbnRzIGFsbG93ZWQgaW4gc2ltcGxlIGRl
ZmF1bHQgc3R5bGUuCit9CisKK3N0YXRpYyB2b2lkIGxvYWRWaWV3U291cmNlU3R5bGUoKQorewor
ICAgIEFTU0VSVCghZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSk7CisgICAgZGVmYXVsdFZpZXdTb3Vy
Y2VTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKyAgICBkZWZhdWx0Vmlld1Nv
dXJjZVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYXJzZVVBU2hlZXQoc291cmNlVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZh
bCgpKTsKK30KKworc3RhdGljIHZvaWQgZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVu
dChFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCAm
JiAhZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShlbGVtZW50KSkKKyAgICAgICAgbG9h
ZEZ1bGxEZWZhdWx0U3R5bGUoKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgaWYgKGVsZW1lbnQt
PmlzU1ZHRWxlbWVudCgpICYmICFzdmdTdHlsZVNoZWV0KSB7CisgICAgICAgIC8vIFNWRyBydWxl
cy4KKyAgICAgICAgc3ZnU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChzdmdVc2VyQWdlbnRTdHls
ZVNoZWV0LCBzaXplb2Yoc3ZnVXNlckFnZW50U3R5bGVTaGVldCkpOworICAgICAgICBkZWZhdWx0
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN2Z1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Cisg
ICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdmdTdHlsZVNoZWV0
LCBwcmludEV2YWwoKSk7CisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorICAg
IGlmIChlbGVtZW50LT5pc01hdGhNTEVsZW1lbnQoKSAmJiAhbWF0aE1MU3R5bGVTaGVldCkgewor
ICAgICAgICAvLyBNYXRoTUwgcnVsZXMuCisgICAgICAgIG1hdGhNTFN0eWxlU2hlZXQgPSBwYXJz
ZVVBU2hlZXQobWF0aG1sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1hdGhtbFVzZXJBZ2Vu
dFN0eWxlU2hlZXQpKTsKKyAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCht
YXRoTUxTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAgICBkZWZhdWx0UHJpbnRTdHls
ZS0+YWRkUnVsZXNGcm9tU2hlZXQobWF0aE1MU3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOworICAg
IH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZJREVPKQorICAgIGlmICghbWVkaWFDb250cm9sc1N0
eWxlU2hlZXQgJiYgKGVsZW1lbnQtPmhhc1RhZ05hbWUodmlkZW9UYWcpIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUoYXVkaW9UYWcpKSkgeworICAgICAgICBTdHJpbmcgbWVkaWFSdWxlcyA9IFN0cmlu
ZyhtZWRpYUNvbnRyb2xzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNV
c2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVsZW1lbnQt
PmRvY3VtZW50KCktPnBhZ2UoKSktPmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKKyAg
ICAgICAgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQobWVkaWFSdWxlcyk7
CisgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWVkaWFDb250cm9sc1N0
eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRS
dWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOworICAg
IH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGlmICghZnVsbHNj
cmVlblN0eWxlU2hlZXQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2NyZWVu
KCkpIHsKKyAgICAgICAgU3RyaW5nIGZ1bGxzY3JlZW5SdWxlcyA9IFN0cmluZyhmdWxsc2NyZWVu
VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKGZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0
KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJhRnVsbFNjcmVlblN0eWxlU2hl
ZXQoKTsKKyAgICAgICAgZnVsbHNjcmVlblN0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQoZnVsbHNj
cmVlblJ1bGVzKTsKKyAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChmdWxs
c2NyZWVuU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKKyAgICAgICAgZGVmYXVsdFF1aXJrc1N0
eWxlLT5hZGRSdWxlc0Zyb21TaGVldChmdWxsc2NyZWVuU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgp
KTsKKyAgICB9CisjZW5kaWYKKworICAgIEFTU0VSVChkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCku
aWRzSW5SdWxlcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtYXRoTUxTdHlsZVNoZWV0IHx8IGRl
ZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKS5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpKTsKK30KKwordm9p
ZCBTdHlsZVJlc29sdmVyOjphZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaFJlc3VsdCYgbWF0Y2hS
ZXN1bHQsIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgdW5z
aWduZWQgbGlua01hdGNoVHlwZSwgYm9vbCBpblJlZ2lvblJ1bGUpCit7CisgICAgbWF0Y2hSZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuZ3JvdyhtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCkgKyAxKTsKKyAgICBNYXRjaGVkUHJvcGVydGllcyYgbmV3UHJvcGVydGllcyA9IG1hdGNo
UmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmxhc3QoKTsKKyAgICBuZXdQcm9wZXJ0aWVzLnByb3Bl
cnRpZXMgPSBwcm9wZXJ0aWVzOworICAgIG5ld1Byb3BlcnRpZXMubGlua01hdGNoVHlwZSA9IGxp
bmtNYXRjaFR5cGU7CisgICAgbmV3UHJvcGVydGllcy5pc0luUmVnaW9uUnVsZSA9IGluUmVnaW9u
UnVsZTsKKyAgICBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOworfQorCitp
bmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjphZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNo
UmVzdWx0JiByZXN1bHQsIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0LCBib29sIGlzQ2Fj
aGVhYmxlKQoreworICAgIGlmICghcHJvcGVydHlTZXQpCisgICAgICAgIHJldHVybjsKKyAgICBy
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNp
emUoKTsKKyAgICBpZiAocmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPT0gLTEpCisgICAg
ICAgIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlID0gcmVzdWx0LnJhbmdlcy5sYXN0QXV0
aG9yUnVsZTsKKyAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHByb3BlcnR5U2V0KTsK
KyAgICBpZiAoIWlzQ2FjaGVhYmxlKQorICAgICAgICByZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxz
ZTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0
KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBN
YXRjaE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgQVNTRVJUKHJ1bGVzKTsKKyAgICBBU1NFUlQo
bV9lbGVtZW50KTsKKworICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlk
LCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCisgICAg
Ly8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCisgICAgaWYgKG1fZWxlbWVudC0+aGFzSUQoKSkKKyAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5pZFJ1bGVzKG1fZWxlbWVu
dC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1
bGVJbmRleCwgb3B0aW9ucyk7CisgICAgaWYgKG1fZWxlbWVudC0+aGFzQ2xhc3MoKSkgeworICAg
ICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKKyAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0
cmluZyYgY2xhc3NOYW1lcyA9IG1fc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpOworICAgICAg
ICBzaXplX3Qgc2l6ZSA9IGNsYXNzTmFtZXMuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
TGlzdChydWxlcy0+Y2xhc3NSdWxlcyhjbGFzc05hbWVzW2ldLmltcGwoKSksIGZpcnN0UnVsZUlu
ZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKKyAgICB9CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBwc2V1ZG9JZCA9IG1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKKyAgICBpZiAoIXBz
ZXVkb0lkLmlzRW1wdHkoKSkgeworICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKKyAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5zaGFkb3dQc2V1ZG9FbGVt
ZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IG9wdGlvbnMpOworICAgIH0KKyAgICBpZiAobV9lbGVtZW50LT5pc0xpbmsoKSkKKyAgICAgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5saW5rUHNldWRvQ2xhc3NSdWxlcygp
LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7CisgICAgaWYgKG1fY2hl
Y2tlci5tYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhtX2VsZW1lbnQpKQorICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBmaXJz
dFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7CisgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KHJ1bGVzLT50YWdSdWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwo
KSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKKyAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPnVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVsZUlu
ZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1
bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgaWYgKCFtX3JlZ2lvbkZvclN0eWxpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IHVuc2lnbmVkIHNpemUgPSBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBD
U1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRS
dWxlU2V0cy5hdChpKS5zZWxlY3RvcjsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3Io
cmVnaW9uU2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3JlZ2lvbkZvclN0eWxpbmct
Pm5vZGUoKSkpKSB7CisgICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IHJ1bGVzLT5t
X3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7CisgICAgICAg
ICAgICBBU1NFUlQocmVnaW9uUnVsZXMpOworICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXMocmVnaW9uUnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNm
ZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBpZiAobV9tYXRjaGVk
UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzb3J0TWF0Y2hlZFJ1bGVz
KCk7CisKKyAgICBpZiAobV9jaGVja2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKSB7CisgICAg
ICAgIGlmICghbV9ydWxlTGlzdCkKKyAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NS
dWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21h
dGNoZWRSdWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcnVsZUxpc3QtPnJ1bGVzKCku
YXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9m
IG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMuCisgICAgLy8g
RklYTUU6IFRoaXMgc3Vja3MsIHRoZSBpbnNwZWN0b3Igc2hvdWxkIGdldCB0aGUgc3R5bGUgZnJv
bSB0aGUgdmlzaXRlZCBzdHlsZSBpdHNlbGYuCisgICAgYm9vbCBzd2FwVmlzaXRlZFVudmlzaXRl
ZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShtX2VsZW1lbnQs
IENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1fc3R5bGUgJiYg
bV9tYXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQor
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0QWZmZWN0ZWRCeVVuY29tbW9uQXR0cmlidXRlU2VsZWN0
b3JzKCk7CisgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtX21hdGNoZWRSdWxlc1tp
XS0+bGlua01hdGNoVHlwZSgpOworICAgICAgICBpZiAoc3dhcFZpc2l0ZWRVbnZpc2l0ZWQgJiYg
bGlua01hdGNoVHlwZSAmJiBsaW5rTWF0Y2hUeXBlICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hB
bGwpCisgICAgICAgICAgICBsaW5rTWF0Y2hUeXBlID0gKGxpbmtNYXRjaFR5cGUgPT0gU2VsZWN0
b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpID8gU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmsgOiBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKKyAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRp
ZXMocmVzdWx0LCBtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIG1fbWF0
Y2hlZFJ1bGVzW2ldLT5ydWxlKCksIGxpbmtNYXRjaFR5cGUsIG1fbWF0Y2hlZFJ1bGVzW2ldLT5p
c0luUmVnaW9uUnVsZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hT
Y29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzKQoreworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYgKG1fc2NvcGVkQXV0aG9y
U3R5bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWF0Y2hPcHRpb25zIG9w
dGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMpOworCisgICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhvciBy
dWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBpdCBp
ZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQg
PSBtX2VsZW1lbnQtPnBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICBpZiAoIXNjb3BlU3RhY2tJc0Nv
bnNpc3RlbnQocGFyZW50KSkKKyAgICAgICAgc2V0dXBTY29wZVN0YWNrKHBhcmVudCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IG1fc2NvcGVTdGFjay5zaXplKCk7IGk7IC0taSkgeworICAgICAgICBj
b25zdCBTY29wZVN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVN0YWNrW2kgLSAxXTsKKyAgICAg
ICAgb3B0aW9ucy5zY29wZSA9IGZyYW1lLm1fc2NvcGU7CisgICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJl
c3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbihmcmFtZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RB
dXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICB9
CisgICAgLy8gQWxzbyBpbmNsdWRlIHRoZSBjdXJyZW50IGVsZW1lbnQuCisgICAgUnVsZVNldCog
cnVsZVNldCA9IHJ1bGVTZXRGb3JTY29wZShtX2VsZW1lbnQpOworICAgIGlmIChydWxlU2V0KSB7
CisgICAgICAgIG9wdGlvbnMuc2NvcGUgPSBtX2VsZW1lbnQ7CisgICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKHJ1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQu
cmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JSZWdpb24ocnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJl
c3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgIH0KKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVz
KTsKKyNlbmRpZgorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKKyAgICBtX21hdGNo
ZWRSdWxlcy5jbGVhcigpOworICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKKworICAgIGlmICghbV9lbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgorICAg
IE1hdGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9y
UnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV9hdXRob3JTdHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdl
cy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMp
OworCisgICAgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKKworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworfQorCit2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpCit7CisgICAgaWYgKCFtX3VzZXJTdHlsZSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICByZXN1bHQucmFu
Z2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwor
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1fdXNlclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2Vz
LmZpcnN0VXNlclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBpbmNsdWRlRW1wdHlS
dWxlcyk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV91c2VyU3R5bGUuZ2V0
KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1
bGUsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxl
cyhyZXN1bHQpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKK3sKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVh
cigpOworICAgIAorICAgIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSA9IHJlc3VsdC5tYXRjaGVk
UHJvcGVydGllcy5zaXplKCkgLSAxOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVzLCBy
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGZhbHNl
KTsKKworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworfQorCitjbGFz
cyBNYXRjaGluZ1VBUnVsZXNTY29wZSB7CitwdWJsaWM6CisgICAgTWF0Y2hpbmdVQVJ1bGVzU2Nv
cGUoKTsKKyAgICB+TWF0Y2hpbmdVQVJ1bGVzU2NvcGUoKTsKKworICAgIHN0YXRpYyBib29sIGlz
TWF0Y2hpbmdVQVJ1bGVzKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgbV9tYXRjaGlu
Z1VBUnVsZXM7Cit9OworCitNYXRjaGluZ1VBUnVsZXNTY29wZTo6TWF0Y2hpbmdVQVJ1bGVzU2Nv
cGUoKQoreworICAgIEFTU0VSVCghbV9tYXRjaGluZ1VBUnVsZXMpOworICAgIG1fbWF0Y2hpbmdV
QVJ1bGVzID0gdHJ1ZTsKK30KKworTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6On5NYXRjaGluZ1VBUnVs
ZXNTY29wZSgpCit7CisgICAgbV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKK30KKworaW5saW5l
IGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKK3sKKyAgICBy
ZXR1cm4gbV9tYXRjaGluZ1VBUnVsZXM7Cit9CisKK2Jvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6
Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBpZiAoIXJ1bGVzKQorICAgICAgICByZXR1cm47CisgICAgLy8gSW4g
c29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVt
ZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4KKyAgICAvLyBB
bmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2Fz
ZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCisgICAgYm9vbCBjYW5Vc2VGYXN0UmVq
ZWN0ID0gbV9jaGVja2VyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KG1fcGFyZW50Tm9kZSk7CisK
KyAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSA9
IHJ1bGVzLT5hdChpKTsKKyAgICAgICAgaWYgKGNhblVzZUZhc3RSZWplY3QgJiYgbV9jaGVja2Vy
LmZhc3RSZWplY3RTZWxlY3RvcjxSdWxlRGF0YTo6bWF4aW11bUlkZW50aWZpZXJDb3VudD4ocnVs
ZURhdGEuZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcygpKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIFN0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUoKTsK
KyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbE1hdGNoUnVsZShkb2N1bWVudCgpLCBydWxlKTsKKyNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKQorICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihydWxlRGF0YSwg
b3B0aW9ucy5zY29wZSkpIHsKKyNlbHNlCisgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVE
YXRhKSkgeworI2VuZGlmCisgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBydWxlIGlz
IGFwcGxpY2FibGUgaW4gdGhlIGN1cnJlbnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6
CisgICAgICAgICAgICAvLyBhKSBpdCdzIGEgVUEgcnVsZQorICAgICAgICAgICAgLy8gYikgdGhl
IHRyZWUgc2NvcGUgYWxsb3dzIGF1dGhvciBydWxlcworICAgICAgICAgICAgLy8gYykgdGhlIHJ1
bGVzIGNvbWVzIGZyb20gYSBzY29wZWQgc3R5bGUgc2hlZXQgd2l0aGluIHRoZSBzYW1lIHRyZWUg
c2NvcGUKKyAgICAgICAgICAgIC8vIGQpIHRoZSBydWxlIGNvbnRhaW5zIHNoYWRvdy1JRCBwc2V1
ZG8gZWxlbWVudHMKKyAgICAgICAgICAgIFRyZWVTY29wZSogdHJlZVNjb3BlID0gbV9lbGVtZW50
LT50cmVlU2NvcGUoKTsKKyAgICAgICAgICAgIGlmICghTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Omlz
TWF0Y2hpbmdVQVJ1bGVzKCkKKyAgICAgICAgICAgICAgICAmJiAhdHJlZVNjb3BlLT5hcHBseUF1
dGhvclNoZWV0cygpCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAgICAgICAgICAgICAm
JiAoIW9wdGlvbnMuc2NvcGUgfHwgb3B0aW9ucy5zY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNj
b3BlKQorI2VuZGlmCisgICAgICAgICAgICAgICAgJiYgIW1fY2hlY2tlci5oYXNVbmtub3duUHNl
dWRvRWxlbWVudHMoKSkgeworCisgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJv
cGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgor
ICAgICAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcyA9IHJ1bGUtPnByb3BlcnRp
ZXMoKTsKKyAgICAgICAgICAgIGlmICghcHJvcGVydGllcyB8fCAocHJvcGVydGllcy0+aXNFbXB0
eSgpICYmICFvcHRpb25zLmluY2x1ZGVFbXB0eVJ1bGVzKSkgeworICAgICAgICAgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRklY
TUU6IEV4cG9zaW5nIHRoZSBub24tc3RhbmRhcmQgZ2V0TWF0Y2hlZENTU1J1bGVzIEFQSSB0byB3
ZWIgaXMgdGhlIG9ubHkgcmVhc29uIHRoaXMgaXMgbmVlZGVkLgorICAgICAgICAgICAgaWYgKG1f
c2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkg
eworICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxl
KGNvb2tpZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQgYSBw
c2V1ZG8gYml0IGlmCisgICAgICAgICAgICAvLyB3ZSByZWFsbHkganVzdCBtYXRjaGVkIGEgcHNl
dWRvLWVsZW1lbnQuCisgICAgICAgICAgICBpZiAobV9keW5hbWljUHNldWRvICE9IE5PUFNFVURP
ICYmIG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG1fY2hlY2tlci5pc0NvbGxlY3RpbmdSdWxlc09ubHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZh
bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VV
RE9JRCkKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUobV9k
eW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
VXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5kaWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxlcyBh
cnJheS4KKyAgICAgICAgICAgICAgICArK2xhc3RSdWxlSW5kZXg7CisgICAgICAgICAgICAgICAg
aWYgKGZpcnN0UnVsZUluZGV4ID09IC0xKQorICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJ
bmRleCA9IGxhc3RSdWxlSW5kZXg7CisKKyAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBydWxl
IHRvIG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCisgICAgICAgICAgICAgICAgYWRkTWF0Y2hl
ZFJ1bGUoJnJ1bGVEYXRhKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZE1hdGNoUnVsZShjb29raWUsIHRydWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOworICAgIH0KK30KKworc3RhdGljIGlu
bGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRh
KiByMikKK3sKKyAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTEgPSByMS0+c3BlY2lmaWNpdHkoKTsK
KyAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsKKyAgICByZXR1
cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+
cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsKK30KKwordm9pZCBTdHls
ZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKK3sKKyAgICBzdGQ6OnNvcnQobV9tYXRjaGVk
UnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7Cit9CisK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQor
eworICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQpOworCisgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIg
c2hlZXQgcnVsZXMuCisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQorICAgICAg
ICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQsIGZhbHNlKTsKKyAgICAgICAgCisgICAgLy8gTm93IGNo
ZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2VudGF0aW9uYWwgYXR0
cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgorICAgIGlmIChtX3N0eWxlZEVsZW1lbnQpIHsKKyAg
ICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+
YXR0cmlidXRlU3R5bGUoKSk7CisKKyAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9uYWwg
bWFwcGVkIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxscyBz
aGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCisgICAg
ICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUgZGVw
ZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0ZXMuCisgICAgICAgIGFkZEVs
ZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxB
dHRyaWJ1dGVTdHlsZSgpKTsKKworICAgICAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pc0hUTUxF
bGVtZW50KCkpIHsKKyAgICAgICAgICAgIGJvb2wgaXNBdXRvOworICAgICAgICAgICAgVGV4dERp
cmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0eWxlZEVsZW1lbnQpLT5k
aXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAgICAgICAgICAg
aWYgKGlzQXV0bykKKyAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQs
IHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRU
b0xlZnREZWNsYXJhdGlvbigpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBDaGVj
ayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgorICAgIGlmIChtX21hdGNoQXV0aG9y
QW5kVXNlclN0eWxlcykKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhyZXN1bHQsIGZhbHNlKTsK
KworICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KKyAgICBpZiAo
bV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50ICYmIG1fc3R5bGVk
RWxlbWVudC0+aW5saW5lU3R5bGUoKSkgeworICAgICAgICAvLyBJbmxpbmUgc3R5bGUgaXMgaW1t
dXRhYmxlIGFzIGxvbmcgYXMgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4KKyAgICAgICAgLy8g
RklYTUU6IE1lZGlhIGNvbnRyb2wgc2hhZG93IHRyZWVzIHNlZW0gdG8gaGF2ZSBwcm9ibGVtcyB3
aXRoIGNhY2hpbmcuCisgICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFtX3N0
eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFtX3N0eWxlZEVsZW1l
bnQtPmlzSW5TaGFkb3dUcmVlKCk7CisgICAgICAgIC8vIEZJWE1FOiBDb25zdGlmeS4KKyAgICAg
ICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIGNvbnN0X2Nhc3Q8U3R5bGVQcm9w
ZXJ0eVNldCo+KG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSksIGlzSW5saW5lU3R5bGVD
YWNoZWFibGUpOworICAgIH0KKworI2lmIEVOQUJMRShTVkcpCisgICAgLy8gTm93IGNoZWNrIFNN
SUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0eWxlLgorICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1l
bnQoKSkKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3Bl
cnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOworI2VuZGlmCit9CisKK2lubGluZSB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCit7CisgICAgaWYgKG1f
ZWxlbWVudCAhPSBlKSB7CisgICAgICAgIG1fZWxlbWVudCA9IGU7CisgICAgICAgIG1fc3R5bGVk
RWxlbWVudCA9IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3Rh
dGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCkgOiAwOworICAgICAgICBtX2VsZW1l
bnRMaW5rU3RhdGUgPSBtX2NoZWNrZXIuZGV0ZXJtaW5lTGlua1N0YXRlKG1fZWxlbWVudCk7Cisg
ICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsK
KyAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVt
ZW50KGZhbHNlKTsKKyAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0
T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOworICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUg
dm9pZCBTdHlsZVJlc29sdmVyOjppbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQgcHNldWRvSUQpCit7CisgICAgbV9jaGVja2Vy
LnNldFBzZXVkb1N0eWxlKHBzZXVkb0lEKTsKKworICAgIG1fcGFyZW50Tm9kZSA9IGUgPyBlLT5w
YXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKSA6IDA7CisKKyAgICBpZiAocGFyZW50U3R5
bGUpCisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsKKyAgICBlbHNlCisgICAg
ICAgIG1fcGFyZW50U3R5bGUgPSBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRlclN0
eWxlKCkgOiAwOworCisgICAgTm9kZSogZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSA6IDA7CisgICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gbV9jaGVj
a2VyLmRvY3VtZW50KCktPnJlbmRlclN0eWxlKCk7CisgICAgbV9yb290RWxlbWVudFN0eWxlID0g
ZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgp
IDogZG9jU3R5bGU7CisKKyAgICBtX3N0eWxlID0gMDsKKworICAgIG1fcGVuZGluZ0ltYWdlUHJv
cGVydGllcy5jbGVhcigpOworCisgICAgbV9ydWxlTGlzdCA9IDA7CisKKyAgICBtX2ZvbnREaXJ0
eSA9IGZhbHNlOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNo
b2xkID0gMTA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hv
bGQgPSAxMDsKKworTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50
KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdAoreworICAgIGlmICh2
aXNpdGVkTm9kZUNvdW50ID49IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAqIGNTdHlsZVNlYXJjaExl
dmVsVGhyZXNob2xkKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFy
ZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNU
WUxFX1NDT1BFRCkKKyAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQor
ICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIFN0eWxlZEVsZW1lbnQqIHAgPSBzdGF0aWNf
Y2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKKyAgICBpZiAocC0+aW5saW5lU3R5bGUoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAocC0+aXNTVkdFbGVt
ZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHApLT5hbmltYXRlZFNNSUxTdHlsZVBy
b3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICBpZiAocC0+aGFzSUQo
KSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMocC0+aWRGb3JTdHlsZVJlc29sdXRp
b24oKS5pbXBsKCkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IHAtPnJlbmRlclN0eWxlKCk7CisgICAgdW5zaWduZWQgc3ViY291bnQgPSAwOwor
ICAgIE5vZGUqIHRoaXNDb3VzaW4gPSBwOworICAgIE5vZGUqIGN1cnJlbnROb2RlID0gcC0+cHJl
dmlvdXNTaWJsaW5nKCk7CisKKyAgICAvLyBSZXNlcnZlIHRoZSB0cmllcyBmb3IgdGhpcyBsZXZl
bC4gVGhpcyBlZmZlY3RpdmVseSBtYWtlcyBzdXJlIHRoYXQgdGhlIGFsZ29yaXRobQorICAgIC8v
IHdpbGwgbmV2ZXIgZ28gZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2
ZWxzIGludG8gcmVjdXJzaW9uLgorICAgIHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNo
VGhyZXNob2xkOworICAgIHdoaWxlICh0aGlzQ291c2luKSB7CisgICAgICAgIHdoaWxlIChjdXJy
ZW50Tm9kZSkgeworICAgICAgICAgICAgKytzdWJjb3VudDsKKyAgICAgICAgICAgIGlmIChjdXJy
ZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAmJiBjdXJyZW50Tm9kZS0+bGFz
dENoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBBZGp1c3QgZm9yIHVudXNlZCByZXNlcnZl
ZCB0cmllcy4KKyAgICAgICAgICAgICAgICB2aXNpdGVkTm9kZUNvdW50IC09IGNTdHlsZVNlYXJj
aFRocmVzaG9sZCAtIHN1YmNvdW50OworICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Tm9k
ZS0+bGFzdENoaWxkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3ViY291bnQg
Pj0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgY3VycmVudE5vZGUgPSBsb2NhdGVDb3VzaW5MaXN0KHRoaXNDb3Vz
aW4tPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5vZGVDb3VudCk7CisgICAgICAgIHRoaXNDb3Vz
aW4gPSBjdXJyZW50Tm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBTdHls
ZVJlc29sdmVyOjptYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQoreworICAgIGlmICgh
cnVsZVNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFy
KCk7CisKKyAgICBpbnQgZmlyc3RSdWxlSW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwor
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVs
ZUluZGV4LCBmYWxzZSk7CisKKyAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRy
b2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBIVE1MSW5wdXRFbGVtZW50
KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1M
SW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IG1fZWxlbWVudC0+dG9JbnB1dEVsZW1l
bnQoKTsKKworICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1dEVsZW1lbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5pc0F1
dG9maWxsZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hl
Y2tlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNJbmRldGVybWlu
YXRlKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPnJlcXVpcmVkKCkgIT0gb3Ro
ZXJJbnB1dEVsZW1lbnQtPnJlcXVpcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IG1fZWxlbWVudC0+aXNFbmFi
bGVkRm9ybUNvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1l
bnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBtX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRv
bkZvckZvcm0oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgeworICAgICAgICBib29s
IHdpbGxWYWxpZGF0ZSA9IGVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpOworCisgICAgICAgIGlmICh3
aWxsVmFsaWRhdGUgIT0gbV9lbGVtZW50LT53aWxsVmFsaWRhdGUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1Zh
bGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xF
bGVtZW50KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChlbGVt
ZW50LT5pc0luUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlzSW5SYW5nZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChlbGVtZW50LT5pc091dE9mUmFuZ2UoKSAhPSBt
X2VsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIG1ha2VzIHNvbWUg
YXNzdW1wdGlvbnMgdGhhdCBvbmx5IG1ha2Ugc2Vuc2UgZm9yIGF0dHJpYnV0ZSBzdHlsZXMgKHdl
IG9ubHkgY29tcGFyZSBDU1NQcm9wZXJ0eTo6aWQoKSBhbmQgQ1NTUHJvcGVydHk6OnZhbHVlKCku
KQorc3RhdGljIGlubGluZSBib29sIGF0dHJpYnV0ZVN0eWxlc0VxdWFsKFN0eWxlUHJvcGVydHlT
ZXQqIGEsIFN0eWxlUHJvcGVydHlTZXQqIGIpCit7CisgICAgaWYgKGEgPT0gYikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKGEtPnByb3BlcnR5Q291bnQoKSAhPSBiLT5wcm9wZXJ0eUNv
dW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50
ID0gYS0+cHJvcGVydHlDb3VudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9w
ZXJ0eUNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIGFQcm9wZXJ0eSA9
IGEtPnByb3BlcnR5QXQoaSk7CisgICAgICAgIHVuc2lnbmVkIGo7CisgICAgICAgIGZvciAoaiA9
IDA7IGogPCBwcm9wZXJ0eUNvdW50OyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IENTU1Byb3Bl
cnR5JiBiUHJvcGVydHkgPSBiLT5wcm9wZXJ0eUF0KGopOworICAgICAgICAgICAgaWYgKGFQcm9w
ZXJ0eS5pZCgpICE9IGJQcm9wZXJ0eS5pZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgLy8gV2UgY291bGQgZ2V0IGEgZmV3IG1vcmUgaGl0cyBieSBjb21wYXJpbmcg
Y3NzVGV4dCgpIGhlcmUsIGJ1dCB0aGF0IGdldHMgZXhwZW5zaXZlIHF1aWNrbHkuCisgICAgICAg
ICAgICBpZiAoYVByb3BlcnR5LnZhbHVlKCkgIT0gYlByb3BlcnR5LnZhbHVlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGogPT0gcHJvcGVydHlDb3VudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIGVsZW1lbnRIYXNEaXJl
Y3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmlzSFRN
TEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5oYXNEaXJlY3Rpb25BdXRvKCk7
Cit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxl
bWVudC0+cmVuZGVyU3R5bGUoKTsKKworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoc3R5bGUtPnVuaXF1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gbV9lbGVtZW50LT50YWdRTmFtZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgIT0gbV9lbGVt
ZW50LT5oYXNDbGFzcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVsZW1lbnQt
PmlubGluZVN0eWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFCTEUoU1ZHKQor
ICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4oZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKKyAgICBpZiAoISFlbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpICE9
ICEhbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgU3R5bGVQcm9wZXJ0eVNldCogYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQSA9IGVs
ZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpOworICAgIFN0eWxlUHJvcGVydHlTZXQq
IGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZUIgPSBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxB
dHRyaWJ1dGVTdHlsZSgpOworICAgIGlmICghYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQSAhPSAh
YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChlbGVtZW50LT5pc0xpbmsoKSAhPSBtX2VsZW1lbnQtPmlzTGluaygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHN0eWxlLT5hZmZlY3RlZEJ5VW5jb21tb25BdHRyaWJ1dGVTZWxl
Y3RvcnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5ob3ZlcmVk
KCkgIT0gbV9lbGVtZW50LT5ob3ZlcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoZWxlbWVudC0+YWN0aXZlKCkgIT0gbV9lbGVtZW50LT5hY3RpdmUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gbV9lbGVtZW50LT5mb2N1
c2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+c2hhZG93UHNl
dWRvSWQoKSAhPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2VsZW1lbnQgPT0gbV9lbGVtZW50
LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChlbGVtZW50LT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpICE9IG1fZWxlbWVudC0+Z2V0QXR0cmli
dXRlKHR5cGVBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0
QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gbV9lbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikgIT0gbV9lbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIpICE9IG1fZWxl
bWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVs
ZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIGlmIChl
bGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKKworI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgaWYgKGVsZW1lbnQtPmhh
c1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgIGlmICghbV9lbGVtZW50LT5oYXNUYWdO
YW1lKHByb2dyZXNzVGFnKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBI
VE1MUHJvZ3Jlc3NFbGVtZW50KiB0aGlzUHJvZ3Jlc3NFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TFByb2dyZXNzRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50
KiBvdGhlclByb2dyZXNzRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQq
PihtX2VsZW1lbnQpOworICAgICAgICBpZiAodGhpc1Byb2dyZXNzRWxlbWVudC0+aXNEZXRlcm1p
bmF0ZSgpICE9IG90aGVyUHJvZ3Jlc3NFbGVtZW50LT5pc0RldGVybWluYXRlKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShvcHRpb25UYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGlz
Q29udHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisKKyAgICBpZiAoaXND
b250cm9sICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250
cm9sKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3R5bGUtPnRy
YW5zaXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIFR1cm4gb2ZmIHN0
eWxlIHNoYXJpbmcgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGdhaW4gbGF5ZXJzIGZvciByZWFzb25z
IG91dHNpZGUgb2YgdGhlIHN0eWxlIHN5c3RlbS4KKyAgICAvLyBTZWUgY29tbWVudHMgaW4gUmVu
ZGVyT2JqZWN0OjpzZXRTdHlsZSgpLgorICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFt
ZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShlbWJlZFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IGVsZW1l
bnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKQorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJ
REVPKQorICAgICAgICAvLyBXaXRoIHByb3h5aW5nLCB0aGUgbWVkaWEgZWxlbWVudHMgYXJlIGJh
Y2tlZCBieSBhIFJlbmRlckVtYmVkZGVkT2JqZWN0LgorICAgICAgICB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKHZpZGVvVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGF1ZGlvVGFnKQorI2VuZGlm
CisgICAgICAgICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAoZWxl
bWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkgfHwgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8o
bV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQtPmhh
c0NsYXNzKCkgJiYgbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBlbGVtZW50
LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkgJiYgIWF0dHJpYnV0ZVN0eWxlc0VxdWFsKGVs
ZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCksIG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5bGUo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhZGRpdGlvbmFsQXR0cmlidXRl
U3R5bGVBICYmICFhdHRyaWJ1dGVTdHlsZXNFcXVhbChhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVB
LCBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVCKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICYmIG1fZWxlbWVudExpbmtTdGF0ZSAhPSBzdHlsZS0+
aW5zaWRlTGluaygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9y
U3R5bGVTaGFyaW5nKE5vZGUqIG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKK3sKKyAgICBm
b3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CisgICAgICAgIGlm
ICghbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50
Kj4obm9kZSkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChjb3VudCsrID09IGNT
dHlsZVNlYXJjaFRocmVzaG9sZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgcGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKQoreworICAgIHJldHVybiBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5
UG9zaXRpb25hbFJ1bGVzKCkKKyAgICAgICAgfHwgcGFyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0
ZWRCeUZpcnN0Q2hpbGRSdWxlcygpCisgICAgICAgIHx8IHBhcmVudFN0eWxlLT5jaGlsZHJlbkFm
ZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpIAorICAgICAgICB8fCBwYXJlbnRTdHlsZS0+Y2hpbGRy
ZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOworfQorCitSZW5kZXJTdHlsZSogU3R5
bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQoreworICAgIGlmICghbV9zdHlsZWRFbGVt
ZW50IHx8ICFtX3BhcmVudFN0eWxlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBJZiB0aGUg
ZWxlbWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KKyAgICBpZiAo
bV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKQorICAgICAgICByZXR1cm4gMDsKKyNpZiBF
TkFCTEUoU1ZHKQorICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0
YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHls
ZVByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICAvLyBJZHMgc3Rv
cCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCisgICAg
aWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29u
dGFpbnMobV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisg
ICAgICAgIHJldHVybiAwOworICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhtX3Bh
cmVudFN0eWxlKSkKKyAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkK
KyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyNlbmRpZgorCisgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3Mg
YW5kIHRoZWlyIGNvdXNpbnMuCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVk
IHZpc2l0ZWROb2RlQ291bnQgPSAwOworICAgIFN0eWxlZEVsZW1lbnQqIHNoYXJlRWxlbWVudCA9
IDA7CisgICAgTm9kZSogY291c2luTGlzdCA9IG1fc3R5bGVkRWxlbWVudC0+cHJldmlvdXNTaWJs
aW5nKCk7CisgICAgd2hpbGUgKGNvdXNpbkxpc3QpIHsKKyAgICAgICAgc2hhcmVFbGVtZW50ID0g
ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoY291c2luTGlzdCwgY291bnQpOworICAgICAgICBp
ZiAoc2hhcmVFbGVtZW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNvdXNpbkxpc3Qg
PSBsb2NhdGVDb3VzaW5MaXN0KGNvdXNpbkxpc3QtPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5v
ZGVDb3VudCk7CisgICAgfQorCisgICAgLy8gSWYgd2UgaGF2ZSBleGhhdXN0ZWQgYWxsIG91ciBi
dWRnZXQgb3Igb3VyIGNvdXNpbnMuCisgICAgaWYgKCFzaGFyZUVsZW1lbnQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgc2libGluZyBydWxlcyBhcHBseS4gVGhp
cyBpcyBjaGVja2VkIGF0IHRoZSBlbmQgYXMgaXQgc2hvdWxkIHJhcmVseSBmYWlsLgorICAgIGlm
IChtYXRjaGVzUnVsZVNldChtX3NpYmxpbmdSdWxlU2V0LmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgorICAgIGlm
IChtYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCisgICAg
ICAgIHJldHVybiAwOworICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1
ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1
bGUgbWF0Y2ggYWJvdmUuCisgICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFy
ZW50U3R5bGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc2hhcmVFbGVtZW50LT5y
ZW5kZXJTdHlsZSgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0KQoreworICAgIE1hdGNoaW5nVUFSdWxlc1Njb3BlIHNjb3BlOworCisg
ICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KKyAg
ICBpZiAoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpCisgICAgICAgIHJlc3VsdC5pc0NhY2hlYWJs
ZSA9IGZhbHNlOworICAgIFJ1bGVTZXQqIHVzZXJBZ2VudFN0eWxlU2hlZXQgPSBtX21lZGl1bS0+
bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQiKQorICAgICAgICA/IGRlZmF1bHRQcmludFN0
eWxlIDogZGVmYXVsdFN0eWxlOworICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIHVzZXJBZ2VudFN0
eWxlU2hlZXQpOworCisgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20g
dGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgorICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBh
cnNpbmcoKSkKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgZGVmYXVsdFF1aXJrc1N0eWxl
KTsKKworICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBzb3VyY2Ugc3R5bGVzIChpbiB2aWV3
IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSksIHRoZW4gd2UgbWF0Y2ggcnVsZXMg
ZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCisgICAgaWYgKG1fY2hlY2tlci5kb2N1
bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSkgeworICAgICAgICBpZiAoIWRlZmF1bHRWaWV3U291cmNl
U3R5bGUpCisgICAgICAgICAgICBsb2FkVmlld1NvdXJjZVN0eWxlKCk7CisgICAgICAgIG1hdGNo
VUFSdWxlcyhyZXN1bHQsIGRlZmF1bHRWaWV3U291cmNlU3R5bGUpOworICAgIH0KK30KKworUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQsIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQoreworICAgIEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworCisgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBkb2N1bWVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIGRvY3VtZW50U3R5
bGUtPnNldERpc3BsYXkoQkxPQ0spOworICAgIGRvY3VtZW50U3R5bGUtPnNldFJUTE9yZGVyaW5n
KGRvY3VtZW50LT52aXN1YWxseU9yZGVyZWQoKSA/IFZpc3VhbE9yZGVyIDogTG9naWNhbE9yZGVy
KTsKKyAgICBkb2N1bWVudFN0eWxlLT5zZXRab29tKGZyYW1lICYmICFkb2N1bWVudC0+cHJpbnRp
bmcoKSA/IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpIDogMSk7CisgICAgZG9jdW1lbnRTdHlsZS0+
c2V0UGFnZVNjYWxlVHJhbnNmb3JtKGZyYW1lID8gZnJhbWUtPmZyYW1lU2NhbGVGYWN0b3IoKSA6
IDEpOworICAgIGRvY3VtZW50U3R5bGUtPnNldFVzZXJNb2RpZnkoZG9jdW1lbnQtPmluRGVzaWdu
TW9kZSgpID8gUkVBRF9XUklURSA6IFJFQURfT05MWSk7CisgICAgZG9jdW1lbnRTdHlsZS0+c2V0
TG9jYWxlKGRvY3VtZW50LT5jb250ZW50TGFuZ3VhZ2UoKSk7CisKKyAgICBFbGVtZW50KiBkb2NF
bGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIFJlbmRlck9iamVjdCog
ZG9jRWxlbWVudFJlbmRlcmVyID0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlcmVyKCkg
OiAwOworICAgIGlmIChkb2NFbGVtZW50UmVuZGVyZXIpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBk
aXJlY3Rpb24gYW5kIHdyaXRpbmctbW9kZSBvZiB0aGUgYm9keSB0byBzZXQgdGhlCisgICAgICAg
IC8vIHZpZXdwb3J0J3MgZGlyZWN0aW9uIGFuZCB3cml0aW5nLW1vZGUgdW5sZXNzIHRoZSBwcm9w
ZXJ0eSBpcyBzZXQgb24gdGhlIGRvY3VtZW50IGVsZW1lbnQuCisgICAgICAgIC8vIElmIHRoZXJl
IGlzIG5vIGJvZHksIHRoZW4gdXNlIHRoZSBkb2N1bWVudCBlbGVtZW50LgorICAgICAgICBSZW5k
ZXJPYmplY3QqIGJvZHlSZW5kZXJlciA9IGRvY3VtZW50LT5ib2R5KCkgPyBkb2N1bWVudC0+Ym9k
eSgpLT5yZW5kZXJlcigpIDogMDsKKyAgICAgICAgaWYgKGJvZHlSZW5kZXJlciAmJiAhZG9jdW1l
bnQtPndyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3Vt
ZW50U3R5bGUtPnNldFdyaXRpbmdNb2RlKGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01v
ZGUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFdyaXRp
bmdNb2RlKGRvY0VsZW1lbnRSZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CisgICAg
ICAgIGlmIChib2R5UmVuZGVyZXIgJiYgIWRvY3VtZW50LT5kaXJlY3Rpb25TZXRPbkRvY3VtZW50
RWxlbWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlyZWN0aW9uKGJvZHlS
ZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBkb2N1bWVudFN0eWxlLT5zZXREaXJlY3Rpb24oZG9jRWxlbWVudFJlbmRlcmVyLT5zdHlsZSgp
LT5kaXJlY3Rpb24oKSk7CisgICAgfQorCisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIGlmIChQ
YWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICAgICAgY29uc3QgUGFnZTo6UGFn
aW5hdGlvbiYgcGFnaW5hdGlvbiA9IHBhZ2UtPnBhZ2luYXRpb24oKTsKKyAgICAgICAgICAgIGlm
IChwYWdpbmF0aW9uLm1vZGUgIT0gUGFnZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQpIHsKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRDb2x1bW5BeGlzKHBhZ2luYXRpb24ubW9k
ZSA9PSBQYWdlOjpQYWdpbmF0aW9uOjpIb3Jpem9udGFsbHlQYWdpbmF0ZWQgPyBIb3Jpem9udGFs
Q29sdW1uQXhpcyA6IFZlcnRpY2FsQ29sdW1uQXhpcyk7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnRTdHlsZS0+c2V0Q29sdW1uR2FwKHBhZ2luYXRpb24uZ2FwKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Cisg
ICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50LT5wcmludGluZygp
KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZv
bnRTZWxlY3Rpb24oZG9jdW1lbnRTdHlsZS0+bG9jYWxlKCkpKTsKKyAgICBpZiAoU2V0dGluZ3Mq
IHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKKyAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOworICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5kYXJkRm9udCA9IHNldHRpbmdzLT5zdGFuZGFy
ZEZvbnRGYW1pbHkoZm9udERlc2NyaXB0aW9uLnNjcmlwdCgpKTsKKyAgICAgICAgaWYgKCFzdGFu
ZGFyZEZvbnQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2Vu
ZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5KTsKKyAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShzdGFuZGFyZEZvbnQpOwor
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDAp
OworICAgICAgICB9CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NW
YWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOworICAgICAgICBpbnQgc2l6ZSA9IFN0
eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCwgQ1NTVmFsdWVNZWRpdW0s
IGZhbHNlKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7
CisgICAgICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzID0gZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQo
KTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZVJlc29sdmVy
OjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgZG9jdW1lbnRTdHls
ZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pv
b21SdWxlcykpOworICAgIH0KKworICAgIGRvY3VtZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOworICAgIGRvY3VtZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoZm9u
dFNlbGVjdG9yKTsKKworICAgIHJldHVybiBkb2N1bWVudFN0eWxlLnJlbGVhc2UoKTsKK30KKwor
c3RhdGljIGlubGluZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShFbGVtZW50KiBlbGVtZW50KQor
eworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENvbnRhaW5l
ck5vZGUqIHBhcmVudE5vZGUgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7CisgICAgcmV0dXJuIHBh
cmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+aXNTaGFkb3dSb290KCk7Cit9CisKK1Bhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVt
ZW50LCBSZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVudCwKKyAgICBTdHlsZVNoYXJpbmdCZWhhdmlv
ciBzaGFyaW5nQmVoYXZpb3IsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3Is
IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZykKK3sKKyAgICAvLyBPbmNlIGFuIGVsZW1l
bnQgaGFzIGEgcmVuZGVyZXIsIHdlIGRvbid0IHRyeSB0byBkZXN0cm95IGl0LCBzaW5jZSBvdGhl
cndpc2UgdGhlIHJlbmRlcmVyCisgICAgLy8gd2lsbCB2YW5pc2ggaWYgYSBzdHlsZSByZWNhbGMg
aGFwcGVucyBkdXJpbmcgbG9hZGluZy4KKyAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93
U3R5bGVTaGFyaW5nICYmICFlbGVtZW50LT5kb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2Fk
ZWQoKSAmJiAhZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAoIXNfc3R5bGVOb3RZ
ZXRBdmFpbGFibGUpIHsKKyAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUgPSBSZW5k
ZXJTdHlsZTo6Y3JlYXRlKCkubGVha1JlZigpOworICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2
YWlsYWJsZS0+c2V0RGlzcGxheShOT05FKTsKKyAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFp
bGFibGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOworICAgICAgICB9CisgICAgICAg
IGVsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKTsK
KyAgICAgICAgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CisgICAgfQorCisgICAgaW5p
dEVsZW1lbnQoZWxlbWVudCk7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlbGVtZW50LCBkZWZh
dWx0UGFyZW50KTsKKyAgICBtX3JlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHlsaW5nOwor
ICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcpIHsKKyAgICAgICAg
UmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICAgICAg
aWYgKHNoYXJlZFN0eWxlKQorICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0eWxlOworICAgIH0K
KworICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisKKyAgICBpZiAobV9wYXJl
bnRTdHlsZSkKKyAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9wYXJlbnRTdHlsZSk7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBzdHlsZSgpOworICAgICAgICAvLyBN
YWtlIHN1cmUgb3VyIGZvbnRzIGFyZSBpbml0aWFsaXplZCBpZiB3ZSBkb24ndCBpbmhlcml0IHRo
ZW0gZnJvbSBvdXIgcGFyZW50IHN0eWxlLgorICAgICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRl
KDApOworICAgIH0KKworICAgIC8vIEV2ZW4gaWYgc3Vycm91bmRpbmcgY29udGVudCBpcyB1c2Vy
LWVkaXRhYmxlLCBzaGFkb3cgRE9NIHNob3VsZCBhY3QgYXMgYSBzaW5nbGUgdW5pdCwgYW5kIG5v
dCBuZWNlc3NhcmlseSBiZSBlZGl0YWJsZQorICAgIGlmIChpc0F0U2hhZG93Qm91bmRhcnkoZWxl
bWVudCkpCisgICAgICAgIG1fc3R5bGUtPnNldFVzZXJNb2RpZnkoUmVuZGVyU3R5bGU6OmluaXRp
YWxVc2VyTW9kaWZ5KCkpOworCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKSB7CisgICAgICAg
IG1fc3R5bGUtPnNldElzTGluayh0cnVlKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0SW5zaWRlTGlu
ayhtX2VsZW1lbnRMaW5rU3RhdGUpOworICAgIH0KKworICAgIGVuc3VyZURlZmF1bHRTdHlsZVNo
ZWV0c0ZvckVsZW1lbnQoZWxlbWVudCk7CisKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsK
KyAgICBpZiAobWF0Y2hpbmdCZWhhdmlvciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykKKyAg
ICAgICAgbWF0Y2hVQVJ1bGVzKG1hdGNoUmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGNo
QWxsUnVsZXMobWF0Y2hSZXN1bHQpOworCisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRj
aFJlc3VsdCk7CisKKyAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBh
bmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KKyAgICBhZGp1c3RSZW5k
ZXJTdHlsZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlLCBlbGVtZW50KTsKKworICAgIGluaXRFbGVt
ZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCisKKyAgICAvLyBOb3cg
cmV0dXJuIHRoZSBzdHlsZS4KKyAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7Cit9CisKK1Bh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29u
c3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJh
bWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCit7CisgICAgTWF0Y2hSZXN1bHQgcmVz
dWx0OworICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQorICAgICAgICBhZGRNYXRjaGVk
UHJvcGVydGllcyhyZXN1bHQsIGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOworCisgICAgQVNTRVJU
KCFtX3N0eWxlKTsKKworICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKKyAgICBtX3N0eWxlID0gUmVu
ZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7CisKKyAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9
IDA7CisKKyAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoICFpbXBvcnRhbnQuIFNp
bmNlIHRoZXJlIGlzIG9ubHkgZXZlciBvbmUKKyAgICAvLyBkZWNsLCB0aGVyZSdzIG5vdGhpbmcg
dG8gb3ZlcnJpZGUuIFNvIGp1c3QgYWRkIHRoZSBmaXJzdCBwcm9wZXJ0aWVzLgorICAgIGJvb2wg
aW5oZXJpdGVkT25seSA9IGZhbHNlOworICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQor
ICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KHJlc3VsdCwgZmFsc2UsIDAsIHJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKworICAg
IC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4K
KyAgICB1cGRhdGVGb250KCk7CisKKyAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBh
cmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUKKyAgICBpZiAobV9saW5lSGVpZ2h0
VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xp
bmVIZWlnaHRWYWx1ZSk7CisKKyAgICAvLyBOb3cgZG8gcmVzdCBvZiB0aGUgcHJvcGVydGllcy4K
KyAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKKyAgICAgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxmYWxzZT4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
LnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworCisgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRp
cnRpZWQgYnkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsCisgICAgLy8gZ28g
YWhlYWQgYW5kIHVwZGF0ZSBpdCBhIHNlY29uZCB0aW1lLgorICAgIHVwZGF0ZUZvbnQoKTsKKwor
ICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KKyAg
ICBsb2FkUGVuZGluZ0ltYWdlcygpOworICAgIAorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAg
ICAvLyBTdGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4K
KyAgICBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKKyNlbmRpZgorCisgICAgLy8gQWRkIGFsbCB0aGUg
YW5pbWF0aW5nIHByb3BlcnRpZXMgdG8gdGhlIGtleWZyYW1lLgorICAgIGlmIChTdHlsZVByb3Bl
cnR5U2V0KiBzdHlsZURlY2xhcmF0aW9uID0ga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkgeworICAg
ICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlD
b3VudCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsg
KytpKSB7CisgICAgICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5ID0gc3R5bGVEZWNsYXJh
dGlvbi0+cHJvcGVydHlBdChpKS5pZCgpOworICAgICAgICAgICAgLy8gVGltaW5nLWZ1bmN0aW9u
IHdpdGhpbiBrZXlmcmFtZXMgaXMgc3BlY2lhbCwgYmVjYXVzZSBpdCBpcyBub3QgYW5pbWF0ZWQ7
IGl0IGp1c3QKKyAgICAgICAgICAgIC8vIGRlc2NyaWJlcyB0aGUgdGltaW5nIGZ1bmN0aW9uIGJl
dHdlZW4gdGhpcyBrZXlmcmFtZSBhbmQgdGhlIG5leHQuCisgICAgICAgICAgICBpZiAocHJvcGVy
dHkgIT0gQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbikKKyAgICAgICAg
ICAgICAgICBrZXlmcmFtZVZhbHVlLmFkZFByb3BlcnR5KHByb3BlcnR5KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKK30KKwordm9pZCBTdHlsZVJl
c29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5k
ZXJTdHlsZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCit7CisgICAgbGlzdC5j
bGVhcigpOworCisgICAgLy8gR2V0IHRoZSBrZXlmcmFtZXNSdWxlIGZvciB0aGlzIG5hbWUKKyAg
ICBpZiAoIWUgfHwgbGlzdC5hbmltYXRpb25OYW1lKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2tleWZyYW1lc1J1bGVNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAg
S2V5ZnJhbWVzUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lc1J1bGVNYXAuZmluZChs
aXN0LmFuaW1hdGlvbk5hbWUoKS5pbXBsKCkpOworICAgIGlmIChpdCA9PSBtX2tleWZyYW1lc1J1
bGVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFN0eWxlUnVsZUtleWZy
YW1lcyoga2V5ZnJhbWVzUnVsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisKKyAgICAvLyBDb25zdHJ1
Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQorICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+
a2V5ZnJhbWVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAvLyBBcHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxl
LiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVs
ZW1lbnQKKyAgICAgICAgaW5pdEVsZW1lbnQoZSk7CisgICAgICAgIGluaXRGb3JTdHlsZVJlc29s
dmUoZSk7CisKKyAgICAgICAgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUgPSBrZXlmcmFt
ZXNbaV0uZ2V0KCk7CisKKyAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDAp
OworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVu
dFN0eWxlLCBrZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworCisgICAgICAgIC8vIEFkZCB0aGlz
IGtleWZyYW1lIHN0eWxlIHRvIGFsbCB0aGUgaW5kaWNhdGVkIGtleSB0aW1lcworICAgICAgICBW
ZWN0b3I8ZmxvYXQ+IGtleXM7CisgICAgICAgIGtleWZyYW1lLT5nZXRLZXlzKGtleXMpOworICAg
ICAgICBmb3IgKHNpemVfdCBrZXlJbmRleCA9IDA7IGtleUluZGV4IDwga2V5cy5zaXplKCk7ICsr
a2V5SW5kZXgpIHsKKyAgICAgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0S2V5KGtleXNba2V5SW5k
ZXhdKTsKKyAgICAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gSWYgdGhlIDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBp
dCAoYnV0IG9ubHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQorICAg
IGludCBpbml0aWFsTGlzdFNpemUgPSBsaXN0LnNpemUoKTsKKyAgICBpZiAoaW5pdGlhbExpc3RT
aXplID4gMCAmJiBsaXN0WzBdLmtleSgpKSB7CisgICAgICAgIHN0YXRpYyBTdHlsZUtleWZyYW1l
KiB6ZXJvUGVyY2VudEtleWZyYW1lOworICAgICAgICBpZiAoIXplcm9QZXJjZW50S2V5ZnJhbWUp
IHsKKyAgICAgICAgICAgIHplcm9QZXJjZW50S2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVh
dGUoKS5sZWFrUmVmKCk7CisgICAgICAgICAgICB6ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRLZXlU
ZXh0KCIwJSIpOworICAgICAgICB9CisgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1
ZSgwLCAwKTsKKyAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1l
KGVsZW1lbnRTdHlsZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAg
ICAgICBsaXN0Lmluc2VydChrZXlmcmFtZVZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUg
MTAwJSBrZXlmcmFtZSBpcyBtaXNzaW5nLCBjcmVhdGUgaXQgKGJ1dCBvbmx5IGlmIHRoZXJlIGlz
IGF0IGxlYXN0IG9uZSBvdGhlciBrZXlmcmFtZSkKKyAgICBpZiAoaW5pdGlhbExpc3RTaXplID4g
MCAmJiAobGlzdFtsaXN0LnNpemUoKSAtIDFdLmtleSgpICE9IDEpKSB7CisgICAgICAgIHN0YXRp
YyBTdHlsZUtleWZyYW1lKiBodW5kcmVkUGVyY2VudEtleWZyYW1lOworICAgICAgICBpZiAoIWh1
bmRyZWRQZXJjZW50S2V5ZnJhbWUpIHsKKyAgICAgICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJh
bWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoKS5sZWFrUmVmKCk7CisgICAgICAgICAgICBodW5k
cmVkUGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIxMDAlIik7CisgICAgICAgIH0KKyAgICAg
ICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDEsIDApOworICAgICAgICBrZXlmcmFtZVZh
bHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2Vu
dEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1l
VmFsdWUpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKQoreworICAgIGlmICghZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpbml0RWxlbWVudChlKTsKKworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgcGFy
ZW50U3R5bGUsIHBzZXVkbyk7CisgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsK
KworICAgIGlmIChtX3BhcmVudFN0eWxlKQorICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbSht
X3BhcmVudFN0eWxlKTsKKworICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVu
dHMgaW4gYW55IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0
ZSB0aW1lIHdhbGtpbmcKKyAgICAvLyB0aG9zZSBydWxlcy4KKworICAgIC8vIENoZWNrIFVBLCB1
c2VyIGFuZCBhdXRob3IgcnVsZXMuCisgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CisgICAg
bWF0Y2hVQVJ1bGVzKG1hdGNoUmVzdWx0KTsKKworICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcykgeworICAgICAgICBtYXRjaFVzZXJSdWxlcyhtYXRjaFJlc3VsdCwgZmFsc2UpOwor
ICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKG1hdGNoUmVzdWx0LCBmYWxzZSk7CisgICAgfQorCisg
ICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBtX3N0eWxlLT5zZXRTdHlsZVR5cGUocHNldWRvKTsKKworICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQpOworCisgICAgLy8gQ2xlYW4gdXAgb3Vy
IHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVy
IGZpeHVwcykuCisgICAgYWRqdXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwgcGFyZW50U3R5bGUsIDAp
OworCisgICAgLy8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxl
LgorICAgIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisg
ICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgc2hhZGVycyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUu
CisgICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisjZW5kaWYKKworICAgIC8vIE5vdyByZXR1cm4g
dGhlIHN0eWxlLgorICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgp
Cit7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShtX2NoZWNrZXIuZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRv
Y3VtZW50IHN0eWxlLgorCisgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAg
ICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3Jvb3RFbGVtZW50U3R5bGUpOworCisgICAgY29uc3Qg
Ym9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBhZ2VJbmRleCk7CisgICAgY29uc3QgYm9vbCBpc0Zp
cnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBh
Z2VOYW1lKHBhZ2VJbmRleCk7CisgICAgCisgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OworICAgIG1h
dGNoUGFnZVJ1bGVzKHJlc3VsdCwgZGVmYXVsdFByaW50U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwg
cGFnZSk7CisgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3VzZXJTdHlsZS5nZXQoKSwgaXNM
ZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0
aG9yIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCisgICAg
bWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX2F1dGhvclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmly
c3QsIHBhZ2UpOworICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBib29sIGluaGVyaXRl
ZE9ubHkgPSBmYWxzZTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KHJlc3VsdCwg
ZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRP
bmx5KTsKKworICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBk
YXRlIGl0IG5vdy4KKyAgICB1cGRhdGVGb250KCk7CisKKyAgICAvLyBMaW5lLWhlaWdodCBpcyBz
ZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCisgICAgaWYg
KG1fbGluZUhlaWdodFZhbHVlKQorICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGlu
ZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworCisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxmYWxzZT4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSAtIDEsIGluaGVyaXRlZE9ubHkpOworCisgICAgLy8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVm
ZXJlbmNlZCBieSB0aGlzIHN0eWxlLgorICAgIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisKKyNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCisgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgc2hhZGVycyByZWZl
cmVuY2VkIGJ5IHRoaXMgc3R5bGUuCisgICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisjZW5kaWYK
KworICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgorICAgIHJldHVybiBtX3N0eWxlLnJlbGVh
c2UoKTsKK30KKworc3RhdGljIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSog
c3R5bGUpCit7CisgICAgLy8gSW50cmluc2ljIG1hcmdpbiB2YWx1ZS4KKyAgICBjb25zdCBpbnQg
aW50cmluc2ljTWFyZ2luID0gMiAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisKKyAgICAvLyBG
SVhNRTogVXNpbmcgd2lkdGgvaGVpZ2h0IGFsb25lIGFuZCBub3QgYWxzbyBkZWFsaW5nIHdpdGgg
bWluLXdpZHRoL21heC13aWR0aCBpcyBmbGF3ZWQuCisgICAgLy8gRklYTUU6IFVzaW5nICJxdWly
ayIgdG8gZGVjaWRlIHRoZSBtYXJnaW4gd2Fzbid0IHNldCBpcyBraW5kIG9mIGxhbWUuCisgICAg
aWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsKKyAgICAgICAgaWYgKHN0
eWxlLT5tYXJnaW5MZWZ0KCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5M
ZWZ0KExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7CisgICAgICAgIGlmIChzdHlsZS0+
bWFyZ2luUmlnaHQoKS5xdWlyaygpKQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblJpZ2h0
KExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7CisgICAgfQorCisgICAgaWYgKHN0eWxl
LT5oZWlnaHQoKS5pc0F1dG8oKSkgeworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpblRvcCgpLnF1
aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luVG9wKExlbmd0aChpbnRyaW5zaWNN
YXJnaW4sIEZpeGVkKSk7CisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2luQm90dG9tKCkucXVpcmso
KSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5Cb3R0b20oTGVuZ3RoKGludHJpbnNpY01h
cmdpbiwgRml4ZWQpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBFRGlzcGxheSBlcXVpdmFsZW50Qmxv
Y2tEaXNwbGF5KEVEaXNwbGF5IGRpc3BsYXksIGJvb2wgaXNGbG9hdGluZywgYm9vbCBzdHJpY3RQ
YXJzaW5nKQoreworICAgIHN3aXRjaCAoZGlzcGxheSkgeworICAgIGNhc2UgQkxPQ0s6CisgICAg
Y2FzZSBUQUJMRToKKyAgICBjYXNlIEJPWDoKKyAgICBjYXNlIEZMRVhCT1g6CisjaWYgRU5BQkxF
KENTU19HUklEX0xBWU9VVCkKKyAgICBjYXNlIEdSSUQ6CisjZW5kaWYKKyAgICAgICAgcmV0dXJu
IGRpc3BsYXk7CisKKyAgICBjYXNlIExJU1RfSVRFTToKKyAgICAgICAgLy8gSXQgaXMgYSBXaW5J
RSBidWcgdGhhdCBmbG9hdGVkIGxpc3QgaXRlbXMgbG9zZSB0aGVpciBidWxsZXRzLCBzbyB3ZSds
bCBlbXVsYXRlIHRoZSBxdWlyaywgYnV0IG9ubHkgaW4gcXVpcmtzIG1vZGUuCisgICAgICAgIGlm
ICghc3RyaWN0UGFyc2luZyAmJiBpc0Zsb2F0aW5nKQorICAgICAgICAgICAgcmV0dXJuIEJMT0NL
OworICAgICAgICByZXR1cm4gZGlzcGxheTsKKyAgICBjYXNlIElOTElORV9UQUJMRToKKyAgICAg
ICAgcmV0dXJuIFRBQkxFOworICAgIGNhc2UgSU5MSU5FX0JPWDoKKyAgICAgICAgcmV0dXJuIEJP
WDsKKyAgICBjYXNlIElOTElORV9GTEVYQk9YOgorICAgICAgICByZXR1cm4gRkxFWEJPWDsKKyNp
ZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQorICAgIGNhc2UgSU5MSU5FX0dSSUQ6CisgICAgICAg
IHJldHVybiBHUklEOworI2VuZGlmCisKKyAgICBjYXNlIElOTElORToKKyAgICBjYXNlIFJVTl9J
TjoKKyAgICBjYXNlIENPTVBBQ1Q6CisgICAgY2FzZSBJTkxJTkVfQkxPQ0s6CisgICAgY2FzZSBU
QUJMRV9ST1dfR1JPVVA6CisgICAgY2FzZSBUQUJMRV9IRUFERVJfR1JPVVA6CisgICAgY2FzZSBU
QUJMRV9GT09URVJfR1JPVVA6CisgICAgY2FzZSBUQUJMRV9ST1c6CisgICAgY2FzZSBUQUJMRV9D
T0xVTU5fR1JPVVA6CisgICAgY2FzZSBUQUJMRV9DT0xVTU46CisgICAgY2FzZSBUQUJMRV9DRUxM
OgorICAgIGNhc2UgVEFCTEVfQ0FQVElPTjoKKyAgICAgICAgcmV0dXJuIEJMT0NLOworICAgIGNh
c2UgTk9ORToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBO
T05FOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQkxPQ0s7
Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUq
IHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCit7CisgICAgLy8g
Q2FjaGUgb3VyIG9yaWdpbmFsIGRpc3BsYXkuCisgICAgc3R5bGUtPnNldE9yaWdpbmFsRGlzcGxh
eShzdHlsZS0+ZGlzcGxheSgpKTsKKworICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpICE9IE5PTkUp
IHsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIDx0ZD4gdGhhdCBzcGVjaWZpZXMgYSBmbG9hdCBw
cm9wZXJ0eSwgaW4gcXVpcmtzIG1vZGUgd2UganVzdCBkcm9wIHRoZSBmbG9hdAorICAgICAgICAv
LyBwcm9wZXJ0eS4KKyAgICAgICAgLy8gU2l0ZXMgYWxzbyBjb21tb25seSB1c2UgZGlzcGxheTpp
bmxpbmUvYmxvY2sgb24gPHRkPnMgYW5kIDx0YWJsZT5zLiBJbiBxdWlya3MgbW9kZSB3ZSBmb3Jj
ZQorICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBkaXNwbGF5IHR5cGVzLgor
ICAgICAgICBpZiAoIW1fY2hlY2tlci5zdHJpY3RQYXJzaW5nKCkgJiYgZSkgeworICAgICAgICAg
ICAgaWYgKGUtPmhhc1RhZ05hbWUodGRUYWcpKSB7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNl
dERpc3BsYXkoVEFCTEVfQ0VMTCk7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5n
KE5vRmxvYXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKHRhYmxlVGFn
KSkKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShzdHlsZS0+aXNEaXNwbGF5SW5s
aW5lVHlwZSgpID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUodGRUYWcpIHx8IGUtPmhhc1RhZ05hbWUodGhUYWcpKSkg
eworICAgICAgICAgICAgaWYgKHN0eWxlLT53aGl0ZVNwYWNlKCkgPT0gS0hUTUxfTk9XUkFQKSB7
CisgICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBhcmUgcmVhbGx5IG5vd3JhcHBp
bmcgb3IgaWYgd2Ugc2hvdWxkIGp1c3QKKyAgICAgICAgICAgICAgICAvLyB1c2Ugbm9ybWFsIGlu
c3RlYWQuIElmIHRoZSB3aWR0aCBvZiB0aGUgY2VsbCBpcyBmaXhlZCwgdGhlbgorICAgICAgICAg
ICAgICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IHVzZSBOT1dSQVAuCisgICAgICAgICAgICAgICAg
aWYgKHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUt
PnNldFdoaXRlU3BhY2UoTk9STUFMKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKE5PV1JBUCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBUYWJsZXMgbmV2ZXIgc3VwcG9ydCB0aGUgLXdlYmtpdC0q
IHZhbHVlcyBmb3IgdGV4dC1hbGlnbiBhbmQgd2lsbCByZXNldCBiYWNrIHRvIHRoZSBkZWZhdWx0
LgorICAgICAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSAmJiAoc3R5bGUtPnRl
eHRBbGlnbigpID09IFdFQktJVF9MRUZUIHx8IHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRf
Q0VOVEVSIHx8IHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklHSFQpKQorICAgICAgICAg
ICAgc3R5bGUtPnNldFRleHRBbGlnbihUQUFVVE8pOworCisgICAgICAgIC8vIEZyYW1lcyBhbmQg
ZnJhbWVzZXRzIG5ldmVyIGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFic29s
dXRlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0bworICAgICAgICAvLyBmaXggYSBjcmFzaCB3aGVyZSBh
IHNpdGUgdHJpZXMgdG8gcG9zaXRpb24gdGhlc2Ugb2JqZWN0cy4gVGhleSBhbHNvIG5ldmVyIGhv
bm9yIGRpc3BsYXkuCisgICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8
fCBlLT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSkpIHsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQ
b3NpdGlvbihTdGF0aWNQb3NpdGlvbik7CisgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShC
TE9DSyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSdWJ5IHRleHQgZG9lcyBub3Qgc3VwcG9y
dCBmbG9hdCBvciBwb3NpdGlvbi4gVGhpcyBtaWdodCBjaGFuZ2Ugd2l0aCBldm9sdXRpb24gb2Yg
dGhlIHNwZWNpZmljYXRpb24uCisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUocnRUYWcp
KSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU3RhdGljUG9zaXRpb24pOworICAg
ICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gVGFibGUgaGVhZGVycyB3aXRoIGEgdGV4dC1hbGlnbiBvZiBhdXRvIHdpbGwgY2hhbmdl
IHRoZSB0ZXh0LWFsaWduIHRvIGNlbnRlci4KKyAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFt
ZSh0aFRhZykgJiYgc3R5bGUtPnRleHRBbGlnbigpID09IFRBQVVUTykKKyAgICAgICAgICAgIHN0
eWxlLT5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsKKworICAgICAgICBpZiAoZSAmJiBlLT5oYXNUYWdO
YW1lKGxlZ2VuZFRhZykpCisgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CisK
KyAgICAgICAgLy8gQWJzb2x1dGUvZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cywgZmxvYXRpbmcg
ZWxlbWVudHMgYW5kIHRoZSBkb2N1bWVudCBlbGVtZW50IG5lZWQgYmxvY2stbGlrZSBvdXRzaWRl
IGRpc3BsYXkuCisgICAgICAgIGlmIChzdHlsZS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0
aW9uIHx8IHN0eWxlLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gfHwgc3R5bGUtPmlzRmxv
YXRpbmcoKSB8fCAoZSAmJiBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSBlKSkK
KyAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5
bGUtPmRpc3BsYXkoKSwgc3R5bGUtPmlzRmxvYXRpbmcoKSwgbV9jaGVja2VyLnN0cmljdFBhcnNp
bmcoKSkpOworCisgICAgICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0IHRoaXMgbXV0YXRpb24g
Zm9yIHBzZXVkbyBzdHlsZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2luY2Ug
aXQncyBub3QgY29tcGxldGVseQorICAgICAgICAvLyBjbGVhciBob3cgdGhhdCBzaG91bGQgd29y
ay4KKyAgICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FICYmIHN0eWxlLT5zdHls
ZVR5cGUoKSA9PSBOT1BTRVVETyAmJiBwYXJlbnRTdHlsZSAmJiBzdHlsZS0+d3JpdGluZ01vZGUo
KSAhPSBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRE
aXNwbGF5KElOTElORV9CTE9DSyk7CisKKyAgICAgICAgLy8gQWZ0ZXIgcGVyZm9ybWluZyB0aGUg
ZGlzcGxheSBtdXRhdGlvbiwgY2hlY2sgdGFibGUgcm93cy4gV2UgZG8gbm90IGhvbm9yIHBvc2l0
aW9uOnJlbGF0aXZlIG9uCisgICAgICAgIC8vIHRhYmxlIHJvd3Mgb3IgY2VsbHMuIFRoaXMgaGFz
IGJlZW4gZXN0YWJsaXNoZWQgaW4gQ1NTMi4xIChhbmQgY2F1c2VkIGEgY3Jhc2ggaW4gY29udGFp
bmluZ0Jsb2NrKCkKKyAgICAgICAgLy8gb24gc29tZSBzaXRlcykuCisgICAgICAgIGlmICgoc3R5
bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9IRUFERVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9
PSBUQUJMRV9ST1dfR1JPVVAKKyAgICAgICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRB
QkxFX0ZPT1RFUl9HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVykKKyAgICAg
ICAgICAgICAmJiBzdHlsZS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKQorICAgICAg
ICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKKworICAgICAgICAvLyB3
cml0aW5nLW1vZGUgZG9lcyBub3QgYXBwbHkgdG8gdGFibGUgcm93IGdyb3VwcywgdGFibGUgY29s
dW1uIGdyb3VwcywgdGFibGUgcm93cywgYW5kIHRhYmxlIGNvbHVtbnMuCisgICAgICAgIC8vIEZJ
WE1FOiBUYWJsZSBjZWxscyBzaG91bGQgYmUgYWxsb3dlZCB0byBiZSBwZXJwZW5kaWN1bGFyIG9y
IGZsaXBwZWQgd2l0aCByZXNwZWN0IHRvIHRoZSB0YWJsZSwgdGhvdWdoLgorICAgICAgICBpZiAo
c3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9DT0xVTU4gfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBU
QUJMRV9DT0xVTU5fR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9GT09URVJfR1JP
VVAKKyAgICAgICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfSEVBREVSX0dST1VQ
IHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0g
VEFCTEVfUk9XX0dST1VQCisgICAgICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxF
X0NFTEwpCisgICAgICAgICAgICBzdHlsZS0+c2V0V3JpdGluZ01vZGUocGFyZW50U3R5bGUtPndy
aXRpbmdNb2RlKCkpOworCisgICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBkb24ndCBzdXBwb3J0
IGJsb2NrLWZsb3cgb24gZmxleGlibGUgYm94ZXMgeWV0LCBkaXNhbGxvdyBzZXR0aW5nCisgICAg
ICAgIC8vIG9mIGJsb2NrLWZsb3cgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBUb3BUb0JvdHRvbVdy
aXRpbmdNb2RlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDY0MTggLSBGbGV4aWJsZSBib3ggc3VwcG9ydC4KKyAgICAgICAgaWYgKHN0eWxlLT53
cml0aW5nTW9kZSgpICE9IFRvcFRvQm90dG9tV3JpdGluZ01vZGUgJiYgKHN0eWxlLT5kaXNwbGF5
KCkgPT0gQk9YIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JPWCkpCisgICAgICAgICAg
ICBzdHlsZS0+c2V0V3JpdGluZ01vZGUoVG9wVG9Cb3R0b21Xcml0aW5nTW9kZSk7CisgICAgfQor
CisgICAgLy8gTWFrZSBzdXJlIG91ciB6LWluZGV4IHZhbHVlIGlzIG9ubHkgYXBwbGllZCBpZiB0
aGUgb2JqZWN0IGlzIHBvc2l0aW9uZWQuCisgICAgaWYgKHN0eWxlLT5wb3NpdGlvbigpID09IFN0
YXRpY1Bvc2l0aW9uKQorICAgICAgICBzdHlsZS0+c2V0SGFzQXV0b1pJbmRleCgpOworCisgICAg
Ly8gQXV0byB6LWluZGV4IGJlY29tZXMgMCBmb3IgdGhlIHJvb3QgZWxlbWVudCBhbmQgdHJhbnNw
YXJlbnQgb2JqZWN0cy4gVGhpcyBwcmV2ZW50cworICAgIC8vIGNhc2VzIHdoZXJlIG9iamVjdHMg
dGhhdCBzaG91bGQgYmUgYmxlbmRlZCBhcyBhIHNpbmdsZSB1bml0IGVuZCB1cCB3aXRoIGEgbm9u
LXRyYW5zcGFyZW50CisgICAgLy8gb2JqZWN0IHdlZGdlZCBpbiBiZXR3ZWVuIHRoZW0uIEF1dG8g
ei1pbmRleCBhbHNvIGJlY29tZXMgMCBmb3Igb2JqZWN0cyB0aGF0IHNwZWNpZnkgdHJhbnNmb3Jt
cy9tYXNrcy9yZWZsZWN0aW9ucy4KKyAgICBpZiAoc3R5bGUtPmhhc0F1dG9aSW5kZXgoKSAmJiAo
KGUgJiYgZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkgfHwgc3R5bGUtPm9w
YWNpdHkoKSA8IDEuMGYKKyAgICAgICAgfHwgc3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9w
ZXJ0eSgpIHx8IHN0eWxlLT5oYXNNYXNrKCkgfHwgc3R5bGUtPmJveFJlZmxlY3QoKSB8fCBzdHls
ZS0+aGFzRmlsdGVyKCkKKyNpZmRlZiBGSVhFRF9QT1NJVElPTl9DUkVBVEVTX1NUQUNLSU5HX0NP
TlRFWFQKKyAgICAgICAgfHwgc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbgorI2Vu
ZGlmCisjaWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElORykKKyAgICAgICAgLy8gVG91Y2ggb3Zl
cmZsb3cgc2Nyb2xsaW5nIGNyZWF0ZXMgYSBzdGFja2luZyBjb250ZXh0LgorICAgICAgICB8fCBz
dHlsZS0+dXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpCisjZW5kaWYKKyAgICAgICAgKSkKKyAg
ICAgICAgc3R5bGUtPnNldFpJbmRleCgwKTsKKworICAgIC8vIFRleHRhcmVhIGNvbnNpZGVycyBv
dmVyZmxvdyB2aXNpYmxlIGFzIGF1dG8uCisgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZSh0ZXh0
YXJlYVRhZykpIHsKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChzdHlsZS0+b3ZlcmZsb3dY
KCkgPT0gT1ZJU0lCTEUgPyBPQVVUTyA6IHN0eWxlLT5vdmVyZmxvd1goKSk7CisgICAgICAgIHN0
eWxlLT5zZXRPdmVyZmxvd1koc3R5bGUtPm92ZXJmbG93WSgpID09IE9WSVNJQkxFID8gT0FVVE8g
OiBzdHlsZS0+b3ZlcmZsb3dZKCkpOworICAgIH0KKworICAgIC8vIEZpbmFsbHkgdXBkYXRlIG91
ciB0ZXh0IGRlY29yYXRpb25zIGluIGVmZmVjdCwgYnV0IGRvbid0IGFsbG93IHRleHQtZGVjb3Jh
dGlvbiB0byBwZXJjb2xhdGUgdGhyb3VnaAorICAgIC8vIHRhYmxlcywgaW5saW5lIGJsb2Nrcywg
aW5saW5lIHRhYmxlcywgcnVuLWlucywgb3Igc2hhZG93IERPTS4KKyAgICBpZiAoc3R5bGUtPmRp
c3BsYXkoKSA9PSBUQUJMRSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9UQUJMRSB8fCBz
dHlsZS0+ZGlzcGxheSgpID09IFJVTl9JTgorICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09
IElOTElORV9CTE9DSyB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9CT1ggfHwgaXNBdFNo
YWRvd0JvdW5kYXJ5KGUpKQorICAgICAgICBzdHlsZS0+c2V0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3Qoc3R5bGUtPnRleHREZWNvcmF0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAgc3R5bGUtPmFk
ZFRvVGV4dERlY29yYXRpb25zSW5FZmZlY3Qoc3R5bGUtPnRleHREZWNvcmF0aW9uKCkpOworCisg
ICAgLy8gSWYgZWl0aGVyIG92ZXJmbG93IHZhbHVlIGlzIG5vdCB2aXNpYmxlLCBjaGFuZ2UgdG8g
YXV0by4KKyAgICBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9NQVJRVUVFICYmIHN0eWxlLT5v
dmVyZmxvd1koKSAhPSBPTUFSUVVFRSkKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPTUFS
UVVFRSk7CisgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9NQVJRVUVFICYmIHN0
eWxlLT5vdmVyZmxvd1goKSAhPSBPTUFSUVVFRSkKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93
WChPTUFSUVVFRSk7CisgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9WSVNJQkxF
ICYmIHN0eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJMRSkKKyAgICAgICAgc3R5bGUtPnNldE92
ZXJmbG93WChPQVVUTyk7CisgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9WSVNJ
QkxFICYmIHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSkKKyAgICAgICAgc3R5bGUtPnNl
dE92ZXJmbG93WShPQVVUTyk7CisKKyAgICAvLyBUYWJsZSByb3dzLCBzZWN0aW9ucyBhbmQgdGhl
IHRhYmxlIGl0c2VsZiB3aWxsIHN1cHBvcnQgb3ZlcmZsb3c6aGlkZGVuIGFuZCB3aWxsIGlnbm9y
ZSBzY3JvbGwvYXV0by4KKyAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0YWJsZSBzZWN0aW9ucyB3
aWxsIHN1cHBvcnQgYXV0byBhbmQgc2Nyb2xsLgorICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09
IFRBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFCisgICAgICAgIHx8IHN0
eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0g
VEFCTEVfUk9XKSB7CisgICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUg
JiYgc3R5bGUtPm92ZXJmbG93WCgpICE9IE9ISURERU4pCisgICAgICAgICAgICBzdHlsZS0+c2V0
T3ZlcmZsb3dYKE9WSVNJQkxFKTsKKyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSAhPSBP
VklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT0hJRERFTikKKyAgICAgICAgICAgIHN0
eWxlLT5zZXRPdmVyZmxvd1koT1ZJU0lCTEUpOworICAgIH0KKworICAgIC8vIE1lbnVsaXN0cyBz
aG91bGQgaGF2ZSB2aXNpYmxlIG92ZXJmbG93CisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkg
PT0gTWVudWxpc3RQYXJ0KSB7CisgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT1ZJU0lCTEUp
OworICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9WSVNJQkxFKTsKKyAgICB9CisKKyAgICAv
LyBDdWxsIG91dCBhbnkgdXNlbGVzcyBsYXllcnMgYW5kIGFsc28gcmVwZWF0IHBhdHRlcm5zIGlu
dG8gYWRkaXRpb25hbCBsYXllcnMuCisgICAgc3R5bGUtPmFkanVzdEJhY2tncm91bmRMYXllcnMo
KTsKKyAgICBzdHlsZS0+YWRqdXN0TWFza0xheWVycygpOworCisgICAgLy8gRG8gdGhlIHNhbWUg
Zm9yIGFuaW1hdGlvbnMgYW5kIHRyYW5zaXRpb25zLgorICAgIHN0eWxlLT5hZGp1c3RBbmltYXRp
b25zKCk7CisgICAgc3R5bGUtPmFkanVzdFRyYW5zaXRpb25zKCk7CisKKyAgICAvLyBJbXBvcnRh
bnQ6IEludHJpbnNpYyBtYXJnaW5zIGdldCBhZGRlZCB0byBjb250cm9scyBiZWZvcmUgdGhlIHRo
ZW1lIGhhcyBhZGp1c3RlZCB0aGUgc3R5bGUsIHNpbmNlIHRoZSB0aGVtZSB3aWxsCisgICAgLy8g
YWx0ZXIgZm9udHMgYW5kIGhlaWdodHMvd2lkdGhzLgorICAgIGlmIChlICYmIGUtPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkgJiYgc3R5bGUtPmZvbnRTaXplKCkgPj0gMTEpIHsKKyAgICAgICAgLy8g
RG9uJ3QgYXBwbHkgaW50cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9ucy4gVGhlIGRlc2ln
bmVyIGtub3dzIGhvdyBiaWcgdGhlIGltYWdlcyBhcmUsCisgICAgICAgIC8vIHNvIHdlIGhhdmUg
dG8gdHJlYXQgYWxsIGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNpdGx5
IHNpemVkLgorICAgICAgICBpZiAoIWUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8ICFzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZSktPmlzSW1hZ2VCdXR0b24oKSkKKyAgICAgICAgICAg
IGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOworICAgIH0KKworICAgIC8vIExldCB0aGUgdGhl
bWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KKyAgICBpZiAoc3R5
bGUtPmhhc0FwcGVhcmFuY2UoKSkKKyAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVy
RGF0YSwgbV9iYWNrZ3JvdW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOworCisgICAgLy8gSWYg
d2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHls
ZS4KKyAgICBpZiAoc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCisgICAgICAg
IHN0eWxlLT5zZXRVbmlxdWUoKTsKKworICAgIC8vIEZJWE1FOiB3aGVuIGRyb3BwaW5nIHRoZSAt
d2Via2l0IHByZWZpeCBvbiB0cmFuc2Zvcm0tc3R5bGUsIHdlIHNob3VsZCBhbHNvIGhhdmUgb3Bh
Y2l0eSA8IDEgY2F1c2UgZmxhdHRlbmluZy4KKyAgICBpZiAoc3R5bGUtPnByZXNlcnZlczNEKCkg
JiYgKHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRQorICAgICAgICB8fCBzdHlsZS0+b3Zl
cmZsb3dZKCkgIT0gT1ZJU0lCTEUKKyAgICAgICAgfHwgc3R5bGUtPmhhc0ZpbHRlcigpKSkKKyAg
ICAgICAgc3R5bGUtPnNldFRyYW5zZm9ybVN0eWxlM0QoVHJhbnNmb3JtU3R5bGUzREZsYXQpOwor
CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAoZSAmJiBlLT5pc1NWR0VsZW1lbnQoKSkgeworICAg
ICAgICAvLyBTcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvbWFza2luZy5odG1sI092ZXJm
bG93UHJvcGVydHkKKyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMKQor
ICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPSElEREVOKTsKKyAgICAgICAgZWxzZSBp
ZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9BVVRPKQorICAgICAgICAgICAgc3R5bGUtPnNldE92
ZXJmbG93WShPVklTSUJMRSk7CisKKyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBP
U0NST0xMKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPSElEREVOKTsKKyAgICAg
ICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9BVVRPKQorICAgICAgICAgICAgc3R5
bGUtPnNldE92ZXJmbG93WChPVklTSUJMRSk7CisKKyAgICAgICAgLy8gT25seSB0aGUgcm9vdCA8
c3ZnPiBlbGVtZW50IGluIGFuIFNWRyBkb2N1bWVudCBmcmFnbWVudCB0cmVlIGhvbm9ycyBjc3Mg
cG9zaXRpb24KKyAgICAgICAgaWYgKCEoZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSAm
JiBlLT5wYXJlbnROb2RlKCkgJiYgIWUtPnBhcmVudE5vZGUoKS0+aXNTVkdFbGVtZW50KCkpKQor
ICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsUG9zaXRp
b24oKSk7CisKKyAgICAgICAgLy8gUmVuZGVyU1ZHUm9vdCBoYW5kbGVzIHpvb21pbmcgZm9yIHRo
ZSB3aG9sZSBTVkcgc3VidHJlZSwgc28gZm9yZWlnbk9iamVjdCBjb250ZW50IHNob3VsZAorICAg
ICAgICAvLyBub3QgYmUgc2NhbGVkIGFnYWluLgorICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShT
VkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZykpCisgICAgICAgICAgICBzdHlsZS0+c2V0RWZmZWN0
aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgfQorI2VuZGlmCit9CisK
K2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiByZWdpb25FbGVt
ZW50KQoreworICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQt
cmVnaW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQsCisgICAg
Ly8gc28gYWxsIHJlZ2lvbiBydWxlcyBhcmUgZ2xvYmFsIGJ5IGRlZmF1bHQuIFZlcmlmeSB3aGV0
aGVyIHRoYXQgY2FuIHN0YW5kIG9yIG5lZWRzIGNoYW5naW5nLgorCisgICAgdW5zaWduZWQgcnVs
ZXNTaXplID0gbV9hdXRob3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7CisgICAg
ICAgIEFTU0VSVChtX2F1dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0
KGkpLnJ1bGVTZXQuZ2V0KCkpOworICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX2F1
dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCBy
ZWdpb25FbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChtX3VzZXJTdHlsZSkgeworICAgICAgICBydWxlc1NpemUgPSBtX3VzZXJTdHlsZS0+bV9yZWdp
b25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBydWxlc1NpemU7ICsraSkgeworICAgICAgICAgICAgQVNTRVJUKG1fdXNlclN0eWxl
LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOworICAg
ICAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IobV91c2VyU3R5bGUtPm1fcmVnaW9uU2Vs
ZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQoreworICAgIGlmICgh
bV9mb250RGlydHkpCisgICAgICAgIHJldHVybjsKKworICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1
c3QoKTsKKyAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRT
dHlsZSk7CisgICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwor
ICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOworICAgIG1fZm9udERp
cnR5ID0gZmFsc2U7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRCYWNr
Z3JvdW5kKCkKK3sKKyAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFu
Y2UoKTsKKyAgICBpZiAobV9oYXNVQUFwcGVhcmFuY2UpIHsKKyAgICAgICAgbV9ib3JkZXJEYXRh
ID0gbV9zdHlsZS0+Ym9yZGVyKCk7CisgICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqbV9zdHls
ZS0+YmFja2dyb3VuZExheWVycygpOworICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IG1fc3R5
bGUtPmJhY2tncm91bmRDb2xvcigpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxDU1NSdWxlTGlz
dD4gU3R5bGVSZXNvbHZlcjo6c3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgdW5zaWdu
ZWQgcnVsZXNUb0luY2x1ZGUpCit7CisgICAgcmV0dXJuIHBzZXVkb1N0eWxlUnVsZXNGb3JFbGVt
ZW50KGUsIE5PUFNFVURPLCBydWxlc1RvSW5jbHVkZSk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQq
IGUsIFBzZXVkb0lkIHBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKK3sKKyAgICBp
ZiAoIWUgfHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KHRydWUp
OworCisgICAgaW5pdEVsZW1lbnQoZSk7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCAwLCBw
c2V1ZG9JZCk7CisKKyAgICBNYXRjaFJlc3VsdCBkdW1teTsKKyAgICBpZiAocnVsZXNUb0luY2x1
ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykgeworICAgICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxl
cyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0LgorICAgICAgICBtYXRjaFVBUnVsZXMoZHVtbXkp
OworCisgICAgICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgorICAgICAgICBp
ZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCisgICAgICAgICAgICBtYXRjaFVzZXJSdWxl
cyhkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICB9CisKKyAgICBp
ZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9y
Q1NTUnVsZXMpKSB7CisgICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRl
ICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGlu
IGF1dGhvciBzaGVldHMuCisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVzVG9J
bmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisKKyAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9IGZh
bHNlOworICAgIH0KKworICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KGZhbHNl
KTsKKworICAgIHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKK30KKworaW5saW5lIGJvb2wg
U3R5bGVSZXNvbHZlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoreworICAgIG1fZHluYW1pY1BzZXVkbyA9IE5PUFNF
VURPOworICAgIG1fY2hlY2tlci5jbGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpOworCisg
ICAgaWYgKHJ1bGVEYXRhLmhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpKSB7CisgICAgICAgIC8v
IFdlIGtub3cgdGhpcyBzZWxlY3RvciBkb2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8gZWxlbWVu
dHMuCisgICAgICAgIGlmIChtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gV2Uga25vdyBhIHN1ZmZpY2llbnRs
eSBzaW1wbGUgc2luZ2xlIHBhcnQgc2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBm
b3VuZCBpdCBmcm9tIHRoZSBydWxlIGhhc2guCisgICAgICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0
byBIVE1MIG9ubHkgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbmFtZXNwYWNlLgorICAg
ICAgICBpZiAocnVsZURhdGEuaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9u
UnVsZUhhc2goKSAmJiBtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICAgICAg
aWYgKCFydWxlRGF0YS5oYXNNdWx0aXBhcnRTZWxlY3RvcigpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKCFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNo
ZXMobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0
dHJpYnV0ZVNlbGVjdG9yKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX2NoZWNrZXIuZmFzdENoZWNrU2Vs
ZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50KTsKKyAgICB9CisKKyAgICAvLyBT
bG93IHBhdGguCisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBj
b250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpW
aXNpdGVkTWF0Y2hFbmFibGVkKTsKKyAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0eWxlKCk7
CisgICAgY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgPSBtX3BhcmVudE5vZGUgPyBtX3BhcmVu
dE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOworICAgIGNvbnRleHQuc2NvcGUgPSBzY29wZTsKKyAg
ICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tT
ZWxlY3Rvcihjb250ZXh0LCBtX2R5bmFtaWNQc2V1ZG8pOworICAgIGlmIChtYXRjaCAhPSBTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIucHNl
dWRvU3R5bGUoKSAhPSBtX2R5bmFtaWNQc2V1ZG8pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVj
dG9yKENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCkK
K3sKKyAgICBpZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBtX2NoZWNrZXIuY2xlYXJIYXNVbmtub3duUHNldWRvRWxlbWVu
dHMoKTsKKyAgICBtX2NoZWNrZXIuc2V0UHNldWRvU3R5bGUoTk9QU0VVRE8pOworCisgICAgZm9y
IChDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0
OjpuZXh0KHMpKQorICAgICAgICBpZiAobV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocywgcmVnaW9u
RWxlbWVudCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKyAgICAKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9y
U2NvcGVzKFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVzaGVldCwgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29w
ZXMpCit7CisgICAgQVNTRVJUKCFzdHlsZXNoZWV0LT5pc0xvYWRpbmcoKSk7CisKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzdHlsZXNo
ZWV0LT5pbXBvcnRSdWxlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbXBvcnRS
dWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWltcG9ydFJ1bGVzW2ldLT5zdHlsZVNo
ZWV0KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFkZXRlcm1pbmVTdHls
ZXNoZWV0U2VsZWN0b3JTY29wZXMoaW1wb3J0UnVsZXNbaV0tPnN0eWxlU2hlZXQoKSwgaWRTY29w
ZXMsIGNsYXNzU2NvcGVzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIHJ1bGVzID0gc3R5bGVzaGVl
dC0+Y2hpbGRSdWxlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlcy5zaXpl
KCk7IGkrKykgeworICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0gcnVsZXNbaV0uZ2V0KCk7
CisgICAgICAgIGlmIChydWxlLT5pc1N0eWxlUnVsZSgpKSB7CisgICAgICAgICAgICBTdHlsZVJ1
bGUqIHN0eWxlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpOworICAgICAgICAg
ICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZVNlbGVjdG9yU2NvcGVzKHN0eWxlUnVs
ZS0+c2VsZWN0b3JMaXN0KCksIGlkU2NvcGVzLCBjbGFzc1Njb3BlcykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gCisgICAg
ICAgIC8vIEZJWE1FOiBNZWRpYSBydWxlcyBhbmQgbWF5YmUgc29tZSBvdGhlcnMgY291bGQgYmUg
YWxsb3dlZC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIGlubGluZSBib29sIGlzU2VsZWN0b3JNYXRjaGlu
Z0hUTUxCYXNlZE9uUnVsZUhhc2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JOYW1lc3BhY2UgPSBzZWxlY3Rvci0+dGFnKCku
bmFtZXNwYWNlVVJJKCk7CisgICAgaWYgKHNlbGVjdG9yTmFtZXNwYWNlICE9IHN0YXJBdG9tICYm
IHNlbGVjdG9yTmFtZXNwYWNlICE9IHhodG1sTmFtZXNwYWNlVVJJKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpOb25lKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc2VsZWN0b3ItPnRhZygpICE9IHN0YXJBdG9t
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21t
b25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rv
ci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0
ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpOworICAgIGlmICghc2VsZWN0b3JMaXN0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBz
ZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVj
dG9yTGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKKyAgICAgICAgaWYgKHN1YlNlbGVjdG9yLT5p
c0F0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tb25BdHRyaWJ1
dGVTZWxlY3RvckF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCit7Cisg
ICAgLy8gVGhlc2UgYXJlIGV4cGxpY2l0bHkgdGVzdGVkIGZvciBlcXVhbGl0eSBpbiBjYW5TaGFy
ZVN0eWxlV2l0aEVsZW1lbnQuCisgICAgcmV0dXJuIGF0dHJpYnV0ZSA9PSB0eXBlQXR0ciB8fCBh
dHRyaWJ1dGUgPT0gcmVhZG9ubHlBdHRyOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29udGFp
bnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikK
K3sKKyAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3Rvcnko
KSkgeworICAgICAgICAvLyBBbGxvdyBjZXJ0YWluIGNvbW1vbiBhdHRyaWJ1dGVzICh1c2VkIGlu
IHRoZSBkZWZhdWx0IHN0eWxlKSBpbiB0aGUgc2VsZWN0b3JzIHRoYXQgbWF0Y2ggdGhlIGN1cnJl
bnQgZWxlbWVudC4KKyAgICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkg
JiYgIWlzQ29tbW9uQXR0cmlidXRlU2VsZWN0b3JBdHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJpYnV0
ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoc2VsZWN0b3JMaXN0
Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2Vs
ZWN0b3I6OlN1YlNlbGVjdG9yKSB7CisgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50
YWdIaXN0b3J5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Cisg
ICAgICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0
cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworUnVsZURhdGE6OlJ1bGVEYXRhKFN0eWxlUnVsZSog
cnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29s
IGluUmVnaW9uUnVsZSkKKyAgICA6IG1fcnVsZShydWxlKQorICAgICwgbV9zZWxlY3RvcihzZWxl
Y3RvcikKKyAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3ItPnNwZWNpZmljaXR5KCkpCisgICAg
LCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
Y2FuVXNlRmFzdENoZWNrU2VsZWN0b3IgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2Fi
bGVTZWxlY3RvcihzZWxlY3RvcikpCisgICAgLCBtX2hhc011bHRpcGFydFNlbGVjdG9yKCEhc2Vs
ZWN0b3ItPnRhZ0hpc3RvcnkoKSkKKyAgICAsIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGlu
Z0hUTUxCYXNlZE9uUnVsZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFz
aChzZWxlY3RvcikpCisgICAgLCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihX
ZWJDb3JlOjpjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQorICAg
ICwgbV9saW5rTWF0Y2hUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlw
ZShzZWxlY3RvcikpCisgICAgLCBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbikKKyAgICAsIG1faXNJblJlZ2lvblJ1bGUoaW5SZWdpb25SdWxlKQor
eworICAgIFNlbGVjdG9yQ2hlY2tlcjo6Y29sbGVjdElkZW50aWZpZXJIYXNoZXMobV9zZWxlY3Rv
ciwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmll
ckNvdW50KTsKK30KKworUnVsZVNldDo6UnVsZVNldCgpCisgICAgOiBtX3J1bGVDb3VudCgwKQor
ICAgICwgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKHRydWUpCit7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoU3R5bGVSZXNvbHZlcjo6RmVhdHVy
ZXMmIGZlYXR1cmVzLCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYgKHNl
bGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkKKyAgICAgICAgZmVhdHVyZXMuaWRz
SW5SdWxlcy5hZGQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKKyAgICBpZiAoc2VsZWN0b3It
PmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFk
ZChzZWxlY3Rvci0+YXR0cmlidXRlKCkubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9G
aXJzdExpbmU6CisgICAgICAgIGZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlcyA9IHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0JlZm9yZToKKyAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BZnRlcjoKKyAgICAgICAgZmVhdHVyZXMudXNlc0JlZm9y
ZUFmdGVyUnVsZXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9MaW5rOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6CisgICAg
ICAgIGZlYXR1cmVzLnVzZXNMaW5rUnVsZXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RG
ZWF0dXJlc0Zyb21SdWxlRGF0YShTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgZmVhdHVyZXMsIGNv
bnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKK3sKKyAgICBib29sIGZvdW5kU2libGluZ1NlbGVjdG9y
ID0gZmFsc2U7CisgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxl
Y3RvcigpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Cisg
ICAgICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc2VsZWN0b3IpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2Vs
ZWN0b3ItPnNlbGVjdG9yTGlzdCgpKSB7CisgICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBz
dWJTZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3I7IHN1YlNlbGVj
dG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9yKSkgeworICAgICAgICAgICAg
ICAgIGlmICghZm91bmRTaWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVj
dG9yKCkpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHN1
YlNlbGVjdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghZm91bmRTaWJs
aW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCisgICAgICAgICAg
ICBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7CisgICAgfQorICAgIGlmIChmb3VuZFNpYmxp
bmdTZWxlY3RvcikKKyAgICAgICAgZmVhdHVyZXMuc2libGluZ1J1bGVzLmFwcGVuZChTdHlsZVJl
c29sdmVyOjpSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCks
IHJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkpOworICAgIGlmIChydWxlRGF0
YS5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgZmVhdHVyZXMu
dW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBlbmQoU3R5bGVSZXNvbHZlcjo6UnVsZUZlYXR1cmUo
cnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvcigpLCBydWxlRGF0YS5oYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luKCkpKTsKK30KKyAgICAKK3ZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0
KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhdGEm
IHJ1bGVEYXRhKQoreworICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm47CisgICAgT3duUHRy
PFZlY3RvcjxSdWxlRGF0YT4gPiYgcnVsZXMgPSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRlcmF0
b3ItPnNlY29uZDsKKyAgICBpZiAoIXJ1bGVzKQorICAgICAgICBydWxlcyA9IGFkb3B0UHRyKG5l
dyBWZWN0b3I8UnVsZURhdGE+KTsKKyAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKK30KKwor
dm9pZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNr
U2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQoreworICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1
bGUsIHNlbGVjdG9yLCBtX3J1bGVDb3VudCsrLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBj
YW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaW5SZWdpb25SdWxlKTsKKyAgICBjb2xsZWN0RmVhdHVy
ZXNGcm9tUnVsZURhdGEobV9mZWF0dXJlcywgcnVsZURhdGEpOworCisgICAgaWYgKHNlbGVjdG9y
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgeworICAgICAgICBhZGRUb1J1bGVTZXQoc2Vs
ZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX2lkUnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNs
YXNzKSB7CisgICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1f
Y2xhc3NSdWxlcywgcnVsZURhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChz
ZWxlY3Rvci0+aXNVbmtub3duUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAgIGFkZFRvUnVsZVNl
dChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzLCBy
dWxlRGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKFNlbGVjdG9yQ2hlY2tl
cjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKSkgeworICAgICAgICBzd2l0
Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvTGluazoKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKKyAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKKyAgICAgICAgICAgIG1fbGlu
a1BzZXVkb0NsYXNzUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6CisgICAgICAgICAgICBtX2Zv
Y3VzUHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQocnVsZURhdGEpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUoKTsKKyAgICBpZiAobG9jYWxO
YW1lICE9IHN0YXJBdG9tKSB7CisgICAgICAgIGFkZFRvUnVsZVNldChsb2NhbE5hbWUuaW1wbCgp
LCBtX3RhZ1J1bGVzLCBydWxlRGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV91
bml2ZXJzYWxSdWxlcy5hcHBlbmQocnVsZURhdGEpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFBh
Z2VSdWxlKFN0eWxlUnVsZVBhZ2UqIHJ1bGUpCit7CisgICAgbV9wYWdlUnVsZXMuYXBwZW5kKHJ1
bGUpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiBy
ZWdpb25SdWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCit7CisgICAgT3duUHRy
PFJ1bGVTZXQ+IHJlZ2lvblJ1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICAvLyBUaGUg
cmVnaW9uIHJ1bGUgc2V0IHNob3VsZCB0YWtlIGludG8gYWNjb3VudCB0aGUgcG9zaXRpb24gaW5z
aWRlIHRoZSBwYXJlbnQgcnVsZSBzZXQuCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcnVsZXMgaW5z
aWRlIHJlZ2lvbiBibG9jayBtaWdodCBiZSBpbmNvcnJlY3RseSBwb3NpdGlvbmVkIGJlZm9yZSBv
dGhlciBzaW1pbGFyIHJ1bGVzIGZyb20KKyAgICAvLyB0aGUgc3R5bGVzaGVldCB0aGF0IGNvbnRh
aW5zIHRoZSByZWdpb24gYmxvY2suCisgICAgcmVnaW9uUnVsZVNldC0+bV9ydWxlQ291bnQgPSBt
X3J1bGVDb3VudDsKKworICAgIC8vIENvbGxlY3QgdGhlIHJlZ2lvbiBydWxlcyBpbnRvIGEgcnVs
ZSBzZXQKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVs
ZXMgPSByZWdpb25SdWxlLT5jaGlsZFJ1bGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVSdWxlQmFzZSogcmVn
aW9uU3R5bGluZ1J1bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgpOworICAgICAgICBpZiAocmVnaW9u
U3R5bGluZ1J1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICByZWdpb25SdWxlU2V0LT5h
ZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpLCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVlLCB0cnVlKTsKKyAgICB9CisgICAgLy8gVXBk
YXRlIHRoZSAiZ2xvYmFsIiBydWxlIGNvdW50IHNvIHRoYXQgcHJvcGVyIG9yZGVyIGlzIG1haW50
YWluZWQKKyAgICBtX3J1bGVDb3VudCA9IHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50OworCisg
ICAgbV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hcHBlbmQoUnVsZVNldFNlbGVjdG9yUGFp
cihyZWdpb25SdWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCByZWdpb25SdWxlU2V0LnJlbGVh
c2UoKSkpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRJ
bnRlcm5hbCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVS
ZXNvbHZlciogc3R5bGVTZWxlY3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7Cisg
ICAgQVNTRVJUKHNoZWV0KTsKKworICAgIC8vIE5vIG1lZGlhIGltcGxpZXMgImFsbCIsIGJ1dCBp
ZiBhIG1lZGlhIGxpc3QgZXhpc3RzIGl0IG11c3QKKyAgICAvLyBjb250YWluIG91ciBjdXJyZW50
IG1lZGl1bQorICAgIGlmIChzaGVldC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1lZGl1bS5ldmFsKHNo
ZWV0LT5tZWRpYVF1ZXJpZXMoKSwgc3R5bGVTZWxlY3RvcikpCisgICAgICAgIHJldHVybjsgLy8g
dGhlIHN0eWxlIHNoZWV0IGRvZXNuJ3QgYXBwbHkKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzaGVldC0+aW1wb3J0UnVsZXMo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0gaW1wb3J0UnVsZXNbaV0u
Z2V0KCk7CisgICAgICAgIGlmIChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFpbXBvcnRS
dWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnRSdWxlLT5tZWRpYVF1ZXJp
ZXMoKSwgc3R5bGVTZWxlY3RvcikpKQorICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1w
b3J0UnVsZS0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IsIHNjb3BlKTsKKyAg
ICB9CisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID0gc3R5bGVTZWxlY3RvciAm
JiBzdHlsZVNlbGVjdG9yLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0
KHNoZWV0LT5iYXNlVVJMKCkpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVC
YXNlPiA+JiBydWxlcyA9IHNoZWV0LT5jaGlsZFJ1bGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHJ1bGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0eWxlUnVsZUJhc2UqIHJ1
bGUgPSBydWxlc1tpXS5nZXQoKTsKKworICAgICAgICBBU1NFUlQoIXJ1bGUtPmlzSW1wb3J0UnVs
ZSgpKTsKKyAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICBhZGRT
dHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4sICFzY29wZSk7CisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkK
KyAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxl
KSk7CisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKKyAgICAgICAgICAg
IFN0eWxlUnVsZU1lZGlhKiBtZWRpYVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVNZWRpYSo+
KHJ1bGUpOworCisgICAgICAgICAgICBpZiAoKCFtZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpIHx8
IG1lZGl1bS5ldmFsKG1lZGlhUnVsZS0+bWVkaWFRdWVyaWVzKCksIHN0eWxlU2VsZWN0b3IpKSkg
eworICAgICAgICAgICAgICAgIC8vIFRyYXZlcnNlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBAbWVk
aWEgcnVsZS4KKyAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJh
c2U+ID4mIGNoaWxkUnVsZXMgPSBtZWRpYVJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgICAgICAgICBTdHlsZVJ1bGVCYXNlKiBjaGlsZFJ1bGUgPSBjaGlsZFJ1bGVz
W2pdLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRSdWxlLT5pc1N0eWxlUnVs
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0
eWxlUnVsZSo+KGNoaWxkUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNQYWdlUnVsZSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxl
UGFnZSo+KGNoaWxkUnVsZSkpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1
bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBy
dWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZv
bnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4oY2hpbGRSdWxlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5h
ZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
eWxlU2VsZWN0b3ItPmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRSdWxlLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBz
dHlsZVNlbGVjdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlm
cmFtZSBydWxlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShC
VUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBz
aGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFN0eWxl
UnVsZUtleWZyYW1lcyo+KGNoaWxkUnVsZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSAvLyBmb3IgcnVsZXMKKyAgICAgICAgICAgIH0gLy8gaWYgcnVsZXMKKyAg
ICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3Ip
IHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgorICAgICAg
ICAgICAgLy8gRklYTUUoQlVHIDcyNDYxKTogV2UgZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMg
b2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChz
Y29wZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnN0IFN0eWxl
UnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVGb250RmFj
ZSo+KHJ1bGUpOworICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFk
ZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOworICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+
aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKKyAgICAgICAgfSBlbHNlIGlmIChy
dWxlLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CisgICAgICAgICAgICAv
LyBGSVhNRSAoQlVHIDcyNDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29w
ZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgaWYgKHNjb3BlKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRk
S2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihydWxlKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNSZWdpb25SdWxlKCkgJiYgc3R5bGVTZWxlY3Rvcikg
eworICAgICAgICAgICAgLy8gRklYTUUgKEJVRyA3MjQ3Mik6IFdlIGRvbid0IGFkZCBALXdlYmtp
dC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAg
ICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGFkZFJlZ2lvblJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSksIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOworICAgICAgICB9CisgICAgfQorICAgIGlmIChtX2F1
dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCisgICAgICAgIHNocmlua1RvRml0KCk7Cit9CisKK3ZvaWQg
UnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVsZSwgYm9vbCBoYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdp
b25SdWxlKQoreworICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMgPSBydWxlLT5zZWxlY3Rvckxpc3Qo
KS5maXJzdCgpOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQorICAgICAgICBhZGRS
dWxlKHJ1bGUsIHMsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1Nl
bGVjdG9yLCBpc0luUmVnaW9uUnVsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtN
YXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKK3sKKyAgICBSdWxlU2V0
OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOworICAgIGZvciAoUnVsZVNl
dDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgaXQtPnNlY29uZC0+c2hyaW5rVG9GaXQoKTsKK30KKwordm9pZCBSdWxlU2V0
OjpzaHJpbmtUb0ZpdCgpCit7CisgICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1faWRSdWxlcyk7
CisgICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1fY2xhc3NSdWxlcyk7CisgICAgc2hyaW5rTWFw
VmVjdG9yc1RvRml0KG1fdGFnUnVsZXMpOworICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3No
YWRvd1BzZXVkb0VsZW1lbnRSdWxlcyk7CisgICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5zaHJp
bmtUb0ZpdCgpOworICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLnNocmlua1RvRml0KCk7Cisg
ICAgbV91bml2ZXJzYWxSdWxlcy5zaHJpbmtUb0ZpdCgpOworICAgIG1fcGFnZVJ1bGVzLnNocmlu
a1RvRml0KCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHRoaXMg
aXMgbW9zdGx5IGJvcmluZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBjZXJ0YWluIHJ1bGUgdG8g
dGhlIHJlbmRlcnN0eWxlLi4uCisKK0xlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0VG9JbnRM
ZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBSZW5kZXJTdHlsZSogc3R5
bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyKQoreworICAgIHJl
dHVybiBwcmltaXRpdmVWYWx1ZSA/IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4
ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJz
aW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGUsIHJvb3RTdHlsZSwgbXVs
dGlwbGllcikgOiBMZW5ndGgoVW5kZWZpbmVkKTsKK30KKworTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6
OmNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlw
bGllcikKK3sKKyAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUgPyBwcmltaXRpdmVWYWx1ZS0+Y29u
dmVydFRvTGVuZ3RoPEZpeGVkRmxvYXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBG
cmFjdGlvbkNvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZSwg
cm9vdFN0eWxlLCBtdWx0aXBsaWVyKSA6IExlbmd0aChVbmRlZmluZWQpOworfQorCit0ZW1wbGF0
ZSA8Ym9vbCBhcHBseUZpcnN0Pgordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMo
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCBib29s
IGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIGJvb2wgZmlsdGVyUmVnaW9uUHJvcGVy
dGllcykKK3sKKyAgICBBU1NFUlQoIWZpbHRlclJlZ2lvblByb3BlcnRpZXMgfHwgbV9yZWdpb25G
b3JTdHlsaW5nKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0g
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgcnVs
ZSk7CisKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlD
b3VudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kp
IHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIGN1cnJlbnQgPSBwcm9wZXJ0aWVzLT5wcm9w
ZXJ0eUF0KGkpOworICAgICAgICBpZiAoaXNJbXBvcnRhbnQgIT0gY3VycmVudC5pc0ltcG9ydGFu
dCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmhlcml0ZWRPbmx5ICYm
ICFjdXJyZW50LmlzSW5oZXJpdGVkKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0
eSB2YWx1ZSBpcyBleHBsaWNpdGx5IGluaGVyaXRlZCwgd2UgbmVlZCB0byBhcHBseSBmdXJ0aGVy
IG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcworICAgICAgICAgICAgLy8gYXMgdGhleSBtaWdodCBv
dmVycmlkZSB0aGUgdmFsdWUgaW5oZXJpdGVkIGhlcmUuIEZvciB0aGlzIHJlYXNvbiB3ZSBkb24n
dCBhbGxvdyBkZWNsYXJhdGlvbnMgd2l0aAorICAgICAgICAgICAgLy8gZXhwbGljaXRseSBpbmhl
cml0ZWQgcHJvcGVydGllcyB0byBiZSBjYWNoZWQuCisgICAgICAgICAgICBBU1NFUlQoIWN1cnJl
bnQudmFsdWUoKS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkgPSBjdXJyZW50LmlkKCk7
CisKKyAgICAgICAgaWYgKGZpbHRlclJlZ2lvblByb3BlcnRpZXMgJiYgIVN0eWxlUmVzb2x2ZXI6
OmlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmIChhcHBseUZpcnN0KSB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChmaXJzdENTU1Byb3BlcnR5ID09IENTU1Byb3BlcnR5Q29sb3IsIENTU19jb2xvcl9pc19m
aXJzdF9wcm9wZXJ0eSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0eVpv
b20gPT0gQ1NTUHJvcGVydHlDb2xvciArIDE4LCBDU1Nfem9vbV9pc19lbmRfb2ZfZmlyc3RfcHJv
cF9yYW5nZSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0eUxpbmVIZWln
aHQgPT0gQ1NTUHJvcGVydHlab29tICsgMSwgQ1NTX2xpbmVfaGVpZ2h0X2lzX2FmdGVyX3pvb20p
OworICAgICAgICAgICAgLy8gZ2l2ZSBzcGVjaWFsIHByaW9yaXR5IHRvIGZvbnQteHh4LCBjb2xv
ciBwcm9wZXJ0aWVzLCBldGMKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5
TGluZUhlaWdodCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vIHdl
IGFwcGx5IGxpbmUtaGVpZ2h0IGxhdGVyCisgICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gQ1NT
UHJvcGVydHlMaW5lSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUg
PSBjdXJyZW50LnZhbHVlKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1
ZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9w
ZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHko
Y3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOworICAgIH0KKyAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFByb2Nlc3NSdWxlKGNvb2tpZSk7Cit9CisKK3RlbXBsYXRlIDxib29s
IGFwcGx5Rmlyc3Q+Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMo
Y29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sIGlzSW1wb3J0YW50LCBpbnQgc3Rh
cnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCit7CisgICAgaWYgKHN0
YXJ0SW5kZXggPT0gLTEpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0eWxlLT5pbnNp
ZGVMaW5rKCkgIT0gTm90SW5zaWRlTGluaykgeworICAgICAgICBmb3IgKGludCBpID0gc3RhcnRJ
bmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBNYXRjaGVkUHJv
cGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGll
c1tpXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtYXRjaGVkUHJvcGVy
dGllcy5saW5rTWF0Y2hUeXBlOworICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5p
Y2VyIHRvIHBhc3MgdGhlc2UgYXMgYXJndW1lbnRzIGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5nZXMg
aW4gbWFueSBwbGFjZXMuCisgICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluazsKKyAgICAgICAg
ICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKKworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0
aWVzPGFwcGx5Rmlyc3Q+KG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNo
UmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHksIG1hdGNo
ZWRQcm9wZXJ0aWVzLmlzSW5SZWdpb25SdWxlKTsKKyAgICAgICAgfQorICAgICAgICBtX2FwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRydWU7CisgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZv
ciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKKyAgICAgICAgY29u
c3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXNbaV07CisgICAgICAgIGFwcGx5UHJvcGVydGllczxhcHBseUZpcnN0Piht
YXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVs
ZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBtYXRjaGVkUHJvcGVydGllcy5pc0lu
UmVnaW9uUnVsZSk7CisgICAgfQorfQorCit1bnNpZ25lZCBTdHlsZVJlc29sdmVyOjpjb21wdXRl
TWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVz
LCB1bnNpZ25lZCBzaXplKQoreworICAgIAorICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hN
ZW1vcnkocHJvcGVydGllcywgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIHNpemUpOworfQor
Citib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGEsIGNv
bnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQoreworICAgIHJldHVybiBhLmZpcnN0
VUFSdWxlID09IGIuZmlyc3RVQVJ1bGUKKyAgICAgICAgJiYgYS5sYXN0VUFSdWxlID09IGIubGFz
dFVBUnVsZQorICAgICAgICAmJiBhLmZpcnN0QXV0aG9yUnVsZSA9PSBiLmZpcnN0QXV0aG9yUnVs
ZQorICAgICAgICAmJiBhLmxhc3RBdXRob3JSdWxlID09IGIubGFzdEF1dGhvclJ1bGUKKyAgICAg
ICAgJiYgYS5maXJzdFVzZXJSdWxlID09IGIuZmlyc3RVc2VyUnVsZQorICAgICAgICAmJiBhLmxh
c3RVc2VyUnVsZSA9PSBiLmxhc3RVc2VyUnVsZTsKK30KKworYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRj
aFJhbmdlcyYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitib29sIG9wZXJhdG9y
PT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0IFN0eWxl
UmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBiKQoreworICAgIHJldHVybiBhLnByb3BlcnRp
ZXMgPT0gYi5wcm9wZXJ0aWVzICYmIGEubGlua01hdGNoVHlwZSA9PSBiLmxpbmtNYXRjaFR5cGU7
Cit9CisKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVy
dGllcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7Cisg
ICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCit7
CisgICAgQVNTRVJUKGhhc2gpOworCisgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0
b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsKKyAgICBpZiAoaXQg
PT0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnNlY29uZDsKKwor
ICAgIHNpemVfdCBzaXplID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOwor
ICAgIGlmIChzaXplICE9IGNhY2hlSXRlbS5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgIGlmIChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXSAhPSBjYWNoZUl0ZW0u
bWF0Y2hlZFByb3BlcnRpZXNbaV0pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
aWYgKGNhY2hlSXRlbS5yYW5nZXMgIT0gbWF0Y2hSZXN1bHQucmFuZ2VzKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gJmNhY2hlSXRlbTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjph
ZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNoUmVz
dWx0JiBtYXRjaFJlc3VsdCkKK3sKKyAgICBzdGF0aWMgdW5zaWduZWQgbWF0Y2hlZERlY2xhcmF0
aW9uQ2FjaGVBZGRpdGlvbnNCZXR3ZWVuU3dlZXBzID0gMTAwOworICAgIGlmICgrK21fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwID49IG1hdGNoZWREZWNsYXJh
dGlvbkNhY2hlQWRkaXRpb25zQmV0d2VlblN3ZWVwcykgeworICAgICAgICBzd2VlcE1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUoKTsKKyAgICAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRp
b25zU2luY2VMYXN0U3dlZXAgPSAwOworICAgIH0KKworICAgIEFTU0VSVChoYXNoKTsKKyAgICBN
YXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSBjYWNoZUl0ZW07CisgICAgY2FjaGVJdGVtLm1hdGNo
ZWRQcm9wZXJ0aWVzLmFwcGVuZChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcyk7CisgICAg
Y2FjaGVJdGVtLnJhbmdlcyA9IG1hdGNoUmVzdWx0LnJhbmdlczsKKyAgICAvLyBOb3RlIHRoYXQg
d2UgZG9uJ3QgY2FjaGUgdGhlIG9yaWdpbmFsIFJlbmRlclN0eWxlIGluc3RhbmNlLiBJdCBtYXkg
YmUgZnVydGhlciBtb2RpZmllZC4KKyAgICAvLyBUaGUgUmVuZGVyU3R5bGUgaW4gdGhlIGNhY2hl
IGlzIHJlYWxseSBqdXN0IGEgaG9sZGVyIGZvciB0aGUgc3Vic3RydWN0dXJlcyBhbmQgbmV2ZXIg
dXNlZCBhcy1pcy4KKyAgICBjYWNoZUl0ZW0ucmVuZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmUoc3R5bGUpOworICAgIGNhY2hlSXRlbS5wYXJlbnRSZW5kZXJTdHlsZSA9IFJlbmRlclN0eWxl
OjpjbG9uZShwYXJlbnRTdHlsZSk7CisgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmFkZCho
YXNoLCBjYWNoZUl0ZW0pOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmludmFsaWRhdGVNYXRj
aGVkUHJvcGVydGllc0NhY2hlKCkKK3sKKyAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuY2xl
YXIoKTsKK30KKworc3RhdGljIGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit7CisgICAgLy8gRklYTUU6IENTU1Byb3BlcnR5
V2Via2l0V3JpdGluZ01vZGUgbW9kaWZpZXMgc3RhdGUgd2hlbiBhcHBseWluZyB0byBkb2N1bWVu
dCBlbGVtZW50LiBXZSBjYW4ndCBza2lwIHRoZSBhcHBseWluZyBieSBjYWNoaW5nLgorICAgIGlm
IChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpICYmIGVs
ZW1lbnQtPmRvY3VtZW50KCktPndyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdHlsZS0+dW5pcXVlKCkgfHwgKHN0eWxlLT5z
dHlsZVR5cGUoKSAhPSBOT1BTRVVETyAmJiBwYXJlbnRTdHlsZS0+dW5pcXVlKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3R5bGUtPnpvb20oKSAhPSBSZW5kZXJTdHlsZTo6aW5p
dGlhbFpvb20oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIFRoZSBjYWNoZSBhc3N1
bWVzIHN0YXRpYyBrbm93bGVkZ2UgYWJvdXQgd2hpY2ggcHJvcGVydGllcyBhcmUgaW5oZXJpdGVk
LgorICAgIGlmIChwYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1h
dGNoUmVzdWx0KQoreworICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNoUmVzdWx0LmlzQ2Fj
aGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJlc3VsdC5tYXRjaGVk
UHJvcGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkg
OiAwOworICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CisgICAgY29uc3QgTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7CisgICAgaWYgKGNhY2hlSGFz
aCAmJiAoY2FjaGVJdGVtID0gZmluZEZyb21NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNhY2hlSGFz
aCwgbWF0Y2hSZXN1bHQpKSkgeworICAgICAgICAvLyBXZSBjYW4gYnVpbGQgdXAgdGhlIHN0eWxl
IGJ5IGNvcHlpbmcgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gYW4gZWFybGllciBzdHls
ZSBvYmplY3QgYnVpbHQgdXNpbmcgdGhlIHNhbWUgZXhhY3QKKyAgICAgICAgLy8gc3R5bGUgZGVj
bGFyYXRpb25zLiBXZSB0aGVuIG9ubHkgbmVlZCB0byBhcHBseSB0aGUgaW5oZXJpdGVkIHByb3Bl
cnRpZXMsIGlmIGFueSwgYXMgdGhlaXIgdmFsdWVzIGNhbiBkZXBlbmQgb24gdGhlIAorICAgICAg
ICAvLyBlbGVtZW50IGNvbnRleHQuIFRoaXMgaXMgZmFzdCBhbmQgc2F2ZXMgbWVtb3J5IGJ5IHJl
dXNpbmcgdGhlIHN0eWxlIGRhdGEgc3RydWN0dXJlcy4KKyAgICAgICAgbV9zdHlsZS0+Y29weU5v
bkluaGVyaXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgIGlm
IChtX3BhcmVudFN0eWxlLT5pbmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVu
ZGVyU3R5bGUuZ2V0KCkpKSB7CisgICAgICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0g
bV9zdHlsZS0+aW5zaWRlTGluaygpOworICAgICAgICAgICAgLy8gSWYgdGhlIGNhY2hlIGl0ZW0g
cGFyZW50IHN0eWxlIGhhcyBpZGVudGljYWwgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gdGhlIGN1
cnJlbnQgcGFyZW50IHN0eWxlIHRoZW4gdGhlCisgICAgICAgICAgICAvLyByZXN1bHRpbmcgc3R5
bGUgd2lsbCBiZSBpZGVudGljYWwgdG9vLiBXZSBjb3B5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGll
cyBvdmVyIGZyb20gdGhlIGNhY2hlIGFuZCBhcmUgZG9uZS4KKyAgICAgICAgICAgIG1fc3R5bGUt
PmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICAgICAg
Ly8gVW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBsaWtlIGFuIGluaGVy
aXRlZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUgaXQuCisgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IHRydWU7IAorICAg
IH0KKyAgICAvLyBOb3cgd2UgaGF2ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVsZXMgaW4gdGhlIGFw
cHJvcHJpYXRlIG9yZGVyLiBXYWxrIHRoZSBydWxlcyBhbmQgYXBwbHkKKyAgICAvLyBoaWdoLXBy
aW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhl
ciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KKyAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJp
b3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9y
bWFsIG5vdCBpbXBvcnRhbnQKKyAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQuCisgICAg
bV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8dHJ1ZT4o
bWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
dHJ1ZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1
bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KG1hdGNoUmVzdWx0LCB0cnVlLCBt
YXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RV
c2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PHRydWU+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworCisg
ICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29t
KCkgIT0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIG1fZm9udERpcnR5ID0g
dHJ1ZTsKKyAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93Lgor
ICAgIHVwZGF0ZUZvbnQoKTsKKworICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFy
ZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KKyAgICBpZiAobV9saW5lSGVpZ2h0
VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xp
bmVIZWlnaHRWYWx1ZSk7CisKKyAgICAvLyBNYW55IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBm
b250LiBJZiBpdCBjaGFuZ2VzIHdlIGp1c3QgYXBwbHkgYWxsIHByb3BlcnRpZXMuCisgICAgaWYg
KGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAh
PSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKSkKKyAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5
ID0gZmFsc2U7CisKKyAgICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBwcmlvcml0eSBVQSBwcm9wZXJ0
aWVzLgorICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KG1hdGNoUmVzdWx0LCBmYWxz
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFz
dFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICAKKyAgICAvLyBDYWNoZSBvdXIgYm9y
ZGVyIGFuZCBiYWNrZ3JvdW5kIHNvIHRoYXQgd2UgY2FuIGV4YW1pbmUgdGhlbSBsYXRlci4KKyAg
ICBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKKyAgICAKKyAgICAvLyBOb3cgZG8gdGhlIGF1
dGhvciBhbmQgdXNlciBub3JtYWwgcHJpb3JpdHkgcHJvcGVydGllcyBhbmQgYWxsIHRoZSAhaW1w
b3J0YW50IHByb3BlcnRpZXMuCisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4obWF0
Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSArIDEsIG1hdGNo
UmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7
CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPGZhbHNlPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNl
clJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25s
eSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4obWF0Y2hSZXN1bHQsIHRydWUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RV
QVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgCisgICAgbG9hZFBlbmRpbmdJbWFnZXMo
KTsKKyAgICAKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgbG9hZFBlbmRpbmdTaGFkZXJz
KCk7CisjZW5kaWYKKyAgICAKKyAgICBBU1NFUlQoIW1fZm9udERpcnR5KTsKKyAgICAKKyAgICBp
ZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlz
Q2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKG1fZWxlbWVudCwgbV9zdHlsZS5nZXQo
KSwgbV9wYXJlbnRTdHlsZSkpCisgICAgICAgIHJldHVybjsKKyAgICBhZGRUb01hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUobV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRj
aFJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0
IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25zdCBTdHlsZVJ1bGVQYWdlKiByMikKK3sKKyAgICByZXR1
cm4gcjEtPnNlbGVjdG9yKCktPnNwZWNpZmljaXR5KCkgPCByMi0+c2VsZWN0b3IoKS0+c3BlY2lm
aWNpdHkoKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmly
c3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQoreworICAgIGlmICghcnVsZXMpCisgICAg
ICAgIHJldHVybjsKKworICAgIFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4gbWF0Y2hlZFBhZ2VSdWxl
czsKKyAgICBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QobWF0Y2hlZFBhZ2VSdWxlcywgcnVsZXMtPnBh
Z2VSdWxlcygpLCBpc0xlZnRQYWdlLCBpc0ZpcnN0UGFnZSwgcGFnZU5hbWUpOworICAgIGlmICht
YXRjaGVkUGFnZVJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpz
dGFibGVfc29ydChtYXRjaGVkUGFnZVJ1bGVzLmJlZ2luKCksIG1hdGNoZWRQYWdlUnVsZXMuZW5k
KCksIGNvbXBhcmVQYWdlUnVsZXMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1h
dGNoZWRQYWdlUnVsZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVz
KHJlc3VsdCwgbWF0Y2hlZFBhZ2VSdWxlc1tpXS0+cHJvcGVydGllcygpKTsKK30KKwordm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2Uq
PiYgbWF0Y2hlZFJ1bGVzLCBjb25zdCBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBydWxlcywgYm9v
bCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQor
eworICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVQYWdlKiBydWxlID0gcnVs
ZXNbaV07CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JMb2NhbE5hbWUgPSBy
dWxlLT5zZWxlY3RvcigpLT50YWcoKS5sb2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKHNlbGVjdG9y
TG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIHNlbGVjdG9yTG9jYWxOYW1lICE9IHBhZ2VOYW1lKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHBz
ZXVkb1R5cGUgPSBydWxlLT5zZWxlY3RvcigpLT5wc2V1ZG9UeXBlKCk7CisgICAgICAgIGlmICgo
cHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTGVmdFBhZ2UgJiYgIWlzTGVmdFBhZ2Up
CisgICAgICAgICAgICB8fCAocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvUmlnaHRQ
YWdlICYmIGlzTGVmdFBhZ2UpCisgICAgICAgICAgICB8fCAocHNldWRvVHlwZSA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRmlyc3RQYWdlICYmICFpc0ZpcnN0UGFnZSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBs
eSwgdGhlbiBpZ25vcmUgaXQuCisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMg
PSBydWxlLT5wcm9wZXJ0aWVzKCk7CisgICAgICAgIGlmICghcHJvcGVydGllcyB8fCBwcm9wZXJ0
aWVzLT5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBBZGQg
dGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCisgICAgICAgIG1hdGNoZWRS
dWxlcy5hcHBlbmQocnVsZSk7CisgICAgfQorfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVm
dFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKK3sKKyAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9
IGZhbHNlOworICAgIGlmICghbV9yb290RWxlbWVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpCisgICAgICAgIGlzRmlyc3RQYWdlTGVmdCA9IHRydWU7CisKKyAgICByZXR1cm4gKHBh
Z2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAxIDogMCkpICUgMjsKK30KKworYm9vbCBTdHls
ZVJlc29sdmVyOjppc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBJbiBjYXNlIG9mIGZvcmNlZCBsZWZ0L3JpZ2h0IHBhZ2UsIHBhZ2UgYXQgaW5kZXggMSAo
bm90IDApIGNhbiBiZSB0aGUgZmlyc3QgcGFnZS4KKyAgICByZXR1cm4gKCFwYWdlSW5kZXgpOwor
fQorCitTdHJpbmcgU3R5bGVSZXNvbHZlcjo6cGFnZU5hbWUoaW50IC8qIHBhZ2VJbmRleCAqLykg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHBhZ2UgaW5kZXggdG8gcGFnZSBuYW1l
IG1hcHBpbmcuCisgICAgcmV0dXJuICIiOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgTGlzdFR5cGU+
CitzdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJl
ZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdyYXBwZXJNYXAsIExpc3RUeXBlKiBsaXN0VHlwZSkKK3sK
KyAgICBpZiAoIWxpc3RUeXBlKQorICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgc2l6ZSA9
IGxpc3RUeXBlLT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7CisgICAgICAgIENTU1J1bGUqIGNzc1J1bGUgPSBsaXN0VHlwZS0+aXRlbShpKTsKKyAg
ICAgICAgaWYgKGNzc1J1bGUtPmlzSW1wb3J0UnVsZSgpKQorICAgICAgICAgICAgY29sbGVjdENT
U09NV3JhcHBlcnMod3JhcHBlck1hcCwgc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KGNzc1J1
bGUpLT5zdHlsZVNoZWV0KCkpOworICAgICAgICBlbHNlIGlmIChjc3NSdWxlLT5pc01lZGlhUnVs
ZSgpKQorICAgICAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwgc3RhdGlj
X2Nhc3Q8Q1NTTWVkaWFSdWxlKj4oY3NzUnVsZSkpOworICAgICAgICBlbHNlIGlmIChjc3NSdWxl
LT5pc1JlZ2lvblJ1bGUoKSkKKyAgICAgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBw
ZXJNYXAsIHN0YXRpY19jYXN0PFdlYktpdENTU1JlZ2lvblJ1bGUqPihjc3NSdWxlKSk7CisgICAg
ICAgIGVsc2UgaWYgKGNzc1J1bGUtPmlzU3R5bGVSdWxlKCkpIHsKKyAgICAgICAgICAgIENTU1N0
eWxlUnVsZSogY3NzU3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY3NzUnVs
ZSk7CisgICAgICAgICAgICB3cmFwcGVyTWFwLmFkZChjc3NTdHlsZVJ1bGUtPnN0eWxlUnVsZSgp
LCBjc3NTdHlsZVJ1bGUpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb2xs
ZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+
ID4mIHdyYXBwZXJNYXAsIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0V3Jh
cHBlclNldCwgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0KQoreworICAgIGlmICghc3R5
bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBzdHls
ZVNoZWV0V3JhcHBlciA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShzdHlsZVNoZWV0KTsKKyAgICBz
aGVldFdyYXBwZXJTZXQuYWRkKHN0eWxlU2hlZXRXcmFwcGVyKTsKKyAgICBjb2xsZWN0Q1NTT01X
cmFwcGVycyh3cmFwcGVyTWFwLCBzdHlsZVNoZWV0V3JhcHBlci5nZXQoKSk7Cit9CisKK3N0YXRp
YyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENT
U1N0eWxlUnVsZT4gPiYgd3JhcHBlck1hcCwgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
PiYgc2hlZXRXcmFwcGVyU2V0LCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBzdHlsZVNoZWV0cyA9IGRvY3VtZW50LT5zdHlsZVNo
ZWV0cygpLT52ZWN0b3IoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVl
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHN0eWxl
U2hlZXRzW2ldLmdldCgpOworICAgICAgICBpZiAoIXN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVl
dCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJz
KHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7Cisg
ICAgfQorICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHNoZWV0V3JhcHBlclNl
dCwgZG9jdW1lbnQtPnBhZ2VVc2VyU2hlZXQoKSk7Cit9CisKK0NTU1N0eWxlUnVsZSogU3R5bGVS
ZXNvbHZlcjo6ZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1
bGUpCit7CisgICAgaWYgKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuaXNFbXB0eSgpKSB7
CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJN
YXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQp
OworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVy
TWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIGRlZmF1bHRTdHlsZVNoZWV0KTsKKyAg
ICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwg
bV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBxdWlya3NTdHlsZVNoZWV0KTsKKyAgICAgICAg
Y29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHls
ZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBzdmdTdHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENT
U09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NT
T01XcmFwcGVyU2V0LCBtYXRoTUxTdHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3Jh
cHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFw
cGVyU2V0LCBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3Jh
cHBlclNldCwgZnVsbHNjcmVlblN0eWxlU2hlZXQpOworCisgICAgICAgIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3Jh
cHBlclNldCwgZG9jdW1lbnQoKSk7CisgICAgfQorICAgIHJldHVybiBtX3N0eWxlUnVsZVRvQ1NT
T01XcmFwcGVyTWFwLmdldChydWxlKS5nZXQoKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFJl
bmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBpbml0RWxlbWVudCgwKTsKKyAgICBpbml0Rm9yU3R5
bGVSZXNvbHZlKDAsIHN0eWxlKTsKKyAgICBtX3N0eWxlID0gc3R5bGU7CisgICAgYXBwbHlQcm9w
ZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCB2YWx1ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoaWQsIHZhbHVl
KTsKK30KKworaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCkKK3sKKyAgICBzd2l0Y2ggKGlkKSB7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJUb3BDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRleHRGaWxsQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VD
b2xvcjoKKyAgICAvLyBBbHNvIGFsbG93IHNob3J0aGFuZHMgc28gdGhhdCBpbmhlcml0L2luaXRp
YWwgc3RpbGwgd29yay4KKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyTGVmdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQ6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5SdWxlOgorI2lmIEVOQUJMRShTVkcpCisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUZpbGw6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZToKKyNlbmRpZgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKKy8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtcmVnaW9u
cy8jdGhlLWF0LXJlZ2lvbi1zdHlsZS1ydWxlCisvLyBGSVhNRTogYWRkIGluY3JlbWVudGFsIHN1
cHBvcnQgZm9yIG90aGVyIHJlZ2lvbiBzdHlsaW5nIHByb3BlcnRpZXMuCitpbmxpbmUgYm9vbCBT
dHlsZVJlc29sdmVyOjppc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
KQoreworICAgIHN3aXRjaCAoaWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFNWRyBoYW5kbGVzIHpvb21pbmcg
aW4gYSBkaWZmZXJlbnQgd2F5IGNvbXBhcmVkIHRvIENTUy4gVGhlIHdob2xlIGRvY3VtZW50IGlz
IHNjYWxlZCBpbnN0ZWFkCisvLyBvZiBlYWNoIGluZGl2aWR1YWwgbGVuZ3RoIHZhbHVlIGluIHRo
ZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCoo
KQorLy8gbXVsdGlwbGllcyBlYWNoIHJlc29sdmVkIGxlbmd0aCB3aXRoIHRoZSB6b29tIG11bHRp
cGxpZXIgLSBzbyBmb3IgU1ZHIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGF0LgorLy8gVGhvdWdoIGFs
bCBDU1MgdmFsdWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb3V0ZXJtb3N0IDxzdmc+IGVsZW1l
bnRzICh3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcuLi4pCisvLyBuZWVkIHRvIHJlc3BlY3Qg
dGhlIHNjYWxpbmcuIFJlbmRlckJveCAodGhlIHBhcmVudCBjbGFzcyBvZiBSZW5kZXJTVkdSb290
KSBncmFicyB2YWx1ZXMgbGlrZQorLy8gd2lkdGgvaGVpZ2h0L2JvcmRlci9wYWRkaW5nLy4uLiBm
cm9tIHRoZSBSZW5kZXJTdHlsZSAtPiBmb3IgU1ZHIHRoZXNlIHZhbHVlcyB3b3VsZCBuZXZlciBz
Y2FsZSwKKy8vIGlmIHdlJ2QgcGFzcyBhIDEuMCB6b29tIGZhY3RvciBldmVyeWh3ZXJlLiBTbyB3
ZSBvbmx5IHBhc3MgYSB6b29tIGZhY3RvciBvZiAxLjAgZm9yIHNwZWNpZmljCisvLyBwcm9wZXJ0
aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9j
dW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KK2Jvb2wgU3R5bGVSZXNvbHZl
cjo6dXNlU1ZHWm9vbVJ1bGVzKCkKK3sKKyAgICByZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVu
dC0+aXNTVkdFbGVtZW50KCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQorCitz
dGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIExlbmd0aCYgbGVuZ3RoKQorewor
ICAgIExlbmd0aCB3b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0
aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBl
cmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHNlbGVjdG9yLT5zdHlsZSgpLCBz
ZWxlY3Rvci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzZWxlY3Rvci0+c3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpKTsKKyAgICBpZiAod29ya2luZ0xlbmd0aC5pc1VuZGVmaW5lZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCisgICAg
ICAgIHdvcmtpbmdMZW5ndGguc2V0UXVpcmsocHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1ZSgp
KTsKKworICAgIGxlbmd0aCA9IHdvcmtpbmdMZW5ndGg7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8
TGVuZ3RoPiYgbGVuZ3RocywgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCit7CisgICAgLy8gSGFu
ZGxlICdub25lJy4KKyAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlTm9uZSkgeworICAgICAgICAgICAgbGVuZ3Rocy5hcHBlbmQoTGVuZ3Ro
KFVuZGVmaW5lZCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkg
eworICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3Jl
KCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52
YWx1ZSgpOworICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIExlbmd0aCBsZW5n
dGg7CisgICAgICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPihjdXJyVmFsdWUpLCBzZWxlY3RvciwgbGVuZ3RoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGxlbmd0aHMuYXBwZW5kKGxl
bmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCisKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRQb3NpdGlvbihDU1NWYWx1
ZSogdmFsdWUsIExlbmd0aCYgcG9zaXRpb24pCit7CisgICAgLy8gRm9yIG5vdywgd2Ugb25seSBh
Y2NlcHQ6IDxpbnRlZ2VyPiB8ICdhdXRvJworICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Cisg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkp
OworICAgIHBvc2l0aW9uLnNldFZhbHVlKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQoreworICAgIGJvb2wg
aXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Cisg
ICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIW1fcGFyZW50
Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKworICAgIEFTU0VSVCghaXNJbmhl
cml0IHx8ICFpc0luaXRpYWwpOyAvLyBpc0luaGVyaXQgLT4gIWlzSW5pdGlhbCAmJiBpc0luaXRp
YWwgLT4gIWlzSW5oZXJpdAorCisgICAgaWYgKCFhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
KSAmJiAoIWFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxpZFZpc2l0
ZWRMaW5rUHJvcGVydHkoaWQpKSkgeworICAgICAgICAvLyBMaW1pdCB0aGUgcHJvcGVydGllcyB0
aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4K
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0luaGVyaXQgJiYgbV9wYXJlbnRT
dHlsZSAmJiAhbV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMo
KSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQorICAgICAgICBtX3Bh
cmVudFN0eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOworCisgICAg
Ly8gY2hlY2sgbG9va3VwIHRhYmxlIGZvciBpbXBsZW1lbnRhdGlvbnMgYW5kIHVzZSB3aGVuIGF2
YWlsYWJsZQorICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IG1fc3R5bGVCdWls
ZGVyLnByb3BlcnR5SGFuZGxlcihpZCk7CisgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKSB7Cisg
ICAgICAgIGlmIChpc0luaGVyaXQpCisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZh
bHVlKHRoaXMpOworICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCisgICAgICAgICAgICBoYW5k
bGVyLmFwcGx5SW5pdGlhbFZhbHVlKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBo
YW5kbGVyLmFwcGx5VmFsdWUodGhpcywgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpIDogMDsK
KworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7CisKKyAg
ICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMg
aW50byB0aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVuZAorICAgIC8vIFJlbmRlclN0eWxlIHZh
bHVlcy4gU2hvcnRoYW5kcyAoZS5nLiBib3JkZXIsIGJhY2tncm91bmQpIG9jY3VyIGluIHRoaXMg
bGlzdCBhcyB3ZWxsIGFuZAorICAgIC8vIGFyZSBvbmx5IGhpdCB3aGVuIG1hcHBpbmcgImluaGVy
aXQiIG9yICJpbml0aWFsIiBpbnRvIGZyb250LWVuZCB2YWx1ZXMuCisgICAgc3dpdGNoIChpZCkg
eworICAgIC8vIGxpc3RzCisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6CisgICAgICAgIC8v
IGxpc3Qgb2Ygc3RyaW5nLCB1cmksIGNvdW50ZXIsIGF0dHIsIGkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gRklYTUU6IEluIENTUzMsIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gaW5oZXJpdCBj
b250ZW50LiBJbiBDU1MyIGl0IGlzIG5vdC4gVGhpcworICAgICAgICAgICAgLy8gbm90ZSBpcyBh
IHJlbWluZGVyIHRoYXQgZXZlbnR1YWxseSAiaW5oZXJpdCIgbmVlZHMgdG8gYmUgc3VwcG9ydGVk
LgorCisgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgICAgICAgICAgbV9zdHls
ZS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgYm9vbCBkaWRTZXQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5h
ZHZhbmNlKCkpIHsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdl
OjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlk
U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyNpZiBFTkFCTEUoQ1NT
X0lNQUdFX1NFVCkKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1hZ2VTZXRW
YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoc2V0T3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VT
ZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0g
dHJ1ZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChp
dGVtLT5pc0ltYWdlVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRp
Y19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KGl0ZW0pOworCisgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJp
bmcoKSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFs
dWUtPmlzQXR0cigpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1l
c3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZvbyk/CisgICAgICAgICAgICAgICAgICAg
IGlmIChtX3N0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxsQXRvbSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRy
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwo
KSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZh
Y3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlCisgICAgICAgICAg
ICAgICAgICAgIG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQ291bnRl
cigpKSB7CisgICAgICAgICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50ZXJWYWx1ZSA9IGNvbnRl
bnRWYWx1ZS0+Z2V0Q291bnRlclZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIEVMaXN0U3R5
bGVUeXBlIGxpc3RTdHlsZVR5cGUgPSBOb25lTGlzdFN0eWxlOworICAgICAgICAgICAgICAgICAg
ICBpbnQgbGlzdFN0eWxlSWRlbnQgPSBjb3VudGVyVmFsdWUtPmxpc3RTdHlsZUlkZW50KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RT
dHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKKyAgICAgICAgICAgICAg
ICAgICAgT3duUHRyPENvdW50ZXJDb250ZW50PiBjb3VudGVyID0gYWRvcHRQdHIobmV3IENvdW50
ZXJDb250ZW50KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5bGVUeXBlLCBjb3Vu
dGVyVmFsdWUtPnNlcGFyYXRvcigpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dENvbnRlbnQoY291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAg
IGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5RdW90ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldENvbnRlbnQoT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVvdGU6CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9PcGVuUXVvdGU6
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE5PX09QRU5fUVVP
VEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVOb0Nsb3NlUXVvdGU6CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsIGFu
ZCBub25lIGRvIG5vdCBoYXZlIGFueSBlZmZlY3QuCisgICAgICAgICAgICAgICAgICAgICAgICB7
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICghZGlkU2V0KQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPmNs
ZWFyQ29udGVudCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVF1b3RlczoKKyAgICAgICAgaWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAg
aWYgKG1fcGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKG1f
cGFyZW50U3R5bGUtPnF1b3RlcygpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMo
MCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLT5p
c1ZhbHVlTGlzdCgpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNf
Y2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRh
ID0gUXVvdGVzRGF0YTo6Y3JlYXRlKGxpc3QtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmICgh
ZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm47IC8vIE91dCBvZiBtZW1vcnkKKyAgICAgICAg
ICAgIFN0cmluZyogcXVvdGVzID0gZGF0YS0+ZGF0YSgpOworICAgICAgICAgICAgZm9yIChDU1NW
YWx1ZUxpc3RJdGVyYXRvciBpID0gbGlzdDsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Cisg
ICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworICAg
ICAgICAgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSk7CisgICAgICAg
ICAgICAgICAgcXVvdGVzW2kuaW5kZXgoKV0gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhhZG9w
dFJlZihkYXRhKSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpKTsKKyAgICAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKGFkb3B0UmVmKFF1b3Rlc0RhdGE6OmNyZWF0ZSgwKSkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZh
bWlseTogeworICAgICAgICAvLyBsaXN0IG9mIHN0cmluZ3MgYW5kIGlkcworICAgICAgICBpZiAo
aXNJbmhlcml0KSB7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9udERlc2Ny
aXB0aW9uID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShwYXJlbnRG
b250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkpOworICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRGb250RGVz
Y3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkpOworICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gaW5p
dGlhbERlc2MgPSBGb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5l
cmljIGZhbWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UKKyAgICAgICAgICAgIC8vIHRvIG5vbi1t
b25vc3BhY2UuCisgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkg
JiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKKyAgICAgICAgICAgICAg
ICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNr
ZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRT
aXplKCkgLSAxLCBmYWxzZSkpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVy
aWNGYW1pbHkoaW5pdGlhbERlc2MuZ2VuZXJpY0ZhbWlseSgpKTsKKyAgICAgICAgICAgIGlmICgh
aW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKS5mYW1pbHlJc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpKTsK
KyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RmFt
aWx5JiBmaXJzdEZhbWlseSA9IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOworICAgICAg
ICBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gMDsKKworICAgICAgICAvLyBCZWZvcmUgbWFwcGlu
ZyBpbiBhIG5ldyBmb250LWZhbWlseSBwcm9wZXJ0eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5l
cmljIGZhbWlseS4KKyAgICAgICAgYm9vbCBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSA9
IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCk7CisgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworCisg
ICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsg
aS5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwor
ICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKKyAgICAgICAgICAgIEF0
b21pY1N0cmluZyBmYWNlOworICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVj
a2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7CisgICAgICAgICAgICBpZiAoY29udGVudFZhbHVl
LT5pc1N0cmluZygpKQorICAgICAgICAgICAgICAgIGZhY2UgPSBjb250ZW50VmFsdWUtPmdldFN0
cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICBlbHNlIGlmIChzZXR0aW5ncykgeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEJvZHk6CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBz
ZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAgICAgICAgICAg
ICAgZmFjZSA9IHNlcmlmRmFtaWx5OworICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5KTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNhbnNT
ZXJpZjoKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHNhbnNTZXJpZkZhbWlseTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2Ny
aXB0aW9uOjpTYW5zU2VyaWZGYW1pbHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ3Vyc2l2ZToKKyAgICAgICAgICAgICAgICAgICAg
ZmFjZSA9IGN1cnNpdmVGYW1pbHk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVGYW50
YXN5OgorICAgICAgICAgICAgICAgICAgICBmYWNlID0gZmFudGFzeUZhbWlseTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0
aW9uOjpGYW50YXN5RmFtaWx5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFjZToKKyAgICAgICAgICAgICAgICAgICAgZmFj
ZSA9IG1vbm9zcGFjZUZhbWlseTsKKyAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0UGljdG9ncmFwaDoKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHBpY3RvZ3JhcGhGYW1p
bHk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5
KEZvbnREZXNjcmlwdGlvbjo6UGljdG9ncmFwaEZhbWlseSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFmYWNlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGlmICghY3VyckZhbWlseSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBGaWxsaW5nIGluIHRoZSBmaXJzdCBmYW1pbHkuCisg
ICAgICAgICAgICAgICAgICAgIGZpcnN0RmFtaWx5LnNldEZhbWlseShmYWNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmlyc3RGYW1pbHkuYXBwZW5kRmFtaWx5KDApOyAvLyBSZW1vdmUgYW55IGlu
aGVyaXRlZCBmYW1pbHktZmFsbGJhY2sgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgY3VyckZh
bWlseSA9ICZmaXJzdEZhbWlseTsKKyAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldElzU3BlY2lmaWVkRm9udChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpID09IEZv
bnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFy
ZWRGb250RmFtaWx5OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3RmFtaWx5LT5z
ZXRGYW1pbHkoZmFjZSk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJGYW1pbHktPmFwcGVuZEZh
bWlseShuZXdGYW1pbHkpOworICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5ID0gbmV3RmFt
aWx5LmdldCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIFdlIGNhbid0IGNhbGwgdXNlRml4ZWREZWZhdWx0U2l6ZSgpIHVudGlsIGFs
bCBuZXcgZm9udCBmYW1pbGllcyBoYXZlIGJlZW4gYWRkZWQKKyAgICAgICAgLy8gSWYgY3VyckZh
bWlseSBpcyBub24temVybyB0aGVuIHdlIHNldCBhdCBsZWFzdCBvbmUgZmFtaWx5IG9uIHRoaXMg
ZGVzY3JpcHRpb24uCisgICAgICAgIGlmIChjdXJyRmFtaWx5KSB7CisgICAgICAgICAgICBpZiAo
Zm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVk
RGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkKKyAgICAgICAg
ICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZCht
X2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtl
eXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKworICAg
ICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuOworICAgIH0KKy8vIHNob3J0aGFuZCBwcm9wZXJ0aWVzCisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6CisgICAgICAgIGlmIChpc0luaXRpYWwpIHsKKyAgICAg
ICAgICAgIG1fc3R5bGUtPmNsZWFyQmFja2dyb3VuZExheWVycygpOworICAgICAgICAgICAgbV9z
dHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKCkpOworICAgICAgICB9IGVsc2UgaWYgKGlz
SW5oZXJpdCkgeworICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMo
Km1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSk7CisgICAgICAgICAgICBtX3N0eWxl
LT5zZXRCYWNrZ3JvdW5kQ29sb3IobV9wYXJlbnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFz
azoKKyAgICAgICAgaWYgKGlzSW5pdGlhbCkKKyAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyTWFz
a0xheWVycygpOworICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCisgICAgICAgICAgICBtX3N0
eWxlLT5pbmhlcml0TWFza0xheWVycygqbV9wYXJlbnRTdHlsZS0+bWFza0xheWVycygpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlGb250OgorICAgICAgICBpZiAoaXNJ
bmhlcml0KSB7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
bV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRMaW5lSGVpZ2h0KG1fcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICBt
X2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwpIHsKKyAgICAgICAg
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygp
OworICAgICAgICAgICAgQVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUg
cmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5k
IHRodXMgaGF2ZSBzZXR0aW5ncworICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERl
c2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLmRvY3VtZW50
KCktPnByaW50aW5nKCkpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFy
ZEZvbnRGYW1pbHkgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+c3RhbmRhcmRG
b250RmFtaWx5KCk7CisgICAgICAgICAgICBpZiAoIXN0YW5kYXJkRm9udEZhbWlseS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRG
YW1pbHkoc3RhbmRhcmRGb250RmFtaWx5KTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1pbHkoMCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NW
YWx1ZVh4U21hbGwgKyAxKTsKKyAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlv
biwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1
bSwgZmFsc2UpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUg
PSAwOworICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Cisg
ICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUpIHsKKyAgICAgICAgICAgIG1fc3R5bGUt
PnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAg
ICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworCisgICAgICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uOworICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRp
b24pOworCisgICAgICAgICAgICAvLyBEb3VibGUtY2hlY2sgYW5kIHNlZSBpZiB0aGUgdGhlbWUg
ZGlkIGFueXRoaW5nLiBJZiBub3QsIGRvbid0IGJvdGhlciB1cGRhdGluZyB0aGUgZm9udC4KKyAg
ICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkgeworICAgICAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVuZGVyaW5nIG1vZGUgYW5kIHByaW50ZXIgZm9u
dCBzZXR0aW5ncyBhcmUgdXBkYXRlZC4KKyAgICAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0aGlz
IGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNldHRp
bmdzCisgICAgICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2Rl
KHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLmRvY3VtZW50KCktPnByaW50aW5n
KCkpOworCisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KKyAgICAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6
ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tlci5kb2N1bWVudCgpLCBtX3N0eWxlLmdldCgpLCBm
b250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmll
ZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkgeworICAgICAgICAgICAgRm9udFZhbHVlKiBmb250
ID0gc3RhdGljX2Nhc3Q8Rm9udFZhbHVlKj4odmFsdWUpOworICAgICAgICAgICAgaWYgKCFmb250
LT5zdHlsZSB8fCAhZm9udC0+dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0CisgICAgICAgICAgICAg
ICAgfHwgIWZvbnQtPnNpemUgfHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZvbnQtPmZhbWlseSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1By
b3BlcnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOworICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQtPndlaWdo
dC5nZXQoKSk7CisgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcHJvcGVydGllcyBjYW4gZGly
dHkgb3VyIGZvbnQgYnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZvbnQncworICAgICAg
ICAgICAgLy8gcHJvcGVydGllcyBiYWNrLCB3aGljaCBpcyBzYWZlLiBIb3dldmVyIGlmIGZvbnQt
c2l6ZSBpcyB1c2luZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxsCisgICAgICAgICAgICAvLyBuZWVk
IHF1ZXJ5IHRoZSBkaXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0byBnZXQgdGhlIGNvbXB1dGVkIHNp
emUuIFRvIGJlIHNhZmUgaW4gdGhpcworICAgICAgICAgICAgLy8gY2FzZSwgbGV0J3MganVzdCB1
cGRhdGUgdGhlIGZvbnQgbm93LgorICAgICAgICAgICAgdXBkYXRlRm9udCgpOworICAgICAgICAg
ICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsK
KworICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBmb250LT5saW5lSGVpZ2h0LmdldCgp
OworCisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9u
dC0+ZmFtaWx5LmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBD
U1MzIFByb3BlcnRpZXMKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Qm94U2hhZG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFk
b3c6IHsKKyAgICAgICAgaWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgaWYgKGlkID09IENT
U1Byb3BlcnR5VGV4dFNoYWRvdykKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdHlsZS0+c2V0
VGV4dFNoYWRvdyhtX3BhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hh
ZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3N0eWxlLT5zZXRCb3hTaGFkb3cobV9wYXJlbnRTdHlsZS0+Ym94U2hh
ZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93
KCkpKSA6IG51bGxwdHIpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJp
bWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCisgICAgICAgICAgICByZXR1cm4gaWQgPT0g
Q1NTUHJvcGVydHlUZXh0U2hhZG93ID8gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6
IG1fc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKworICAgICAgICBpZiAoIXZhbHVlLT5p
c1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGZvciAoQ1NTVmFs
dWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAg
ICAgICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7CisgICAgICAgICAgICBp
ZiAoIWN1cnJWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1
ZSo+KGN1cnJWYWx1ZSk7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5n
dGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAg
ICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290
RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+
Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVt
LT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIFNoYWRvd1N0eWxl
IHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOworICAgICAgICAgICAgQ29sb3IgY29sb3I7
CisgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCisgICAgICAgICAgICAgICAgY29sb3IgPSBj
b2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICBl
bHNlIGlmIChtX3N0eWxlKQorICAgICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+Y29sb3Io
KTsKKworICAgICAgICAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0
cihuZXcgU2hhZG93RGF0YShJbnRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHls
ZSwgaWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNv
bG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KSk7CisgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJv
cGVydHlUZXh0U2hhZG93KQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTaGFkb3co
c2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0
aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgo
KSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3hSZWZsZWN0OiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJveFJl
ZmxlY3QsIEJveFJlZmxlY3QpCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkgeworICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxl
Y3QoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZh
bHVlLT5pc1JlZmxlY3RWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENT
U1JlZmxlY3RWYWx1ZSogcmVmbGVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUmVmbGVjdFZhbHVl
Kj4odmFsdWUpOworICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0g
U3R5bGVSZWZsZWN0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0
aW9uKHJlZmxlY3RWYWx1ZS0+ZGlyZWN0aW9uKCkpOworICAgICAgICBpZiAocmVmbGVjdFZhbHVl
LT5vZmZzZXQoKSkKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFs
dWUtPm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBl
cmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwor
ICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOworICAgICAgICBtYXBOaW5lUGllY2VJbWFn
ZShpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOworICAgICAgICByZWZsZWN0aW9uLT5z
ZXRNYXNrKG1hc2spOworCisgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QocmVmbGVjdGlv
bi5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVy
dHlPcGFjaXR5OgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlU
SVZFKG9wYWNpdHksIE9wYWNpdHkpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3Bl
cnR5U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2U6IC8vIE9ubHkgdXNlZCBpbiBAZm9u
dC1mYWNlIHJ1bGVzLgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtblJ1bGU6CisgICAgICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIG1fc3R5
bGUtPnNldENvbHVtblJ1bGVDb2xvcihtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5p
c1ZhbGlkKCkgPyBtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSA6IG1fcGFyZW50U3R5
bGUtPmNvbG9yKCkpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKG1f
cGFyZW50U3R5bGUtPmNvbHVtblJ1bGVTdHlsZSgpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNl
dENvbHVtblJ1bGVXaWR0aChtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKQorICAgICAgICAgICAgbV9zdHlsZS0+cmVzZXRDb2x1
bW5SdWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
cXVlZToKKyAgICAgICAgaWYgKCFtX3BhcmVudE5vZGUgfHwgIXZhbHVlLT5pc0luaGVyaXRlZFZh
bHVlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVE
aXJlY3Rpb24obV9wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKKyAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5jcmVtZW50
KCkpOworICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQobV9wYXJlbnRTdHlsZS0+bWFy
cXVlZVNwZWVkKCkpOworICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KG1fcGFy
ZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7CisgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1
ZWVCZWhhdmlvcihtX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRpb246IHsKKyAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZUxvb3BDb3VudCwgTWFycXVl
ZUxvb3BDb3VudCkKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
SW5maW5pdGUpCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsg
Ly8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc051bWJlcigpKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3Vu
dChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVlZDogeworICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVlU3BlZWQsIE1hcnF1ZWVTcGVlZCkKKyAgICAg
ICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KGludCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICBz
d2l0Y2ggKGlkZW50KSB7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2xvdzoKKyAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg4NSk7IC8vIDg1bXNlYy4gVGhl
IFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlRmFzdDoKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQo
MTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQor
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOworICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3Vu
dCBzdXBwb3J0LgorICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2
ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDogeworICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChtYXJxdWVlSW5jcmVtZW50LCBNYXJxdWVlSW5jcmVtZW50KQorICAg
ICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFs
bDoKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgx
LCBGaXhlZCkpOyAvLyAxcHguCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJ
bmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6Cisg
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZp
eGVkKSk7IC8vIDM2cHguCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZl
cnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxl
KTsKKyAgICAgICAgICAgIGlmICghbWFycXVlZUxlbmd0aC5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobWFycXVlZUxlbmd0aCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TGluZUNsYW1wOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJ
TUlUSVZFKGxpbmVDbGFtcCwgTGluZUNsYW1wKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdExvY2FsZTogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTChsb2NhbGUsIExvY2FsZSk7CisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUobnVsbEF0b20p
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUocHJpbWl0aXZl
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX3N0
eWxlLT5sb2NhbGUoKSkpOworICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dFNpemVBZGp1c3Q6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4
dFNpemVBZGp1c3QsIFRleHRTaXplQWRqdXN0KQorICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
IHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgc2V0VGV4dFNpemVBZGp1c3QocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVBdXRvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoREFTSEJPQVJE
X1NVUFBPUlQpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdERhc2hib2FyZFJlZ2lvbjogewor
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChkYXNoYm9hcmRSZWdpb25zLCBEYXNo
Ym9hcmRSZWdpb25zKQorICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZU5vbmUpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbnMoUmVu
ZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiByZWdpb24gPSBwcmltaXRpdmVW
YWx1ZS0+Z2V0RGFzaGJvYXJkUmVnaW9uVmFsdWUoKTsKKyAgICAgICAgaWYgKCFyZWdpb24pCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiBmaXJzdCA9IHJl
Z2lvbjsKKyAgICAgICAgd2hpbGUgKHJlZ2lvbikgeworICAgICAgICAgICAgTGVuZ3RoIHRvcCA9
IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnRvcCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50
U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJl
Z2lvbi0+cmlnaHQoKSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAg
IExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5ib3R0b20oKSwgc3R5
bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29u
dmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+bGVmdCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUpOworCisgICAgICAgICAgICBpZiAodG9wLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAg
ICAgdG9wID0gTGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAocmlnaHQuaXNVbmRlZmluZWQoKSkK
KyAgICAgICAgICAgICAgICByaWdodCA9IExlbmd0aCgpOworICAgICAgICAgICAgaWYgKGJvdHRv
bS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGJvdHRvbSA9IExlbmd0aCgpOworICAg
ICAgICAgICAgaWYgKGxlZnQuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBsZWZ0ID0g
TGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGlmIChyZWdpb24tPm1faXNDaXJjbGUpCisgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9u
OjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdp
b24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOworICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9u
LT5tX2lzUmVjdGFuZ2xlKQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJl
Z2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRv
cCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsK
KyAgICAgICAgICAgIHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0LmdldCgpOworICAgICAgICB9CisK
KyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNEYXNoYm9hcmRSZWdpb25zKHRy
dWUpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dFN0cm9rZVdpZHRoOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKHRleHRTdHJva2VXaWR0aCwgVGV4dFN0cm9rZVdpZHRoKQorICAgICAgICBmbG9hdCB3
aWR0aCA9IDA7CisgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZVRoaW46CisgICAgICAgIGNhc2UgQ1NTVmFsdWVNZWRpdW06
CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUaGljazogeworICAgICAgICAgICAgZG91YmxlIHJlc3Vs
dCA9IDEuMCAvIDQ4OworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlTWVkaXVtKQorICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUaGlj
aykKKyAgICAgICAgICAgICAgICByZXN1bHQgKj0gNTsKKyAgICAgICAgICAgIHdpZHRoID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1T
KS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdp
ZHRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VHJhbnNmb3JtOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9y
bSwgVHJhbnNmb3JtKTsKKyAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwor
ICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RF
bGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOworICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm0o
b3BlcmF0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFBlcnNwZWN0aXZlOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KHBlcnNwZWN0aXZlLCBQZXJzcGVjdGl2ZSkKKworICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldFBlcnNw
ZWN0aXZlKDApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZmxv
YXQgcGVyc3BlY3RpdmVWYWx1ZTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0
aCgpKQorICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAg
ICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRyZWF0IHZhbHVlbGVzcyBudW1i
ZXJzIGFzIHB4LgorICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAocGVyc3BlY3RpdmVWYWx1ZSA+PSAwLjBmKQorICAgICAgICAgICAg
bV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKKyAgICAgICAg
aWYgKGlzSW5pdGlhbCkKKyAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQW5pbWF0aW9ucygpOwor
ICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCisgICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0
QW5pbWF0aW9ucyhtX3BhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CisgICAgICAgIGlmIChpc0lu
aXRpYWwpCisgICAgICAgICAgICBtX3N0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CisgICAgICAg
IGVsc2UgaWYgKGlzSW5oZXJpdCkKKyAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRUcmFuc2l0
aW9ucyhtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ1NTUHJvcGVydHlQb2ludGVyRXZlbnRzOgorICAgIHsKKyNpZiBFTkFCTEUoREFTSEJP
QVJEX1NVUFBPUlQpCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82NTYxMDc3PiBXb3JrIGFy
b3VuZCB0aGUgU3RvY2tzIHdpZGdldCdzIG1pc3VzZSBvZiB0aGUKKyAgICAgICAgLy8gcG9pbnRl
ci1ldmVudHMgcHJvcGVydHkgYnkgbm90IGFwcGx5aW5nIGl0IGluIERhc2hib2FyZC4KKyAgICAg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7
CisgICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJk
Q29tcGF0aWJpbGl0eU1vZGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHBvaW50ZXJFdmVudHMs
IFBvaW50ZXJFdmVudHMpCisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6IHsK
KyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGFwSGlnaGxpZ2h0Q29sb3IsIFRh
cEhpZ2hsaWdodENvbG9yKTsKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3Io
Y29sKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShPVkVSRkxP
V19TQ1JPTExJTkcpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5n
OiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHVzZVRvdWNoT3ZlcmZsb3dT
Y3JvbGxpbmcsIFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcpOworICAgICAgICBpZiAoIXByaW1p
dGl2ZVZhbHVlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG1fc3R5bGUtPnNldFVzZVRv
dWNoT3ZlcmZsb3dTY3JvbGxpbmcocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVUb3VjaCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIENTU1By
b3BlcnR5SW52YWxpZDoKKyAgICAgICAgcmV0dXJuOworICAgIC8vIERpcmVjdGlvbmFsIHByb3Bl
cnRpZXMgYXJlIHJlc29sdmVkIGJ5IHJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KCkgYmVm
b3JlIHRoZSBzd2l0Y2guCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kQ29sb3I6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckVuZFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJFbmRXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnQ6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0Q29sb3I6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlclN0YXJ0U3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlclN0YXJ0V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlQ29sb3I6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3JkZXJCZWZvcmVXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
QWZ0ZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyQ29sb3I6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyU3R5bGU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckFmdGVyV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
cmdpbkVuZDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luU3RhcnQ6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFyZ2luQWZ0ZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkNvbGxhcHNl
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZvcmVDb2xsYXBzZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luVG9wQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hcmdpbkJvdHRvbUNvbGxhcHNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5n
RW5kOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nU3RhcnQ6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdCZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFBhZGRpbmdBZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbFdpZHRoOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2dpY2FsSGVpZ2h0OgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNaW5Mb2dpY2FsV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1p
bkxvZ2ljYWxIZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxXaWR0
aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoKKyAgICB7Cisg
ICAgICAgIENTU1Byb3BlcnR5SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlv
bkF3YXJlUHJvcGVydHkoaWQsIG1fc3R5bGUtPmRpcmVjdGlvbigpLCBtX3N0eWxlLT53cml0aW5n
TW9kZSgpKTsKKyAgICAgICAgQVNTRVJUKG5ld0lkICE9IGlkKTsKKyAgICAgICAgcmV0dXJuIGFw
cGx5UHJvcGVydHkobmV3SWQsIHZhbHVlKTsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZv
bnRTdHJldGNoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlUZXh0TGluZVRocm91Z2g6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaENv
bG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hNb2RlOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dExpbmVUaHJvdWdoV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRPdmVybGluZU1vZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZVN0eWxl
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVXaWR0aDoKKyAgICBjYXNlIENTU1By
b3BlcnR5VGV4dFVuZGVybGluZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZUNv
bG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lTW9kZToKKyAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dFVuZGVybGluZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5k
ZXJsaW5lV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0OgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RW1waGFzaXM6CisgICAgICAgIHJldHVybjsKKworICAgIC8vIENTUyBUZXh0IExheW91
dCBNb2R1bGUgTGV2ZWwgMzogVmVydGljYWwgd3JpdGluZyBzdXBwb3J0CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFdyaXRpbmdNb2RlOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMX0FORF9QUklNSVRJVkUod3JpdGluZ01vZGUsIFdyaXRpbmdNb2RlKQorICAgICAgICAv
LyBGSVhNRTogSXQgaXMgbm90IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBs
eWluZyBzdHlsZS4KKyAgICAgICAgaWYgKCFpc0luaGVyaXQgJiYgIWlzSW5pdGlhbCAmJiBtX2Vs
ZW1lbnQgJiYgbV9lbGVtZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCkpCisgICAgICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2Rl
U2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKG1fc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBIb3Jpem9udGFsIDogVmVydGljYWwpOworICAgICAgICBzZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFpbjogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTChsaW5lQm94Q29udGFpbiwgTGluZUJveENvbnRhaW4pCisgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5v
bmUpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVCb3hDb250YWluKExpbmVCb3hDb250
YWluTm9uZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IXZhbHVlLT5pc0NTU0xpbmVCb3hDb250YWluVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBDU1NMaW5lQm94Q29udGFpblZhbHVlKiBsaW5lQm94Q29udGFpblZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgbV9z
dHlsZS0+c2V0TGluZUJveENvbnRhaW4obGluZUJveENvbnRhaW5WYWx1ZS0+dmFsdWUoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVJ
bnNpZGU6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHdyYXBTaGFwZUluc2lk
ZSwgV3JhcFNoYXBlSW5zaWRlKTsKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlQXV0bykKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldFdyYXBTaGFwZUluc2lkZSgw
KTsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU2hhcGUoKSkKKyAgICAgICAg
ICAgIG1fc3R5bGUtPnNldFdyYXBTaGFwZUluc2lkZShwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVW
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNo
YXBlT3V0c2lkZToKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwod3JhcFNoYXBl
T3V0c2lkZSwgV3JhcFNoYXBlT3V0c2lkZSk7CisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRXcmFwU2hhcGVP
dXRzaWRlKDApOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKQor
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0V3JhcFNoYXBlT3V0c2lkZShwcmltaXRpdmVWYWx1ZS0+
Z2V0U2hhcGVWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ1NTIEZvbnRzIE1v
ZHVsZSBMZXZlbCAzCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGlu
Z3M6IHsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7CisgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRp
b24obV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdmFsdWUt
PmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAg
ICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1
ZSk7CisgICAgICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRG
ZWF0dXJlU2V0dGluZ3M6OmNyZWF0ZSgpOworICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3Ro
KCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAg
IENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAg
ICAgICAgIGlmICghaXRlbS0+aXNGb250RmVhdHVyZVZhbHVlKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBGb250RmVhdHVyZVZhbHVlKiBmZWF0dXJlID0gc3RhdGlj
X2Nhc3Q8Rm9udEZlYXR1cmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgc2V0dGluZ3MtPmFw
cGVuZChGb250RmVhdHVyZShmZWF0dXJlLT50YWcoKSwgZmVhdHVyZS0+dmFsdWUoKSkpOworICAg
ICAgICB9CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGZWF0dXJlU2V0dGluZ3Moc2V0dGlu
Z3MucmVsZWFzZSgpKTsKKyAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcjogeworICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7CisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMg
b3BlcmF0aW9uczsKKyAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0
eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucykpCisgICAgICAgICAgICBtX3N0
eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYKKyNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRHcmlkQ29sdW1uczogeworICAgICAgICBWZWN0b3I8TGVuZ3RoPiBsZW5ndGhzOworICAgICAg
ICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIGxlbmd0aHMsIHRoaXMpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX3N0eWxlLT5zZXRHcmlkQ29sdW1ucyhsZW5ndGhzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJv
d3M6IHsKKyAgICAgICAgVmVjdG9yPExlbmd0aD4gbGVuZ3RoczsKKyAgICAgICAgaWYgKCFjcmVh
dGVHcmlkVHJhY2tMaXN0KHZhbHVlLCBsZW5ndGhzLCB0aGlzKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgbV9zdHlsZS0+c2V0R3JpZFJvd3MobGVuZ3Rocyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZENvbHVtbjogeworICAg
ICAgICBMZW5ndGggY29sdW1uOworICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1
ZSwgY29sdW1uKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zdHlsZS0+c2V0R3Jp
ZEl0ZW1Db2x1bW4oY29sdW1uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0R3JpZFJvdzogeworICAgICAgICBMZW5ndGggcm93OworICAgICAgICBp
ZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgcm93KSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgbV9zdHlsZS0+c2V0R3JpZEl0ZW1Sb3cocm93KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorCisgICAgLy8gVGhlc2UgcHJvcGVydGllcyBhcmUgaW1wbGVtZW50ZWQg
aW4gdGhlIFN0eWxlQnVpbGRlciBsb29rdXAgdGFibGUuCisgICAgY2FzZSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRBdHRhY2htZW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW46
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbjoKKyAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uWToKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRSZXBlYXRZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b206CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21MZWZ0UmFkaXVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJCb3R0b21SaWdodFJhZGl1czoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5
bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJDb2xsYXBzZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJJbWFnZU91dHNldDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VSZXBlYXQ6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2U6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckltYWdlU291cmNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdp
ZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJSYWRpdXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0OgorICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJSaWdodFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTcGFjaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJUb3BDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJh
ZGl1czoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXM6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJU
b3BXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGg6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvdHRvbToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm94U2l6aW5nOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlDYXB0aW9uU2lkZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Q2xlYXI6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUNsaXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlDb3Vu
dGVyUmVzZXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5RGlyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlEaXNwbGF5OgorICAgIGNhc2UgQ1NT
UHJvcGVydHlFbXB0eUNlbGxzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9hdDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udFNpemU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRX
ZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUhlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5
SW1hZ2VSZW5kZXJpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxlZnQ6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUxldHRlclNwYWNpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0
eWxlSW1hZ2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVBvc2l0aW9uOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVUeXBlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW46
CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbToKKyAgICBjYXNlIENTU1Byb3BlcnR5
TWFyZ2luTGVmdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eU1hcmdpblRvcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWF4SGVpZ2h0OgorICAg
IGNhc2UgQ1NTUHJvcGVydHlNYXhXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5XaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3Jw
aGFuczoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZToKKyAgICBjYXNlIENTU1Byb3BlcnR5
T3V0bGluZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0OgorICAgIGNh
c2UgQ1NTUHJvcGVydHlPdXRsaW5lU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVX
aWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3c6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eU92ZXJmbG93WDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlQYWRkaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nTGVmdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGlu
Z1JpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nVG9wOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlQYWdlQnJlYWtBZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrQmVmb3Jl
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtJbnNpZGU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVBvc2l0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlSZXNpemU6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVJpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlTaXplOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlTcGVhazoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGFibGVMYXlvdXQ6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRBbGlnbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRJbmRlbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRl
eHRPdmVyZmxvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFJlbmRlcmluZzoKKyAgICBjYXNl
IENTU1Byb3BlcnR5VGV4dFRyYW5zZm9ybToKKyAgICBjYXNlIENTU1Byb3BlcnR5VG9wOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlQmlkaToKKyAgICBjYXNlIENTU1Byb3BlcnR5VmVydGlj
YWxBbGlnbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VmlzaWJpbGl0eToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFu
aW1hdGlvbkRpcmVjdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVy
YXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uUGxheVN0YXRlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRp
b25UaW1pbmdGdW5jdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXBwZWFyYW5jZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0aW86CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QmFja2dyb3VuZENsaXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21w
b3NpdGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRPcmlnaW46CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJGaXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6
b250YWxTcGFjaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFnZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJveEFsaWduOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb246CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJveEZsZXhHcm91cDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94TGluZXM6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yZGluYWxHcm91cDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm94T3JpZW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hQYWNrOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2xvckNvcnJlY3Rpb246CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtbkF4aXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
bkJyZWFrQWZ0ZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQmVmb3Jl
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0luc2lkZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQ291bnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtbkdhcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlU3R5bGU6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Q29sdW1uczoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uU3BhbjoKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEZsZXg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhBbGlnbjoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0RmxleERpcmVjdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
RmxleEZsb3c6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhJdGVtQWxpZ246CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhMaW5lUGFjazoKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0RmxleE9yZGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4UGFjazoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleFdyYXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEZsb3dGcm9tOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bzoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEtlcm5pbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEZvbnRTbW9vdGhpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRWYXJpYW50
TGlnYXR1cmVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIaWdobGlnaHQ6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUNoYXJhY3RlcjoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0SHlwaGVuYXRlTGltaXRBZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
SHlwaGVuYXRlTGltaXRCZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0
ZUxpbWl0TGluZXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVBbGlnbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TGluZUJyZWFrOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lR3JpZDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TGluZVNuYXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
cnF1ZWVEaXJlY3Rpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTdHlsZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0F0dGFjaG1lbnQ6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFz
a0JveEltYWdlT3V0c2V0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VS
ZXBlYXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNsaWNlOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQ2xpcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrT3JpZ2luOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tSZXBlYXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza1NpemU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hdGNoTmVhcmVzdE1haWxC
bG9ja3F1b3RlQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpbjoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmlnaW5YOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRQZXJzcGVjdGl2ZU9yaWdpblk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFByaW50Q29s
b3JBZGp1c3Q6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXI6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQmVmb3JlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRSZWdpb25CcmVha0luc2lkZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0UmVnaW9uT3ZlcmZsb3c6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5n
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0Q29tYmluZToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRleHRFbXBoYXNpc1Bvc2l0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1w
aGFzaXNTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dE9yaWVudGF0aW9uOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUZXh0U2VjdXJpdHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRT
dHJva2VDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5ZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm1PcmlnaW5aOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1T
dHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2Vy
RHJhZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeToKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3Jh
cDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcEZsb3c6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFdyYXBNYXJnaW46CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBQYWRk
aW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwVGhyb3VnaDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2hpdGVTcGFjZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2lkb3dzOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V29yZEJyZWFrOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXb3JkU3BhY2luZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V29yZFdy
YXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVpJbmRleDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Wm9v
bToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyNpZiBF
TkFCTEUoU1ZHKQorICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRp
ZXMKKyAgICAgICAgYXBwbHlTVkdQcm9wZXJ0eShpZCwgdmFsdWUpOworICAgICAgICByZXR1cm47
CisjZW5kaWYKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbEF0dGFjaG1l
bnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0QXR0
YWNobWVudChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQXR0YWNobWVudChsYXllci0+dHlwZSgpKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIHN3
aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICBjYXNlIENTU1ZhbHVlRml4
ZWQ6CisgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KEZpeGVkQmFja2dyb3VuZEF0dGFjaG1l
bnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlU2Nyb2xsOgorICAgICAgICBs
YXllci0+c2V0QXR0YWNobWVudChTY3JvbGxCYWNrZ3JvdW5kQXR0YWNobWVudCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVMb2NhbDoKKyAgICAgICAgbGF5ZXItPnNldEF0dGFj
aG1lbnQoTG9jYWxCYWNrZ3JvdW5kQXR0YWNobWVudCk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
bWFwRmlsbENsaXAoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXll
ci0+c2V0Q2xpcChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ2xpcChsYXllci0+dHlwZSgpKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVy
LT5zZXRDbGlwKCpwcmltaXRpdmVWYWx1ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFw
RmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSog
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGxh
eWVyLT5zZXRDb21wb3NpdGUoRmlsbExheWVyOjppbml0aWFsRmlsbENvbXBvc2l0ZShsYXllci0+
dHlwZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
OworICAgIGxheWVyLT5zZXRDb21wb3NpdGUoKnByaW1pdGl2ZVZhbHVlKTsKK30KKwordm9pZCBT
dHlsZVJlc29sdmVyOjptYXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkp
IHsKKyAgICAgICAgbGF5ZXItPnNldE9yaWdpbihGaWxsTGF5ZXI6OmluaXRpYWxGaWxsT3JpZ2lu
KGxheWVyLT50eXBlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CisgICAgbGF5ZXItPnNldE9yaWdpbigqcHJpbWl0aXZlVmFsdWUpOworfQorCitQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbWFn
ZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVy
dHksIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPih2YWx1ZSkpOworCisgICAgaWYgKHZhbHVl
LT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVu
ZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZSo+KHZhbHVlKSk7CisKKyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKKyAgICBpZiAodmFsdWUt
PmlzSW1hZ2VTZXRWYWx1ZSgpKQorICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVl
KHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4odmFsdWUpKTsKKyNlbmRp
ZgorCisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNv
bHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENT
U0ltYWdlVmFsdWUqIHZhbHVlKQoreworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZh
bHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmFkZChwcm9w
ZXJ0eSk7CisgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLT5pc1BlbmRpbmcoKSkgeworICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRp
ZXMuYWRkKHByb3BlcnR5KTsKKyAgICAgICAgcmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVh
dGUodmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRl
KHZhbHVlKTsKK30KKworI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQorUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1ZSogdmFsdWUpCit7CisgICAgUmVmUHRyPFN0eWxl
SW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkp
OworICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgbV9w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7CisgICAgcmV0dXJuIGltYWdlLnJl
bGVhc2UoKTsKK30KKyNlbmRpZgorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxJbWFnZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGxheWVyLT5z
ZXRJbWFnZShGaWxsTGF5ZXI6OmluaXRpYWxGaWxsSW1hZ2UobGF5ZXItPnR5cGUoKSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbGF5ZXItPnNldEltYWdlKHN0eWxlSW1hZ2UocHJv
cGVydHksIHZhbHVlKSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFJlcGVhdFgo
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0UmVwZWF0
WChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WChsYXllci0+dHlwZSgpKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5zZXRS
ZXBlYXRYKCpwcmltaXRpdmVWYWx1ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmls
bFJlcGVhdFkoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVl
KQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+
c2V0UmVwZWF0WShGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WShsYXllci0+dHlwZSgpKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxh
eWVyLT5zZXRSZXBlYXRZKCpwcmltaXRpdmVWYWx1ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUq
IHZhbHVlKQoreworICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAg
ICBsYXllci0+c2V0U2l6ZVR5cGUoU2l6ZU5vbmUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlQ29udGFpbikKKyAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKENvbnRh
aW4pOworICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Q292ZXIpCisgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShDb3Zlcik7CisgICAgZWxzZQorICAg
ICAgICBsYXllci0+c2V0U2l6ZVR5cGUoU2l6ZUxlbmd0aCk7CisKKyAgICBMZW5ndGhTaXplIGIg
PSBGaWxsTGF5ZXI6OmluaXRpYWxGaWxsU2l6ZUxlbmd0aChsYXllci0+dHlwZSgpKTsKKworICAg
IGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZUNvbnRhaW4gfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVDb3ZlcikgeworICAgICAgICBsYXllci0+c2V0U2l6ZUxlbmd0aChiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3Rp
dmVab29tKCk7CisKKyAgICBMZW5ndGggZmlyc3RMZW5ndGg7CisgICAgTGVuZ3RoIHNlY29uZExl
bmd0aDsKKworICAgIGlmIChQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1
ZSgpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+Zmlyc3QoKSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBzZWNvbmQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPnNlY29u
ZCgpKTsKKyAgICAgICAgZmlyc3RMZW5ndGggPSBmaXJzdC0+Y29udmVydFRvTGVuZ3RoPEFueUNv
bnZlcnNpb24+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAg
ICAgIHNlY29uZExlbmd0aCA9IHNlY29uZC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+
KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZmlyc3RMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEFu
eUNvbnZlcnNpb24+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Cisg
ICAgICAgIHNlY29uZExlbmd0aCA9IExlbmd0aCgpOworICAgIH0KKworICAgIGlmIChmaXJzdExl
bmd0aC5pc1VuZGVmaW5lZCgpIHx8IHNlY29uZExlbmd0aC5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBiLnNldFdpZHRoKGZpcnN0TGVuZ3RoKTsKKyAgICBiLnNldEhlaWdo
dChzZWNvbmRMZW5ndGgpOworICAgIGxheWVyLT5zZXRTaXplTGVuZ3RoKGIpOworfQorCit2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVy
KiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFs
dWUoKSkgeworICAgICAgICBsYXllci0+c2V0WFBvc2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZp
bGxYUG9zaXRpb24obGF5ZXItPnR5cGUoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7CisgICAgTGVuZ3RoIGxlbmd0aDsKKyAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzTGVuZ3RoKCkpCisgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsK
KyAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgIGxl
bmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7
CisgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRo
TGVuZ3RoKCkpCisgICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2Fs
Y1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZh
Y3RvcikpOworICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFn
ZUxlbmd0aCgpKQorICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJj
ZW50YWdlTGVuZ3RoKCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisgICAgbGF5ZXItPnNl
dFhQb3NpdGlvbihsZW5ndGgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxZUG9z
aXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0
WVBvc2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxZUG9zaXRpb24obGF5ZXItPnR5cGUoKSkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgTGVuZ3Ro
IGxlbmd0aDsKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCisgICAgICAgIGxl
bmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9y
b290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1
ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCisgICAgICAgIGxlbmd0aCA9
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOworICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQorICAgICAgICBsZW5ndGgg
PSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm47CisgICAgbGF5ZXItPnNldFlQb3NpdGlvbihsZW5ndGgpOworfQorCit2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiogYW5pbWF0aW9u
LCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7
CisgICAgICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9u
RGVsYXkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
OworICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGZs
b2F0LCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vjb25kcz4oKSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5
ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIHN3
aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICBjYXNlIENTU1ZhbHVlTm9y
bWFsOgorICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGly
ZWN0aW9uTm9ybWFsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUFsdGVybmF0
ZToKKyAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVj
dGlvbkFsdGVybmF0ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVSZXZlcnNl
OgorICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0
aW9uUmV2ZXJzZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVBbHRlcm5hdGVS
ZXZlcnNlOgorICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9u
RGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
dm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qIGFuaW1h
dGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUo
KSkgeworICAgICAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKEFuaW1hdGlvbjo6aW5pdGlhbEFu
aW1hdGlvbkR1cmF0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLT5j
b21wdXRlVGltZTxmbG9hdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOworfQorCit2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiogbGF5ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsK
KyAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkZp
bGxNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKKyAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgY2FzZSBD
U1NWYWx1ZU5vbmU6CisgICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9k
ZU5vbmUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlRm9yd2FyZHM6CisgICAg
ICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZUZvcndhcmRzKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUJhY2t3YXJkczoKKyAgICAgICAgbGF5ZXItPnNl
dEZpbGxNb2RlKEFuaW1hdGlvbkZpbGxNb2RlQmFja3dhcmRzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDU1NWYWx1ZUJvdGg6CisgICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRp
b25GaWxsTW9kZUJvdGgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiBhbmltYXRpb24s
IENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsK
KyAgICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChBbmltYXRpb246OmluaXRpYWxB
bmltYXRpb25JdGVyYXRpb25Db3VudCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlSW5maW5pdGUpCisgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQo
LTEpOworICAgIGVsc2UKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChwcmlt
aXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpt
YXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldE5hbWUo
QW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uTmFtZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgbGF5ZXItPnNldElzTm9uZUFuaW1hdGlv
bih0cnVlKTsKKyAgICBlbHNlCisgICAgICAgIGxheWVyLT5zZXROYW1lKHByaW1pdGl2ZVZhbHVl
LT5nZXRTdHJpbmdWYWx1ZSgpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRp
b25QbGF5U3RhdGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0UGxheVN0YXRl
KEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvblBsYXlTdGF0ZSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgRUFuaW1QbGF5U3RhdGUgcGxh
eVN0YXRlID0gKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlUGF1c2VkKSA/
IEFuaW1QbGF5U3RhdGVQYXVzZWQgOiBBbmltUGxheVN0YXRlUGxheWluZzsKKyAgICBsYXllci0+
c2V0UGxheVN0YXRlKHBsYXlTdGF0ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5p
bWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgYW5pbWF0aW9uLT5z
ZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCk7CisgICAgICAgIGFuaW1hdGlv
bi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJbnZhbGlkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlQWxsKSB7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9u
TW9kZShBbmltYXRpb246OkFuaW1hdGVBbGwpOworICAgICAgICBhbmltYXRpb24tPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5SW52YWxpZCk7CisgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmlt
YXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZU5vbmUpOworICAgICAgICBhbmltYXRpb24tPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYW5p
bWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZVNpbmdsZVByb3BlcnR5
KTsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0
eUlEPihwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkpOworICAgIH0KK30KKwordm9pZCBTdHls
ZVJlc29sdmVyOjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlv
biwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkg
eworICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbjo6aW5pdGlh
bEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7CisgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZUxpbmVhcjoKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGlt
aW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlRWFzZToKKyAgICAgICAgICAgIGFuaW1hdGlv
bi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlSW46CisgICAg
ICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb246OmNyZWF0ZSgwLjQyLCAwLjAsIDEuMCwgMS4wKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VPdXQ6CisgICAgICAgICAgICBhbmltYXRpb24tPnNl
dFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgwLjAsIDAu
MCwgMC41OCwgMS4wKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZUVhc2VJbk91dDoKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3Vi
aWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDAuNDIsIDAuMCwgMC41OCwgMS4wKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVN0ZXBTdGFydDoKKyAgICAg
ICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6
Y3JlYXRlKDEsIHRydWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Zh
bHVlU3RlcEVuZDoKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oU3Rl
cHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDEsIGZhbHNlKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZhbHVlLT5pc0N1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7CisgICAgICAgIENTU0N1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb25WYWx1ZSogY3ViaWNUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENT
U0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgYW5pbWF0
aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
Y3ViaWNUaW1pbmdGdW5jdGlvbi0+eDEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+eTEoKSwgY3Vi
aWNUaW1pbmdGdW5jdGlvbi0+eDIoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+eTIoKSkpOworICAg
IH0gZWxzZSBpZiAodmFsdWUtPmlzU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKCkpIHsKKyAgICAg
ICAgQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKiBzdGVwc1RpbWluZ0Z1bmN0aW9uID0gc3Rh
dGljX2Nhc3Q8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKj4odmFsdWUpOworICAgICAgICBh
bmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZShz
dGVwc1RpbWluZ0Z1bmN0aW9uLT5udW1iZXJPZlN0ZXBzKCksIHN0ZXBzVGltaW5nRnVuY3Rpb24t
PnN0ZXBBdFN0YXJ0KCkpKTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0xpbmVhclRpbWluZ0Z1
bmN0aW9uVmFsdWUoKSkKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihMaW5l
YXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
cE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwg
TmluZVBpZWNlSW1hZ2UmIGltYWdlKQoreworICAgIC8vIElmIHdlJ3JlIG5vdCBhIHZhbHVlIGxp
c3QsIHRoZW4gd2UgYXJlICJub25lIiBhbmQgZG9uJ3QgbmVlZCB0byBhbHRlciB0aGUgZW1wdHkg
aW1hZ2UgYXQgYWxsLgorICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVl
LgorICAgIENTU1ZhbHVlTGlzdCogYm9yZGVySW1hZ2UgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPih2YWx1ZSk7CisKKyAgICAvLyBTZXQgdGhlIGltYWdlICh0aGlzIGtpY2tzIG9mZiB0aGUg
bG9hZCkuCisgICAgQ1NTUHJvcGVydHlJRCBpbWFnZVByb3BlcnR5OworICAgIGlmIChwcm9wZXJ0
eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlKQorICAgICAgICBpbWFnZVByb3BlcnR5
ID0gQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTsKKyAgICBlbHNlIGlmIChwcm9wZXJ0eSA9
PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSkKKyAgICAgICAgaW1hZ2VQcm9wZXJ0eSA9
IENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOworICAgIGVsc2UKKyAgICAgICAg
aW1hZ2VQcm9wZXJ0eSA9IHByb3BlcnR5OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkg
PCBib3JkZXJJbWFnZS0+bGVuZ3RoKCkgOyArK2kpIHsKKyAgICAgICAgQ1NTVmFsdWUqIGN1cnJl
bnQgPSBib3JkZXJJbWFnZS0+aXRlbShpKTsKKworICAgICAgICBpZiAoY3VycmVudC0+aXNJbWFn
ZVZhbHVlKCkgfHwgY3VycmVudC0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkKKyNpZiBFTkFCTEUo
Q1NTX0lNQUdFX1NFVCkKKyAgICAgICAgICAgIHx8IGN1cnJlbnQtPmlzSW1hZ2VTZXRWYWx1ZSgp
CisjZW5kaWYKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIGltYWdlLnNldEltYWdlKHN0eWxl
SW1hZ2UoaW1hZ2VQcm9wZXJ0eSwgY3VycmVudCkpOworICAgICAgICBlbHNlIGlmIChjdXJyZW50
LT5pc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQorICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1h
Z2VTbGljZShjdXJyZW50LCBpbWFnZSk7CisgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlzVmFs
dWVMaXN0KCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogc2xhc2hMaXN0ID0gc3RhdGlj
X2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oY3VycmVudCk7CisgICAgICAgICAgICAvLyBNYXAgaW4gdGhl
IGltYWdlIHNsaWNlcy4KKyAgICAgICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0oMCkgJiYgc2xh
c2hMaXN0LT5pdGVtKDApLT5pc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQorICAgICAgICAgICAg
ICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2Uoc2xhc2hMaXN0LT5pdGVtKDApLCBpbWFnZSk7CisK
KyAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgYm9yZGVyIHNsaWNlcy4KKyAgICAgICAgICAgIGlm
IChzbGFzaExpc3QtPml0ZW0oMSkpCisgICAgICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xp
Y2VzKG1hcE5pbmVQaWVjZUltYWdlUXVhZChzbGFzaExpc3QtPml0ZW0oMSkpKTsKKworICAgICAg
ICAgICAgLy8gTWFwIGluIHRoZSBvdXRzZXQuCisgICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5p
dGVtKDIpKQorICAgICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGllY2VJbWFn
ZVF1YWQoc2xhc2hMaXN0LT5pdGVtKDIpKSk7CisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC0+
aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIGFwcHJvcHJpYXRl
IHJ1bGVzIGZvciBzdHJldGNoL3JvdW5kL3JlcGVhdCBvZiB0aGUgc2xpY2VzLgorICAgICAgICAg
ICAgbWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoY3VycmVudCwgaW1hZ2UpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2Up
IHsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBwcmVzZXJ2ZSB0aGUgbGVnYWN5IGJlaGF2aW9yIG9m
IC13ZWJraXQtYm9yZGVyLWltYWdlIGFuZCBtYWtlIHRoZSBib3JkZXIgc2xpY2VzCisgICAgICAg
IC8vIGFsc28gc2V0IHRoZSBib3JkZXIgd2lkdGhzLiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFi
b3V0IHBlcmNlbnRhZ2VzLCBzaW5jZSB3ZSBkb24ndCBldmVuIHN1cHBvcnQKKyAgICAgICAgLy8g
dGhvc2Ugb24gcmVhbCBib3JkZXJzIHlldC4KKyAgICAgICAgaWYgKGltYWdlLmJvcmRlclNsaWNl
cygpLnRvcCgpLmlzRml4ZWQoKSkKKyAgICAgICAgICAgIHN0eWxlKCktPnNldEJvcmRlclRvcFdp
ZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLnRvcCgpLnZhbHVlKCkpOworICAgICAgICBpZiAoaW1h
Z2UuYm9yZGVyU2xpY2VzKCkucmlnaHQoKS5pc0ZpeGVkKCkpCisgICAgICAgICAgICBzdHlsZSgp
LT5zZXRCb3JkZXJSaWdodFdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLnJpZ2h0KCkudmFsdWUo
KSk7CisgICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS5ib3R0b20oKS5pc0ZpeGVkKCkp
CisgICAgICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJCb3R0b21XaWR0aChpbWFnZS5ib3JkZXJT
bGljZXMoKS5ib3R0b20oKS52YWx1ZSgpKTsKKyAgICAgICAgaWYgKGltYWdlLmJvcmRlclNsaWNl
cygpLmxlZnQoKS5pc0ZpeGVkKCkpCisgICAgICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJMZWZ0
V2lkdGgoaW1hZ2UuYm9yZGVyU2xpY2VzKCkubGVmdCgpLnZhbHVlKCkpOworICAgIH0KK30KKwor
dm9pZCBTdHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiB2YWx1
ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQoreworICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5p
c0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBSZXRy
aWV2ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVlLgorICAgIENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZSogYm9yZGVySW1hZ2VTbGljZSA9IHN0YXRpY19jYXN0PENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZSo+KHZhbHVlKTsKKworICAgIC8vIFNldCB1cCBhIGxlbmd0aCBib3ggdG8gcmVwcmVzZW50IG91
ciBpbWFnZSBzbGljZXMuCisgICAgTGVuZ3RoQm94IGJveDsKKyAgICBRdWFkKiBzbGljZXMgPSBi
b3JkZXJJbWFnZVNsaWNlLT5zbGljZXMoKTsKKyAgICBpZiAoc2xpY2VzLT50b3AoKS0+aXNQZXJj
ZW50YWdlKCkpCisgICAgICAgIGJveC5tX3RvcCA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5nZXRE
b3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICBlbHNlCisgICAgICAgIGJveC5tX3RvcCA9IExl
bmd0aChzbGljZXMtPnRvcCgpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUiksIEZpeGVkKTsKKyAgICBpZiAoc2xpY2VzLT5ib3R0b20oKS0+aXNQZXJjZW50YWdlKCkp
CisgICAgICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgpLT5nZXREb3Vi
bGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICBlbHNlCisgICAgICAgIGJveC5tX2JvdHRvbSA9IExl
bmd0aCgoaW50KXNsaWNlcy0+Ym90dG9tKCktPmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7CisgICAgaWYgKHNsaWNlcy0+bGVmdCgpLT5pc1BlcmNl
bnRhZ2UoKSkKKyAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0
RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgZWxzZQorICAgICAgICBib3gubV9sZWZ0ID0g
TGVuZ3RoKHNsaWNlcy0+bGVmdCgpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUiksIEZpeGVkKTsKKyAgICBpZiAoc2xpY2VzLT5yaWdodCgpLT5pc1BlcmNlbnRhZ2Uo
KSkKKyAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5nZXREb3Vi
bGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICBlbHNlCisgICAgICAgIGJveC5tX3JpZ2h0ID0gTGVu
Z3RoKHNsaWNlcy0+cmlnaHQoKS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpLCBGaXhlZCk7CisgICAgaW1hZ2Uuc2V0SW1hZ2VTbGljZXMoYm94KTsKKworICAgIC8v
IFNldCBvdXIgZmlsbCBtb2RlLgorICAgIGltYWdlLnNldEZpbGwoYm9yZGVySW1hZ2VTbGljZS0+
bV9maWxsKTsKK30KKworTGVuZ3RoQm94IFN0eWxlUmVzb2x2ZXI6Om1hcE5pbmVQaWVjZUltYWdl
UXVhZChDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIExlbmd0aEJveCgpOworCisgICAgLy8gR2V0
IG91ciB6b29tIHZhbHVlLgorICAgIGZsb2F0IHpvb20gPSB1c2VTVkdab29tUnVsZXMoKSA/IDEu
MGYgOiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgcHJp
bWl0aXZlIHZhbHVlLgorICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBib3JkZXJXaWR0aHMgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKworICAgIC8vIFNldCB1cCBhIGxl
bmd0aCBib3ggdG8gcmVwcmVzZW50IG91ciBpbWFnZSBzbGljZXMuCisgICAgTGVuZ3RoQm94IGJv
eDsgLy8gRGVmYXVsdHMgdG8gJ2F1dG8nIHNvIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIHRoYXQg
ZXhwbGljaXRseSBiZWxvdy4KKyAgICBRdWFkKiBzbGljZXMgPSBib3JkZXJXaWR0aHMtPmdldFF1
YWRWYWx1ZSgpOworICAgIGlmIChzbGljZXMtPnRvcCgpLT5pc051bWJlcigpKQorICAgICAgICBi
b3gubV90b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUp
OworICAgIGVsc2UgaWYgKHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQorICAgICAgICBi
b3gubV90b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7CisgICAgZWxzZSBpZiAoc2xpY2Vz
LT50b3AoKS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZUF1dG8pCisgICAgICAgIGJveC5tX3RvcCA9
IHNsaWNlcy0+dG9wKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCByb290RWxlbWVu
dFN0eWxlKCksIHpvb20pOworCisgICAgaWYgKHNsaWNlcy0+cmlnaHQoKS0+aXNOdW1iZXIoKSkK
KyAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5nZXRJbnRWYWx1
ZSgpLCBSZWxhdGl2ZSk7CisgICAgZWxzZSBpZiAoc2xpY2VzLT5yaWdodCgpLT5pc1BlcmNlbnRh
Z2UoKSkKKyAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5nZXRE
b3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50KTsK
KyAgICBlbHNlIGlmIChzbGljZXMtPnJpZ2h0KCktPmdldElkZW50KCkgIT0gQ1NTVmFsdWVBdXRv
KQorICAgICAgICBib3gubV9yaWdodCA9IHNsaWNlcy0+cmlnaHQoKS0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CisKKyAgICBpZiAoc2xp
Y2VzLT5ib3R0b20oKS0+aXNOdW1iZXIoKSkKKyAgICAgICAgYm94Lm1fYm90dG9tID0gTGVuZ3Ro
KHNsaWNlcy0+Ym90dG9tKCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKKyAgICBlbHNlIGlm
IChzbGljZXMtPmJvdHRvbSgpLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgYm94Lm1fYm90dG9t
ID0gTGVuZ3RoKHNsaWNlcy0+Ym90dG9tKCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQpOworICAgIGVsc2UgaWYgKHNsaWNlcy0+Ym90
dG9tKCktPmdldElkZW50KCkgIT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICBib3gubV9ib3R0b20g
PSBzbGljZXMtPmJvdHRvbSgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVs
ZW1lbnRTdHlsZSgpLCB6b29tKTsKKworICAgIGlmIChzbGljZXMtPmxlZnQoKS0+aXNOdW1iZXIo
KSkKKyAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0SW50VmFs
dWUoKSwgUmVsYXRpdmUpOworICAgIGVsc2UgaWYgKHNsaWNlcy0+bGVmdCgpLT5pc1BlcmNlbnRh
Z2UoKSkKKyAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0RG91
YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7Cisg
ICAgZWxzZSBpZiAoc2xpY2VzLT5sZWZ0KCktPmdldElkZW50KCkgIT0gQ1NTVmFsdWVBdXRvKQor
ICAgICAgICBib3gubV9sZWZ0ID0gc2xpY2VzLT5sZWZ0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3Ro
PihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb20pOworCisgICAgcmV0dXJuIGJveDsK
K30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1
ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKK3sKKyAgICBpZiAoIXZhbHVlIHx8ICF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKKyAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1
ZSgpOworICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+c2Vjb25kKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGludCBmaXJzdElkZW50aWZpZXIgPSBwYWlyLT5maXJz
dCgpLT5nZXRJZGVudCgpOworICAgIGludCBzZWNvbmRJZGVudGlmaWVyID0gcGFpci0+c2Vjb25k
KCktPmdldElkZW50KCk7CisKKyAgICBFTmluZVBpZWNlSW1hZ2VSdWxlIGhvcml6b250YWxSdWxl
OworICAgIHN3aXRjaCAoZmlyc3RJZGVudGlmaWVyKSB7CisgICAgY2FzZSBDU1NWYWx1ZVN0cmV0
Y2g6CisgICAgICAgIGhvcml6b250YWxSdWxlID0gU3RyZXRjaEltYWdlUnVsZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZVJvdW5kOgorICAgICAgICBob3Jpem9udGFsUnVsZSA9
IFJvdW5kSW1hZ2VSdWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlU3BhY2U6
CisgICAgICAgIGhvcml6b250YWxSdWxlID0gU3BhY2VJbWFnZVJ1bGU7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6IC8vIENTU1ZhbHVlUmVwZWF0CisgICAgICAgIGhvcml6b250YWxSdWxl
ID0gUmVwZWF0SW1hZ2VSdWxlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaW1hZ2Uuc2V0
SG9yaXpvbnRhbFJ1bGUoaG9yaXpvbnRhbFJ1bGUpOworCisgICAgRU5pbmVQaWVjZUltYWdlUnVs
ZSB2ZXJ0aWNhbFJ1bGU7CisgICAgc3dpdGNoIChzZWNvbmRJZGVudGlmaWVyKSB7CisgICAgY2Fz
ZSBDU1NWYWx1ZVN0cmV0Y2g6CisgICAgICAgIHZlcnRpY2FsUnVsZSA9IFN0cmV0Y2hJbWFnZVJ1
bGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVSb3VuZDoKKyAgICAgICAgdmVy
dGljYWxSdWxlID0gUm91bmRJbWFnZVJ1bGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NT
VmFsdWVTcGFjZToKKyAgICAgICAgdmVydGljYWxSdWxlID0gU3BhY2VJbWFnZVJ1bGU7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IC8vIENTU1ZhbHVlUmVwZWF0CisgICAgICAgIHZlcnRp
Y2FsUnVsZSA9IFJlcGVhdEltYWdlUnVsZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlt
YWdlLnNldFZlcnRpY2FsUnVsZSh2ZXJ0aWNhbFJ1bGUpOworfQorCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQoreworICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6
ZUFkanVzdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9u
dERlc2NyaXB0aW9uKG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICBuZXdGb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXpl
KCkpOworICAgIG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24p
OworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHls
ZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3sKKyAgICBpZiAoc3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKTsKKyAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9u
KGNoaWxkRm9udCk7CisgICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZv
bnQuc3BlY2lmaWVkU2l6ZSgpKTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0Zv
bnREZXNjcmlwdGlvbik7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmlj
RmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KQoreworICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpOworCisgICAgaWYgKGNoaWxkRm9udC5pc0Fic29sdXRlU2l6ZSgpIHx8ICFw
YXJlbnRTdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBwYXJlbnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGlmIChj
aGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVudEZvbnQudXNlRml4ZWREZWZh
dWx0U2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGb3Igbm93LCBsdW1wIGFsbCBm
YW1pbGllcyBidXQgbW9ub3NwYWNlIHRvZ2V0aGVyLgorICAgIGlmIChjaGlsZEZvbnQuZ2VuZXJp
Y0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5CisgICAgICAgICYm
IHBhcmVudEZvbnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNl
RmFtaWx5KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBrbm93IHRoZSBwYXJlbnQgaXMg
bW9ub3NwYWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3BhY2UsIGFuZCB0aGF0IGZvbnQKKyAgICAv
LyBzaXplIHdhcyB1bnNwZWNpZmllZC4gV2Ugd2FudCB0byBzY2FsZSBvdXIgZm9udCBzaXplIGFz
IGFwcHJvcHJpYXRlLgorICAgIC8vIElmIHRoZSBmb250IHVzZXMgYSBrZXl3b3JkIHNpemUsIHRo
ZW4gd2UgcmVmZXRjaCBmcm9tIHRoZSB0YWJsZSByYXRoZXIgdGhhbgorICAgIC8vIG11bHRpcGx5
aW5nIGJ5IG91ciBzY2FsZSBmYWN0b3IuCisgICAgZmxvYXQgc2l6ZTsKKyAgICBpZiAoY2hpbGRG
b250LmtleXdvcmRTaXplKCkpCisgICAgICAgIHNpemUgPSBmb250U2l6ZUZvcktleXdvcmQobV9j
aGVja2VyLmRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGNoaWxkRm9udC5rZXl3b3JkU2l6
ZSgpIC0gMSwgY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5n
cygpOworICAgICAgICBmbG9hdCBmaXhlZFNjYWxlRmFjdG9yID0gc2V0dGluZ3MKKyAgICAgICAg
ICAgID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgp
KSAvIHNldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKQorICAgICAgICAgICAgOiAxOworICAgICAg
ICBzaXplID0gcGFyZW50Rm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkgPworICAgICAgICAgICAg
ICAgIGNoaWxkRm9udC5zcGVjaWZpZWRTaXplKCkgLyBmaXhlZFNjYWxlRmFjdG9yIDoKKyAgICAg
ICAgICAgICAgICBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpICogZml4ZWRTY2FsZUZhY3RvcjsK
KyAgICB9CisKKyAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9u
dCk7CisgICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICBzdHls
ZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Cit9CisKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGZsb2F0IHNpemUpCit7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6
ZSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShtX2NoZWNrZXIuZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9u
dERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7
Cit9CisKK2Zsb2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRT
aXplKERvY3VtZW50KiBkb2N1bWVudCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1
dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcykKK3sKKyAg
ICBmbG9hdCB6b29tRmFjdG9yID0gMS4wZjsKKyAgICBpZiAoIXVzZVNWR1pvb21SdWxlcykgewor
ICAgICAgICB6b29tRmFjdG9yID0gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICAgICAgem9vbUZhY3Rv
ciAqPSBmcmFtZS0+dGV4dFpvb21GYWN0b3IoKTsKKyAgICB9CisKKyAgICByZXR1cm4gU3R5bGVS
ZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIHpvb21G
YWN0b3IsIGlzQWJzb2x1dGVTaXplLCBzcGVjaWZpZWRTaXplKTsKK30KKworZmxvYXQgU3R5bGVS
ZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZp
ZWRTaXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgdXNlU21hcnRNaW5pbXVtRm9yRm9udFNp
emUpCit7CisgICAgLy8gVGV4dCB3aXRoIGEgMHB4IGZvbnQgc2l6ZSBzaG91bGQgbm90IGJlIHZp
c2libGUgYW5kIHRoZXJlZm9yZSBuZWVkcyB0byBiZQorICAgIC8vIGV4ZW1wdCBmcm9tIG1pbmlt
dW0gZm9udCBzaXplIHJ1bGVzLiBBY2lkMyByZWxpZXMgb24gdGhpcyBmb3IgcGl4ZWwtcGVyZmVj
dAorICAgIC8vIHJlbmRlcmluZy4gVGhpcyBpcyBhbHNvIGNvbXBhdGlibGUgd2l0aCBvdGhlciBi
cm93c2VycyB0aGF0IGhhdmUgbWluaW11bQorICAgIC8vIGZvbnQgc2l6ZSBzZXR0aW5ncyAoZS5n
LiBGaXJlZm94KS4KKyAgICBpZiAoZmFic2Yoc3BlY2lmaWVkU2l6ZSkgPCBzdGQ6Om51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIC8v
IFdlIHN1cHBvcnQgdHdvIHR5cGVzIG9mIG1pbmltdW0gZm9udCBzaXplLiBUaGUgZmlyc3QgaXMg
YSBoYXJkIG92ZXJyaWRlIHRoYXQgYXBwbGllcyB0bworICAgIC8vIGFsbCBmb250cy4gVGhpcyBp
cyAibWluU2l6ZS4iIFRoZSBzZWNvbmQgdHlwZSBvZiBtaW5pbXVtIGZvbnQgc2l6ZSBpcyBhICJz
bWFydCBtaW5pbXVtIgorICAgIC8vIHRoYXQgaXMgYXBwbGllZCBvbmx5IHdoZW4gdGhlIFdlYiBw
YWdlIGNhbid0IGtub3cgd2hhdCBzaXplIGl0IHJlYWxseSBhc2tlZCBmb3IsIGUuZy4sCisgICAg
Ly8gd2hlbiBpdCB1c2VzIGxvZ2ljYWwgc2l6ZXMgbGlrZSAic21hbGwiIG9yIGV4cHJlc3NlcyB0
aGUgZm9udC1zaXplIGFzIGEgcGVyY2VudGFnZSBvZgorICAgIC8vIHRoZSB1c2VyJ3MgZGVmYXVs
dCBmb250IHNldHRpbmcuCisKKyAgICAvLyBXaXRoIHRoZSBzbWFydCBtaW5pbXVtLCB3ZSBuZXZl
ciB3YW50IHRvIGdldCBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gZm9udCBzaXplIHRvIGtlZXAg
Zm9udHMgcmVhZGFibGUuCisgICAgLy8gSG93ZXZlciB3ZSBhbHdheXMgYWxsb3cgdGhlIHBhZ2Ug
dG8gc2V0IGFuIGV4cGxpY2l0IHBpeGVsIHNpemUgdGhhdCBpcyBzbWFsbGVyLAorICAgIC8vIHNp
bmNlIHNpdGVzIHdpbGwgbWlzLXJlbmRlciBvdGhlcndpc2UgKGUuZy4sIGh0dHA6Ly93d3cuZ2Ft
ZXNwb3QuY29tIHdpdGggYSA5cHggbWluaW11bSkuCisKKyAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1
cm4gMS4wZjsKKworICAgIGludCBtaW5TaXplID0gc2V0dGluZ3MtPm1pbmltdW1Gb250U2l6ZSgp
OworICAgIGludCBtaW5Mb2dpY2FsU2l6ZSA9IHNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRT
aXplKCk7CisgICAgZmxvYXQgem9vbWVkU2l6ZSA9IHNwZWNpZmllZFNpemUgKiB6b29tRmFjdG9y
OworCisgICAgLy8gQXBwbHkgdGhlIGhhcmQgbWluaW11bSBmaXJzdC4gV2Ugb25seSBhcHBseSB0
aGUgaGFyZCBtaW5pbXVtIGlmIGFmdGVyIHpvb21pbmcgd2UncmUgc3RpbGwgdG9vIHNtYWxsLgor
ICAgIGlmICh6b29tZWRTaXplIDwgbWluU2l6ZSkKKyAgICAgICAgem9vbWVkU2l6ZSA9IG1pblNp
emU7CisKKyAgICAvLyBOb3cgYXBwbHkgdGhlICJzbWFydCBtaW5pbXVtLiIgVGhpcyBtaW5pbXVt
IGlzIGFsc28gb25seSBhcHBsaWVkIGlmIHdlJ3JlIHN0aWxsIHRvbyBzbWFsbAorICAgIC8vIGFm
dGVyIHpvb21pbmcuIFRoZSBmb250IHNpemUgbXVzdCBlaXRoZXIgYmUgcmVsYXRpdmUgdG8gdGhl
IHVzZXIgZGVmYXVsdCBvciB0aGUgb3JpZ2luYWwgc2l6ZQorICAgIC8vIG11c3QgaGF2ZSBiZWVu
IGFjY2VwdGFibGUuIEluIG90aGVyIHdvcmRzLCB3ZSBvbmx5IGFwcGx5IHRoZSBzbWFydCBtaW5p
bXVtIHdoZW5ldmVyIHdlJ3JlIHBvc2l0aXZlCisgICAgLy8gZG9pbmcgc28gd29uJ3QgZGlzcnVw
dCB0aGUgbGF5b3V0LgorICAgIGlmICh1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSAmJiB6b29t
ZWRTaXplIDwgbWluTG9naWNhbFNpemUgJiYgKHNwZWNpZmllZFNpemUgPj0gbWluTG9naWNhbFNp
emUgfHwgIWlzQWJzb2x1dGVTaXplKSkKKyAgICAgICAgem9vbWVkU2l6ZSA9IG1pbkxvZ2ljYWxT
aXplOworCisgICAgLy8gQWxzbyBjbGFtcCB0byBhIHJlYXNvbmFibGUgbWF4aW11bSB0byBwcmV2
ZW50IGluc2FuZSBmb250IHNpemVzIGZyb20gY2F1c2luZyBjcmFzaGVzIG9uIHZhcmlvdXMKKyAg
ICAvLyBwbGF0Zm9ybXMgKEknbSBsb29raW5nIGF0IHlvdSwgV2luZG93cy4pCisgICAgcmV0dXJu
IG1pbigxMDAwMDAwLjBmLCB6b29tZWRTaXplKTsKK30KKworY29uc3QgaW50IGZvbnRTaXplVGFi
bGVNYXggPSAxNjsKK2NvbnN0IGludCBmb250U2l6ZVRhYmxlTWluID0gOTsKK2NvbnN0IGludCB0
b3RhbEtleXdvcmRzID0gODsKKworLy8gV2luSUUvTmF2NCB0YWJsZSBmb3IgZm9udCBzaXplcy4g
RGVzaWduZWQgdG8gbWF0Y2ggdGhlIGxlZ2FjeSBmb250IG1hcHBpbmcgc3lzdGVtIG9mIEhUTUwu
CitzdGF0aWMgY29uc3QgaW50IHF1aXJrc0ZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1heCAt
IGZvbnRTaXplVGFibGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9Cit7CisgICAgICB7IDksICAg
IDksICAgICA5LCAgICAgOSwgICAgMTEsICAgIDE0LCAgICAxOCwgICAgMjggfSwKKyAgICAgIHsg
OSwgICAgOSwgICAgIDksICAgIDEwLCAgICAxMiwgICAgMTUsICAgIDIwLCAgICAzMSB9LAorICAg
ICAgeyA5LCAgICA5LCAgICAgOSwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDM0IH0s
CisgICAgICB7IDksICAgIDksICAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE4LCAgICAyNCwgICAg
MzcgfSwKKyAgICAgIHsgOSwgICAgOSwgICAgMTAsICAgIDEzLCAgICAxNiwgICAgMjAsICAgIDI2
LCAgICA0MCB9LCAvLyBmaXhlZCBmb250IGRlZmF1bHQgKDEzKQorICAgICAgeyA5LCAgICA5LCAg
ICAxMSwgICAgMTQsICAgIDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0sCisgICAgICB7IDksICAg
MTAsICAgIDEyLCAgICAxNSwgICAgMTcsICAgIDIzLCAgICAzMCwgICAgNDUgfSwKKyAgICAgIHsg
OSwgICAxMCwgICAgMTMsICAgIDE2LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9IC8vIHBy
b3BvcnRpb25hbCBmb250IGRlZmF1bHQgKDE2KQorfTsKKy8vIEhUTUwgICAgICAgMSAgICAgIDIg
ICAgICAzICAgICAgNCAgICAgIDUgICAgICA2ICAgICAgNworLy8gQ1NTICB4eHMgICB4cyAgICAg
cyAgICAgIG0gICAgICBsICAgICB4bCAgICAgeHhsCisvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAorLy8gICAgICAgICAgICAgICAgICAgICAgdXNlciBwcmVmCisKKy8vIFN0cmljdCBtb2Rl
IHRhYmxlIG1hdGNoZXMgTWFjSUUgYW5kIE1vemlsbGEncyBzZXR0aW5ncyBleGFjdGx5Lgorc3Rh
dGljIGNvbnN0IGludCBzdHJpY3RGb250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBmb250
U2l6ZVRhYmxlTWluICsgMV1bdG90YWxLZXl3b3Jkc10gPQoreworICAgICAgeyA5LCAgICA5LCAg
ICAgOSwgICAgIDksICAgIDExLCAgICAxNCwgICAgMTgsICAgIDI3IH0sCisgICAgICB7IDksICAg
IDksICAgICA5LCAgICAxMCwgICAgMTIsICAgIDE1LCAgICAyMCwgICAgMzAgfSwKKyAgICAgIHsg
OSwgICAgOSwgICAgMTAsICAgIDExLCAgICAxMywgICAgMTcsICAgIDIyLCAgICAzMyB9LAorICAg
ICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQsICAgIDM2IH0s
CisgICAgICB7IDksICAgMTAsICAgIDEyLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwgICAg
MzkgfSwgLy8gZml4ZWQgZm9udCBkZWZhdWx0ICgxMykKKyAgICAgIHsgOSwgICAxMCwgICAgMTIs
ICAgIDE0LCAgICAxNywgICAgMjEsICAgIDI4LCAgICA0MiB9LAorICAgICAgeyA5LCAgIDEwLCAg
ICAxMywgICAgMTUsICAgIDE4LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCisgICAgICB7IDksICAg
MTAsICAgIDEzLCAgICAxNiwgICAgMTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAvLyBwcm9wb3J0
aW9uYWwgZm9udCBkZWZhdWx0ICgxNikKK307CisvLyBIVE1MICAgICAgIDEgICAgICAyICAgICAg
MyAgICAgIDQgICAgICA1ICAgICAgNiAgICAgIDcKKy8vIENTUyAgeHhzICAgeHMgICAgIHMgICAg
ICBtICAgICAgbCAgICAgeGwgICAgIHh4bAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHwK
Ky8vICAgICAgICAgICAgICAgICAgICAgIHVzZXIgcHJlZgorCisvLyBGb3IgdmFsdWVzIG91dHNp
ZGUgdGhlIHJhbmdlIG9mIHRoZSB0YWJsZSwgd2UgdXNlIFRvZGQgRmFocm5lcidzIHN1Z2dlc3Rl
ZCBzY2FsZQorLy8gZmFjdG9ycyBmb3IgZWFjaCBrZXl3b3JkIHZhbHVlLgorc3RhdGljIGNvbnN0
IGZsb2F0IGZvbnRTaXplRmFjdG9yc1t0b3RhbEtleXdvcmRzXSA9IHsgMC42MGYsIDAuNzVmLCAw
Ljg5ZiwgMS4wZiwgMS4yZiwgMS41ZiwgMi4wZiwgMy4wZiB9OworCitmbG9hdCBTdHlsZVJlc29s
dmVyOjpmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29yZCwg
Ym9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKQoreworICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJl
dHVybiAxLjBmOworCisgICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVpcmtzTW9k
ZSgpOworICAgIGludCBtZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/IHNl
dHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6
ZSgpOworICAgIGlmIChtZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVtU2l6
ZSA8PSBmb250U2l6ZVRhYmxlTWF4KSB7CisgICAgICAgIC8vIExvb2sgdXAgdGhlIGVudHJ5IGlu
IHRoZSB0YWJsZS4KKyAgICAgICAgaW50IHJvdyA9IG1lZGl1bVNpemUgLSBmb250U2l6ZVRhYmxl
TWluOworICAgICAgICBpbnQgY29sID0gKGtleXdvcmQgLSBDU1NWYWx1ZVh4U21hbGwpOworICAg
ICAgICByZXR1cm4gcXVpcmtzTW9kZSA/IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93XVtjb2xdIDog
c3RyaWN0Rm9udFNpemVUYWJsZVtyb3ddW2NvbF07CisgICAgfQorCisgICAgLy8gVmFsdWUgaXMg
b3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIHRhYmxlLiBBcHBseSB0aGUgc2NhbGUgZmFjdG9yIGlu
c3RlYWQuCisgICAgZmxvYXQgbWluTG9naWNhbFNpemUgPSBtYXgoc2V0dGluZ3MtPm1pbmltdW1M
b2dpY2FsRm9udFNpemUoKSwgMSk7CisgICAgcmV0dXJuIG1heChmb250U2l6ZUZhY3RvcnNba2V5
d29yZCAtIENTU1ZhbHVlWHhTbWFsbF0qbWVkaXVtU2l6ZSwgbWluTG9naWNhbFNpemUpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIGludCBmaW5kTmVhcmVzdExlZ2FjeUZvbnRT
aXplKGludCBwaXhlbEZvbnRTaXplLCBjb25zdCBUKiB0YWJsZSwgaW50IG11bHRpcGxpZXIpCit7
CisgICAgLy8gSWdub3JlIHRhYmxlWzBdIGJlY2F1c2UgeHgtc21hbGwgZG9lcyBub3QgY29ycmVz
cG9uZCB0byBhbnkgbGVnYWN5IGZvbnQgc2l6ZS4KKyAgICBmb3IgKGludCBpID0gMTsgaSA8IHRv
dGFsS2V5d29yZHMgLSAxOyBpKyspIHsKKyAgICAgICAgaWYgKHBpeGVsRm9udFNpemUgKiAyIDwg
KHRhYmxlW2ldICsgdGFibGVbaSArIDFdKSAqIG11bHRpcGxpZXIpCisgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIHRvdGFsS2V5d29yZHMgLSAxOworfQorCitpbnQgU3R5
bGVSZXNvbHZlcjo6bGVnYWN5Rm9udFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgcGl4ZWxG
b250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKQoreworICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisg
ICAgICAgIHJldHVybiAxOworCisgICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVp
cmtzTW9kZSgpOworICAgIGludCBtZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6
ZSA/IHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRG
b250U2l6ZSgpOworICAgIGlmIChtZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVk
aXVtU2l6ZSA8PSBmb250U2l6ZVRhYmxlTWF4KSB7CisgICAgICAgIGludCByb3cgPSBtZWRpdW1T
aXplIC0gZm9udFNpemVUYWJsZU1pbjsKKyAgICAgICAgcmV0dXJuIGZpbmROZWFyZXN0TGVnYWN5
Rm9udFNpemU8aW50PihwaXhlbEZvbnRTaXplLCBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVU
YWJsZVtyb3ddIDogc3RyaWN0Rm9udFNpemVUYWJsZVtyb3ddLCAxKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmluZE5lYXJlc3RMZWdhY3lGb250U2l6ZTxmbG9hdD4ocGl4ZWxGb250U2l6ZSwgZm9u
dFNpemVGYWN0b3JzLCBtZWRpdW1TaXplKTsKK30KKworc3RhdGljIENvbG9yIGNvbG9yRm9yQ1NT
VmFsdWUoaW50IGNzc1ZhbHVlSWQpCit7CisgICAgc3RydWN0IENvbG9yVmFsdWUgeworICAgICAg
ICBpbnQgY3NzVmFsdWVJZDsKKyAgICAgICAgUkdCQTMyIGNvbG9yOworICAgIH07CisKKyAgICBz
dGF0aWMgY29uc3QgQ29sb3JWYWx1ZSBjb2xvclZhbHVlc1tdID0geworICAgICAgICB7IENTU1Zh
bHVlQXF1YSwgMHhGRjAwRkZGRiB9LAorICAgICAgICB7IENTU1ZhbHVlQmxhY2ssIDB4RkYwMDAw
MDAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZUJsdWUsIDB4RkYwMDAwRkYgfSwKKyAgICAgICAgeyBD
U1NWYWx1ZUZ1Y2hzaWEsIDB4RkZGRjAwRkYgfSwKKyAgICAgICAgeyBDU1NWYWx1ZUdyYXksIDB4
RkY4MDgwODAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZUdyZWVuLCAweEZGMDA4MDAwICB9LAorICAg
ICAgICB7IENTU1ZhbHVlR3JleSwgMHhGRjgwODA4MCB9LAorICAgICAgICB7IENTU1ZhbHVlTGlt
ZSwgMHhGRjAwRkYwMCB9LAorICAgICAgICB7IENTU1ZhbHVlTWFyb29uLCAweEZGODAwMDAwIH0s
CisgICAgICAgIHsgQ1NTVmFsdWVOYXZ5LCAweEZGMDAwMDgwIH0sCisgICAgICAgIHsgQ1NTVmFs
dWVPbGl2ZSwgMHhGRjgwODAwMCAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZU9yYW5nZSwgMHhGRkZG
QTUwMCB9LAorICAgICAgICB7IENTU1ZhbHVlUHVycGxlLCAweEZGODAwMDgwIH0sCisgICAgICAg
IHsgQ1NTVmFsdWVSZWQsIDB4RkZGRjAwMDAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZVNpbHZlciwg
MHhGRkMwQzBDMCB9LAorICAgICAgICB7IENTU1ZhbHVlVGVhbCwgMHhGRjAwODA4MCAgfSwKKyAg
ICAgICAgeyBDU1NWYWx1ZVRyYW5zcGFyZW50LCAweDAwMDAwMDAwIH0sCisgICAgICAgIHsgQ1NT
VmFsdWVXaGl0ZSwgMHhGRkZGRkZGRiB9LAorICAgICAgICB7IENTU1ZhbHVlWWVsbG93LCAweEZG
RkZGRjAwIH0sCisgICAgICAgIHsgMCwgMCB9CisgICAgfTsKKworICAgIGZvciAoY29uc3QgQ29s
b3JWYWx1ZSogY29sID0gY29sb3JWYWx1ZXM7IGNvbC0+Y3NzVmFsdWVJZDsgKytjb2wpIHsKKyAg
ICAgICAgaWYgKGNvbC0+Y3NzVmFsdWVJZCA9PSBjc3NWYWx1ZUlkKQorICAgICAgICAgICAgcmV0
dXJuIGNvbC0+Y29sb3I7CisgICAgfQorICAgIHJldHVybiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRo
ZW1lKCktPnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOworfQorCitDb2xvciBTdHlsZVJlc29sdmVy
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wg
Zm9yVmlzaXRlZExpbmspIGNvbnN0Cit7CisgICAgaWYgKHZhbHVlLT5pc1JHQkNvbG9yKCkpCisg
ICAgICAgIHJldHVybiBDb2xvcih2YWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7CisKKyAgICBpbnQg
aWRlbnQgPSB2YWx1ZS0+Z2V0SWRlbnQoKTsKKyAgICBzd2l0Y2ggKGlkZW50KSB7CisgICAgY2Fz
ZSAwOgorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4
dDoKKyAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7Cisg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6CisgICAgICAgIHJldHVybiAobV9lbGVtZW50LT5p
c0xpbmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0
ZWRMaW5rQ29sb3IoKSA6IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CisgICAg
Y2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbms6CisgICAgICAgIHJldHVybiBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRG
b2N1c1JpbmdDb2xvcjoKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpmb2N1c1JpbmdDb2xv
cigpOworICAgIGNhc2UgQ1NTVmFsdWVDdXJyZW50Y29sb3I6CisgICAgICAgIHJldHVybiBtX3N0
eWxlLT5jb2xvcigpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBjb2xvckZvckNTU1Zh
bHVlKGlkZW50KTsKKyAgICB9Cit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JG
b3JBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nICZhdHRybmFtZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9mZWF0dXJlcy5hdHRyc0luUnVsZXMuY29udGFpbnMoYXR0cm5hbWUuaW1wbCgpKTsK
K30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlS
ZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwciwgYm9vbCByZXN1bHQpCit7CisgICAgbV92
aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmFwcGVuZChhZG9wdFB0cihuZXcgTWVk
aWFRdWVyeVJlc3VsdCgqZXhwciwgcmVzdWx0KSkpOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6
OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgcyA9IG1f
dmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5zaXplKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHM7IGkrKykgeworICAgICAgICBpZiAobV9tZWRpdW0tPmV2YWwoJm1f
dmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9leHByZXNzaW9uKSAhPSBt
X3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1fcmVzdWx0KQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRUcmFuc2Zvcm1PcGVyYXRpb25U
eXBlKFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlND
QUxFOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9w
ZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDsKKyAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBU
cmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9u
OjpTQ0FMRV9aOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlM0RUcmFu
c2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOworICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOworICAgIGNhc2UgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9ZOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9aOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0
ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEVfM0Q7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU7CisgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJu
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFX1k7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRl
WlRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1o7
CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVy
YXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDsKKyAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJh
bnNmb3JtT3BlcmF0aW9uOjpTS0VXOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlNrZXdYVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VX
X1g7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVy
YXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWTsKKyAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFu
c2Zvcm1PcGVyYXRpb246Ok1BVFJJWDsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6
TUFUUklYXzNEOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElW
RTsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpVbmtub3duVHJhbnNmb3JtT3Bl
cmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOworICAgIH0KKyAgICByZXR1
cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OmNy
ZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBz
dHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3V0T3Bl
cmF0aW9ucykKK3sKKyAgICBpZiAoIWluVmFsdWUgfHwgIWluVmFsdWUtPmlzVmFsdWVMaXN0KCkp
IHsKKyAgICAgICAgb3V0T3BlcmF0aW9ucy5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlID8gc3R5bGUtPmVmZmVjdGl2
ZVpvb20oKSA6IDE7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIGZv
ciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IGluVmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFu
Y2UoKSkgeworICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOworICAgICAg
ICBpZiAoIWN1cnJWYWx1ZS0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqIHRyYW5zZm9y
bVZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqPihpLnZhbHVlKCkp
OworICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGJvb2wgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0gZmFsc2U7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCk7
ICsraikgeworICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhqKS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgaGF2ZU5v
blByaW1pdGl2ZVZhbHVlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaGF2ZU5vblByaW1pdGl2ZVZhbHVlKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDApKTsKKworICAgICAgICBzd2l0Y2ggKHRyYW5zZm9ybVZhbHVl
LT5vcGVyYXRpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAg
ICBkb3VibGUgc3ggPSAxLjA7CisgICAgICAgICAgICBkb3VibGUgc3kgPSAxLjA7CisgICAgICAg
ICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHN5
ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJs
ZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgc3kgPSBzeDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShzeCwgc3ksIDEuMCwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zv
cm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3Jt
T3BlcmF0aW9uOgorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNE
VHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBkb3VibGUgc3ggPSAxLjA7CisgICAg
ICAgICAgICBkb3VibGUgc3kgPSAxLjA7CisgICAgICAgICAgICBkb3VibGUgc3ogPSAxLjA7Cisg
ICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAg
ICAgIHN6ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICBzeSA9IGZp
cnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gdGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoc3gsIHN5
LCBzeiwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9u
VHlwZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOgorICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3Bl
cmF0aW9uOgorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZ
VHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBMZW5ndGggdHggPSBMZW5ndGgoMCwg
Rml4ZWQpOworICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAg
ICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAg
ICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHls
ZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0eCA9
IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21G
YWN0b3IpOworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlw
ZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0
aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkg
PiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25k
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0g
Y29udmVydFRvRmxvYXRMZW5ndGgoc2Vjb25kVmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21G
YWN0b3IpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAodHguaXNVbmRlZmluZWQoKSB8fCB0eS5pc1VuZGVm
aW5lZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAsIEZpeGVkKSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlw
ZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNs
YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6VHJhbnNsYXRlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgIExlbmd0
aCB0eCA9IExlbmd0aCgwLCBGaXhlZCk7CisgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgo
MCwgRml4ZWQpOworICAgICAgICAgICAgTGVuZ3RoIHR6ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAg
ICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAg
ICAgICAgIHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RT
dHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+
b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJh
bnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5n
dGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0eCA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0
VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAyKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aCh0aGlyZFZh
bHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZl
cnRUb0Zsb2F0TGVuZ3RoKHNlY29uZFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9y
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHR4LmlzVW5kZWZpbmVkKCkgfHwgdHkuaXNVbmRlZmluZWQo
KSB8fCB0ei5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgdHosIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5
cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RW
YWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgwLCAwLCAxLCBhbmds
ZSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlw
ZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjoK
KyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9w
ZXJhdGlvbjogeworICAgICAgICAgICAgZG91YmxlIHggPSAwOworICAgICAgICAgICAgZG91Ymxl
IHkgPSAwOworICAgICAgICAgICAgZG91YmxlIHogPSAwOworICAgICAgICAgICAgZG91YmxlIGFu
Z2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKworICAgICAgICAgICAgaWYgKHRy
YW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgeCA9IDE7CisgICAg
ICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAg
ICAgICAgIHkgPSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHogPSAxOwor
ICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25U
eXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3Rh
dGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVl
LT5sZW5ndGgoKSA8IDQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7Cisg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZm91cnRoVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDMpKTsKKyAgICAgICAgICAgIGRvdWJsZSB4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKKyAgICAgICAgICAgIGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7
CisgICAgICAgICAgICBkb3VibGUgeiA9IHRoaXJkVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Cisg
ICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmb3VydGhWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsK
KyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9u
VHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tl
d1RyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6U2tld1hUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBkb3VibGUg
YW5nbGVYID0gMDsKKyAgICAgICAgICAgIGRvdWJsZSBhbmdsZVkgPSAwOworICAgICAgICAgICAg
ZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAg
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICBhbmdsZVkg
PSBhbmdsZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGFuZ2xlWCA9IGFu
Z2xlOworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlWSA9IHNlY29u
ZFZhbHVlLT5jb21wdXRlRGVncmVlcygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgsIGFuZ2xl
WSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlw
ZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAg
ICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgNikKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRvdWJsZSBhID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKKyAgICAgICAgICAgIGRvdWJsZSBiID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSktPmdldERvdWJsZVZh
bHVlKCk7CisgICAgICAgICAgICBkb3VibGUgYyA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLT5nZXREb3Vi
bGVWYWx1ZSgpOworICAgICAgICAgICAgZG91YmxlIGQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0
RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRvdWJsZSBlID0gem9vbUZhY3RvciAqIHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soNCkpLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91YmxlIGYgPSB6
b29tRmFjdG9yICogc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg1KSktPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAg
ICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoYSwgYiwgYywgZCwgZSwgZikpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3Ro
KCkgPCAxNikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0RG91Ymxl
VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIp
KS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDYpKS0+Z2V0RG91
YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDcpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDgpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRy
YW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEwKSktPmdldERvdWJsZVZhbHVl
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMSkpLT5n
ZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb21GYWN0
b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEyKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgem9vbUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTMpKS0+Z2V0RG91
YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDE0KSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygxNSkpLT5nZXREb3VibGVWYWx1ZSgpKTsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKG1hdHJpeCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246
IHsKKyAgICAgICAgICAgIExlbmd0aCBwID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAg
IGlmIChmaXJzdFZhbHVlLT5pc0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0
VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBxdWlyayB0
aGF0IHNob3VsZCBnbyBhd2F5IHdoZW4gM2QgdHJhbnNmb3JtcyBhcmUgZmluYWxpemVkLgorICAg
ICAgICAgICAgICAgIGRvdWJsZSB2YWwgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgIHAgPSB2YWwgPj0gMCA/IExlbmd0aChjbGFtcFRvUG9zaXRpdmVJbnRl
Z2VyKHZhbCksIEZpeGVkKSA6IExlbmd0aChVbmRlZmluZWQpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAocC5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFBlcnNw
ZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUocCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93
blRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdXRPcGVyYXRpb25z
ID0gb3BlcmF0aW9uczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKK3N0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0
aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6
OlJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlv
bjo6UkVGRVJFTkNFOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZp
bHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxF
OworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVyT3BlcmF0aW9uOgor
ICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTsKKyAgICBjYXNlIFdlYktpdENT
U0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZp
bHRlck9wZXJhdGlvbjo6U0FUVVJBVEU7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6
SHVlUm90YXRlRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9u
OjpIVUVfUk9UQVRFOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkludmVydEZpbHRl
ck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOworICAg
IGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRpb246CisgICAg
ICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk7CisgICAgY2FzZSBXZWJLaXRDU1NG
aWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZp
bHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzsKKyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVl
OjpDb250cmFzdEZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlv
bjo6Q09OVFJBU1Q7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Qmx1ckZpbHRlck9w
ZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QkxVUjsKKyAgICBjYXNl
IFdlYktpdENTU0ZpbHRlclZhbHVlOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOgorICAgICAg
ICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzsKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q3VzdG9tRmlsdGVyT3BlcmF0
aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT007CisjZW5kaWYKKyAg
ICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpVbmtub3duRmlsdGVyT3BlcmF0aW9uOgorICAg
ICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpOT05FOworICAgIH0KKyAgICByZXR1cm4gRmls
dGVyT3BlcmF0aW9uOjpOT05FOworfQorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorU3R5bGVT
aGFkZXIqIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUtPmlzV2ViS2l0Q1NTU2hhZGVyVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGNh
Y2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKHN0YXRpY19jYXN0PFdlYktpdENTU1No
YWRlclZhbHVlKj4odmFsdWUpKTsKKyAgICByZXR1cm4gMDsKK30KKworU3R5bGVTaGFkZXIqIFN0
eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFdlYktpdENT
U1NoYWRlclZhbHVlKiB2YWx1ZSkKK3sKKyAgICBTdHlsZVNoYWRlciogc2hhZGVyID0gdmFsdWUt
PmNhY2hlZE9yUGVuZGluZ1NoYWRlcigpOworICAgIGlmIChzaGFkZXIgJiYgc2hhZGVyLT5pc1Bl
bmRpbmdTaGFkZXIoKSkKKyAgICAgICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IHRydWU7CisgICAg
cmV0dXJuIHNoYWRlcjsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRl
cnMoKQoreworICAgIGlmICghbV9zdHlsZS0+aGFzRmlsdGVyKCkgfHwgIW1faGFzUGVuZGluZ1No
YWRlcnMpCisgICAgICAgIHJldHVybjsKKworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNo
ZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKTsKKworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJP
cGVyYXRpb25zID0gbV9zdHlsZS0+ZmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAg
IFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlv
bnMuYXQoaSk7CisgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUo
KSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgeworICAgICAgICAgICAgQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uKiBjdXN0b21GaWx0ZXIgPSBzdGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJPcGVyYXRp
b24qPihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGN1c3RvbUZp
bHRlci0+cHJvZ3JhbSgpKTsKKyAgICAgICAgICAgIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSog
cHJvZ3JhbSA9IHN0YXRpY19jYXN0PFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSo+KGN1c3RvbUZp
bHRlci0+cHJvZ3JhbSgpKTsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KSAmJiBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS0+aXNQZW5kaW5nU2hhZGVyKCkpIHsKKyAgICAg
ICAgICAgICAgICBXZWJLaXRDU1NTaGFkZXJWYWx1ZSogc2hhZGVyVmFsdWUgPSBzdGF0aWNfY2Fz
dDxTdHlsZVBlbmRpbmdTaGFkZXIqPihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKSktPmNzc1NoYWRl
clZhbHVlKCk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS0+c2V0VmVydGV4U2hhZGVyKHNoYWRl
clZhbHVlLT5jYWNoZWRTaGFkZXIoY2FjaGVkUmVzb3VyY2VMb2FkZXIpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpICYmIHByb2dyYW0t
PmZyYWdtZW50U2hhZGVyKCktPmlzUGVuZGluZ1NoYWRlcigpKSB7CisgICAgICAgICAgICAgICAg
V2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHNoYWRlclZhbHVlID0gc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nU2hhZGVyKj4ocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKSktPmNzc1NoYWRlclZhbHVlKCk7
CisgICAgICAgICAgICAgICAgcHJvZ3JhbS0+c2V0RnJhZ21lbnRTaGFkZXIoc2hhZGVyVmFsdWUt
PmNhY2hlZFNoYWRlcihjYWNoZWRSZXNvdXJjZUxvYWRlcikpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIG1faGFzUGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKK30KKworc3Rh
dGljIGJvb2wgc29ydFBhcmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKGNvbnN0IFJlZlB0cjxDdXN0
b21GaWx0ZXJQYXJhbWV0ZXI+JiBhLCBjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVy
PiYgYikKK3sKKyAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGEtPm5hbWUoKSwg
Yi0+bmFtZSgpKTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxl
UmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW10ZXIoY29uc3QgU3RyaW5nJiBu
YW1lLCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykKK3sKKyAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyTnVt
YmVyUGFyYW1ldGVyPiBudW1iZXJQYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0
ZXI6OmNyZWF0ZShuYW1lKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLT5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IHZhbHVlcy0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwor
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBudW1i
ZXJQYXJhbWV0ZXItPmFkZFZhbHVlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpKTsK
KyAgICB9CisgICAgcmV0dXJuIG51bWJlclBhcmFtZXRlci5yZWxlYXNlKCk7Cit9CisKK2Jvb2wg
U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiBw
YXJhbWV0ZXJzVmFsdWUsIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlckxpc3Qp
Cit7CisgICAgSGFzaFNldDxTdHJpbmc+IGtub3duUGFyYW1ldGVyTmFtZXM7CisgICAgQ1NTVmFs
dWVMaXN0SXRlcmF0b3IgcGFyYW1ldGVySXRlcmF0b3IocGFyYW1ldGVyc1ZhbHVlKTsKKyAgICBm
b3IgKDsgcGFyYW1ldGVySXRlcmF0b3IuaGFzTW9yZSgpOyBwYXJhbWV0ZXJJdGVyYXRvci5hZHZh
bmNlKCkpIHsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXJJdGVyYXRvci52YWx1ZSgpLT5pc1ZhbHVl
TGlzdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBDU1NWYWx1ZUxpc3RJ
dGVyYXRvciBpdGVyYXRvcihwYXJhbWV0ZXJJdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgaWYg
KCFpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RS
SU5HKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgU3RyaW5n
IG5hbWUgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAgLy8gRG8g
bm90IGFsbG93IGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMuCisgICAgICAgIGlmIChrbm93blBh
cmFtZXRlck5hbWVzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBrbm93blBhcmFtZXRlck5hbWVzLmFkZChuYW1lKTsKKyAgICAgICAgCisgICAgICAg
IGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghaXRlcmF0b3IuaGFz
TW9yZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBvdGhlciBwYXJhbWV0ZXJzIHR5cGVzIHBhcnNpbmcuCisgICAgICAg
IC8vIGJvb2xlYW5zOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0
MzgKKyAgICAgICAgLy8gdGV4dHVyZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTQ0MgorICAgICAgICAvLyAzZC10cmFuc2Zvcm1zOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0NDMKKyAgICAgICAgLy8gbWF0MiwgbWF0MywgbWF0
NDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDQ0CisgICAgICAg
IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlcjsKKyAgICAgICAgaWYgKGl0
ZXJhdG9yLnZhbHVlKCktPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlz
dCogdmFsdWVzID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oaXRlcmF0b3IudmFsdWUoKSk7
CisgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFdlIGNhbiBoYXZlIG9ubHkgYXJyYXlzIG9mIGJvb2xlYW5zIG9yIG51bWJlcnMsIHNv
IHVzZSB0aGUgZmlyc3QgdmFsdWUgdG8gY2hvb3NlIGJldHdlZW4gdGhvc2UgdHdvLgorICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3Qgb25lIHZhbHVlLiBXZSBuZWVkIHVw
IHRvIDQgdmFsdWVzIChhbGwgYm9vbGVhbnMgb3IgYWxsIG51bWJlcnMpLgorICAgICAgICAgICAg
aWYgKCF2YWx1ZXMtPmxlbmd0aCgpIHx8IHZhbHVlcy0+bGVuZ3RoKCkgPiA0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCF2YWx1
ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBmaXJzdFByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgICAgICAg
ICAgaWYgKGZpcnN0UHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgPSBwYXJzZUN1
c3RvbUZpbHRlck51bWJlclBhcmFtdGVyKG5hbWUsIHZhbHVlcyk7CisgICAgICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoZSBib29sZWFuIGFycmF5IHBhcmFtZXRlciBoZXJlLgorICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDM4Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghcGFyYW1ldGVyKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcGFyYW1ldGVyTGlzdC5hcHBlbmQocGFy
YW1ldGVyLnJlbGVhc2UoKSk7CisgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3VyZSB3ZSBzb3J0
IHRoZSBwYXJhbWV0ZXJzIGJlZm9yZSBwYXNzaW5nIHRoZW0gZG93biB0byB0aGUgQ3VzdG9tRmls
dGVyT3BlcmF0aW9uLgorICAgIHN0ZDo6c29ydChwYXJhbWV0ZXJMaXN0LmJlZ2luKCksIHBhcmFt
ZXRlckxpc3QuZW5kKCksIHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29tcGFyYXRvcik7CisgICAgCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBT
dHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0Q1NTRmlsdGVy
VmFsdWUqIGZpbHRlclZhbHVlKQoreworICAgIEFTU0VSVChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkp
OworCisgICAgQ1NTVmFsdWUqIHNoYWRlcnNWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApOworICAgIEFTU0VSVChzaGFkZXJzVmFsdWUtPmlzVmFsdWVMaXN0KCkp
OworICAgIENTU1ZhbHVlTGlzdCogc2hhZGVyc0xpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPihzaGFkZXJzVmFsdWUpOworCisgICAgQVNTRVJUKHNoYWRlcnNMaXN0LT5sZW5ndGgoKSk7
CisgICAgUmVmUHRyPFN0eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNoYWRlcihzaGFk
ZXJzTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAgUmVmUHRyPFN0eWxlU2hh
ZGVyPiBmcmFnbWVudFNoYWRlciA9IChzaGFkZXJzTGlzdC0+bGVuZ3RoKCkgPiAxKSA/IHN0eWxl
U2hhZGVyKHNoYWRlcnNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKSA6IDA7CisgICAg
CisgICAgdW5zaWduZWQgbWVzaFJvd3MgPSAxOworICAgIHVuc2lnbmVkIG1lc2hDb2x1bW5zID0g
MTsKKyAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlIG1lc2hCb3hUeXBlID0g
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpGSUxURVJfQk9YOworICAgIEN1c3RvbUZpbHRlck9wZXJh
dGlvbjo6TWVzaFR5cGUgbWVzaFR5cGUgPSBDdXN0b21GaWx0ZXJPcGVyYXRpb246OkFUVEFDSEVE
OworICAgIAorICAgIENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUgPSAwOworICAgIAorICAgIGlm
IChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgIENTU1ZhbHVlTGlzdEl0ZXJh
dG9yIGl0ZXJhdG9yKGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoZSBzZWNvbmQgdmFsdWUgbWlnaHQgYmUgdGhlIG1lc2ggYm94
IG9yIHRoZSBsaXN0IG9mIHBhcmFtZXRlcnM6CisgICAgICAgIC8vIElmIGl0IHN0YXJ0cyB3aXRo
IGEgbnVtYmVyIG9yIGFueSBvZiB0aGUgbWVzaC1ib3ggaWRlbnRpZmllcnMgaXQgaXMgCisgICAg
ICAgIC8vIHRoZSBtZXNoLWJveCBsaXN0LCBpZiBub3QgaXQgbWVhbnMgaXQgaXMgdGhlIHBhcmFt
ZXRlcnMgbGlzdC4KKworICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTW9yZSgpICYmIGl0ZXJhdG9y
LmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52
YWx1ZSgpKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewor
ICAgICAgICAgICAgICAgIC8vIElmIG9ubHkgb25lIGludGVnZXIgdmFsdWUgaXMgc3BlY2lmaWVk
LCBpdCB3aWxsIHNldCBib3RoCisgICAgICAgICAgICAgICAgLy8gdGhlIHJvd3MgYW5kIHRoZSBj
b2x1bW5zLgorICAgICAgICAgICAgICAgIG1lc2hSb3dzID0gbWVzaENvbHVtbnMgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0SW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGFu
b3RoZXIgbnVtYmVyIGZvciB0aGUgY29sdW1ucy4KKyAgICAgICAgICAgICAgICBpZiAoaXRlcmF0
b3IuaGFzTW9yZSgpICYmIGl0ZXJhdG9yLmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc2hDb2x1bW5zID0gcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChpdGVyYXRvci5oYXNNb3JlKCkgJiYgaXRlcmF0b3IuaXNQcmltaXRp
dmVWYWx1ZSgpKSB7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOwor
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQm9y
ZGVyQm94CisgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVQYWRkaW5nQm94CisgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVDb250ZW50Qm94CisgICAgICAgICAgICAgICAgfHwgcHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWx0ZXJCb3gpIHsKKyAgICAgICAgICAg
ICAgICBtZXNoQm94VHlwZSA9ICpwcmltaXRpdmVWYWx1ZTsKKyAgICAgICAgICAgICAgICBpdGVy
YXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmIChpdGVyYXRvci5oYXNNb3JlKCkgJiYgaXRlcmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgp
KSB7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRGV0YWNoZWQpIHsK
KyAgICAgICAgICAgICAgICBtZXNoVHlwZSA9IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6REVUQUNI
RUQ7CisgICAgICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWl0ZXJhdG9yLmluZGV4KCkpIHsKKyAg
ICAgICAgICAgIC8vIElmIG5vIHZhbHVlIHdhcyBjb25zdW1lZCBmcm9tIHRoZSBtZXNoIHZhbHVl
LCB0aGVuIGl0IGlzIGp1c3QgYSBwYXJhbWV0ZXIgbGlzdCwgbWVhbmluZyB0aGF0IHdlIGVuZCB1
cAorICAgICAgICAgICAgLy8gaGF2aW5nIGp1c3QgdHdvIENTU0xpc3RWYWx1ZXM6IGxpc3Qgb2Yg
c2hhZGVycyBhbmQgbGlzdCBvZiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgQVNTRVJUKGZpbHRl
clZhbHVlLT5sZW5ndGgoKSA9PSAyKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnNWYWx1ZSA9IGZp
bHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPiAyICYmICFwYXJhbWV0ZXJzVmFs
dWUpCisgICAgICAgIHBhcmFtZXRlcnNWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDIpOworICAgIAorICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QgcGFyYW1l
dGVyTGlzdDsKKyAgICBpZiAocGFyYW1ldGVyc1ZhbHVlICYmICFwYXJzZUN1c3RvbUZpbHRlclBh
cmFtZXRlckxpc3QocGFyYW1ldGVyc1ZhbHVlLCBwYXJhbWV0ZXJMaXN0KSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgCisgICAgUmVmUHRyPFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3Jh
bSA9IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHZlcnRleFNoYWRlci5yZWxlYXNl
KCksIGZyYWdtZW50U2hhZGVyLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIEN1c3RvbUZpbHRlck9w
ZXJhdGlvbjo6Y3JlYXRlKHByb2dyYW0ucmVsZWFzZSgpLCBwYXJhbWV0ZXJMaXN0LCBtZXNoUm93
cywgbWVzaENvbHVtbnMsIG1lc2hCb3hUeXBlLCBtZXNoVHlwZSk7Cit9CisjZW5kaWYKKworYm9v
bCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVl
LCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJh
dGlvbnMmIG91dE9wZXJhdGlvbnMpCit7CisgICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNFbXB0
eSgpKTsKKyAgICAKKyAgICBpZiAoIWluVmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBpZiAoaW5WYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4oaW5WYWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFpblZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBmbG9hdCB6b29tRmFjdG9yID0gc3R5bGUgPyBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpIDog
MTsKKyAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgZm9yIChDU1NWYWx1ZUxp
c3RJdGVyYXRvciBpID0gaW5WYWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAg
ICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7CisgICAgICAgIGlmICghY3VyclZh
bHVlLT5pc1dlYktpdENTU0ZpbHRlclZhbHVlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZSo+KGkudmFsdWUoKSk7CisgICAgICAgIEZpbHRlck9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShm
aWx0ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
KyAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsK
KyAgICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNy
ZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihmaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAo
IW9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIC8vIENo
ZWNrIHRoYXQgYWxsIHBhcmFtZXRlcnMgYXJlIHByaW1pdGl2ZSB2YWx1ZXMsIHdpdGggdGhlCisg
ICAgICAgIC8vIGV4Y2VwdGlvbiBvZiBkcm9wIHNoYWRvdyB3aGljaCBoYXMgYSBTaGFkb3dWYWx1
ZSBwYXJhbWV0ZXIuCisgICAgICAgIGlmIChvcGVyYXRpb25UeXBlICE9IEZpbHRlck9wZXJhdGlv
bjo6RFJPUF9TSEFET1cpIHsKKyAgICAgICAgICAgIGJvb2wgaGF2ZU5vblByaW1pdGl2ZVZhbHVl
ID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgZmlsdGVyVmFs
dWUtPmxlbmd0aCgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpbHRlclZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKGopLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gZmls
dGVyVmFsdWUtPmxlbmd0aCgpID8gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihmaWx0
ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSkgOiAwOworICAgICAgICBzd2l0Y2gg
KGZpbHRlclZhbHVlLT5vcGVyYXRpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NG
aWx0ZXJWYWx1ZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBpZiAo
Zmlyc3RWYWx1ZSkKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmQoUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoZmlyc3RWYWx1ZS0+Z2V0U3RyaW5n
VmFsdWUoKSwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVyT3BlcmF0
aW9uOgorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZpbHRlck9wZXJh
dGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJP
cGVyYXRpb246IHsKKyAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOworICAgICAgICAgICAg
aWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgYW1vdW50
ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoZmly
c3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAx
MDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygp
LmFwcGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBv
cGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpIdWVSb3RhdGVGaWx0ZXJPcGVyYXRpb246IHsKKyAg
ICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IDA7CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUt
Pmxlbmd0aCgpID09IDEpCisgICAgICAgICAgICAgICAgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21w
dXRlRGVncmVlcygpOworCisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmQoQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlLCBvcGVyYXRp
b25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdl
YktpdENTU0ZpbHRlclZhbHVlOjpJbnZlcnRGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246CisgICAgICAg
IGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOgorICAg
ICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVyT3BlcmF0aW9uOiB7
CisgICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gKGZpbHRlclZhbHVlLT5vcGVyYXRpb25UeXBl
KCkgPT0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb24pID8g
MCA6IDE7CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09IDEpIHsKKyAg
ICAgICAgICAgICAgICBhbW91bnQgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAg
ICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgICAg
ICAgICAgICAgYW1vdW50IC89IDEwMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZShhbW91bnQsIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJsdXJG
aWx0ZXJPcGVyYXRpb246IHsKKyAgICAgICAgICAgIExlbmd0aCBzdGREZXZpYXRpb24gPSBMZW5n
dGgoMCwgRml4ZWQpOworICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA+PSAx
KQorICAgICAgICAgICAgICAgIHN0ZERldmlhdGlvbiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZp
cnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaWYg
KHN0ZERldmlhdGlvbi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZShzdGREZXZpYXRpb24sIG9wZXJhdGlvblR5cGUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246IHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJW
YWx1ZS0+bGVuZ3RoKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgICAgIENTU1ZhbHVlKiBjc3NWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDApOworICAgICAgICAgICAgaWYgKCFjc3NWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBTaGFkb3dWYWx1ZSog
aXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3NzVmFsdWUpOworICAgICAgICAgICAg
SW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290
U3R5bGUsIHpvb21GYWN0b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+
eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpKTsKKyAg
ICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5n
dGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBD
b2xvciBjb2xvcjsKKyAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKKyAgICAgICAgICAgICAg
ICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKwor
ICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKERyb3BTaGFkb3dGaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZShsb2NhdGlvbiwgYmx1ciwgY29sb3IuaXNWYWxpZCgpID8gY29s
b3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQsIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlVua25v
d25GaWx0ZXJPcGVyYXRpb246CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgb3V0T3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNl
bmRpZgorCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5n
SW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbmdJbWFnZSkKK3sKKyAgICBDYWNoZWRSZXNv
dXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisKKyAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFn
ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJ
bWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpOworICAgICAgICByZXR1cm4gaW1hZ2VWYWx1ZS0+Y2FjaGVk
SW1hZ2UoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAgIH0KKworICAgIGlmIChwZW5kaW5nSW1h
Z2UtPmNzc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRv
clZhbHVlKiBpbWFnZUdlbmVyYXRvclZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFnZUdlbmVy
YXRvclZhbHVlKCk7CisgICAgICAgIGltYWdlR2VuZXJhdG9yVmFsdWUtPmxvYWRTdWJpbWFnZXMo
Y2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFn
ZTo6Y3JlYXRlKGltYWdlR2VuZXJhdG9yVmFsdWUpOworICAgIH0KKworI2lmIEVOQUJMRShDU1Nf
SU1BR0VfU0VUKQorICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlU2V0VmFsdWUoKSkgewor
ICAgICAgICBDU1NJbWFnZVNldFZhbHVlKiBpbWFnZVNldFZhbHVlID0gcGVuZGluZ0ltYWdlLT5j
c3NJbWFnZVNldFZhbHVlKCk7CisgICAgICAgIHJldHVybiBpbWFnZVNldFZhbHVlLT5jYWNoZWRJ
bWFnZVNldChjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCit7Cisg
ICAgaWYgKG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cGVuZGluZ0ltYWdlUHJvcGVydGllcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9w
ZXJ0eSA9ICppdDsKKworICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgeworICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOiB7CisgICAgICAgICAgICBmb3IgKEZp
bGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdHlsZS0+YWNjZXNzQmFja2dyb3VuZExheWVy
cygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+
bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSAm
JiBiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAg
ICAgICAgICAgIGJhY2tncm91bmRMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0
aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlDb250ZW50OiB7CisgICAgICAgICAgICBmb3IgKENvbnRlbnREYXRhKiBj
b250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0eWxlLT5jb250ZW50RGF0
YSgpKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVudERhdGEtPm5leHQoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChjb250ZW50RGF0YS0+aXNJbWFnZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0
YSo+KGNvbnRlbnREYXRhKS0+aW1hZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdl
LT5pc1BlbmRpbmdJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5
bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxl
UGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2Fk
ZWRJbWFnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxJbWFnZUNv
bnRlbnREYXRhKj4oY29udGVudERhdGEpLT5zZXRJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUN1cnNvcjogeworICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0
eWxlLT5jdXJzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEN1cnNvckRh
dGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVudEN1cnNvci5pbWFnZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5zZXRJbWFnZShsb2FkUGVuZGluZ0lt
YWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1h
Z2U6IHsKKyAgICAgICAgICAgIGlmIChtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3R5
bGUtPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxT
dHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1h
Z2VTb3VyY2U6IHsKKyAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgp
ICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFn
ZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRlckltYWdlU291
cmNlKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogeworICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVj
dGlvbiogcmVmbGVjdGlvbiA9IG1fc3R5bGUtPmJveFJlZmxlY3QoKSkgeworICAgICAgICAgICAg
ICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0aW9uLT5tYXNrKCk7
CisgICAgICAgICAgICAgICAgaWYgKG1hc2tJbWFnZS5pbWFnZSgpICYmIG1hc2tJbWFnZS5pbWFn
ZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHls
ZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQ
ZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOworICAgICAgICAgICAgICAgICAgICBy
ZWZsZWN0aW9uLT5zZXRNYXNrKE5pbmVQaWVjZUltYWdlKGxvYWRlZEltYWdlLnJlbGVhc2UoKSwg
bWFza0ltYWdlLmltYWdlU2xpY2VzKCksIG1hc2tJbWFnZS5maWxsKCksIG1hc2tJbWFnZS5ib3Jk
ZXJTbGljZXMoKSwgbWFza0ltYWdlLm91dHNldCgpLCBtYXNrSW1hZ2UuaG9yaXpvbnRhbFJ1bGUo
KSwgbWFza0ltYWdlLnZlcnRpY2FsUnVsZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogeworICAgICAgICAgICAgaWYgKG1fc3R5
bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgp
LT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hc2tCb3hJ
bWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdl
Kj4obV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOiB7Cisg
ICAgICAgICAgICBmb3IgKEZpbGxMYXllciogbWFza0xheWVyID0gbV9zdHlsZS0+YWNjZXNzTWFz
a0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdl
KCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIG1hc2tMYXllci0+c2V0
SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1h
c2tMYXllci0+aW1hZ2UoKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5j
bGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43YTQyMDQxNzEzOWIxYWJkOWY5MDY3N2U5MWU4N2I1NjY5Mzhm
OTVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
aApAQCAtMCwwICsxLDU0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgU3R5bGVSZXNvbHZlcl9oCisjZGVmaW5lIFN0eWxlUmVzb2x2ZXJf
aAorCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgorI2lu
Y2x1ZGUgIkxpbmtIYXNoLmgiCisjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgorI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gRVNtYXJ0TWluaW11bUZv
ckZvbnRTaXplIHsgRG9Ob3RVc2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRNaW5p
bXVtRm9yRm9udEZpemUgfTsKKworY2xhc3MgQ1NTRm9udFNlbGVjdG9yOworY2xhc3MgQ1NTUGFn
ZVJ1bGU7CitjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKK2NsYXNzIENTU1Byb3BlcnR5OworY2xh
c3MgQ1NTUnVsZUxpc3Q7CitjbGFzcyBDU1NGb250RmFjZTsKK2NsYXNzIENTU0ZvbnRGYWNlUnVs
ZTsKK2NsYXNzIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU7CitjbGFzcyBDU1NJbWFnZVNldFZhbHVl
OworY2xhc3MgQ1NTSW1hZ2VWYWx1ZTsKK2NsYXNzIENTU1NlbGVjdG9yOworY2xhc3MgQ1NTU3R5
bGVSdWxlOworY2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNzIENTU1ZhbHVlOworY2xhc3MgQ29u
dGFpbmVyTm9kZTsKK2NsYXNzIEN1c3RvbUZpbHRlck9wZXJhdGlvbjsKK2NsYXNzIEN1c3RvbUZp
bHRlclBhcmFtZXRlcjsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEZy
YW1lOworY2xhc3MgRnJhbWVWaWV3OworY2xhc3MgS1VSTDsKK2NsYXNzIEtleWZyYW1lTGlzdDsK
K2NsYXNzIEtleWZyYW1lVmFsdWU7CitjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOworY2xhc3Mg
Tm9kZTsKK2NsYXNzIFJlbmRlclJlZ2lvbjsKK2NsYXNzIFJ1bGVEYXRhOworY2xhc3MgUnVsZVNl
dDsKK2NsYXNzIFNldHRpbmdzOworY2xhc3MgU3RhdGljQ1NTUnVsZUxpc3Q7CitjbGFzcyBTdHls
ZUJ1aWxkZXI7CitjbGFzcyBTdHlsZUltYWdlOworY2xhc3MgU3R5bGVLZXlmcmFtZTsKK2NsYXNz
IFN0eWxlUGVuZGluZ0ltYWdlOworY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNzIFN0eWxl
UnVsZTsKK2NsYXNzIFN0eWxlUnVsZUtleWZyYW1lczsKK2NsYXNzIFN0eWxlUnVsZVBhZ2U7Citj
bGFzcyBTdHlsZVJ1bGVSZWdpb247CitjbGFzcyBTdHlsZVNoYWRlcjsKK2NsYXNzIFN0eWxlU2hl
ZXQ7CitjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWw7CitjbGFzcyBTdHlsZVNoZWV0TGlzdDsKK2Ns
YXNzIFN0eWxlZEVsZW1lbnQ7CitjbGFzcyBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTsKK2NsYXNzIFdl
YktpdENTU1NoYWRlclZhbHVlOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQordHlwZWRlZiBW
ZWN0b3I8UmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gPiBDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0OworI2VuZGlmCisKK2NsYXNzIE1lZGlhUXVlcnlSZXN1bHQgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE1lZGlhUXVlcnlSZXN1bHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAmIGV4cHIs
IGJvb2wgcmVzdWx0KQorICAgICAgICA6IG1fZXhwcmVzc2lvbihleHByKQorICAgICAgICAsIG1f
cmVzdWx0KHJlc3VsdCkKKyAgICB7CisgICAgfQorCisgICAgTWVkaWFRdWVyeUV4cCBtX2V4cHJl
c3Npb247CisgICAgYm9vbCBtX3Jlc3VsdDsKK307CisKK2VudW0gU3R5bGVTaGFyaW5nQmVoYXZp
b3IgeworICAgIEFsbG93U3R5bGVTaGFyaW5nLAorICAgIERpc2FsbG93U3R5bGVTaGFyaW5nLAor
fTsKKworLy8gTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMgaXMgdXNlZCBpbiBtZWRpYSBxdWVyaWVz
LCB3aGVyZSByZWxhdGl2ZSB1bml0cworLy8gYXJlIGludGVycHJldGVkIGFjY29yZGluZyB0byB0
aGUgZG9jdW1lbnQgcm9vdCBlbGVtZW50IHN0eWxlLCBhbmQgc3R5bGVkIG9ubHkKKy8vIGZyb20g
dGhlIFVzZXIgQWdlbnQgU3R5bGVzaGVldCBydWxlcy4KKworZW51bSBSdWxlTWF0Y2hpbmdCZWhh
dmlvciB7CisgICAgTWF0Y2hBbGxSdWxlcywKKyAgICBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcywK
K307CisKKy8vIFRoaXMgY2xhc3Mgc2VsZWN0cyBhIFJlbmRlclN0eWxlIGZvciBhIGdpdmVuIGVs
ZW1lbnQgYmFzZWQgb24gYSBjb2xsZWN0aW9uIG9mIHN0eWxlc2hlZXRzLgorY2xhc3MgU3R5bGVS
ZXNvbHZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVSZXNvbHZlcik7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQq
LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyk7CisgICAgflN0eWxlUmVzb2x2ZXIoKTsK
KworICAgIC8vIFVzaW5nIHRoZXNlIGR1cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBz
ZWxlY3RvciB0byBvcHRpbWl6ZSBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBz
LgorICAgIHZvaWQgcHVzaFBhcmVudEVsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgcG9wUGFy
ZW50RWxlbWVudChFbGVtZW50Kik7CisgICAgdm9pZCBwdXNoUGFyZW50U2hhZG93Um9vdChjb25z
dCBTaGFkb3dSb290Kik7CisgICAgdm9pZCBwb3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRv
d1Jvb3QqKTsKKworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChF
bGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgU3R5bGVTaGFyaW5nQmVoYXZp
b3IgPSBBbGxvd1N0eWxlU2hhcmluZywKKyAgICAgICAgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBN
YXRjaEFsbFJ1bGVzLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKKworICAg
IHZvaWQga2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCosIGNvbnN0IFJlbmRlclN0
eWxlKiwgS2V5ZnJhbWVMaXN0Jik7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1
ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSAwKTsKKworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUGFnZShp
bnQgcGFnZUluZGV4KTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHls
ZUZvckRvY3VtZW50KERvY3VtZW50KiwgQ1NTRm9udFNlbGVjdG9yKiA9IDApOworCisgICAgUmVu
ZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0K
KyAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dEVsZW1lbnRTdHlsZTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2VsZW1lbnQ7IH0KKyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2No
ZWNrZXIuZG9jdW1lbnQoKTsgfQorICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVu
dFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgdm9pZCBzZXRGb250RGVzY3JpcHRp
b24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkg
fD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICB2
b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYp
OyB9CisgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0g
c3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQorICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1
c3QoYm9vbCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIp
OyB9CisgICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnROb2Rl
OyB9CisgICAgCisgICAgdm9pZCBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJz
dE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+Jik7CisgICAgCisgICAgLy8g
RmluZCB0aGUgaWRzIG9yIGNsYXNzZXMgdGhlIHNlbGVjdG9ycyBvbiBhIHN0eWxlc2hlZXQgYXJl
IHNjb3BlZCB0by4gVGhlIHNlbGVjdG9ycyBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIGluIHN1YnRy
ZWVzIHdoZXJlIHRoZSByb290IGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2NvcGUuCisgICAgc3RhdGlj
IGJvb2wgZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKFN0eWxlU2hlZXRJbnRlcm5h
bCosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRGb3JT
dHlsZVJlc29sdmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVk
b0lkID0gTk9QU0VVRE8pOworICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOworICAgIHZv
aWQgY29sbGVjdEZlYXR1cmVzKCk7CisgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxl
KCk7CisgICAgYm9vbCBtYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CisgICAgTm9kZSogbG9jYXRl
Q291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBj
b25zdDsKKyAgICBTdHlsZWRFbGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2Rl
KiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKKyAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxl
bWVudChTdHlsZWRFbGVtZW50KikgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFt
ZSosIEtleWZyYW1lVmFsdWUmKTsKKworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgdm9p
ZCBwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlUGFyZW50KTsKKyAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlKTsKKyNlbHNlCisgICAgdm9pZCBwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSos
IGNvbnN0IENvbnRhaW5lck5vZGUqKSB7IH0KKyAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRh
aW5lck5vZGUqKSB7IH0KKyNlbmRpZgorCitwdWJsaWM6CisgICAgLy8gVGhlc2UgbWV0aG9kcyB3
aWxsIGdpdmUgYmFjayB0aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBl
bGVtZW50IChvciBhIHBzZXVkby1lbGVtZW50KS4KKyAgICBlbnVtIENTU1J1bGVGaWx0ZXIgewor
ICAgICAgICBVQUFuZFVzZXJDU1NSdWxlcyAgID0gMSA8PCAxLAorICAgICAgICBBdXRob3JDU1NS
dWxlcyAgICAgID0gMSA8PCAyLAorICAgICAgICBFbXB0eUNTU1J1bGVzICAgICAgID0gMSA8PCAz
LAorICAgICAgICBDcm9zc09yaWdpbkNTU1J1bGVzID0gMSA8PCA0LAorICAgICAgICBBbGxCdXRF
bXB0eUNTU1J1bGVzID0gVUFBbmRVc2VyQ1NTUnVsZXMgfCBBdXRob3JDU1NSdWxlcyB8IENyb3Nz
T3JpZ2luQ1NTUnVsZXMsCisgICAgICAgIEFsbENTU1J1bGVzICAgICAgICAgPSBBbGxCdXRFbXB0
eUNTU1J1bGVzIHwgRW1wdHlDU1NSdWxlcywKKyAgICB9OworICAgIFBhc3NSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IHN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqLCB1bnNpZ25lZCBydWxlc1RvSW5j
bHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IHBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqLCBQc2V1ZG9JZCwgdW5zaWduZWQg
cnVsZXNUb0luY2x1ZGUgPSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsKKworICAgIC8vIEdpdmVuIGEg
Q1NTIGtleXdvcmQgaW4gdGhlIHJhbmdlICh4eC1zbWFsbCB0byAtd2Via2l0LXh4eC1sYXJnZSks
IHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4KKyAgICAvLyB0aGUgY29ycmVjdCBmb250IHNpemUg
c2NhbGVkIHJlbGF0aXZlIHRvIHRoZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVtKS4KKyAgICBzdGF0
aWMgZmxvYXQgZm9udFNpemVGb3JLZXl3b3JkKERvY3VtZW50KiwgaW50IGtleXdvcmQsIGJvb2wg
c2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSk7CisKKyAgICAvLyBHaXZlbiBhIGZvbnQgc2l6ZSBp
biBwaXhlbCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBsZWdhY3kgZm9udCBzaXplIGJldHdl
ZW4gMSBhbmQgNy4KKyAgICBzdGF0aWMgaW50IGxlZ2FjeUZvbnRTaXplKERvY3VtZW50KiwgaW50
IHBpeGVsRm9udFNpemUsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSk7CisKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHMpIHsgbV9zdHls
ZSA9IHM7IH0gLy8gVXNlZCBieSB0aGUgZG9jdW1lbnQgd2hlbiBzZXR0aW5nIHVwIGl0cyByb290
IHN0eWxlLgorCisgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSosIFJlbmRlclN0eWxlKik7CisKKyAgICB2b2lkIGFwcGx5UHJvcGVydHlUb0N1cnJl
bnRTdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworCisgICAgdm9pZCB1cGRhdGVGb250
KCk7CisKKyAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUo
RG9jdW1lbnQqLCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBz
cGVjaWZpZWRTaXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1G
b3JGb250Rml6ZSk7CisKKyAgICB2b2lkIHNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYsIGZs
b2F0IHNpemUpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIFJlbmRlclN0eWxlKiwgYm9vbCBpc0Fic29sdXRl
U2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpOworCitwdWJs
aWM6CisgICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKTsKKworICAgIENvbG9yIGNvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZh
bHNlKSBjb25zdDsKKworICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgQXRv
bWljU3RyaW5nJikgY29uc3Q7CisKKyAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9CisKKyAgICB2b2lkIGFkZFZp
ZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiwgYm9v
bCByZXN1bHQpOworCisgICAgYm9vbCBhZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdDsK
KworICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpIHsgbV9jaGVja2VyLmFsbFZpc2l0
ZWRTdGF0ZUNoYW5nZWQoKTsgfQorICAgIHZvaWQgdmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFz
aCB2aXNpdGVkSGFzaCkgeyBtX2NoZWNrZXIudmlzaXRlZFN0YXRlQ2hhbmdlZCh2aXNpdGVkSGFz
aCk7IH0KKworICAgIHZvaWQgYWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUtl
eWZyYW1lcz4pOworCisgICAgYm9vbCBjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqIHJlZ2lvbkVs
ZW1lbnQpOworCisgICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gIW1f
ZmVhdHVyZXMuc2libGluZ1J1bGVzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgdXNlc0ZpcnN0TGlu
ZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXM7IH0K
KyAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJl
cy51c2VzQmVmb3JlQWZ0ZXJSdWxlczsgfQorICAgIGJvb2wgdXNlc0xpbmtSdWxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0xpbmtSdWxlczsgfQorCisgICAgc3RhdGljIGJvb2wg
Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUq
IGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91
dE9wZXJhdGlvbnMpOworICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUoKTsKKyAgICAKKyAgICAvLyBXQVJOSU5HLiBUaGlzIHdpbGwgY29uc3RydWN0IENTU09N
IHdyYXBwZXJzIGZvciBhbGwgc3R5bGUgcnVsZXMgYW5kIGNhY2hlIHRoZW4gaW4gYSBtYXAgZm9y
IHNpZ25pZmljYW50IG1lbW9yeSBjb3N0LgorICAgIC8vIEl0IGlzIGhlcmUgdG8gc3VwcG9ydCBp
bnNwZWN0b3IuIERvbid0IHVzZSBmb3IgYW55IHJlZ3VsYXIgZW5naW5lIGZ1bmN0aW9ucy4KKyAg
ICBDU1NTdHlsZVJ1bGUqIGVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVS
dWxlKik7CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgYm9vbCBjcmVhdGVGaWx0ZXJP
cGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVy
U3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CisjaWYg
RU5BQkxFKENTU19TSEFERVJTKQorICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihDU1NWYWx1
ZSopOworICAgIFN0eWxlU2hhZGVyKiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1
ZShXZWJLaXRDU1NTaGFkZXJWYWx1ZSopOworICAgIGJvb2wgcGFyc2VDdXN0b21GaWx0ZXJQYXJh
bWV0ZXJMaXN0KENTU1ZhbHVlKiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOworICAgIFBh
c3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlck51bWJlclBh
cmFtdGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7CisgICAgUGFzc1JlZlB0
cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJL
aXRDU1NGaWx0ZXJWYWx1ZSopOworICAgIHZvaWQgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisjZW5k
aWYKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisKKyAgICBzdHJ1Y3QgUnVsZUZlYXR1
cmUgeworICAgICAgICBSdWxlRmVhdHVyZShTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBz
ZWxlY3RvciwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICAgICAgICAgOiBy
dWxlKHJ1bGUpCisgICAgICAgICAgICAsIHNlbGVjdG9yKHNlbGVjdG9yKQorICAgICAgICAgICAg
LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pIAor
ICAgICAgICB7IAorICAgICAgICB9CisgICAgICAgIFN0eWxlUnVsZSogcnVsZTsKKyAgICAgICAg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yOworICAgICAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW47CisgICAgfTsKKyAgICBzdHJ1Y3QgRmVhdHVyZXMgeworICAgICAgICBGZWF0dXJlcygp
OworICAgICAgICB+RmVhdHVyZXMoKTsKKyAgICAgICAgdm9pZCBhZGQoY29uc3QgU3R5bGVSZXNv
bHZlcjo6RmVhdHVyZXMmKTsKKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICBIYXNoU2V0
PEF0b21pY1N0cmluZ0ltcGwqPiBpZHNJblJ1bGVzOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0
cmluZ0ltcGwqPiBhdHRyc0luUnVsZXM7CisgICAgICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gc2li
bGluZ1J1bGVzOworICAgICAgICBWZWN0b3I8UnVsZUZlYXR1cmU+IHVuY29tbW9uQXR0cmlidXRl
UnVsZXM7CisgICAgICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzOworICAgICAgICBib29sIHVz
ZXNCZWZvcmVBZnRlclJ1bGVzOworICAgICAgICBib29sIHVzZXNMaW5rUnVsZXM7CisgICAgfTsK
KworcHJpdmF0ZToKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZv
bnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWls
eSBoYXMgY2hhbmdlZC4gLWR3aAorICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdl
KFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNr
Rm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Cisg
ICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7CisKKyAgICB2b2lkIGFkanVzdFJlbmRl
clN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUsIEVsZW1lbnQqKTsKKworICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEq
IHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CisKKyAgICBzdHJ1Y3QgTWF0
Y2hSYW5nZXMgeworICAgICAgICBNYXRjaFJhbmdlcygpIDogZmlyc3RVQVJ1bGUoLTEpLCBsYXN0
VUFSdWxlKC0xKSwgZmlyc3RBdXRob3JSdWxlKC0xKSwgbGFzdEF1dGhvclJ1bGUoLTEpLCBmaXJz
dFVzZXJSdWxlKC0xKSwgbGFzdFVzZXJSdWxlKC0xKSB7IH0KKyAgICAgICAgaW50IGZpcnN0VUFS
dWxlOworICAgICAgICBpbnQgbGFzdFVBUnVsZTsKKyAgICAgICAgaW50IGZpcnN0QXV0aG9yUnVs
ZTsKKyAgICAgICAgaW50IGxhc3RBdXRob3JSdWxlOworICAgICAgICBpbnQgZmlyc3RVc2VyUnVs
ZTsKKyAgICAgICAgaW50IGxhc3RVc2VyUnVsZTsKKyAgICB9OworCisgICAgc3RydWN0IE1hdGNo
ZWRQcm9wZXJ0aWVzIHsKKyAgICAgICAgTWF0Y2hlZFByb3BlcnRpZXMoKSA6IHBvc3NpYmx5UGFk
ZGVkTWVtYmVyKDApIHsgfQorICAgICAgICAKKyAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlT
ZXQ+IHByb3BlcnRpZXM7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHN0cnVjdCB7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA6IDI7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaXNJblJlZ2lvblJ1bGUgOiAxOworICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIC8vIFVzZWQgdG8gbWFrZSBzdXJlIGFsbCBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZCBz
aW5jZSB3ZSBjb21wdXRlIHRoZSBoYXNoIG92ZXIgdGhlIGJ5dGVzIG9mIHRoaXMgb2JqZWN0Lgor
ICAgICAgICAgICAgdm9pZCogcG9zc2libHlQYWRkZWRNZW1iZXI7CisgICAgICAgIH07CisgICAg
fTsKKworICAgIHN0cnVjdCBNYXRjaFJlc3VsdCB7CisgICAgICAgIE1hdGNoUmVzdWx0KCkgOiBp
c0NhY2hlYWJsZSh0cnVlKSB7IH0KKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2
ND4gbWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAgIFZlY3RvcjxTdHlsZVJ1bGUqLCA2ND4gbWF0
Y2hlZFJ1bGVzOworICAgICAgICBNYXRjaFJhbmdlcyByYW5nZXM7CisgICAgICAgIGJvb2wgaXND
YWNoZWFibGU7CisgICAgfTsKKworICAgIHN0cnVjdCBNYXRjaE9wdGlvbnMgeworICAgICAgICBN
YXRjaE9wdGlvbnMoYm9vbCBpbmNsdWRlRW1wdHlSdWxlcywgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUgPSAwKSA6IHNjb3BlKHNjb3BlKSwgaW5jbHVkZUVtcHR5UnVsZXMoaW5jbHVkZUVtcHR5
UnVsZXMpIHsgfQorICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKKyAgICAgICAg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlczsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgYWRkTWF0
Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVz
LCBTdHlsZVJ1bGUqID0gMCwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hBbGwsIGJvb2wgaW5SZWdpb25SdWxlID0gZmFsc2UpOworICAgIHZvaWQgYWRkRWxl
bWVudFN0eWxlUHJvcGVydGllcyhNYXRjaFJlc3VsdCYsIFN0eWxlUHJvcGVydHlTZXQqLCBib29s
IGlzQ2FjaGVhYmxlID0gdHJ1ZSk7CisKKyAgICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1
bHQmKTsKKyAgICB2b2lkIG1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYpOworICAgIHZvaWQgbWF0
Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiwgUnVsZVNldCopOworICAgIHZvaWQgbWF0Y2hBdXRob3JS
dWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0
Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2
b2lkIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKKyAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZp
cnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwor
ICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCosIGludCYgZmly
c3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7Cisg
ICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hP
cHRpb25zJik7CisgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBj
b25zdDsKKyAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICB2b2lkIHNvcnRBbmRUcmFu
c2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYpOworCisgICAgYm9vbCBjaGVja1NlbGVjdG9y
KGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKTsKKyAgICBi
b29sIGNoZWNrUmVnaW9uU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVt
ZW50KiByZWdpb25FbGVtZW50KTsKKyAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29u
c3QgTWF0Y2hSZXN1bHQmKTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+CisgICAgdm9p
ZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgYm9vbCBpbXBvcnRh
bnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSk7Cisg
ICAgdGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNzPgorICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJbXBv
cnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgYm9vbCBmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzKTsK
KworICAgIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
SUQpOworCisgICAgdm9pZCBtYXRjaFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqLCBi
b29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUp
OworICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4m
IG1hdGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYsIGJvb2wgaXNMZWZ0
UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CisgICAgYm9v
bCBpc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OworICAgIGJvb2wgaXNSaWdodFBhZ2Uo
aW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQor
ICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CisgICAgU3RyaW5nIHBh
Z2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OworCisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0
aG9yU3R5bGU7CisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxlOworCisgICAgRmVhdHVy
ZXMgbV9mZWF0dXJlczsKKyAgICBPd25QdHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKKyAg
ICBPd25QdHI8UnVsZVNldD4gbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7CisKKyAgICBib29s
IG1faGFzVUFBcHBlYXJhbmNlOworICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOworICAgIEZp
bGxMYXllciBtX2JhY2tncm91bmREYXRhOworICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwor
CisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxl
S2V5ZnJhbWVzPiA+IEtleWZyYW1lc1J1bGVNYXA7CisgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tl
eWZyYW1lc1J1bGVNYXA7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxl
Tm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQorCisg
ICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1Zh
bHVlKik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqKTsKKyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKKyAgICBQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJ
bWFnZVNldFZhbHVlKik7CisjZW5kaWYKKworICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0K
KyAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVy
biBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKworICAgIHN0YXRpYyBMZW5n
dGggY29udmVydFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBS
ZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOworICAgIHN0YXRp
YyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJT
dHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7CisK
K3ByaXZhdGU6CisgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZhaWxhYmxl
OworCisgICAgdm9pZCBhZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRz
KGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+KiwgUnVsZVNldCYgdXNl
clN0eWxlKTsKKworICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CisKKyAgICB2
b2lkIG1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVl
Kik7CisgICAgdm9pZCBtYXBGaWxsQ2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NW
YWx1ZSopOworICAgIHZvaWQgbWFwRmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5
ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmlsbEltYWdlKENTU1Byb3BlcnR5
SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsUmVwZWF0WChDU1NQ
cm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmlsbFJlcGVh
dFkoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZp
bGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBt
YXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Cisg
ICAgdm9pZCBtYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1Zh
bHVlKik7CisKKyAgICB2b2lkIG1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiosIENTU1ZhbHVl
Kik7CisgICAgdm9pZCBtYXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUq
KTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7
CisgICAgdm9pZCBtYXBBbmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwor
ICAgIHZvaWQgbWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUq
KTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAg
ICB2b2lkIG1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAg
IHZvaWQgbWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2
b2lkIG1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisK
K3B1YmxpYzoKKyAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1Zh
bHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKKyAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlU2xpY2Uo
Q1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOworICAgIExlbmd0aEJveCBtYXBOaW5lUGllY2VJ
bWFnZVF1YWQoQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENT
U1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKK3ByaXZhdGU6CisgICAgYm9vbCBjYW5TaGFyZVN0
eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCopIGNvbnN0OworCisgICAgdm9pZCBhcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisKKyNpZiBFTkFCTEUoU1ZHKQorICAg
IHZvaWQgYXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworI2VuZGlm
CisKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5k
aW5nSW1hZ2UqKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisKKyAgICBzdGF0aWMg
dW5zaWduZWQgY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaGVkUHJvcGVy
dGllcyosIHVuc2lnbmVkIHNpemUpOworICAgIHN0cnVjdCBNYXRjaGVkUHJvcGVydGllc0NhY2hl
SXRlbSB7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4gbWF0Y2hlZFByb3BlcnRp
ZXM7CisgICAgICAgIE1hdGNoUmFuZ2VzIHJhbmdlczsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiByZW5kZXJTdHlsZTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBwYXJlbnRSZW5k
ZXJTdHlsZTsKKyAgICB9OworICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBm
aW5kRnJvbU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUodW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hS
ZXN1bHQmKTsKKyAgICB2b2lkIGFkZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBSZW5k
ZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgdW5zaWduZWQgaGFzaCwg
Y29uc3QgTWF0Y2hSZXN1bHQmKTsKKworICAgIC8vIEV2ZXJ5IE4gYWRkaXRpb25zIHRvIHRoZSBt
YXRjaGVkIGRlY2xhcmF0aW9uIGNhY2hlIHRyaWdnZXIgYSBzd2VlcCB3aGVyZSBlbnRyaWVzIGhv
bGRpbmcKKyAgICAvLyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gYSBzdHlsZSBkZWNsYXJhdGlvbiBh
cmUgZ2FyYmFnZSBjb2xsZWN0ZWQuCisgICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUoKTsKKworICAgIHVuc2lnbmVkIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1Np
bmNlTGFzdFN3ZWVwOworCisgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBNYXRjaGVkUHJv
cGVydGllc0NhY2hlSXRlbT4gTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTsKKyAgICBNYXRjaGVkUHJv
cGVydGllc0NhY2hlIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZTsKKworICAgIC8vIEEgYnVmZmVy
IHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVsZW1lbnQsIGFu
ZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IKKyAgICAvLyBtZXJnZSBzb3J0aW5nLgorICAg
IFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxlczsKKworICAgIFJlZlB0
cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKKworICAgIEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD4gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOworCisgICAgT3duUHRyPE1lZGlhUXVlcnlF
dmFsdWF0b3I+IG1fbWVkaXVtOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVs
dFN0eWxlOworCisgICAgUHNldWRvSWQgbV9keW5hbWljUHNldWRvOworCisgICAgU2VsZWN0b3JD
aGVja2VyIG1fY2hlY2tlcjsKKworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKKyAg
ICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogbV9yb290RWxl
bWVudFN0eWxlOworICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBTdHlsZWRFbGVtZW50KiBt
X3N0eWxlZEVsZW1lbnQ7CisgICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7Cisg
ICAgRUluc2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOworICAgIENvbnRhaW5lck5vZGUqIG1f
cGFyZW50Tm9kZTsKKyAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7CisgICAgYm9vbCBt
X2ZvbnREaXJ0eTsKKyAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOworICAgIGJv
b2wgbV9zYW1lT3JpZ2luT25seTsKKworICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fZm9u
dFNlbGVjdG9yOworICAgIFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeVJlc3VsdD4gPiBtX3ZpZXdw
b3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CisKKyAgICBib29sIG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlOworICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlOworICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7CisgICAgCisgICAg
SGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IG1fc3R5bGVSdWxlVG9D
U1NPTVdyYXBwZXJNYXA7CisgICAgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBtX3N0
eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQ7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAg
Ym9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOworI2VuZGlmCisKKyNpZiBFTkFCTEUoU1RZTEVfU0NP
UEVEKQorICAgIHN0YXRpYyBjb25zdCBDb250YWluZXJOb2RlKiBkZXRlcm1pbmVTY29wZShjb25z
dCBTdHlsZVNoZWV0SW50ZXJuYWwqKTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250
YWluZXJOb2RlKiwgT3duUHRyPFJ1bGVTZXQ+ID4gU2NvcGVkUnVsZVNldE1hcDsKKworICAgIFJ1
bGVTZXQqIHJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKikgY29uc3Q7CisKKyAg
ICB2b2lkIHNldHVwU2NvcGVTdGFjayhjb25zdCBDb250YWluZXJOb2RlKik7CisgICAgYm9vbCBz
Y29wZVN0YWNrSXNDb25zaXN0ZW50KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3Qg
eyByZXR1cm4gcGFyZW50ICYmIHBhcmVudCA9PSBtX3Njb3BlU3RhY2tQYXJlbnQ7IH0KKworICAg
IFNjb3BlZFJ1bGVTZXRNYXAgbV9zY29wZWRBdXRob3JTdHlsZXM7CisgICAgCisgICAgc3RydWN0
IFNjb3BlU3RhY2tGcmFtZSB7CisgICAgICAgIFNjb3BlU3RhY2tGcmFtZSgpIDogbV9zY29wZSgw
KSwgbV9ydWxlU2V0KDApIHsgfQorICAgICAgICBTY29wZVN0YWNrRnJhbWUoY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUsIFJ1bGVTZXQqIHJ1bGVTZXQpIDogbV9zY29wZShzY29wZSksIG1fcnVs
ZVNldChydWxlU2V0KSB7IH0KKyAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZTsK
KyAgICAgICAgUnVsZVNldCogbV9ydWxlU2V0OworICAgIH07CisgICAgLy8gVmVjdG9yICh1c2Vk
IGFzIHN0YWNrKSB0aGF0IGtlZXBzIHRyYWNrIG9mIHNjb3BpbmcgZWxlbWVudHMgKGkuZS4sIGVs
ZW1lbnRzIHdpdGggYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCkKKyAgICAvLyBlbmNvdW50ZXJlZCBk
dXJpbmcgdHJlZSBpdGVyYXRpb24gZm9yIHN0eWxlIHJlc29sdXRpb24uCisgICAgVmVjdG9yPFNj
b3BlU3RhY2tGcmFtZT4gbV9zY29wZVN0YWNrOworICAgIC8vIEVsZW1lbnQgbGFzdCBzZWVuIGFz
IHBhcmVudCBlbGVtZW50IHdoZW4gdXBkYXRpbmcgbV9zY29waW5nRWxlbWVudFN0YWNrLgorICAg
IC8vIFRoaXMgaXMgdXNlZCB0byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50U3RhY2sg
aXMgY29uc2lzdGVudCwgc2VwYXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9wYXJlbnRT
dGFjay4KKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3Njb3BlU3RhY2tQYXJlbnQ7CisjZW5k
aWYKKworICAgIGZyaWVuZCBjbGFzcyBTdHlsZUJ1aWxkZXI7CisgICAgZnJpZW5kIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVz
Jik7CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYs
IGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJik7CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBNYXRjaFJhbmdlcyYsIGNvbnN0IE1hdGNoUmFuZ2VzJik7CisgICAgZnJpZW5kIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBNYXRjaFJhbmdlcyYsIGNvbnN0IE1hdGNoUmFuZ2VzJik7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdHlsZVJlc29sdmVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKaW5kZXggMWU4NDcxZmY1NzEyM2Q3NDFl
OTdmMTU0Y2Y5OWM5ODJkMzE5NDNkYy4uZGM5NTI5NGQ4NDRkNGRkZTVkMTM2MGYyMWNiNmE0Y2M5
NjliMDgyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKQEAgLTI3LDEx
ICsyNywxMSBAQAogI2luY2x1ZGUgIldlYktpdENTU01hdHJpeC5oIgogCiAjaW5jbHVkZSAiQ1NT
UGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1By
b3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZTFlYjc0YjUyNWVhZTBj
MWE4NjcxNzg0ZDhjMTk1NjQ4MjlhODVlMC4uZDE1MWY1NmMwZjFhNzMyYzU0ZDEzZWEzYWQ1NzNk
NGZiNWJkMmM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAj
aW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVk
ZSAiQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKQEAgLTE0Myw2ICsxNDIsNyBAQAog
I2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTaGFkb3dUcmVlLmgiCiAjaW5jbHVk
ZSAiU3RhdGljSGFzaFNldE5vZGVMaXN0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
I2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rl
ci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggNzVlYmYz
Zjc5MDczNWFkNTU1MzA2YTkyMWYzNzY4NDFkMTM0NWI4OS4uY2Q1MGYxMzc5Mzc4MTU2OGE4ZmVh
NmRiYmMwMWUyNWZlNmZhY2QwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMzAsNyArMzAs
NiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRl
ICJDU1NTZWxlY3Rvckxpc3QuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5j
bHVkZSAiQ2xhc3NMaXN0LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgogI2luY2x1ZGUgIkNs
aWVudFJlY3RMaXN0LmgiCkBAIC02NCw2ICs2Myw3IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9v
dC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5j
bHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCmluZGV4IDk3MzAwMGU5NThhMGUyODQ4MmRkM2NmODcxMzdiZTc2Nzk4
NzQzZmUuLjM5YTQwMGM2NjRlYTYyYTgwMzYzYWQ0ZWQyNDJiZjQ3OTc0NTM3OTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2lu
Y2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2lu
Y2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAj
aW5jbHVkZSAiQ2hpbGROb2RlTGlzdC5oIgogI2luY2x1ZGUgIkNsYXNzTm9kZUxpc3QuaCIKQEAg
LTg5LDYgKzg4LDcgQEAKICNpbmNsdWRlICJTaGFkb3dUcmVlLmgiCiAjaW5jbHVkZSAiU3RhdGlj
Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdG9yYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAj
aW5jbHVkZSAiVGV4dEV2ZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hh
ZG93Um9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKaW5kZXggN2I0
NDBlZTYwNWFlNTBhNWJhYmFhNDE5NzAxMjczMWRiNDg3N2FkYy4uOGMxZDhiMmQ4YzY0OTdlZTBk
NGQxOTBjM2Y3YTY0MjZiNjY0NzczOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1No
YWRvd1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcApAQCAt
MjcsNyArMjcsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3Qu
aCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJET01TZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAt
NDAsNiArMzksNyBAQAogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2luY2x1ZGUgIlNoYWRv
d1RyZWUuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIu
aCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1RyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NoYWRvd1RyZWUuY3BwCmluZGV4IDQ0MDkyZjc1ZDRmZDViYTJjYzUzYjRiZDMzNWVmNzFjZjg1
ZTZjMDQuLjI5NTlkMWU4Mzg2YmZiMzJhNDkxMzc0MzEzOTQ2NTllNWRmMjFjZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2hhZG93VHJlZS5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTaGFkb3dUcmVlLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9y
LmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKQEAgLTM1LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TdHlsZWRFbGVtZW50LmNwcAppbmRleCA2NzY5MmFmMWM3ZWU2ZTdmNDczN2UxN2JlZDY4
NWE1NDUyODJkZDgwLi4wMDdjM2FmMGMwZTFhMjZkYzdhZWM3NDZiOTMxZWYxOWFjY2RjNDFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5j
bHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5j
bHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNp
bmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaEZ1bmN0aW9ucy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCBkY2Q5NzhjMGQxN2Q4YjMwOTI4
Yjk0YzllMmQxMWMxMzJjNzliMTllLi40MzA2NzY4NjQyZmMxMzIyNjg0ZTdhNGQ1YmIzZjA0ZjYz
ZTMyZTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNw
cApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNT
U1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNT
U1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQ1LDYgKzQ0LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAj
aW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
aHRtbGVkaXRpbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRl
eCAyNjQ3ZTQwNDkwZjU4ZjUyYmUwYmFjZTE0OTQwZmU0NDI4ZDQ5NWE0Li42ZTQ0MWM4M2Q0N2Ni
MjdmMmViNzMxYTg1MDNkODVmZTU1NTk5ZGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nU3R5bGUuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAj
aW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKLSNpbmNs
dWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgog
I2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC00NSw2ICs0
NCw3IEBACiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRl
eCBmZThlNTdjNTE0YTgxODZmZDU0ODE1YjgyNDgyZWU3MTcyNWZlZmNmLi43OTE2NDNkZGZlOWQ0
ODg1OTBhN2RhMjM4Y2U5MTFiMTA0ZjFiNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5
d29yZHMuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNs
aXBib2FyZEV2ZW50LmgiCkBAIC04MCw2ICs3OSw3IEBACiAjaW5jbHVkZSAiU3BlbGxDaGVja2Vy
LmgiCiAjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIlN0
eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAi
VGV4dC5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGV4dENo
ZWNraW5nSGVscGVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggMzY0YTE3YzVj
ODAyNzA1ZTc2OWUzNzJhNDZlNWNkNmVkNDY2YjM2ZC4uOTUxNWI5MDEzYzVkYjUyN2FjNTA4MGQx
YmJjYTA0NjcxYmIxNmM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMzYsNyAr
MzYsNiBAQAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgog
I2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNp
bmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCkBAIC01NSw2ICs1NCw3IEBACiAjaW5j
bHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTdHls
ZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJY
TUxOU05hbWVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBh
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAppbmRleCAzYWNh
ZjhlMzgwNTExZTc2NjY1NDQzZDBiYzY3N2Y4ODExYTUyOGUxLi4xMTYzNmY2NzQ2M2Q4OWVhNTIy
MjU5OTE0ODVhMDgwYzUwYTEwZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L0NhY2hlZFBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5j
cHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWNo
ZWRQYWdlLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVy
LmgiCkBAIC0zNCw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFr
Q291bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTERvY3VtZW50LmNwcAppbmRleCA2MTA0NDgwOWFjYTk4Njk4MGFlY2JiZDYwMjZkYWZhMTM5
YjQ1NzI3Li5iOWQ3NjdlMzA0YmM5YTVjMGQzYzY0MDc1OTg1ODczYTdjMzRjMjRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCkBAIC01NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAi
SFRNTERvY3VtZW50LmgiCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCkBAIC03NCw2ICs3
Myw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExpbmtFbGVtZW50LmNwcAppbmRleCAwNjliOTNlMmZlYzM2OWJmNDQzMTZhNjM3MDkxNTQzNGZh
ZGRhZGM0Li5mMTY4MjljY2I0ZWUyYTdhNTc1NGVjYmNlZmVmYWRjN2FlMGIzOGI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5j
bHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNs
dWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5o
IgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCIKQEAgLTQ1LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVy
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9wdEdyb3VwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91
cEVsZW1lbnQuY3BwCmluZGV4IGUwOTIwMDA2MjM3Y2U2YTBlMmFlNWIyZTVjNTU5NGU0Y2M1OTMy
ZGMuLjg2OTUwNjQwYjcwMzAwZDQ1MTFhNzk2YTljYjZjNWQxYjdkNTljNjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcApAQCAtMjUsMTMgKzI1LDEzIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgog
Ci0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNp
bmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAppbmRleCA5NWE3OTcx
ZjMxMGU4YmVmMmZhMDYxODcyNzA4ZWRjYjlmOWM2ZWU0Li5iYWY2Y2E5OGU1ZmY2ZjYzMTY4ZjZi
ODEwZmEyODAzOGQ0NDIxYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
cHRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVt
ZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50Lmgi
CiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTWVu
dUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCmluZGV4IDk3MDBmODQ0ZWNlYzY4
MDJhZmU0OWNjNWVhOWU0MGY0ZDNlYTk4MjcuLmJmZGE5ODYwYjk4NTc1MzNkYWIzM2JkMTMzNjc4
OWViOTQwMzJiMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1l
c3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3Bw
CkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiVmFsaWRhdGlvbk1lc3NhZ2UuaCIKIAogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
CiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQ
bGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIkZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIgpAQCAtNDUs
NiArNDQsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5o
IgogI2luY2x1ZGUgIlNoYWRvd1RyZWUuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCmluZGV4IDNiOTI0NTU5Y2ZmMDJmY2E4MmE4YTZmMDFjNzhlMjk4MTU3ZDQ4NmIuLmU1ZDg3
NDJmOTE5ZjExYmJkZjU1ZmNhN2NlMzM3NWQxNzJkMWQyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAt
MzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNT
U1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NT
dHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYW52
YXNHcmFkaWVudC5oIgogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKQEAgLTU5LDYgKzU4LDcg
QEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5o
IgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAjaW5jbHVkZSAiVGV4dE1ldHJpY3MuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNw
cAppbmRleCA4ZjYzNDY1Y2VmZTc2NzVhNzgxNzUyYjkwYTQzMGYxN2M0MjBjZjFjLi42ZWE0ODVk
MWU4ZWZkYmVmZTU5NWJjYTVjNTc0NjlhMTRmZWEwZTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0zMiw3ICszMiw2
IEBACiAKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogCi0jaW5jbHVkZSAiQ1NT
U3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRl
ICJET01Ub2tlbkxpc3QuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBAIC01Myw2ICs1Miw3
IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDE1ZDNjZmVhN2Q2Y2FmNTU5
NjJmZjFkMjQ5ODcyYzM0NGQ2MWI2YjIuLjM2NGU0ZDQxYWEwZDMzMTFiZjNiMDMwZmZkMTVjZDIy
NzkxNmQwNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRl
ICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNT
U1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAi
Q29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC00OSw2
ICs0OCw3IEBACiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5j
bHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA1ZjBh
YWZlMzNlYjVkY2M5ODhmODczNzhlZTVmYzRlOTNhNTQ0ODQ3Li40OGFiZDEyZjhlMTMzYzgyNjU1
MjQzMjVmMWEyNzg5Y2I4Zjg2NWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJDU1NSdWxl
LmgiCiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
LSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5o
IgogI2luY2x1ZGUgIkNoYXJhY3RlckRhdGEuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgi
CkBAIC04NSw2ICs4NCw3IEBACiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNo
YWRvd1RyZWUuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4
dC5oIgogI2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggY2ViYWJkZDhlMjJhYzU0Njc5NWM5
NjQzMDVmZjc4ODUzYjBhYTM3YS4uNGNmNTUzOGZlMTY1Y2YzODNkZmY2MTg3MWE2NDQwYTdiNjFj
MjY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRl
ICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNT
U1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAi
Q29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQ5LDYg
KzQ4LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJOb2RlLmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5j
bHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRl
ICJXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvTGlua0xvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTGlua0xvYWRlci5j
cHAKaW5kZXggN2Q2OTk3ODg2Yjk2NzBjNzg4ODFlYzU0OGNjZjcwZDU2YTc3YTEwMS4uZTU2MmQx
MDUwNTk3MzgyNTM1MTczMzg0MzE3ZWJhYWRlMzlmZGJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9M
aW5rTG9hZGVyLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkxpbmtMb2FkZXIuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNp
bmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5o
IgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCkBAIC00Myw2ICs0Miw3IEBACiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTGlua1JlbEF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCAwNTI4NzFkYWI2
YmM1MDFmNzM0NjFiMzY4MzA3Y2Q4MGY2M2FhYTEyLi4zYWQ3MGUwYTA5OGE0ZGQxMWU5NmM1OTAw
M2NhYzc1YjgzMmE5ZGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0zNCw3ICsz
NCw2IEBACiAjaW5jbHVkZSAiQmVmb3JlVW5sb2FkRXZlbnQuaCIKICNpbmNsdWRlICJDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgotI2luY2x1
ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJD
b25zb2xlLmgiCiAjaW5jbHVkZSAiQ3J5cHRvLmgiCkBAIC05MSw2ICs5MCw3IEBACiAjaW5jbHVk
ZSAiU3RvcmFnZUluZm8uaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVk
ZSAiU3R5bGVNZWRpYS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJT
dWRkZW5UZXJtaW5hdGlvbi5oIgogI2luY2x1ZGUgIldlYktpdFBvaW50LmgiCiAjaW5jbHVkZSAi
V2luZG93RmVhdHVyZXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBhZjQwYmQx
ZjViYmI1ZDk0NGY2M2ZlNWNlNzBhNGY2Y2Q5OGY1OTBhLi40Nzk0MTZjM2VmNTJhN2U3MjliYzM0
ZTBhMjk0MDMxZTllYWQyYWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0yOSw3
ICsyOSw2IEBACiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0Zv
cndhcmRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVk
ZSAiQ2hyb21lQ2xpZW50LmgiCkBAIC02Niw2ICs2NSw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3IuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHRSZXNv
dXJjZURlY29kZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKaW5kZXggYWQxOWU1NmJlZDU5NTg0OTJjNWY5NTI4OWFiNjUyYTAwODBmN2VjMS4uYzc5
NjIyYmM0ODRhOWIxNDFlNGRhYjdmNjBmM2Y2YTA0MjM1YjhjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5jbHVkZSAiQmFzZTY0LmgiCi0jaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNo
cm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50LmgiCkBAIC02Nyw2ICs2
Niw3IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEu
aCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJWb2lkQ2Fs
bGJhY2suaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAppbmRleCA2NzBjZmI0OWU3MzcxZDIx
MDczNzlhMDE0YzE1ODI5YjBlNzQ0NTQ2Li5hMWM5MDJiODRiYmYzNmFmMWEzNWFkYjgxYzBkNTRj
NmEyZmFlMmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5
ZnJhbWVBbmltYXRpb24uY3BwCkBAIC0zMSwxMSArMzEsMTEgQEAKIAogI2luY2x1ZGUgIkFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgot
I2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRp
b24uaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94TW9kZWxP
YmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKaW5kZXgg
MTFiZjNlNzg4MjZkNDdhMTEwOTY0YmI3Y2NlOWU4NTUzYjI5ZGJjMC4uY2M0ZGQxNDVkM2QzMGU4
Y2JhZTRkZTVlM2Q5NjkwZDJjOTNhZjZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUmVuZGVyVGhlbWVRdC5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZVF0LmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5o
IgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgpAQCAtNTcsNiArNTYsNyBAQAogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdE1vYmlsZS5oIgogI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1
ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKaW5kZXggM2Q4YjU2NWQ3NWY0OTY2
OGI3N2Y2ZTQ5MGNjZGRiODNmOGIwYzdiMC4uOTE1NWNkNDExNDY4NTJhZjlkN2ZjOTExMDM0YmFi
YWNjMzQ4YmNkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdE1vYmlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdE1vYmlsZS5jcHAKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJSZW5kZXJUaGVtZVF0TW9iaWxlLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpZiBFTkFCTEUo
UFJPR1JFU1NfVEFHKQogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCiAjZW5kaWYKKyNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA3M2FhODg5NjIwNTE5
ZjIyYjcxOGIyMWUyNzU0OWY4NzEyMThkN2EwLi44Nzc1YzU3YjdhN2M5ZTM4YzA5NDI3MmFmNzE2
MzljNTQ5NjM1YmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
QEAgLTQ2LDcgKzQ2LDYgQEAKIAogI2luY2x1ZGUgIkNvbHVtbkluZm8uaCIKICNpbmNsdWRlICJD
U1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRF
dmVudFF1ZXVlLmgiCkBAIC05Miw2ICs5MSw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgor
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAKaW5kZXggYThkNzgzNDE4OTBmZWU1Mzg2ZjNjNDkzMjE2YmUwZGI4N2YyNWMw
YS4uZTQ3NTVjNmZkMWVlMjFiODg1YzUyYWNmMzA5YjRlYjZiNDQ4N2I2MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTMyLDcgKzMy
LDYgQEAKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNs
dWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAi
Rm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01Miw2ICs1MSw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKaW5kZXggMzYzMzZmYmEzM2Q4
MDUyNmMxM2VhOTVjOTczMTA2NWE0Njg0ZDVkYy4uOGNiN2Q3YmI0MWE1ZjA0Y2Q5MDg4Y2NmMWQ1
OTM1MGZhY2MyYzZkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcApAQCAtMzIsNyArMzIsNiBAQAogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2lu
Y2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RXZlbnRRdWV1ZS5oIgog
I2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgpAQCAtNTgsNiArNTcsNyBAQAogI2luY2x1ZGUgIlNj
cm9sbGJhci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU3BhdGlh
bE5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8bWF0
aC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAKaW5kZXggZWQwMDQ0MzkzZTdlMzI2ODU1YzdmOTVlNTBkOTIxOTU2
YTA5OWRkOS4uNmQyNWMzNTcyOTM1ZDZiZWZiODYwMmQ4ZTZkZDBmMDY3MTIxZDM1YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCkBAIC0yOCw3ICsyOCw2
IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlN
ZW51TGlzdC5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0
eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJGb250Q2FjaGUu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNDQsNiArNDMsNyBAQAogI2luY2x1ZGUgIlJlbmRl
clNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgog
I2luY2x1ZGUgPG1hdGguaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAppbmRleCA3MGU5OWI0MWNmODlhMDQ4NTcxYjY4OWEzMzAzMTk4YTY1MWMyZWZlLi4wOTYx
NGRiNDBkN2VmYjlhMDI0Yzg3NGExNzZlMWE4ZTY1N2Y0MWJmIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkNT
U1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb250ZW50
RGF0YS5oIgogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKQEAgLTY0LDYgKzYzLDcgQEAKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1TdGF0ZS5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAppbmRleCA1MTA0NDY5
NTEwZTUyMWMzZWZkM2MyZDI5ZmY5N2JkMzdmNjBmM2NjLi5hN2JhMmVhZGMxNTkyMDlkZjRjZWVj
OThlMmY2NWQ3NWJkYTMyYWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlJlbmRlclJlZ2lvbi5oIgogCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCkBAIC0zOCw2ICszNyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94UmVn
aW9uSW5mby5oIgogI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNs
aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAppbmRl
eCBlMWQ2Y2NjNTI0ZDc0YTc4ZTU0MGJhMjJkMzE1NzUwY2ZlZWVmM2FkLi5mNzhiYTVjNzViMGE1
MTAzZTEzYzllZGFmYTMxZTNmNDM2ZmQ0YjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2xpZGVyLmNwcApAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIlJlbmRlclNsaWRl
ci5oIgogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0eWxl
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAj
aW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCkBAIC00MCw2ICszOSw3IEBACiAjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgogI2luY2x1ZGUgIlNsaWRlclRodW1iRWxlbWVudC5oIgogI2luY2x1ZGUgIlN0
ZXBSYW5nZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogCiB1c2luZyBzdGQ6Om1pbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggOWVjZmM1
ZDZmM2E0YzE2M2YwNGZhNmQwOTQyOTlmMWQ0Y2E4ZjA0OC4uMjI5ZmVkOTk0ZjBmMWE1OGViNDE5
NzYyZGQyNWZhZjU0MDNhMjJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTI1LDcgKzI1LDYgQEAK
ICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKIAogI2luY2x1ZGUgIkNT
U0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKQEAgLTQzLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVk
ZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5o
IgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCmluZGV4IDI0MWY1YzRiNTEyNzk4ZmU1YTgzZWFjY2UxNDdlYzBhMjkwNDhj
MDMuLjgwMWIyMzVhOWM5ZTEwYmRkNTE0YzJjMzJkNTE1ZjlhYmYyY2E2MTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTIyLDcgKzIyLDYgQEAKIAog
I2ltcG9ydCAiQml0bWFwSW1hZ2UuaCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCi0jaW1wb3J0ICJD
U1NTdHlsZVNlbGVjdG9yLmgiCiAjaW1wb3J0ICJDU1NWYWx1ZUxpc3QuaCIKICNpbXBvcnQgIkNT
U1ZhbHVlS2V5d29yZHMuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCkBAIC00NSw2ICs0NCw3IEBA
CiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBv
cnQgIlN0cmluZ1RydW5jYXRvci5oIgorI2ltcG9ydCAiU3R5bGVSZXNvbHZlci5oIgogI2ltcG9y
dCAiVGltZVJhbmdlcy5oIgogI2ltcG9ydCAiVGhlbWVNYWMuaCIKICNpbXBvcnQgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVNhZmFyaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVTYWZhcmkuY3BwCmluZGV4IDQxZGE1YzBjZWViNjNiNDY5YzFhYTU2N2EzMTA0NGJjNWUyMTZh
OWMuLjAwYTVkN2U2Njc4OTY2ZDJlODM2MWJmOTJiZDM5ZmRiYjAxNDE0MjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcApAQCAtNDEsNyArNDEs
NyBAQAogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
ICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgotI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCmluZGV4IDVkNzFiOTY3MTIwMWVh
YzM0NWMxM2EyOWRmZmQ4MGIyMDJlMzRiYjIuLjNiZTMwNWRiNTZkODcyMTMwMzk3OGUyZjJmZTY2
ZjhlN2FhYWRlZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkNvbnRlbnREYXRhLmgiCiAj
aW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNp
bmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTV3JhcFNoYXBlcy5oIgog
I2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKQEAgLTM1
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIlNoYWRvd0RhdGEuaCIKICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IGY5YTY5YWEyZDg2ODkzNTI5NmQ2NTNl
MDA5YzBhNDNmMjg5NTMyNDMuLmZkOTk0OTI5NTExYTgzMTM5N2I2MmQ1YWZkMzhiNzdmMzBjODIw
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVy
YXRlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVH
ZW5lcmF0ZWRJbWFnZS5jcHAKQEAgLTI1LDggKzI1LDggQEAKICNpbmNsdWRlICJTdHlsZUdlbmVy
YXRlZEltYWdlLmgiCiAKICNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCi0jaW5j
bHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVy
aXRlZERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5v
bkluaGVyaXRlZERhdGEuY3BwCmluZGV4IDUyOWZjNGViODEyMTA5NDMwZjljOTQ5Y2E1OTk1YzUw
MTFiOGZhY2IuLmMyNDJkY2MwMjM4MWUxMjljY2M2ZDM3NjQ2ZjBlMmZmOWZhNGFjY2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0
ZWREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJl
Tm9uSW5oZXJpdGVkRGF0YS5jcHAKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgiCiAKLSNpbmNsdWRlICJD
U1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNsdWRlICJS
ZW5kZXJDb3VudGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTMwLDYgKzI5LDcg
QEAKICNpbmNsdWRlICJTdHlsZUZpbHRlckRhdGEuaCIKICNpbmNsdWRlICJTdHlsZVRyYW5zZm9y
bURhdGEuaCIKICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCmluZGV4IGVlMTE1Y2I2MTJlY2Rk
ZTQ2MzUzOTgzZGZjNzA5MGFhZGQ0ZjJlODcuLjA5ZDQ0NmI3ZDZlZWI5ZmY1NzhkNTQ2YTA5NTAy
NzRjNWE3ZmFkNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlJlbmRl
clNWR0lubGluZVRleHQuaCIKIAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1
ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNp
bmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgpAQCAtMzcsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJTVkdSZW5k
ZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgorI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRo
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcApp
bmRleCA0YmFjZjc3Y2U5ZTVmNDNlYmY4YTQ3M2NmYjkzN2NjOTg3ZmJjYjU4Li5iYTk4NzhjZTc1
NTdjNzNkM2UzZjMyODMxNjY0N2IxMmI3OTNmNTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Q2xpcFBhdGhFbGVtZW50LmNwcApAQCAtMjUsMTIgKzI1LDEyIEBACiAjaW5jbHVkZSAiU1ZHQ2xp
cFBhdGhFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NT
dHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKKyNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuY3BwCmluZGV4IDYzODViNWMxOTg2OTFjNzU5NjgyYTcyMWM2ZjM3NzFkZDY2
NmUyYzguLmUzYjVlNjkwOWE4MWY3NGJiNGQ5ODZlOTBmYjJjMDg3MzZiMmM4Y2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkF0dHJp
YnV0ZS5oIgogI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NT
dHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC01MSw2ICs1MCw3IEBACiAjaW5j
bHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgi
CiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAppbmRleCA3OTZmMWE3NzZlMTFlNWEwMDFj
MWIzNjdhZjZjZWY3YjAwYjdkYzc0Li4wYWYwZTVmNmU2Yzc0YThiZWMyNmJhNjAyMzJhNGExYzVh
NTA4NTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcApAQCAt
MjksNyArMjksNiBAQAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0eWxl
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFs
dWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgpAQCAtNDAsNiArMzksNyBA
QAogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlU3JjRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0dseXBo
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgPG1hdGguaD4KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAppbmRleCAwN2E4OGFkOTYxOWM4M2U4
MDY2MGUxY2JkOThhNDM5YjZkOWUyNDExLi5jNDVhNWJhMGZhNTk5ZThiZmUyY2JjNzI2NDQzYTgw
YjM5ZGI4ZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcApA
QCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgogCiAjaW5j
bHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGgu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgiCkBAIC0zNSw2
ICszNCw3IEBACiAjaW5jbHVkZSAiU1ZHU3RvcEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFu
c2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5oIgorI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R01hc2tFbGVtZW50LmNwcAppbmRleCBkNmVmNDA1MjAzZTFmMTAxM2Y5MzhjMGZmMzY3YzMxMTQ2
ZmZiMGQ5Li45MGM1YzY1ZmY5ZTY5NjZjMTQ5YzQwM2EwZWVmOTZjY2U2ZGI3NjExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2luY2x1
ZGUgIlNWR01hc2tFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRl
ICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIu
aCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMu
aCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCmluZGV4IGZmNjIyYWIxMTM3NWI1YzhiYWZh
NjhkMjg0NjdlNjE4YWZhNTc1YWQuLmViYTU2YThlOWYwOTc5YmM1ZWVlMjdmNDM3MTNkYjJiOGY1
YjEzNmMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTI5LDcgKzI5LDYg
QEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9h
ZGVyLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCkBAIC00
OSw2ICs0OCw3IEBACiAjaW5jbHVkZSAiU1ZHU01JTEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdT
VkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3ltYm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MRG9j
dW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJYTUxTZXJpYWxpemVyLmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5jcHAKaW5k
ZXggNmEwYzU0ZTEwYWViNjhmMTMwMjMwMDc4NmU3Yzg3ODRmY2VmN2ExNC4uNGU2NDMwMjlhMWE1
MWQyMWRlYzFiOTBmNWZkMzgyMWU4ZGM4NGU4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0F1dG9maWxsUG9wdXBNZW51Q2xpZW50LmNwcApAQCAtMzIsNyArMzIs
NiBAQAogI2luY2x1ZGUgIkF1dG9maWxsUG9wdXBNZW51Q2xpZW50LmgiCiAKICNpbmNsdWRlICJD
U1NGb250U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCkBAIC00MCw2ICszOSw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXZWJBdXRvZmlsbENsaWVudC5oIgogI2luY2x1ZGUg
IldlYk5vZGUuaCIKICNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggODhlNGJkOGMwYzljYTFiNDdkMDJiNGIy
MzZjYTdhZGIxOGFmNjhkYS4uNjM4OTc2MTliYzZkNTliOGYwZjA1MjI1MzhjM2FmMzRmOTI5ZWU0
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzYs
NyArMzYsNiBAQAogI2luY2x1ZGUgIkF1dG9maWxsUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVk
ZSAiQmFja0ZvcndhcmRMaXN0Q2hyb21pdW0uaCIKICNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50SW1w
bC5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKQEAgLTEx
Miw2ICsxMTEsNyBAQAogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5j
bHVkZSAiU3BlZWNoSW5wdXRDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJU
ZXh0RmllbGREZWNvcmF0b3JJbXBsLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAppbmRleCAwNjZl
NTI0NDAwMmY1Y2Y5Yjg0MjY5MjU0M2M0NDhiOTM1NDgyZWFkLi5mYjliZTc4OTI3NDk3ZDczMTNi
N2Q1NTVjNzgzOGQ4NTdjZGJmOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2ViZWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3Bw
CkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgogI2luY2x1ZGUgIkNTU1J1
bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFn
bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtNTEsNiArNTAsNyBAQAogI2luY2x1
ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJT
dGF0aWNOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJx
d2ViZnJhbWUuaCIKICNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgogI2lmIFVTRShKU0MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUu
Y3BwCmluZGV4IGMxMTkzZjJiYTBmN2IzYjllMGJhZjgwYWJhMTYyOWM4MDVlOWI1ZjAuLmI5ZDcy
ZWRmZjM2ZDQzOTA2ZDdhOTc5OGYxNzc1MjllOGRkN2M3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0zMSw3
ICszMSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKIAogI2luY2x1ZGUgIkNT
U0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hy
b21lQ2xpZW50LmgiCkBAIC01NCw2ICs1Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaCIKICNpbmNsdWRlICJTbGlkZXJUaHVt
YkVsZW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVXNlckFn
ZW50U3R5bGVTaGVldHMuaCIKIAogI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138786</attachid>
            <date>2012-04-25 05:13:32 -0700</date>
            <delta_ts>2012-04-25 07:10:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84814-20120425091314.patch</filename>
            <type>text/plain</type>
            <size>696004</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMiBAQAorMjAxMi0wNC0yNSAgQWxleGlz
IE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUg
Q1NTU3R5bGVTZWxlY3RvciBmaWxlcyB0byBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ4MTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgQ1NTU3R5bGVTZWxlY3RvciBm
aWxlcyB0byBtYXRjaCB0aGUgbmV3IGNsYXNzIG5hbWUgU3R5bGVSZXNvbHZlci4KKyAgICAgICAg
VXBkYXRlIHRoZSBpbmNsdWRlcyBhbGwgb3ZlciB0aGUgY29kZSBiYXNlIHRvIHRoZSBuZXcgbmFt
ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgOiByZW5hbWluZyBmaWxlcywgbm8gYmVoYXZpb3Ig
Y2hhbmdlcyBleHBlY3RlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNz
cy9DU1NBbGxJbk9uZS5jcHA6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3Bw
OgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAqIGNzcy9DU1NH
cmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHA6
CisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcDoKKyAgICAgICAgKiBjc3MvU1ZH
Q1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6Cisg
ICAgICAgICogY3NzL1N0eWxlTWVkaWEuY3BwOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVy
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUnVsZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6OnBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpy
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpzZWxlY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSdWxlRGF0YTo6aGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVEYXRhOjpoYXNNdWx0aXBhcnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlRGF0YTo6aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhh
c2gpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1
dGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6c3BlY2lmaWNpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmxpbmtNYXRjaFR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6Omhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6OmlzSW5SZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVE
YXRhOjpkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKToKKyAgICAgICAgKFNhbWVT
aXplQXNSdWxlRGF0YSk6CisgICAgICAgIChSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1
bGVTZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpkaXNhYmxlQXV0b1No
cmlua1RvRml0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmZlYXR1cmVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmlkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNl
dDo6Y2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0Ojp0YWdSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpzaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UnVsZVNldDo6bGlua1BzZXVkb0NsYXNzUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZVNldDo6Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bGVTZXQ6OnVuaXZlcnNhbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6
OnBhZ2VSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpSdWxlU2V0U2VsZWN0b3JQ
YWlyOjpSdWxlU2V0U2VsZWN0b3JQYWlyKToKKyAgICAgICAgKFJ1bGVTZXRTZWxlY3RvclBhaXIp
OgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JlZW5FdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnByaW50RXZh
bCk6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0VG9SaWdodERlY2xhcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OnJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1ha2VSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpk
ZXRlcm1pbmVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlU2V0
Rm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0dXBTY29w
ZVN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnB1c2hTY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwb3BTY29wZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnBvcFBhcmVudFNoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6YWRkS2V5ZnJhbWVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjp+U3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6RmVhdHVyZXM6OkZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OkZlYXR1cmVzOjp+RmVhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6RmVhdHVyZXM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpG
ZWF0dXJlczo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVQVNoZWV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmxvYWRGdWxsRGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Omxv
YWRTaW1wbGVEZWZhdWx0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZFZpZXdTb3VyY2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZE1hdGNoZWRQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29y
dEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bWF0Y2hBdXRob3JSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaFVzZXJSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aFVBUnVsZXMpOgorICAgICAgICAoTWF0Y2hpbmdVQVJ1bGVzU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Ok1hdGNoaW5nVUFSdWxlc1Njb3BlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGNoaW5nVUFSdWxlc1Njb3BlOjp+TWF0Y2hpbmdVQVJ1bGVzU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmguCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKE1lZGlhUXVlcnlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFR
dWVyeVJlc3VsdDo6TWVkaWFRdWVyeVJlc3VsdCk6CisgICAgICAgIChTdHlsZVJlc29sdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmb250RGVzY3JpcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50Rm9udERlc2NyaXB0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnREZXNjcmlwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRab29tKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnNldEVmZmVjdGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6c2V0VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6aGFzUGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpwdXNoU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cG9wU2Nv
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Zm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjp1c2VzU2libGluZ1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnVzZXNGaXJzdExpbmVSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjp1c2VzQmVmb3JlQWZ0ZXJSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjp1c2VzTGlua1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OlJ1bGVGZWF0dXJlOjpSdWxlRmVhdHVyZSk6CisgICAgICAgIChSdWxlRmVhdHVyZSk6
CisgICAgICAgIChGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjph
ZGRNYXRjaGVkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaFJh
bmdlczo6TWF0Y2hSYW5nZXMpOgorICAgICAgICAoTWF0Y2hSYW5nZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXM6Ok1hdGNoZWRQcm9wZXJ0aWVz
KToKKyAgICAgICAgKE1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6Ok1hdGNoUmVzdWx0OjpNYXRjaFJlc3VsdCk6CisgICAgICAgIChNYXRjaFJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaE9wdGlvbnM6Ok1hdGNo
T3B0aW9ucyk6CisgICAgICAgIChNYXRjaE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6aXNSaWdodFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6c3R5bGVOb3RZZXRBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6c2NvcGVTdGFja0lzQ29uc2lzdGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpTY29wZVN0YWNrRnJhbWU6OlNjb3BlU3RhY2tGcmFtZSk6CisgICAgICAgIChTY29wZVN0
YWNrRnJhbWUpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgICog
ZG9tL1NoYWRvd1RyZWUuY3BwOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZFBhZ2UuY3Bw
OgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxM
aW5rRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoK
KyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL1Zh
bGlkYXRpb25NZXNzYWdlLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAqIGxvYWRlci9MaW5rTG9hZGVy
LmNwcDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgICogcGFnZS9GcmFt
ZVZpZXcuY3BwOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclJlZ2lvbi5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZVNhZmFyaS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFn
ZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGEuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6
CisgICAgICAgICogc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NW
R0VsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwOgorICAg
ICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdNYXNr
RWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorCiAyMDEyLTA0
LTI1ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAg
IFJlZmFjdG9yIHRvL2Zyb20vYW5pbWF0ZWRUeXBlIGNyZWF0aW9uLCB0byBzaGFyZSBtb3JlIGNv
ZGUgYmV0d2VlbiBhbmltYXRvcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAx
MTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDc5LDExICs0NzksOSBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL0NTU1J1bGUu
Y3BwCiAgICAgY3NzL0NTU1J1bGVMaXN0LmNwcAogICAgIGNzcy9DU1NTZWdtZW50ZWRGb250RmFj
ZS5jcHAKLSAgICBjc3MvQ1NTU2VsZWN0b3IuY3BwCiAgICAgY3NzL0NTU1NlbGVjdG9yTGlzdC5j
cHAKICAgICBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKICAgICBjc3MvQ1NTU3R5bGVSdWxl
LmNwcAotICAgIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAogICAgIGNzcy9DU1NTdHlsZVNoZWV0
LmNwcAogICAgIGNzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcAogICAgIGNzcy9DU1NVbmlj
b2RlUmFuZ2VWYWx1ZS5jcHAKQEAgLTUxMCw2ICs1MDgsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgY3NzL1N0eWxlTWVkaWEuY3BwCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCiAg
ICAgY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwCisgICAgY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCiAgICAgY3NzL1N0eWxlUnVsZS5jcHAKICAgICBjc3MvU3R5bGVTaGVldC5jcHAKICAgICBj
c3MvU3R5bGVTaGVldExpc3QuY3BwCkBAIC0yNTQ5LDcgKzI1NDgsNyBAQCBBRERfQ1VTVE9NX0NP
TU1BTkQoCiAgICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0gLUkke1dFQkNPUkVfRElSfS9i
aW5kaW5ncy9zY3JpcHRzICR7V0VCQ09SRV9ESVJ9L2Nzcy9tYWtlLWNzcy1maWxlLWFycmF5cy5w
bCAtLWRlZmluZXMgIiR7RkVBVFVSRV9ERUZJTkVTX1dJVEhfU1BBQ0VfU0VQQVJBVE9SfSIgLS1w
cmVwcm9jZXNzb3IgIiR7Q09ERV9HRU5FUkFUT1JfUFJFUFJPQ0VTU09SfSIgJHtERVJJVkVEX1NP
VVJDRVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFN0eWxlU2hlZXRzLmggJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgJHtXZWJDb3JlX1VT
RVJfQUdFTlRfU1RZTEVfU0hFRVRTfQogICAgIFZFUkJBVElNKQogTElTVChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9Vc2VyQWdlbnRTdHlsZVNo
ZWV0c0RhdGEuY3BwKQotQUREX1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQRU5ERU5DSUVTKCR7
V0VCQ09SRV9ESVJ9L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBVc2VyQWdlbnRTdHlsZVNoZWV0
c0RhdGEuY3BwIFVzZXJBZ2VudFN0eWxlU2hlZXRzLmgpCitBRERfU09VUkNFX1dFQkNPUkVfREVS
SVZFRF9ERVBFTkRFTkNJRVMoJHtXRUJDT1JFX0RJUn0vY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIFVz
ZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgVXNlckFnZW50U3R5bGVTaGVldHMuaCkKIAogCiBH
RU5FUkFURV9HUkFNTUFSKGNzc3l5ICR7V0VCQ09SRV9ESVJ9L2Nzcy9DU1NHcmFtbWFyLnkgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0NTU0dyYW1tYXIuaCAke0RFUklWRURfU09VUkNF
U19XRUJDT1JFX0RJUn0vQ1NTR3JhbW1hci5jcHApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE2NDIsOCArMTY0Miw2IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaCBcCiAJ
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVJ1bGUuaCBcCi0JU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNoZWV0LmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVl
LmNwcCBcCkBAIC0xNzAwLDYgKzE2OTgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJv
cGVydHlTaG9ydGhhbmQuaCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
IFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSdWxlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5jcHAgXApJbmRleDogU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShy
ZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNv
cHkpCkBAIC00NjMsNyArNDYzLDYgQEAgU09VUkNFUyArPSBcCiAgICAgY3NzL0NTU1NlZ21lbnRl
ZEZvbnRGYWNlLmNwcCBcCiAgICAgY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwIFwKICAgICBj
c3MvQ1NTU3R5bGVSdWxlLmNwcCBcCi0gICAgY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIFwKICAg
ICBjc3MvQ1NTU3R5bGVTaGVldC5jcHAgXAogICAgIGNzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVl
LmNwcCBcCiAgICAgY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCBcCkBAIC00OTAsNiArNDg5
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgY3NzL1N0eWxlTWVkaWEuY3BwIFwKICAgICBjc3MvU3R5
bGVQcm9wZXJ0eVNldC5jcHAgXAogICAgIGNzcy9TdHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCBc
CisgICAgY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIFwKICAgICBjc3MvU3R5bGVSdWxlLmNwcCBcCiAg
ICAgY3NzL1N0eWxlU2hlZXQuY3BwIFwKICAgICBjc3MvU3R5bGVTaGVldExpc3QuY3BwIFwKQEAg
LTE2MjAsNyArMTYyMCw2IEBAIEhFQURFUlMgKz0gXAogICAgIGNzcy9DU1NTZWxlY3Rvckxpc3Qu
aCBcCiAgICAgY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaCBcCiAgICAgY3NzL0NTU1N0eWxlUnVs
ZS5oIFwKLSAgICBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIFwKICAgICBjc3MvQ1NTU3R5bGVTaGVl
dC5oIFwKICAgICBjc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIFwKICAgICBjc3MvQ1NTVW5p
Y29kZVJhbmdlVmFsdWUuaCBcCkBAIC0xNjQ3LDYgKzE2NDYsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBjc3MvU3R5bGVCdWlsZGVyLmggXAogICAgIGNzcy9TdHlsZVByb3BlcnR5U2V0LmggXAogICAg
IGNzcy9TdHlsZVByb3BlcnR5U2hvcnRoYW5kLmggXAorICAgIGNzcy9TdHlsZVJlc29sdmVyLmgg
XAogICAgIGNzcy9TdHlsZVJ1bGUuaCBcCiAgICAgY3NzL1N0eWxlU2hlZXQuaCBcCiAgICAgY3Nz
L1N0eWxlU2hlZXRMaXN0LmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTE1MTg3
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYx
LDggKzI0NjEsNiBAQAogICAgICAgICAgICAgJ2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcCcs
CiAgICAgICAgICAgICAnY3NzL0NTU1N0eWxlUnVsZS5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9D
U1NTdHlsZVJ1bGUuaCcsCi0gICAgICAgICAgICAnY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwJywK
LSAgICAgICAgICAgICdjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oJywKICAgICAgICAgICAgICdjc3Mv
Q1NTU3R5bGVTaGVldC5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9DU1NTdHlsZVNoZWV0LmgnLAog
ICAgICAgICAgICAgJ2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCcsCkBAIC0yNTE4LDYg
KzI1MTYsOCBAQAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgnLAogICAgICAg
ICAgICAgJ2Nzcy9TdHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCcsCiAgICAgICAgICAgICAnY3Nz
L1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCcsCisgICAgICAgICAgICAnY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwJywKKyAgICAgICAgICAgICdjc3MvU3R5bGVSZXNvbHZlci5oJywKICAgICAgICAgICAg
ICdjc3MvU3R5bGVSdWxlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUnVsZS5oJywKICAg
ICAgICAgICAgICdjc3MvU3R5bGVTaGVldC5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zNTg1NCw2MiArMzU4NTQsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxjc3NcQ1NTU3R5bGVTZWxlY3Rvci5jcHAiCi0JCQkJPgotCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKLQkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIK
LQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgot
CQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgot
CQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xDU1NTdHls
ZVNlbGVjdG9yLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGNzc1xDU1NTdHlsZVNoZWV0LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0
aW9uCkBAIC0zNjgwMiw2ICszNjc0Niw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcU3R5bGVSZXNvbHZlci5jcHAiCisJCQkJPgorCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMy
IgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMy
IgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTdHls
ZVJlc29sdmVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGNzc1xTdHlsZVJ1bGUuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTM3NSw4ICs1Mzc1LDYgQEAKIAkJQkM3NzJCM0Mw
QzRFQTkxRTAwODMyODVGIC8qIENTU0hlbHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJCMzYwQzRFQTkxRTAwODMyODVGIC8qIENTU0hlbHBl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJD
NzcyQjNEMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJCMzcwQzRFQTkxRTAwODMyODVGIC8q
IENTU1BhcnNlci5jcHAgKi87IH07CiAJCUJDNzcyQjNFMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQ
YXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
NzcyQjM4MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuaCAqLzsgfTsKLQkJQkM3NzJCM0Yw
QzRFQTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJCMzkwQzRFQTkxRTAwODMyODVGIC8q
IENTU1N0eWxlU2VsZWN0b3IuY3BwICovOyB9OwotCQlCQzc3MkI0MDBDNEVBOTFFMDA4MzI4NUYg
LyogQ1NTU3R5bGVTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkM3NzJCM0EwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0b3Iu
aCAqLzsgfTsKIAkJQkM3NzJDNDYwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcyQzQ0
MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5jcHAgKi87IH07CiAJCUJDNzcyQzQ3
MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNDUwQzRFQjJDNjAwODMyODVGIC8qIFhN
TEh0dHBSZXF1ZXN0LmggKi87IH07CiAJCUJDNzcyQzRFMEM0RUIzMDQwMDgzMjg1RiAvKiBNSU1F
VHlwZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDNzcyQzRDMEM0RUIzMDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmNwcCAq
LzsgfTsKQEAgLTU4NjMsNiArNTg2MSw4IEBACiAJCUUxMkVEQjdCMEIzMDhBNzgwMDI3MDRCNiAv
KiBFdmVudFRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTEyRURCN0EwQjMwOEE3ODAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyRURCRUEwQjMwOEUw
QjAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxMkVEQkU5MEIzMDhFMEIwMDI3MDRCNiAvKiBFdmVudFRhcmdl
dC5jcHAgKi87IH07CiAJCUUxMzRGNUFCMTJFRTM0M0YwMDRFQzU4RCAvKiBJbnRSZWN0SGFzaC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzNEY1QUEx
MkVFMzQzRjAwNEVDNThEIC8qIEludFJlY3RIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTEzOTg2NjMxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0
eWxlUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTEzOTg2NjExNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuY3BwICovOyB9
OworCQlFMTM5ODY2NDE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzOTg2NjIxNTQ3ODQ3NDAw
MUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCAqLzsgfTsKIAkJRTEzRjAxRjExMjcwRTE5MDAwREZC
QTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTNGMDFGMDEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFn
ZU1hYy5tbSAqLzsgfTsKIAkJRTE0RjFDNDQxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTE0RjFDNDIxNEI1REFDNjAwRUE5MDA5IC8qIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGUuY3BwICovOyB9OwogCQlFMTRGMUM0NTE0QjVEQUM2MDBFQTkwMDkg
LyogSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0RjFDNDMxNEI1REFDNjAwRUE5MDA5IC8qIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTI0NjQsOCArMTI0NjQsNiBAQAogCQlCQzc3MkIz
NjBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM3
NzJCMzcwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkM3NzJCMzgwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUJDNzcyQjM5MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNlbGVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NTdHlsZVNlbGVj
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM3NzJCM0EwQzRFQTkxRTAw
ODMyODVGIC8qIENTU1N0eWxlU2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENTU1N0eWxlU2VsZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkM3NzJDNDQwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxIdHRwUmVxdWVzdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQzQ1MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRw
UmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MSHR0cFJlcXVl
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM3NzJDNEMwQzRFQjMwNDAwODMy
ODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1JTUVUeXBlUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTMwMDEsNiArMTI5OTksOCBAQAogCQlFMTJFREI3QTBCMzA4QTc4MDAyNzA0QjYgLyog
RXZlbnRUYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRUYXJn
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyRURCRTkwQjMwOEUwQjAwMjcw
NEI2IC8qIEV2ZW50VGFyZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV2ZW50VGFyZ2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEzNEY1
QUExMkVFMzQzRjAwNEVDNThEIC8qIEludFJlY3RIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludFJlY3RIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxMzk4NjYxMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNv
bHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlc29sdmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxM0YwMUVBMTI3MEUxMEQwMERGQkE3MSAv
KiBDb29raWVTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvb2tp
ZVN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEzRjAxRjAxMjcwRTE5
MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBDb29raWVTdG9yYWdlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMTRGMUM0MjE0QjVEQUM2MDBFQTkwMDkgLyogSFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIwNjA3LDggKzIwNjA3LDYgQEAKIAkJCQlBODBFNkNDNTBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTU3R5bGVSdWxlLmNwcCAqLywKIAkJCQlBODBFNkNFMjBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTU3R5bGVSdWxlLmggKi8sCiAJCQkJODVDNTZDQTEwQUE4OUFCNDAwRDk1NzU1IC8qIENT
U1N0eWxlUnVsZS5pZGwgKi8sCi0JCQkJQkM3NzJCMzkwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0
eWxlU2VsZWN0b3IuY3BwICovLAotCQkJCUJDNzcyQjNBMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NT
dHlsZVNlbGVjdG9yLmggKi8sCiAJCQkJQThFQTgwMDAwQTE5NTE2RTAwQThFRjVGIC8qIENTU1N0
eWxlU2hlZXQuY3BwICovLAogCQkJCUE4RUE3RkZGMEExOTUxNkUwMEE4RUY1RiAvKiBDU1NTdHls
ZVNoZWV0LmggKi8sCiAJCQkJODU4QzM5MTAwQUE4RkYwMDAwQjE4N0E0IC8qIENTU1N0eWxlU2hl
ZXQuaWRsICovLApAQCAtMjA2ODYsNiArMjA2ODQsOCBAQAogCQkJCUE4MEU2REZBMEExOTkwNjcw
MDdGQjhDNSAvKiBTdHlsZVByb3BlcnR5U2V0LmggKi8sCiAJCQkJRTFCMjUxMDQxNTJBMEJBRjAw
NjlCNzc5IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwICovLAogCQkJCUUxQjI1MTA1MTUy
QTBCQUYwMDY5Qjc3OSAvKiBTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmggKi8sCisJCQkJRTEzOTg2
NjExNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuY3BwICovLAorCQkJCUUxMzk4NjYy
MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggKi8sCiAJCQkJRTRCQkVENEExNEZD
REJBMTAwM0YwQjk4IC8qIFN0eWxlUnVsZS5jcHAgKi8sCiAJCQkJRTRCQkVENEIxNEZDREJBMTAw
M0YwQjk4IC8qIFN0eWxlUnVsZS5oICovLAogCQkJCUE4RUE4MDA1MEExOTUxNkUwMEE4RUY1RiAv
KiBTdHlsZVNoZWV0LmNwcCAqLywKQEAgLTIxOTE5LDcgKzIxOTE5LDYgQEAKIAkJCQlBODBFNzM1
MjBBMTk5Qzc3MDA3RkI4QzUgLyogQ1NTU2VsZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
MEU2RTBGMEExOTkxMUMwMDdGQjhDNSAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODBFNkQwQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTU3R5bGVSdWxlLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCQzc3MkI0MDBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxl
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTgwMDcwQTE5NTE2RTAwQThFRjVGIC8qIENT
U1N0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODBDOTg4MENEMjk0RUUwMEEwQjdC
MyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzFGNTNF
OTBEMjcwNEY5MDBFQ0UwRDUgLyogQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCBpbiBIZWFkZXJzICov
LApAQCAtMjQ4MTQsNiArMjQ4MTMsNyBAQAogCQkJCTUwRDEwRDlBMTU0NUY1NzYwMDk2RDI4OCAv
KiBSZW5kZXJMYXllckZpbHRlckluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMDBFRTc2MTU0
NkVBQzEwMEJBMTFEMSAvKiBTdHlsZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRkEy
RDc4MTUyMTMyQjMwMEMxQkEwQiAvKiBET01XaW5kb3dFeHRlbnNpb24uaCBpbiBIZWFkZXJzICov
LAorCQkJCUUxMzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTI1NDA0LDcgKzI1NDA0LDYgQEAKIAkJCQlFNEMxNzg5QTBFRTY5MDM4MDA4
MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2RTEw
MEExOTkxMUMwMDdGQjhDNSAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4MEU2Q0VGMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHlsZVJ1bGUuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQkM3NzJCM0YwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTgwMDgwQTE5NTE2RTAwQThFRjVGIC8qIENT
U1N0eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4MEM5ODcwQ0QyOTRFRTAwQTBC
N0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcx
RjUzRUEwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjc4MjcsNiArMjc4MjYsNyBAQAogCQkJCTUwRDEwRDk5MTU0NUY1NzYwMDk2
RDI4OCAvKiBSZW5kZXJMYXllckZpbHRlckluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEw
MEVFNzUxNTQ2RUFDMTAwQkExMUQxIC8qIFN0eWxlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTdGQkExRTE1MUFCMTdDMDBCNTc5NTkgLyogRE9NV2luZG93RXh0ZW5zaW9uLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUUxMzk4NjYzMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29s
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbElu
T25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3Bw
CShyZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw2IEBACiAjaW5jbHVkZSAiQ1NTUnVsZS5jcHAi
CiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuY3BwIgogI2luY2x1ZGUgIkNTU1NlZ21lbnRlZEZvbnRG
YWNlLmNwcCIKLSNpbmNsdWRlICJDU1NTZWxlY3Rvci5jcHAiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0
b3JMaXN0LmNwcCIKICNpbmNsdWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCIKICNpbmNsdWRl
ICJDU1NTdHlsZVJ1bGUuY3BwIgpAQCAtNzEsMyArNzAsNCBAQAogI2luY2x1ZGUgIlN0eWxlQnVp
bGRlci5jcHAiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5jcHAiCiAjaW5jbHVkZSAiU3R5
bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5jcHAiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCShyZXZpc2lv
biAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCisj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNl
bGVjdG9yLmNwcAkocmV2aXNpb24gMTE1MTg3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNp
bmNsdWRlICJDU1NTZWdtZW50ZWRGb250RmFjZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0
b3IuaCIKICNpbmNsdWRlICJDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKQEAgLTQ2LDYgKzQ1LDcg
QEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAj
aW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFtZXMu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNiBAQAogI2luY2x1ZGUgIkNTU0dyYWRpZW50VmFsdWUuaCIKIAogI2luY2x1ZGUgIkNTU0Nh
bGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkdlbmVyYXRvckdlbmVyYXRlZEltYWdl
LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKQEAgLTM3LDYgKzM2LDcgQEAKICNpbmNsdWRlICJO
b2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAkocmV2aXNpb24gMTE1MTg3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4NjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAy
MDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3Mu
Y29tKQotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKLSAqIENvcHlyaWdodCAoYykgMjAxMSwg
Q29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCi0KLSNpbmNs
dWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNh
bGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJDb250ZW50RGF0YS5oIgotI2luY2x1ZGUgIkNv
dW50ZXIuaCIKLSNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgotI2luY2x1ZGUgIkNTU0JvcmRl
ckltYWdlLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgotI2luY2x1ZGUgIkNT
U0N1cnNvckltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKLSNpbmNs
dWRlICJDU1NGb250U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5j
bHVkZSAiQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIgotI2luY2x1ZGUgIkNTU01lZGlhUnVsZS5o
IgotI2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5j
bHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5
TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NSdWxl
TGlzdC5oIgotI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTU2VsZWN0b3JM
aXN0LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVl
dC5oIgotI2luY2x1ZGUgIkNTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NW
YWx1ZUxpc3QuaCIKLSNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCi0jaW5jbHVkZSAiRm9udEZlYXR1
cmVWYWx1ZS5oIgotI2luY2x1ZGUgIkZvbnRWYWx1ZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNs
dWRlICJIVE1MRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJI
VE1MT3B0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKLSNp
bmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIktl
eWZyYW1lTGlzdC5oIgotI2luY2x1ZGUgIkxpbmtIYXNoLmgiCi0jaW5jbHVkZSAiTG9jYWxlVG9T
Y3JpcHRNYXBwaW5nLmgiCi0jaW5jbHVkZSAiTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
LSNpbmNsdWRlICJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJNZWRpYUxp
c3QuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0jaW5jbHVkZSAiTm9kZVJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgot
I2luY2x1ZGUgIlBhaXIuaCIKLSNpbmNsdWRlICJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oIgotI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKLSNpbmNsdWRlICJSZWN0LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyUmVnaW9uLmgiCi0jaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50
cy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgotI2luY2x1
ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgotI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNoYWRvd0Rh
dGEuaCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0jaW5jbHVkZSAiU2hhZG93VmFsdWUuaCIK
LSNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiU3R5bGVCdWls
ZGVyLmgiCi0jaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlUGVu
ZGluZ0ltYWdlLmgiCi0jaW5jbHVkZSAiU3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVHZW5l
cmF0ZWRJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCi0jaW5jbHVkZSAiVGV4
dC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMu
aCIKLSNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKLSNpbmNsdWRlICJXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTUmVnaW9uUnVsZS5oIgotI2lu
Y2x1ZGUgIldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Rm9udEZh
bWlseU5hbWVzLmgiCi0jaW5jbHVkZSAiWE1MTmFtZXMuaCIKLSNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKENTU19GSUxU
RVJTKQotI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYktpdENTU0Zp
bHRlclZhbHVlLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSNp
bmNsdWRlICJEYXNoYm9hcmRSZWdpb24uaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNWRykKLSNp
bmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKENTU19TSEFERVJTKQotI2luY2x1ZGUgIkN1c3RvbUZpbHRlck51bWJlclBhcmFt
ZXRlci5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkN1
c3RvbUZpbHRlclBhcmFtZXRlci5oIgotI2luY2x1ZGUgIlN0eWxlQ2FjaGVkU2hhZGVyLmgiCi0j
aW5jbHVkZSAiU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCi0jaW5jbHVkZSAiU3R5bGVQZW5k
aW5nU2hhZGVyLmgiCi0jaW5jbHVkZSAiU3R5bGVTaGFkZXIuaCIKLSNpbmNsdWRlICJXZWJLaXRD
U1NTaGFkZXJWYWx1ZS5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSNp
bmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCi0jaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZVNl
dC5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkKLSNkZWZpbmUgRklYRURfUE9TSVRJT05f
Q1JFQVRFU19TVEFDS0lOR19DT05URVhUIDEKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2Ugc3Rk
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0K
LSNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAotaWYgKGlzSW5oZXJpdCkgeyBc
Ci0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5bGUtPnByb3AoKSk7IFwKLSAgICBy
ZXR1cm47IFwKLX0KLQotI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChwcm9wLCBQ
cm9wKSBcCi1IQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCi1pZiAoaXNJbml0aWFsKSB7IFwK
LSAgICBtX3N0eWxlLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1Byb3AoKSk7IFwK
LSAgICByZXR1cm47IFwKLX0KLQotI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9X
SVRIX1ZBTFVFKHByb3AsIFByb3AsIFZhbHVlKSBcCi1IQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9w
KSBcCi1pZiAoaXNJbml0aWFsKSB7IFwKLSAgICBtX3N0eWxlLT5zZXQjI1Byb3AoUmVuZGVyU3R5
bGU6OmluaXRpYWwjI1ZhbHVlKCkpO1wKLSAgICByZXR1cm47XAotfQotCi0jZGVmaW5lIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUocHJvcCwgUHJvcCkgXAotSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAotaWYgKHByaW1pdGl2ZVZhbHVlKSBc
Ci0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKCpwcmltaXRpdmVWYWx1ZSk7Ci0KLWNsYXNzIFJ1bGVE
YXRhIHsKLXB1YmxpYzoKLSAgICBSdWxlRGF0YShTdHlsZVJ1bGUqLCBDU1NTZWxlY3RvciosIHVu
c2lnbmVkIHBvc2l0aW9uLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2Fu
VXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKTsKLQotICAgIHVuc2lnbmVk
IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotICAgIFN0eWxlUnVsZSog
cnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQotICAgIENTU1NlbGVjdG9yKiBzZWxlY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3I7IH0KLQotICAgIGJvb2wgaGFzRmFzdENoZWNr
YWJsZVNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3I7
IH0KLSAgICBib29sIGhhc011bHRpcGFydFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNN
dWx0aXBhcnRTZWxlY3RvcjsgfQotICAgIGJvb2wgaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGlu
Z0hUTUxCYXNlZE9uUnVsZUhhc2goKSBjb25zdCB7IHJldHVybiBtX2hhc1JpZ2h0bW9zdFNlbGVj
dG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoOyB9Ci0gICAgYm9vbCBjb250YWluc1VuY29t
bW9uQXR0cmlidXRlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zVW5jb21tb25B
dHRyaWJ1dGVTZWxlY3RvcjsgfQotICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGVjaWZpY2l0eTsgfQotICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2xpbmtNYXRjaFR5cGU7IH0KLSAgICBib29sIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47IH0K
LSAgICBib29sIGlzSW5SZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUmVnaW9uUnVs
ZTsgfQotCi0gICAgLy8gVHJ5IHRvIGJhbGFuY2UgYmV0d2VlbiBtZW1vcnkgdXNhZ2UgKHRoZXJl
IGNhbiBiZSBsb3RzIG9mIFJ1bGVEYXRhIG9iamVjdHMpIGFuZCBnb29kIGZpbHRlcmluZyBwZXJm
b3JtYW5jZS4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3Vu
dCA9IDQ7Ci0gICAgY29uc3QgdW5zaWduZWQqIGRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJI
YXNoZXMoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNo
ZXM7IH0KLQotcHJpdmF0ZToKLSAgICBTdHlsZVJ1bGUqIG1fcnVsZTsKLSAgICBDU1NTZWxlY3Rv
ciogbV9zZWxlY3RvcjsKLSAgICB1bnNpZ25lZCBtX3NwZWNpZmljaXR5OwotICAgIC8vIFRoaXMg
bnVtYmVyIHdhcyBwaWNrZWQgZmFpcmx5IGFyYml0cmFyaWx5LiBXZSBjYW4gcHJvYmFibHkgbG93
ZXIgaXQgaWYgd2UgbmVlZCB0by4KLSAgICAvLyBTb21lIHNpbXBsZSB0ZXN0aW5nIHNob3dlZCA8
MTAwLDAwMCBSdWxlRGF0YSdzIG9uIGxhcmdlIHNpdGVzLgotICAgIHVuc2lnbmVkIG1fcG9zaXRp
b24gOiAyNDsKLSAgICB1bnNpZ25lZCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvciA6IDE7Ci0g
ICAgdW5zaWduZWQgbV9oYXNNdWx0aXBhcnRTZWxlY3RvciA6IDE7Ci0gICAgdW5zaWduZWQgbV9o
YXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCA6IDE7Ci0gICAg
dW5zaWduZWQgbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IgOiAxOwotICAgIHVu
c2lnbmVkIG1fbGlua01hdGNoVHlwZSA6IDI7IC8vICBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRj
aE1hc2sKLSAgICB1bnNpZ25lZCBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gOiAxOwotICAg
IHVuc2lnbmVkIG1faXNJblJlZ2lvblJ1bGUgOiAxOwotICAgIC8vIFVzZSBwbGFpbiBhcnJheSBp
bnN0ZWFkIG9mIGEgVmVjdG9yIHRvIG1pbmltaXplIG1lbW9yeSBvdmVyaGVhZC4KLSAgICB1bnNp
Z25lZCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXNbbWF4aW11bUlkZW50aWZp
ZXJDb3VudF07Ci19OwotICAgIAotc3RydWN0IFNhbWVTaXplQXNSdWxlRGF0YSB7Ci0gICAgdm9p
ZCogYTsKLSAgICB2b2lkKiBiOwotICAgIHVuc2lnbmVkIGM7Ci0gICAgdW5zaWduZWQgZDsKLSAg
ICB1bnNpZ25lZCBlWzRdOwotfTsKLQotQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJ1bGVEYXRhKSA9
PSBzaXplb2YoU2FtZVNpemVBc1J1bGVEYXRhKSwgUnVsZURhdGFfc2hvdWxkX3N0YXlfc21hbGwp
OwotCi1jbGFzcyBSdWxlU2V0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSdWxlU2V0KTsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBjcmVhdGUoKSB7IHJldHVy
biBhZG9wdFB0cihuZXcgUnVsZVNldCk7IH0KLQotICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNT
dHJpbmdJbXBsKiwgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiA+IEF0b21SdWxlTWFwOwotCi0g
ICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0SW50ZXJuYWwqLCBjb25zdCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciogPSAwLCBjb25zdCBDb250YWluZXJOb2Rl
KiA9IDApOwotCi0gICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwgYm9vbCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlz
SW5SZWdpb25SdWxlID0gZmFsc2UpOwotICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCBDU1NT
ZWxlY3RvciosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKLSAgICB2b2lkIGFk
ZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UqKTsKLSAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9taWNT
dHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEmKTsKLSAgICB2b2lk
IGFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luKTsKLSAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgdm9pZCBkaXNhYmxlQXV0b1No
cmlua1RvRml0KCkgeyBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgPSBmYWxzZTsgfQotCi0gICAg
Y29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4g
bV9mZWF0dXJlczsgfQotCi0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogaWRSdWxlcyhBdG9t
aWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQot
ICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGNsYXNzUnVsZXMoQXRvbWljU3RyaW5nSW1wbCog
a2V5KSBjb25zdCB7IHJldHVybiBtX2NsYXNzUnVsZXMuZ2V0KGtleSk7IH0KLSAgICBjb25zdCBW
ZWN0b3I8UnVsZURhdGE+KiB0YWdSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsg
cmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiBzaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7
IHJldHVybiBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcy5nZXQoa2V5KTsgfQotICAgIGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4qIGxpbmtQc2V1ZG9DbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4g
Jm1fbGlua1BzZXVkb0NsYXNzUnVsZXM7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBm
b2N1c1BzZXVkb0NsYXNzUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV9mb2N1c1BzZXVkb0NsYXNz
UnVsZXM7IH0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiB1bml2ZXJzYWxSdWxlcygpIGNv
bnN0IHsgcmV0dXJuICZtX3VuaXZlcnNhbFJ1bGVzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFN0eWxl
UnVsZVBhZ2UqPiYgcGFnZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlUnVsZXM7IH0KLQot
cHVibGljOgotICAgIFJ1bGVTZXQoKTsKLQotICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKLSAg
ICBBdG9tUnVsZU1hcCBtX2NsYXNzUnVsZXM7Ci0gICAgQXRvbVJ1bGVNYXAgbV90YWdSdWxlczsK
LSAgICBBdG9tUnVsZU1hcCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlczsKLSAgICBWZWN0b3I8
UnVsZURhdGE+IG1fbGlua1BzZXVkb0NsYXNzUnVsZXM7Ci0gICAgVmVjdG9yPFJ1bGVEYXRhPiBt
X2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsKLSAgICBWZWN0b3I8UnVsZURhdGE+IG1fdW5pdmVyc2Fs
UnVsZXM7Ci0gICAgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiBtX3BhZ2VSdWxlczsKLSAgICB1bnNp
Z25lZCBtX3J1bGVDb3VudDsKLSAgICBib29sIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZDsKLSAg
ICBTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyBtX2ZlYXR1cmVzOwotCi0gICAgc3RydWN0IFJ1bGVT
ZXRTZWxlY3RvclBhaXIgewotICAgICAgICBSdWxlU2V0U2VsZWN0b3JQYWlyKENTU1NlbGVjdG9y
KiBzZWxlY3RvciwgUGFzc093blB0cjxSdWxlU2V0PiBydWxlU2V0KSA6IHNlbGVjdG9yKHNlbGVj
dG9yKSwgcnVsZVNldChydWxlU2V0KSB7IH0KLSAgICAgICAgUnVsZVNldFNlbGVjdG9yUGFpcihj
b25zdCBSdWxlU2V0U2VsZWN0b3JQYWlyJiBycykgOiBzZWxlY3Rvcihycy5zZWxlY3RvciksIHJ1
bGVTZXQoY29uc3RfY2FzdDxSdWxlU2V0U2VsZWN0b3JQYWlyKj4oJnJzKS0+cnVsZVNldC5yZWxl
YXNlKCkpIHsgfQotICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgICAgIE93blB0
cjxSdWxlU2V0PiBydWxlU2V0OwotICAgIH07Ci0KLSAgICBWZWN0b3I8UnVsZVNldFNlbGVjdG9y
UGFpcj4gbV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0czsKLX07Ci0KLXN0YXRpYyBSdWxlU2V0
KiBkZWZhdWx0U3R5bGU7Ci1zdGF0aWMgUnVsZVNldCogZGVmYXVsdFF1aXJrc1N0eWxlOwotc3Rh
dGljIFJ1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOwotc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRW
aWV3U291cmNlU3R5bGU7Ci1zdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBzaW1wbGVEZWZhdWx0
U3R5bGVTaGVldDsKLXN0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIGRlZmF1bHRTdHlsZVNoZWV0
Owotc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogcXVpcmtzU3R5bGVTaGVldDsKLXN0YXRpYyBT
dHlsZVNoZWV0SW50ZXJuYWwqIHN2Z1N0eWxlU2hlZXQ7Ci1zdGF0aWMgU3R5bGVTaGVldEludGVy
bmFsKiBtYXRoTUxTdHlsZVNoZWV0Owotc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogbWVkaWFD
b250cm9sc1N0eWxlU2hlZXQ7Ci1zdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBmdWxsc2NyZWVu
U3R5bGVTaGVldDsKLQotUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OnNfc3R5bGVOb3RZZXRB
dmFpbGFibGU7Ci0KLXN0YXRpYyB2b2lkIGxvYWRGdWxsRGVmYXVsdFN0eWxlKCk7Ci1zdGF0aWMg
dm9pZCBsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKCk7Ci10ZW1wbGF0ZSA8Y2xhc3MgTGlzdFR5cGU+
Ci1zdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJl
ZlB0cjxDU1NTdHlsZVJ1bGU+ID4mLCBMaXN0VHlwZSopOwotCi0vLyBGSVhNRTogSXQgd291bGQg
YmUgbmljZSB0byB1c2Ugc29tZSBtZWNoYW5pc20gdGhhdCBndWFyYW50ZWVzIHRoaXMgaXMgaW4g
c3luYyB3aXRoIHRoZSByZWFsIFVBIHN0eWxlc2hlZXQuCi1zdGF0aWMgY29uc3QgY2hhciogc2lt
cGxlVXNlckFnZW50U3R5bGVTaGVldCA9ICJodG1sLGJvZHksZGl2e2Rpc3BsYXk6YmxvY2t9aGVh
ZHtkaXNwbGF5Om5vbmV9Ym9keXttYXJnaW46OHB4fWRpdjpmb2N1cyxzcGFuOmZvY3Vze291dGxp
bmU6YXV0byA1cHggLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yfWE6LXdlYmtpdC1hbnktbGlua3tj
b2xvcjotd2Via2l0LWxpbms7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1hOi13ZWJraXQtYW55
LWxpbms6YWN0aXZle2NvbG9yOi13ZWJraXQtYWN0aXZlbGlua30iOwotCi1zdGF0aWMgaW5saW5l
IGJvb2wgZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShFbGVtZW50KiBlKQotewotICAg
IHJldHVybiBlLT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGUtPmhhc1RhZ05hbWUoaGVhZFRhZykg
fHwgZS0+aGFzVGFnTmFtZShib2R5VGFnKSB8fCBlLT5oYXNUYWdOYW1lKGRpdlRhZykgfHwgZS0+
aGFzVGFnTmFtZShzcGFuVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGJyVGFnKSB8fCBlLT5oYXNUYWdO
YW1lKGFUYWcpOwotfQotCi1zdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgc2NyZWVu
RXZhbCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yLCBzdGF0aWNTY3JlZW5FdmFsLCAoInNjcmVlbiIpKTsKLSAgICByZXR1cm4gc3RhdGljU2Ny
ZWVuRXZhbDsKLX0KLQotc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHByaW50RXZh
bCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9y
LCBzdGF0aWNQcmludEV2YWwsICgicHJpbnQiKSk7Ci0gICAgcmV0dXJuIHN0YXRpY1ByaW50RXZh
bDsKLX0KLQotc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIGxlZnRUb1JpZ2h0RGVjbGFyYXRpb24o
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+LCBs
ZWZ0VG9SaWdodERlY2wsIChTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKSkpOwotICAgIGlmIChs
ZWZ0VG9SaWdodERlY2wtPmlzRW1wdHkoKSkKLSAgICAgICAgbGVmdFRvUmlnaHREZWNsLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVMdHIpOwotICAgIHJldHVybiBs
ZWZ0VG9SaWdodERlY2wuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBTdHlsZVByb3BlcnR5U2V0KiByaWdo
dFRvTGVmdERlY2xhcmF0aW9uKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxT
dHlsZVByb3BlcnR5U2V0PiwgcmlnaHRUb0xlZnREZWNsLCAoU3R5bGVQcm9wZXJ0eVNldDo6Y3Jl
YXRlKCkpKTsKLSAgICBpZiAocmlnaHRUb0xlZnREZWNsLT5pc0VtcHR5KCkpCi0gICAgICAgIHJp
Z2h0VG9MZWZ0RGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVl
UnRsKTsKLSAgICByZXR1cm4gcmlnaHRUb0xlZnREZWNsLmdldCgpOwotfQotCi1TdHlsZVJlc29s
dmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMpCi0gICAgOiBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKLSAgICAsIG1fYmFj
a2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikKLSAgICAsIG1fbWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCi0gICAgLCBtX2NoZWNrZXIoZG9jdW1l
bnQsICFkb2N1bWVudC0+aW5RdWlya3NNb2RlKCkpCi0gICAgLCBtX3BhcmVudFN0eWxlKDApCi0g
ICAgLCBtX3Jvb3RFbGVtZW50U3R5bGUoMCkKLSAgICAsIG1fZWxlbWVudCgwKQotICAgICwgbV9z
dHlsZWRFbGVtZW50KDApCi0gICAgLCBtX3JlZ2lvbkZvclN0eWxpbmcoMCkKLSAgICAsIG1fZWxl
bWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQotICAgICwgbV9wYXJlbnROb2RlKDApCi0gICAg
LCBtX2xpbmVIZWlnaHRWYWx1ZSgwKQotICAgICwgbV9mb250RGlydHkoZmFsc2UpCi0gICAgLCBt
X21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAg
LCBtX3NhbWVPcmlnaW5Pbmx5KGZhbHNlKQotICAgICwgbV9mb250U2VsZWN0b3IoQ1NTRm9udFNl
bGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQotICAgICwgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUodHJ1ZSkKLSAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxz
ZSkKLSAgICAsIG1fc3R5bGVCdWlsZGVyKFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVy
KCkpCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgICwgbV9oYXNQZW5kaW5nU2hhZGVycyhm
YWxzZSkKLSNlbmRpZgotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgLCBtX3Njb3BlU3Rh
Y2tQYXJlbnQoMCkKLSNlbmRpZgotewotICAgIEVsZW1lbnQqIHJvb3QgPSBkb2N1bWVudC0+ZG9j
dW1lbnRFbGVtZW50KCk7Ci0KLSAgICBpZiAoIWRlZmF1bHRTdHlsZSkgewotICAgICAgICBpZiAo
IXJvb3QgfHwgZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShyb290KSkKLSAgICAgICAg
ICAgIGxvYWRTaW1wbGVEZWZhdWx0U3R5bGUoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gY29u
c3RydWN0IGRvY3VtZW50IHJvb3QgZWxlbWVudCBkZWZhdWx0IHN0eWxlLiB0aGlzIGlzIG5lZWRl
ZAotICAgIC8vIHRvIGV2YWx1YXRlIG1lZGlhIHF1ZXJpZXMgdGhhdCBjb250YWluIHJlbGF0aXZl
IGNvbnN0cmFpbnRzLCBsaWtlICJzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwZW0pIgotICAgIC8v
IFRoaXMgaXMgaGVyZSBpbnN0ZWFkIG9mIGNvbnN0cnVjdG9yLCBiZWNhdXNlIHdoZW4gY29uc3Ry
dWN0b3IgaXMgcnVuLAotICAgIC8vIGRvY3VtZW50IGRvZXNuJ3QgaGF2ZSBkb2N1bWVudEVsZW1l
bnQKLSAgICAvLyBOT1RFOiB0aGlzIGFzc3VtZXMgdGhhdCBlbGVtZW50IHRoYXQgZ2V0cyBwYXNz
ZWQgdG8gc3R5bGVGb3JFbGVtZW50IC1jYWxsCi0gICAgLy8gaXMgYWx3YXlzIGZyb20gdGhlIGRv
Y3VtZW50IHRoYXQgb3ducyB0aGUgc3R5bGUgc2VsZWN0b3IKLSAgICBGcmFtZVZpZXcqIHZpZXcg
PSBkb2N1bWVudC0+dmlldygpOwotICAgIGlmICh2aWV3KQotICAgICAgICBtX21lZGl1bSA9IGFk
b3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpKSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9y
KCJhbGwiKSk7Ci0KLSAgICBpZiAocm9vdCkKLSAgICAgICAgbV9yb290RGVmYXVsdFN0eWxlID0g
c3R5bGVGb3JFbGVtZW50KHJvb3QsIDAsIERpc2FsbG93U3R5bGVTaGFyaW5nLCBNYXRjaE9ubHlV
c2VyQWdlbnRSdWxlcyk7Ci0KLSAgICBpZiAobV9yb290RGVmYXVsdFN0eWxlICYmIHZpZXcpCi0g
ICAgICAgIG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlFdmFsdWF0b3Iodmlldy0+
bWVkaWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRTdHlsZS5nZXQoKSkpOwot
Ci0gICAgbV9hdXRob3JTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgIC8vIEFkZGluZyBy
dWxlcyBmcm9tIG11bHRpcGxlIHNoZWV0cywgc2hyaW5rIGF0IHRoZSBlbmQuCi0gICAgLy8gQWRk
aW5nIGdsb2JhbCBydWxlcyBmcm9tIG11bHRpcGxlIHNoZWV0cywgc2hyaW5rIGF0IHRoZSBlbmQu
Ci0gICAgLy8gTm90ZSB0aGF0IHRoZXJlIHVzdWFsbHkgaXMgb25seSAxIHNoZWV0IGZvciBzY29w
ZWQgcnVsZXMsIHNvIGF1dG8tc2hyaW5rLXRvLWZpdCBpcyBmaW5lLgotICAgIG1fYXV0aG9yU3R5
bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHN1Y2tz
ISBUaGUgdXNlciBzaGVldCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQotICAgIE93blB0cjxSdWxl
U2V0PiB0ZW1wVXNlclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgaWYgKFN0eWxlU2hl
ZXRJbnRlcm5hbCogcGFnZVVzZXJTaGVldCA9IGRvY3VtZW50LT5wYWdlVXNlclNoZWV0KCkpCi0g
ICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQsICpt
X21lZGl1bSwgdGhpcyk7Ci0gICAgYWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJv
bVNoZWV0cyhkb2N1bWVudC0+cGFnZUdyb3VwVXNlclNoZWV0cygpLCAqdGVtcFVzZXJTdHlsZSk7
Ci0gICAgYWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhkb2N1bWVu
dC0+ZG9jdW1lbnRVc2VyU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsKLSAgICBpZiAodGVtcFVz
ZXJTdHlsZS0+bV9ydWxlQ291bnQgPiAwIHx8IHRlbXBVc2VyU3R5bGUtPm1fcGFnZVJ1bGVzLnNp
emUoKSA+IDApCi0gICAgICAgIG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHlsZS5yZWxlYXNlKCk7
Ci0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChkb2N1bWVudC0+c3ZnRXh0ZW5zaW9u
cygpKSB7Ci0gICAgICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj4mIHN2Z0Zv
bnRGYWNlRWxlbWVudHMgPSBkb2N1bWVudC0+c3ZnRXh0ZW5zaW9ucygpLT5zdmdGb250RmFjZUVs
ZW1lbnRzKCk7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IHN2Z0ZvbnRGYWNlRWxlbWVudHMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFz
aFNldDxTVkdGb250RmFjZUVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdmdGb250RmFj
ZUVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGZvbnRTZWxl
Y3RvcigpLT5hZGRGb250RmFjZVJ1bGUoKCppdCktPmZvbnRGYWNlUnVsZSgpKTsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIGFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKDAsIGRvY3VtZW50LT5zdHlsZVNo
ZWV0cygpLT52ZWN0b3IoKSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkQXV0aG9yUnVs
ZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxl
U2hlZXRJbnRlcm5hbD4gPiogdXNlclNoZWV0cywgUnVsZVNldCYgdXNlclN0eWxlKQotewotICAg
IGlmICghdXNlclNoZWV0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gdXNlclNoZWV0cy0+c2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICBjb25zdCBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiYgc2hl
ZXQgPSB1c2VyU2hlZXRzLT5hdChpKTsKLSAgICAgICAgaWYgKHNoZWV0LT5pc1VzZXJTdHlsZVNo
ZWV0KCkpCi0gICAgICAgICAgICB1c2VyU3R5bGUuYWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQuZ2V0
KCksICptX21lZGl1bSwgdGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fYXV0aG9y
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOwot
ICAgIH0KLX0KLQotc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gbWFrZVJ1bGVTZXQoY29uc3Qg
VmVjdG9yPFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlPiYgcnVsZXMpCi17Ci0gICAgc2l6ZV90
IHNpemUgPSBydWxlcy5zaXplKCk7Ci0gICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBydWxlU2V0LT5h
ZGRSdWxlKHJ1bGVzW2ldLnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9yLCBydWxlc1tpXS5oYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luLCBmYWxzZSk7Ci0gICAgcmV0dXJuIHJ1bGVTZXQucmVsZWFzZSgp
OwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlcygpCi17Ci0gICAgbV9m
ZWF0dXJlcy5jbGVhcigpOwotICAgIC8vIENvbGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcg
c2libGluZyBzZWxlY3RvcnMgKDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxhcikKLSAgICAvLyBpbiB0
aGUgY3VycmVudCBzZXQgb2Ygc3R5bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRo
aXMgaW5mb3JtYXRpb24gdG8gcmVqZWN0Ci0gICAgLy8gc2hhcmluZyBjYW5kaWRhdGVzLgotICAg
IG1fZmVhdHVyZXMuYWRkKGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKSk7Ci0gICAgbV9mZWF0dXJl
cy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BF
RCkKLSAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRo
b3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCk7ICsraXQp
Ci0gICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1cmVzKCkpOwotI2VuZGlm
Ci0gICAgaWYgKG1fdXNlclN0eWxlKQotICAgICAgICBtX2ZlYXR1cmVzLmFkZChtX3VzZXJTdHls
ZS0+ZmVhdHVyZXMoKSk7Ci0KLSAgICBtX3NpYmxpbmdSdWxlU2V0ID0gbWFrZVJ1bGVTZXQobV9m
ZWF0dXJlcy5zaWJsaW5nUnVsZXMpOwotICAgIG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0ID0g
bWFrZVJ1bGVTZXQobV9mZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKLX0KLQotI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpCi1jb25zdCBDb250YWluZXJOb2RlKiBTdHlsZVJlc29sdmVy
OjpkZXRlcm1pbmVTY29wZShjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0KQotewotICAg
IEFTU0VSVChzaGVldCk7Ci0KLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnN0eWxl
U2NvcGVkRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE5vZGUqIG93bmVyTm9k
ZSA9IHNoZWV0LT5maW5kU3R5bGVTaGVldE93bmVyTm9kZSgpOwotICAgIGlmICghb3duZXJOb2Rl
IHx8ICFvd25lck5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAhb3duZXJOb2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6c3R5bGVUYWcpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEhUTUxTdHls
ZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihv
d25lck5vZGUpOwotICAgIGlmICghc3R5bGVFbGVtZW50LT5zY29wZWQoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBzdHlsZUVsZW1lbnQtPnBhcmVu
dE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1
cm4gKHBhcmVudC0+aXNFbGVtZW50Tm9kZSgpIHx8IHBhcmVudC0+aXNTaGFkb3dSb290KCkpID8g
cGFyZW50IDogMDsKLX0KLQotaW5saW5lIFJ1bGVTZXQqIFN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRG
b3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3QKLXsKLSAgICBpZiAoIXNj
b3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBT
Y29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVz
LmZpbmQoc2NvcGUpOwotICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQo
KSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKLX0KLSNlbmRpZgotCi12b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0eWxlc2hlZXRzKQotewotICAgIC8vIFRoaXMgaGFu
ZGxlcyBzaGVldHMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3R5bGVzaGVldCBsaXN0IG9ubHku
IEluIG90aGVyIGNhc2VzIHRoZSBzdHlsZSByZXNvbHZlcgotICAgIC8vIG5lZWRzIHRvIGJlIHJl
Y29uc3RydWN0ZWQuIFRvIGhhbmRsZSBpbnNlcnRpb25zIHRvbyB0aGUgcnVsZSBvcmRlciBudW1i
ZXJzIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZC4KLSAgICB1bnNpZ25lZCBzaXplID0gc3R5bGVz
aGVldHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0TmV3OyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIGlmICghc3R5bGVzaGVldHNbaV0tPmlzQ1NTU3R5bGVTaGVldCgpIHx8
IHN0eWxlc2hlZXRzW2ldLT5kaXNhYmxlZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIENTU1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+
KHN0eWxlc2hlZXRzW2ldLmdldCgpKTsKLSAgICAgICAgU3R5bGVTaGVldEludGVybmFsKiBzaGVl
dCA9IGNzc1NoZWV0LT5pbnRlcm5hbCgpOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAg
ICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gZGV0ZXJtaW5lU2NvcGUoc2hlZXQpOwot
ICAgICAgICBpZiAoc2NvcGUpIHsKLSAgICAgICAgICAgIFNjb3BlZFJ1bGVTZXRNYXA6OkFkZFJl
c3VsdCBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5hZGQoc2NvcGUsIG51bGxwdHIp
OwotICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQs
ICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLSNlbmRpZgotICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVl
dCwgKm1fbWVkaXVtLCB0aGlzKTsKLSAgICAgICAgaWYgKCFtX3N0eWxlUnVsZVRvQ1NTT01XcmFw
cGVyTWFwLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5
bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIGNzc1NoZWV0KTsKLSAgICB9Ci0gICAgbV9hdXRob3JT
dHlsZS0+c2hyaW5rVG9GaXQoKTsKLSAgICBjb2xsZWN0RmVhdHVyZXMoKTsKLSAgICAKLSAgICBp
ZiAoZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSAmJiBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHls
ZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBk
YXRlKGZvbnRTZWxlY3RvcigpKTsKLX0KLQotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OnNldHVwU2NvcGVTdGFjayhjb25zdCBDb250YWluZXJOb2RlKiBwYXJl
bnQpCi17Ci0gICAgLy8gVGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBzaG91bGRuJ3QgYmUgdXNl
ZCBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgotICAgIEFTU0VSVCghbV9z
Y29wZWRBdXRob3JTdHlsZXMuaXNFbXB0eSgpKTsKLQotICAgIG1fc2NvcGVTdGFjay5zaHJpbmso
MCk7Ci0gICAgZm9yICg7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPckhvc3ROb2Rl
KCkpIHsKLSAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3JTY29wZShwYXJlbnQp
OwotICAgICAgICBpZiAocnVsZVNldCkKLSAgICAgICAgICAgIG1fc2NvcGVTdGFjay5hcHBlbmQo
U2NvcGVTdGFja0ZyYW1lKHBhcmVudCwgcnVsZVNldCkpOwotICAgIH0KLSAgICBtX3Njb3BlU3Rh
Y2sucmV2ZXJzZSgpOwotICAgIG1fc2NvcGVTdGFja1BhcmVudCA9IHBhcmVudDsKLX0KLQotdm9p
ZCBTdHlsZVJlc29sdmVyOjpwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KQotewotICAgIC8vIFNob3J0Y3V0OiBEb24n
dCBib3RoZXIgd2l0aCB0aGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGlmIDxzdHlsZSBzY29wZWQ+
IGlzbid0IHVzZWQgYW55d2hlcmUuCi0gICAgaWYgKG1fc2NvcGVkQXV0aG9yU3R5bGVzLmlzRW1w
dHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fc2NvcGVTdGFja1BhcmVudCk7Ci0gICAgICAgIEFT
U0VSVChtX3Njb3BlU3RhY2suaXNFbXB0eSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBJbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlIHdlIG1heSBnZXQg
aW52b2tlZCBmb3IgcmFuZG9tIGVsZW1lbnRzLgotICAgIC8vIFJlY3JlYXRlIHRoZSB3aG9sZSBz
Y29waW5nIGVsZW1lbnQgc3RhY2sgaW4gc3VjaCBjYXNlcy4KLSAgICBpZiAoIXNjb3BlU3RhY2tJ
c0NvbnNpc3RlbnQoc2NvcGVQYXJlbnQpKSB7Ci0gICAgICAgIHNldHVwU2NvcGVTdGFjayhzY29w
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gT3RoZXJ3aXNlIGp1c3QgcHVzaCB0
aGUgcGFyZW50IG9udG8gdGhlIHN0YWNrLgotICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0
Rm9yU2NvcGUoc2NvcGUpOwotICAgIGlmIChydWxlU2V0KQotICAgICAgICBtX3Njb3BlU3RhY2su
YXBwZW5kKFNjb3BlU3RhY2tGcmFtZShzY29wZSwgcnVsZVNldCkpOwotICAgIG1fc2NvcGVTdGFj
a1BhcmVudCA9IHNjb3BlOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFNjb3BlKGNvbnN0
IENvbnRhaW5lck5vZGUqIHNjb3BlKQotewotICAgIC8vIE9ubHkgYm90aGVyIHRvIHVwZGF0ZSB0
aGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGlmIGl0IGlzIGNvbnNpc3RlbnQuCi0gICAgaWYgKHNj
b3BlU3RhY2tJc0NvbnNpc3RlbnQoc2NvcGUpKSB7Ci0gICAgICAgIG1fc2NvcGVTdGFjay5yZW1v
dmVMYXN0KCk7Ci0gICAgICAgIG1fc2NvcGVTdGFja1BhcmVudCA9IHNjb3BlLT5wYXJlbnRPckhv
c3ROb2RlKCk7Ci0gICAgfQotfQotI2VuZGlmCi0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFBh
cmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQotewotICAgIGNvbnN0IENvbnRhaW5lck5vZGUq
IHBhcmVudHNQYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1lbnQoKTsKLQotICAgIC8v
IFdlIGFyZSBub3QgYWx3YXlzIGludm9rZWQgY29uc2lzdGVudGx5LiBGb3IgZXhhbXBsZSwgc2Ny
aXB0IGV4ZWN1dGlvbiBjYW4gY2F1c2UgdXMgdG8gZW50ZXIKLSAgICAvLyBzdHlsZSByZWNhbGMg
aW4gdGhlIG1pZGRsZSBvZiB0cmVlIGJ1aWxkaW5nLiBXZSBtYXkgYWxzbyBiZSBpbnZva2VkIGZy
b20gc29tZXdoZXJlIHdpdGhpbiB0aGUgdHJlZS4KLSAgICAvLyBSZXNldCB0aGUgc3RhY2sgaW4g
dGhpcyBjYXNlLCBvciBpZiB3ZSBzZWUgYSBuZXcgcm9vdCBlbGVtZW50LgotICAgIC8vIE90aGVy
d2lzZSBqdXN0IHB1c2ggdGhlIG5ldyBwYXJlbnQuCi0gICAgaWYgKCFwYXJlbnRzUGFyZW50IHx8
IG1fY2hlY2tlci5wYXJlbnRTdGFja0lzRW1wdHkoKSkKLSAgICAgICAgbV9jaGVja2VyLnNldHVw
UGFyZW50U3RhY2socGFyZW50KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2hlY2tlci5wdXNoUGFy
ZW50KHBhcmVudCk7Ci0KLSAgICAvLyBOb3RlOiBXZSBtdXN0bid0IHNraXAgU2hhZG93Um9vdCBu
b2RlcyBmb3IgdGhlIHNjb3BlIHN0YWNrLgotICAgIHB1c2hTY29wZShwYXJlbnQsIHBhcmVudC0+
cGFyZW50T3JIb3N0Tm9kZSgpKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRF
bGVtZW50KEVsZW1lbnQqIHBhcmVudCkKLXsKLSAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGdldCBp
bnZva2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmlu
ZyBzdHlsZSByZXNvbHZlLgotICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0
aGlzIGNhc2UuCi0gICAgaWYgKG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJl
bnQpKQotICAgICAgICBtX2NoZWNrZXIucG9wUGFyZW50KCk7Ci0gICAgcG9wU2NvcGUocGFyZW50
KTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBT
aGFkb3dSb290KiBzaGFkb3dSb290KQotewotICAgIEFTU0VSVChzaGFkb3dSb290LT5ob3N0KCkp
OwotICAgIHB1c2hTY29wZShzaGFkb3dSb290LCBzaGFkb3dSb290LT5ob3N0KCkpOwotfQotCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCog
c2hhZG93Um9vdCkKLXsKLSAgICBBU1NFUlQoc2hhZG93Um9vdC0+aG9zdCgpKTsKLSAgICBwb3BT
Y29wZShzaGFkb3dSb290KTsKLX0KLQotLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgc3R5bGUgc2V0
dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFk
ZEtleWZyYW1lU3R5bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+IHJ1bGUpCi17Ci0g
ICAgQXRvbWljU3RyaW5nIHMocnVsZS0+bmFtZSgpKTsKLSAgICBtX2tleWZyYW1lc1J1bGVNYXAu
c2V0KHMuaW1wbCgpLCBydWxlKTsKLX0KLQotU3R5bGVSZXNvbHZlcjo6flN0eWxlUmVzb2x2ZXIo
KQotewotICAgIG1fZm9udFNlbGVjdG9yLT5jbGVhckRvY3VtZW50KCk7Ci19Ci0KLXZvaWQgU3R5
bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKCkKLXsKLSAgICAvLyBMb29r
IGZvciBjYWNoZSBlbnRyaWVzIGNvbnRhaW5pbmcgYSBzdHlsZSBkZWNsYXJhdGlvbiB3aXRoIGEg
c2luZ2xlIHJlZiBhbmQgcmVtb3ZlIHRoZW0uCi0gICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4g
YW4gZWxlbWVudCBhdHRyaWJ1dGUgbXV0YXRpb24gY2F1c2VzIGl0IHRvIHN3YXAgb3V0IGl0cyBB
dHRyaWJ1dGU6OmRlY2woKQotICAgIC8vIGZvciBhbm90aGVyIENTU01hcHBlZEF0dHJpYnV0ZURl
Y2xhcmF0aW9uLCBwb3RlbnRpYWxseSBsZWF2aW5nIHRoaXMgY2FjaGUgd2l0aCB0aGUgbGFzdCBy
ZWYuCi0gICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gdG9SZW1vdmU7Ci0gICAgTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4o
KTsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBlbmQgPSBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUuZW5kKCk7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT5z
ZWNvbmQubWF0Y2hlZFByb3BlcnRpZXM7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaGVk
UHJvcGVydGllc1tpXS5wcm9wZXJ0aWVzLT5oYXNPbmVSZWYoKSkgewotICAgICAgICAgICAgICAg
IHRvUmVtb3ZlLmFwcGVuZChpdC0+Zmlyc3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dG9SZW1vdmUuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5y
ZW1vdmUodG9SZW1vdmVbaV0pOwotfQotCi1TdHlsZVJlc29sdmVyOjpGZWF0dXJlczo6RmVhdHVy
ZXMoKQotICAgIDogdXNlc0ZpcnN0TGluZVJ1bGVzKGZhbHNlKQotICAgICwgdXNlc0JlZm9yZUFm
dGVyUnVsZXMoZmFsc2UpCi0gICAgLCB1c2VzTGlua1J1bGVzKGZhbHNlKQotewotfQotCi1TdHls
ZVJlc29sdmVyOjpGZWF0dXJlczo6fkZlYXR1cmVzKCkKLXsKLX0KLSAgICAKLXZvaWQgU3R5bGVS
ZXNvbHZlcjo6RmVhdHVyZXM6OmFkZChjb25zdCBTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgb3Ro
ZXIpCi17Ci0gICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGVuZCA9IG90
aGVyLmlkc0luUnVsZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
Pjo6aXRlcmF0b3IgaXQgPSBvdGhlci5pZHNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgaWRzSW5SdWxlcy5hZGQoKml0KTsKLSAgICBlbmQgPSBvdGhlci5hdHRyc0lu
UnVsZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0
b3IgaXQgPSBvdGhlci5hdHRyc0luUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBhdHRyc0luUnVsZXMuYWRkKCppdCk7Ci0gICAgc2libGluZ1J1bGVzLmFwcGVuZChvdGhl
ci5zaWJsaW5nUnVsZXMpOwotICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXMuYXBwZW5kKG90aGVy
LnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOwotICAgIHVzZXNGaXJzdExpbmVSdWxlcyA9IHVzZXNG
aXJzdExpbmVSdWxlcyB8fCBvdGhlci51c2VzRmlyc3RMaW5lUnVsZXM7Ci0gICAgdXNlc0JlZm9y
ZUFmdGVyUnVsZXMgPSB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyB8fCBvdGhlci51c2VzQmVmb3JlQWZ0
ZXJSdWxlczsKLSAgICB1c2VzTGlua1J1bGVzID0gdXNlc0xpbmtSdWxlcyB8fCBvdGhlci51c2Vz
TGlua1J1bGVzOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjpjbGVhcigpCi17
Ci0gICAgaWRzSW5SdWxlcy5jbGVhcigpOwotICAgIGF0dHJzSW5SdWxlcy5jbGVhcigpOwotICAg
IHNpYmxpbmdSdWxlcy5jbGVhcigpOwotICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXMuY2xlYXIo
KTsKLSAgICB1c2VzRmlyc3RMaW5lUnVsZXMgPSBmYWxzZTsKLSAgICB1c2VzQmVmb3JlQWZ0ZXJS
dWxlcyA9IGZhbHNlOwotICAgIHVzZXNMaW5rUnVsZXMgPSBmYWxzZTsKLX0KLQotc3RhdGljIFN0
eWxlU2hlZXRJbnRlcm5hbCogcGFyc2VVQVNoZWV0KGNvbnN0IFN0cmluZyYgc3RyKQotewotICAg
IFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSgp
LmxlYWtSZWYoKTsgLy8gbGVhayB0aGUgc2hlZXQgb24gcHVycG9zZQotICAgIHNoZWV0LT5wYXJz
ZVN0cmluZyhzdHIpOwotICAgIHJldHVybiBzaGVldDsKLX0KLQotc3RhdGljIFN0eWxlU2hlZXRJ
bnRlcm5hbCogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHNp
emUpCi17Ci0gICAgcmV0dXJuIHBhcnNlVUFTaGVldChTdHJpbmcoY2hhcmFjdGVycywgc2l6ZSkp
OwotfQotCi1zdGF0aWMgdm9pZCBsb2FkRnVsbERlZmF1bHRTdHlsZSgpCi17Ci0gICAgaWYgKHNp
bXBsZURlZmF1bHRTdHlsZVNoZWV0KSB7Ci0gICAgICAgIEFTU0VSVChkZWZhdWx0U3R5bGUpOwot
ICAgICAgICBBU1NFUlQoZGVmYXVsdFByaW50U3R5bGUgPT0gZGVmYXVsdFN0eWxlKTsKLSAgICAg
ICAgZGVsZXRlIGRlZmF1bHRTdHlsZTsKLSAgICAgICAgc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQt
PmRlcmVmKCk7Ci0gICAgICAgIGRlZmF1bHRTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQ
dHIoKTsKLSAgICAgICAgZGVmYXVsdFByaW50U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFr
UHRyKCk7Ci0gICAgICAgIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0ID0gMDsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBBU1NFUlQoIWRlZmF1bHRTdHlsZSk7Ci0gICAgICAgIGRlZmF1bHRTdHlsZSA9
IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKLSAgICAgICAgZGVmYXVsdFByaW50U3R5bGUg
PSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7Ci0gICAgICAgIGRlZmF1bHRRdWlya3NTdHls
ZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKLSAgICB9Ci0KLSAgICAvLyBTdHJpY3Qt
bW9kZSBydWxlcy4KLSAgICBTdHJpbmcgZGVmYXVsdFJ1bGVzID0gU3RyaW5nKGh0bWxVc2VyQWdl
bnRTdHlsZVNoZWV0LCBzaXplb2YoaHRtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRo
ZW1lOjpkZWZhdWx0VGhlbWUoKS0+ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOwotICAgIGRlZmF1
bHRTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KGRlZmF1bHRSdWxlcyk7Ci0gICAgZGVmYXVsdFN0
eWxlLT5hZGRSdWxlc0Zyb21TaGVldChkZWZhdWx0U3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsK
LSAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZGVmYXVsdFN0eWxlU2hl
ZXQsIHByaW50RXZhbCgpKTsKLQotICAgIC8vIFF1aXJrcy1tb2RlIHJ1bGVzLgotICAgIFN0cmlu
ZyBxdWlya3NSdWxlcyA9IFN0cmluZyhxdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yo
cXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LT5leHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKLSAgICBxdWlya3NTdHlsZVNoZWV0ID0gcGFyc2VV
QVNoZWV0KHF1aXJrc1J1bGVzKTsKLSAgICBkZWZhdWx0UXVpcmtzU3R5bGUtPmFkZFJ1bGVzRnJv
bVNoZWV0KHF1aXJrc1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGxvYWRTaW1wbGVEZWZhdWx0U3R5bGUoKQotewotICAgIEFTU0VSVCghZGVmYXVsdFN0eWxlKTsK
LSAgICBBU1NFUlQoIXNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KTsKLQotICAgIGRlZmF1bHRTdHls
ZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKLSAgICAvLyBUaGVyZSBhcmUgbm8gbWVk
aWEtc3BlY2lmaWMgcnVsZXMgaW4gdGhlIHNpbXBsZSBkZWZhdWx0IHN0eWxlLgotICAgIGRlZmF1
bHRQcmludFN0eWxlID0gZGVmYXVsdFN0eWxlOwotICAgIGRlZmF1bHRRdWlya3NTdHlsZSA9IFJ1
bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKLQotICAgIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0
ID0gcGFyc2VVQVNoZWV0KHNpbXBsZVVzZXJBZ2VudFN0eWxlU2hlZXQsIHN0cmxlbihzaW1wbGVV
c2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci0gICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVl
dChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKLQotICAgIC8vIE5vIG5l
ZWQgdG8gaW5pdGlhbGl6ZSBxdWlya3Mgc2hlZXQgeWV0IGFzIHRoZXJlIGFyZSBubyBxdWlyayBy
dWxlcyBmb3IgZWxlbWVudHMgYWxsb3dlZCBpbiBzaW1wbGUgZGVmYXVsdCBzdHlsZS4KLX0KLQot
c3RhdGljIHZvaWQgbG9hZFZpZXdTb3VyY2VTdHlsZSgpCi17Ci0gICAgQVNTRVJUKCFkZWZhdWx0
Vmlld1NvdXJjZVN0eWxlKTsKLSAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlID0gUnVsZVNldDo6
Y3JlYXRlKCkubGVha1B0cigpOwotICAgIGRlZmF1bHRWaWV3U291cmNlU3R5bGUtPmFkZFJ1bGVz
RnJvbVNoZWV0KHBhcnNlVUFTaGVldChzb3VyY2VVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yo
c291cmNlVXNlckFnZW50U3R5bGVTaGVldCkpLCBzY3JlZW5FdmFsKCkpOwotfQotCi1zdGF0aWMg
dm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQp
Ci17Ci0gICAgaWYgKHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0ICYmICFlbGVtZW50Q2FuVXNlU2lt
cGxlRGVmYXVsdFN0eWxlKGVsZW1lbnQpKQotICAgICAgICBsb2FkRnVsbERlZmF1bHRTdHlsZSgp
OwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYg
IXN2Z1N0eWxlU2hlZXQpIHsKLSAgICAgICAgLy8gU1ZHIHJ1bGVzLgotICAgICAgICBzdmdTdHls
ZVNoZWV0ID0gcGFyc2VVQVNoZWV0KHN2Z1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihzdmdV
c2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci0gICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9t
U2hlZXQoc3ZnU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKLSAgICAgICAgZGVmYXVsdFByaW50
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN2Z1N0eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKLSAg
ICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShNQVRITUwpCi0gICAgaWYgKGVsZW1lbnQtPmlzTWF0
aE1MRWxlbWVudCgpICYmICFtYXRoTUxTdHlsZVNoZWV0KSB7Ci0gICAgICAgIC8vIE1hdGhNTCBy
dWxlcy4KLSAgICAgICAgbWF0aE1MU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChtYXRobWxVc2Vy
QWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWF0aG1sVXNlckFnZW50U3R5bGVTaGVldCkpOwotICAg
ICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1hdGhNTFN0eWxlU2hlZXQsIHNj
cmVlbkV2YWwoKSk7Ci0gICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVl
dChtYXRoTUxTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoVklERU8pCi0gICAgaWYgKCFtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCAmJiAoZWxlbWVu
dC0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhdWRpb1RhZykp
KSB7Ci0gICAgICAgIFN0cmluZyBtZWRpYVJ1bGVzID0gU3RyaW5nKG1lZGlhQ29udHJvbHNVc2Vy
QWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1VzZXJBZ2VudFN0eWxlU2hlZXQp
KSArIFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgp
KS0+ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOwotICAgICAgICBtZWRpYUNvbnRyb2xz
U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChtZWRpYVJ1bGVzKTsKLSAgICAgICAgZGVmYXVsdFN0
eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCwgc2NyZWVuRXZh
bCgpKTsKLSAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1lZGlh
Q29udHJvbHNTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKCFmdWxsc2NyZWVuU3R5bGVTaGVldCAmJiBl
bGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3JlZW4oKSkgewotICAgICAgICBTdHJp
bmcgZnVsbHNjcmVlblJ1bGVzID0gU3RyaW5nKGZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0
LCBzaXplb2YoZnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpk
ZWZhdWx0VGhlbWUoKS0+ZXh0cmFGdWxsU2NyZWVuU3R5bGVTaGVldCgpOwotICAgICAgICBmdWxs
c2NyZWVuU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChmdWxsc2NyZWVuUnVsZXMpOwotICAgICAg
ICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGZ1bGxzY3JlZW5TdHlsZVNoZWV0LCBz
Y3JlZW5FdmFsKCkpOwotICAgICAgICBkZWZhdWx0UXVpcmtzU3R5bGUtPmFkZFJ1bGVzRnJvbVNo
ZWV0KGZ1bGxzY3JlZW5TdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgQVNTRVJUKGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmlzRW1wdHko
KSk7Ci0gICAgQVNTRVJUKG1hdGhNTFN0eWxlU2hlZXQgfHwgZGVmYXVsdFN0eWxlLT5mZWF0dXJl
cygpLnNpYmxpbmdSdWxlcy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFk
ZE1hdGNoZWRQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgU3R5bGVQcm9wZXJ0
eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBl
LCBib29sIGluUmVnaW9uUnVsZSkKLXsKLSAgICBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5ncm93KG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSArIDEpOwotICAgIE1h
dGNoZWRQcm9wZXJ0aWVzJiBuZXdQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXMubGFzdCgpOwotICAgIG5ld1Byb3BlcnRpZXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7
Ci0gICAgbmV3UHJvcGVydGllcy5saW5rTWF0Y2hUeXBlID0gbGlua01hdGNoVHlwZTsKLSAgICBu
ZXdQcm9wZXJ0aWVzLmlzSW5SZWdpb25SdWxlID0gaW5SZWdpb25SdWxlOwotICAgIG1hdGNoUmVz
dWx0Lm1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7Ci19Ci0KLWlubGluZSB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgU3R5
bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIGJvb2wgaXNDYWNoZWFibGUpCi17Ci0gICAgaWYg
KCFwcm9wZXJ0eVNldCkKLSAgICAgICAgcmV0dXJuOwotICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1
dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOwotICAgIGlmIChyZXN1
bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9PSAtMSkKLSAgICAgICAgcmVzdWx0LnJhbmdlcy5m
aXJzdEF1dGhvclJ1bGUgPSByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlOwotICAgIGFkZE1h
dGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgcHJvcGVydHlTZXQpOwotICAgIGlmICghaXNDYWNoZWFi
bGUpCi0gICAgICAgIHJlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOwotfQotCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0
UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBBU1NFUlQocnVsZXMpOwotICAgIEFTU0VSVChtX2VsZW1lbnQpOwotCi0gICAg
Ly8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNsYXNzLCB0YWcsIGFuZCBl
dmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKLSAgICAvLyB0aGVuIHNvcnQgdGhlIGJ1
ZmZlci4KLSAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQotICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QocnVsZXMtPmlkUnVsZXMobV9lbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1
dGlvbigpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsK
LSAgICBpZiAobV9lbGVtZW50LT5oYXNDbGFzcygpKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0eWxl
ZEVsZW1lbnQpOwotICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzID0g
bV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCk7Ci0gICAgICAgIHNpemVfdCBzaXplID0gY2xh
c3NOYW1lcy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5jbGFzc1J1
bGVzKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IG9wdGlvbnMpOwotICAgIH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gbV9l
bGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOwotICAgIGlmICghcHNldWRvSWQuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIEFTU0VSVChtX3N0eWxlZEVsZW1lbnQpOwotICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QocnVsZXMtPnNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhwc2V1ZG9JZC5p
bXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7Ci0gICAgfQot
ICAgIGlmIChtX2VsZW1lbnQtPmlzTGluaygpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QocnVsZXMtPmxpbmtQc2V1ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4LCBvcHRpb25zKTsKLSAgICBpZiAobV9jaGVja2VyLm1hdGNoZXNGb2N1c1Bz
ZXVkb0NsYXNzKG1fZWxlbWVudCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlz
dChydWxlcy0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVs
ZUluZGV4LCBvcHRpb25zKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMt
PnRhZ1J1bGVzKG1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgs
IGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlz
dChydWxlcy0+dW5pdmVyc2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IG9wdGlvbnMpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yUmVnaW9uKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RS
dWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIW1fcmVn
aW9uRm9yU3R5bGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IHJ1
bGVzLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIENTU1NlbGVjdG9yKiByZWdpb25T
ZWxlY3RvciA9IHJ1bGVzLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVj
dG9yOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3Rvciwgc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVnaW9uRm9yU3R5bGluZy0+bm9kZSgpKSkpIHsKLSAgICAg
ICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gcnVsZXMtPm1fcmVnaW9uU2VsZWN0b3JzQW5k
UnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChyZWdpb25S
dWxlcyk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhyZWdpb25SdWxlcywgZmly
c3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0KQotewotICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLQotICAgIGlmIChtX2No
ZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkpIHsKLSAgICAgICAgaWYgKCFtX3J1bGVMaXN0
KQotICAgICAgICAgICAgbV9ydWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsg
KytpKQotICAgICAgICAgICAgbV9ydWxlTGlzdC0+cnVsZXMoKS5hcHBlbmQobV9tYXRjaGVkUnVs
ZXNbaV0tPnJ1bGUoKS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVy
IHRvIG91ciBsaXN0IG9mIGRlY2xhcmF0aW9ucy4KLSAgICAvLyBGSVhNRTogVGhpcyBzdWNrcywg
dGhlIGluc3BlY3RvciBzaG91bGQgZ2V0IHRoZSBzdHlsZSBmcm9tIHRoZSB2aXNpdGVkIHN0eWxl
IGl0c2VsZi4KLSAgICBib29sIHN3YXBWaXNpdGVkVW52aXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKG1fZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVk
b1Zpc2l0ZWQpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5z
aXplKCk7IGkrKykgewotICAgICAgICBpZiAobV9zdHlsZSAmJiBtX21hdGNoZWRSdWxlc1tpXS0+
Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICBtX3N0eWxl
LT5zZXRBZmZlY3RlZEJ5VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcnMoKTsKLSAgICAgICAgdW5z
aWduZWQgbGlua01hdGNoVHlwZSA9IG1fbWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCk7
Ci0gICAgICAgIGlmIChzd2FwVmlzaXRlZFVudmlzaXRlZCAmJiBsaW5rTWF0Y2hUeXBlICYmIGxp
bmtNYXRjaFR5cGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCkKLSAgICAgICAgICAgIGxp
bmtNYXRjaFR5cGUgPSAobGlua01hdGNoVHlwZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlz
aXRlZCkgPyBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayA6IFNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hWaXNpdGVkOwotICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIG1fbWF0Y2hl
ZFJ1bGVzW2ldLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUo
KSwgbGlua01hdGNoVHlwZSwgbV9tYXRjaGVkUnVsZXNbaV0tPmlzSW5SZWdpb25SdWxlKCkpOwot
ICAgIH0KLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1h
dGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCi17Ci0jaWYgRU5BQkxF
KFNUWUxFX1NDT1BFRCkKLSAgICBpZiAobV9zY29wZWRBdXRob3JTdHlsZXMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlS
dWxlcyk7Ci0KLSAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcg
dGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNpc3Rl
bnQpLgotICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fZWxlbWVudC0+cGFyZW50
T3JIb3N0Tm9kZSgpOwotICAgIGlmICghc2NvcGVTdGFja0lzQ29uc2lzdGVudChwYXJlbnQpKQot
ICAgICAgICBzZXR1cFNjb3BlU3RhY2socGFyZW50KTsKLSAgICBmb3IgKHNpemVfdCBpID0gbV9z
Y29wZVN0YWNrLnNpemUoKTsgaTsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IFNjb3BlU3RhY2tGcmFt
ZSYgZnJhbWUgPSBtX3Njb3BlU3RhY2tbaSAtIDFdOwotICAgICAgICBvcHRpb25zLnNjb3BlID0g
ZnJhbWUubV9zY29wZTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9ydWxl
U2V0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0
aG9yUnVsZSwgb3B0aW9ucyk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9u
KGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOwotICAgIH0KLSAgICAvLyBBbHNvIGluY2x1
ZGUgdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZv
clNjb3BlKG1fZWxlbWVudCk7Ci0gICAgaWYgKHJ1bGVTZXQpIHsKLSAgICAgICAgb3B0aW9ucy5z
Y29wZSA9IG1fZWxlbWVudDsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMocnVsZVNldCwg
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIG9wdGlvbnMpOwotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihydWxl
U2V0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0
aG9yUnVsZSwgb3B0aW9ucyk7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVzdWx0
KTsKLSAgICBVTlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOwotI2VuZGlmCi19Ci0KLXZv
aWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKQotewotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7Ci0g
ICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxOwotCi0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMuCi0gICAgTWF0Y2hPcHRpb25zIG9wdGlv
bnMoaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1fYXV0aG9y
U3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2Vz
Lmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJl
Z2lvbihtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwg
cmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7Ci0KLSAgICBtYXRjaFNjb3Bl
ZEF1dGhvclJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOwotCi0gICAgc29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0
Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykK
LXsKLSAgICBpZiAoIW1fdXNlclN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9t
YXRjaGVkUnVsZXMuY2xlYXIoKTsKLQotICAgIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlID0g
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7Ci0gICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgcmVz
dWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX3VzZXJTdHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5m
aXJzdFVzZXJSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgaW5jbHVkZUVtcHR5UnVs
ZXMpOwotCi0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7Ci19Ci0KLXZv
aWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVT
ZXQqIHJ1bGVzKQotewotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7Ci0gICAgCi0gICAgcmVz
dWx0LnJhbmdlcy5sYXN0VUFSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAt
IDE7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMocnVsZXMsIHJlc3VsdC5yYW5nZXMuZmlyc3RV
QVJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgZmFsc2UpOwotCi0gICAgc29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7Ci19Ci0KLWNsYXNzIE1hdGNoaW5nVUFSdWxlc1Nj
b3BlIHsKLXB1YmxpYzoKLSAgICBNYXRjaGluZ1VBUnVsZXNTY29wZSgpOwotICAgIH5NYXRjaGlu
Z1VBUnVsZXNTY29wZSgpOwotCi0gICAgc3RhdGljIGJvb2wgaXNNYXRjaGluZ1VBUnVsZXMoKTsK
LQotcHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBtX21hdGNoaW5nVUFSdWxlczsKLX07Ci0KLU1h
dGNoaW5nVUFSdWxlc1Njb3BlOjpNYXRjaGluZ1VBUnVsZXNTY29wZSgpCi17Ci0gICAgQVNTRVJU
KCFtX21hdGNoaW5nVUFSdWxlcyk7Ci0gICAgbV9tYXRjaGluZ1VBUnVsZXMgPSB0cnVlOwotfQot
Ci1NYXRjaGluZ1VBUnVsZXNTY29wZTo6fk1hdGNoaW5nVUFSdWxlc1Njb3BlKCkKLXsKLSAgICBt
X21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwotfQotCi1pbmxpbmUgYm9vbCBNYXRjaGluZ1VBUnVs
ZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQotewotICAgIHJldHVybiBtX21hdGNoaW5nVUFS
dWxlczsKLX0KLQotYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMg
PSBmYWxzZTsKLQotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlm
ICghcnVsZXMpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1heSBl
bmQgdXAgbG9va2luZyB1cCBzdHlsZSBmb3IgcmFuZG9tIGVsZW1lbnRzIGluIHRoZSBtaWRkbGUg
b2YgYSByZWN1cnNpdmUgdHJlZSByZXNvbHZlLgotICAgIC8vIEFuY2VzdG9yIGlkZW50aWZpZXIg
ZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRhdGUgaW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2Ug
dGhlIGZhc3QgcGF0aC4KLSAgICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX2NoZWNrZXIucGFy
ZW50U3RhY2tJc0NvbnNpc3RlbnQobV9wYXJlbnROb2RlKTsKLQotICAgIHVuc2lnbmVkIHNpemUg
PSBydWxlcy0+c2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVsZXMtPmF0KGkpOwotICAg
ICAgICBpZiAoY2FuVXNlRmFzdFJlamVjdCAmJiBtX2NoZWNrZXIuZmFzdFJlamVjdFNlbGVjdG9y
PFJ1bGVEYXRhOjptYXhpbXVtSWRlbnRpZmllckNvdW50PihydWxlRGF0YS5kZXNjZW5kYW50U2Vs
ZWN0b3JJZGVudGlmaWVySGFzaGVzKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwotICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsTWF0Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUpOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
Ci0gICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhLCBvcHRpb25zLnNjb3BlKSkgewot
I2Vsc2UKLSAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEpKSB7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHJ1bGUgaXMgYXBwbGljYWJsZSBpbiB0aGUg
Y3VycmVudCB0cmVlIHNjb3BlLiBDcml0ZXJpYSBmb3IgdGhpczoKLSAgICAgICAgICAgIC8vIGEp
IGl0J3MgYSBVQSBydWxlCi0gICAgICAgICAgICAvLyBiKSB0aGUgdHJlZSBzY29wZSBhbGxvd3Mg
YXV0aG9yIHJ1bGVzCi0gICAgICAgICAgICAvLyBjKSB0aGUgcnVsZXMgY29tZXMgZnJvbSBhIHNj
b3BlZCBzdHlsZSBzaGVldCB3aXRoaW4gdGhlIHNhbWUgdHJlZSBzY29wZQotICAgICAgICAgICAg
Ly8gZCkgdGhlIHJ1bGUgY29udGFpbnMgc2hhZG93LUlEIHBzZXVkbyBlbGVtZW50cwotICAgICAg
ICAgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpOwotICAg
ICAgICAgICAgaWYgKCFNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQot
ICAgICAgICAgICAgICAgICYmICF0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU2hlZXRzKCkKLSNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICAgICAgICAgICAgICYmICghb3B0aW9ucy5zY29wZSB8
fCBvcHRpb25zLnNjb3BlLT50cmVlU2NvcGUoKSAhPSB0cmVlU2NvcGUpCi0jZW5kaWYKLSAgICAg
ICAgICAgICAgICAmJiAhbV9jaGVja2VyLmhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpKSB7Ci0K
LSAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShj
b29raWUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0
aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCi0gICAgICAgICAgICBTdHlsZVBy
b3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOwotICAgICAgICAgICAg
aWYgKCFwcm9wZXJ0aWVzIHx8IChwcm9wZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIW9wdGlvbnMuaW5j
bHVkZUVtcHR5UnVsZXMpKSB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBGSVhNRTogRXhwb3NpbmcgdGhlIG5v
bi1zdGFuZGFyZCBnZXRNYXRjaGVkQ1NTUnVsZXMgQVBJIHRvIHdlYiBpcyB0aGUgb25seSByZWFz
b24gdGhpcyBpcyBuZWVkZWQuCi0gICAgICAgICAgICBpZiAobV9zYW1lT3JpZ2luT25seSAmJiAh
cnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7Ci0gICAgICAgICAgICAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJ
ZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVkbyBiaXQgaWYKLSAgICAg
ICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVudC4KLSAgICAg
ICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgbV9jaGVja2VyLnBzZXVk
b1N0eWxlKCkgPT0gTk9QU0VVRE8pIHsKLSAgICAgICAgICAgICAgICBpZiAobV9jaGVja2VyLmlz
Q29sbGVjdGluZ1J1bGVzT25seSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQotICAgICAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShtX2R5bmFtaWNQc2V1ZG8pOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBVcGRhdGUgb3VyIGZpcnN0L2xh
c3QgcnVsZSBpbmRpY2VzIGluIHRoZSBtYXRjaGVkIHJ1bGVzIGFycmF5LgotICAgICAgICAgICAg
ICAgICsrbGFzdFJ1bGVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RSdWxlSW5kZXgg
PT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0UnVsZUluZGV4ID0gbGFzdFJ1bGVJbmRl
eDsKLQotICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIHJ1bGUgdG8gb3VyIGxpc3Qgb2YgbWF0
Y2hlZCBydWxlcy4KLSAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEpOwot
ICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNv
b2tpZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUo
Y29va2llLCBmYWxzZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVJ1
bGVzKGNvbnN0IFJ1bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIyKQotewotICAgIHVuc2ln
bmVkIHNwZWNpZmljaXR5MSA9IHIxLT5zcGVjaWZpY2l0eSgpOwotICAgIHVuc2lnbmVkIHNwZWNp
ZmljaXR5MiA9IHIyLT5zcGVjaWZpY2l0eSgpOwotICAgIHJldHVybiAoc3BlY2lmaWNpdHkxID09
IHNwZWNpZmljaXR5MikgPyByMS0+cG9zaXRpb24oKSA8IHIyLT5wb3NpdGlvbigpIDogc3BlY2lm
aWNpdHkxIDwgc3BlY2lmaWNpdHkyOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRNYXRj
aGVkUnVsZXMoKQotewotICAgIHN0ZDo6c29ydChtX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21h
dGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCi17Ci0gICAgbWF0Y2hVQVJ1bGVz
KHJlc3VsdCk7Ci0KLSAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KLSAgICBp
ZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgIG1hdGNoVXNlclJ1bGVzKHJl
c3VsdCwgZmFsc2UpOwotICAgICAgICAKLSAgICAvLyBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBi
ZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzIG1hcHBlZCBmcm9t
IEhUTUwuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudCkgewotICAgICAgICBhZGRFbGVtZW50U3R5
bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpKTsK
LQotICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRpb25z
LgotICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9uYWwg
bWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKLSAgICAgICAgLy8gYWZ0ZXIgYWxsIGF0
dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMg
b2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGll
cyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlKCkpOwot
Ci0gICAgICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAg
ICAgICAgYm9vbCBpc0F1dG87Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rp
b24gPSB0b0hUTUxFbGVtZW50KG1fc3R5bGVkRWxlbWVudCktPmRpcmVjdGlvbmFsaXR5SWZoYXNE
aXJBdXRvQXR0cmlidXRlKGlzQXV0byk7Ci0gICAgICAgICAgICBpZiAoaXNBdXRvKQotICAgICAg
ICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlvbiA9PSBM
VFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkp
OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRo
b3Igc2hlZXRzIG5leHQuCi0gICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAg
ICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwotCi0gICAgLy8gTm93IGNoZWNr
IG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHls
ZSgpKSB7Ci0gICAgICAgIC8vIElubGluZSBzdHlsZSBpcyBpbW11dGFibGUgYXMgbG9uZyBhcyB0
aGVyZSBpcyBubyBDU1NPTSB3cmFwcGVyLgotICAgICAgICAvLyBGSVhNRTogTWVkaWEgY29udHJv
bCBzaGFkb3cgdHJlZXMgc2VlbSB0byBoYXZlIHByb2JsZW1zIHdpdGggY2FjaGluZy4KLSAgICAg
ICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3R5bGVkRWxlbWVudC0+aW5saW5l
U3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIW1fc3R5bGVkRWxlbWVudC0+aXNJblNoYWRvd1RyZWUo
KTsKLSAgICAgICAgLy8gRklYTUU6IENvbnN0aWZ5LgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKHJlc3VsdCwgY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4obV9zdHlsZWRF
bGVtZW50LT5pbmxpbmVTdHlsZSgpKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7Ci0gICAgfQot
Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAvLyBOb3cgY2hlY2sgU01JTCBhbmltYXRpb24gb3ZlcnJp
ZGUgc3R5bGUuCi0gICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVk
RWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICBhZGRF
bGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1f
c3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLCBmYWxzZSAvKiBp
c0NhY2hlYWJsZSAqLyk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6
aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKLXsKLSAgICBpZiAobV9lbGVtZW50ICE9IGUpIHsKLSAg
ICAgICAgbV9lbGVtZW50ID0gZTsKLSAgICAgICAgbV9zdHlsZWRFbGVtZW50ID0gbV9lbGVtZW50
ICYmIG1fZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVt
ZW50Kj4obV9lbGVtZW50KSA6IDA7Ci0gICAgICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IG1fY2hl
Y2tlci5kZXRlcm1pbmVMaW5rU3RhdGUobV9lbGVtZW50KTsKLSAgICAgICAgaWYgKGUgJiYgZSA9
PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgZS0+ZG9j
dW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwotICAgICAg
ICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudChm
YWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
LCBQc2V1ZG9JZCBwc2V1ZG9JRCkKLXsKLSAgICBtX2NoZWNrZXIuc2V0UHNldWRvU3R5bGUocHNl
dWRvSUQpOwotCi0gICAgbV9wYXJlbnROb2RlID0gZSA/IGUtPnBhcmVudE5vZGVGb3JSZW5kZXJp
bmdBbmRTdHlsZSgpIDogMDsKLQotICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgbV9wYXJl
bnRTdHlsZSA9IHBhcmVudFN0eWxlOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9
IG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7Ci0KLSAgICBO
b2RlKiBkb2NFbGVtZW50ID0gZSA/IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpIDog
MDsKLSAgICBSZW5kZXJTdHlsZSogZG9jU3R5bGUgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+cmVu
ZGVyU3R5bGUoKTsKLSAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBkb2NFbGVtZW50ICYmIGUgIT0g
ZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZTsKLQotICAg
IG1fc3R5bGUgPSAwOwotCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7Ci0K
LSAgICBtX3J1bGVMaXN0ID0gMDsKLQotICAgIG1fZm9udERpcnR5ID0gZmFsc2U7Ci19Ci0KLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsKLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCA9IDEwOwotCi1Ob2RlKiBT
dHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQm
IHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0Ci17Ci0gICAgaWYgKHZpc2l0ZWROb2RlQ291bnQgPj0g
Y1N0eWxlU2VhcmNoVGhyZXNob2xkICogY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzU3R5bGVkRWxlbWVu
dCgpKQotICAgICAgICByZXR1cm4gMDsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGlm
IChwYXJlbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCi0gICAgICAgIHJldHVybiAwOwot
I2VuZGlmCi0gICAgU3R5bGVkRWxlbWVudCogcCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
PihwYXJlbnQpOwotICAgIGlmIChwLT5pbmxpbmVTdHlsZSgpKQotICAgICAgICByZXR1cm4gMDsK
LSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChwLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4ocCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQotICAgICAg
ICByZXR1cm4gMDsKLSNlbmRpZgotICAgIGlmIChwLT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRz
SW5SdWxlcy5jb250YWlucyhwLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gcC0+cmVuZGVy
U3R5bGUoKTsKLSAgICB1bnNpZ25lZCBzdWJjb3VudCA9IDA7Ci0gICAgTm9kZSogdGhpc0NvdXNp
biA9IHA7Ci0gICAgTm9kZSogY3VycmVudE5vZGUgPSBwLT5wcmV2aW91c1NpYmxpbmcoKTsKLQot
ICAgIC8vIFJlc2VydmUgdGhlIHRyaWVzIGZvciB0aGlzIGxldmVsLiBUaGlzIGVmZmVjdGl2ZWx5
IG1ha2VzIHN1cmUgdGhhdCB0aGUgYWxnb3JpdGhtCi0gICAgLy8gd2lsbCBuZXZlciBnbyBkZWVw
ZXIgdGhhbiBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCBsZXZlbHMgaW50byByZWN1cnNpb24u
Ci0gICAgdmlzaXRlZE5vZGVDb3VudCArPSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQ7Ci0gICAgd2hp
bGUgKHRoaXNDb3VzaW4pIHsKLSAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7Ci0gICAgICAg
ICAgICArK3N1YmNvdW50OwotICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yZW5kZXJTdHls
ZSgpID09IHBhcmVudFN0eWxlICYmIGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKSkgewotICAgICAg
ICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJlc2VydmVkIHRyaWVzLgotICAgICAgICAg
ICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkIC0gc3ViY291
bnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdWJjb3VudCA+PSBjU3R5bGVTZWFyY2hUaHJl
c2hvbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBjdXJyZW50Tm9k
ZSA9IGN1cnJlbnROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBj
dXJyZW50Tm9kZSA9IGxvY2F0ZUNvdXNpbkxpc3QodGhpc0NvdXNpbi0+cGFyZW50RWxlbWVudCgp
LCB2aXNpdGVkTm9kZUNvdW50KTsKLSAgICAgICAgdGhpc0NvdXNpbiA9IGN1cnJlbnROb2RlOwot
ICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6Om1hdGNoZXNS
dWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCi17Ci0gICAgaWYgKCFydWxlU2V0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLQotICAgIGludCBmaXJz
dFJ1bGVJbmRleCA9IC0xLCBsYXN0UnVsZUluZGV4ID0gLTE7Ci0gICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMocnVsZVNldCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGZhbHNlKTsKLQot
ICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBl
bGVtZW50KSBjb25zdAotewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQg
PSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVy
SW5wdXRFbGVtZW50ID0gbV9lbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotCi0gICAgaWYgKCF0
aGlzSW5wdXRFbGVtZW50IHx8ICFvdGhlcklucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpICE9IG90aGVy
SW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICh0aGlzSW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkgIT0gb3RoZXJJbnB1
dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSAhPSBvdGhlcklucHV0
RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAodGhpc0lucHV0RWxlbWVudC0+cmVxdWlyZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+cmVx
dWlyZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQtPmlzRW5h
YmxlZEZvcm1Db250cm9sKCkgIT0gbV9lbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9u
Rm9yRm9ybSgpICE9IG1fZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb250YWlu
c1ZhbGlkaXR5U3R5bGVSdWxlcygpKSB7Ci0gICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gZWxl
bWVudC0+d2lsbFZhbGlkYXRlKCk7Ci0KLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBtX2Vs
ZW1lbnQtPndpbGxWYWxpZGF0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1l
bnQoKSAhPSBtX2VsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzSW5SYW5nZSgpICE9
IG1fZWxlbWVudC0+aXNJblJhbmdlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9IG1fZWxlbWVudC0+aXNPdXRPZlJh
bmdlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gbWFrZXMgc29tZSBhc3N1bXB0aW9ucyB0aGF0IG9u
bHkgbWFrZSBzZW5zZSBmb3IgYXR0cmlidXRlIHN0eWxlcyAod2Ugb25seSBjb21wYXJlIENTU1By
b3BlcnR5OjppZCgpIGFuZCBDU1NQcm9wZXJ0eTo6dmFsdWUoKS4pCi1zdGF0aWMgaW5saW5lIGJv
b2wgYXR0cmlidXRlU3R5bGVzRXF1YWwoU3R5bGVQcm9wZXJ0eVNldCogYSwgU3R5bGVQcm9wZXJ0
eVNldCogYikKLXsKLSAgICBpZiAoYSA9PSBiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBp
ZiAoYS0+cHJvcGVydHlDb3VudCgpICE9IGItPnByb3BlcnR5Q291bnQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBhLT5wcm9wZXJ0eUNvdW50
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkgewot
ICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgYVByb3BlcnR5ID0gYS0+cHJvcGVydHlBdChpKTsK
LSAgICAgICAgdW5zaWduZWQgajsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IHByb3BlcnR5Q291
bnQ7ICsraikgewotICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIGJQcm9wZXJ0eSA9IGIt
PnByb3BlcnR5QXQoaik7Ci0gICAgICAgICAgICBpZiAoYVByb3BlcnR5LmlkKCkgIT0gYlByb3Bl
cnR5LmlkKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAvLyBXZSBj
b3VsZCBnZXQgYSBmZXcgbW9yZSBoaXRzIGJ5IGNvbXBhcmluZyBjc3NUZXh0KCkgaGVyZSwgYnV0
IHRoYXQgZ2V0cyBleHBlbnNpdmUgcXVpY2tseS4KLSAgICAgICAgICAgIGlmIChhUHJvcGVydHku
dmFsdWUoKSAhPSBiUHJvcGVydHkudmFsdWUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoaiA9PSBwcm9w
ZXJ0eUNvdW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCog
ZWxlbWVudCkKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRN
TEVsZW1lbnQoZWxlbWVudCktPmhhc0RpcmVjdGlvbkF1dG8oKTsKLX0KLQotYm9vbCBTdHlsZVJl
c29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKLXsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgp
OwotCi0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHls
ZS0+dW5pcXVlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+dGFn
UU5hbWUoKSAhPSBtX2VsZW1lbnQtPnRhZ1FOYW1lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAhPSBtX2VsZW1lbnQtPmhhc0NsYXNzKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aW5saW5lU3R5bGUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKGVsZW1lbnQtPmlz
U1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihlbGVtZW50KS0+YW5pbWF0
ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
ICAgIGlmICghIWVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkgIT0gISFtX3N0eWxlZEVsZW1lbnQt
PmF0dHJpYnV0ZVN0eWxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHlsZVByb3Bl
cnR5U2V0KiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVBID0gZWxlbWVudC0+YWRkaXRpb25hbEF0
dHJpYnV0ZVN0eWxlKCk7Ci0gICAgU3R5bGVQcm9wZXJ0eVNldCogYWRkaXRpb25hbEF0dHJpYnV0
ZVN0eWxlQiA9IG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlKCk7Ci0g
ICAgaWYgKCFhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVBICE9ICFhZGRpdGlvbmFsQXR0cmlidXRl
U3R5bGVCKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmlzTGluaygp
ICE9IG1fZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
c3R5bGUtPmFmZmVjdGVkQnlVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9ycygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAhPSBtX2VsZW1lbnQtPmhv
dmVyZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hY3RpdmUo
KSAhPSBtX2VsZW1lbnQtPmFjdGl2ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBtX2VsZW1lbnQtPmZvY3VzZWQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IG1fZWxlbWVu
dC0+c2hhZG93UHNldWRvSWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVt
ZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNzc1Rh
cmdldCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmdldEF0dHJp
YnV0ZSh0eXBlQXR0cikgIT0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1M
TmFtZXM6OmxhbmdBdHRyKSAhPSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6
OmxhbmdBdHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5mYXN0
R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobGFu
Z0F0dHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUocmVhZG9ubHlBdHRyKSAhPSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVh
ZG9ubHlBdHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5mYXN0
R2V0QXR0cmlidXRlKGNlbGxwYWRkaW5nQXR0cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKGNlbGxwYWRkaW5nQXR0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChl
bGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50
LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgaWYgKGVsZW1lbnQtPmhhc1Njb3BlZEhU
TUxTdHlsZUNoaWxkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0jaWYgRU5B
QkxFKFBST0dSRVNTX1RBRykKLSAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1Rh
ZykpIHsKLSAgICAgICAgaWYgKCFtX2VsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEhUTUxQcm9ncmVzc0VsZW1lbnQq
IHRoaXNQcm9ncmVzc0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4o
ZWxlbWVudCk7Ci0gICAgICAgIEhUTUxQcm9ncmVzc0VsZW1lbnQqIG90aGVyUHJvZ3Jlc3NFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAg
ICAgIGlmICh0aGlzUHJvZ3Jlc3NFbGVtZW50LT5pc0RldGVybWluYXRlKCkgIT0gb3RoZXJQcm9n
cmVzc0VsZW1lbnQtPmlzRGV0ZXJtaW5hdGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaXNDb250cm9sID0gZWxlbWVudC0+
aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKLQotICAgIGlmIChpc0NvbnRyb2wgIT0gbV9lbGVtZW50
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woZWxlbWVudCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdHlsZS0+dHJhbnNpdGlvbnMoKSB8fCBzdHls
ZS0+YW5pbWF0aW9ucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgLy8gVHVybiBvZmYgc3R5bGUgc2hhcmluZyBmb3IgZWxl
bWVudHMgdGhhdCBjYW4gZ2FpbiBsYXllcnMgZm9yIHJlYXNvbnMgb3V0c2lkZSBvZiB0aGUgc3R5
bGUgc3lzdGVtLgotICAgIC8vIFNlZSBjb21tZW50cyBpbiBSZW5kZXJPYmplY3Q6OnNldFN0eWxl
KCkuCi0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBl
bGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBs
ZXRUYWcpCi0jaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi0gICAgICAgIC8vIFdp
dGggcHJveHlpbmcsIHRoZSBtZWRpYSBlbGVtZW50cyBhcmUgYmFja2VkIGJ5IGEgUmVuZGVyRW1i
ZWRkZWRPYmplY3QuCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUodmlkZW9UYWcpIHx8
IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXVkaW9UYWcpCi0jZW5kaWYKLSAgICAgICAgKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQotICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9uQXV0
byhlbGVtZW50KSB8fCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhtX2VsZW1lbnQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBtX2VsZW1l
bnQtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShjbGFz
c0F0dHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC0+YXR0cmli
dXRlU3R5bGUoKSAmJiAhYXR0cmlidXRlU3R5bGVzRXF1YWwoZWxlbWVudC0+YXR0cmlidXRlU3R5
bGUoKSwgbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZUEgJiYgIWF0dHJpYnV0
ZVN0eWxlc0VxdWFsKGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZUEsIGFkZGl0aW9uYWxBdHRyaWJ1
dGVTdHlsZUIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC0+aXNM
aW5rKCkgJiYgbV9lbGVtZW50TGlua1N0YXRlICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgU3R5bGVk
RWxlbWVudCogU3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSog
bm9kZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAotewotICAgIGZvciAoOyBub2RlOyBub2RlID0g
bm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc1N0eWxlZEVs
ZW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY2FuU2hhcmVTdHls
ZVdpdGhFbGVtZW50KHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKSkpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgaWYgKGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xk
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
dHlsZWRFbGVtZW50Kj4obm9kZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBwYXJlbnRTdHls
ZVByZXZlbnRzU2hhcmluZyhjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCi17Ci0gICAg
cmV0dXJuIHBhcmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlQb3NpdGlvbmFsUnVsZXMoKQot
ICAgICAgICB8fCBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVz
KCkKLSAgICAgICAgfHwgcGFyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1
bGVzKCkgCi0gICAgICAgIHx8IHBhcmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RB
ZGphY2VudFJ1bGVzKCk7Ci19Ci0KLVJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVT
aGFyZWRTdHlsZSgpCi17Ci0gICAgaWYgKCFtX3N0eWxlZEVsZW1lbnQgfHwgIW1fcGFyZW50U3R5
bGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBpbmxpbmUg
c3R5bGUgaXQgaXMgcHJvYmFibHkgdW5pcXVlLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlu
bGluZVN0eWxlKCkpCi0gICAgICAgIHJldHVybiAwOwotI2lmIEVOQUJMRShTVkcpCi0gICAgaWYg
KG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVu
dCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQotICAg
ICAgICByZXR1cm4gMDsKLSNlbmRpZgotICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcgaWYg
dGhleSBzaG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KLSAgICBpZiAobV9zdHlsZWRFbGVtZW50
LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhtX3N0eWxlZEVsZW1l
bnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQotICAgICAg
ICByZXR1cm4gMDsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGlmIChtX3N0eWxlZEVs
ZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCi0gICAgICAgIHJldHVybiAwOwotI2Vu
ZGlmCi0KLSAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4K
LSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgdmlzaXRlZE5vZGVDb3VudCA9
IDA7Ci0gICAgU3R5bGVkRWxlbWVudCogc2hhcmVFbGVtZW50ID0gMDsKLSAgICBOb2RlKiBjb3Vz
aW5MaXN0ID0gbV9zdHlsZWRFbGVtZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICB3aGlsZSAo
Y291c2luTGlzdCkgewotICAgICAgICBzaGFyZUVsZW1lbnQgPSBmaW5kU2libGluZ0ZvclN0eWxl
U2hhcmluZyhjb3VzaW5MaXN0LCBjb3VudCk7Ci0gICAgICAgIGlmIChzaGFyZUVsZW1lbnQpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY291c2luTGlzdCA9IGxvY2F0ZUNvdXNpbkxpc3Qo
Y291c2luTGlzdC0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKLSAgICB9Ci0K
LSAgICAvLyBJZiB3ZSBoYXZlIGV4aGF1c3RlZCBhbGwgb3VyIGJ1ZGdldCBvciBvdXIgY291c2lu
cy4KLSAgICBpZiAoIXNoYXJlRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBD
YW4ndCBzaGFyZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhl
IGVuZCBhcyBpdCBzaG91bGQgcmFyZWx5IGZhaWwuCi0gICAgaWYgKG1hdGNoZXNSdWxlU2V0KG1f
c2libGluZ1J1bGVTZXQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBDYW4ndCBz
aGFyZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCi0gICAgaWYgKG1hdGNoZXNSdWxlU2V0KG1f
dW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
Ly8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5v
ZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KLSAg
ICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBzaGFyZUVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci19Ci0K
LXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCi17
Ci0gICAgTWF0Y2hpbmdVQVJ1bGVzU2NvcGUgc2NvcGU7Ci0KLSAgICAvLyBGaXJzdCB3ZSBtYXRj
aCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0LgotICAgIGlmIChzaW1wbGVEZWZhdWx0
U3R5bGVTaGVldCkKLSAgICAgICAgcmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7Ci0gICAgUnVs
ZVNldCogdXNlckFnZW50U3R5bGVTaGVldCA9IG1fbWVkaXVtLT5tZWRpYVR5cGVNYXRjaFNwZWNp
ZmljKCJwcmludCIpCi0gICAgICAgID8gZGVmYXVsdFByaW50U3R5bGUgOiBkZWZhdWx0U3R5bGU7
Ci0gICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgdXNlckFnZW50U3R5bGVTaGVldCk7Ci0KLSAgICAv
LyBJbiBxdWlya3MgbW9kZSwgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdl
bnQgc2hlZXQuCi0gICAgaWYgKCFtX2NoZWNrZXIuc3RyaWN0UGFyc2luZygpKQotICAgICAgICBt
YXRjaFVBUnVsZXMocmVzdWx0LCBkZWZhdWx0UXVpcmtzU3R5bGUpOwotCi0gICAgLy8gSWYgZG9j
dW1lbnQgdXNlcyB2aWV3IHNvdXJjZSBzdHlsZXMgKGluIHZpZXcgc291cmNlIG1vZGUgb3IgaW4g
eG1sIHZpZXdlciBtb2RlKSwgdGhlbiB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJj
ZSBzdHlsZSBzaGVldC4KLSAgICBpZiAobV9jaGVja2VyLmRvY3VtZW50KCktPmlzVmlld1NvdXJj
ZSgpKSB7Ci0gICAgICAgIGlmICghZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSkKLSAgICAgICAgICAg
IGxvYWRWaWV3U291cmNlU3R5bGUoKTsKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgZGVm
YXVsdFZpZXdTb3VyY2VTdHlsZSk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCwgQ1NT
Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7Ci0KLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGRvY3VtZW50U3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlzcGxheShCTE9D
Syk7Ci0gICAgZG9jdW1lbnRTdHlsZS0+c2V0UlRMT3JkZXJpbmcoZG9jdW1lbnQtPnZpc3VhbGx5
T3JkZXJlZCgpID8gVmlzdWFsT3JkZXIgOiBMb2dpY2FsT3JkZXIpOwotICAgIGRvY3VtZW50U3R5
bGUtPnNldFpvb20oZnJhbWUgJiYgIWRvY3VtZW50LT5wcmludGluZygpID8gZnJhbWUtPnBhZ2Va
b29tRmFjdG9yKCkgOiAxKTsKLSAgICBkb2N1bWVudFN0eWxlLT5zZXRQYWdlU2NhbGVUcmFuc2Zv
cm0oZnJhbWUgPyBmcmFtZS0+ZnJhbWVTY2FsZUZhY3RvcigpIDogMSk7Ci0gICAgZG9jdW1lbnRT
dHlsZS0+c2V0VXNlck1vZGlmeShkb2N1bWVudC0+aW5EZXNpZ25Nb2RlKCkgPyBSRUFEX1dSSVRF
IDogUkVBRF9PTkxZKTsKLSAgICBkb2N1bWVudFN0eWxlLT5zZXRMb2NhbGUoZG9jdW1lbnQtPmNv
bnRlbnRMYW5ndWFnZSgpKTsKLQotICAgIEVsZW1lbnQqIGRvY0VsZW1lbnQgPSBkb2N1bWVudC0+
ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBkb2NFbGVtZW50UmVuZGVyZXIg
PSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgaWYgKGRvY0Vs
ZW1lbnRSZW5kZXJlcikgewotICAgICAgICAvLyBVc2UgdGhlIGRpcmVjdGlvbiBhbmQgd3JpdGlu
Zy1tb2RlIG9mIHRoZSBib2R5IHRvIHNldCB0aGUKLSAgICAgICAgLy8gdmlld3BvcnQncyBkaXJl
Y3Rpb24gYW5kIHdyaXRpbmctbW9kZSB1bmxlc3MgdGhlIHByb3BlcnR5IGlzIHNldCBvbiB0aGUg
ZG9jdW1lbnQgZWxlbWVudC4KLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gYm9keSwgdGhlbiB1
c2UgdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0gICAgICAgIFJlbmRlck9iamVjdCogYm9keVJlbmRl
cmVyID0gZG9jdW1lbnQtPmJvZHkoKSA/IGRvY3VtZW50LT5ib2R5KCktPnJlbmRlcmVyKCkgOiAw
OwotICAgICAgICBpZiAoYm9keVJlbmRlcmVyICYmICFkb2N1bWVudC0+d3JpdGluZ01vZGVTZXRP
bkRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0V3JpdGlu
Z01vZGUoYm9keVJlbmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0V3JpdGluZ01vZGUoZG9jRWxlbWVudFJl
bmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKLSAgICAgICAgaWYgKGJvZHlSZW5kZXJl
ciAmJiAhZG9jdW1lbnQtPmRpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAg
ICAgICBkb2N1bWVudFN0eWxlLT5zZXREaXJlY3Rpb24oYm9keVJlbmRlcmVyLT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNl
dERpcmVjdGlvbihkb2NFbGVtZW50UmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpKTsKLSAg
ICB9Ci0KLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+
cGFnZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBQYWdlOjpQYWdpbmF0aW9uJiBwYWdpbmF0aW9u
ID0gcGFnZS0+cGFnaW5hdGlvbigpOwotICAgICAgICAgICAgaWYgKHBhZ2luYXRpb24ubW9kZSAh
PSBQYWdlOjpQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZCkgewotICAgICAgICAgICAgICAgIGRvY3Vt
ZW50U3R5bGUtPnNldENvbHVtbkF4aXMocGFnaW5hdGlvbi5tb2RlID09IFBhZ2U6OlBhZ2luYXRp
b246Okhvcml6b250YWxseVBhZ2luYXRlZCA/IEhvcml6b250YWxDb2x1bW5BeGlzIDogVmVydGlj
YWxDb2x1bW5BeGlzKTsKLSAgICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRDb2x1bW5H
YXAocGFnaW5hdGlvbi5nYXApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQtPnByaW50aW5nKCkpOwotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihkb2N1bWVu
dFN0eWxlLT5sb2NhbGUoKSkpOwotICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVu
dC0+c2V0dGluZ3MoKSkgewotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9k
ZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgc3RhbmRhcmRGb250ID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseShmb250RGVz
Y3JpcHRpb24uc2NyaXB0KCkpOwotICAgICAgICBpZiAoIXN0YW5kYXJkRm9udC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNj
cmlwdGlvbjo6U3RhbmRhcmRGYW1pbHkpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZp
cnN0RmFtaWx5KCkuc2V0RmFtaWx5KHN0YW5kYXJkRm9udCk7Ci0gICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1pbHkoMCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFs
dWVYeFNtYWxsICsgMSk7Ci0gICAgICAgIGludCBzaXplID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNp
emVGb3JLZXl3b3JkKGRvY3VtZW50LCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpOwotICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICAgICAgYm9vbCB1c2VT
Vkdab29tUnVsZXMgPSBkb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpOwotICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZy
b21TcGVjaWZpZWRTaXplKGRvY3VtZW50LCBkb2N1bWVudFN0eWxlLmdldCgpLCBmb250RGVzY3Jp
cHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKSk7Ci0gICAgfQot
Ci0gICAgZG9jdW1lbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
Ci0gICAgZG9jdW1lbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwotCi0gICAg
cmV0dXJuIGRvY3VtZW50U3R5bGUucmVsZWFzZSgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
aXNBdFNoYWRvd0JvdW5kYXJ5KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFlbGVtZW50
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9
IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAgICByZXR1cm4gcGFyZW50Tm9kZSAmJiBwYXJlbnRO
b2RlLT5pc1NoYWRvd1Jvb3QoKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclN0eWxlKiBk
ZWZhdWx0UGFyZW50LAotICAgIFN0eWxlU2hhcmluZ0JlaGF2aW9yIHNoYXJpbmdCZWhhdmlvciwg
UnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwgUmVuZGVyUmVnaW9uKiByZWdp
b25Gb3JTdHlsaW5nKQotewotICAgIC8vIE9uY2UgYW4gZWxlbWVudCBoYXMgYSByZW5kZXJlciwg
d2UgZG9uJ3QgdHJ5IHRvIGRlc3Ryb3kgaXQsIHNpbmNlIG90aGVyd2lzZSB0aGUgcmVuZGVyZXIK
LSAgICAvLyB3aWxsIHZhbmlzaCBpZiBhIHN0eWxlIHJlY2FsYyBoYXBwZW5zIGR1cmluZyBsb2Fk
aW5nLgotICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIWVs
ZW1lbnQtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpICYmICFlbGVtZW50LT5y
ZW5kZXJlcigpKSB7Ci0gICAgICAgIGlmICghc19zdHlsZU5vdFlldEF2YWlsYWJsZSkgewotICAg
ICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKS5s
ZWFrUmVmKCk7Ci0gICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5zZXREaXNwbGF5
KE5PTkUpOwotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+Zm9udCgpLnVwZGF0
ZShtX2ZvbnRTZWxlY3Rvcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQo
KS0+c2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOwotICAgICAgICByZXR1cm4gc19z
dHlsZU5vdFlldEF2YWlsYWJsZTsKLSAgICB9Ci0KLSAgICBpbml0RWxlbWVudChlbGVtZW50KTsK
LSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQpOwotICAgIG1f
cmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7Ci0gICAgaWYgKHNoYXJpbmdCZWhh
dmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZykgewotICAgICAgICBSZW5kZXJTdHlsZSogc2hhcmVk
U3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOwotICAgICAgICBpZiAoc2hhcmVkU3R5bGUpCi0g
ICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7Ci0gICAgfQotCi0gICAgbV9zdHlsZSA9IFJl
bmRlclN0eWxlOjpjcmVhdGUoKTsKLQotICAgIGlmIChtX3BhcmVudFN0eWxlKQotICAgICAgICBt
X3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
bV9wYXJlbnRTdHlsZSA9IHN0eWxlKCk7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMg
YXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQg
c3R5bGUuCi0gICAgICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7Ci0gICAgfQotCi0gICAg
Ly8gRXZlbiBpZiBzdXJyb3VuZGluZyBjb250ZW50IGlzIHVzZXItZWRpdGFibGUsIHNoYWRvdyBE
T00gc2hvdWxkIGFjdCBhcyBhIHNpbmdsZSB1bml0LCBhbmQgbm90IG5lY2Vzc2FyaWx5IGJlIGVk
aXRhYmxlCi0gICAgaWYgKGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSkKLSAgICAgICAgbV9z
dHlsZS0+c2V0VXNlck1vZGlmeShSZW5kZXJTdHlsZTo6aW5pdGlhbFVzZXJNb2RpZnkoKSk7Ci0K
LSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpIHsKLSAgICAgICAgbV9zdHlsZS0+c2V0SXNMaW5r
KHRydWUpOwotICAgICAgICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKG1fZWxlbWVudExpbmtTdGF0
ZSk7Ci0gICAgfQotCi0gICAgZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVudChlbGVt
ZW50KTsKLQotICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgIGlmIChtYXRjaGluZ0Jl
aGF2aW9yID09IE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzKQotICAgICAgICBtYXRjaFVBUnVsZXMo
bWF0Y2hSZXN1bHQpOwotICAgIGVsc2UKLSAgICAgICAgbWF0Y2hBbGxSdWxlcyhtYXRjaFJlc3Vs
dCk7Ci0KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0KTsKLQotICAgIC8v
IENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25z
IChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0eWxlKCksIG1f
cGFyZW50U3R5bGUsIGVsZW1lbnQpOwotCi0gICAgaW5pdEVsZW1lbnQoMCk7IC8vIENsZWFyIG91
dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KLQotICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgot
ICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxl
bWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5ZnJhbWVWYWx1ZSYg
a2V5ZnJhbWVWYWx1ZSkKLXsKLSAgICBNYXRjaFJlc3VsdCByZXN1bHQ7Ci0gICAgaWYgKGtleWZy
YW1lLT5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwg
a2V5ZnJhbWUtPnByb3BlcnRpZXMoKSk7Ci0KLSAgICBBU1NFUlQoIW1fc3R5bGUpOwotCi0gICAg
Ly8gQ3JlYXRlIHRoZSBzdHlsZQotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoZWxl
bWVudFN0eWxlKTsKLQotICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKLQotICAgIC8vIFdlIGRv
bid0IG5lZWQgdG8gYm90aGVyIHdpdGggIWltcG9ydGFudC4gU2luY2UgdGhlcmUgaXMgb25seSBl
dmVyIG9uZQotICAgIC8vIGRlY2wsIHRoZXJlJ3Mgbm90aGluZyB0byBvdmVycmlkZS4gU28ganVz
dCBhZGQgdGhlIGZpcnN0IHByb3BlcnRpZXMuCi0gICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFs
c2U7Ci0gICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8dHJ1ZT4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwotCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290
IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsK
LQotICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQg
b24gdGhlIGZvbnQtc2l6ZQotICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhlaWdodFZhbHVlKTsKLQot
ICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzLgotICAgIGlmIChrZXlmcmFtZS0+
cHJvcGVydGllcygpKQotICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihyZXN1
bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJp
dGVkT25seSk7Ci0KLSAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBieSBvbmUgb2YgdGhl
IG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywKLSAgICAvLyBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0
IGEgc2Vjb25kIHRpbWUuCi0gICAgdXBkYXRlRm9udCgpOwotCi0gICAgLy8gU3RhcnQgbG9hZGlu
ZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nSW1hZ2Vz
KCk7Ci0gICAgCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIC8vIFN0YXJ0IGxvYWRpbmcg
dGhlIHNoYWRlcnMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nU2hh
ZGVycygpOwotI2VuZGlmCi0KLSAgICAvLyBBZGQgYWxsIHRoZSBhbmltYXRpbmcgcHJvcGVydGll
cyB0byB0aGUga2V5ZnJhbWUuCi0gICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlRGVjbGFy
YXRpb24gPSBrZXlmcmFtZS0+cHJvcGVydGllcygpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByb3Bl
cnR5Q291bnQgPSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0eUNvdW50KCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKLSAgICAgICAgICAg
IENTU1Byb3BlcnR5SUQgcHJvcGVydHkgPSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0eUF0KGkp
LmlkKCk7Ci0gICAgICAgICAgICAvLyBUaW1pbmctZnVuY3Rpb24gd2l0aGluIGtleWZyYW1lcyBp
cyBzcGVjaWFsLCBiZWNhdXNlIGl0IGlzIG5vdCBhbmltYXRlZDsgaXQganVzdAotICAgICAgICAg
ICAgLy8gZGVzY3JpYmVzIHRoZSB0aW1pbmcgZnVuY3Rpb24gYmV0d2VlbiB0aGlzIGtleWZyYW1l
IGFuZCB0aGUgbmV4dC4KLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAhPSBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKQotICAgICAgICAgICAgICAgIGtleWZyYW1lVmFs
dWUuYWRkUHJvcGVydHkocHJvcGVydHkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IG1fc3R5bGUucmVsZWFzZSgpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5
bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5
bGUsIEtleWZyYW1lTGlzdCYgbGlzdCkKLXsKLSAgICBsaXN0LmNsZWFyKCk7Ci0KLSAgICAvLyBH
ZXQgdGhlIGtleWZyYW1lc1J1bGUgZm9yIHRoaXMgbmFtZQotICAgIGlmICghZSB8fCBsaXN0LmFu
aW1hdGlvbk5hbWUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fa2V5ZnJh
bWVzUnVsZU1hcC5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBLZXlmcmFtZXNSdWxlTWFwOjpp
dGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzUnVsZU1hcC5maW5kKGxpc3QuYW5pbWF0aW9uTmFtZSgp
LmltcGwoKSk7Ci0gICAgaWYgKGl0ID09IG1fa2V5ZnJhbWVzUnVsZU1hcC5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxl
ID0gaXQtPnNlY29uZC5nZXQoKTsKLQotICAgIC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhl
IHN0eWxlIGZvciBlYWNoIGtleWZyYW1lCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZUtl
eWZyYW1lPiA+JiBrZXlmcmFtZXMgPSBrZXlmcmFtZXNSdWxlLT5rZXlmcmFtZXMoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IC8vIEFwcGx5IHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUuIFRoaXMgaXMgYSBzaW1wbGlm
aWVkIHZlcnNpb24gb2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxlbWVudAotICAgICAgICBpbml0
RWxlbWVudChlKTsKLSAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlKTsKLQotICAgICAgICBj
b25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSA9IGtleWZyYW1lc1tpXS5nZXQoKTsKLQotICAg
ICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMCwgMCk7Ci0gICAgICAgIGtleWZyYW1l
VmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1lLCBr
ZXlmcmFtZVZhbHVlKSk7Ci0KLSAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgc3R5bGUgdG8g
YWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRpbWVzCi0gICAgICAgIFZlY3RvcjxmbG9hdD4ga2V5czsK
LSAgICAgICAga2V5ZnJhbWUtPmdldEtleXMoa2V5cyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGtl
eUluZGV4ID0gMDsga2V5SW5kZXggPCBrZXlzLnNpemUoKTsgKytrZXlJbmRleCkgewotICAgICAg
ICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRLZXkoa2V5c1trZXlJbmRleF0pOwotICAgICAgICAgICAg
bGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJ
ZiB0aGUgMCUga2V5ZnJhbWUgaXMgbWlzc2luZywgY3JlYXRlIGl0IChidXQgb25seSBpZiB0aGVy
ZSBpcyBhdCBsZWFzdCBvbmUgb3RoZXIga2V5ZnJhbWUpCi0gICAgaW50IGluaXRpYWxMaXN0U2l6
ZSA9IGxpc3Quc2l6ZSgpOwotICAgIGlmIChpbml0aWFsTGlzdFNpemUgPiAwICYmIGxpc3RbMF0u
a2V5KCkgIT0gMCkgewotICAgICAgICBzdGF0aWMgU3R5bGVLZXlmcmFtZSogemVyb1BlcmNlbnRL
ZXlmcmFtZTsKLSAgICAgICAgaWYgKCF6ZXJvUGVyY2VudEtleWZyYW1lKSB7Ci0gICAgICAgICAg
ICB6ZXJvUGVyY2VudEtleWZyYW1lID0gU3R5bGVLZXlmcmFtZTo6Y3JlYXRlKCkubGVha1JlZigp
OwotICAgICAgICAgICAgemVyb1BlcmNlbnRLZXlmcmFtZS0+c2V0S2V5VGV4dCgiMCUiKTsKLSAg
ICAgICAgfQotICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMCwgMCk7Ci0gICAg
ICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUs
IHplcm9QZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKLSAgICAgICAgbGlzdC5pbnNl
cnQoa2V5ZnJhbWVWYWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIDEwMCUga2V5ZnJhbWUg
aXMgbWlzc2luZywgY3JlYXRlIGl0IChidXQgb25seSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUg
b3RoZXIga2V5ZnJhbWUpCi0gICAgaWYgKGluaXRpYWxMaXN0U2l6ZSA+IDAgJiYgKGxpc3RbbGlz
dC5zaXplKCkgLSAxXS5rZXkoKSAhPSAxKSkgewotICAgICAgICBzdGF0aWMgU3R5bGVLZXlmcmFt
ZSogaHVuZHJlZFBlcmNlbnRLZXlmcmFtZTsKLSAgICAgICAgaWYgKCFodW5kcmVkUGVyY2VudEtl
eWZyYW1lKSB7Ci0gICAgICAgICAgICBodW5kcmVkUGVyY2VudEtleWZyYW1lID0gU3R5bGVLZXlm
cmFtZTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgICAgICAgICAgaHVuZHJlZFBlcmNlbnRLZXlm
cmFtZS0+c2V0S2V5VGV4dCgiMTAwJSIpOwotICAgICAgICB9Ci0gICAgICAgIEtleWZyYW1lVmFs
dWUga2V5ZnJhbWVWYWx1ZSgxLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShz
dHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSwga2V5
ZnJhbWVWYWx1ZSkpOwotICAgICAgICBsaXN0Lmluc2VydChrZXlmcmFtZVZhbHVlKTsKLSAgICB9
Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxl
Rm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkKLXsKLSAgICBpZiAoIWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW5pdEVs
ZW1lbnQoZSk7Ci0KLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIHBhcmVudFN0eWxlLCBwc2V1
ZG8pOwotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAobV9w
YXJlbnRTdHlsZSkKLSAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9wYXJlbnRTdHlsZSk7
Ci0KLSAgICAvLyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBvZiBv
dXIgcXVpcmsvcHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxraW5n
Ci0gICAgLy8gdGhvc2UgcnVsZXMuCi0KLSAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9y
IHJ1bGVzLgotICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgIG1hdGNoVUFSdWxlcyht
YXRjaFJlc3VsdCk7Ci0KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKLSAg
ICAgICAgbWF0Y2hVc2VyUnVsZXMobWF0Y2hSZXN1bHQsIGZhbHNlKTsKLSAgICAgICAgbWF0Y2hB
dXRob3JSdWxlcyhtYXRjaFJlc3VsdCwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChtYXRjaFJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgbV9zdHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7Ci0KLSAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKG1hdGNoUmVzdWx0KTsKLQotICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3Qn
cyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAg
IGFkanVzdFJlbmRlclN0eWxlKHN0eWxlKCksIHBhcmVudFN0eWxlLCAwKTsKLQotICAgIC8vIFN0
YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVu
ZGluZ0ltYWdlcygpOwotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIC8vIFN0YXJ0IGxv
YWRpbmcgdGhlIHNoYWRlcnMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5k
aW5nU2hhZGVycygpOwotI2VuZGlmCi0KLSAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAg
ICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQotewotICAgIGluaXRG
b3JTdHlsZVJlc29sdmUobV9jaGVja2VyLmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsg
Ly8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4K
LQotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgbV9zdHlsZS0+aW5o
ZXJpdEZyb20obV9yb290RWxlbWVudFN0eWxlKTsKLQotICAgIGNvbnN0IGJvb2wgaXNMZWZ0ID0g
aXNMZWZ0UGFnZShwYWdlSW5kZXgpOwotICAgIGNvbnN0IGJvb2wgaXNGaXJzdCA9IGlzRmlyc3RQ
YWdlKHBhZ2VJbmRleCk7Ci0gICAgY29uc3QgU3RyaW5nIHBhZ2UgPSBwYWdlTmFtZShwYWdlSW5k
ZXgpOwotICAgIAotICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKLSAgICBtYXRjaFBhZ2VSdWxlcyhy
ZXN1bHQsIGRlZmF1bHRQcmludFN0eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIG1h
dGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwg
cGFnZSk7Ci0gICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZv
ciBAcGFnZSBydWxlcywgYXMgcGVyIHRoZSBIVE1MNSBzcGVjLgotICAgIG1hdGNoUGFnZVJ1bGVz
KHJlc3VsdCwgbV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAg
ICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7
Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczx0cnVlPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7Ci0KLSAgICAv
LyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0g
ICAgdXBkYXRlRm9udCgpOwotCi0gICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJl
IHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX2xpbmVIZWlnaHRW
YWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGlu
ZUhlaWdodFZhbHVlKTsKLQotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KHJlc3Vs
dCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0
ZWRPbmx5KTsKLQotICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhp
cyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ0ltYWdlcygpOwotCi0jaWYgRU5BQkxFKENTU19TSEFE
RVJTKQotICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIHNoYWRlcnMgcmVmZXJlbmNlZCBieSB0aGlz
IHN0eWxlLgotICAgIGxvYWRQZW5kaW5nU2hhZGVycygpOwotI2VuZGlmCi0KLSAgICAvLyBOb3cg
cmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAg
IC8vIEludHJpbnNpYyBtYXJnaW4gdmFsdWUuCi0gICAgY29uc3QgaW50IGludHJpbnNpY01hcmdp
biA9IDIgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgLy8gRklYTUU6IFVzaW5nIHdp
ZHRoL2hlaWdodCBhbG9uZSBhbmQgbm90IGFsc28gZGVhbGluZyB3aXRoIG1pbi13aWR0aC9tYXgt
d2lkdGggaXMgZmxhd2VkLgotICAgIC8vIEZJWE1FOiBVc2luZyAicXVpcmsiIHRvIGRlY2lkZSB0
aGUgbWFyZ2luIHdhc24ndCBzZXQgaXMga2luZCBvZiBsYW1lLgotICAgIGlmIChzdHlsZS0+d2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpKSB7Ci0gICAgICAgIGlmIChzdHlsZS0+bWFyZ2luTGVm
dCgpLnF1aXJrKCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luTGVmdChMZW5ndGgoaW50
cmluc2ljTWFyZ2luLCBGaXhlZCkpOwotICAgICAgICBpZiAoc3R5bGUtPm1hcmdpblJpZ2h0KCku
cXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5SaWdodChMZW5ndGgoaW50cmlu
c2ljTWFyZ2luLCBGaXhlZCkpOwotICAgIH0KLQotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNB
dXRvKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5Ub3AoKS5xdWlyaygpKQotICAgICAg
ICAgICAgc3R5bGUtPnNldE1hcmdpblRvcChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkp
OwotICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkJvdHRvbSgpLnF1aXJrKCkpCi0gICAgICAgICAg
ICBzdHlsZS0+c2V0TWFyZ2luQm90dG9tKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7
Ci0gICAgfQotfQotCi1zdGF0aWMgRURpc3BsYXkgZXF1aXZhbGVudEJsb2NrRGlzcGxheShFRGlz
cGxheSBkaXNwbGF5LCBib29sIGlzRmxvYXRpbmcsIGJvb2wgc3RyaWN0UGFyc2luZykKLXsKLSAg
ICBzd2l0Y2ggKGRpc3BsYXkpIHsKLSAgICBjYXNlIEJMT0NLOgotICAgIGNhc2UgVEFCTEU6Ci0g
ICAgY2FzZSBCT1g6Ci0gICAgY2FzZSBGTEVYQk9YOgotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlP
VVQpCi0gICAgY2FzZSBHUklEOgotI2VuZGlmCi0gICAgICAgIHJldHVybiBkaXNwbGF5OwotCi0g
ICAgY2FzZSBMSVNUX0lURU06Ci0gICAgICAgIC8vIEl0IGlzIGEgV2luSUUgYnVnIHRoYXQgZmxv
YXRlZCBsaXN0IGl0ZW1zIGxvc2UgdGhlaXIgYnVsbGV0cywgc28gd2UnbGwgZW11bGF0ZSB0aGUg
cXVpcmssIGJ1dCBvbmx5IGluIHF1aXJrcyBtb2RlLgotICAgICAgICBpZiAoIXN0cmljdFBhcnNp
bmcgJiYgaXNGbG9hdGluZykKLSAgICAgICAgICAgIHJldHVybiBCTE9DSzsKLSAgICAgICAgcmV0
dXJuIGRpc3BsYXk7Ci0gICAgY2FzZSBJTkxJTkVfVEFCTEU6Ci0gICAgICAgIHJldHVybiBUQUJM
RTsKLSAgICBjYXNlIElOTElORV9CT1g6Ci0gICAgICAgIHJldHVybiBCT1g7Ci0gICAgY2FzZSBJ
TkxJTkVfRkxFWEJPWDoKLSAgICAgICAgcmV0dXJuIEZMRVhCT1g7Ci0jaWYgRU5BQkxFKENTU19H
UklEX0xBWU9VVCkKLSAgICBjYXNlIElOTElORV9HUklEOgotICAgICAgICByZXR1cm4gR1JJRDsK
LSNlbmRpZgotCi0gICAgY2FzZSBJTkxJTkU6Ci0gICAgY2FzZSBSVU5fSU46Ci0gICAgY2FzZSBD
T01QQUNUOgotICAgIGNhc2UgSU5MSU5FX0JMT0NLOgotICAgIGNhc2UgVEFCTEVfUk9XX0dST1VQ
OgotICAgIGNhc2UgVEFCTEVfSEVBREVSX0dST1VQOgotICAgIGNhc2UgVEFCTEVfRk9PVEVSX0dS
T1VQOgotICAgIGNhc2UgVEFCTEVfUk9XOgotICAgIGNhc2UgVEFCTEVfQ09MVU1OX0dST1VQOgot
ICAgIGNhc2UgVEFCTEVfQ09MVU1OOgotICAgIGNhc2UgVEFCTEVfQ0VMTDoKLSAgICBjYXNlIFRB
QkxFX0NBUFRJT046Ci0gICAgICAgIHJldHVybiBCTE9DSzsKLSAgICBjYXNlIE5PTkU6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gTk9ORTsKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEJMT0NLOwotfQotCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50ICplKQotewotICAgIC8vIENhY2hlIG91ciBvcmln
aW5hbCBkaXNwbGF5LgotICAgIHN0eWxlLT5zZXRPcmlnaW5hbERpc3BsYXkoc3R5bGUtPmRpc3Bs
YXkoKSk7Ci0KLSAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSAhPSBOT05FKSB7Ci0gICAgICAgIC8v
IElmIHdlIGhhdmUgYSA8dGQ+IHRoYXQgc3BlY2lmaWVzIGEgZmxvYXQgcHJvcGVydHksIGluIHF1
aXJrcyBtb2RlIHdlIGp1c3QgZHJvcCB0aGUgZmxvYXQKLSAgICAgICAgLy8gcHJvcGVydHkuCi0g
ICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2NrIG9u
IDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNlCi0gICAgICAgIC8v
IHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCi0gICAgICAgIGlmICgh
bV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSAmJiBlKSB7Ci0gICAgICAgICAgICBpZiAoZS0+aGFz
VGFnTmFtZSh0ZFRhZykpIHsKLSAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShUQUJM
RV9DRUxMKTsKLSAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RmxvYXRpbmcoTm9GbG9hdCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKHRhYmxlVGFn
KSkKLSAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShzdHlsZS0+aXNEaXNwbGF5SW5s
aW5lVHlwZSgpID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUodGRUYWcpIHx8IGUtPmhhc1RhZ05hbWUodGhUYWcpKSkg
ewotICAgICAgICAgICAgaWYgKHN0eWxlLT53aGl0ZVNwYWNlKCkgPT0gS0hUTUxfTk9XUkFQKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBhcmUgcmVhbGx5IG5vd3JhcHBp
bmcgb3IgaWYgd2Ugc2hvdWxkIGp1c3QKLSAgICAgICAgICAgICAgICAvLyB1c2Ugbm9ybWFsIGlu
c3RlYWQuICBJZiB0aGUgd2lkdGggb2YgdGhlIGNlbGwgaXMgZml4ZWQsIHRoZW4KLSAgICAgICAg
ICAgICAgICAvLyB3ZSBkb24ndCBhY3R1YWxseSB1c2UgTk9XUkFQLgotICAgICAgICAgICAgICAg
IGlmIChzdHlsZS0+d2lkdGgoKS5pc0ZpeGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXRXaGl0ZVNwYWNlKE5PUk1BTCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShOT1dSQVApOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGFibGVzIG5ldmVyIHN1cHBvcnQgdGhlIC13ZWJraXQt
KiB2YWx1ZXMgZm9yIHRleHQtYWxpZ24gYW5kIHdpbGwgcmVzZXQgYmFjayB0byB0aGUgZGVmYXVs
dC4KLSAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykgJiYgKHN0eWxlLT50
ZXh0QWxpZ24oKSA9PSBXRUJLSVRfTEVGVCB8fCBzdHlsZS0+dGV4dEFsaWduKCkgPT0gV0VCS0lU
X0NFTlRFUiB8fCBzdHlsZS0+dGV4dEFsaWduKCkgPT0gV0VCS0lUX1JJR0hUKSkKLSAgICAgICAg
ICAgIHN0eWxlLT5zZXRUZXh0QWxpZ24oVEFBVVRPKTsKLQotICAgICAgICAvLyBGcmFtZXMgYW5k
IGZyYW1lc2V0cyBuZXZlciBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjphYnNv
bHV0ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvCi0gICAgICAgIC8vIGZpeCBhIGNyYXNoIHdoZXJl
IGEgc2l0ZSB0cmllcyB0byBwb3NpdGlvbiB0aGVzZSBvYmplY3RzLiAgVGhleSBhbHNvIG5ldmVy
IGhvbm9yIGRpc3BsYXkuCi0gICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKGZyYW1lVGFn
KSB8fCBlLT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSkpIHsKLSAgICAgICAgICAgIHN0eWxlLT5z
ZXRQb3NpdGlvbihTdGF0aWNQb3NpdGlvbik7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxh
eShCTE9DSyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSdWJ5IHRleHQgZG9lcyBub3Qgc3Vw
cG9ydCBmbG9hdCBvciBwb3NpdGlvbi4gVGhpcyBtaWdodCBjaGFuZ2Ugd2l0aCBldm9sdXRpb24g
b2YgdGhlIHNwZWNpZmljYXRpb24uCi0gICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUocnRU
YWcpKSB7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU3RhdGljUG9zaXRpb24pOwot
ICAgICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gVGFibGUgaGVhZGVycyB3aXRoIGEgdGV4dC1hbGlnbiBvZiBhdXRvIHdpbGwgY2hh
bmdlIHRoZSB0ZXh0LWFsaWduIHRvIGNlbnRlci4KLSAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFn
TmFtZSh0aFRhZykgJiYgc3R5bGUtPnRleHRBbGlnbigpID09IFRBQVVUTykKLSAgICAgICAgICAg
IHN0eWxlLT5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsKLQotICAgICAgICBpZiAoZSAmJiBlLT5oYXNU
YWdOYW1lKGxlZ2VuZFRhZykpCi0gICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7
Ci0KLSAgICAgICAgLy8gQWJzb2x1dGUvZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cywgZmxvYXRp
bmcgZWxlbWVudHMgYW5kIHRoZSBkb2N1bWVudCBlbGVtZW50IG5lZWQgYmxvY2stbGlrZSBvdXRz
aWRlIGRpc3BsYXkuCi0gICAgICAgIGlmIChzdHlsZS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBv
c2l0aW9uIHx8IHN0eWxlLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gfHwgc3R5bGUtPmlz
RmxvYXRpbmcoKSB8fCAoZSAmJiBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSBl
KSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXko
c3R5bGUtPmRpc3BsYXkoKSwgc3R5bGUtPmlzRmxvYXRpbmcoKSwgbV9jaGVja2VyLnN0cmljdFBh
cnNpbmcoKSkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0IHRoaXMgbXV0YXRp
b24gZm9yIHBzZXVkbyBzdHlsZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2lu
Y2UgaXQncyBub3QgY29tcGxldGVseQotICAgICAgICAvLyBjbGVhciBob3cgdGhhdCBzaG91bGQg
d29yay4KLSAgICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FICYmIHN0eWxlLT5z
dHlsZVR5cGUoKSA9PSBOT1BTRVVETyAmJiBwYXJlbnRTdHlsZSAmJiBzdHlsZS0+d3JpdGluZ01v
ZGUoKSAhPSBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHN0eWxlLT5z
ZXREaXNwbGF5KElOTElORV9CTE9DSyk7Ci0KLSAgICAgICAgLy8gQWZ0ZXIgcGVyZm9ybWluZyB0
aGUgZGlzcGxheSBtdXRhdGlvbiwgY2hlY2sgdGFibGUgcm93cy4gIFdlIGRvIG5vdCBob25vciBw
b3NpdGlvbjpyZWxhdGl2ZSBvbgotICAgICAgICAvLyB0YWJsZSByb3dzIG9yIGNlbGxzLiAgVGhp
cyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBpbiBDU1MyLjEgKGFuZCBjYXVzZWQgYSBjcmFzaCBpbiBj
b250YWluaW5nQmxvY2soKQotICAgICAgICAvLyBvbiBzb21lIHNpdGVzKS4KLSAgICAgICAgaWYg
KChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0hFQURFUl9HUk9VUCB8fCBzdHlsZS0+ZGlzcGxh
eSgpID09IFRBQkxFX1JPV19HUk9VUAotICAgICAgICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkg
PT0gVEFCTEVfRk9PVEVSX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XKSAm
JgotICAgICAgICAgICAgIHN0eWxlLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24pCi0g
ICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU3RhdGljUG9zaXRpb24pOwotCi0gICAgICAg
IC8vIHdyaXRpbmctbW9kZSBkb2VzIG5vdCBhcHBseSB0byB0YWJsZSByb3cgZ3JvdXBzLCB0YWJs
ZSBjb2x1bW4gZ3JvdXBzLCB0YWJsZSByb3dzLCBhbmQgdGFibGUgY29sdW1ucy4KLSAgICAgICAg
Ly8gRklYTUU6IFRhYmxlIGNlbGxzIHNob3VsZCBiZSBhbGxvd2VkIHRvIGJlIHBlcnBlbmRpY3Vs
YXIgb3IgZmxpcHBlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHRhYmxlLCB0aG91Z2guCi0gICAgICAg
IGlmIChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0NPTFVNTiB8fCBzdHlsZS0+ZGlzcGxheSgp
ID09IFRBQkxFX0NPTFVNTl9HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0ZPT1RF
Ul9HUk9VUAotICAgICAgICAgICAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9IRUFERVJf
R1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cgfHwgc3R5bGUtPmRpc3BsYXko
KSA9PSBUQUJMRV9ST1dfR1JPVVAKLSAgICAgICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0g
VEFCTEVfQ0VMTCkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRXcml0aW5nTW9kZShwYXJlbnRTdHls
ZS0+d3JpdGluZ01vZGUoKSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIGRvbid0IHN1
cHBvcnQgYmxvY2stZmxvdyBvbiBmbGV4aWJsZSBib3hlcyB5ZXQsIGRpc2FsbG93IHNldHRpbmcK
LSAgICAgICAgLy8gb2YgYmxvY2stZmxvdyB0byBhbnl0aGluZyBvdGhlciB0aGFuIFRvcFRvQm90
dG9tV3JpdGluZ01vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NjQxOCAtIEZsZXhpYmxlIGJveCBzdXBwb3J0LgotICAgICAgICBpZiAoc3R5
bGUtPndyaXRpbmdNb2RlKCkgIT0gVG9wVG9Cb3R0b21Xcml0aW5nTW9kZSAmJiAoc3R5bGUtPmRp
c3BsYXkoKSA9PSBCT1ggfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVfQk9YKSkKLSAgICAg
ICAgICAgIHN0eWxlLT5zZXRXcml0aW5nTW9kZShUb3BUb0JvdHRvbVdyaXRpbmdNb2RlKTsKLSAg
ICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgb3VyIHotaW5kZXggdmFsdWUgaXMgb25seSBhcHBsaWVk
IGlmIHRoZSBvYmplY3QgaXMgcG9zaXRpb25lZC4KLSAgICBpZiAoc3R5bGUtPnBvc2l0aW9uKCkg
PT0gU3RhdGljUG9zaXRpb24pCi0gICAgICAgIHN0eWxlLT5zZXRIYXNBdXRvWkluZGV4KCk7Ci0K
LSAgICAvLyBBdXRvIHotaW5kZXggYmVjb21lcyAwIGZvciB0aGUgcm9vdCBlbGVtZW50IGFuZCB0
cmFuc3BhcmVudCBvYmplY3RzLiAgVGhpcyBwcmV2ZW50cwotICAgIC8vIGNhc2VzIHdoZXJlIG9i
amVjdHMgdGhhdCBzaG91bGQgYmUgYmxlbmRlZCBhcyBhIHNpbmdsZSB1bml0IGVuZCB1cCB3aXRo
IGEgbm9uLXRyYW5zcGFyZW50Ci0gICAgLy8gb2JqZWN0IHdlZGdlZCBpbiBiZXR3ZWVuIHRoZW0u
ICBBdXRvIHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9yIG9iamVjdHMgdGhhdCBzcGVjaWZ5IHRy
YW5zZm9ybXMvbWFza3MvcmVmbGVjdGlvbnMuCi0gICAgaWYgKHN0eWxlLT5oYXNBdXRvWkluZGV4
KCkgJiYgKChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IGUpIHx8IHN0
eWxlLT5vcGFjaXR5KCkgPCAxLjBmCi0gICAgICAgIHx8IHN0eWxlLT5oYXNUcmFuc2Zvcm1SZWxh
dGVkUHJvcGVydHkoKSB8fCBzdHlsZS0+aGFzTWFzaygpIHx8IHN0eWxlLT5ib3hSZWZsZWN0KCkg
fHwgc3R5bGUtPmhhc0ZpbHRlcigpCi0jaWZkZWYgRklYRURfUE9TSVRJT05fQ1JFQVRFU19TVEFD
S0lOR19DT05URVhUCi0gICAgICAgIHx8IHN0eWxlLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRp
b24KLSNlbmRpZgotI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkcpCi0gICAgICAgIC8vIFRv
dWNoIG92ZXJmbG93IHNjcm9sbGluZyBjcmVhdGVzIGEgc3RhY2tpbmcgY29udGV4dC4KLSAgICAg
ICAgfHwgc3R5bGUtPnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKQotI2VuZGlmCi0gICAgICAg
ICkpCi0gICAgICAgIHN0eWxlLT5zZXRaSW5kZXgoMCk7Ci0KLSAgICAvLyBUZXh0YXJlYSBjb25z
aWRlcnMgb3ZlcmZsb3cgdmlzaWJsZSBhcyBhdXRvLgotICAgIGlmIChlICYmIGUtPmhhc1RhZ05h
bWUodGV4dGFyZWFUYWcpKSB7Ci0gICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goc3R5bGUtPm92
ZXJmbG93WCgpID09IE9WSVNJQkxFID8gT0FVVE8gOiBzdHlsZS0+b3ZlcmZsb3dYKCkpOwotICAg
ICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPVklTSUJMRSA/
IE9BVVRPIDogc3R5bGUtPm92ZXJmbG93WSgpKTsKLSAgICB9Ci0KLSAgICAvLyBGaW5hbGx5IHVw
ZGF0ZSBvdXIgdGV4dCBkZWNvcmF0aW9ucyBpbiBlZmZlY3QsIGJ1dCBkb24ndCBhbGxvdyB0ZXh0
LWRlY29yYXRpb24gdG8gcGVyY29sYXRlIHRocm91Z2gKLSAgICAvLyB0YWJsZXMsIGlubGluZSBi
bG9ja3MsIGlubGluZSB0YWJsZXMsIHJ1bi1pbnMsIG9yIHNoYWRvdyBET00uCi0gICAgaWYgKHN0
eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVfVEFC
TEUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBSVU5fSU4KLSAgICAgICAgfHwgc3R5bGUtPmRpc3Bs
YXkoKSA9PSBJTkxJTkVfQkxPQ0sgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVfQk9YIHx8
IGlzQXRTaGFkb3dCb3VuZGFyeShlKSkKLSAgICAgICAgc3R5bGUtPnNldFRleHREZWNvcmF0aW9u
c0luRWZmZWN0KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpKTsKLSAgICBlbHNlCi0gICAgICAgIHN0
eWxlLT5hZGRUb1RleHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigp
KTsKLQotICAgIC8vIElmIGVpdGhlciBvdmVyZmxvdyB2YWx1ZSBpcyBub3QgdmlzaWJsZSwgY2hh
bmdlIHRvIGF1dG8uCi0gICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPTUFSUVVFRSAmJiBz
dHlsZS0+b3ZlcmZsb3dZKCkgIT0gT01BUlFVRUUpCi0gICAgICAgIHN0eWxlLT5zZXRPdmVyZmxv
d1koT01BUlFVRUUpOwotICAgIGVsc2UgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPTUFSUVVF
RSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT01BUlFVRUUpCi0gICAgICAgIHN0eWxlLT5zZXRP
dmVyZmxvd1goT01BUlFVRUUpOwotICAgIGVsc2UgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBP
VklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUpCi0gICAgICAgIHN0eWxl
LT5zZXRPdmVyZmxvd1goT0FVVE8pOwotICAgIGVsc2UgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSA9
PSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUpCi0gICAgICAgIHN0
eWxlLT5zZXRPdmVyZmxvd1koT0FVVE8pOwotCi0gICAgLy8gVGFibGUgcm93cywgc2VjdGlvbnMg
YW5kIHRoZSB0YWJsZSBpdHNlbGYgd2lsbCBzdXBwb3J0IG92ZXJmbG93OmhpZGRlbiBhbmQgd2ls
bCBpZ25vcmUgc2Nyb2xsL2F1dG8uCi0gICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgdGFibGUgc2Vj
dGlvbnMgd2lsbCBzdXBwb3J0IGF1dG8gYW5kIHNjcm9sbC4KLSAgICBpZiAoc3R5bGUtPmRpc3Bs
YXkoKSA9PSBUQUJMRSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9UQUJMRSB8fAotICAg
ICAgICBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPV19HUk9VUCB8fCBzdHlsZS0+ZGlzcGxh
eSgpID09IFRBQkxFX1JPVykgewotICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WCgpICE9IE9W
SVNJQkxFICYmIHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPSElEREVOKQotICAgICAgICAgICAgc3R5
bGUtPnNldE92ZXJmbG93WChPVklTSUJMRSk7Ci0gICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dZ
KCkgIT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9ISURERU4pCi0gICAgICAg
ICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9WSVNJQkxFKTsKLSAgICB9Ci0KLSAgICAvLyBNZW51
bGlzdHMgc2hvdWxkIGhhdmUgdmlzaWJsZSBvdmVyZmxvdwotICAgIGlmIChzdHlsZS0+YXBwZWFy
YW5jZSgpID09IE1lbnVsaXN0UGFydCkgewotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9W
SVNJQkxFKTsKLSAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklTSUJMRSk7Ci0gICAgfQot
Ci0gICAgLy8gQ3VsbCBvdXQgYW55IHVzZWxlc3MgbGF5ZXJzIGFuZCBhbHNvIHJlcGVhdCBwYXR0
ZXJucyBpbnRvIGFkZGl0aW9uYWwgbGF5ZXJzLgotICAgIHN0eWxlLT5hZGp1c3RCYWNrZ3JvdW5k
TGF5ZXJzKCk7Ci0gICAgc3R5bGUtPmFkanVzdE1hc2tMYXllcnMoKTsKLQotICAgIC8vIERvIHRo
ZSBzYW1lIGZvciBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucy4KLSAgICBzdHlsZS0+YWRqdXN0
QW5pbWF0aW9ucygpOwotICAgIHN0eWxlLT5hZGp1c3RUcmFuc2l0aW9ucygpOwotCi0gICAgLy8g
SW1wb3J0YW50OiBJbnRyaW5zaWMgbWFyZ2lucyBnZXQgYWRkZWQgdG8gY29udHJvbHMgYmVmb3Jl
IHRoZSB0aGVtZSBoYXMgYWRqdXN0ZWQgdGhlIHN0eWxlLCBzaW5jZSB0aGUgdGhlbWUgd2lsbAot
ICAgIC8vIGFsdGVyIGZvbnRzIGFuZCBoZWlnaHRzL3dpZHRocy4KLSAgICBpZiAoZSAmJiBlLT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpICYmIHN0eWxlLT5mb250U2l6ZSgpID49IDExKSB7Ci0gICAg
ICAgIC8vIERvbid0IGFwcGx5IGludHJpbnNpYyBtYXJnaW5zIHRvIGltYWdlIGJ1dHRvbnMuICBU
aGUgZGVzaWduZXIga25vd3MgaG93IGJpZyB0aGUgaW1hZ2VzIGFyZSwKLSAgICAgICAgLy8gc28g
d2UgaGF2ZSB0byB0cmVhdCBhbGwgaW1hZ2UgYnV0dG9ucyBhcyB0aG91Z2ggdGhleSB3ZXJlIGV4
cGxpY2l0bHkgc2l6ZWQuCi0gICAgICAgIGlmICghZS0+aGFzVGFnTmFtZShpbnB1dFRhZykgfHwg
IXN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlKS0+aXNJbWFnZUJ1dHRvbigpKQotICAg
ICAgICAgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7Ci0gICAgfQotCi0gICAgLy8gTGV0
IHRoZSB0aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhlIHN0eWxlLgotICAg
IGlmIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVs
dFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX2hhc1VBQXBwZWFyYW5jZSwg
bV9ib3JkZXJEYXRhLCBtX2JhY2tncm91bmREYXRhLCBtX2JhY2tncm91bmRDb2xvcik7Ci0KLSAg
ICAvLyBJZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0
aGlzIHN0eWxlLgotICAgIGlmIChzdHlsZS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkK
LSAgICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOwotCi0gICAgLy8gRklYTUU6IHdoZW4gZHJvcHBp
bmcgdGhlIC13ZWJraXQgcHJlZml4IG9uIHRyYW5zZm9ybS1zdHlsZSwgd2Ugc2hvdWxkIGFsc28g
aGF2ZSBvcGFjaXR5IDwgMSBjYXVzZSBmbGF0dGVuaW5nLgotICAgIGlmIChzdHlsZS0+cHJlc2Vy
dmVzM0QoKSAmJiAoc3R5bGUtPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFCi0gICAgICAgIHx8IHN0
eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJMRQotICAgICAgICB8fCBzdHlsZS0+aGFzRmlsdGVy
KCkpKQotICAgICAgICBzdHlsZS0+c2V0VHJhbnNmb3JtU3R5bGUzRChUcmFuc2Zvcm1TdHlsZTNE
RmxhdCk7Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChlICYmIGUtPmlzU1ZHRWxlbWVudCgp
KSB7Ci0gICAgICAgIC8vIFNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9tYXNraW5nLmh0
bWwjT3ZlcmZsb3dQcm9wZXJ0eQotICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9T
Q1JPTEwpCi0gICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9ISURERU4pOwotICAgICAg
ICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT0FVVE8pCi0gICAgICAgICAgICBzdHls
ZS0+c2V0T3ZlcmZsb3dZKE9WSVNJQkxFKTsKLQotICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93
WCgpID09IE9TQ1JPTEwpCi0gICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9ISURERU4p
OwotICAgICAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT0FVVE8pCi0gICAgICAg
ICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9WSVNJQkxFKTsKLQotICAgICAgICAvLyBPbmx5IHRo
ZSByb290IDxzdmc+IGVsZW1lbnQgaW4gYW4gU1ZHIGRvY3VtZW50IGZyYWdtZW50IHRyZWUgaG9u
b3JzIGNzcyBwb3NpdGlvbgotICAgICAgICBpZiAoIShlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpz
dmdUYWcpICYmIGUtPnBhcmVudE5vZGUoKSAmJiAhZS0+cGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1l
bnQoKSkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oUmVuZGVyU3R5bGU6OmluaXRp
YWxQb3NpdGlvbigpKTsKLQotICAgICAgICAvLyBSZW5kZXJTVkdSb290IGhhbmRsZXMgem9vbWlu
ZyBmb3IgdGhlIHdob2xlIFNWRyBzdWJ0cmVlLCBzbyBmb3JlaWduT2JqZWN0IGNvbnRlbnQgc2hv
dWxkCi0gICAgICAgIC8vIG5vdCBiZSBzY2FsZWQgYWdhaW4uCi0gICAgICAgIGlmIChlLT5oYXNU
YWdOYW1lKFNWR05hbWVzOjpmb3JlaWduT2JqZWN0VGFnKSkKLSAgICAgICAgICAgIHN0eWxlLT5z
ZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKLSAgICB9Ci0jZW5k
aWYKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqIHJl
Z2lvbkVsZW1lbnQpCi17Ci0gICAgLy8gRklYTUUgKEJVRyA3MjQ3Mik6IFdlIGRvbid0IGFkZCBA
LXdlYmtpdC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVu
dCwKLSAgICAvLyBzbyBhbGwgcmVnaW9uIHJ1bGVzIGFyZSBnbG9iYWwgYnkgZGVmYXVsdC4gVmVy
aWZ5IHdoZXRoZXIgdGhhdCBjYW4gc3RhbmQgb3IgbmVlZHMgY2hhbmdpbmcuCi0KLSAgICB1bnNp
Z25lZCBydWxlc1NpemUgPSBtX2F1dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVT
ZXRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXNTaXplOyArK2kp
IHsKLSAgICAgICAgQVNTRVJUKG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVs
ZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKSk7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVj
dG9yKG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2Vs
ZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKG1fdXNlclN0eWxlKSB7Ci0gICAgICAgIHJ1bGVzU2l6ZSA9IG1fdXNlclN0eWxl
LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV91
c2VyU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQo
KSk7Ci0gICAgICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX3VzZXJTdHlsZS0+bV9y
ZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvciwgcmVnaW9uRWxlbWVudCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCi17Ci0g
ICAgaWYgKCFtX2ZvbnREaXJ0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2hlY2tGb3JUZXh0
U2l6ZUFkanVzdCgpOwotICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSgpLCBt
X3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRT
dHlsZSk7Ci0gICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7Ci0gICAg
bV9mb250RGlydHkgPSBmYWxzZTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpjYWNoZUJvcmRl
ckFuZEJhY2tncm91bmQoKQotewotICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFz
QXBwZWFyYW5jZSgpOwotICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgewotICAgICAgICBtX2Jv
cmRlckRhdGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9
ICptX3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZENvbG9y
ID0gbV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPENT
U1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBl
LCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKLXsKLSAgICByZXR1cm4gcHNldWRvU3R5bGVSdWxl
c0ZvckVsZW1lbnQoZSwgTk9QU0VVRE8sIHJ1bGVzVG9JbmNsdWRlKTsKLX0KLQotUGFzc1JlZlB0
cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQo
RWxlbWVudCogZSwgUHNldWRvSWQgcHNldWRvSWQsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQot
ewotICAgIGlmICghZSB8fCAhZS0+ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9jaGVja2VyLnNldENvbGxlY3RpbmdSdWxlc09u
bHkodHJ1ZSk7Ci0KLSAgICBpbml0RWxlbWVudChlKTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZl
KGUsIDAsIHBzZXVkb0lkKTsKLQotICAgIE1hdGNoUmVzdWx0IGR1bW15OwotICAgIGlmIChydWxl
c1RvSW5jbHVkZSAmIFVBQW5kVXNlckNTU1J1bGVzKSB7Ci0gICAgICAgIC8vIEZpcnN0IHdlIG1h
dGNoIHJ1bGVzIGZyb20gdGhlIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgICAgIG1hdGNoVUFSdWxl
cyhkdW1teSk7Ci0KLSAgICAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCi0g
ICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgICAgIG1hdGNo
VXNlclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwotICAgIH0K
LQotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiAocnVsZXNUb0luY2x1ZGUg
JiBBdXRob3JDU1NSdWxlcykpIHsKLSAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9ICEocnVsZXNU
b0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKTsKLQotICAgICAgICAvLyBDaGVjayB0aGUg
cnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KLSAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhkdW1teSwg
cnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKLQotICAgICAgICBtX3NhbWVPcmlnaW5P
bmx5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9jaGVja2VyLnNldENvbGxlY3RpbmdSdWxlc09u
bHkoZmFsc2UpOwotCi0gICAgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOwotfQotCi1pbmxp
bmUgYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxl
RGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCi17Ci0gICAgbV9keW5hbWljUHNldWRv
ID0gTk9QU0VVRE87Ci0gICAgbV9jaGVja2VyLmNsZWFySGFzVW5rbm93blBzZXVkb0VsZW1lbnRz
KCk7Ci0KLSAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkpIHsKLSAg
ICAgICAgLy8gV2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55IHBzZXVk
byBlbGVtZW50cy4KLSAgICAgICAgaWYgKG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpICE9IE5PUFNF
VURPKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBXZSBrbm93IGEgc3Vm
ZmljaWVudGx5IHNpbXBsZSBzaW5nbGUgcGFydCBzZWxlY3RvciBtYXRjaGVzIHNpbXBseSBiZWNh
dXNlIHdlIGZvdW5kIGl0IGZyb20gdGhlIHJ1bGUgaGFzaC4KLSAgICAgICAgLy8gVGhpcyBpcyBs
aW1pdGVkIHRvIEhUTUwgb25seSBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBuYW1lc3Bh
Y2UuCi0gICAgICAgIGlmIChydWxlRGF0YS5oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRN
TEJhc2VkT25SdWxlSGFzaCgpICYmIG1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoIXJ1bGVEYXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6
dGFnTWF0Y2hlcyhtX2VsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrUmln
aHRtb3N0QXR0cmlidXRlU2VsZWN0b3IobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fY2hlY2tlci5mYXN0
Q2hlY2tTZWxlY3RvcihydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQpOwotICAgIH0KLQot
ICAgIC8vIFNsb3cgcGF0aC4KLSAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0IGNvbnRleHQocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBTZWxlY3RvckNo
ZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOwotICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0g
c3R5bGUoKTsKLSAgICBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA9IG1fcGFyZW50Tm9kZSA/
IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7Ci0gICAgY29udGV4dC5zY29wZSA9IHNj
b3BlOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBtYXRjaCA9IG1fY2hlY2tl
ci5jaGVja1NlbGVjdG9yKGNvbnRleHQsIG1fZHluYW1pY1BzZXVkbyk7Ci0gICAgaWYgKG1hdGNo
ICE9IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpICE9IE5PUFNFVURPICYmIG1fY2hl
Y2tlci5wc2V1ZG9TdHlsZSgpICE9IG1fZHluYW1pY1BzZXVkbykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVn
aW9uU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdpb25F
bGVtZW50KQotewotICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fY2hlY2tlci5jbGVhckhhc1Vua25vd25Qc2V1
ZG9FbGVtZW50cygpOwotICAgIG1fY2hlY2tlci5zZXRQc2V1ZG9TdHlsZShOT1BTRVVETyk7Ci0K
LSAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMgPSBDU1NTZWxl
Y3Rvckxpc3Q6Om5leHQocykpCi0gICAgICAgIGlmIChtX2NoZWNrZXIuY2hlY2tTZWxlY3Rvcihz
LCByZWdpb25FbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotICAgIAotYm9vbCBTdHlsZVJlc29sdmVyOjpkZXRlcm1pbmVTdHlsZXNoZWV0
U2VsZWN0b3JTY29wZXMoU3R5bGVTaGVldEludGVybmFsKiBzdHlsZXNoZWV0LCBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBj
bGFzc1Njb3BlcykKLXsKLSAgICBBU1NFUlQoIXN0eWxlc2hlZXQtPmlzTG9hZGluZygpKTsKLQot
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiA+JiBpbXBvcnRSdWxlcyA9
IHN0eWxlc2hlZXQtPmltcG9ydFJ1bGVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghaW1wb3J0UnVsZXNbaV0t
PnN0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRldGVy
bWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhpbXBvcnRSdWxlc1tpXS0+c3R5bGVTaGVldCgp
LCBpZFNjb3BlcywgY2xhc3NTY29wZXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgcnVsZXMgPSBz
dHlsZXNoZWV0LT5jaGlsZFJ1bGVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1
bGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGUgPSBydWxlc1tp
XS5nZXQoKTsKLSAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpIHsKLSAgICAgICAgICAg
IFN0eWxlUnVsZSogc3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSk7Ci0g
ICAgICAgICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lU2VsZWN0b3JTY29wZXMo
c3R5bGVSdWxlLT5zZWxlY3Rvckxpc3QoKSwgaWRTY29wZXMsIGNsYXNzU2NvcGVzKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fSAKLSAgICAgICAgLy8gRklYTUU6IE1lZGlhIHJ1bGVzIGFuZCBtYXliZSBzb21lIG90aGVycyBj
b3VsZCBiZSBhbGxvd2VkLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTZWxlY3Rv
ck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Ip
Ci17Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3Rvck5hbWVzcGFjZSA9IHNlbGVjdG9y
LT50YWcoKS5uYW1lc3BhY2VVUkkoKTsKLSAgICBpZiAoc2VsZWN0b3JOYW1lc3BhY2UgIT0gc3Rh
ckF0b20gJiYgc2VsZWN0b3JOYW1lc3BhY2UgIT0geGh0bWxOYW1lc3BhY2VVUkkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
Ok5vbmUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChzZWxlY3Rvci0+dGFnKCkgIT0g
c3RhckF0b20pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoU2VsZWN0b3JDaGVja2Vy
Ojppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICByZXR1cm4gc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkIHx8
IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIHNlbGVjdG9yTGlzdENvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcihj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgQ1NTU2VsZWN0b3JMaXN0KiBzZWxl
Y3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCk7Ci0gICAgaWYgKCFzZWxlY3Rvckxp
c3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJTZWxl
Y3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3I7IHN1YlNlbGVjdG9yID0g
Q1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9yKSkgewotICAgICAgICBpZiAoc3ViU2Vs
ZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbW1v
bkF0dHJpYnV0ZVNlbGVjdG9yQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZSkKLXsKLSAgICAvLyBUaGVzZSBhcmUgZXhwbGljaXRseSB0ZXN0ZWQgZm9yIGVxdWFsaXR5IGlu
IGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudC4KLSAgICByZXR1cm4gYXR0cmlidXRlID09IHR5cGVB
dHRyIHx8IGF0dHJpYnV0ZSA9PSByZWFkb25seUF0dHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKQotewotICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFn
SGlzdG9yeSgpKSB7Ci0gICAgICAgIC8vIEFsbG93IGNlcnRhaW4gY29tbW9uIGF0dHJpYnV0ZXMg
KHVzZWQgaW4gdGhlIGRlZmF1bHQgc3R5bGUpIGluIHRoZSBzZWxlY3RvcnMgdGhhdCBtYXRjaCB0
aGUgY3VycmVudCBlbGVtZW50LgotICAgICAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2Vs
ZWN0b3IoKSAmJiAhaXNDb21tb25BdHRyaWJ1dGVTZWxlY3RvckF0dHJpYnV0ZShzZWxlY3Rvci0+
YXR0cmlidXRlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChzZWxl
Y3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAh
PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKLSAgICAgICAgICAgIHNlbGVjdG9yID0gc2Vs
ZWN0b3ItPnRhZ0hpc3RvcnkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5
KCkpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHNlbGVjdG9yTGlzdENvbnRhaW5zVW5j
b21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1SdWxlRGF0YTo6UnVsZURhdGEoU3R5
bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIHVuc2lnbmVkIHBvc2l0aW9uLCBi
b29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0
b3IsIGJvb2wgaW5SZWdpb25SdWxlKQotICAgIDogbV9ydWxlKHJ1bGUpCi0gICAgLCBtX3NlbGVj
dG9yKHNlbGVjdG9yKQotICAgICwgbV9zcGVjaWZpY2l0eShzZWxlY3Rvci0+c3BlY2lmaWNpdHko
KSkKLSAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCi0gICAgLCBtX2hhc0Zhc3RDaGVja2FibGVT
ZWxlY3RvcihjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciAmJiBTZWxlY3RvckNoZWNrZXI6OmlzRmFz
dENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKSkKLSAgICAsIG1faGFzTXVsdGlwYXJ0U2VsZWN0
b3IoISFzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKQotICAgICwgbV9oYXNSaWdodG1vc3RTZWxlY3Rv
ck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRP
blJ1bGVIYXNoKHNlbGVjdG9yKSkKLSAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yKFdlYkNvcmU6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3Rv
cikpCi0gICAgLCBtX2xpbmtNYXRjaFR5cGUoU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5r
TWF0Y2hUeXBlKHNlbGVjdG9yKSkKLSAgICAsIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiho
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQotICAgICwgbV9pc0luUmVnaW9uUnVsZShpblJlZ2lv
blJ1bGUpCi17Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpjb2xsZWN0SWRlbnRpZmllckhhc2hlcyht
X3NlbGVjdG9yLCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMsIG1heGltdW1J
ZGVudGlmaWVyQ291bnQpOwotfQotCi1SdWxlU2V0OjpSdWxlU2V0KCkKLSAgICA6IG1fcnVsZUNv
dW50KDApCi0gICAgLCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQodHJ1ZSkKLXsKLX0KLQotc3Rh
dGljIGlubGluZSB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihTdHlsZVJlc29sdmVy
OjpGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAg
ICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQotICAgICAgICBmZWF0
dXJlcy5pZHNJblJ1bGVzLmFkZChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOwotICAgIGlmIChz
ZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICBmZWF0dXJlcy5hdHRyc0lu
UnVsZXMuYWRkKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAg
IHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgewotICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0ZpcnN0TGluZToKLSAgICAgICAgZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzID0g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQmVmb3Jl
OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FmdGVyOgotICAgICAgICBmZWF0dXJlcy51
c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0xpbms6Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRl
ZDoKLSAgICAgICAgZmVhdHVyZXMudXNlc0xpbmtSdWxlcyA9IHRydWU7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQg
Y29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRhKFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJiBmZWF0
dXJlcywgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQotewotICAgIGJvb2wgZm91bmRTaWJsaW5n
U2VsZWN0b3IgPSBmYWxzZTsKLSAgICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVE
YXRhLnNlbGVjdG9yKCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5
KCkpIHsKLSAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKGZlYXR1cmVzLCBzZWxl
Y3Rvcik7Ci0gICAgICAgIAotICAgICAgICBpZiAoQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxp
c3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKLSAgICAgICAgICAgIGZvciAoQ1NTU2Vs
ZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJTZWxlY3Rvcjsg
c3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViU2VsZWN0b3IpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFmb3VuZFNpYmxpbmdTZWxlY3RvciAmJiBzZWxlY3Rvci0+aXNTaWJs
aW5nU2VsZWN0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmRTaWJsaW5nU2VsZWN0b3Ig
PSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0
dXJlcywgc3ViU2VsZWN0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFm
b3VuZFNpYmxpbmdTZWxlY3RvciAmJiBzZWxlY3Rvci0+aXNTaWJsaW5nU2VsZWN0b3IoKSkKLSAg
ICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGZv
dW5kU2libGluZ1NlbGVjdG9yKQotICAgICAgICBmZWF0dXJlcy5zaWJsaW5nUnVsZXMuYXBwZW5k
KFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2Vs
ZWN0b3IoKSwgcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSk7Ci0gICAgaWYg
KHJ1bGVEYXRhLmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICBm
ZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChTdHlsZVJlc29sdmVyOjpSdWxl
RmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCksIHJ1bGVEYXRhLmhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkpOwotfQotICAgIAotdm9pZCBSdWxlU2V0OjphZGRU
b1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLCBjb25zdCBS
dWxlRGF0YSYgcnVsZURhdGEpCi17Ci0gICAgaWYgKCFrZXkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1hcC5hZGQoa2V5LCBudWxscHRy
KS5pdGVyYXRvci0+c2Vjb25kOwotICAgIGlmICghcnVsZXMpCi0gICAgICAgIHJ1bGVzID0gYWRv
cHRQdHIobmV3IFZlY3RvcjxSdWxlRGF0YT4pOwotICAgIHJ1bGVzLT5hcHBlbmQocnVsZURhdGEp
OwotfQotCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rv
ciogc2VsZWN0b3IsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VG
YXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCi17Ci0gICAgUnVsZURhdGEgcnVs
ZURhdGEocnVsZSwgc2VsZWN0b3IsIG1fcnVsZUNvdW50KyssIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpblJlZ2lvblJ1bGUpOwotICAgIGNvbGxl
Y3RGZWF0dXJlc0Zyb21SdWxlRGF0YShtX2ZlYXR1cmVzLCBydWxlRGF0YSk7Ci0KLSAgICBpZiAo
c2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKSB7Ci0gICAgICAgIGFkZFRvUnVs
ZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1faWRSdWxlcywgcnVsZURhdGEpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6Q2xhc3MpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmlt
cGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlRGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKHNlbGVjdG9yLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgYWRk
VG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9zaGFkb3dQc2V1ZG9FbGVtZW50
UnVsZXMsIHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoU2VsZWN0
b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKSB7Ci0gICAg
ICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgewotICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9MaW5rOgotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNp
dGVkOgotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgotICAgICAgICAg
ICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQocnVsZURhdGEpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoKLSAgICAgICAg
ICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLmFwcGVuZChydWxlRGF0YSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPnRhZygpLmxvY2FsTmFtZSgpOwotICAgIGlm
IChsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KGxvY2FsTmFt
ZS5pbXBsKCksIG1fdGFnUnVsZXMsIHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChydWxlRGF0YSk7Ci19Ci0KLXZvaWQgUnVsZVNl
dDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSogcnVsZSkKLXsKLSAgICBtX3BhZ2VSdWxlcy5h
cHBlbmQocnVsZSk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVS
ZWdpb24qIHJlZ2lvblJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKLXsKLSAg
ICBPd25QdHI8UnVsZVNldD4gcmVnaW9uUnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAg
IC8vIFRoZSByZWdpb24gcnVsZSBzZXQgc2hvdWxkIHRha2UgaW50byBhY2NvdW50IHRoZSBwb3Np
dGlvbiBpbnNpZGUgdGhlIHBhcmVudCBydWxlIHNldC4KLSAgICAvLyBPdGhlcndpc2UsIHRoZSBy
dWxlcyBpbnNpZGUgcmVnaW9uIGJsb2NrIG1pZ2h0IGJlIGluY29ycmVjdGx5IHBvc2l0aW9uZWQg
YmVmb3JlIG90aGVyIHNpbWlsYXIgcnVsZXMgZnJvbQotICAgIC8vIHRoZSBzdHlsZXNoZWV0IHRo
YXQgY29udGFpbnMgdGhlIHJlZ2lvbiBibG9jay4KLSAgICByZWdpb25SdWxlU2V0LT5tX3J1bGVD
b3VudCA9IG1fcnVsZUNvdW50OwotCi0gICAgLy8gQ29sbGVjdCB0aGUgcmVnaW9uIHJ1bGVzIGlu
dG8gYSBydWxlIHNldAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYg
Y2hpbGRSdWxlcyA9IHJlZ2lvblJ1bGUtPmNoaWxkUnVsZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHlsZVJ1bGVC
YXNlKiByZWdpb25TdHlsaW5nUnVsZSA9IGNoaWxkUnVsZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlm
IChyZWdpb25TdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgIHJlZ2lvblJ1
bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihyZWdpb25TdHlsaW5n
UnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHRydWUsIHRydWUpOwotICAgIH0KLSAg
ICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUgY291bnQgc28gdGhhdCBwcm9wZXIgb3JkZXIg
aXMgbWFpbnRhaW5lZAotICAgIG1fcnVsZUNvdW50ID0gcmVnaW9uUnVsZVNldC0+bV9ydWxlQ291
bnQ7Ci0KLSAgICBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmFwcGVuZChSdWxlU2V0U2Vs
ZWN0b3JQYWlyKHJlZ2lvblJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCksIHJlZ2lvblJ1bGVT
ZXQucmVsZWFzZSgpKSk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5
bGVTaGVldEludGVybmFsKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVt
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVNlbGVjdG9yLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSkKLXsKLSAgICBBU1NFUlQoc2hlZXQpOwotCi0gICAgLy8gTm8gbWVkaWEgaW1wbGllcyAiYWxs
IiwgYnV0IGlmIGEgbWVkaWEgbGlzdCBleGlzdHMgaXQgbXVzdAotICAgIC8vIGNvbnRhaW4gb3Vy
IGN1cnJlbnQgbWVkaXVtCi0gICAgaWYgKHNoZWV0LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaXVt
LmV2YWwoc2hlZXQtPm1lZGlhUXVlcmllcygpLCBzdHlsZVNlbGVjdG9yKSkKLSAgICAgICAgcmV0
dXJuOyAvLyB0aGUgc3R5bGUgc2hlZXQgZG9lc24ndCBhcHBseQotICAgIAotICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiA+JiBpbXBvcnRSdWxlcyA9IHNoZWV0LT5pbXBv
cnRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbXBvcnRSdWxlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBTdHlsZVJ1bGVJbXBvcnQqIGltcG9ydFJ1bGUgPSBpbXBvcnRS
dWxlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKGltcG9ydFJ1bGUtPnN0eWxlU2hlZXQoKSAmJiAo
IWltcG9ydFJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsKGltcG9ydFJ1bGUtPm1l
ZGlhUXVlcmllcygpLCBzdHlsZVNlbGVjdG9yKSkpCi0gICAgICAgICAgICBhZGRSdWxlc0Zyb21T
aGVldChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgc3R5bGVTZWxlY3Rvciwgc2Nv
cGUpOwotICAgIH0KLSAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSBzdHlsZVNl
bGVjdG9yICYmIHN0eWxlU2VsZWN0b3ItPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNh
blJlcXVlc3Qoc2hlZXQtPmJhc2VVUkwoKSk7Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0
eWxlUnVsZUJhc2U+ID4mIHJ1bGVzID0gc2hlZXQtPmNoaWxkUnVsZXMoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxl
QmFzZSogcnVsZSA9IHJ1bGVzW2ldLmdldCgpOwotCi0gICAgICAgIEFTU0VSVCghcnVsZS0+aXNJ
bXBvcnRSdWxlKCkpOwotICAgICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAg
ICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxlKSwgaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKLSAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNQYWdl
UnVsZSgpKQotICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFn
ZSo+KHJ1bGUpKTsKLSAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNNZWRpYVJ1bGUoKSkgewotICAg
ICAgICAgICAgU3R5bGVSdWxlTWVkaWEqIG1lZGlhUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVs
ZU1lZGlhKj4ocnVsZSk7Ci0KLSAgICAgICAgICAgIGlmICgoIW1lZGlhUnVsZS0+bWVkaWFRdWVy
aWVzKCkgfHwgbWVkaXVtLmV2YWwobWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSwgc3R5bGVTZWxl
Y3RvcikpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHJhdmVyc2UgY2hpbGQgZWxlbWVudHMgb2Yg
dGhlIEBtZWRpYSBydWxlLgotICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IG1lZGlhUnVsZS0+Y2hpbGRSdWxlcygpOwotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBjaGlsZFJ1bGVzLnNpemUoKTsg
KytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0eWxlUnVsZUJhc2UqIGNoaWxkUnVsZSA9IGNo
aWxkUnVsZXNbal0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGUtPmlz
U3R5bGVSdWxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGlj
X2Nhc3Q8U3R5bGVSdWxlKj4oY2hpbGRSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwg
IXNjb3BlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRSdWxlLT5pc1BhZ2VS
dWxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxT
dHlsZVJ1bGVQYWdlKj4oY2hpbGRSdWxlKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGNoaWxkUnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9u
dC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHlsZVJ1bGVGb250
RmFjZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlRm9udEZhY2UqPihjaGls
ZFJ1bGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVj
dG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGVTZWxlY3Rvci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzS2V5ZnJhbWVzUnVs
ZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0
aGlzIGtleWZyYW1lIHJ1bGUgdG8gb3VyIHNldC4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FKEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVk
IHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzY29wZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nh
c3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4oY2hpbGRSdWxlKSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9ICAgLy8gZm9yIHJ1bGVzCi0gICAgICAgICAgICB9ICAgLy8g
aWYgcnVsZXMKLSAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0
eWxlU2VsZWN0b3IpIHsKLSAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIg
c2V0LgotICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYxKTogV2UgZG9uJ3QgYWRkIEBmb250
LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KLSAgICAg
ICAgICAgIGlmIChzY29wZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHls
ZVJ1bGVGb250RmFjZSo+KHJ1bGUpOwotICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNl
bGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOwotICAgICAgICAgICAgc3R5
bGVTZWxlY3Rvci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKLSAgICAgICAg
fSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBy
dWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgotICAgICAgICAgICAg
aWYgKHNjb3BlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3R5bGVT
ZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMq
PihydWxlKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNSZWdpb25SdWxlKCkgJiYgc3R5
bGVTZWxlY3RvcikgewotICAgICAgICAgICAgLy8gRklYTUUgKEJVRyA3MjQ3Mik6IFdlIGRvbid0
IGFkZCBALXdlYmtpdC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhl
IG1vbWVudC4KLSAgICAgICAgICAgIGlmIChzY29wZSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGFkZFJlZ2lvblJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9u
Kj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCi0gICAgICAgIHNocmlua1RvRml0KCk7
Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVsZSwgYm9vbCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBi
b29sIGlzSW5SZWdpb25SdWxlKQotewotICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMgPSBydWxlLT5z
ZWxlY3Rvckxpc3QoKS5maXJzdCgpOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQot
ICAgICAgICBhZGRSdWxlKHJ1bGUsIHMsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNhblVz
ZUZhc3RDaGVja1NlbGVjdG9yLCBpc0luUmVnaW9uUnVsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKLXsK
LSAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwotICAg
IGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2hyaW5rVG9GaXQoKTsKLX0KLQot
dm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCi17Ci0gICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0
KG1faWRSdWxlcyk7Ci0gICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1fY2xhc3NSdWxlcyk7Ci0g
ICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1fdGFnUnVsZXMpOwotICAgIHNocmlua01hcFZlY3Rv
cnNUb0ZpdChtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyk7Ci0gICAgbV9saW5rUHNldWRvQ2xh
c3NSdWxlcy5zaHJpbmtUb0ZpdCgpOwotICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLnNocmlu
a1RvRml0KCk7Ci0gICAgbV91bml2ZXJzYWxSdWxlcy5zaHJpbmtUb0ZpdCgpOwotICAgIG1fcGFn
ZVJ1bGVzLnNocmlua1RvRml0KCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vIHRoaXMgaXMgbW9zdGx5IGJvcmluZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBjZXJ0
YWluIHJ1bGUgdG8gdGhlIHJlbmRlcnN0eWxlLi4uCi0KLUxlbmd0aCBTdHlsZVJlc29sdmVyOjpj
b252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVy
KQotewotICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZSA/IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0
VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJh
Y3Rpb25Db252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGUsIHJv
b3RTdHlsZSwgbXVsdGlwbGllcikgOiBMZW5ndGgoVW5kZWZpbmVkKTsKLX0KLQotTGVuZ3RoIFN0
eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBk
b3VibGUgbXVsdGlwbGllcikKLXsKLSAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUgPyBwcmltaXRp
dmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkRmxvYXRDb252ZXJzaW9uIHwgUGVyY2VudENv
bnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJz
aW9uPihzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBsaWVyKSA6IExlbmd0aChVbmRlZmluZWQpOwot
fQotCi10ZW1wbGF0ZSA8Ym9vbCBhcHBseUZpcnN0Pgotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxl
KiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIGJvb2wgZmlsdGVy
UmVnaW9uUHJvcGVydGllcykKLXsKLSAgICBBU1NFUlQoIWZpbHRlclJlZ2lvblByb3BlcnRpZXMg
fHwgbV9yZWdpb25Gb3JTdHlsaW5nKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGUoZG9j
dW1lbnQoKSwgcnVsZSk7Ci0KLSAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydGll
cy0+cHJvcGVydHlDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0
eUNvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIGN1cnJlbnQgPSBwcm9w
ZXJ0aWVzLT5wcm9wZXJ0eUF0KGkpOwotICAgICAgICBpZiAoaXNJbXBvcnRhbnQgIT0gY3VycmVu
dC5pc0ltcG9ydGFudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpbmhl
cml0ZWRPbmx5ICYmICFjdXJyZW50LmlzSW5oZXJpdGVkKCkpIHsKLSAgICAgICAgICAgIC8vIElm
IHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBleHBsaWNpdGx5IGluaGVyaXRlZCwgd2UgbmVlZCB0byBh
cHBseSBmdXJ0aGVyIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcwotICAgICAgICAgICAgLy8gYXMg
dGhleSBtaWdodCBvdmVycmlkZSB0aGUgdmFsdWUgaW5oZXJpdGVkIGhlcmUuIEZvciB0aGlzIHJl
YXNvbiB3ZSBkb24ndCBhbGxvdyBkZWNsYXJhdGlvbnMgd2l0aAotICAgICAgICAgICAgLy8gZXhw
bGljaXRseSBpbmhlcml0ZWQgcHJvcGVydGllcyB0byBiZSBjYWNoZWQuCi0gICAgICAgICAgICBB
U1NFUlQoIWN1cnJlbnQudmFsdWUoKS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkgPSBj
dXJyZW50LmlkKCk7Ci0KLSAgICAgICAgaWYgKGZpbHRlclJlZ2lvblByb3BlcnRpZXMgJiYgIVN0
eWxlUmVzb2x2ZXI6OmlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KHByb3BlcnR5KSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChhcHBseUZpcnN0KSB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChmaXJzdENTU1Byb3BlcnR5ID09IENTU1Byb3BlcnR5Q29sb3IsIENT
U19jb2xvcl9pc19maXJzdF9wcm9wZXJ0eSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChD
U1NQcm9wZXJ0eVpvb20gPT0gQ1NTUHJvcGVydHlDb2xvciArIDE4LCBDU1Nfem9vbV9pc19lbmRf
b2ZfZmlyc3RfcHJvcF9yYW5nZSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9w
ZXJ0eUxpbmVIZWlnaHQgPT0gQ1NTUHJvcGVydHlab29tICsgMSwgQ1NTX2xpbmVfaGVpZ2h0X2lz
X2FmdGVyX3pvb20pOwotICAgICAgICAgICAgLy8gZ2l2ZSBzcGVjaWFsIHByaW9yaXR5IHRvIGZv
bnQteHh4LCBjb2xvciBwcm9wZXJ0aWVzLCBldGMKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA+
IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIC8vIHdlIGFwcGx5IGxpbmUtaGVpZ2h0IGxhdGVyCi0gICAgICAgICAgICBpZiAocHJv
cGVydHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgbV9saW5l
SGVpZ2h0VmFsdWUgPSBjdXJyZW50LnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwg
Y3VycmVudC52YWx1ZSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgIGFw
cGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwotICAgIH0KLSAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFByb2Nlc3NSdWxlKGNvb2tpZSk7Ci19Ci0KLXRl
bXBsYXRlIDxib29sIGFwcGx5Rmlyc3Q+Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sIGlzSW1wb3J0
YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCi17
Ci0gICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X3N0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGluaykgewotICAgICAgICBmb3IgKGlu
dCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7Ci0gICAgICAgICAgICBjb25z
dCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRj
aGVkUHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBt
YXRjaGVkUHJvcGVydGllcy5saW5rTWF0Y2hUeXBlOwotICAgICAgICAgICAgLy8gRklYTUU6IEl0
IHdvdWxkIGJlIG5pY2VyIHRvIHBhc3MgdGhlc2UgYXMgYXJndW1lbnRzIGJ1dCB0aGF0IHJlcXVp
cmVzIGNoYW5nZXMgaW4gbWFueSBwbGFjZXMuCi0gICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGlu
azsKLSAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGxpbmtN
YXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKLQotICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0aWVzPGFwcGx5Rmlyc3Q+KG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMu
Z2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRl
ZE9ubHksIG1hdGNoZWRQcm9wZXJ0aWVzLmlzSW5SZWdpb25SdWxlKTsKLSAgICAgICAgfQotICAg
ICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRydWU7Ci0gICAgICAgIG1fYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsK
LSAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0
Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07Ci0gICAgICAgIGFwcGx5UHJvcGVydGllczxh
cHBseUZpcnN0PihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3Vs
dC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBtYXRjaGVkUHJv
cGVydGllcy5pc0luUmVnaW9uUnVsZSk7Ci0gICAgfQotfQotCi11bnNpZ25lZCBTdHlsZVJlc29s
dmVyOjpjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVz
KiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBzaXplKQotewotICAgIAotICAgIHJldHVybiBTdHJpbmdI
YXNoZXI6Omhhc2hNZW1vcnkocHJvcGVydGllcywgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAq
IHNpemUpOwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hS
YW5nZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQotewotICAgIHJl
dHVybiBhLmZpcnN0VUFSdWxlID09IGIuZmlyc3RVQVJ1bGUKLSAgICAgICAgJiYgYS5sYXN0VUFS
dWxlID09IGIubGFzdFVBUnVsZQotICAgICAgICAmJiBhLmZpcnN0QXV0aG9yUnVsZSA9PSBiLmZp
cnN0QXV0aG9yUnVsZQotICAgICAgICAmJiBhLmxhc3RBdXRob3JSdWxlID09IGIubGFzdEF1dGhv
clJ1bGUKLSAgICAgICAgJiYgYS5maXJzdFVzZXJSdWxlID09IGIuZmlyc3RVc2VyUnVsZQotICAg
ICAgICAmJiBhLmxhc3RVc2VyUnVsZSA9PSBiLmxhc3RVc2VyUnVsZTsKLX0KLQotYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBhLCBjb25zdCBTdHlsZVJl
c29sdmVyOjpNYXRjaFJhbmdlcyYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwotfQotCi1i
b29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGEs
IGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBiKQotewotICAgIHJldHVy
biBhLnByb3BlcnRpZXMgPT0gYi5wcm9wZXJ0aWVzICYmIGEubGlua01hdGNoVHlwZSA9PSBiLmxp
bmtNYXRjaFR5cGU7Ci19Ci0KLWJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZVJlc29sdmVyOjpN
YXRjaGVkUHJvcGVydGllcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRp
ZXMmIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotY29uc3QgU3R5bGVSZXNvbHZl
cjo6TWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0
Y2hSZXN1bHQpCi17Ci0gICAgQVNTRVJUKGhhc2gpOwotCi0gICAgTWF0Y2hlZFByb3BlcnRpZXND
YWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsK
LSAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQt
PnNlY29uZDsKLQotICAgIHNpemVfdCBzaXplID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuc2l6ZSgpOwotICAgIGlmIChzaXplICE9IGNhY2hlSXRlbS5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIGlmIChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXSAh
PSBjYWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRpZXNbaV0pCi0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgaWYgKGNhY2hlSXRlbS5yYW5nZXMgIT0gbWF0Y2hSZXN1bHQucmFuZ2VzKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gJmNhY2hlSXRlbTsKLX0KLQotdm9pZCBTdHls
ZVJlc29sdmVyOjphZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIHVuc2lnbmVkIGhhc2gsIGNv
bnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCkKLXsKLSAgICBzdGF0aWMgdW5zaWduZWQgbWF0
Y2hlZERlY2xhcmF0aW9uQ2FjaGVBZGRpdGlvbnNCZXR3ZWVuU3dlZXBzID0gMTAwOwotICAgIGlm
ICgrK21fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwID49IG1h
dGNoZWREZWNsYXJhdGlvbkNhY2hlQWRkaXRpb25zQmV0d2VlblN3ZWVwcykgewotICAgICAgICBz
d2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKLSAgICAgICAgbV9tYXRjaGVkUHJvcGVydGll
c0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAgPSAwOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNoKTsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSBjYWNoZUl0ZW07Ci0gICAgY2Fj
aGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLmFwcGVuZChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVy
dGllcyk7Ci0gICAgY2FjaGVJdGVtLnJhbmdlcyA9IG1hdGNoUmVzdWx0LnJhbmdlczsKLSAgICAv
LyBOb3RlIHRoYXQgd2UgZG9uJ3QgY2FjaGUgdGhlIG9yaWdpbmFsIFJlbmRlclN0eWxlIGluc3Rh
bmNlLiBJdCBtYXkgYmUgZnVydGhlciBtb2RpZmllZC4KLSAgICAvLyBUaGUgUmVuZGVyU3R5bGUg
aW4gdGhlIGNhY2hlIGlzIHJlYWxseSBqdXN0IGEgaG9sZGVyIGZvciB0aGUgc3Vic3RydWN0dXJl
cyBhbmQgbmV2ZXIgdXNlZCBhcy1pcy4KLSAgICBjYWNoZUl0ZW0ucmVuZGVyU3R5bGUgPSBSZW5k
ZXJTdHlsZTo6Y2xvbmUoc3R5bGUpOwotICAgIGNhY2hlSXRlbS5wYXJlbnRSZW5kZXJTdHlsZSA9
IFJlbmRlclN0eWxlOjpjbG9uZShwYXJlbnRTdHlsZSk7Ci0gICAgbV9tYXRjaGVkUHJvcGVydGll
c0NhY2hlLmFkZChoYXNoLCBjYWNoZUl0ZW0pOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Omlu
dmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCkKLXsKLSAgICBtX21hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUuY2xlYXIoKTsKLX0KLQotc3RhdGljIGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCi17Ci0gICAgLy8gRklYTUU6
IENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGUgbW9kaWZpZXMgc3RhdGUgd2hlbiBhcHBseWlu
ZyB0byBkb2N1bWVudCBlbGVtZW50LiBXZSBjYW4ndCBza2lwIHRoZSBhcHBseWluZyBieSBjYWNo
aW5nLgotICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpICYmIGVsZW1lbnQtPmRvY3VtZW50KCktPndyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVs
ZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZS0+dW5pcXVlKCkg
fHwgKHN0eWxlLT5zdHlsZVR5cGUoKSAhPSBOT1BTRVVETyAmJiBwYXJlbnRTdHlsZS0+dW5pcXVl
KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0eWxlLT5oYXNBcHBlYXJhbmNl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3R5bGUtPnpvb20oKSAhPSBSZW5k
ZXJTdHlsZTo6aW5pdGlhbFpvb20oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIFRo
ZSBjYWNoZSBhc3N1bWVzIHN0YXRpYyBrbm93bGVkZ2UgYWJvdXQgd2hpY2ggcHJvcGVydGllcyBh
cmUgaW5oZXJpdGVkLgotICAgIGlmIChwYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRl
ZFByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0KQotewotICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNo
UmVzdWx0LmlzQ2FjaGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSkgOiAwOwotICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7Ci0g
ICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7Ci0gICAg
aWYgKGNhY2hlSGFzaCAmJiAoY2FjaGVJdGVtID0gZmluZEZyb21NYXRjaGVkUHJvcGVydGllc0Nh
Y2hlKGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpKSkgewotICAgICAgICAvLyBXZSBjYW4gYnVpbGQg
dXAgdGhlIHN0eWxlIGJ5IGNvcHlpbmcgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gYW4g
ZWFybGllciBzdHlsZSBvYmplY3QgYnVpbHQgdXNpbmcgdGhlIHNhbWUgZXhhY3QKLSAgICAgICAg
Ly8gc3R5bGUgZGVjbGFyYXRpb25zLiBXZSB0aGVuIG9ubHkgbmVlZCB0byBhcHBseSB0aGUgaW5o
ZXJpdGVkIHByb3BlcnRpZXMsIGlmIGFueSwgYXMgdGhlaXIgdmFsdWVzIGNhbiBkZXBlbmQgb24g
dGhlIAotICAgICAgICAvLyBlbGVtZW50IGNvbnRleHQuIFRoaXMgaXMgZmFzdCBhbmQgc2F2ZXMg
bWVtb3J5IGJ5IHJldXNpbmcgdGhlIHN0eWxlIGRhdGEgc3RydWN0dXJlcy4KLSAgICAgICAgbV9z
dHlsZS0+Y29weU5vbkluaGVyaXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7
Ci0gICAgICAgIGlmIChtX3BhcmVudFN0eWxlLT5pbmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRl
bS0+cGFyZW50UmVuZGVyU3R5bGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBFSW5zaWRlTGluayBs
aW5rU3RhdHVzID0gbV9zdHlsZS0+aW5zaWRlTGluaygpOwotICAgICAgICAgICAgLy8gSWYgdGhl
IGNhY2hlIGl0ZW0gcGFyZW50IHN0eWxlIGhhcyBpZGVudGljYWwgaW5oZXJpdGVkIHByb3BlcnRp
ZXMgdG8gdGhlIGN1cnJlbnQgcGFyZW50IHN0eWxlIHRoZW4gdGhlCi0gICAgICAgICAgICAvLyBy
ZXN1bHRpbmcgc3R5bGUgd2lsbCBiZSBpZGVudGljYWwgdG9vLiBXZSBjb3B5IHRoZSBpbmhlcml0
ZWQgcHJvcGVydGllcyBvdmVyIGZyb20gdGhlIGNhY2hlIGFuZCBhcmUgZG9uZS4KLSAgICAgICAg
ICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwot
ICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBs
aWtlIGFuIGluaGVyaXRlZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUg
aXQuCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9
IHRydWU7IAotICAgIH0KLSAgICAvLyBOb3cgd2UgaGF2ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVs
ZXMgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLiBXYWxrIHRoZSBydWxlcyBhbmQgYXBwbHkKLSAg
ICAvLyBoaWdoLXByaW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRp
ZXMgdGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KLSAgICAvLyBUaGUgb3JkZXIgaXMg
KDEpIGhpZ2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0
YW50LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKLSAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBv
cnRhbnQuCi0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8dHJ1ZT4obWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8dHJ1ZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5m
aXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJ
bmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KG1hdGNoUmVz
dWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPHRydWU+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
Zmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwotCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5l
ZmZlY3RpdmVab29tKCkgIT0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIG1f
Zm9udERpcnR5ID0gdHJ1ZTsKLSAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRh
dGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsKLQotICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNl
dCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KLSAgICBpZiAo
bV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5l
SGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7Ci0KLSAgICAvLyBNYW55IHByb3BlcnRpZXMgZGVw
ZW5kIG9uIHRoZSBmb250LiBJZiBpdCBjaGFuZ2VzIHdlIGp1c3QgYXBwbHkgYWxsIHByb3BlcnRp
ZXMuCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKSAhPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKSkKLSAgICAgICAgYXBwbHlJ
bmhlcml0ZWRPbmx5ID0gZmFsc2U7Ci0KLSAgICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBwcmlvcml0
eSBVQSBwcm9wZXJ0aWVzLgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KG1hdGNo
UmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICAKLSAgICAvLyBD
YWNoZSBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIHNvIHRoYXQgd2UgY2FuIGV4YW1pbmUgdGhl
bSBsYXRlci4KLSAgICBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKLSAgICAKLSAgICAvLyBO
b3cgZG8gdGhlIGF1dGhvciBhbmQgdXNlciBub3JtYWwgcHJpb3JpdHkgcHJvcGVydGllcyBhbmQg
YWxsIHRoZSAhaW1wb3J0YW50IHByb3BlcnRpZXMuCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxmYWxzZT4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVs
ZSArIDEsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5o
ZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4obWF0Y2hSZXN1
bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5
SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4obWF0Y2hS
ZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgCi0gICAgbG9hZFBl
bmRpbmdJbWFnZXMoKTsKLSAgICAKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgbG9hZFBl
bmRpbmdTaGFkZXJzKCk7Ci0jZW5kaWYKLSAgICAKLSAgICBBU1NFUlQoIW1fZm9udERpcnR5KTsK
LSAgICAKLSAgICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKG1fZWxlbWVudCwg
bV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBhZGRU
b01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUobV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSwgY2Fj
aGVIYXNoLCBtYXRjaFJlc3VsdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUGFn
ZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25zdCBTdHlsZVJ1bGVQYWdlKiByMikK
LXsKLSAgICByZXR1cm4gcjEtPnNlbGVjdG9yKCktPnNwZWNpZmljaXR5KCkgPCByMi0+c2VsZWN0
b3IoKS0+c3BlY2lmaWNpdHkoKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VS
dWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdl
LCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQotewotICAgIGlmICgh
cnVsZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4gbWF0
Y2hlZFBhZ2VSdWxlczsKLSAgICBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QobWF0Y2hlZFBhZ2VSdWxl
cywgcnVsZXMtPnBhZ2VSdWxlcygpLCBpc0xlZnRQYWdlLCBpc0ZpcnN0UGFnZSwgcGFnZU5hbWUp
OwotICAgIGlmIChtYXRjaGVkUGFnZVJ1bGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgc3RkOjpzdGFibGVfc29ydChtYXRjaGVkUGFnZVJ1bGVzLmJlZ2luKCksIG1hdGNoZWRQ
YWdlUnVsZXMuZW5kKCksIGNvbXBhcmVQYWdlUnVsZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1hdGNoZWRQYWdlUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGFkZE1hdGNo
ZWRQcm9wZXJ0aWVzKHJlc3VsdCwgbWF0Y2hlZFBhZ2VSdWxlc1tpXS0+cHJvcGVydGllcygpKTsK
LX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0
eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLCBjb25zdCBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+
JiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcm
IHBhZ2VOYW1lKQotewotICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBTdHlsZVJ1bGVQYWdl
KiBydWxlID0gcnVsZXNbaV07Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JM
b2NhbE5hbWUgPSBydWxlLT5zZWxlY3RvcigpLT50YWcoKS5sb2NhbE5hbWUoKTsKLSAgICAgICAg
aWYgKHNlbGVjdG9yTG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIHNlbGVjdG9yTG9jYWxOYW1lICE9
IHBhZ2VOYW1lKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIENTU1NlbGVjdG9yOjpQ
c2V1ZG9UeXBlIHBzZXVkb1R5cGUgPSBydWxlLT5zZWxlY3RvcigpLT5wc2V1ZG9UeXBlKCk7Ci0g
ICAgICAgIGlmICgocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTGVmdFBhZ2UgJiYg
IWlzTGVmdFBhZ2UpCi0gICAgICAgICAgICB8fCAocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvUmlnaHRQYWdlICYmIGlzTGVmdFBhZ2UpCi0gICAgICAgICAgICB8fCAocHNldWRvVHlw
ZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RQYWdlICYmICFpc0ZpcnN0UGFnZSkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVy
dGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQuCi0gICAgICAgIFN0eWxlUHJvcGVydHlTZXQq
IHByb3BlcnRpZXMgPSBydWxlLT5wcm9wZXJ0aWVzKCk7Ci0gICAgICAgIGlmICghcHJvcGVydGll
cyB8fCBwcm9wZXJ0aWVzLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAg
ICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7Ci0gICAgfQotfQotCi1ib29sIFN0eWxlUmVz
b2x2ZXI6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKLXsKLSAgICBib29sIGlzRmly
c3RQYWdlTGVmdCA9IGZhbHNlOwotICAgIGlmICghbV9yb290RWxlbWVudFN0eWxlLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIGlzRmlyc3RQYWdlTGVmdCA9IHRydWU7Ci0KLSAg
ICByZXR1cm4gKHBhZ2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAxIDogMCkpICUgMjsKLX0K
LQotYm9vbCBTdHlsZVJlc29sdmVyOjppc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBJbiBjYXNlIG9mIGZvcmNlZCBsZWZ0L3JpZ2h0IHBhZ2UsIHBhZ2Ug
YXQgaW5kZXggMSAobm90IDApIGNhbiBiZSB0aGUgZmlyc3QgcGFnZS4KLSAgICByZXR1cm4gKCFw
YWdlSW5kZXgpOwotfQotCi1TdHJpbmcgU3R5bGVSZXNvbHZlcjo6cGFnZU5hbWUoaW50IC8qIHBh
Z2VJbmRleCAqLykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHBhZ2UgaW5kZXgg
dG8gcGFnZSBuYW1lIG1hcHBpbmcuCi0gICAgcmV0dXJuICIiOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgTGlzdFR5cGU+Ci1zdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0
eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdyYXBwZXJNYXAsIExpc3RUeXBlKiBs
aXN0VHlwZSkKLXsKLSAgICBpZiAoIWxpc3RUeXBlKQotICAgICAgICByZXR1cm47Ci0gICAgdW5z
aWduZWQgc2l6ZSA9IGxpc3RUeXBlLT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIENTU1J1bGUqIGNzc1J1bGUgPSBsaXN0VHlwZS0+
aXRlbShpKTsKLSAgICAgICAgaWYgKGNzc1J1bGUtPmlzSW1wb3J0UnVsZSgpKQotICAgICAgICAg
ICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwgc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0
UnVsZSo+KGNzc1J1bGUpLT5zdHlsZVNoZWV0KCkpOwotICAgICAgICBlbHNlIGlmIChjc3NSdWxl
LT5pc01lZGlhUnVsZSgpKQotICAgICAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBl
ck1hcCwgc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4oY3NzUnVsZSkpOwotICAgICAgICBlbHNl
IGlmIChjc3NSdWxlLT5pc1JlZ2lvblJ1bGUoKSkKLSAgICAgICAgICAgIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PFdlYktpdENTU1JlZ2lvblJ1bGUqPihjc3NS
dWxlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGNzc1J1bGUtPmlzU3R5bGVSdWxlKCkpIHsKLSAgICAg
ICAgICAgIENTU1N0eWxlUnVsZSogY3NzU3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVS
dWxlKj4oY3NzUnVsZSk7Ci0gICAgICAgICAgICB3cmFwcGVyTWFwLmFkZChjc3NTdHlsZVJ1bGUt
PnN0eWxlUnVsZSgpLCBjc3NTdHlsZVJ1bGUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0
aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxD
U1NTdHlsZVJ1bGU+ID4mIHdyYXBwZXJNYXAsIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
ID4mIHNoZWV0V3JhcHBlclNldCwgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0KQotewot
ICAgIGlmICghc3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiBzdHlsZVNoZWV0V3JhcHBlciA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShzdHlsZVNo
ZWV0KTsKLSAgICBzaGVldFdyYXBwZXJTZXQuYWRkKHN0eWxlU2hlZXRXcmFwcGVyKTsKLSAgICBj
b2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzdHlsZVNoZWV0V3JhcHBlci5nZXQoKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxl
KiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYgd3JhcHBlck1hcCwgSGFzaFNldDxSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gPiYgc2hlZXRXcmFwcGVyU2V0LCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0g
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBzdHlsZVNoZWV0cyA9IGRvY3Vt
ZW50LT5zdHlsZVNoZWV0cygpLT52ZWN0b3IoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3R5bGVTaGVldCogc3R5bGVT
aGVldCA9IHN0eWxlU2hlZXRzW2ldLmdldCgpOwotICAgICAgICBpZiAoIXN0eWxlU2hlZXQtPmlz
Q1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbGxlY3RD
U1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHls
ZVNoZWV0KSk7Ci0gICAgfQotICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHNo
ZWV0V3JhcHBlclNldCwgZG9jdW1lbnQtPnBhZ2VVc2VyU2hlZXQoKSk7Ci19Ci0KLUNTU1N0eWxl
UnVsZSogU3R5bGVSZXNvbHZlcjo6ZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3RvcihT
dHlsZVJ1bGUqIHJ1bGUpCi17Ci0gICAgaWYgKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9D
U1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgc2ltcGxlRGVmYXVs
dFN0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRv
Q1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIGRlZmF1bHRTdHls
ZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09N
V3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBxdWlya3NTdHlsZVNoZWV0
KTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBl
ck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBzdmdTdHlsZVNoZWV0KTsKLSAgICAg
ICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9z
dHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBtYXRoTUxTdHlsZVNoZWV0KTsKLSAgICAgICAgY29s
bGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNo
ZWV0Q1NTT01XcmFwcGVyU2V0LCBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk7Ci0gICAgICAgIGNv
bGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVT
aGVldENTU09NV3JhcHBlclNldCwgZnVsbHNjcmVlblN0eWxlU2hlZXQpOwotCi0gICAgICAgIGNv
bGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVT
aGVldENTU09NV3JhcHBlclNldCwgZG9jdW1lbnQoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX3N0
eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLmdldChydWxlKS5nZXQoKTsKLX0KLQotdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICBpbml0RWxlbWVudCgwKTsKLSAg
ICBpbml0Rm9yU3R5bGVSZXNvbHZlKDAsIHN0eWxlKTsKLSAgICBtX3N0eWxlID0gc3R5bGU7Ci0g
ICAgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVy
dHkoaWQsIHZhbHVlKTsKLX0KLQotaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCkKLXsKLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJMZWZ0Q29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgot
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3I6Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9y
OgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOgotICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RmlsbENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNv
bG9yOgotICAgICAgICAvLyBBbHNvIGFsbG93IHNob3J0aGFuZHMgc28gdGhhdCBpbmhlcml0L2lu
aXRpYWwgc3RpbGwgd29yay4KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6Ci0g
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0OgotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyUmlnaHQ6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3A6Ci0gICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlPdXRsaW5lOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZToKLSNp
ZiBFTkFCTEUoU1ZHKQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKLSAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVN0cm9rZToKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLS8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtcmVnaW9ucy8jdGhl
LWF0LXJlZ2lvbi1zdHlsZS1ydWxlCi0vLyBGSVhNRTogYWRkIGluY3JlbWVudGFsIHN1cHBvcnQg
Zm9yIG90aGVyIHJlZ2lvbiBzdHlsaW5nIHByb3BlcnRpZXMuCi1pbmxpbmUgYm9vbCBTdHlsZVJl
c29sdmVyOjppc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQotewot
ICAgIHN3aXRjaCAoaWQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFNWRyBoYW5kbGVzIHpvb21pbmcgaW4gYSBk
aWZmZXJlbnQgd2F5IGNvbXBhcmVkIHRvIENTUy4gVGhlIHdob2xlIGRvY3VtZW50IGlzIHNjYWxl
ZCBpbnN0ZWFkCi0vLyBvZiBlYWNoIGluZGl2aWR1YWwgbGVuZ3RoIHZhbHVlIGluIHRoZSByZW5k
ZXIgc3R5bGUgLyB0cmVlLiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCooKQotLy8g
bXVsdGlwbGllcyBlYWNoIHJlc29sdmVkIGxlbmd0aCB3aXRoIHRoZSB6b29tIG11bHRpcGxpZXIg
LSBzbyBmb3IgU1ZHIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGF0LgotLy8gVGhvdWdoIGFsbCBDU1Mg
dmFsdWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnRzICh3
aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcuLi4pCi0vLyBuZWVkIHRvIHJlc3BlY3QgdGhlIHNj
YWxpbmcuIFJlbmRlckJveCAodGhlIHBhcmVudCBjbGFzcyBvZiBSZW5kZXJTVkdSb290KSBncmFi
cyB2YWx1ZXMgbGlrZQotLy8gd2lkdGgvaGVpZ2h0L2JvcmRlci9wYWRkaW5nLy4uLiBmcm9tIHRo
ZSBSZW5kZXJTdHlsZSAtPiBmb3IgU1ZHIHRoZXNlIHZhbHVlcyB3b3VsZCBuZXZlciBzY2FsZSwK
LS8vIGlmIHdlJ2QgcGFzcyBhIDEuMCB6b29tIGZhY3RvciBldmVyeWh3ZXJlLiBTbyB3ZSBvbmx5
IHBhc3MgYSB6b29tIGZhY3RvciBvZiAxLjAgZm9yIHNwZWNpZmljCi0vLyBwcm9wZXJ0aWVzIHRo
YXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQg
KGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KLWJvb2wgU3R5bGVSZXNvbHZlcjo6dXNl
U1ZHWm9vbVJ1bGVzKCkKLXsKLSAgICByZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNT
VkdFbGVtZW50KCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotCi1zdGF0aWMg
Ym9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIExlbmd0aCYgbGVuZ3RoKQotewotICAgIExl
bmd0aCB3b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhl
ZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRh
Z2VDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHNlbGVjdG9yLT5zdHlsZSgpLCBzZWxlY3Rv
ci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzZWxlY3Rvci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
KTsKLSAgICBpZiAod29ya2luZ0xlbmd0aC5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgIHdv
cmtpbmdMZW5ndGguc2V0UXVpcmsocHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1ZSgpKTsKLQot
ICAgIGxlbmd0aCA9IHdvcmtpbmdMZW5ndGg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8TGVuZ3Ro
PiYgbGVuZ3RocywgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCi17Ci0gICAgLy8gSGFuZGxlICdu
b25lJy4KLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbGVuZ3Rocy5hcHBlbmQoTGVuZ3RoKFVuZGVm
aW5lZCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAg
ICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGku
YWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgp
OwotICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIExlbmd0aCBsZW5ndGg7Ci0g
ICAgICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihjdXJyVmFsdWUpLCBzZWxlY3RvciwgbGVuZ3RoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGxlbmd0aHMuYXBwZW5kKGxlbmd0aCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi0KLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRQb3NpdGlvbihDU1NWYWx1ZSogdmFs
dWUsIExlbmd0aCYgcG9zaXRpb24pCi17Ci0gICAgLy8gRm9yIG5vdywgd2Ugb25seSBhY2NlcHQ6
IDxpbnRlZ2VyPiB8ICdhdXRvJwotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpOwotICAg
IHBvc2l0aW9uLnNldFZhbHVlKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQotewotICAgIGJvb2wgaXNJbmhl
cml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9v
bCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAm
JiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKLQotICAgIEFTU0VSVCghaXNJbmhlcml0IHx8
ICFpc0luaXRpYWwpOyAvLyBpc0luaGVyaXQgLT4gIWlzSW5pdGlhbCAmJiBpc0luaXRpYWwgLT4g
IWlzSW5oZXJpdAotCi0gICAgaWYgKCFhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAo
IWFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5r
UHJvcGVydHkoaWQpKSkgewotICAgICAgICAvLyBMaW1pdCB0aGUgcHJvcGVydGllcyB0aGF0IGNh
biBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4KLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpc0luaGVyaXQgJiYgbV9wYXJlbnRTdHlsZSAm
JiAhbV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAmJiAh
Q1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAgICAgICBtX3BhcmVudFN0
eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOwotCi0gICAgLy8gY2hl
Y2sgbG9va3VwIHRhYmxlIGZvciBpbXBsZW1lbnRhdGlvbnMgYW5kIHVzZSB3aGVuIGF2YWlsYWJs
ZQotICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IG1fc3R5bGVCdWlsZGVyLnBy
b3BlcnR5SGFuZGxlcihpZCk7Ci0gICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKSB7Ci0gICAgICAg
IGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKHRo
aXMpOwotICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBoYW5kbGVyLmFw
cGx5SW5pdGlhbFZhbHVlKHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBoYW5kbGVy
LmFwcGx5VmFsdWUodGhpcywgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpIDogMDsKLQotICAg
IGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICAvLyBX
aGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0
aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVuZAotICAgIC8vIFJlbmRlclN0eWxlIHZhbHVlcy4g
IFNob3J0aGFuZHMgKGUuZy4gYm9yZGVyLCBiYWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3Qg
YXMgd2VsbCBhbmQKLSAgICAvLyBhcmUgb25seSBoaXQgd2hlbiBtYXBwaW5nICJpbmhlcml0IiBv
ciAiaW5pdGlhbCIgaW50byBmcm9udC1lbmQgdmFsdWVzLgotICAgIHN3aXRjaCAoaWQpIHsKLS8v
IGxpc3RzCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6Ci0gICAgICAgIC8vIGxpc3Qgb2Yg
c3RyaW5nLCB1cmksIGNvdW50ZXIsIGF0dHIsIGkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJ
biBDU1MzLCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIGluaGVyaXQgY29udGVudC4gIEluIENTUzIg
aXQgaXMgbm90LiAgVGhpcwotICAgICAgICAvLyBub3RlIGlzIGEgcmVtaW5kZXIgdGhhdCBldmVu
dHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCi0KLSAgICAgICAgaWYgKGlz
SW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250ZW50KCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGJvb2wgZGlkU2V0ID0gZmFsc2U7
Ci0gICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUo
KTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgp
OwotICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVh
dGUoc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsK
LSAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VU
KQotICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkgewotICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENT
U1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwg
ZGlkU2V0KTsKLSAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotI2VuZGlmCi0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENT
U1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlk
U2V0KTsKLSAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0
aXZlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4oaXRlbSk7Ci0KLSAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUtPmlzU3RyaW5nKCkp
IHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgZGlkU2V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLT5pc0F0dHIoKSkgewot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZv
ciBhbiBhdHRyKGZvbyk/Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnN0eWxlVHlwZSgp
ID09IE5PUFNFVURPKQotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRVbmlxdWUoKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fcGFyZW50U3R5bGUt
PnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRv
bSwgY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgbnVsbEF0b20pOwotICAg
ICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBtX2VsZW1lbnQtPmdldEF0
dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHZhbHVl
LmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwotICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZh
Y3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlCi0gICAgICAgICAg
ICAgICAgbV9mZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgp
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLT5pc0NvdW50ZXIoKSkgewot
ICAgICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50ZXJWYWx1ZSA9IGNvbnRlbnRWYWx1ZS0+Z2V0
Q291bnRlclZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgRUxpc3RTdHlsZVR5cGUgbGlzdFN0eWxl
VHlwZSA9IE5vbmVMaXN0U3R5bGU7Ci0gICAgICAgICAgICAgICAgaW50IGxpc3RTdHlsZUlkZW50
ID0gY291bnRlclZhbHVlLT5saXN0U3R5bGVJZGVudCgpOwotICAgICAgICAgICAgICAgIGlmIChs
aXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgICAgIGxpc3RT
dHlsZVR5cGUgPSBzdGF0aWNfY2FzdDxFTGlzdFN0eWxlVHlwZT4obGlzdFN0eWxlSWRlbnQgLSBD
U1NWYWx1ZURpc2MpOwotICAgICAgICAgICAgICAgIE93blB0cjxDb3VudGVyQ29udGVudD4gY291
bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVudChjb3VudGVyVmFsdWUtPmlkZW50aWZp
ZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBhcmF0b3IoKSkpOwotICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7
Ci0gICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZVF1b3RlOgotICAgICAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRDb250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgICAg
ICBkaWRTZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlTm9PcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICAg
ICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsIGFuZCBub25l
IGRvIG5vdCBoYXZlIGFueSBlZmZlY3QuCi0gICAgICAgICAgICAgICAgICAgIHt9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghZGlkU2V0
KQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250ZW50KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKLSAgICAgICAgaWYgKGlzSW5oZXJp
dCkgewotICAgICAgICAgICAgaWYgKG1fcGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0UXVvdGVzKG1fcGFyZW50U3R5bGUtPnF1b3RlcygpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBt
X3N0eWxlLT5zZXRRdW90ZXMoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxp
c3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgICAg
ICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKGxpc3QtPmxlbmd0aCgpKTsK
LSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgICAgICByZXR1cm47IC8vIE91dCBv
ZiBtZW1vcnkKLSAgICAgICAgICAgIFN0cmluZyogcXVvdGVzID0gZGF0YS0+ZGF0YSgpOwotICAg
ICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gbGlzdDsgaS5oYXNNb3JlKCk7
IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVl
KCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0g
ICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNT
dHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcXVvdGVzW2kuaW5kZXgoKV0gPSBwcmltaXRpdmVW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc3R5
bGUtPnNldFF1b3RlcyhhZG9wdFJlZihkYXRhKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgp
KTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZU5vbmUpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKGFkb3B0UmVmKFF1b3Rl
c0RhdGE6OmNyZWF0ZSgwKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udEZhbWlseTogewotICAgICAgICAvLyBsaXN0IG9mIHN0cmluZ3MgYW5k
IGlkcwotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRp
b24gcGFyZW50Rm9udERlc2NyaXB0aW9uID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2Vu
ZXJpY0ZhbWlseShwYXJlbnRGb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKTsKLSAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmZp
cnN0RmFtaWx5KCkpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVk
Rm9udChwYXJlbnRGb250RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkpOwotICAgICAgICAg
ICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBGb250RGVz
Y3JpcHRpb24gaW5pdGlhbERlc2MgPSBGb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24o
KTsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQg
Zm9yIHRoZSBnZW5lcmljIGZhbWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UKLSAgICAgICAgICAg
IC8vIHRvIG5vbi1tb25vc3BhY2UuCi0gICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtl
eXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAg
ICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5
d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0
aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldEdlbmVyaWNGYW1pbHkoaW5pdGlhbERlc2MuZ2VuZXJpY0ZhbWlseSgpKTsKLSAgICAg
ICAgICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKS5mYW1pbHlJc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0aWFsRGVzYy5maXJz
dEZhbWlseSgpKTsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAg
ICAgICBGb250RmFtaWx5JiBmaXJzdEZhbWlseSA9IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpOwotICAgICAgICBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gMDsKLQotICAgICAgICAvLyBC
ZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZhbWlseSBwcm9wZXJ0eSwgd2Ugc2hvdWxkIHJl
c2V0IHRoZSBnZW5lcmljIGZhbWlseS4KLSAgICAgICAgYm9vbCBvbGRGYW1pbHlVc2VkRml4ZWRE
ZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCk7Ci0gICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9G
YW1pbHkpOwotCi0gICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBp
Lmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0g
aS52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
Y29udGVudFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKLSAg
ICAgICAgICAgIEF0b21pY1N0cmluZyBmYWNlOwotICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7Ci0gICAgICAgICAgICBpZiAo
Y29udGVudFZhbHVlLT5pc1N0cmluZygpKQotICAgICAgICAgICAgICAgIGZhY2UgPSBjb250ZW50
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzZXR0aW5ncykg
ewotICAgICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgotICAgICAgICAgICAg
ICAgICAgICAgICAgZmFjZSA9IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlU2VyaWY6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gc2VyaWZGYW1pbHk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShG
b250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2Fuc1NlcmlmOgotICAgICAg
ICAgICAgICAgICAgICAgICAgZmFjZSA9IHNhbnNTZXJpZkZhbWlseTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlv
bjo6U2Fuc1NlcmlmRmFtaWx5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ3Vyc2l2ZToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZhY2UgPSBjdXJzaXZlRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpDdXJzaXZlRmFt
aWx5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlRmFudGFzeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBm
YW50YXN5RmFtaWx5OwotICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpGYW50YXN5RmFtaWx5KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
TW9ub3NwYWNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IG1vbm9zcGFjZUZhbWls
eTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFt
aWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGlj
dG9ncmFwaDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBwaWN0b2dyYXBoRmFtaWx5
OwotICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1p
bHkoRm9udERlc2NyaXB0aW9uOjpQaWN0b2dyYXBoRmFtaWx5KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKCFmYWNlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmICghY3VyckZh
bWlseSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGaWxsaW5nIGluIHRoZSBmaXJzdCBmYW1p
bHkuCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0RmFtaWx5LnNldEZhbWlseShmYWNlKTsKLSAg
ICAgICAgICAgICAgICAgICAgZmlyc3RGYW1pbHkuYXBwZW5kRmFtaWx5KDApOyAvLyBSZW1vdmUg
YW55IGluaGVyaXRlZCBmYW1pbHktZmFsbGJhY2sgbGlzdC4KLSAgICAgICAgICAgICAgICAgICAg
Y3VyckZhbWlseSA9ICZmaXJzdEZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgp
ID09IEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkg
PSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3RmFt
aWx5LT5zZXRGYW1pbHkoZmFjZSk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJGYW1pbHktPmFw
cGVuZEZhbWlseShuZXdGYW1pbHkpOwotICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5ID0g
bmV3RmFtaWx5LmdldCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIFdlIGNhbid0IGNhbGwgdXNlRml4ZWREZWZhdWx0U2l6ZSgpIHVu
dGlsIGFsbCBuZXcgZm9udCBmYW1pbGllcyBoYXZlIGJlZW4gYWRkZWQKLSAgICAgICAgLy8gSWYg
Y3VyckZhbWlseSBpcyBub24temVybyB0aGVuIHdlIHNldCBhdCBsZWFzdCBvbmUgZmFtaWx5IG9u
IHRoaXMgZGVzY3JpcHRpb24uCi0gICAgICAgIGlmIChjdXJyRmFtaWx5KSB7Ci0gICAgICAgICAg
ICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVz
ZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkKLSAg
ICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5
d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0
aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsK
LQotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLS8vIHNob3J0aGFuZCBwcm9wZXJ0aWVzCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6Ci0gICAgICAgIGlmIChpc0luaXRpYWwpIHsK
LSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQmFja2dyb3VuZExheWVycygpOwotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEJh
Y2tncm91bmRMYXllcnMoKm1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSk7Ci0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IobV9wYXJlbnRTdHlsZS0+YmFja2dy
b3VuZENvbG9yKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFzazoKLSAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1f
c3R5bGUtPmNsZWFyTWFza0xheWVycygpOwotICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0g
ICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0TWFza0xheWVycygqbV9wYXJlbnRTdHlsZS0+bWFz
a0xheWVycygpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250Ogot
ICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAg
ICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KG1fcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSk7
Ci0gICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgICAgICAgICBzZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0luaXRp
YWwpIHsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVu
dCgpLT5zZXR0aW5ncygpOwotICAgICAgICAgICAgQVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2Un
cmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJl
IGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0aW5ncwotICAgICAgICAgICAgaWYgKCFzZXR0
aW5ncykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uOwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVy
aWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7Ci0gICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01v
ZGUoKSk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9j
aGVja2VyLmRvY3VtZW50KCktPnByaW50aW5nKCkpOwotICAgICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGlu
Z3MoKS0+c3RhbmRhcmRGb250RmFtaWx5KCk7Ci0gICAgICAgICAgICBpZiAoIXN0YW5kYXJkRm9u
dEZhbWlseS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmly
c3RGYW1pbHkoKS5zZXRGYW1pbHkoc3RhbmRhcmRGb250RmFtaWx5KTsKLSAgICAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1pbHkoMCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFs
dWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgICAgIHNldEZvbnRTaXpl
KGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgp
LCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVI
ZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgbV9s
aW5lSGVpZ2h0VmFsdWUgPSAwOwotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCkpOwotICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotCi0gICAgICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgICAgICAgICAgUmVuZGVyVGhl
bWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
LCBmb250RGVzY3JpcHRpb24pOwotCi0gICAgICAgICAgICAvLyBEb3VibGUtY2hlY2sgYW5kIHNl
ZSBpZiB0aGUgdGhlbWUgZGlkIGFueXRoaW5nLiAgSWYgbm90LCBkb24ndCBib3RoZXIgdXBkYXRp
bmcgdGhlIGZvbnQuCi0gICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVT
aXplKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHJlbmRlcmluZyBtb2Rl
IGFuZCBwcmludGVyIGZvbnQgc2V0dGluZ3MgYXJlIHVwZGF0ZWQuCi0gICAgICAgICAgICAgICAg
U2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUg
cmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5k
IHRodXMgaGF2ZSBzZXR0aW5ncwotICAgICAgICAgICAgICAgIGlmICghc2V0dGluZ3MpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KG1fY2hlY2tlci5kb2N1
bWVudCgpLT5wcmludGluZygpKTsKLQotICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgem9v
bSBmYWN0b3IuCi0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShtX2NoZWNrZXIuZG9jdW1lbnQoKSwg
bV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNj
cmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygpKSk7Ci0gICAgICAgICAg
ICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzRm9udFZhbHVlKCkpIHsKLSAgICAgICAgICAg
IEZvbnRWYWx1ZSAqZm9udCA9IHN0YXRpY19jYXN0PEZvbnRWYWx1ZSo+KHZhbHVlKTsKLSAgICAg
ICAgICAgIGlmICghZm9udC0+c3R5bGUgfHwgIWZvbnQtPnZhcmlhbnQgfHwgIWZvbnQtPndlaWdo
dCB8fAotICAgICAgICAgICAgICAgICAhZm9udC0+c2l6ZSB8fCAhZm9udC0+bGluZUhlaWdodCB8
fCAhZm9udC0+ZmFtaWx5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsIGZvbnQtPnN0eWxlLmdldCgpKTsKLSAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgZm9udC0+dmFy
aWFudC5nZXQoKSk7Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdl
aWdodCwgZm9udC0+d2VpZ2h0LmdldCgpKTsKLSAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBw
cm9wZXJ0aWVzIGNhbiBkaXJ0eSBvdXIgZm9udCBidXQgdGhleSBkb24ndCB0cnkgdG8gcmVhZCB0
aGUgZm9udCdzCi0gICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIGJhY2ssIHdoaWNoIGlzIHNhZmUu
IEhvd2V2ZXIgaWYgZm9udC1zaXplIGlzIHVzaW5nIHRoZSAnZXgnIHVuaXQsIGl0IHdpbGwKLSAg
ICAgICAgICAgIC8vIG5lZWQgcXVlcnkgdGhlIGRpcnRpZWQgZm9udCdzIHgtaGVpZ2h0IHRvIGdl
dCB0aGUgY29tcHV0ZWQgc2l6ZS4gVG8gYmUgc2FmZSBpbiB0aGlzCi0gICAgICAgICAgICAvLyBj
YXNlLCBsZXQncyBqdXN0IHVwZGF0ZSB0aGUgZm9udCBub3cuCi0gICAgICAgICAgICB1cGRhdGVG
b250KCk7Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIGZv
bnQtPnNpemUuZ2V0KCkpOwotCi0gICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IGZvbnQt
PmxpbmVIZWlnaHQuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250RmFtaWx5LCBmb250LT5mYW1pbHkuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIENTUzMgUHJvcGVydGllcwotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
U2hhZG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaGFkb3c6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJveFNoYWRvdzogewotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAg
ICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIHJl
dHVybiBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KG1fcGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSA/
IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkpKSA6
IG51bGxwdHIpOwotICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNldEJveFNoYWRvdyhtX3Bh
cmVudFN0eWxlLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCptX3BhcmVu
dFN0eWxlLT5ib3hTaGFkb3coKSkpIDogbnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkgLy8gaW5pdGlhbCB8IG5vbmUKLSAgICAgICAg
ICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBtX3N0eWxlLT5zZXRUZXh0
U2hhZG93KG51bGxwdHIpIDogbV9zdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwotCi0gICAg
ICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBp
LmFkdmFuY2UoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUo
KTsKLSAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRp
Y19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRl
bS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50
PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAg
aW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0
eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOwotICAgICAgICAgICAg
aW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxp
bnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOwotICAgICAg
ICAgICAgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBpdGVtLT5zdHlsZSAmJiBpdGVtLT5zdHls
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQgOiBOb3JtYWw7Ci0gICAgICAg
ICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKLSAgICAgICAg
ICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgp
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3R5bGUpCi0gICAgICAgICAgICAgICAgY29sb3Ig
PSBtX3N0eWxlLT5jb2xvcigpOwotCi0gICAgICAgICAgICBPd25QdHI8U2hhZG93RGF0YT4gc2hh
ZG93RGF0YSA9IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKEludFBvaW50KHgsIHkpLCBibHVyLCBz
cHJlYWQsIHNoYWRvd1N0eWxlLCBpZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgY29s
b3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQpKTsKLSAgICAgICAgICAg
IGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0VGV4dFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRk
IHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFNoYWRvdyhzaGFkb3dEYXRhLnJl
bGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRo
ZSBmaXJzdCBlbnRyeQotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwoYm94UmVmbGVjdCwgQm94UmVmbGVjdCkKLSAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3hSZWZsZWN0KFJlbmRlclN0eWxl
Ojppbml0aWFsQm94UmVmbGVjdCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUmVmbGVjdFZhbHVlKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgQ1NTUmVmbGVjdFZhbHVlKiByZWZsZWN0VmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NSZWZsZWN0VmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIFJlZlB0cjxTdHlsZVJlZmxlY3Rp
b24+IHJlZmxlY3Rpb24gPSBTdHlsZVJlZmxlY3Rpb246OmNyZWF0ZSgpOwotICAgICAgICByZWZs
ZWN0aW9uLT5zZXREaXJlY3Rpb24ocmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7Ci0gICAgICAg
IGlmIChyZWZsZWN0VmFsdWUtPm9mZnNldCgpKQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0
T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVn
ZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4o
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7Ci0gICAgICAgIE5pbmVQ
aWVjZUltYWdlIG1hc2s7Ci0gICAgICAgIG1hc2suc2V0TWFza0RlZmF1bHRzKCk7Ci0gICAgICAg
IG1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7Ci0gICAg
ICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7Ci0KLSAgICAgICAgbV9zdHlsZS0+c2V0Qm94
UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMX0FORF9QUklNSVRJVkUob3BhY2l0eSwgT3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCBpbiBAZm9udC1mYWNlIHJ1bGVz
LgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVSYW5nZTogLy8g
T25seSB1c2VkIGluIEBmb250LWZhY2UgcnVsZXMuCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZToKLSAgICAgICAgaWYgKGlzSW5oZXJpdCkgewot
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZUNvbG9yKG1fcGFyZW50U3R5bGUtPmNv
bHVtblJ1bGVDb2xvcigpLmlzVmFsaWQoKSA/IG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xv
cigpIDogbV9wYXJlbnRTdHlsZS0+Y29sb3IoKSk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b2x1bW5SdWxlU3R5bGUobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVN0eWxlKCkpOwotICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVdpZHRoKG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1
bGVXaWR0aCgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCi0gICAg
ICAgICAgICBtX3N0eWxlLT5yZXNldENvbHVtblJ1bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlOgotICAgICAgICBpZiAoIW1fcGFyZW50Tm9k
ZSB8fCAhdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZURpcmVjdGlvbihtX3BhcmVudFN0eWxlLT5tYXJxdWVl
RGlyZWN0aW9uKCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1fcGFy
ZW50U3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1
ZWVTcGVlZChtX3BhcmVudFN0eWxlLT5tYXJxdWVlU3BlZWQoKSk7Ci0gICAgICAgIG1fc3R5bGUt
PnNldE1hcnF1ZWVMb29wQ291bnQobV9wYXJlbnRTdHlsZS0+bWFycXVlZUxvb3BDb3VudCgpKTsK
LSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUJlaGF2aW9yKG1fcGFyZW50U3R5bGUtPm1hcnF1
ZWVCZWhhdmlvcigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXJxdWVlUmVwZXRpdGlvbjogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TChtYXJxdWVlTG9vcENvdW50LCBNYXJxdWVlTG9vcENvdW50KQotICAgICAgICBpZiAoIXByaW1p
dGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldE1hcnF1ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyByZXBlYXQgZm9yZXZlci4KLSAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBt
X3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
cXVlZVNwZWVkOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVT
cGVlZCwgTWFycXVlZVNwZWVkKQotICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoaW50IGlkZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlU2xvdzoKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFy
cXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZh
dWx0LgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlRmFzdDoKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVk
KDEwKTsgLy8gMTBtc2VjLiBTdXBlciBmYXN0LgotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNUaW1l
KCkpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVUaW1lPGludCwgQ1NTUHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xs
YW1vdW50IHN1cHBvcnQuCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJp
bWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlSW5jcmVtZW50OiB7Ci0gICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVJbmNyZW1lbnQsIE1hcnF1ZWVJbmNyZW1lbnQp
Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgc3dpdGNo
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3Jl
bWVudChMZW5ndGgoMSwgRml4ZWQpKTsgLy8gMXB4LgotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCg2LCBGaXhlZCkpOyAvLyA2
cHguIFRoZSBXaW5JRSBkZWZhdWx0LgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDM2LCBGaXhlZCkpOyAvLyAzNnB4LgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVydFRvSW50TGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAg
aWYgKCFtYXJxdWVlTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQ2xhbXA6Ci0g
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUobGluZUNsYW1w
LCBMaW5lQ2xhbXApCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TG9jYWxlOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxvY2FsZSwgTG9j
YWxlKTsKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykK
LSAgICAgICAgICAgIG1fc3R5bGUtPnNldExvY2FsZShudWxsQXRvbSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1fc3R5bGUtPnNldExvY2FsZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5n
VmFsdWUoKSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0
eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlw
dChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKG1fc3R5bGUtPmxvY2FsZSgpKSk7
Ci0gICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2l6ZUFkanVzdDog
ewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0ZXh0U2l6ZUFkanVzdCwgVGV4
dFNpemVBZGp1c3QpCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgIXByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzZXRUZXh0U2l6
ZUFkanVzdChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0RGFzaGJvYXJkUmVnaW9uOiB7Ci0gICAgICAgIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMKGRhc2hib2FyZFJlZ2lvbnMsIERhc2hib2FyZFJlZ2lvbnMpCi0g
ICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURh
c2hib2FyZFJlZ2lvbnMoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBEYXNoYm9hcmRSZWdpb24gKnJlZ2lvbiA9IHByaW1pdGl2ZVZhbHVlLT5nZXREYXNoYm9h
cmRSZWdpb25WYWx1ZSgpOwotICAgICAgICBpZiAoIXJlZ2lvbikKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBEYXNoYm9hcmRSZWdpb24gKmZpcnN0ID0gcmVnaW9uOwotICAgICAgICB3
aGlsZSAocmVnaW9uKSB7Ci0gICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvSW50TGVu
Z3RoKHJlZ2lvbi0+dG9wKCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAg
ICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5yaWdodCgpLCBz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9
IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9JbnRMZW5ndGgo
cmVnaW9uLT5sZWZ0KCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0KLSAgICAgICAg
ICAgIGlmICh0b3AuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICB0b3AgPSBMZW5ndGgo
KTsKLSAgICAgICAgICAgIGlmIChyaWdodC5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAg
IHJpZ2h0ID0gTGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAoYm90dG9tLmlzVW5kZWZpbmVkKCkp
Ci0gICAgICAgICAgICAgICAgYm90dG9tID0gTGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAobGVm
dC5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGxlZnQgPSBMZW5ndGgoKTsKLQotICAg
ICAgICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9u
LT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZh
bHNlIDogdHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChyZWdpb24tPm1faXNSZWN0YW5nbGUp
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJv
YXJkUmVnaW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9t
LCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwotICAgICAgICAgICAgcmVn
aW9uID0gcmVnaW9uLT5tX25leHQuZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPnNldEhhc0Rhc2hib2FyZFJlZ2lvbnModHJ1ZSk7Ci0KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ry
b2tlV2lkdGg6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dFN0cm9r
ZVdpZHRoLCBUZXh0U3Ryb2tlV2lkdGgpCi0gICAgICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICAg
ICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVRoaW46Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgotICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZVRoaWNrOiB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHJlc3Vs
dCA9IDEuMCAvIDQ4OwotICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZU1lZGl1bSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDM7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVUaGljaykKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDU7Ci0gICAgICAg
ICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB3aWR0aCA9
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIG1fc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogewotICAg
ICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9ybSk7Ci0g
ICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgY3JlYXRlVHJh
bnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBvcGVy
YXRpb25zKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2
ZTogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChwZXJzcGVjdGl2ZSwgUGVy
c3BlY3RpdmUpCi0KLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IHBlcnNwZWN0aXZlVmFs
dWU7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgICAg
IHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4o
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIC8vIEZvciBiYWNr
d2FyZCBjb21wYXRpYmlsaXR5LCB0cmVhdCB2YWx1ZWxlc3MgbnVtYmVycyBhcyBweC4KLSAgICAg
ICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1p
dGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+
Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFj
dG9yKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KHBlcnNwZWN0aXZlVmFsdWUgPj0gMC4wZikKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFBlcnNw
ZWN0aXZlKHBlcnNwZWN0aXZlVmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246Ci0gICAgICAgIGlmIChpc0luaXRpYWwpCi0g
ICAgICAgICAgICBtX3N0eWxlLT5jbGVhckFuaW1hdGlvbnMoKTsKLSAgICAgICAgZWxzZSBpZiAo
aXNJbmhlcml0KQotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEFuaW1hdGlvbnMobV9wYXJl
bnRTdHlsZS0+YW5pbWF0aW9ucygpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uOgotICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAg
ICAgbV9zdHlsZS0+Y2xlYXJUcmFuc2l0aW9ucygpOwotICAgICAgICBlbHNlIGlmIChpc0luaGVy
aXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0VHJhbnNpdGlvbnMobV9wYXJlbnRTdHls
ZS0+dHJhbnNpdGlvbnMoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5
UG9pbnRlckV2ZW50czoKLSAgICB7Ci0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAg
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNjU2MTA3Nz4gV29yayBhcm91bmQgdGhlIFN0b2NrcyB3
aWRnZXQncyBtaXN1c2Ugb2YgdGhlCi0gICAgICAgIC8vIHBvaW50ZXItZXZlbnRzIHByb3BlcnR5
IGJ5IG5vdCBhcHBseWluZyBpdCBpbiBEYXNoYm9hcmQuCi0gICAgICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwotICAgICAgICBpZiAoc2V0
dGluZ3MgJiYgc2V0dGluZ3MtPnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2Rl
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShwb2ludGVyRXZlbnRzLCBQb2ludGVyRXZlbnRzKQot
ICAgICAgICByZXR1cm47Ci0gICAgfQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiB7Ci0gICAgICAgIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMKHRhcEhpZ2hsaWdodENvbG9yLCBUYXBIaWdobGlnaHRDb2xvcik7
Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBDb2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSk7
Ci0gICAgICAgIG1fc3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HKQotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogewotICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTCh1c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nLCBVc2VUb3Vj
aE92ZXJmbG93U2Nyb2xsaW5nKTsKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBtX3N0eWxlLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xs
aW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUludmFsaWQ6Ci0g
ICAgICAgIHJldHVybjsKLSAgICAvLyBEaXJlY3Rpb25hbCBwcm9wZXJ0aWVzIGFyZSByZXNvbHZl
ZCBieSByZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eSgpIGJlZm9yZSB0aGUgc3dpdGNoLgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlckVuZENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJF
bmRTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kV2lkdGg6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3JkZXJTdGFydENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJT
dGFydFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydFdpZHRoOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckJlZm9yZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3JkZXJCZWZvcmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3Jl
V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlckNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3JkZXJBZnRlclN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJB
ZnRlcldpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5FbmQ6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblN0YXJ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXJnaW5CZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVyOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Db2xsYXBzZToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlQ29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hcmdpblRvcENvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5B
ZnRlckNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Cb3R0b21Db2xs
YXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0VuZDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0UGFkZGluZ1N0YXJ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQ
YWRkaW5nQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nQWZ0ZXI6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxXaWR0aDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TG9naWNhbEhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9n
aWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2FsSGVpZ2h0Ogot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6Ci0gICAgewotICAgICAgICBDU1NQcm9wZXJ0
eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlk
LCBtX3N0eWxlLT5kaXJlY3Rpb24oKSwgbV9zdHlsZS0+d3JpdGluZ01vZGUoKSk7Ci0gICAgICAg
IEFTU0VSVChuZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lk
LCB2YWx1ZSk7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5UGFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdo
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hDb2xvcjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExp
bmVUaHJvdWdoU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaFdpZHRo
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRPdmVybGluZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVNb2Rl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVTdHlsZToKLSAgICBjYXNlIENTU1By
b3BlcnR5VGV4dE92ZXJsaW5lV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxp
bmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVDb2xvcjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dFVuZGVybGluZU1vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRl
cmxpbmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZVdpZHRoOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250U2l6ZURlbHRhOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VGV4dFN0cm9rZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzOgot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDU1MgVGV4dCBMYXlvdXQgTW9kdWxlIExldmVsIDM6
IFZlcnRpY2FsIHdyaXRpbmcgc3VwcG9ydAotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcml0
aW5nTW9kZTogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlU
SVZFKHdyaXRpbmdNb2RlLCBXcml0aW5nTW9kZSkKLSAgICAgICAgLy8gRklYTUU6IEl0IGlzIG5v
dCBvayB0byBtb2RpZnkgZG9jdW1lbnQgc3RhdGUgd2hpbGUgYXBwbHlpbmcgc3R5bGUuCi0gICAg
ICAgIGlmICghaXNJbmhlcml0ICYmICFpc0luaXRpYWwgJiYgbV9lbGVtZW50ICYmIG1fZWxlbWVu
dCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAg
ICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVt
ZW50KHRydWUpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9z
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPcmll
bnRhdGlvbihtX3N0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbCA6
IFZlcnRpY2FsKTsKLSAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGlu
ZUJveENvbnRhaW46IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobGluZUJv
eENvbnRhaW4sIExpbmVCb3hDb250YWluKQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYg
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNDU1NMaW5l
Qm94Q29udGFpblZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ1NTTGlu
ZUJveENvbnRhaW5WYWx1ZSogbGluZUJveENvbnRhaW5WYWx1ZSA9IHN0YXRpY19jYXN0PENTU0xp
bmVCb3hDb250YWluVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldExpbmVCb3hD
b250YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVlKCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlOgotICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh3cmFwU2hhcGVJbnNpZGUsIFdyYXBTaGFwZUluc2lk
ZSk7Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRXcmFwU2hhcGVJbnNpZGUoMCk7Ci0gICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRX
cmFwU2hhcGVJbnNpZGUocHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSk7Ci0gICAgICAg
IHJldHVybjsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGU6Ci0gICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHdyYXBTaGFwZU91dHNpZGUsIFdyYXBTaGFw
ZU91dHNpZGUpOwotICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVB
dXRvKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0V3JhcFNoYXBlT3V0c2lkZSgwKTsKLSAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU2hhcGUoKSkKLSAgICAgICAgICAgIG1fc3R5
bGUtPnNldFdyYXBTaGFwZU91dHNpZGUocHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSk7
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENTUyBGb250cyBNb2R1bGUgTGV2ZWwgMwotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250RmVhdHVyZVNldHRpbmdzOiB7Ci0gICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZU5vcm1hbCkgewotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKG1fc3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxGZWF0dXJlU2V0dGluZ3MoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgQ1NTVmFsdWVMaXN0
KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwotICAgICAgICBSZWZQ
dHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MgPSBGb250RmVhdHVyZVNldHRpbmdzOjpj
cmVhdGUoKTsKLSAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9
IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgICAgICBpZiAoIWl0ZW0t
PmlzRm9udEZlYXR1cmVWYWx1ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgRm9udEZlYXR1cmVWYWx1ZSogZmVhdHVyZSA9IHN0YXRpY19jYXN0PEZvbnRGZWF0dXJl
VmFsdWUqPihpdGVtKTsKLSAgICAgICAgICAgIHNldHRpbmdzLT5hcHBlbmQoRm9udEZlYXR1cmUo
ZmVhdHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVlKCkpKTsKLSAgICAgICAgfQotICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0RmVhdHVyZVNldHRpbmdzKHNldHRpbmdzLnJlbGVhc2UoKSk7Ci0g
ICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRGaWx0ZXI6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmls
dGVyLCBGaWx0ZXIpOwotICAgICAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAg
ICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUsIG9wZXJhdGlvbnMpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0RmlsdGVyKG9w
ZXJhdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKENT
U19HUklEX0xBWU9VVCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZENvbHVtbnM6IHsK
LSAgICAgICAgVmVjdG9yPExlbmd0aD4gbGVuZ3RoczsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tMaXN0KHZhbHVlLCBsZW5ndGhzLCB0aGlzKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbV9zdHlsZS0+c2V0R3JpZENvbHVtbnMobGVuZ3Rocyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3dzOiB7Ci0gICAgICAgIFZl
Y3RvcjxMZW5ndGg+IGxlbmd0aHM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2
YWx1ZSwgbGVuZ3RocywgdGhpcykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5
bGUtPnNldEdyaWRSb3dzKGxlbmd0aHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW46IHsKLSAgICAgICAgTGVuZ3RoIGNvbHVt
bjsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIGNvbHVtbikpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldEdyaWRJdGVtQ29sdW1uKGNvbHVt
bik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdy
aWRSb3c6IHsKLSAgICAgICAgTGVuZ3RoIHJvdzsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9z
aXRpb24odmFsdWUsIHJvdykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUt
PnNldEdyaWRJdGVtUm93KHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGltcGxlbWVudGVkIGluIHRoZSBTdHlsZUJ1aWxk
ZXIgbG9va3VwIHRhYmxlLgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVu
dDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXA6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQ
b3NpdGlvblg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRSZXBlYXRYOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WToK
LSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90
dG9tTGVmdFJhZGl1czoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRp
dXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29s
bGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbG9yOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJJbWFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VPdXRzZXQ6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlUmVwZWF0OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJJbWFnZVNsaWNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNv
dXJjZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVyTGVmdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9y
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckxlZnRXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVzOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyUmlnaHRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyU3BhY2luZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3R5bGU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29s
b3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXM6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlclRvcFJpZ2h0UmFkaXVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJUb3BTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGg6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3R0b206Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJveFNpemluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q2FwdGlv
blNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNsZWFyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlD
bGlwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q291
bnRlckluY3JlbWVudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRlclJlc2V0OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlDdXJzb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eURpcmVjdGlvbjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5RGlzcGxheToKLSAgICBjYXNlIENTU1Byb3BlcnR5RW1wdHlDZWxs
czoKLSAgICBjYXNlIENTU1Byb3BlcnR5RmxvYXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRT
aXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUZvbnRWYXJpYW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUltYWdlUmVuZGVyaW5nOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlMZWZ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlMZXR0ZXJTcGFj
aW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlMaXN0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlz
dFN0eWxlVHlwZToKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlNYXJnaW5Cb3R0b206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkxlZnQ6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5U
b3A6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1heEhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
TWF4V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1pbkhlaWdodDoKLSAgICBjYXNlIENTU1By
b3BlcnR5TWluV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU9ycGhhbnM6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eU91dGxpbmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZU9mZnNldDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0
bGluZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eU92ZXJmbG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1g6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93WToKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZzoK
LSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5
UGFkZGluZ0xlZnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5UGFkZGluZ1RvcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrQWZ0
ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0JlZm9yZToKLSAgICBjYXNlIENTU1By
b3BlcnR5UGFnZUJyZWFrSW5zaWRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQb3NpdGlvbjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5UmVzaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlSaWdodDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5U2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5U3BlYWs6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRhYmxlTGF5b3V0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0QWxp
Z246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0SW5kZW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmZsb3c6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRU
cmFuc2Zvcm06Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRvcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
VW5pY29kZUJpZGk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ246Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVZpc2liaWxpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1h
dGlvbkRlbGF5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb246
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25GaWxsTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbk5hbWU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlT
dGF0ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcGVhcmFuY2U6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFzcGVjdFJhdGlvOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZmFj
ZVZpc2liaWxpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDbGlwOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCYWNrZ3JvdW5kU2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRml0
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZzoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlclJhZGl1czoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVy
dGljYWxTcGFjaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hBbGlnbjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3hGbGV4OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4R3JvdXA6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveExpbmVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3hPcmRpbmFsR3JvdXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yaWVu
dDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UGFjazoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Q29sb3JDb3JyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5BeGlzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0FmdGVyOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Q29sdW1uQnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtbkNvdW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXA6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbnM6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblNwYW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtbldpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRGbGV4QWxpZ246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZs
ZXhEaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhGbG93OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4SXRlbUFsaWduOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRGbGV4TGluZVBhY2s6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhPcmRlcjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleFBhY2s6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZsZXhXcmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93RnJvbToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxvd0ludG86Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEZvbnRLZXJuaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250U21vb3RoaW5n
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250VmFyaWFudExpZ2F0dXJlczoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0SGlnaGxpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRIeXBoZW5hdGVDaGFyYWN0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0
ZUxpbWl0QWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QmVm
b3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5zOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRMaW5lQWxpZ246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhazoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUdyaWQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dExpbmVTbmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tBdHRhY2htZW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNr
Qm94SW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZU91dHNldDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlUmVwZWF0OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTbGljZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza0JveEltYWdlU291cmNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNr
Qm94SW1hZ2VXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXA6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tJbWFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrUG9zaXRpb25YOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNr
UG9zaXRpb25ZOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza1JlcGVhdFk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXRjaE5lYXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0UGVyc3BlY3RpdmVPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNw
ZWN0aXZlT3JpZ2luWDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmln
aW5ZOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQcmludENvbG9yQWRqdXN0OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRSZWdpb25CcmVha0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVn
aW9uQnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbk92ZXJmbG93
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSdGxPcmRlcmluZzoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dENvbWJpbmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRF
bXBoYXNpc0NvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNQb3Np
dGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGU6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFRleHRPcmllbnRhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNl
Y3VyaXR5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3I6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJh
bnNmb3JtT3JpZ2luWToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2lu
WjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtU3R5bGU6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvbkR1cmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uUHJvcGVydHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdG
dW5jdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWc6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVz
ZXJTZWxlY3Q6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXA6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFdyYXBGbG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwTWFy
Z2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwUGFkZGluZzoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0V3JhcFRocm91Z2g6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3Bh
Y2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdpZG93czoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2lk
dGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRCcmVhazoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V29yZFNwYWNpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRXcmFwOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlaSW5kZXg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVpvb206Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBk
ZWZhdWx0OgotICAgICAgICAvLyBUcnkgdGhlIFNWRyBwcm9wZXJ0aWVzCi0gICAgICAgIGFwcGx5
U1ZHUHJvcGVydHkoaWQsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgfQot
fQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlz
SW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQoRmlsbExheWVy
Ojppbml0aWFsRmlsbEF0dGFjaG1lbnQobGF5ZXItPnR5cGUoKSkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVGaXhlZDoKLSAgICAgICAg
ICAgIGxheWVyLT5zZXRBdHRhY2htZW50KEZpeGVkQmFja2dyb3VuZEF0dGFjaG1lbnQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTY3JvbGw6Ci0gICAgICAgICAg
ICBsYXllci0+c2V0QXR0YWNobWVudChTY3JvbGxCYWNrZ3JvdW5kQXR0YWNobWVudCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxvY2FsOgotICAgICAgICAgICAg
bGF5ZXItPnNldEF0dGFjaG1lbnQoTG9jYWxCYWNrZ3JvdW5kQXR0YWNobWVudCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9
Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbENsaXAoQ1NTUHJvcGVydHlJRCwgRmls
bExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0
aWFsVmFsdWUoKSkgewotICAgICAgICBsYXllci0+c2V0Q2xpcChGaWxsTGF5ZXI6OmluaXRpYWxG
aWxsQ2xpcChsYXllci0+dHlwZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwotICAgIGxheWVyLT5zZXRDbGlwKCpwcmltaXRpdmVWYWx1ZSk7Ci19
Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0lu
aXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb21wb3NpdGUoRmlsbExheWVyOjpp
bml0aWFsRmlsbENvbXBvc2l0ZShsYXllci0+dHlwZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGxheWVyLT5zZXRDb21wb3NpdGUoKnBy
aW1pdGl2ZVZhbHVlKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBGaWxsT3JpZ2luKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldE9yaWdpbihG
aWxsTGF5ZXI6OmluaXRpYWxGaWxsT3JpZ2luKGxheWVyLT50eXBlKCkpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgbGF5ZXItPnNldE9yaWdp
bigqcHJpbWl0aXZlVmFsdWUpOwotfQotCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVz
b2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVl
KQotewotICAgIGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjYWNo
ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUq
Pih2YWx1ZSkpOwotCi0gICAgaWYgKHZhbHVlLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkKLSAg
ICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGlj
X2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7Ci0KLSNpZiBFTkFCTEUoQ1NT
X0lNQUdFX1NFVCkKLSAgICBpZiAodmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpKQotICAgICAgICBy
ZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFn
ZVNldFZhbHVlKj4odmFsdWUpKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLVBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQotewotICAgIFJl
ZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwot
ICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9wZW5k
aW5nSW1hZ2VQcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7Ci0gICAgcmV0dXJuIGltYWdlLnJlbGVh
c2UoKTsKLX0KLQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0
ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc1BlbmRpbmcoKSkgewotICAg
ICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKLSAgICAgICAgcmV0
dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4g
U3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKLX0KLQotI2lmIEVOQUJMRShDU1Nf
SU1BR0VfU0VUKQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1ZSog
dmFsdWUpCi17Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9y
UGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOwotICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmFkZChwcm9w
ZXJ0eSk7Ci0gICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKLX0KLSNlbmRpZgotCi12b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hcEZpbGxJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBGaWxsTGF5
ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxW
YWx1ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRJbWFnZShGaWxsTGF5ZXI6OmluaXRpYWxGaWxs
SW1hZ2UobGF5ZXItPnR5cGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbGF5
ZXItPnNldEltYWdlKHN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVlKSk7Ci19Ci0KLXZvaWQgU3R5
bGVSZXNvbHZlcjo6bWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXll
ciwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkg
ewotICAgICAgICBsYXllci0+c2V0UmVwZWF0WChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0
WChsYXllci0+dHlwZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOwotICAgIGxheWVyLT5zZXRSZXBlYXRYKCpwcmltaXRpdmVWYWx1ZSk7Ci19Ci0K
LXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFJlcGVhdFkoQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSkgewotICAgICAgICBsYXllci0+c2V0UmVwZWF0WShGaWxsTGF5ZXI6OmluaXRpYWxG
aWxsUmVwZWF0WShsYXllci0+dHlwZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGxheWVyLT5zZXRSZXBlYXRZKCpwcmltaXRpdmVWYWx1
ZSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwg
RmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBsYXllci0+c2V0U2l6ZVR5cGUoU2l6ZU5vbmUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ29udGFpbikKLSAgICAg
ICAgbGF5ZXItPnNldFNpemVUeXBlKENvbnRhaW4pOwotICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ292ZXIpCi0gICAgICAgIGxheWVyLT5zZXRTaXpl
VHlwZShDb3Zlcik7Ci0gICAgZWxzZQotICAgICAgICBsYXllci0+c2V0U2l6ZVR5cGUoU2l6ZUxl
bmd0aCk7Ci0KLSAgICBMZW5ndGhTaXplIGIgPSBGaWxsTGF5ZXI6OmluaXRpYWxGaWxsU2l6ZUxl
bmd0aChsYXllci0+dHlwZSgpKTsKLQotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8
fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNvbnRhaW4gfHwgcHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVDb3ZlcikgewotICAgICAgICBsYXllci0+
c2V0U2l6ZUxlbmd0aChiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZsb2F0IHpv
b21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICBMZW5ndGggZmlyc3RM
ZW5ndGg7Ci0gICAgTGVuZ3RoIHNlY29uZExlbmd0aDsKLQotICAgIGlmIChQYWlyKiBwYWlyID0g
cHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBmaXJzdCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+Zmlyc3Qo
KSk7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKTsKLSAgICAgICAgZmlyc3RMZW5ndGggPSBm
aXJzdC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIHNlY29uZExlbmd0aCA9IHNlY29uZC0+Y29u
dmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3Rvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmlyc3RMZW5ndGggPSBwcmltaXRp
dmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIHNlY29uZExlbmd0aCA9IExlbmd0aCgp
OwotICAgIH0KLQotICAgIGlmIChmaXJzdExlbmd0aC5pc1VuZGVmaW5lZCgpIHx8IHNlY29uZExl
bmd0aC5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBiLnNldFdpZHRoKGZp
cnN0TGVuZ3RoKTsKLSAgICBiLnNldEhlaWdodChzZWNvbmRMZW5ndGgpOwotICAgIGxheWVyLT5z
ZXRTaXplTGVuZ3RoKGIpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxYUG9zaXRp
b24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewotICAgICAgICBsYXllci0+c2V0WFBv
c2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxYUG9zaXRpb24obGF5ZXItPnR5cGUoKSkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgTGVuZ3RoIGw7
Ci0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICBsID0gcHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpOwotICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRh
Z2UoKSkKLSAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KSwgUGVyY2VudCk7Ci0gICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBl
cmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUt
PmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUs
IHpvb21GYWN0b3IpKTsKLSAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBl
cmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAgbCA9IHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBl
cmNlbnRhZ2VMZW5ndGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsKLSAgICBsYXllci0+
c2V0WFBvc2l0aW9uKGwpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxZUG9zaXRp
b24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewotICAgICAgICBsYXllci0+c2V0WVBv
c2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxZUG9zaXRpb24obGF5ZXItPnR5cGUoKSkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgTGVuZ3RoIGw7
Ci0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICBsID0gcHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpOwotICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRh
Z2UoKSkKLSAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KSwgUGVyY2VudCk7Ci0gICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBl
cmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUt
PmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUs
IHpvb21GYWN0b3IpKTsKLSAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBl
cmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAgbCA9IHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBl
cmNlbnRhZ2VMZW5ndGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsKLSAgICBsYXllci0+
c2V0WVBvc2l0aW9uKGwpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkRl
bGF5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkoQW5p
bWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkocHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGZsb2F0LCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vjb25kcz4o
KSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1h
dGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlh
bFZhbHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OmluaXRp
YWxBbmltYXRpb25EaXJlY3Rpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkp
IHsKLSAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9u
KEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uTm9ybWFsKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NWYWx1ZUFsdGVybmF0ZToKLSAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihB
bmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTVmFsdWVSZXZlcnNlOgotICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFu
aW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTVmFsdWVBbHRlcm5hdGVSZXZlcnNlOgotICAgICAgICBsYXllci0+c2V0RGlyZWN0
aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25E
dXJhdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewotICAgICAgICBhbmltYXRpb24tPnNldER1cmF0
aW9uKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBhbmltYXRpb24tPnNldER1
cmF0aW9uKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxmbG9hdCwgQ1NTUHJpbWl0aXZlVmFs
dWU6OlNlY29uZHM+KCkpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkZp
bGxNb2RlKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1h
dGlvbjo6aW5pdGlhbEFuaW1hdGlvbkZpbGxNb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZU5vbmU6Ci0gICAgICAgIGxheWVyLT5zZXRG
aWxsTW9kZShBbmltYXRpb25GaWxsTW9kZU5vbmUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1ZhbHVlRm9yd2FyZHM6Ci0gICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25G
aWxsTW9kZUZvcndhcmRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUJhY2t3
YXJkczoKLSAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1hdGlvbkZpbGxNb2RlQmFja3dh
cmRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUJvdGg6Ci0gICAgICAgIGxh
eWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZUJvdGgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291
bnQoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25D
b3VudChBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25JdGVyYXRpb25Db3VudCgpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAgIGFuaW1h
dGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoLTEpOwotICAgIGVsc2UKLSAgICAgICAgYW5pbWF0aW9u
LT5zZXRJdGVyYXRpb25Db3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKLX0K
LQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiogbGF5ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsK
LSAgICAgICAgbGF5ZXItPnNldE5hbWUoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uTmFtZSgp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAg
bGF5ZXItPnNldElzTm9uZUFuaW1hdGlvbih0cnVlKTsKLSAgICBlbHNlCi0gICAgICAgIGxheWVy
LT5zZXROYW1lKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKLX0KLQotdm9pZCBT
dHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiBsYXllciwgQ1NT
VmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewotICAg
ICAgICBsYXllci0+c2V0UGxheVN0YXRlKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvblBsYXlT
dGF0ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
Ci0gICAgRUFuaW1QbGF5U3RhdGUgcGxheVN0YXRlID0gKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1QbGF5U3RhdGVQYXVzZWQgOiBBbmltUGxheVN0
YXRlUGxheWluZzsKLSAgICBsYXllci0+c2V0UGxheVN0YXRlKHBsYXlTdGF0ZSk7Ci19Ci0KLXZv
aWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uKiBhbmltYXRp
b24sIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkp
IHsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0
ZUFsbCk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJbnZhbGlk
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQWxsKSB7Ci0gICAgICAg
IGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVBbGwpOwotICAg
ICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCk7Ci0gICAgfSBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAg
ICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZU5vbmUp
OwotICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlv
bjo6QW5pbWF0ZVNpbmdsZVByb3BlcnR5KTsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0
eShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkp
OwotICAgIH0KLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25UaW1pbmdGdW5j
dGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewotICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1
bmN0aW9uKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMaW5lYXI6Ci0g
ICAgICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihMaW5lYXJUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZUVhc2U6Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdG
dW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlRWFzZUluOgotICAgICAgICAg
ICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbjo6Y3JlYXRlKDAuNDIsIDAuMCwgMS4wLCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlT3V0OgotICAgICAgICAgICAgICAgIGFu
aW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3Jl
YXRlKDAuMCwgMC4wLCAwLjU4LCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlSW5PdXQ6Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW9u
LT5zZXRUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoMC40
MiwgMC4wLCAwLjU4LCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVTdGVwU3RhcnQ6Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRU
aW1pbmdGdW5jdGlvbihTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoMSwgdHJ1ZSkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVN0ZXBFbmQ6Ci0g
ICAgICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihTdGVwc1RpbWluZ0Z1
bmN0aW9uOjpjcmVhdGUoMSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlLT5pc0N1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7Ci0gICAgICAgIENTU0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb25WYWx1ZSogY3ViaWNUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENTU0N1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgYW5pbWF0aW9uLT5z
ZXRUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoY3ViaWNU
aW1pbmdGdW5jdGlvbi0+eDEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+eTEoKSwgY3ViaWNUaW1p
bmdGdW5jdGlvbi0+eDIoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+eTIoKSkpOwotICAgIH0gZWxz
ZSBpZiAodmFsdWUtPmlzU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKCkpIHsKLSAgICAgICAgQ1NT
U3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKiBzdGVwc1RpbWluZ0Z1bmN0aW9uID0gc3RhdGljX2Nh
c3Q8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKj4odmFsdWUpOwotICAgICAgICBhbmltYXRp
b24tPnNldFRpbWluZ0Z1bmN0aW9uKFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZShzdGVwc1Rp
bWluZ0Z1bmN0aW9uLT5udW1iZXJPZlN0ZXBzKCksIHN0ZXBzVGltaW5nRnVuY3Rpb24tPnN0ZXBB
dFN0YXJ0KCkpKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0xpbmVhclRpbWluZ0Z1bmN0aW9u
VmFsdWUoKSkKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihMaW5lYXJUaW1p
bmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcE5pbmVQ
aWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBp
ZWNlSW1hZ2UmIGltYWdlKQotewotICAgIC8vIElmIHdlJ3JlIG5vdCBhIHZhbHVlIGxpc3QsIHRo
ZW4gd2UgYXJlICJub25lIiBhbmQgZG9uJ3QgbmVlZCB0byBhbHRlciB0aGUgZW1wdHkgaW1hZ2Ug
YXQgYWxsLgotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBSZXRyaWV2ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVlLgotICAg
IENTU1ZhbHVlTGlzdCogYm9yZGVySW1hZ2UgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2
YWx1ZSk7Ci0KLSAgICAvLyBTZXQgdGhlIGltYWdlICh0aGlzIGtpY2tzIG9mZiB0aGUgbG9hZCku
Ci0gICAgQ1NTUHJvcGVydHlJRCBpbWFnZVByb3BlcnR5OwotICAgIGlmIChwcm9wZXJ0eSA9PSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlKQotICAgICAgICBpbWFnZVByb3BlcnR5ID0gQ1NT
UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTsKLSAgICBlbHNlIGlmIChwcm9wZXJ0eSA9PSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSkKLSAgICAgICAgaW1hZ2VQcm9wZXJ0eSA9IENTU1By
b3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2VQ
cm9wZXJ0eSA9IHByb3BlcnR5OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBib3Jk
ZXJJbWFnZS0+bGVuZ3RoKCkgOyArK2kpIHsKLSAgICAgICAgQ1NTVmFsdWUqIGN1cnJlbnQgPSBi
b3JkZXJJbWFnZS0+aXRlbShpKTsKLQotICAgICAgICBpZiAoY3VycmVudC0+aXNJbWFnZVZhbHVl
KCkgfHwgY3VycmVudC0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkKLSNpZiBFTkFCTEUoQ1NTX0lN
QUdFX1NFVCkKLSAgICAgICAgICAgIHx8IGN1cnJlbnQtPmlzSW1hZ2VTZXRWYWx1ZSgpCi0jZW5k
aWYKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIGltYWdlLnNldEltYWdlKHN0eWxlSW1hZ2Uo
aW1hZ2VQcm9wZXJ0eSwgY3VycmVudCkpOwotICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5pc0Jv
cmRlckltYWdlU2xpY2VWYWx1ZSgpKQotICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2VTbGlj
ZShjdXJyZW50LCBpbWFnZSk7Ci0gICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlzVmFsdWVMaXN0
KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogc2xhc2hMaXN0ID0gc3RhdGljX2Nhc3Q8
Q1NTVmFsdWVMaXN0Kj4oY3VycmVudCk7Ci0gICAgICAgICAgICAvLyBNYXAgaW4gdGhlIGltYWdl
IHNsaWNlcy4KLSAgICAgICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0oMCkgJiYgc2xhc2hMaXN0
LT5pdGVtKDApLT5pc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQotICAgICAgICAgICAgICAgIG1h
cE5pbmVQaWVjZUltYWdlU2xpY2Uoc2xhc2hMaXN0LT5pdGVtKDApLCBpbWFnZSk7Ci0KLSAgICAg
ICAgICAgIC8vIE1hcCBpbiB0aGUgYm9yZGVyIHNsaWNlcy4KLSAgICAgICAgICAgIGlmIChzbGFz
aExpc3QtPml0ZW0oMSkpCi0gICAgICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKG1h
cE5pbmVQaWVjZUltYWdlUXVhZChzbGFzaExpc3QtPml0ZW0oMSkpKTsKLQotICAgICAgICAgICAg
Ly8gTWFwIGluIHRoZSBvdXRzZXQuCi0gICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5pdGVtKDIp
KQotICAgICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGllY2VJbWFnZVF1YWQo
c2xhc2hMaXN0LT5pdGVtKDIpKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC0+aXNQcmlt
aXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAvLyBTZXQgdGhlIGFwcHJvcHJpYXRlIHJ1bGVz
IGZvciBzdHJldGNoL3JvdW5kL3JlcGVhdCBvZiB0aGUgc2xpY2VzLgotICAgICAgICAgICAgbWFw
TmluZVBpZWNlSW1hZ2VSZXBlYXQoY3VycmVudCwgaW1hZ2UpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2UpIHsKLSAg
ICAgICAgLy8gV2UgaGF2ZSB0byBwcmVzZXJ2ZSB0aGUgbGVnYWN5IGJlaGF2aW9yIG9mIC13ZWJr
aXQtYm9yZGVyLWltYWdlIGFuZCBtYWtlIHRoZSBib3JkZXIgc2xpY2VzCi0gICAgICAgIC8vIGFs
c28gc2V0IHRoZSBib3JkZXIgd2lkdGhzLiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHBl
cmNlbnRhZ2VzLCBzaW5jZSB3ZSBkb24ndCBldmVuIHN1cHBvcnQKLSAgICAgICAgLy8gdGhvc2Ug
b24gcmVhbCBib3JkZXJzIHlldC4KLSAgICAgICAgaWYgKGltYWdlLmJvcmRlclNsaWNlcygpLnRv
cCgpLmlzRml4ZWQoKSkKLSAgICAgICAgICAgIHN0eWxlKCktPnNldEJvcmRlclRvcFdpZHRoKGlt
YWdlLmJvcmRlclNsaWNlcygpLnRvcCgpLnZhbHVlKCkpOwotICAgICAgICBpZiAoaW1hZ2UuYm9y
ZGVyU2xpY2VzKCkucmlnaHQoKS5pc0ZpeGVkKCkpCi0gICAgICAgICAgICBzdHlsZSgpLT5zZXRC
b3JkZXJSaWdodFdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLnJpZ2h0KCkudmFsdWUoKSk7Ci0g
ICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS5ib3R0b20oKS5pc0ZpeGVkKCkpCi0gICAg
ICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJCb3R0b21XaWR0aChpbWFnZS5ib3JkZXJTbGljZXMo
KS5ib3R0b20oKS52YWx1ZSgpKTsKLSAgICAgICAgaWYgKGltYWdlLmJvcmRlclNsaWNlcygpLmxl
ZnQoKS5pc0ZpeGVkKCkpCi0gICAgICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJMZWZ0V2lkdGgo
aW1hZ2UuYm9yZGVyU2xpY2VzKCkubGVmdCgpLnZhbHVlKCkpOwotICAgIH0KLX0KLQotdm9pZCBT
dHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiB2YWx1ZSwgTmlu
ZVBpZWNlSW1hZ2UmIGltYWdlKQotewotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc0JvcmRl
ckltYWdlU2xpY2VWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBSZXRyaWV2ZSB0
aGUgYm9yZGVyIGltYWdlIHZhbHVlLgotICAgIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZSogYm9y
ZGVySW1hZ2VTbGljZSA9IHN0YXRpY19jYXN0PENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZSo+KHZh
bHVlKTsKLQotICAgIC8vIFNldCB1cCBhIGxlbmd0aCBib3ggdG8gcmVwcmVzZW50IG91ciBpbWFn
ZSBzbGljZXMuCi0gICAgTGVuZ3RoQm94IGJveDsKLSAgICBRdWFkKiBzbGljZXMgPSBib3JkZXJJ
bWFnZVNsaWNlLT5zbGljZXMoKTsKLSAgICBpZiAoc2xpY2VzLT50b3AoKS0+aXNQZXJjZW50YWdl
KCkpCi0gICAgICAgIGJveC5tX3RvcCA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5nZXREb3VibGVW
YWx1ZSgpLCBQZXJjZW50KTsKLSAgICBlbHNlCi0gICAgICAgIGJveC5tX3RvcCA9IExlbmd0aChz
bGljZXMtPnRvcCgpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiks
IEZpeGVkKTsKLSAgICBpZiAoc2xpY2VzLT5ib3R0b20oKS0+aXNQZXJjZW50YWdlKCkpCi0gICAg
ICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgpLT5nZXREb3VibGVWYWx1
ZSgpLCBQZXJjZW50KTsKLSAgICBlbHNlCi0gICAgICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aCgo
aW50KXNsaWNlcy0+Ym90dG9tKCktPmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpLCBGaXhlZCk7Ci0gICAgaWYgKHNsaWNlcy0+bGVmdCgpLT5pc1BlcmNlbnRhZ2Uo
KSkKLSAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0RG91Ymxl
VmFsdWUoKSwgUGVyY2VudCk7Ci0gICAgZWxzZQotICAgICAgICBib3gubV9sZWZ0ID0gTGVuZ3Ro
KHNsaWNlcy0+bGVmdCgpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UiksIEZpeGVkKTsKLSAgICBpZiAoc2xpY2VzLT5yaWdodCgpLT5pc1BlcmNlbnRhZ2UoKSkKLSAg
ICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5nZXREb3VibGVWYWx1
ZSgpLCBQZXJjZW50KTsKLSAgICBlbHNlCi0gICAgICAgIGJveC5tX3JpZ2h0ID0gTGVuZ3RoKHNs
aWNlcy0+cmlnaHQoKS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
LCBGaXhlZCk7Ci0gICAgaW1hZ2Uuc2V0SW1hZ2VTbGljZXMoYm94KTsKLQotICAgIC8vIFNldCBv
dXIgZmlsbCBtb2RlLgotICAgIGltYWdlLnNldEZpbGwoYm9yZGVySW1hZ2VTbGljZS0+bV9maWxs
KTsKLX0KLQotTGVuZ3RoQm94IFN0eWxlUmVzb2x2ZXI6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChD
U1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIExlbmd0aEJveCgpOwotCi0gICAgLy8gR2V0IG91ciB6
b29tIHZhbHVlLgotICAgIGZsb2F0IHpvb20gPSB1c2VTVkdab29tUnVsZXMoKSA/IDEuMGYgOiBz
dHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICAvLyBSZXRyaWV2ZSB0aGUgcHJpbWl0aXZl
IHZhbHVlLgotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBib3JkZXJXaWR0aHMgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLQotICAgIC8vIFNldCB1cCBhIGxlbmd0aCBi
b3ggdG8gcmVwcmVzZW50IG91ciBpbWFnZSBzbGljZXMuCi0gICAgTGVuZ3RoQm94IGJveDsgLy8g
RGVmYXVsdHMgdG8gJ2F1dG8nIHNvIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIHRoYXQgZXhwbGlj
aXRseSBiZWxvdy4KLSAgICBRdWFkKiBzbGljZXMgPSBib3JkZXJXaWR0aHMtPmdldFF1YWRWYWx1
ZSgpOwotICAgIGlmIChzbGljZXMtPnRvcCgpLT5pc051bWJlcigpKQotICAgICAgICBib3gubV90
b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOwotICAg
IGVsc2UgaWYgKHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQotICAgICAgICBib3gubV90
b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7Ci0gICAgZWxzZSBpZiAoc2xpY2VzLT50b3Ao
KS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJveC5tX3RvcCA9IHNsaWNl
cy0+dG9wKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCByb290RWxlbWVudFN0eWxl
KCksIHpvb20pOwotCi0gICAgaWYgKHNsaWNlcy0+cmlnaHQoKS0+aXNOdW1iZXIoKSkKLSAgICAg
ICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5nZXRJbnRWYWx1ZSgpLCBS
ZWxhdGl2ZSk7Ci0gICAgZWxzZSBpZiAoc2xpY2VzLT5yaWdodCgpLT5pc1BlcmNlbnRhZ2UoKSkK
LSAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5nZXREb3VibGVW
YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50KTsKLSAgICBl
bHNlIGlmIChzbGljZXMtPnJpZ2h0KCktPmdldElkZW50KCkgIT0gQ1NTVmFsdWVBdXRvKQotICAg
ICAgICBib3gubV9yaWdodCA9IHNsaWNlcy0+cmlnaHQoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+
KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7Ci0KLSAgICBpZiAoc2xpY2VzLT5i
b3R0b20oKS0+aXNOdW1iZXIoKSkKLSAgICAgICAgYm94Lm1fYm90dG9tID0gTGVuZ3RoKHNsaWNl
cy0+Ym90dG9tKCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKLSAgICBlbHNlIGlmIChzbGlj
ZXMtPmJvdHRvbSgpLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgYm94Lm1fYm90dG9tID0gTGVu
Z3RoKHNsaWNlcy0+Ym90dG9tKCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQpOwotICAgIGVsc2UgaWYgKHNsaWNlcy0+Ym90dG9tKCkt
PmdldElkZW50KCkgIT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICBib3gubV9ib3R0b20gPSBzbGlj
ZXMtPmJvdHRvbSgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRT
dHlsZSgpLCB6b29tKTsKLQotICAgIGlmIChzbGljZXMtPmxlZnQoKS0+aXNOdW1iZXIoKSkKLSAg
ICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0SW50VmFsdWUoKSwg
UmVsYXRpdmUpOwotICAgIGVsc2UgaWYgKHNsaWNlcy0+bGVmdCgpLT5pc1BlcmNlbnRhZ2UoKSkK
LSAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0RG91YmxlVmFs
dWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7Ci0gICAgZWxz
ZSBpZiAoc2xpY2VzLT5sZWZ0KCktPmdldElkZW50KCkgIT0gQ1NTVmFsdWVBdXRvKQotICAgICAg
ICBib3gubV9sZWZ0ID0gc2xpY2VzLT5sZWZ0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHls
ZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb20pOwotCi0gICAgcmV0dXJuIGJveDsKLX0KLQot
dm9pZCBTdHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSogdmFs
dWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKLXsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKLSAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpOwot
ICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+c2Vjb25kKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGludCBmaXJzdElkZW50aWZpZXIgPSBwYWlyLT5maXJzdCgpLT5n
ZXRJZGVudCgpOwotICAgIGludCBzZWNvbmRJZGVudGlmaWVyID0gcGFpci0+c2Vjb25kKCktPmdl
dElkZW50KCk7Ci0KLSAgICBFTmluZVBpZWNlSW1hZ2VSdWxlIGhvcml6b250YWxSdWxlOwotICAg
IHN3aXRjaCAoZmlyc3RJZGVudGlmaWVyKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZVN0cmV0Y2g6Ci0g
ICAgICAgIGhvcml6b250YWxSdWxlID0gU3RyZXRjaEltYWdlUnVsZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDU1NWYWx1ZVJvdW5kOgotICAgICAgICBob3Jpem9udGFsUnVsZSA9IFJvdW5k
SW1hZ2VSdWxlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlU3BhY2U6Ci0gICAg
ICAgIGhvcml6b250YWxSdWxlID0gU3BhY2VJbWFnZVJ1bGU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6IC8vIENTU1ZhbHVlUmVwZWF0Ci0gICAgICAgIGhvcml6b250YWxSdWxlID0gUmVw
ZWF0SW1hZ2VSdWxlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaW1hZ2Uuc2V0SG9yaXpv
bnRhbFJ1bGUoaG9yaXpvbnRhbFJ1bGUpOwotCi0gICAgRU5pbmVQaWVjZUltYWdlUnVsZSB2ZXJ0
aWNhbFJ1bGU7Ci0gICAgc3dpdGNoIChzZWNvbmRJZGVudGlmaWVyKSB7Ci0gICAgY2FzZSBDU1NW
YWx1ZVN0cmV0Y2g6Ci0gICAgICAgIHZlcnRpY2FsUnVsZSA9IFN0cmV0Y2hJbWFnZVJ1bGU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVSb3VuZDoKLSAgICAgICAgdmVydGljYWxS
dWxlID0gUm91bmRJbWFnZVJ1bGU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVT
cGFjZToKLSAgICAgICAgdmVydGljYWxSdWxlID0gU3BhY2VJbWFnZVJ1bGU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6IC8vIENTU1ZhbHVlUmVwZWF0Ci0gICAgICAgIHZlcnRpY2FsUnVs
ZSA9IFJlcGVhdEltYWdlUnVsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGltYWdlLnNl
dFZlcnRpY2FsUnVsZSh2ZXJ0aWNhbFJ1bGUpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNo
ZWNrRm9yVGV4dFNpemVBZGp1c3QoKQotewotICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVz
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2Ny
aXB0aW9uKG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKLSAgICBuZXdGb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOwot
ICAgIG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwotfQot
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5
bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICBpZiAoc3R5bGUtPmVmZmVjdGl2
ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKTsKLSAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxk
Rm9udCk7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3Bl
Y2lmaWVkU2l6ZSgpKTsKLSAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNj
cmlwdGlvbik7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5
Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQotewot
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOwotCi0gICAgaWYgKGNoaWxkRm9udC5pc0Fic29sdXRlU2l6ZSgpIHx8ICFwYXJlbnRT
dHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJl
bnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmIChjaGlsZEZv
bnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGb3Igbm93LCBsdW1wIGFsbCBmYW1pbGll
cyBidXQgbW9ub3NwYWNlIHRvZ2V0aGVyLgotICAgIGlmIChjaGlsZEZvbnQuZ2VuZXJpY0ZhbWls
eSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5ICYmCi0gICAgICAgIHBhcmVu
dEZvbnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBrbm93IHRoZSBwYXJlbnQgaXMgbW9ub3Nw
YWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3BhY2UsIGFuZCB0aGF0IGZvbnQKLSAgICAvLyBzaXpl
IHdhcyB1bnNwZWNpZmllZC4gIFdlIHdhbnQgdG8gc2NhbGUgb3VyIGZvbnQgc2l6ZSBhcyBhcHBy
b3ByaWF0ZS4KLSAgICAvLyBJZiB0aGUgZm9udCB1c2VzIGEga2V5d29yZCBzaXplLCB0aGVuIHdl
IHJlZmV0Y2ggZnJvbSB0aGUgdGFibGUgcmF0aGVyIHRoYW4KLSAgICAvLyBtdWx0aXBseWluZyBi
eSBvdXIgc2NhbGUgZmFjdG9yLgotICAgIGZsb2F0IHNpemU7Ci0gICAgaWYgKGNoaWxkRm9udC5r
ZXl3b3JkU2l6ZSgpKQotICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tl
ci5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBjaGlsZEZvbnQua2V5d29yZFNpemUoKSAt
IDEsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkpOwotICAgIGVsc2UgewotICAgICAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsK
LSAgICAgICAgZmxvYXQgZml4ZWRTY2FsZUZhY3RvciA9IHNldHRpbmdzCi0gICAgICAgICAgICA/
IHN0YXRpY19jYXN0PGZsb2F0PihzZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKSkgLyBz
ZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCkKLSAgICAgICAgICAgIDogMTsKLSAgICAgICAgc2l6
ZSA9IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID8KLSAgICAgICAgICAgICAgICBj
aGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpIC8gZml4ZWRTY2FsZUZhY3RvciA6Ci0gICAgICAgICAg
ICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSAqIGZpeGVkU2NhbGVGYWN0b3I7Ci0gICAg
fQotCi0gICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOwot
ICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgc3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwotfQotCi12b2lkIFN0eWxlUmVz
b2x2ZXI6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9h
dCBzaXplKQotewotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwot
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNw
ZWNpZmllZFNpemUobV9jaGVja2VyLmRvY3VtZW50KCksIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNj
cmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMoKSkpOwotfQot
Ci1mbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShE
b2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6
ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpCi17Ci0gICAgZmxv
YXQgem9vbUZhY3RvciA9IDEuMGY7Ci0gICAgaWYgKCF1c2VTVkdab29tUnVsZXMpIHsKLSAgICAg
ICAgem9vbUZhY3RvciA9IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgICAgIHpvb21GYWN0b3IgKj0g
ZnJhbWUtPnRleHRab29tRmFjdG9yKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0eWxlUmVzb2x2
ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50LCB6b29tRmFjdG9y
LCBpc0Fic29sdXRlU2l6ZSwgc3BlY2lmaWVkU2l6ZSk7Ci19Ci0KLWZsb2F0IFN0eWxlUmVzb2x2
ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1bWVudCwg
ZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6
ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplKQot
ewotICAgIC8vIFRleHQgd2l0aCBhIDBweCBmb250IHNpemUgc2hvdWxkIG5vdCBiZSB2aXNpYmxl
IGFuZCB0aGVyZWZvcmUgbmVlZHMgdG8gYmUKLSAgICAvLyBleGVtcHQgZnJvbSBtaW5pbXVtIGZv
bnQgc2l6ZSBydWxlcy4gQWNpZDMgcmVsaWVzIG9uIHRoaXMgZm9yIHBpeGVsLXBlcmZlY3QKLSAg
ICAvLyByZW5kZXJpbmcuIFRoaXMgaXMgYWxzbyBjb21wYXRpYmxlIHdpdGggb3RoZXIgYnJvd3Nl
cnMgdGhhdCBoYXZlIG1pbmltdW0KLSAgICAvLyBmb250IHNpemUgc2V0dGluZ3MgKGUuZy4gRmly
ZWZveCkuCi0gICAgaWYgKGZhYnNmKHNwZWNpZmllZFNpemUpIDwgc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OmVwc2lsb24oKSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICAvLyBXZSBz
dXBwb3J0IHR3byB0eXBlcyBvZiBtaW5pbXVtIGZvbnQgc2l6ZS4gIFRoZSBmaXJzdCBpcyBhIGhh
cmQgb3ZlcnJpZGUgdGhhdCBhcHBsaWVzIHRvCi0gICAgLy8gYWxsIGZvbnRzLiAgVGhpcyBpcyAi
bWluU2l6ZS4iICBUaGUgc2Vjb25kIHR5cGUgb2YgbWluaW11bSBmb250IHNpemUgaXMgYSAic21h
cnQgbWluaW11bSIKLSAgICAvLyB0aGF0IGlzIGFwcGxpZWQgb25seSB3aGVuIHRoZSBXZWIgcGFn
ZSBjYW4ndCBrbm93IHdoYXQgc2l6ZSBpdCByZWFsbHkgYXNrZWQgZm9yLCBlLmcuLAotICAgIC8v
IHdoZW4gaXQgdXNlcyBsb2dpY2FsIHNpemVzIGxpa2UgInNtYWxsIiBvciBleHByZXNzZXMgdGhl
IGZvbnQtc2l6ZSBhcyBhIHBlcmNlbnRhZ2Ugb2YKLSAgICAvLyB0aGUgdXNlcidzIGRlZmF1bHQg
Zm9udCBzZXR0aW5nLgotCi0gICAgLy8gV2l0aCB0aGUgc21hcnQgbWluaW11bSwgd2UgbmV2ZXIg
d2FudCB0byBnZXQgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIGZvbnQgc2l6ZSB0byBrZWVwIGZv
bnRzIHJlYWRhYmxlLgotICAgIC8vIEhvd2V2ZXIgd2UgYWx3YXlzIGFsbG93IHRoZSBwYWdlIHRv
IHNldCBhbiBleHBsaWNpdCBwaXhlbCBzaXplIHRoYXQgaXMgc21hbGxlciwKLSAgICAvLyBzaW5j
ZSBzaXRlcyB3aWxsIG1pcy1yZW5kZXIgb3RoZXJ3aXNlIChlLmcuLCBodHRwOi8vd3d3LmdhbWVz
cG90LmNvbSB3aXRoIGEgOXB4IG1pbmltdW0pLgotCi0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
ZG9jdW1lbnQtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAgcmV0dXJu
IDEuMGY7Ci0KLSAgICBpbnQgbWluU2l6ZSA9IHNldHRpbmdzLT5taW5pbXVtRm9udFNpemUoKTsK
LSAgICBpbnQgbWluTG9naWNhbFNpemUgPSBzZXR0aW5ncy0+bWluaW11bUxvZ2ljYWxGb250U2l6
ZSgpOwotICAgIGZsb2F0IHpvb21lZFNpemUgPSBzcGVjaWZpZWRTaXplICogem9vbUZhY3RvcjsK
LQotICAgIC8vIEFwcGx5IHRoZSBoYXJkIG1pbmltdW0gZmlyc3QuICBXZSBvbmx5IGFwcGx5IHRo
ZSBoYXJkIG1pbmltdW0gaWYgYWZ0ZXIgem9vbWluZyB3ZSdyZSBzdGlsbCB0b28gc21hbGwuCi0g
ICAgaWYgKHpvb21lZFNpemUgPCBtaW5TaXplKQotICAgICAgICB6b29tZWRTaXplID0gbWluU2l6
ZTsKLQotICAgIC8vIE5vdyBhcHBseSB0aGUgInNtYXJ0IG1pbmltdW0uIiAgVGhpcyBtaW5pbXVt
IGlzIGFsc28gb25seSBhcHBsaWVkIGlmIHdlJ3JlIHN0aWxsIHRvbyBzbWFsbAotICAgIC8vIGFm
dGVyIHpvb21pbmcuICBUaGUgZm9udCBzaXplIG11c3QgZWl0aGVyIGJlIHJlbGF0aXZlIHRvIHRo
ZSB1c2VyIGRlZmF1bHQgb3IgdGhlIG9yaWdpbmFsIHNpemUKLSAgICAvLyBtdXN0IGhhdmUgYmVl
biBhY2NlcHRhYmxlLiAgSW4gb3RoZXIgd29yZHMsIHdlIG9ubHkgYXBwbHkgdGhlIHNtYXJ0IG1p
bmltdW0gd2hlbmV2ZXIgd2UncmUgcG9zaXRpdmUKLSAgICAvLyBkb2luZyBzbyB3b24ndCBkaXNy
dXB0IHRoZSBsYXlvdXQuCi0gICAgaWYgKHVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplICYmIHpv
b21lZFNpemUgPCBtaW5Mb2dpY2FsU2l6ZSAmJiAoc3BlY2lmaWVkU2l6ZSA+PSBtaW5Mb2dpY2Fs
U2l6ZSB8fCAhaXNBYnNvbHV0ZVNpemUpKQotICAgICAgICB6b29tZWRTaXplID0gbWluTG9naWNh
bFNpemU7Ci0KLSAgICAvLyBBbHNvIGNsYW1wIHRvIGEgcmVhc29uYWJsZSBtYXhpbXVtIHRvIHBy
ZXZlbnQgaW5zYW5lIGZvbnQgc2l6ZXMgZnJvbSBjYXVzaW5nIGNyYXNoZXMgb24gdmFyaW91cwot
ICAgIC8vIHBsYXRmb3JtcyAoSSdtIGxvb2tpbmcgYXQgeW91LCBXaW5kb3dzLikKLSAgICByZXR1
cm4gbWluKDEwMDAwMDAuMGYsIHpvb21lZFNpemUpOwotfQotCi1jb25zdCBpbnQgZm9udFNpemVU
YWJsZU1heCA9IDE2OwotY29uc3QgaW50IGZvbnRTaXplVGFibGVNaW4gPSA5OwotY29uc3QgaW50
IHRvdGFsS2V5d29yZHMgPSA4OwotCi0vLyBXaW5JRS9OYXY0IHRhYmxlIGZvciBmb250IHNpemVz
LiAgRGVzaWduZWQgdG8gbWF0Y2ggdGhlIGxlZ2FjeSBmb250IG1hcHBpbmcgc3lzdGVtIG9mIEhU
TUwuCi1zdGF0aWMgY29uc3QgaW50IHF1aXJrc0ZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1h
eCAtIGZvbnRTaXplVGFibGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9Ci17Ci0gICAgICB7IDks
ICAgIDksICAgICA5LCAgICAgOSwgICAgMTEsICAgIDE0LCAgICAxOCwgICAgMjggfSwKLSAgICAg
IHsgOSwgICAgOSwgICAgIDksICAgIDEwLCAgICAxMiwgICAgMTUsICAgIDIwLCAgICAzMSB9LAot
ICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDM0
IH0sCi0gICAgICB7IDksICAgIDksICAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE4LCAgICAyNCwg
ICAgMzcgfSwKLSAgICAgIHsgOSwgICAgOSwgICAgMTAsICAgIDEzLCAgICAxNiwgICAgMjAsICAg
IDI2LCAgICA0MCB9LCAvLyBmaXhlZCBmb250IGRlZmF1bHQgKDEzKQotICAgICAgeyA5LCAgICA5
LCAgICAxMSwgICAgMTQsICAgIDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0sCi0gICAgICB7IDks
ICAgMTAsICAgIDEyLCAgICAxNSwgICAgMTcsICAgIDIzLCAgICAzMCwgICAgNDUgfSwKLSAgICAg
IHsgOSwgICAxMCwgICAgMTMsICAgIDE2LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9ICAv
LyBwcm9wb3J0aW9uYWwgZm9udCBkZWZhdWx0ICgxNikKLX07Ci0vLyBIVE1MICAgICAgIDEgICAg
ICAyICAgICAgMyAgICAgIDQgICAgICA1ICAgICAgNiAgICAgIDcKLS8vIENTUyAgeHhzICAgeHMg
ICAgIHMgICAgICBtICAgICAgbCAgICAgeGwgICAgIHh4bAotLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgIHwKLS8vICAgICAgICAgICAgICAgICAgICAgIHVzZXIgcHJlZgotCi0vLyBTdHJpY3Qg
bW9kZSB0YWJsZSBtYXRjaGVzIE1hY0lFIGFuZCBNb3ppbGxhJ3Mgc2V0dGluZ3MgZXhhY3RseS4K
LXN0YXRpYyBjb25zdCBpbnQgc3RyaWN0Rm9udFNpemVUYWJsZVtmb250U2l6ZVRhYmxlTWF4IC0g
Zm9udFNpemVUYWJsZU1pbiArIDFdW3RvdGFsS2V5d29yZHNdID0KLXsKLSAgICAgIHsgOSwgICAg
OSwgICAgIDksICAgICA5LCAgICAxMSwgICAgMTQsICAgIDE4LCAgICAyNyB9LAotICAgICAgeyA5
LCAgICA5LCAgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNSwgICAgMjAsICAgIDMwIH0sCi0gICAg
ICB7IDksICAgIDksICAgIDEwLCAgICAxMSwgICAgMTMsICAgIDE3LCAgICAyMiwgICAgMzMgfSwK
LSAgICAgIHsgOSwgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNCwgICAgMTgsICAgIDI0LCAgICAz
NiB9LAotICAgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE2LCAgICAyMCwgICAgMjYs
ICAgIDM5IH0sIC8vIGZpeGVkIGZvbnQgZGVmYXVsdCAoMTMpCi0gICAgICB7IDksICAgMTAsICAg
IDEyLCAgICAxNCwgICAgMTcsICAgIDIxLCAgICAyOCwgICAgNDIgfSwKLSAgICAgIHsgOSwgICAx
MCwgICAgMTMsICAgIDE1LCAgICAxOCwgICAgMjMsICAgIDMwLCAgICA0NSB9LAotICAgICAgeyA5
LCAgIDEwLCAgICAxMywgICAgMTYsICAgIDE4LCAgICAyNCwgICAgMzIsICAgIDQ4IH0gIC8vIHBy
b3BvcnRpb25hbCBmb250IGRlZmF1bHQgKDE2KQotfTsKLS8vIEhUTUwgICAgICAgMSAgICAgIDIg
ICAgICAzICAgICAgNCAgICAgIDUgICAgICA2ICAgICAgNwotLy8gQ1NTICB4eHMgICB4cyAgICAg
cyAgICAgIG0gICAgICBsICAgICB4bCAgICAgeHhsCi0vLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAotLy8gICAgICAgICAgICAgICAgICAgICAgdXNlciBwcmVmCi0KLS8vIEZvciB2YWx1ZXMg
b3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIHRhYmxlLCB3ZSB1c2UgVG9kZCBGYWhybmVyJ3Mgc3Vn
Z2VzdGVkIHNjYWxlCi0vLyBmYWN0b3JzIGZvciBlYWNoIGtleXdvcmQgdmFsdWUuCi1zdGF0aWMg
Y29uc3QgZmxvYXQgZm9udFNpemVGYWN0b3JzW3RvdGFsS2V5d29yZHNdID0geyAwLjYwZiwgMC43
NWYsIDAuODlmLCAxLjBmLCAxLjJmLCAxLjVmLCAyLjBmLCAzLjBmIH07Ci0KLWZsb2F0IFN0eWxl
UmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCogZG9jdW1lbnQsIGludCBrZXl3
b3JkLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpCi17Ci0gICAgU2V0dGluZ3MqIHNl
dHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncykKLSAgICAg
ICAgcmV0dXJuIDEuMGY7Ci0KLSAgICBib29sIHF1aXJrc01vZGUgPSBkb2N1bWVudC0+aW5RdWly
a3NNb2RlKCk7Ci0gICAgaW50IG1lZGl1bVNpemUgPSBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXpl
ID8gc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZv
bnRTaXplKCk7Ci0gICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1pbiAmJiBtZWRp
dW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKLSAgICAgICAgLy8gTG9vayB1cCB0aGUgZW50
cnkgaW4gdGhlIHRhYmxlLgotICAgICAgICBpbnQgcm93ID0gbWVkaXVtU2l6ZSAtIGZvbnRTaXpl
VGFibGVNaW47Ci0gICAgICAgIGludCBjb2wgPSAoa2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbCk7
Ci0gICAgICAgIHJldHVybiBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVUYWJsZVtyb3ddW2Nv
bF0gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd11bY29sXTsKLSAgICB9Ci0KLSAgICAvLyBWYWx1
ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgdGFibGUuIEFwcGx5IHRoZSBzY2FsZSBmYWN0
b3IgaW5zdGVhZC4KLSAgICBmbG9hdCBtaW5Mb2dpY2FsU2l6ZSA9IG1heChzZXR0aW5ncy0+bWlu
aW11bUxvZ2ljYWxGb250U2l6ZSgpLCAxKTsKLSAgICByZXR1cm4gbWF4KGZvbnRTaXplRmFjdG9y
c1trZXl3b3JkIC0gQ1NTVmFsdWVYeFNtYWxsXSptZWRpdW1TaXplLCBtaW5Mb2dpY2FsU2l6ZSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW50IGZpbmROZWFyZXN0TGVnYWN5
Rm9udFNpemUoaW50IHBpeGVsRm9udFNpemUsIGNvbnN0IFQqIHRhYmxlLCBpbnQgbXVsdGlwbGll
cikKLXsKLSAgICAvLyBJZ25vcmUgdGFibGVbMF0gYmVjYXVzZSB4eC1zbWFsbCBkb2VzIG5vdCBj
b3JyZXNwb25kIHRvIGFueSBsZWdhY3kgZm9udCBzaXplLgotICAgIGZvciAoaW50IGkgPSAxOyBp
IDwgdG90YWxLZXl3b3JkcyAtIDE7IGkrKykgewotICAgICAgICBpZiAocGl4ZWxGb250U2l6ZSAq
IDIgPCAodGFibGVbaV0gKyB0YWJsZVtpICsgMV0pICogbXVsdGlwbGllcikKLSAgICAgICAgICAg
IHJldHVybiBpOwotICAgIH0KLSAgICByZXR1cm4gdG90YWxLZXl3b3JkcyAtIDE7Ci19Ci0KLWlu
dCBTdHlsZVJlc29sdmVyOjpsZWdhY3lGb250U2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGludCBw
aXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpCi17Ci0gICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5n
cykKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBib29sIHF1aXJrc01vZGUgPSBkb2N1bWVudC0+
aW5RdWlya3NNb2RlKCk7Ci0gICAgaW50IG1lZGl1bVNpemUgPSBzaG91bGRVc2VGaXhlZERlZmF1
bHRTaXplID8gc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVm
YXVsdEZvbnRTaXplKCk7Ci0gICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1pbiAm
JiBtZWRpdW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKLSAgICAgICAgaW50IHJvdyA9IG1l
ZGl1bVNpemUgLSBmb250U2l6ZVRhYmxlTWluOwotICAgICAgICByZXR1cm4gZmluZE5lYXJlc3RM
ZWdhY3lGb250U2l6ZTxpbnQ+KHBpeGVsRm9udFNpemUsIHF1aXJrc01vZGUgPyBxdWlya3NGb250
U2l6ZVRhYmxlW3Jvd10gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd10sIDEpOwotICAgIH0KLQot
ICAgIHJldHVybiBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplPGZsb2F0PihwaXhlbEZvbnRTaXpl
LCBmb250U2l6ZUZhY3RvcnMsIG1lZGl1bVNpemUpOwotfQotCi1zdGF0aWMgQ29sb3IgY29sb3JG
b3JDU1NWYWx1ZShpbnQgY3NzVmFsdWVJZCkKLXsKLSAgICBzdHJ1Y3QgQ29sb3JWYWx1ZSB7Ci0g
ICAgICAgIGludCBjc3NWYWx1ZUlkOwotICAgICAgICBSR0JBMzIgY29sb3I7Ci0gICAgfTsKLQot
ICAgIHN0YXRpYyBjb25zdCBDb2xvclZhbHVlIGNvbG9yVmFsdWVzW10gPSB7Ci0gICAgICAgIHsg
Q1NTVmFsdWVBcXVhLCAweEZGMDBGRkZGIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVCbGFjaywgMHhG
RjAwMDAwMCB9LAotICAgICAgICB7IENTU1ZhbHVlQmx1ZSwgMHhGRjAwMDBGRiB9LAotICAgICAg
ICB7IENTU1ZhbHVlRnVjaHNpYSwgMHhGRkZGMDBGRiB9LAotICAgICAgICB7IENTU1ZhbHVlR3Jh
eSwgMHhGRjgwODA4MCB9LAotICAgICAgICB7IENTU1ZhbHVlR3JlZW4sIDB4RkYwMDgwMDAgIH0s
Ci0gICAgICAgIHsgQ1NTVmFsdWVHcmV5LCAweEZGODA4MDgwIH0sCi0gICAgICAgIHsgQ1NTVmFs
dWVMaW1lLCAweEZGMDBGRjAwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVNYXJvb24sIDB4RkY4MDAw
MDAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZU5hdnksIDB4RkYwMDAwODAgfSwKLSAgICAgICAgeyBD
U1NWYWx1ZU9saXZlLCAweEZGODA4MDAwICB9LAotICAgICAgICB7IENTU1ZhbHVlT3JhbmdlLCAw
eEZGRkZBNTAwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVQdXJwbGUsIDB4RkY4MDAwODAgfSwKLSAg
ICAgICAgeyBDU1NWYWx1ZVJlZCwgMHhGRkZGMDAwMCB9LAotICAgICAgICB7IENTU1ZhbHVlU2ls
dmVyLCAweEZGQzBDMEMwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVUZWFsLCAweEZGMDA4MDgwICB9
LAotICAgICAgICB7IENTU1ZhbHVlVHJhbnNwYXJlbnQsIDB4MDAwMDAwMDAgfSwKLSAgICAgICAg
eyBDU1NWYWx1ZVdoaXRlLCAweEZGRkZGRkZGIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVZZWxsb3cs
IDB4RkZGRkZGMDAgfSwKLSAgICAgICAgeyAwLCAwIH0KLSAgICB9OwotCi0gICAgZm9yIChjb25z
dCBDb2xvclZhbHVlKiBjb2wgPSBjb2xvclZhbHVlczsgY29sLT5jc3NWYWx1ZUlkOyArK2NvbCkg
ewotICAgICAgICBpZiAoY29sLT5jc3NWYWx1ZUlkID09IGNzc1ZhbHVlSWQpCi0gICAgICAgICAg
ICByZXR1cm4gY29sLT5jb2xvcjsKLSAgICB9Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS0+c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7Ci19Ci0KLUNvbG9yIFN0eWxlUmVz
b2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwg
Ym9vbCBmb3JWaXNpdGVkTGluaykgY29uc3QKLXsKLSAgICBpZiAodmFsdWUtPmlzUkdCQ29sb3Io
KSkKLSAgICAgICAgcmV0dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpKTsKLQotICAg
IGludCBpZGVudCA9IHZhbHVlLT5nZXRJZGVudCgpOwotICAgIHN3aXRjaCAoaWRlbnQpIHsKLSAg
ICBjYXNlIDA6Ci0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRUZXh0OgotICAgICAgICByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpLT50ZXh0Q29sb3Io
KTsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKLSAgICAgICAgcmV0dXJuIChtX2VsZW1l
bnQtPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
dmlzaXRlZExpbmtDb2xvcigpIDogbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsK
LSAgICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoKLSAgICAgICAgcmV0dXJuIG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7Ci0gICAgY2FzZSBDU1NWYWx1ZVdl
YmtpdEZvY3VzUmluZ0NvbG9yOgotICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmZvY3VzUmlu
Z0NvbG9yKCk7Ci0gICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgcmV0dXJu
IG1fc3R5bGUtPmNvbG9yKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGNvbG9yRm9y
Q1NTVmFsdWUoaWRlbnQpOwotICAgIH0KLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpoYXNTZWxl
Y3RvckZvckF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcgJmF0dHJuYW1lKSBjb25zdAotewot
ICAgIHJldHVybiBtX2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5jb250YWlucyhhdHRybmFtZS5pbXBs
KCkpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFR
dWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiBleHByLCBib29sIHJlc3VsdCkKLXsKLSAg
ICBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuYXBwZW5kKGFkb3B0UHRyKG5l
dyBNZWRpYVF1ZXJ5UmVzdWx0KCpleHByLCByZXN1bHQpKSk7Ci19Ci0KLWJvb2wgU3R5bGVSZXNv
bHZlcjo6YWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBz
ID0gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgczsgaSsrKSB7Ci0gICAgICAgIGlmIChtX21lZGl1bS0+ZXZh
bCgmbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX2V4cHJlc3Npb24p
ICE9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9yZXN1bHQpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1z
dGF0aWMgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldFRyYW5zZm9ybU9wZXJh
dGlvblR5cGUoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9wZXJhdGlvblR5cGUg
dHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgIHJldHVybiBUcmFu
c2Zvcm1PcGVyYXRpb246OlNDQUxFOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0NBTEVfWDsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRp
b246OlNDQUxFX1k7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxl
WlRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpT
Q0FMRV9aOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNEVHJh
bnNmb3JtT3BlcmF0aW9uOiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVf
M0Q7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjogICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU7
Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zv
cm1PcGVyYXRpb246ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDsK
LSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9y
bU9wZXJhdGlvbjogICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9ZOwot
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3Jt
T3BlcmF0aW9uOiAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1o7Ci0g
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNEVHJhbnNmb3Jt
T3BlcmF0aW9uOiAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q7Ci0g
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU7Ci0gICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246
ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDsKLSAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogICAg
ICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOwotICAgICAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAg
cmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1o7Ci0gICAgICAgIGNhc2UgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICByZXR1
cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgICByZXR1cm4g
VHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAgcmV0dXJuIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0tFV19YOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6U0tFV19ZOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6
TUFUUklYOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbjogICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklY
XzNEOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpQZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbjogICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJ
VkU7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zv
cm1PcGVyYXRpb246ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOwotICAg
IH0KLSAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOwotfQotCi1ib29sIFN0eWxl
UmVzb2x2ZXI6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJl
bmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgVHJhbnNmb3JtT3BlcmF0
aW9ucyYgb3V0T3BlcmF0aW9ucykKLXsKLSAgICBpZiAoIWluVmFsdWUgfHwgIWluVmFsdWUtPmlz
VmFsdWVMaXN0KCkpIHsKLSAgICAgICAgb3V0T3BlcmF0aW9ucy5jbGVhcigpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlID8gc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSA6IDE7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zOwotICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IGluVmFsdWU7IGkuaGFzTW9y
ZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1
ZSgpOwotICAgICAgICBpZiAoIWN1cnJWYWx1ZS0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgp
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUqIHRyYW5zZm9ybVZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUq
PihpLnZhbHVlKCkpOwotICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGJvb2wgaGF2ZU5vblByaW1pdGl2ZVZhbHVl
ID0gZmFsc2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB0cmFuc2Zvcm1WYWx1
ZS0+bGVuZ3RoKCk7ICsraikgewotICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjayhqKS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoaGF2ZU5vblByaW1pdGl2
ZVZhbHVlKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIGZpcnN0VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKLQotICAgICAgICBzd2l0Y2ggKHRy
YW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOgot
ICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3Jt
T3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHN4ID0gMS4wOwotICAgICAgICAg
ICAgICAgIGRvdWJsZSBzeSA9IDEuMDsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJh
bnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFsdWUtPmdl
dERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5n
ZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3kgPSBzeDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5h
cHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIDEuMCwgZ2V0VHJh
bnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUzRFRyYW5zZm9ybU9wZXJh
dGlvbjogewotICAgICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKLSAgICAgICAgICAgICAg
ICBkb3VibGUgc3kgPSAxLjA7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHN6ID0gMS4wOwotICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAg
ICAgICAgICAgIHN6ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAg
ICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlv
blR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0
aCgpID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1W
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3ogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5s
ZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBz
eDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShzeCwgc3ksIHN6LCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjog
ewotICAgICAgICAgICAgICAgIExlbmd0aCB0eCA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAg
ICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICBp
ZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAg
dHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6
b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
dHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6
b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVy
YXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zv
cm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1
ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0
cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChzZWNvbmRWYWx1ZSwgc3R5
bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodHguaXNVbmRlZmluZWQoKSB8fCB0eS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHgsIHR5
LCBMZW5ndGgoMCwgRml4ZWQpLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZh
bHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xh
dGVaVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAg
ICBMZW5ndGggdHggPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgICAgIExlbmd0aCB0
eSA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgTGVuZ3RoIHR6ID0gTGVuZ3Ro
KDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlv
blR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9w
ZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aChm
aXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAg
ICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290
U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICB0eCA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290
U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
WFRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5sZW5ndGgoKSA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgodGhpcmRWYWx1
ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgp
ID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBz
ZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFs
dWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoc2Vjb25kVmFsdWUsIHN0eWxlLCByb290U3R5
bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHR4Lmlz
VW5kZWZpbmVkKCkgfHwgdHkuaXNVbmRlZmluZWQoKSB8fCB0ei5pc1VuZGVmaW5lZCgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUodHgsIHR5LCB0eiwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+
b3BlcmF0aW9uVHlwZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1
ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlv
bnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMCwgMCwgMSwgYW5n
bGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5
cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRp
b246Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVZVHJh
bnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgIGRvdWJsZSB4
ID0gMDsKLSAgICAgICAgICAgICAgICBkb3VibGUgeSA9IDA7Ci0gICAgICAgICAgICAgICAgZG91
YmxlIHogPSAwOwotICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmNv
bXB1dGVEZWdyZWVzKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9y
bU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgeCA9IDE7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAg
ICAgeSA9IDE7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB6ID0g
MTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUsIGdldFRyYW5zZm9ybU9w
ZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA8IDQpCi0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1W
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7Ci0gICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIGZvdXJ0aFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSk7Ci0gICAgICAgICAg
ICAgICAgZG91YmxlIHggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAg
ICAgICAgIGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgZG91YmxlIHogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAg
ICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZvdXJ0aFZhbHVlLT5jb21wdXRlRGVncmVlcygpOwot
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgZ2V0VHJhbnNmb3JtT3BlcmF0
aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdYVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246
IHsKLSAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGVYID0gMDsKLSAgICAgICAgICAgICAgICBk
b3VibGUgYW5nbGVZID0gMDsKLSAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZh
bHVlLT5jb21wdXRlRGVncmVlcygpOwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1
ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5z
Zm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgYW5nbGVZID0gYW5nbGU7Ci0gICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFuZ2xlWCA9IGFuZ2xlOwot
ICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmds
ZVkgPSBzZWNvbmRWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRy
YW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPmxlbmd0aCgpIDwgNikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgZG91YmxlIGEgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAg
ICAgICAgICAgICAgIGRvdWJsZSBiID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0
cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSktPmdldERvdWJsZVZhbHVl
KCk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGMgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgZCA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMykp
LT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBlID0gem9vbUZhY3Rv
ciAqIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soNCkpLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAg
IGRvdWJsZSBmID0gem9vbUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLT5nZXREb3VibGVWYWx1
ZSgpOwotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhLCBiLCBjLCBkLCBlLCBmKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAg
ICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPCAxNikKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSktPmdldERv
dWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMykpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0
cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg1KSktPmdldERvdWJsZVZhbHVl
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNikp
LT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDcpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1W
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg4KSktPmdldERvdWJsZVZhbHVlKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soOSkpLT5nZXREb3Vi
bGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDEwKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgem9vbUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTIpKS0+
Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9v
bUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTMpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNCkpLT5nZXREb3VibGVW
YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDE1KSktPmdldERvdWJsZVZhbHVlKCkpOwotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJp
eCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b246IHsKLSAgICAgICAgICAgICAgICBMZW5ndGggcCA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxl
LCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIHF1aXJrIHRoYXQgc2hvdWxkIGdvIGF3YXkgd2hlbiAzZCB0cmFuc2Zv
cm1zIGFyZSBmaW5hbGl6ZWQuCi0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2YWwgPSBmaXJz
dFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBwID0gdmFsID49
IDAgPyBMZW5ndGgoY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcih2YWwpLCBGaXhlZCkgOiBMZW5ndGgo
VW5kZWZpbmVkKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocC5p
c1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUGVyc3BlY3RpdmVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpVbmtu
b3duVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgb3V0
T3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCi1zdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZp
bHRlck9wZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkZpbHRlck9wZXJhdGlv
blR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFdlYktpdENTU0Zp
bHRlclZhbHVlOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0
ZXJPcGVyYXRpb246OlJFRkVSRU5DRTsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpH
cmF5c2NhbGVGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRTsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZpbHRlck9w
ZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE7Ci0gICAgY2Fz
ZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAg
IHJldHVybiBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOwotICAgIGNhc2UgV2ViS2l0Q1NTRmls
dGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRl
ck9wZXJhdGlvbjo6SFVFX1JPVEFURTsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpJ
bnZlcnRGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OklO
VkVSVDsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVyT3BlcmF0
aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOwotICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAg
IHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M7Ci0gICAgY2FzZSBXZWJLaXRDU1NG
aWx0ZXJWYWx1ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0
ZXJPcGVyYXRpb246OkNPTlRSQVNUOwotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJs
dXJGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkJMVVI7
Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlv
bjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c7Ci0jaWYgRU5B
QkxFKENTU19TSEFERVJTKQotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkN1c3RvbUZp
bHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NOwot
I2VuZGlmCi0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6VW5rbm93bkZpbHRlck9wZXJh
dGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Tk9ORTsKLSAgICB9Ci0gICAg
cmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Tk9ORTsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKLVN0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYWRlcihDU1NWYWx1ZSogdmFs
dWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc1dlYktpdENTU1NoYWRlclZhbHVlKCkpCi0gICAgICAg
IHJldHVybiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShzdGF0aWNfY2FzdDxX
ZWJLaXRDU1NTaGFkZXJWYWx1ZSo+KHZhbHVlKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0eWxl
U2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1
ZShXZWJLaXRDU1NTaGFkZXJWYWx1ZSogdmFsdWUpCi17Ci0gICAgU3R5bGVTaGFkZXIqIHNoYWRl
ciA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdTaGFkZXIoKTsKLSAgICBpZiAoc2hhZGVyICYmIHNo
YWRlci0+aXNQZW5kaW5nU2hhZGVyKCkpCi0gICAgICAgIG1faGFzUGVuZGluZ1NoYWRlcnMgPSB0
cnVlOwotICAgIHJldHVybiBzaGFkZXI7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBl
bmRpbmdTaGFkZXJzKCkKLXsKLSAgICBpZiAoIW1fc3R5bGUtPmhhc0ZpbHRlcigpIHx8ICFtX2hh
c1BlbmRpbmdTaGFkZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDYWNoZWRSZXNvdXJjZUxv
YWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4g
PiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3R5bGUtPmZpbHRlcigpLm9wZXJhdGlvbnMoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkg
ewotICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0
ZXJPcGVyYXRpb25zLmF0KGkpOwotICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVy
YXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKLSAgICAgICAgICAgIEN1
c3RvbUZpbHRlck9wZXJhdGlvbiogY3VzdG9tRmlsdGVyID0gc3RhdGljX2Nhc3Q8Q3VzdG9tRmls
dGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uLmdldCgpKTsKLSAgICAgICAgICAgIEFTU0VS
VChjdXN0b21GaWx0ZXItPnByb2dyYW0oKSk7Ci0gICAgICAgICAgICBTdHlsZUN1c3RvbUZpbHRl
clByb2dyYW0qIHByb2dyYW0gPSBzdGF0aWNfY2FzdDxTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0q
PihjdXN0b21GaWx0ZXItPnByb2dyYW0oKSk7Ci0gICAgICAgICAgICBpZiAocHJvZ3JhbS0+dmVy
dGV4U2hhZGVyKCkgJiYgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCktPmlzUGVuZGluZ1NoYWRlcigp
KSB7Ci0gICAgICAgICAgICAgICAgV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHNoYWRlclZhbHVlID0g
c3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nU2hhZGVyKj4ocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkp
LT5jc3NTaGFkZXJWYWx1ZSgpOwotICAgICAgICAgICAgICAgIHByb2dyYW0tPnNldFZlcnRleFNo
YWRlcihzaGFkZXJWYWx1ZS0+Y2FjaGVkU2hhZGVyKGNhY2hlZFJlc291cmNlTG9hZGVyKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKSAm
JiBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLT5pc1BlbmRpbmdTaGFkZXIoKSkgewotICAgICAg
ICAgICAgICAgIFdlYktpdENTU1NoYWRlclZhbHVlKiBzaGFkZXJWYWx1ZSA9IHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ1NoYWRlcio+KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkpLT5jc3NTaGFk
ZXJWYWx1ZSgpOwotICAgICAgICAgICAgICAgIHByb2dyYW0tPnNldEZyYWdtZW50U2hhZGVyKHNo
YWRlclZhbHVlLT5jYWNoZWRTaGFkZXIoY2FjaGVkUmVzb3VyY2VMb2FkZXIpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7
Ci19Ci0KLXN0YXRpYyBib29sIHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29tcGFyYXRvcihjb25zdCBS
ZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYSwgY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRl
clBhcmFtZXRlcj4mIGIpCi17Ci0gICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihh
LT5uYW1lKCksIGItPm5hbWUoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1l
dGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlck51bWJlclBhcmFtdGVyKGNvbnN0
IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMpCi17Ci0gICAgUmVmUHRyPEN1c3Rv
bUZpbHRlck51bWJlclBhcmFtZXRlcj4gbnVtYmVyUGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVyTnVt
YmVyUGFyYW1ldGVyOjpjcmVhdGUobmFtZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZhbHVlcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSB2YWx1
ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlKTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgIT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgbnVtYmVyUGFyYW1ldGVyLT5hZGRWYWx1ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBudW1iZXJQYXJhbWV0ZXIucmVsZWFzZSgpOwot
fQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChD
U1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVlLCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJh
bWV0ZXJMaXN0KQotewotICAgIEhhc2hTZXQ8U3RyaW5nPiBrbm93blBhcmFtZXRlck5hbWVzOwot
ICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHBhcmFtZXRlckl0ZXJhdG9yKHBhcmFtZXRlcnNWYWx1
ZSk7Ci0gICAgZm9yICg7IHBhcmFtZXRlckl0ZXJhdG9yLmhhc01vcmUoKTsgcGFyYW1ldGVySXRl
cmF0b3IuYWR2YW5jZSgpKSB7Ci0gICAgICAgIGlmICghcGFyYW1ldGVySXRlcmF0b3IudmFsdWUo
KS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaXRlcmF0b3IocGFyYW1ldGVySXRlcmF0b3IudmFsdWUoKSk7Ci0g
ICAgICAgIGlmICghaXRlcmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOwotICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAg
ICAgIFN0cmluZyBuYW1lID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAg
ICAgIC8vIERvIG5vdCBhbGxvdyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzLgotICAgICAgICBp
ZiAoa25vd25QYXJhbWV0ZXJOYW1lcy5jb250YWlucyhuYW1lKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAga25vd25QYXJhbWV0ZXJOYW1lcy5hZGQobmFtZSk7Ci0gICAgICAg
IAotICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWl0
ZXJhdG9yLmhhc01vcmUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIgcGFyYW1ldGVycyB0eXBlcyBwYXJzaW5n
LgotICAgICAgICAvLyBib29sZWFuczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc2NDM4Ci0gICAgICAgIC8vIHRleHR1cmVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE0NDIKLSAgICAgICAgLy8gM2QtdHJhbnNmb3JtczogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDQzCi0gICAgICAgIC8vIG1hdDIs
IG1hdDMsIG1hdDQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQ0
NAotICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJhbWV0ZXI7Ci0gICAg
ICAgIGlmIChpdGVyYXRvci52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBD
U1NWYWx1ZUxpc3QqIHZhbHVlcyA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KGl0ZXJhdG9y
LnZhbHVlKCkpOwotICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBXZSBjYW4gaGF2ZSBvbmx5IGFycmF5cyBvZiBib29sZWFucyBvciBu
dW1iZXJzLCBzbyB1c2UgdGhlIGZpcnN0IHZhbHVlIHRvIGNob29zZSBiZXR3ZWVuIHRob3NlIHR3
by4KLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IG9uZSB2YWx1ZS4g
V2UgbmVlZCB1cCB0byA0IHZhbHVlcyAoYWxsIGJvb2xlYW5zIG9yIGFsbCBudW1iZXJzKS4KLSAg
ICAgICAgICAgIGlmICghdmFsdWVzLT5sZW5ndGgoKSB8fCB2YWx1ZXMtPmxlbmd0aCgpID4gNCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICghdmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RQcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsK
LSAgICAgICAgICAgIGlmIChmaXJzdFByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCi0gICAgICAgICAgICAgICAgcGFyYW1ldGVy
ID0gcGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbXRlcihuYW1lLCB2YWx1ZXMpOwotICAgICAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGUgYm9vbGVhbiBhcnJheSBwYXJhbWV0ZXIgaGVy
ZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NjQzOAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIXBhcmFtZXRlcikKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHBhcmFtZXRlckxpc3Qu
YXBwZW5kKHBhcmFtZXRlci5yZWxlYXNlKCkpOwotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIHN1
cmUgd2Ugc29ydCB0aGUgcGFyYW1ldGVycyBiZWZvcmUgcGFzc2luZyB0aGVtIGRvd24gdG8gdGhl
IEN1c3RvbUZpbHRlck9wZXJhdGlvbi4KLSAgICBzdGQ6OnNvcnQocGFyYW1ldGVyTGlzdC5iZWdp
bigpLCBwYXJhbWV0ZXJMaXN0LmVuZCgpLCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBhcmF0b3Ip
OwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9w
ZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYktp
dENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKLXsKLSAgICBBU1NFUlQoZmlsdGVyVmFsdWUt
Pmxlbmd0aCgpKTsKLQotICAgIENTU1ZhbHVlKiBzaGFkZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKLSAgICBBU1NFUlQoc2hhZGVyc1ZhbHVlLT5pc1Zh
bHVlTGlzdCgpKTsKLSAgICBDU1NWYWx1ZUxpc3QqIHNoYWRlcnNMaXN0ID0gc3RhdGljX2Nhc3Q8
Q1NTVmFsdWVMaXN0Kj4oc2hhZGVyc1ZhbHVlKTsKLQotICAgIEFTU0VSVChzaGFkZXJzTGlzdC0+
bGVuZ3RoKCkpOwotICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gdmVydGV4U2hhZGVyID0gc3R5bGVT
aGFkZXIoc2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwotICAgIFJlZlB0
cjxTdHlsZVNoYWRlcj4gZnJhZ21lbnRTaGFkZXIgPSAoc2hhZGVyc0xpc3QtPmxlbmd0aCgpID4g
MSkgPyBzdHlsZVNoYWRlcihzaGFkZXJzTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSkg
OiAwOwotICAgIAotICAgIHVuc2lnbmVkIG1lc2hSb3dzID0gMTsKLSAgICB1bnNpZ25lZCBtZXNo
Q29sdW1ucyA9IDE7Ci0gICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSBtZXNo
Qm94VHlwZSA9IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6RklMVEVSX0JPWDsKLSAgICBDdXN0b21G
aWx0ZXJPcGVyYXRpb246Ok1lc2hUeXBlIG1lc2hUeXBlID0gQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
OjpBVFRBQ0hFRDsKLSAgICAKLSAgICBDU1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVlID0gMDsKLSAg
ICAKLSAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID4gMSkgewotICAgICAgICBDU1NWYWx1
ZUxpc3RJdGVyYXRvciBpdGVyYXRvcihmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgc2Vjb25kIHZhbHVlIG1pZ2h0IGJlIHRo
ZSBtZXNoIGJveCBvciB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzOgotICAgICAgICAvLyBJZiBpdCBz
dGFydHMgd2l0aCBhIG51bWJlciBvciBhbnkgb2YgdGhlIG1lc2gtYm94IGlkZW50aWZpZXJzIGl0
IGlzIAotICAgICAgICAvLyB0aGUgbWVzaC1ib3ggbGlzdCwgaWYgbm90IGl0IG1lYW5zIGl0IGlz
IHRoZSBwYXJhbWV0ZXJzIGxpc3QuCi0KLSAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc01vcmUoKSAm
JiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
aXRlcmF0b3IudmFsdWUoKSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVt
YmVyKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBvbmx5IG9uZSBpbnRlZ2VyIHZhbHVlIGlz
IHNwZWNpZmllZCwgaXQgd2lsbCBzZXQgYm90aAotICAgICAgICAgICAgICAgIC8vIHRoZSByb3dz
IGFuZCB0aGUgY29sdW1ucy4KLSAgICAgICAgICAgICAgICBtZXNoUm93cyA9IG1lc2hDb2x1bW5z
ID0gcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaXRlcmF0
b3IuYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFRyeSB0
byBtYXRjaCBhbm90aGVyIG51bWJlciBmb3IgdGhlIGNvbHVtbnMuCi0gICAgICAgICAgICAgICAg
aWYgKGl0ZXJhdG9yLmhhc01vcmUoKSAmJiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52YWx1ZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtZXNoQ29sdW1ucyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1
ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTW9yZSgpICYmIGl0ZXJhdG9y
LmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52
YWx1ZSgpKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZUJvcmRlckJveAotICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlUGFkZGluZ0JveAotICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ29udGVudEJveAotICAgICAgICAgICAgICAg
IHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRmlsdGVyQm94KSB7Ci0g
ICAgICAgICAgICAgICAgbWVzaEJveFR5cGUgPSAqcHJpbWl0aXZlVmFsdWU7Ci0gICAgICAgICAg
ICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTW9yZSgpICYmIGl0ZXJhdG9yLmlzUHJpbWl0
aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52YWx1ZSgpKTsK
LSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURl
dGFjaGVkKSB7Ci0gICAgICAgICAgICAgICAgbWVzaFR5cGUgPSBDdXN0b21GaWx0ZXJPcGVyYXRp
b246OkRFVEFDSEVEOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFpdGVyYXRvci5pbmRl
eCgpKSB7Ci0gICAgICAgICAgICAvLyBJZiBubyB2YWx1ZSB3YXMgY29uc3VtZWQgZnJvbSB0aGUg
bWVzaCB2YWx1ZSwgdGhlbiBpdCBpcyBqdXN0IGEgcGFyYW1ldGVyIGxpc3QsIG1lYW5pbmcgdGhh
dCB3ZSBlbmQgdXAKLSAgICAgICAgICAgIC8vIGhhdmluZyBqdXN0IHR3byBDU1NMaXN0VmFsdWVz
OiBsaXN0IG9mIHNoYWRlcnMgYW5kIGxpc3Qgb2YgcGFyYW1ldGVycy4KLSAgICAgICAgICAgIEFT
U0VSVChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMik7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJz
VmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID4gMiAmJiAhcGFy
YW1ldGVyc1ZhbHVlKQotICAgICAgICBwYXJhbWV0ZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygyKTsKLSAgICAKLSAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJM
aXN0IHBhcmFtZXRlckxpc3Q7Ci0gICAgaWYgKHBhcmFtZXRlcnNWYWx1ZSAmJiAhcGFyc2VDdXN0
b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KHBhcmFtZXRlcnNWYWx1ZSwgcGFyYW1ldGVyTGlzdCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIAotICAgIFJlZlB0cjxTdHlsZUN1c3RvbUZpbHRlclByb2dy
YW0+IHByb2dyYW0gPSBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZSh2ZXJ0ZXhTaGFk
ZXIucmVsZWFzZSgpLCBmcmFnbWVudFNoYWRlci5yZWxlYXNlKCkpOwotICAgIHJldHVybiBDdXN0
b21GaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShwcm9ncmFtLnJlbGVhc2UoKSwgcGFyYW1ldGVyTGlz
dCwgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNoQm94VHlwZSwgbWVzaFR5cGUpOwotfQotI2Vu
ZGlmCi0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1
ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBG
aWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQotewotICAgIEFTU0VSVChvdXRPcGVyYXRp
b25zLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgaWYgKCFpblZhbHVlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgaWYgKGluVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KGluVmFsdWUpOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIAotICAgIGlmICghaW5WYWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlID8gc3R5bGUtPmVmZmVjdGl2
ZVpvb20oKSA6IDE7Ci0gICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGZvciAo
Q1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IGluVmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2Uo
KSkgewotICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOwotICAgICAgICBp
ZiAoIWN1cnJWYWx1ZS0+aXNXZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVlID0gc3Rh
dGljX2Nhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWUqPihpLnZhbHVlKCkpOwotICAgICAgICBGaWx0
ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IGZpbHRlck9wZXJhdGlv
bkZvclR5cGUoZmlsdGVyVmFsdWUtPm9wZXJhdGlvblR5cGUoKSk7Ci0KLSNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCi0gICAgICAgIGlmIChvcGVyYXRpb25UeXBlID09IEZpbHRlck9wZXJhdGlvbjo6
Q1VTVE9NKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBvcGVy
YXRpb24gPSBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oZmlsdGVyVmFsdWUpOwotICAgICAg
ICAgICAgaWYgKCFvcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQob3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAg
ICAgICAvLyBDaGVjayB0aGF0IGFsbCBwYXJhbWV0ZXJzIGFyZSBwcmltaXRpdmUgdmFsdWVzLCB3
aXRoIHRoZQotICAgICAgICAvLyBleGNlcHRpb24gb2YgZHJvcCBzaGFkb3cgd2hpY2ggaGFzIGEg
U2hhZG93VmFsdWUgcGFyYW1ldGVyLgotICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSAhPSBGaWx0
ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XKSB7Ci0gICAgICAgICAgICBib29sIGhhdmVOb25Qcmlt
aXRpdmVWYWx1ZSA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IGZpbHRlclZhbHVlLT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFmaWx0
ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhqKS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChoYXZlTm9uUHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RW
YWx1ZSA9IGZpbHRlclZhbHVlLT5sZW5ndGgoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4oZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpIDogMDsKLSAgICAg
ICAgc3dpdGNoIChmaWx0ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjogewotICAgICAg
ICAgICAgaWYgKGZpcnN0VmFsdWUpCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGZpcnN0VmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZp
bHRlck9wZXJhdGlvbjoKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2VwaWFG
aWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVy
YXRlRmlsdGVyT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKLSAg
ICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkgewotICAgICAgICAgICAg
ICAgIGFtb3VudCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGZpcnN0VmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgICAgICAgICBh
bW91bnQgLz0gMTAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KGFtb3VudCwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVyT3BlcmF0
aW9uOiB7Ci0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSAwOwotICAgICAgICAgICAgaWYgKGZp
bHRlclZhbHVlLT5sZW5ndGgoKSA9PSAxKQotICAgICAgICAgICAgICAgIGFuZ2xlID0gZmlyc3RW
YWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLQotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbmds
ZSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SW52ZXJ0RmlsdGVyT3BlcmF0aW9uOgotICAg
ICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0aW9u
OgotICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJh
dGlvbjoKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9w
ZXJhdGlvbjogewotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IChmaWx0ZXJWYWx1ZS0+b3Bl
cmF0aW9uVHlwZSgpID09IFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3Bl
cmF0aW9uKSA/IDAgOiAxOwotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9
PSAxKSB7Ci0gICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBvcGVyYXRpb25UeXBlKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZh
bHVlOjpCbHVyRmlsdGVyT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBMZW5ndGggc3RkRGV2aWF0
aW9uID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVu
Z3RoKCkgPj0gMSkgewotICAgICAgICAgICAgICAgIHN0ZERldmlhdGlvbiA9IGNvbnZlcnRUb0Zs
b2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0ZERldmlhdGlvbi5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdGREZXZpYXRp
b24sIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246
IHsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgIT0gMSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIENTU1ZhbHVlKiBjc3NWYWx1ZSA9
IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOwotICAgICAgICAgICAgaWYg
KCFjc3NWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVl
Kj4oY3NzVmFsdWUpOwotICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCBy
b290U3R5bGUsIHpvb21GYWN0b3IpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1
ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29t
RmFjdG9yKSA6IDA7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlmIChp
dGVtLT5jb2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKLQotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsb2NhdGlvbiwg
Ymx1ciwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQsIG9wZXJh
dGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgb3V0T3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNlbmRpZgotCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRp
bmdJbWFnZSkKLXsKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0KLSAg
ICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTSW1hZ2VW
YWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpOwotICAgICAg
ICByZXR1cm4gaW1hZ2VWYWx1ZS0+Y2FjaGVkSW1hZ2UoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwot
ICAgIH0KLQotICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkg
ewotICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiBpbWFnZUdlbmVyYXRvclZhbHVlID0g
cGVuZGluZ0ltYWdlLT5jc3NJbWFnZUdlbmVyYXRvclZhbHVlKCk7Ci0gICAgICAgIGltYWdlR2Vu
ZXJhdG9yVmFsdWUtPmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotICAgICAg
ICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGltYWdlR2VuZXJhdG9yVmFsdWUp
OwotICAgIH0KLQotI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgIGlmIChwZW5kaW5nSW1h
Z2UtPmNzc0ltYWdlU2V0VmFsdWUoKSkgewotICAgICAgICBDU1NJbWFnZVNldFZhbHVlKiBpbWFn
ZVNldFZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFnZVNldFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBpbWFnZVNldFZhbHVlLT5jYWNoZWRJbWFnZVNldChjYWNoZWRSZXNvdXJjZUxvYWRlcik7
Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlcygpCi17Ci0gICAgaWYgKG1fcGVuZGluZ0ltYWdlUHJvcGVydGll
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5lbmQoKTsK
LSAgICBmb3IgKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9ICppdDsKLQotICAgICAgICBzd2l0Y2gg
KGN1cnJlbnRQcm9wZXJ0eSkgewotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRJbWFnZTogewotICAgICAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5
ZXIgPSBtX3N0eWxlLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsg
YmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSAmJiBiYWNrZ3JvdW5kTGF5ZXIt
PmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBiYWNr
Z3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQ
ZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6IHsKLSAgICAgICAgICAgICAgICBmb3IgKENvbnRlbnRE
YXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0eWxlLT5jb250
ZW50RGF0YSgpKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVudERhdGEtPm5leHQo
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudERhdGEtPmlzSW1hZ2UoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJ
bWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJ
bWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdlKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGxvYWRlZEltYWdlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5z
ZXRJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1
cnNvcjogewotICAgICAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gbV9z
dHlsZS0+Y3Vyc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEN1cnNvckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBpbWFnZSA9IGN1cnJlbnRDdXJzb3IuaW1h
Z2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5n
SW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5z
ZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4o
aW1hZ2UpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKLSAgICAg
ICAgICAgICAgICBpZiAobV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0eWxlLT5saXN0
U3R5bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxl
UGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJ
bWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0lt
YWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckltYWdlU291cmNl
KGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxl
LT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsK
LSAgICAgICAgICAgICAgICBpZiAoU3R5bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbV9zdHls
ZS0+Ym94UmVmbGVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IE5pbmVQaWVjZUlt
YWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0aW9uLT5tYXNrKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQZW5kaW5nSW1h
Z2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRl
ZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+
KG1hc2tJbWFnZS5pbWFnZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWZsZWN0aW9u
LT5zZXRNYXNrKE5pbmVQaWVjZUltYWdlKGxvYWRlZEltYWdlLnJlbGVhc2UoKSwgbWFza0ltYWdl
LmltYWdlU2xpY2VzKCksIG1hc2tJbWFnZS5maWxsKCksIG1hc2tJbWFnZS5ib3JkZXJTbGljZXMo
KSwgbWFza0ltYWdlLm91dHNldCgpLCBtYXNrSW1hZ2UuaG9yaXpvbnRhbFJ1bGUoKSwgbWFza0lt
YWdlLnZlcnRpY2FsUnVsZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPm1hc2tC
b3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2Fz
dDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogewotICAgICAgICAgICAgICAgIGZvciAoRmlsbExh
eWVyKiBtYXNrTGF5ZXIgPSBtX3N0eWxlLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsg
bWFza0xheWVyID0gbWFza0xheWVyLT5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdl
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5k
aW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdl
KCkpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVy
dGllcy5jbGVhcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZu
ZGVmIENTU1N0eWxlU2VsZWN0b3JfaAotI2RlZmluZSBDU1NTdHlsZVNlbGVjdG9yX2gKLQotI2lu
Y2x1ZGUgIkNTU1J1bGUuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKLSNpbmNsdWRlICJM
aW5rSGFzaC5oIgotI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKLSNpbmNsdWRlICJSZW5kZXJT
dHlsZS5oIgotI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIEVTbWFydE1pbmltdW1Gb3JGb250U2l6
ZSB7IERvTm90VXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUsIFVzZVNtYXJ0TWluaW11bUZvckZv
bnRGaXplIH07Ci0KLWNsYXNzIENTU0ZvbnRTZWxlY3RvcjsKLWNsYXNzIENTU1BhZ2VSdWxlOwot
Y2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7Ci1jbGFzcyBDU1NQcm9wZXJ0eTsKLWNsYXNzIENTU1J1
bGVMaXN0OwotY2xhc3MgQ1NTRm9udEZhY2U7Ci1jbGFzcyBDU1NGb250RmFjZVJ1bGU7Ci1jbGFz
cyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOwotY2xhc3MgQ1NTSW1hZ2VTZXRWYWx1ZTsKLWNsYXNz
IENTU0ltYWdlVmFsdWU7Ci1jbGFzcyBDU1NTZWxlY3RvcjsKLWNsYXNzIENTU1N0eWxlUnVsZTsK
LWNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIENvbnRhaW5lck5v
ZGU7Ci1jbGFzcyBDdXN0b21GaWx0ZXJPcGVyYXRpb247Ci1jbGFzcyBDdXN0b21GaWx0ZXJQYXJh
bWV0ZXI7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZTsKLWNs
YXNzIEZyYW1lVmlldzsKLWNsYXNzIEtVUkw7Ci1jbGFzcyBLZXlmcmFtZUxpc3Q7Ci1jbGFzcyBL
ZXlmcmFtZVZhbHVlOwotY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvcjsKLWNsYXNzIE5vZGU7Ci1j
bGFzcyBSZW5kZXJSZWdpb247Ci1jbGFzcyBSdWxlRGF0YTsKLWNsYXNzIFJ1bGVTZXQ7Ci1jbGFz
cyBTZXR0aW5nczsKLWNsYXNzIFN0YXRpY0NTU1J1bGVMaXN0OwotY2xhc3MgU3R5bGVCdWlsZGVy
OwotY2xhc3MgU3R5bGVJbWFnZTsKLWNsYXNzIFN0eWxlS2V5ZnJhbWU7Ci1jbGFzcyBTdHlsZVBl
bmRpbmdJbWFnZTsKLWNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7Ci1jbGFzcyBTdHlsZVJ1bGU7Ci1j
bGFzcyBTdHlsZVJ1bGVLZXlmcmFtZXM7Ci1jbGFzcyBTdHlsZVJ1bGVQYWdlOwotY2xhc3MgU3R5
bGVSdWxlUmVnaW9uOwotY2xhc3MgU3R5bGVTaGFkZXI7Ci1jbGFzcyBTdHlsZVNoZWV0OwotY2xh
c3MgU3R5bGVTaGVldEludGVybmFsOwotY2xhc3MgU3R5bGVTaGVldExpc3Q7Ci1jbGFzcyBTdHls
ZWRFbGVtZW50OwotY2xhc3MgV2ViS2l0Q1NTRmlsdGVyVmFsdWU7Ci1jbGFzcyBXZWJLaXRDU1NT
aGFkZXJWYWx1ZTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLXR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+ID4gQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdDsK
LSNlbmRpZgotCi1jbGFzcyBNZWRpYVF1ZXJ5UmVzdWx0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShNZWRpYVF1ZXJ5UmVzdWx0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgTWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwJiBleHByLCBib29sIHJl
c3VsdCkKLSAgICAgICAgOiBtX2V4cHJlc3Npb24oZXhwcikKLSAgICAgICAgLCBtX3Jlc3VsdChy
ZXN1bHQpCi0gICAgewotICAgIH0KLQotICAgIE1lZGlhUXVlcnlFeHAgbV9leHByZXNzaW9uOwot
ICAgIGJvb2wgbV9yZXN1bHQ7Ci19OwotCi1lbnVtIFN0eWxlU2hhcmluZ0JlaGF2aW9yIHsKLSAg
ICBBbGxvd1N0eWxlU2hhcmluZywKLSAgICBEaXNhbGxvd1N0eWxlU2hhcmluZywKLX07Ci0KLS8v
IE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzIGlzIHVzZWQgaW4gbWVkaWEgcXVlcmllcywgd2hlcmUg
cmVsYXRpdmUgdW5pdHMKLS8vIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIGRvY3Vt
ZW50IHJvb3QgZWxlbWVudCBzdHlsZSwgYW5kIHN0eWxlZCBvbmx5Ci0vLyBmcm9tIHRoZSBVc2Vy
IEFnZW50IFN0eWxlc2hlZXQgcnVsZXMuCi0KLWVudW0gUnVsZU1hdGNoaW5nQmVoYXZpb3Igewot
ICAgIE1hdGNoQWxsUnVsZXMsCi0gICAgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMsCi19OwotCi0v
LyBUaGlzIGNsYXNzIHNlbGVjdHMgYSBSZW5kZXJTdHlsZSBmb3IgYSBnaXZlbiBlbGVtZW50IGJh
c2VkIG9uIGEgY29sbGVjdGlvbiBvZiBzdHlsZXNoZWV0cy4KLWNsYXNzIFN0eWxlUmVzb2x2ZXIg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0eWxlUmVzb2x2ZXIpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBTdHlsZVJlc29sdmVyKERvY3VtZW50KiwgYm9vbCBt
YXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpOwotICAgIH5TdHlsZVJlc29sdmVyKCk7Ci0KLSAgICAv
LyBVc2luZyB0aGVzZSBkdXJpbmcgdHJlZSB3YWxrIHdpbGwgYWxsb3cgc3R5bGUgc2VsZWN0b3Ig
dG8gb3B0aW1pemUgY2hpbGQgYW5kIGRlc2NlbmRhbnQgc2VsZWN0b3IgbG9va3Vwcy4KLSAgICB2
b2lkIHB1c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKLSAgICB2b2lkIHBvcFBhcmVudEVsZW1l
bnQoRWxlbWVudCopOwotICAgIHZvaWQgcHVzaFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93
Um9vdCopOwotICAgIHZvaWQgcG9wUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290Kik7
Ci0KLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCos
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFN0eWxlU2hhcmluZ0JlaGF2aW9yID0gQWxs
b3dTdHlsZVNoYXJpbmcsCi0gICAgICAgIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxS
dWxlcywgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7Ci0KLSAgICB2b2lkIGtl
eWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIEtl
eWZyYW1lTGlzdCYpOwotCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVG
b3JFbGVtZW50KFBzZXVkb0lkLCBFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
MCk7Ci0KLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBhZ2VJ
bmRleCk7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1
bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKLQotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9Ci0gICAgUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50
U3R5bGU7IH0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50
OyB9Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9jaGVja2VyLmRv
Y3VtZW50KCk7IH0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigp
IHsgcmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBwYXJlbnRTdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKTsgfQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0eWxl
KCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9Ci0gICAgdm9pZCBzZXRa
b29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Wm9vbShmKTsgfQotICAg
IHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCkt
PnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wg
YikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQotICAg
IGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQotICAg
IAotICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNv
bnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYpOwotICAgIAotICAgIC8vIEZpbmQgdGhl
IGlkcyBvciBjbGFzc2VzIHRoZSBzZWxlY3RvcnMgb24gYSBzdHlsZXNoZWV0IGFyZSBzY29wZWQg
dG8uIFRoZSBzZWxlY3RvcnMgb25seSBhcHBseSB0byBlbGVtZW50cyBpbiBzdWJ0cmVlcyB3aGVy
ZSB0aGUgcm9vdCBlbGVtZW50IG1hdGNoZXMgdGhlIHNjb3BlLgotICAgIHN0YXRpYyBib29sIGRl
dGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhTdHlsZVNoZWV0SW50ZXJuYWwqLCBIYXNo
U2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+JiBjbGFzc1Njb3Blcyk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNv
bHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5P
UFNFVURPKTsKLSAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKLSAgICB2b2lkIGNvbGxl
Y3RGZWF0dXJlcygpOwotICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFyZWRTdHlsZSgpOwotICAg
IGJvb2wgbWF0Y2hlc1J1bGVTZXQoUnVsZVNldCopOwotICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxp
c3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkgY29uc3Q7Ci0g
ICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSosIHVuc2ln
bmVkJiBjb3VudCkgY29uc3Q7Ci0gICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5
bGVkRWxlbWVudCopIGNvbnN0OwotCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVG
b3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBLZXlm
cmFtZVZhbHVlJik7Ci0KLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIHZvaWQgcHVzaFNj
b3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZVBhcmVudCk7Ci0gICAgdm9pZCBwb3BTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7
Ci0jZWxzZQotICAgIHZvaWQgcHVzaFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqLCBjb25zdCBD
b250YWluZXJOb2RlKikgeyB9Ci0gICAgdm9pZCBwb3BTY29wZShjb25zdCBDb250YWluZXJOb2Rl
KikgeyB9Ci0jZW5kaWYKLQotcHVibGljOgotICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZl
IGJhY2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAo
b3IgYSBwc2V1ZG8tZWxlbWVudCkuCi0gICAgZW51bSBDU1NSdWxlRmlsdGVyIHsKLSAgICAgICAg
VUFBbmRVc2VyQ1NTUnVsZXMgICA9IDEgPDwgMSwKLSAgICAgICAgQXV0aG9yQ1NTUnVsZXMgICAg
ICA9IDEgPDwgMiwKLSAgICAgICAgRW1wdHlDU1NSdWxlcyAgICAgICA9IDEgPDwgMywKLSAgICAg
ICAgQ3Jvc3NPcmlnaW5DU1NSdWxlcyA9IDEgPDwgNCwKLSAgICAgICAgQWxsQnV0RW1wdHlDU1NS
dWxlcyA9IFVBQW5kVXNlckNTU1J1bGVzIHwgQXV0aG9yQ1NTUnVsZXMgfCBDcm9zc09yaWdpbkNT
U1J1bGVzLAotICAgICAgICBBbGxDU1NSdWxlcyAgICAgICAgID0gQWxsQnV0RW1wdHlDU1NSdWxl
cyB8IEVtcHR5Q1NTUnVsZXMsCi0gICAgfTsKLSAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBz
dHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUgPSBB
bGxCdXRFbXB0eUNTU1J1bGVzKTsKLSAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBwc2V1ZG9T
dHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgUHNldWRvSWQsIHVuc2lnbmVkIHJ1bGVzVG9J
bmNsdWRlID0gQWxsQnV0RW1wdHlDU1NSdWxlcyk7Ci0KLSAgICAvLyBHaXZlbiBhIENTUyBrZXl3
b3JkIGluIHRoZSByYW5nZSAoeHgtc21hbGwgdG8gLXdlYmtpdC14eHgtbGFyZ2UpLCB0aGlzIGZ1
bmN0aW9uIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhlIGNvcnJlY3QgZm9udCBzaXplIHNjYWxlZCBy
ZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRlZmF1bHQgKG1lZGl1bSkuCi0gICAgc3RhdGljIGZsb2F0
IGZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCosIGludCBrZXl3b3JkLCBib29sIHNob3VsZFVz
ZUZpeGVkRGVmYXVsdFNpemUpOwotCi0gICAgLy8gR2l2ZW4gYSBmb250IHNpemUgaW4gcGl4ZWws
IHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbGVnYWN5IGZvbnQgc2l6ZSBiZXR3ZWVuIDEgYW5k
IDcuCi0gICAgc3RhdGljIGludCBsZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGludCBwaXhlbEZv
bnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwotCi1wdWJsaWM6Ci0gICAg
dm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzKSB7IG1fc3R5bGUgPSBzOyB9
IC8vIFVzZWQgYnkgdGhlIGRvY3VtZW50IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHlsZS4K
LQotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUq
LCBSZW5kZXJTdHlsZSopOwotCi0gICAgdm9pZCBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUo
Q1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLQotICAgIHZvaWQgdXBkYXRlRm9udCgpOwotCi0g
ICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50
KiwgZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVk
U2l6ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXplID0gVXNlU21hcnRNaW5pbXVtRm9yRm9udEZp
emUpOwotCi0gICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzaXpl
KTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNp
ZmllZFNpemUoRG9jdW1lbnQqLCBSZW5kZXJTdHlsZSosIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZs
b2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKTsKLQotcHVibGljOgotICAg
IGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCk7Ci0KLSAgICBDb2xvciBjb2xvckZyb21QcmltaXRpdmVW
YWx1ZShDU1NQcmltaXRpdmVWYWx1ZSosIGJvb2wgZm9yVmlzaXRlZExpbmsgPSBmYWxzZSkgY29u
c3Q7Ci0KLSAgICBib29sIGhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmlu
ZyYpIGNvbnN0OwotCi0gICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQoKTsgfQotCi0gICAgdm9pZCBhZGRWaWV3cG9ydERl
cGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCosIGJvb2wgcmVzdWx0
KTsKLQotICAgIGJvb2wgYWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKSB7IG1fY2hlY2tlci5hbGxWaXNpdGVkU3RhdGVD
aGFuZ2VkKCk7IH0KLSAgICB2b2lkIHZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRl
ZEhhc2gpIHsgbV9jaGVja2VyLnZpc2l0ZWRTdGF0ZUNoYW5nZWQodmlzaXRlZEhhc2gpOyB9Ci0K
LSAgICB2b2lkIGFkZEtleWZyYW1lU3R5bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+
KTsKLQotICAgIGJvb2wgY2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiByZWdpb25FbGVtZW50KTsK
LQotICAgIGJvb2wgdXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0IHsgcmV0dXJuICFtX2ZlYXR1cmVz
LnNpYmxpbmdSdWxlcy5pc0VtcHR5KCk7IH0KLSAgICBib29sIHVzZXNGaXJzdExpbmVSdWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzOyB9Ci0gICAgYm9v
bCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0Jl
Zm9yZUFmdGVyUnVsZXM7IH0KLSAgICBib29sIHVzZXNMaW5rUnVsZXMoKSBjb25zdCB7IHJldHVy
biBtX2ZlYXR1cmVzLnVzZXNMaW5rUnVsZXM7IH0KLQotICAgIHN0YXRpYyBib29sIGNyZWF0ZVRy
YW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0eWxl
LCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVyYXRp
b25zKTsKLSAgICAKLSAgICB2b2lkIGludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7
Ci0gICAgCi0gICAgLy8gV0FSTklORy4gVGhpcyB3aWxsIGNvbnN0cnVjdCBDU1NPTSB3cmFwcGVy
cyBmb3IgYWxsIHN0eWxlIHJ1bGVzIGFuZCBjYWNoZSB0aGVuIGluIGEgbWFwIGZvciBzaWduaWZp
Y2FudCBtZW1vcnkgY29zdC4KLSAgICAvLyBJdCBpcyBoZXJlIHRvIHN1cHBvcnQgaW5zcGVjdG9y
LiBEb24ndCB1c2UgZm9yIGFueSByZWd1bGFyIGVuZ2luZSBmdW5jdGlvbnMuCi0gICAgQ1NTU3R5
bGVSdWxlKiBlbnN1cmVGdWxsQ1NTT01XcmFwcGVyRm9ySW5zcGVjdG9yKFN0eWxlUnVsZSopOwot
Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9u
cyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiBy
b290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwotI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKLSAgICBTdHlsZVNoYWRlciogc3R5bGVTaGFkZXIoQ1NTVmFsdWUqKTsKLSAg
ICBTdHlsZVNoYWRlciogY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0
Q1NTU2hhZGVyVmFsdWUqKTsKLSAgICBib29sIHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dChDU1NWYWx1ZSosIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmKTsKLSAgICBQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbXRlcihj
b25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCopOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyT3BlcmF0aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0Q1NTRmls
dGVyVmFsdWUqKTsKLSAgICB2b2lkIGxvYWRQZW5kaW5nU2hhZGVycygpOwotI2VuZGlmCi0jZW5k
aWYgLy8gRU5BQkxFKENTU19GSUxURVJTKQotCi0gICAgc3RydWN0IFJ1bGVGZWF0dXJlIHsKLSAg
ICAgICAgUnVsZUZlYXR1cmUoU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3Is
IGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKLSAgICAgICAgICAgIDogcnVsZShydWxl
KQotICAgICAgICAgICAgLCBzZWxlY3RvcihzZWxlY3RvcikKLSAgICAgICAgICAgICwgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbihoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKSAKLSAgICAgICAg
eyAKLSAgICAgICAgfQotICAgICAgICBTdHlsZVJ1bGUqIHJ1bGU7Ci0gICAgICAgIENTU1NlbGVj
dG9yKiBzZWxlY3RvcjsKLSAgICAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOwot
ICAgIH07Ci0gICAgc3RydWN0IEZlYXR1cmVzIHsKLSAgICAgICAgRmVhdHVyZXMoKTsKLSAgICAg
ICAgfkZlYXR1cmVzKCk7Ci0gICAgICAgIHZvaWQgYWRkKGNvbnN0IFN0eWxlUmVzb2x2ZXI6OkZl
YXR1cmVzJik7Ci0gICAgICAgIHZvaWQgY2xlYXIoKTsKLSAgICAgICAgSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj4gaWRzSW5SdWxlczsKLSAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBs
Kj4gYXR0cnNJblJ1bGVzOwotICAgICAgICBWZWN0b3I8UnVsZUZlYXR1cmU+IHNpYmxpbmdSdWxl
czsKLSAgICAgICAgVmVjdG9yPFJ1bGVGZWF0dXJlPiB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzOwot
ICAgICAgICBib29sIHVzZXNGaXJzdExpbmVSdWxlczsKLSAgICAgICAgYm9vbCB1c2VzQmVmb3Jl
QWZ0ZXJSdWxlczsKLSAgICAgICAgYm9vbCB1c2VzTGlua1J1bGVzOwotICAgIH07Ci0KLXByaXZh
dGU6Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1cCB0aGUgZGVmYXVsdCBmb250IHNpemUg
aWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdlbmVyaWMgZm9udCBmYW1pbHkgaGFzIGNo
YW5nZWQuIC1kd2gKLSAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJT
dHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgdm9pZCBjaGVja0Zvclpvb21D
aGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwotICAgIHZvaWQg
Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOwotCi0gICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShS
ZW5kZXJTdHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVt
ZW50Kik7Ci0KLSAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7
IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQotCi0gICAgc3RydWN0IE1hdGNoUmFuZ2Vz
IHsKLSAgICAgICAgTWF0Y2hSYW5nZXMoKSA6IGZpcnN0VUFSdWxlKC0xKSwgbGFzdFVBUnVsZSgt
MSksIGZpcnN0QXV0aG9yUnVsZSgtMSksIGxhc3RBdXRob3JSdWxlKC0xKSwgZmlyc3RVc2VyUnVs
ZSgtMSksIGxhc3RVc2VyUnVsZSgtMSkgeyB9Ci0gICAgICAgIGludCBmaXJzdFVBUnVsZTsKLSAg
ICAgICAgaW50IGxhc3RVQVJ1bGU7Ci0gICAgICAgIGludCBmaXJzdEF1dGhvclJ1bGU7Ci0gICAg
ICAgIGludCBsYXN0QXV0aG9yUnVsZTsKLSAgICAgICAgaW50IGZpcnN0VXNlclJ1bGU7Ci0gICAg
ICAgIGludCBsYXN0VXNlclJ1bGU7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBNYXRjaGVkUHJvcGVy
dGllcyB7Ci0gICAgICAgIE1hdGNoZWRQcm9wZXJ0aWVzKCkgOiBwb3NzaWJseVBhZGRlZE1lbWJl
cigwKSB7IH0KLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9w
ZXJ0aWVzOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBzdHJ1Y3QgewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgOiAyOwotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGlzSW5SZWdpb25SdWxlIDogMTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAvLyBV
c2VkIHRvIG1ha2Ugc3VyZSBhbGwgbWVtb3J5IGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2Ugd2Ug
Y29tcHV0ZSB0aGUgaGFzaCBvdmVyIHRoZSBieXRlcyBvZiB0aGlzIG9iamVjdC4KLSAgICAgICAg
ICAgIHZvaWQqIHBvc3NpYmx5UGFkZGVkTWVtYmVyOwotICAgICAgICB9OwotICAgIH07Ci0KLSAg
ICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgewotICAgICAgICBNYXRjaFJlc3VsdCgpIDogaXNDYWNoZWFi
bGUodHJ1ZSkgeyB9Ci0gICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcywgNjQ+IG1hdGNo
ZWRQcm9wZXJ0aWVzOwotICAgICAgICBWZWN0b3I8U3R5bGVSdWxlKiwgNjQ+IG1hdGNoZWRSdWxl
czsKLSAgICAgICAgTWF0Y2hSYW5nZXMgcmFuZ2VzOwotICAgICAgICBib29sIGlzQ2FjaGVhYmxl
OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTWF0Y2hPcHRpb25zIHsKLSAgICAgICAgTWF0Y2hPcHRp
b25zKGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0g
MCkgOiBzY29wZShzY29wZSksIGluY2x1ZGVFbXB0eVJ1bGVzKGluY2x1ZGVFbXB0eVJ1bGVzKSB7
IH0KLSAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGU7Ci0gICAgICAgIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXM7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIGFkZE1hdGNoZWRQcm9w
ZXJ0aWVzKE1hdGNoUmVzdWx0JiwgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVS
dWxlKiA9IDAsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
QWxsLCBib29sIGluUmVnaW9uUnVsZSA9IGZhbHNlKTsKLSAgICB2b2lkIGFkZEVsZW1lbnRTdHls
ZVByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBTdHlsZVByb3BlcnR5U2V0KiwgYm9vbCBpc0NhY2hl
YWJsZSA9IHRydWUpOwotCi0gICAgdm9pZCBtYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0Jik7Ci0g
ICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmKTsKLSAgICB2b2lkIG1hdGNoVUFSdWxl
cyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqKTsKLSAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0
Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoVXNlclJ1
bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9pZCBtYXRj
aFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7
Ci0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJ
bmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKLSAgICB2b2lk
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwotICAgIHZvaWQg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYp
OwotICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7Ci0g
ICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRj
aGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKLQotICAgIGJvb2wgY2hlY2tTZWxlY3Rvcihjb25zdCBS
dWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gMCk7Ci0gICAgYm9vbCBjaGVj
a1JlZ2lvblNlbGVjdG9yKENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVn
aW9uRWxlbWVudCk7Ci0gICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNo
UmVzdWx0Jik7Ci0gICAgdGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNzPgotICAgIHZvaWQgYXBwbHlN
YXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQg
c3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOwotICAgIHRlbXBs
YXRlIDxib29sIGZpcnN0UGFzcz4KLSAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhjb25zdCBTdHls
ZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqLCBib29sIGlzSW1wb3J0YW50LCBi
b29sIGluaGVyaXRlZE9ubHksIGJvb2wgZmlsdGVyUmVnaW9uUHJvcGVydGllcyk7Ci0KLSAgICBz
dGF0aWMgYm9vbCBpc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKLQot
ICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXMoTWF0Y2hSZXN1bHQmLCBSdWxlU2V0KiwgYm9vbCBpc0xl
ZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKTsKLSAgICB2
b2lkIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVk
UnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mLCBib29sIGlzTGVmdFBhZ2UsIGJv
b2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwotICAgIGJvb2wgaXNMZWZ0
UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLSAgICBib29sIGlzUmlnaHRQYWdlKGludCBwYWdl
SW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0xlZnRQYWdlKHBhZ2VJbmRleCk7IH0KLSAgICBib29s
IGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwotICAgIFN0cmluZyBwYWdlTmFtZShp
bnQgcGFnZUluZGV4KSBjb25zdDsKLQotICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0eWxl
OwotICAgIE93blB0cjxSdWxlU2V0PiBtX3VzZXJTdHlsZTsKLQotICAgIEZlYXR1cmVzIG1fZmVh
dHVyZXM7Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVTZXQ7Ci0gICAgT3duUHRy
PFJ1bGVTZXQ+IG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0OwotCi0gICAgYm9vbCBtX2hhc1VB
QXBwZWFyYW5jZTsKLSAgICBCb3JkZXJEYXRhIG1fYm9yZGVyRGF0YTsKLSAgICBGaWxsTGF5ZXIg
bV9iYWNrZ3JvdW5kRGF0YTsKLSAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLQotICAgIHR5
cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1l
cz4gPiBLZXlmcmFtZXNSdWxlTWFwOwotICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNS
dWxlTWFwOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2
YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KLQotICAgIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwot
ICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1By
b3BlcnR5SUQsIENTU0ltYWdlVmFsdWUqKTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGdl
bmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVyYXRv
clZhbHVlKik7Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VTZXRW
YWx1ZSopOwotI2VuZGlmCi0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9Ci0gICAgYm9v
bCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9Ci0KLSAgICBzdGF0aWMgTGVuZ3RoIGNvbnZl
cnRUb0ludExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsKLSAgICBzdGF0aWMgTGVuZ3Ro
IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBS
ZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwotCi1wcml2YXRl
OgotICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKLQotICAg
IHZvaWQgYWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiosIFJ1bGVTZXQmIHVzZXJTdHlsZSk7
Ci0KLSAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwotCi0gICAgdm9pZCBtYXBG
aWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAg
IHZvaWQgbWFwRmlsbENsaXAoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsK
LSAgICB2b2lkIG1hcEZpbGxDb21wb3NpdGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NT
VmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxPcmlnaW4oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVy
KiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxJbWFnZShDU1NQcm9wZXJ0eUlELCBGaWxs
TGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxSZXBlYXRZKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsU2l6ZShD
U1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwRmlsbFhQ
b3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQg
bWFwRmlsbFlQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwot
Ci0gICAgdm9pZCBtYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAg
IHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAg
dm9pZCBtYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZv
aWQgbWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lk
IG1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAg
dm9pZCBtYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBt
YXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1h
cEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBB
bmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotCi1wdWJsaWM6
Ci0gICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIE5p
bmVQaWVjZUltYWdlJik7Ci0gICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVl
KiwgTmluZVBpZWNlSW1hZ2UmKTsKLSAgICBMZW5ndGhCb3ggbWFwTmluZVBpZWNlSW1hZ2VRdWFk
KENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSos
IE5pbmVQaWVjZUltYWdlJik7Ci1wcml2YXRlOgotICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhD
b250cm9sKFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKLQotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICB2b2lkIGFw
cGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLSNlbmRpZgotCi0gICAg
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdl
Kik7Ci0gICAgdm9pZCBsb2FkUGVuZGluZ0ltYWdlcygpOwotCi0gICAgc3RhdGljIHVuc2lnbmVk
IGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMqLCB1
bnNpZ25lZCBzaXplKTsKLSAgICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0gewot
ICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+IG1hdGNoZWRQcm9wZXJ0aWVzOwotICAg
ICAgICBNYXRjaFJhbmdlcyByYW5nZXM7Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVu
ZGVyU3R5bGU7Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcGFyZW50UmVuZGVyU3R5bGU7
Ci0gICAgfTsKLSAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogZmluZEZyb21N
YXRjaGVkUHJvcGVydGllc0NhY2hlKHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNoUmVzdWx0Jik7
Ci0gICAgdm9pZCBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1h
dGNoUmVzdWx0Jik7Ci0KLSAgICAvLyBFdmVyeSBOIGFkZGl0aW9ucyB0byB0aGUgbWF0Y2hlZCBk
ZWNsYXJhdGlvbiBjYWNoZSB0cmlnZ2VyIGEgc3dlZXAgd2hlcmUgZW50cmllcyBob2xkaW5nCi0g
ICAgLy8gdGhlIGxhc3QgcmVmZXJlbmNlIHRvIGEgc3R5bGUgZGVjbGFyYXRpb24gYXJlIGdhcmJh
Z2UgY29sbGVjdGVkLgotICAgIHZvaWQgc3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7Ci0K
LSAgICB1bnNpZ25lZCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RT
d2VlcDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgTWF0Y2hlZFByb3BlcnRpZXND
YWNoZUl0ZW0+IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU7Ci0gICAgTWF0Y2hlZFByb3BlcnRpZXND
YWNoZSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU7Ci0KLSAgICAvLyBBIGJ1ZmZlciB1c2VkIHRv
IGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LCBhbmQgYSB0ZW1w
b3JhcnkgYnVmZmVyIHVzZWQgZm9yCi0gICAgLy8gbWVyZ2Ugc29ydGluZy4KLSAgICBWZWN0b3I8
Y29uc3QgUnVsZURhdGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7Ci0KLSAgICBSZWZQdHI8U3RhdGlj
Q1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7Ci0KLSAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IG1f
cGVuZGluZ0ltYWdlUHJvcGVydGllczsKLQotICAgIE93blB0cjxNZWRpYVF1ZXJ5RXZhbHVhdG9y
PiBtX21lZGl1bTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fcm9vdERlZmF1bHRTdHlsZTsK
LQotICAgIFBzZXVkb0lkIG1fZHluYW1pY1BzZXVkbzsKLQotICAgIFNlbGVjdG9yQ2hlY2tlciBt
X2NoZWNrZXI7Ci0KLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7Ci0gICAgUmVuZGVy
U3R5bGUqIG1fcGFyZW50U3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUqIG1fcm9vdEVsZW1lbnRTdHls
ZTsKLSAgICBFbGVtZW50KiBtX2VsZW1lbnQ7Ci0gICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRF
bGVtZW50OwotICAgIFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nOwotICAgIEVJbnNp
ZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZTsKLSAgICBDb250YWluZXJOb2RlKiBtX3BhcmVudE5v
ZGU7Ci0gICAgQ1NTVmFsdWUqIG1fbGluZUhlaWdodFZhbHVlOwotICAgIGJvb2wgbV9mb250RGly
dHk7Ci0gICAgYm9vbCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKLSAgICBib29sIG1fc2Ft
ZU9yaWdpbk9ubHk7Ci0KLSAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3Rv
cjsKLSAgICBWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlSZXN1bHQ+ID4gbV92aWV3cG9ydERlcGVu
ZGVudE1lZGlhUXVlcnlSZXN1bHRzOwotCi0gICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZTsKLSAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKLSAg
ICBjb25zdCBTdHlsZUJ1aWxkZXImIG1fc3R5bGVCdWlsZGVyOwotICAgIAotICAgIEhhc2hNYXA8
U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBtX3N0eWxlUnVsZVRvQ1NTT01XcmFw
cGVyTWFwOwotICAgIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gbV9zdHlsZVNoZWV0
Q1NTT01XcmFwcGVyU2V0OwotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGJvb2wgbV9o
YXNQZW5kaW5nU2hhZGVyczsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAg
ICBzdGF0aWMgY29uc3QgQ29udGFpbmVyTm9kZSogZGV0ZXJtaW5lU2NvcGUoY29uc3QgU3R5bGVT
aGVldEludGVybmFsKik7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgQ29udGFpbmVyTm9k
ZSosIE93blB0cjxSdWxlU2V0PiA+IFNjb3BlZFJ1bGVTZXRNYXA7Ci0KLSAgICBSdWxlU2V0KiBy
dWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSopIGNvbnN0OwotCi0gICAgdm9pZCBz
ZXR1cFNjb3BlU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSopOwotICAgIGJvb2wgc2NvcGVTdGFj
a0lzQ29uc2lzdGVudChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpIGNvbnN0IHsgcmV0dXJu
IHBhcmVudCAmJiBwYXJlbnQgPT0gbV9zY29wZVN0YWNrUGFyZW50OyB9Ci0KLSAgICBTY29wZWRS
dWxlU2V0TWFwIG1fc2NvcGVkQXV0aG9yU3R5bGVzOwotICAgIAotICAgIHN0cnVjdCBTY29wZVN0
YWNrRnJhbWUgewotICAgICAgICBTY29wZVN0YWNrRnJhbWUoKSA6IG1fc2NvcGUoMCksIG1fcnVs
ZVNldCgwKSB7IH0KLSAgICAgICAgU2NvcGVTdGFja0ZyYW1lKGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlLCBSdWxlU2V0KiBydWxlU2V0KSA6IG1fc2NvcGUoc2NvcGUpLCBtX3J1bGVTZXQocnVs
ZVNldCkgeyB9Ci0gICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2NvcGU7Ci0gICAgICAg
IFJ1bGVTZXQqIG1fcnVsZVNldDsKLSAgICB9OwotICAgIC8vIFZlY3RvciAodXNlZCBhcyBzdGFj
aykgdGhhdCBrZWVwcyB0cmFjayBvZiBzY29waW5nIGVsZW1lbnRzIChpLmUuLCBlbGVtZW50cyB3
aXRoIGEgPHN0eWxlIHNjb3BlZD4gY2hpbGQpCi0gICAgLy8gZW5jb3VudGVyZWQgZHVyaW5nIHRy
ZWUgaXRlcmF0aW9uIGZvciBzdHlsZSByZXNvbHV0aW9uLgotICAgIFZlY3RvcjxTY29wZVN0YWNr
RnJhbWU+IG1fc2NvcGVTdGFjazsKLSAgICAvLyBFbGVtZW50IGxhc3Qgc2VlbiBhcyBwYXJlbnQg
ZWxlbWVudCB3aGVuIHVwZGF0aW5nIG1fc2NvcGluZ0VsZW1lbnRTdGFjay4KLSAgICAvLyBUaGlz
IGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9zY29waW5nRWxlbWVudFN0YWNrIGlzIGNvbnNp
c3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxlY3RvckNoZWNrZXI6Om1fcGFyZW50U3RhY2suCi0g
ICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZVN0YWNrUGFyZW50OwotI2VuZGlmCi0KLSAg
ICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwotICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBN
YXRjaGVkUHJvcGVydGllcyYpOwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTWF0
Y2hSYW5nZXMmLCBjb25zdCBNYXRjaFJhbmdlcyYpOwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
IT0oY29uc3QgTWF0Y2hSYW5nZXMmLCBjb25zdCBNYXRjaFJhbmdlcyYpOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ1NTU3R5bGVTZWxlY3Rvcl9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCShyZXZpc2lvbiAxMTUx
ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRl
ICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1
ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNDMsOSArNDIsMTAgQEAK
ICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1TY3JlZW4uaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KIAogI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpICYmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVy
LmNwcAkocmV2aXNpb24gMTE1MTg3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlN
YXRjaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlNYXRjaGVyLmgiCiAKLSNpbmNsdWRlICJDU1NT
dHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTI5LDYgKzI4LDcgQEAKICNpbmNsdWRlICJNZWRp
YVF1ZXJ5RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUxpc3QuaCIKICNpbmNsdWRl
ICJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NT
dHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NT
U3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJDU1NT
dHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiAjaW5jbHVkZSAi
Q1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMu
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxMTUxODcp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNs
dWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVN
YXBwaW5ncy5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NW
YWx1ZUxpc3QuaCIKICNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUmVz
b2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAJKHJldmlzaW9u
IDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTIgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U3R5bGVNZWRpYS5oIgogCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgi
CisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDExNTE4NykJKGZy
b20gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOjExNTE4NykKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU4NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNl
biAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xh
cyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtv
diA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgorCisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisjaW5jbHVkZSAi
Q2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAi
Q29udGVudERhdGEuaCIKKyNpbmNsdWRlICJDb3VudGVyLmgiCisjaW5jbHVkZSAiQ291bnRlckNv
bnRlbnQuaCIKKyNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZS5oIgorI2luY2x1ZGUgIkNTU0NhbGN1
bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCisjaW5jbHVk
ZSAiQ1NTRm9udEZhY2VSdWxlLmgiCisjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCisjaW5j
bHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUgIkNTU0xpbmVCb3hDb250YWluVmFsdWUu
aCIKKyNpbmNsdWRlICJDU1NNZWRpYVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NQYWdlUnVsZS5oIgor
I2luY2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTUmVmbGVj
dFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTZWxlY3Rv
ci5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVs
ZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJDU1NUaW1pbmdGdW5j
dGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5jbHVkZSAiQ3Vyc29y
TGlzdC5oIgorI2luY2x1ZGUgIkZvbnRGZWF0dXJlVmFsdWUuaCIKKyNpbmNsdWRlICJGb250VmFs
dWUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJLZXlmcmFtZUxpc3QuaCIKKyNpbmNsdWRlICJMaW5r
SGFzaC5oIgorI2luY2x1ZGUgIkxvY2FsZVRvU2NyaXB0TWFwcGluZy5oIgorI2luY2x1ZGUgIk1h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCisjaW5jbHVkZSAiTWVkaWFRdWVyeUV2
YWx1YXRvci5oIgorI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJQYWlyLmgiCisjaW5jbHVkZSAi
UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJRdW90ZXNEYXRhLmgi
CisjaW5jbHVkZSAiUmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2luY2x1ZGUg
IlJlbmRlclNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclRoZW1lLmgiCisj
aW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgorI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIK
KyNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKKyNpbmNsdWRlICJTaGFkb3dEYXRhLmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5o
IgorI2luY2x1ZGUgIlNoYWRvd1ZhbHVlLmgiCisjaW5jbHVkZSAiU2tld1RyYW5zZm9ybU9wZXJh
dGlvbi5oIgorI2luY2x1ZGUgIlN0eWxlQnVpbGRlci5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVk
SW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZVBlbmRpbmdJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxl
UnVsZS5oIgorI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHls
ZVNoZWV0TGlzdC5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgorI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgorI2luY2x1ZGUg
IldlYktpdENTU1JlZ2lvblJ1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZS5oIgorI2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgorI2luY2x1ZGUgIlhNTE5h
bWVzLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRp
b24uaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oIgorI2VuZGlmCisKKyNpZiBF
TkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisjaW5jbHVkZSAiRGFzaGJvYXJkUmVnaW9uLmgiCisj
ZW5kaWYKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1
ZGUgIlNWR05hbWVzLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNs
dWRlICJDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0
ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXIuaCIKKyNpbmNs
dWRlICJTdHlsZUNhY2hlZFNoYWRlci5oIgorI2luY2x1ZGUgIlN0eWxlQ3VzdG9tRmlsdGVyUHJv
Z3JhbS5oIgorI2luY2x1ZGUgIlN0eWxlUGVuZGluZ1NoYWRlci5oIgorI2luY2x1ZGUgIlN0eWxl
U2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTU2hhZGVyVmFsdWUuaCIKKyNlbmRpZgorCisj
aWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCisjaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgor
I2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2VTZXQuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
UVQpCisjZGVmaW5lIEZJWEVEX1BPU0lUSU9OX0NSRUFURVNfU1RBQ0tJTkdfQ09OVEVYVCAxCisj
ZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3As
IFByb3ApIFwKK2lmIChpc0luaGVyaXQpIHsgXAorICAgIG1fc3R5bGUtPnNldCMjUHJvcChtX3Bh
cmVudFN0eWxlLT5wcm9wKCkpOyBcCisgICAgcmV0dXJuOyBcCit9CisKKyNkZWZpbmUgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAorSEFORExFX0lOSEVSSVQocHJvcCwg
UHJvcCkgXAoraWYgKGlzSW5pdGlhbCkgeyBcCisgICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRl
clN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCisgICAgcmV0dXJuOyBcCit9CisKKyNkZWZpbmUg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfV0lUSF9WQUxVRShwcm9wLCBQcm9wLCBWYWx1ZSkg
XAorSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAoraWYgKGlzSW5pdGlhbCkgeyBcCisgICAg
bV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNWYWx1ZSgpKTtcCisgICAg
cmV0dXJuO1wKK30KKworI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJ
TUlUSVZFKHByb3AsIFByb3ApIFwKK0hBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFBy
b3ApIFwKK2lmIChwcmltaXRpdmVWYWx1ZSkgXAorICAgIG1fc3R5bGUtPnNldCMjUHJvcCgqcHJp
bWl0aXZlVmFsdWUpOworCitjbGFzcyBSdWxlRGF0YSB7CitwdWJsaWM6CisgICAgUnVsZURhdGEo
U3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlu
UmVnaW9uUnVsZSk7CisKKyAgICB1bnNpZ25lZCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KKyAgICBTdHlsZVJ1bGUqIHJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7
IH0KKyAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9y
OyB9CisKKyAgICBib29sIGhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yOyB9CisgICAgYm9vbCBoYXNNdWx0aXBhcnRTZWxl
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3I7IH0KKyAgICBib29s
IGhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFz
aDsgfQorICAgIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7IH0KKyAgICB1bnNp
Z25lZCBzcGVjaWZpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNpdHk7IH0KKyAgICB1
bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9saW5rTWF0Y2hUeXBlOyB9
CisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOyB9CisgICAgYm9vbCBpc0luUmVnaW9uUnVsZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNJblJlZ2lvblJ1bGU7IH0KKworICAgIC8vIFRyeSB0byBiYWxhbmNl
IGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0YSBvYmpl
Y3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVyZm9ybWFuY2UuCisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQgPSA0OworICAgIGNvbnN0IHVuc2lnbmVkKiBk
ZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyByZXR1cm4gbV9kZXNj
ZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9CisKK3ByaXZhdGU6CisgICAgU3R5bGVS
dWxlKiBtX3J1bGU7CisgICAgQ1NTU2VsZWN0b3IqIG1fc2VsZWN0b3I7CisgICAgdW5zaWduZWQg
bV9zcGVjaWZpY2l0eTsKKyAgICAvLyBUaGlzIG51bWJlciB3YXMgcGlja2VkIGZhaXJseSBhcmJp
dHJhcmlseS4gV2UgY2FuIHByb2JhYmx5IGxvd2VyIGl0IGlmIHdlIG5lZWQgdG8uCisgICAgLy8g
U29tZSBzaW1wbGUgdGVzdGluZyBzaG93ZWQgPDEwMCwwMDAgUnVsZURhdGEncyBvbiBsYXJnZSBz
aXRlcy4KKyAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIDogMjQ7CisgICAgdW5zaWduZWQgbV9oYXNG
YXN0Q2hlY2thYmxlU2VsZWN0b3IgOiAxOworICAgIHVuc2lnbmVkIG1faGFzTXVsdGlwYXJ0U2Vs
ZWN0b3IgOiAxOworICAgIHVuc2lnbmVkIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hU
TUxCYXNlZE9uUnVsZUhhc2ggOiAxOworICAgIHVuc2lnbmVkIG1fY29udGFpbnNVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2xpbmtNYXRjaFR5cGUgOiAyOyAv
LyAgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrCisgICAgdW5zaWduZWQgbV9oYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzSW5SZWdpb25SdWxlIDog
MTsKKyAgICAvLyBVc2UgcGxhaW4gYXJyYXkgaW5zdGVhZCBvZiBhIFZlY3RvciB0byBtaW5pbWl6
ZSBtZW1vcnkgb3ZlcmhlYWQuCisgICAgdW5zaWduZWQgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVu
dGlmaWVySGFzaGVzW21heGltdW1JZGVudGlmaWVyQ291bnRdOworfTsKKyAgICAKK3N0cnVjdCBT
YW1lU2l6ZUFzUnVsZURhdGEgeworICAgIHZvaWQqIGE7CisgICAgdm9pZCogYjsKKyAgICB1bnNp
Z25lZCBjOworICAgIHVuc2lnbmVkIGQ7CisgICAgdW5zaWduZWQgZVs0XTsKK307CisKK0NPTVBJ
TEVfQVNTRVJUKHNpemVvZihSdWxlRGF0YSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNSdWxlRGF0YSks
IFJ1bGVEYXRhX3Nob3VsZF9zdGF5X3NtYWxsKTsKKworY2xhc3MgUnVsZVNldCB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUnVsZVNldCk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8UnVsZVNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOyB9CisK
KyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8UnVs
ZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKKworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5
bGVTaGVldEludGVybmFsKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2
ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKKworICAgIHZvaWQgYWRkU3R5bGVS
dWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5V
c2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKKyAgICB2
b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCBib29sIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lv
blJ1bGUgPSBmYWxzZSk7CisgICAgdm9pZCBhZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKik7Cisg
ICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYs
IGNvbnN0IFJ1bGVEYXRhJik7CisgICAgdm9pZCBhZGRSZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lv
biosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7CisgICAgdm9pZCBzaHJpbmtUb0Zp
dCgpOworICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpIHsgbV9hdXRvU2hyaW5rVG9G
aXRFbmFibGVkID0gZmFsc2U7IH0KKworICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVz
JiBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KKworICAgIGNvbnN0IFZl
Y3RvcjxSdWxlRGF0YT4qIGlkUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJl
dHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBj
bGFzc1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1J1
bGVzLmdldChrZXkpOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdGFnUnVsZXMoQXRv
bWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX3RhZ1J1bGVzLmdldChrZXkpOyB9
CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKEF0
b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dQc2V1ZG9FbGVtZW50
UnVsZXMuZ2V0KGtleSk7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBsaW5rUHNldWRv
Q2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzOyB9Cisg
ICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCkgY29uc3Qg
eyByZXR1cm4gJm1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1
bGVEYXRhPiogdW5pdmVyc2FsUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV91bml2ZXJzYWxSdWxl
czsgfQorICAgIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHBhZ2VSdWxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fcGFnZVJ1bGVzOyB9CisKK3B1YmxpYzoKKyAgICBSdWxlU2V0KCk7CisKKyAg
ICBBdG9tUnVsZU1hcCBtX2lkUnVsZXM7CisgICAgQXRvbVJ1bGVNYXAgbV9jbGFzc1J1bGVzOwor
ICAgIEF0b21SdWxlTWFwIG1fdGFnUnVsZXM7CisgICAgQXRvbVJ1bGVNYXAgbV9zaGFkb3dQc2V1
ZG9FbGVtZW50UnVsZXM7CisgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX2xpbmtQc2V1ZG9DbGFzc1J1
bGVzOworICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXM7CisgICAg
VmVjdG9yPFJ1bGVEYXRhPiBtX3VuaXZlcnNhbFJ1bGVzOworICAgIFZlY3RvcjxTdHlsZVJ1bGVQ
YWdlKj4gbV9wYWdlUnVsZXM7CisgICAgdW5zaWduZWQgbV9ydWxlQ291bnQ7CisgICAgYm9vbCBt
X2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7CisgICAgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMgbV9m
ZWF0dXJlczsKKworICAgIHN0cnVjdCBSdWxlU2V0U2VsZWN0b3JQYWlyIHsKKyAgICAgICAgUnVs
ZVNldFNlbGVjdG9yUGFpcihDU1NTZWxlY3Rvciogc2VsZWN0b3IsIFBhc3NPd25QdHI8UnVsZVNl
dD4gcnVsZVNldCkgOiBzZWxlY3RvcihzZWxlY3RvciksIHJ1bGVTZXQocnVsZVNldCkgeyB9Cisg
ICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIoY29uc3QgUnVsZVNldFNlbGVjdG9yUGFpciYgcnMp
IDogc2VsZWN0b3IocnMuc2VsZWN0b3IpLCBydWxlU2V0KGNvbnN0X2Nhc3Q8UnVsZVNldFNlbGVj
dG9yUGFpcio+KCZycyktPnJ1bGVTZXQucmVsZWFzZSgpKSB7IH0KKyAgICAgICAgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yOworICAgICAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldDsKKyAgICB9Owor
CisgICAgVmVjdG9yPFJ1bGVTZXRTZWxlY3RvclBhaXI+IG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVs
ZVNldHM7Cit9OworCitzdGF0aWMgUnVsZVNldCogZGVmYXVsdFN0eWxlOworc3RhdGljIFJ1bGVT
ZXQqIGRlZmF1bHRRdWlya3NTdHlsZTsKK3N0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UHJpbnRTdHls
ZTsKK3N0YXRpYyBSdWxlU2V0KiBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlOworc3RhdGljIFN0eWxl
U2hlZXRJbnRlcm5hbCogc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVl
dEludGVybmFsKiBkZWZhdWx0U3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwq
IHF1aXJrc1N0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBzdmdTdHlsZVNo
ZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogbWF0aE1MU3R5bGVTaGVldDsKK3N0YXRp
YyBTdHlsZVNoZWV0SW50ZXJuYWwqIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0Oworc3RhdGljIFN0
eWxlU2hlZXRJbnRlcm5hbCogZnVsbHNjcmVlblN0eWxlU2hlZXQ7CisKK1JlbmRlclN0eWxlKiBT
dHlsZVJlc29sdmVyOjpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOworCitzdGF0aWMgdm9pZCBsb2Fk
RnVsbERlZmF1bHRTdHlsZSgpOworc3RhdGljIHZvaWQgbG9hZFNpbXBsZURlZmF1bHRTdHlsZSgp
OwordGVtcGxhdGUgPGNsYXNzIExpc3RUeXBlPgorc3RhdGljIHZvaWQgY29sbGVjdENTU09NV3Jh
cHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+JiwgTGlzdFR5
cGUqKTsKKworLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHNvbWUgbWVjaGFuaXNt
IHRoYXQgZ3VhcmFudGVlcyB0aGlzIGlzIGluIHN5bmMgd2l0aCB0aGUgcmVhbCBVQSBzdHlsZXNo
ZWV0Lgorc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZVVzZXJBZ2VudFN0eWxlU2hlZXQgPSAiaHRt
bCxib2R5LGRpdntkaXNwbGF5OmJsb2NrfWhlYWR7ZGlzcGxheTpub25lfWJvZHl7bWFyZ2luOjhw
eH1kaXY6Zm9jdXMsc3Bhbjpmb2N1c3tvdXRsaW5lOmF1dG8gNXB4IC13ZWJraXQtZm9jdXMtcmlu
Zy1jb2xvcn1hOi13ZWJraXQtYW55LWxpbmt7Y29sb3I6LXdlYmtpdC1saW5rO3RleHQtZGVjb3Jh
dGlvbjp1bmRlcmxpbmV9YTotd2Via2l0LWFueS1saW5rOmFjdGl2ZXtjb2xvcjotd2Via2l0LWFj
dGl2ZWxpbmt9IjsKKworc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRDYW5Vc2VTaW1wbGVEZWZh
dWx0U3R5bGUoRWxlbWVudCogZSkKK3sKKyAgICByZXR1cm4gZS0+aGFzVGFnTmFtZShodG1sVGFn
KSB8fCBlLT5oYXNUYWdOYW1lKGhlYWRUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYm9keVRhZykgfHwg
ZS0+aGFzVGFnTmFtZShkaXZUYWcpIHx8IGUtPmhhc1RhZ05hbWUoc3BhblRhZykgfHwgZS0+aGFz
VGFnTmFtZShiclRhZykgfHwgZS0+aGFzVGFnTmFtZShhVGFnKTsKK30KKworc3RhdGljIGNvbnN0
IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVlbkV2YWwoKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwgc3RhdGljU2NyZWVuRXZhbCwgKCJzY3Jl
ZW4iKSk7CisgICAgcmV0dXJuIHN0YXRpY1NjcmVlbkV2YWw7Cit9CisKK3N0YXRpYyBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiBwcmludEV2YWwoKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwgc3RhdGljUHJpbnRFdmFsLCAoInByaW50Iikp
OworICAgIHJldHVybiBzdGF0aWNQcmludEV2YWw7Cit9CisKK3N0YXRpYyBTdHlsZVByb3BlcnR5
U2V0KiBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiwgbGVmdFRvUmlnaHREZWNsLCAoU3R5bGVQcm9wZXJ0
eVNldDo6Y3JlYXRlKCkpKTsKKyAgICBpZiAobGVmdFRvUmlnaHREZWNsLT5pc0VtcHR5KCkpCisg
ICAgICAgIGxlZnRUb1JpZ2h0RGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24s
IENTU1ZhbHVlTHRyKTsKKyAgICByZXR1cm4gbGVmdFRvUmlnaHREZWNsLmdldCgpOworfQorCitz
dGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4sIHJpZ2h0VG9MZWZ0
RGVjbCwgKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpKSk7CisgICAgaWYgKHJpZ2h0VG9MZWZ0
RGVjbC0+aXNFbXB0eSgpKQorICAgICAgICByaWdodFRvTGVmdERlY2wtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZVJ0bCk7CisgICAgcmV0dXJuIHJpZ2h0VG9MZWZ0
RGVjbC5nZXQoKTsKK30KKworU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQorICAgIDogbV9oYXNVQUFw
cGVhcmFuY2UoZmFsc2UpCisgICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91bmRGaWxsTGF5
ZXIpCisgICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2Vl
cCgwKQorICAgICwgbV9jaGVja2VyKGRvY3VtZW50LCAhZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgp
KQorICAgICwgbV9wYXJlbnRTdHlsZSgwKQorICAgICwgbV9yb290RWxlbWVudFN0eWxlKDApCisg
ICAgLCBtX2VsZW1lbnQoMCkKKyAgICAsIG1fc3R5bGVkRWxlbWVudCgwKQorICAgICwgbV9yZWdp
b25Gb3JTdHlsaW5nKDApCisgICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykK
KyAgICAsIG1fcGFyZW50Tm9kZSgwKQorICAgICwgbV9saW5lSGVpZ2h0VmFsdWUoMCkKKyAgICAs
IG1fZm9udERpcnR5KGZhbHNlKQorICAgICwgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMobWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQorICAgICwgbV9zYW1lT3JpZ2luT25seShmYWxzZSkKKyAg
ICAsIG1fZm9udFNlbGVjdG9yKENTU0ZvbnRTZWxlY3Rvcjo6Y3JlYXRlKGRvY3VtZW50KSkKKyAg
ICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCisgICAgLCBtX2FwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCisgICAgLCBtX3N0eWxlQnVpbGRlcihTdHls
ZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpKQorI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
KyAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCisjZW5kaWYKKyNpZiBFTkFCTEUoU1RZ
TEVfU0NPUEVEKQorICAgICwgbV9zY29wZVN0YWNrUGFyZW50KDApCisjZW5kaWYKK3sKKyAgICBF
bGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworCisgICAgaWYgKCFk
ZWZhdWx0U3R5bGUpIHsKKyAgICAgICAgaWYgKCFyb290IHx8IGVsZW1lbnRDYW5Vc2VTaW1wbGVE
ZWZhdWx0U3R5bGUocm9vdCkpCisgICAgICAgICAgICBsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIGNvbnN0cnVjdCBkb2N1bWVudCByb290IGVsZW1lbnQg
ZGVmYXVsdCBzdHlsZS4gdGhpcyBpcyBuZWVkZWQKKyAgICAvLyB0byBldmFsdWF0ZSBtZWRpYSBx
dWVyaWVzIHRoYXQgY29udGFpbiByZWxhdGl2ZSBjb25zdHJhaW50cywgbGlrZSAic2NyZWVuIGFu
ZCAobWF4LXdpZHRoOiAxMGVtKSIKKyAgICAvLyBUaGlzIGlzIGhlcmUgaW5zdGVhZCBvZiBjb25z
dHJ1Y3RvciwgYmVjYXVzZSB3aGVuIGNvbnN0cnVjdG9yIGlzIHJ1biwKKyAgICAvLyBkb2N1bWVu
dCBkb2Vzbid0IGhhdmUgZG9jdW1lbnRFbGVtZW50CisgICAgLy8gTk9URTogdGhpcyBhc3N1bWVz
IHRoYXQgZWxlbWVudCB0aGF0IGdldHMgcGFzc2VkIHRvIHN0eWxlRm9yRWxlbWVudCAtY2FsbAor
ICAgIC8vIGlzIGFsd2F5cyBmcm9tIHRoZSBkb2N1bWVudCB0aGF0IG93bnMgdGhlIHN0eWxlIHNl
bGVjdG9yCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBpZiAo
dmlldykKKyAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRv
cih2aWV3LT5tZWRpYVR5cGUoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9tZWRpdW0gPSBhZG9w
dFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcigiYWxsIikpOworCisgICAgaWYgKHJvb3QpCisg
ICAgICAgIG1fcm9vdERlZmF1bHRTdHlsZSA9IHN0eWxlRm9yRWxlbWVudChyb290LCAwLCBEaXNh
bGxvd1N0eWxlU2hhcmluZywgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOworCisgICAgaWYgKG1f
cm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQorICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5l
dyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5mcmFtZSgpLCBt
X3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpKTsKKworICAgIG1fYXV0aG9yU3R5bGUgPSBSdWxlU2V0
OjpjcmVhdGUoKTsKKyAgICAvLyBBZGRpbmcgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNo
cmluayBhdCB0aGUgZW5kLgorICAgIC8vIEFkZGluZyBnbG9iYWwgcnVsZXMgZnJvbSBtdWx0aXBs
ZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgorICAgIC8vIE5vdGUgdGhhdCB0aGVyZSB1c3Vh
bGx5IGlzIG9ubHkgMSBzaGVldCBmb3Igc2NvcGVkIHJ1bGVzLCBzbyBhdXRvLXNocmluay10by1m
aXQgaXMgZmluZS4KKyAgICBtX2F1dGhvclN0eWxlLT5kaXNhYmxlQXV0b1Nocmlua1RvRml0KCk7
CisKKyAgICAvLyBGSVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQg
ZXZlcnkgdGltZSEKKyAgICBPd25QdHI8UnVsZVNldD4gdGVtcFVzZXJTdHlsZSA9IFJ1bGVTZXQ6
OmNyZWF0ZSgpOworICAgIGlmIChTdHlsZVNoZWV0SW50ZXJuYWwqIHBhZ2VVc2VyU2hlZXQgPSBk
b2N1bWVudC0+cGFnZVVzZXJTaGVldCgpKQorICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxl
c0Zyb21TaGVldChwYWdlVXNlclNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgIGFkZEF1dGhv
clJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoZG9jdW1lbnQtPnBhZ2VHcm91cFVz
ZXJTaGVldHMoKSwgKnRlbXBVc2VyU3R5bGUpOworICAgIGFkZEF1dGhvclJ1bGVzQW5kQ29sbGVj
dFVzZXJSdWxlc0Zyb21TaGVldHMoZG9jdW1lbnQtPmRvY3VtZW50VXNlclNoZWV0cygpLCAqdGVt
cFVzZXJTdHlsZSk7CisgICAgaWYgKHRlbXBVc2VyU3R5bGUtPm1fcnVsZUNvdW50ID4gMCB8fCB0
ZW1wVXNlclN0eWxlLT5tX3BhZ2VSdWxlcy5zaXplKCkgPiAwKQorICAgICAgICBtX3VzZXJTdHls
ZSA9IHRlbXBVc2VyU3R5bGUucmVsZWFzZSgpOworCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAg
ICBpZiAoZG9jdW1lbnQtPnN2Z0V4dGVuc2lvbnMoKSkgeworICAgICAgICBjb25zdCBIYXNoU2V0
PFNWR0ZvbnRGYWNlRWxlbWVudCo+JiBzdmdGb250RmFjZUVsZW1lbnRzID0gZG9jdW1lbnQtPnN2
Z0V4dGVuc2lvbnMoKS0+c3ZnRm9udEZhY2VFbGVtZW50cygpOworICAgICAgICBIYXNoU2V0PFNW
R0ZvbnRGYWNlRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdmdGb250RmFjZUVsZW1l
bnRzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gc3ZnRm9udEZhY2VFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgICAgICBmb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKCgqaXQp
LT5mb250RmFjZVJ1bGUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBhcHBlbmRBdXRob3JTdHls
ZXNoZWV0cygwLCBkb2N1bWVudC0+c3R5bGVTaGVldHMoKS0+dmVjdG9yKCkpOworfQorCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVl
dHMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4qIHVzZXJTaGVldHMs
IFJ1bGVTZXQmIHVzZXJTdHlsZSkKK3sKKyAgICBpZiAoIXVzZXJTaGVldHMpCisgICAgICAgIHJl
dHVybjsKKworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHVzZXJTaGVldHMtPnNpemUoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgY29uc3QgUmVm
UHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4mIHNoZWV0ID0gdXNlclNoZWV0cy0+YXQoaSk7CisgICAg
ICAgIGlmIChzaGVldC0+aXNVc2VyU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgdXNlclN0eWxl
LmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVl
dC5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICB9Cit9CisKK3N0YXRpYyBQYXNzT3duUHRy
PFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3RvcjxTdHlsZVJlc29sdmVyOjpSdWxlRmVh
dHVyZT4mIHJ1bGVzKQoreworICAgIHNpemVfdCBzaXplID0gcnVsZXMuc2l6ZSgpOworICAgIGlm
ICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgT3duUHRyPFJ1bGVTZXQ+IHJ1
bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkKKyAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5ydWxlLCBydWxlc1tp
XS5zZWxlY3RvciwgcnVsZXNbaV0uaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgZmFsc2UpOwor
ICAgIHJldHVybiBydWxlU2V0LnJlbGVhc2UoKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpj
b2xsZWN0RmVhdHVyZXMoKQoreworICAgIG1fZmVhdHVyZXMuY2xlYXIoKTsKKyAgICAvLyBDb2xs
ZWN0IGFsbCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxpbmcgc2VsZWN0b3JzICg6Zmlyc3QtY2hp
bGQgYW5kIHNpbWlsYXIpCisgICAgLy8gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIHN0eWxlc2hlZXRz
LiBTdHlsZSBzaGFyaW5nIGNvZGUgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRvIHJlamVjdAorICAg
IC8vIHNoYXJpbmcgY2FuZGlkYXRlcy4KKyAgICBtX2ZlYXR1cmVzLmFkZChkZWZhdWx0U3R5bGUt
PmZlYXR1cmVzKCkpOworICAgIG1fZmVhdHVyZXMuYWRkKG1fYXV0aG9yU3R5bGUtPmZlYXR1cmVz
KCkpOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgZm9yIChTY29wZWRSdWxlU2V0TWFw
OjppdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fc2Nv
cGVkQXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQorICAgICAgICBtX2ZlYXR1cmVzLmFkZChpdC0+
c2Vjb25kLT5mZWF0dXJlcygpKTsKKyNlbmRpZgorICAgIGlmIChtX3VzZXJTdHlsZSkKKyAgICAg
ICAgbV9mZWF0dXJlcy5hZGQobV91c2VyU3R5bGUtPmZlYXR1cmVzKCkpOworCisgICAgbV9zaWJs
aW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKTsKKyAgICBt
X3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21t
b25BdHRyaWJ1dGVSdWxlcyk7Cit9CisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorY29uc3Qg
Q29udGFpbmVyTm9kZSogU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU2NvcGUoY29uc3QgU3R5bGVT
aGVldEludGVybmFsKiBzaGVldCkKK3sKKyAgICBBU1NFUlQoc2hlZXQpOworCisgICAgaWYgKCFS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVuYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+ZmluZFN0eWxlU2hlZXRPd25l
ck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8fCAhb3duZXJOb2RlLT5pc0hUTUxFbGVtZW50
KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAoIXN0eWxlRWxl
bWVudC0+c2NvcGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ29udGFpbmVyTm9kZSog
cGFyZW50ID0gc3R5bGVFbGVtZW50LT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIChwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSB8
fCBwYXJlbnQtPmlzU2hhZG93Um9vdCgpKSA/IHBhcmVudCA6IDA7Cit9CisKK2lubGluZSBSdWxl
U2V0KiBTdHlsZVJlc29sdmVyOjpydWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUpIGNvbnN0Cit7CisgICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKKyAgICByZXR1cm4gaXQg
IT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsgCit9
CisjZW5kaWYKKwordm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1
bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBzdHls
ZXNoZWV0cykKK3sKKyAgICAvLyBUaGlzIGhhbmRsZXMgc2hlZXRzIGFkZGVkIHRvIHRoZSBlbmQg
b2YgdGhlIHN0eWxlc2hlZXQgbGlzdCBvbmx5LiBJbiBvdGhlciBjYXNlcyB0aGUgc3R5bGUgcmVz
b2x2ZXIKKyAgICAvLyBuZWVkcyB0byBiZSByZWNvbnN0cnVjdGVkLiBUbyBoYW5kbGUgaW5zZXJ0
aW9ucyB0b28gdGhlIHJ1bGUgb3JkZXIgbnVtYmVycyB3b3VsZCBuZWVkIHRvIGJlIHVwZGF0ZWQu
CisgICAgdW5zaWduZWQgc2l6ZSA9IHN0eWxlc2hlZXRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBmaXJzdE5ldzsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAoIXN0eWxlc2hl
ZXRzW2ldLT5pc0NTU1N0eWxlU2hlZXQoKSB8fCBzdHlsZXNoZWV0c1tpXS0+ZGlzYWJsZWQoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9
IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZXNoZWV0c1tpXS5nZXQoKSk7CisgICAg
ICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQgPSBjc3NTaGVldC0+aW50ZXJuYWwoKTsKKyNp
ZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSA9IGRldGVybWluZVNjb3BlKHNoZWV0KTsKKyAgICAgICAgaWYgKHNjb3BlKSB7CisgICAgICAg
ICAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zY29wZWRBdXRo
b3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9
IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgbV9hdXRob3JT
dHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgICAg
IGlmICghbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBjc3NT
aGVldCk7CisgICAgfQorICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1RvRml0KCk7CisgICAgY29s
bGVjdEZlYXR1cmVzKCk7CisgICAgCisgICAgaWYgKGRvY3VtZW50KCktPnJlbmRlcmVyKCkgJiYg
ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7Cit9CisKKyNp
ZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQordm9pZCBTdHlsZVJlc29sdmVyOjpzZXR1cFNjb3BlU3Rh
Y2soY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KQoreworICAgIC8vIFRoZSBzY29waW5nIGVs
ZW1lbnQgc3RhY2sgc2hvdWxkbid0IGJlIHVzZWQgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNl
ZCBhbnl3aGVyZS4KKyAgICBBU1NFUlQoIW1fc2NvcGVkQXV0aG9yU3R5bGVzLmlzRW1wdHkoKSk7
CisKKyAgICBtX3Njb3BlU3RhY2suc2hyaW5rKDApOworICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVu
dCA9IHBhcmVudC0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgIFJ1bGVTZXQqIHJ1bGVT
ZXQgPSBydWxlU2V0Rm9yU2NvcGUocGFyZW50KTsKKyAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAg
ICAgICAgICBtX3Njb3BlU3RhY2suYXBwZW5kKFNjb3BlU3RhY2tGcmFtZShwYXJlbnQsIHJ1bGVT
ZXQpKTsKKyAgICB9CisgICAgbV9zY29wZVN0YWNrLnJldmVyc2UoKTsKKyAgICBtX3Njb3BlU3Rh
Y2tQYXJlbnQgPSBwYXJlbnQ7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFNjb3BlKGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZVBhcmVu
dCkKK3sKKyAgICAvLyBTaG9ydGN1dDogRG9uJ3QgYm90aGVyIHdpdGggdGhlIHNjb3BpbmcgZWxl
bWVudCBzdGFjayBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgorICAgIGlm
IChtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX3Nj
b3BlU3RhY2tQYXJlbnQpOworICAgICAgICBBU1NFUlQobV9zY29wZVN0YWNrLmlzRW1wdHkoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gSW4gc29tZSB3YWNreSBjYXNlcyBkdXJp
bmcgc3R5bGUgcmVzb2x2ZSB3ZSBtYXkgZ2V0IGludm9rZWQgZm9yIHJhbmRvbSBlbGVtZW50cy4K
KyAgICAvLyBSZWNyZWF0ZSB0aGUgd2hvbGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGluIHN1Y2gg
Y2FzZXMuCisgICAgaWYgKCFzY29wZVN0YWNrSXNDb25zaXN0ZW50KHNjb3BlUGFyZW50KSkgewor
ICAgICAgICBzZXR1cFNjb3BlU3RhY2soc2NvcGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIHBhcmVudCBvbnRvIHRoZSBzdGFjay4KKyAg
ICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvclNjb3BlKHNjb3BlKTsKKyAgICBpZiAocnVs
ZVNldCkKKyAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChTY29wZVN0YWNrRnJhbWUoc2NvcGUs
IHJ1bGVTZXQpKTsKKyAgICBtX3Njb3BlU3RhY2tQYXJlbnQgPSBzY29wZTsKK30KKwordm9pZCBT
dHlsZVJlc29sdmVyOjpwb3BTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK3sKKyAg
ICAvLyBPbmx5IGJvdGhlciB0byB1cGRhdGUgdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiBp
dCBpcyBjb25zaXN0ZW50LgorICAgIGlmIChzY29wZVN0YWNrSXNDb25zaXN0ZW50KHNjb3BlKSkg
eworICAgICAgICBtX3Njb3BlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICBtX3Njb3BlU3Rh
Y2tQYXJlbnQgPSBzY29wZS0+cGFyZW50T3JIb3N0Tm9kZSgpOworICAgIH0KK30KKyNlbmRpZgor
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkK
K3sKKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnRzUGFyZW50ID0gcGFyZW50LT5wYXJl
bnRPckhvc3RFbGVtZW50KCk7CisKKyAgICAvLyBXZSBhcmUgbm90IGFsd2F5cyBpbnZva2VkIGNv
bnNpc3RlbnRseS4gRm9yIGV4YW1wbGUsIHNjcmlwdCBleGVjdXRpb24gY2FuIGNhdXNlIHVzIHRv
IGVudGVyCisgICAgLy8gc3R5bGUgcmVjYWxjIGluIHRoZSBtaWRkbGUgb2YgdHJlZSBidWlsZGlu
Zy4gV2UgbWF5IGFsc28gYmUgaW52b2tlZCBmcm9tIHNvbWV3aGVyZSB3aXRoaW4gdGhlIHRyZWUu
CisgICAgLy8gUmVzZXQgdGhlIHN0YWNrIGluIHRoaXMgY2FzZSwgb3IgaWYgd2Ugc2VlIGEgbmV3
IHJvb3QgZWxlbWVudC4KKyAgICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRoZSBuZXcgcGFyZW50
LgorICAgIGlmICghcGFyZW50c1BhcmVudCB8fCBtX2NoZWNrZXIucGFyZW50U3RhY2tJc0VtcHR5
KCkpCisgICAgICAgIG1fY2hlY2tlci5zZXR1cFBhcmVudFN0YWNrKHBhcmVudCk7CisgICAgZWxz
ZQorICAgICAgICBtX2NoZWNrZXIucHVzaFBhcmVudChwYXJlbnQpOworCisgICAgLy8gTm90ZTog
V2UgbXVzdG4ndCBza2lwIFNoYWRvd1Jvb3Qgbm9kZXMgZm9yIHRoZSBzY29wZSBzdGFjay4KKyAg
ICBwdXNoU2NvcGUocGFyZW50LCBwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSk7Cit9CisKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCit7Cisg
ICAgLy8gTm90ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSByYW5kb20gZWxlbWVu
dHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4KKyAgICAvLyBQYXVz
ZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgorICAgIGlmIChtX2NoZWNrZXIu
cGFyZW50U3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKKyAgICAgICAgbV9jaGVja2VyLnBvcFBh
cmVudCgpOworICAgIHBvcFNjb3BlKHBhcmVudCk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
cHVzaFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3sKKyAg
ICBBU1NFUlQoc2hhZG93Um9vdC0+aG9zdCgpKTsKKyAgICBwdXNoU2NvcGUoc2hhZG93Um9vdCwg
c2hhZG93Um9vdC0+aG9zdCgpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRT
aGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCit7CisgICAgQVNTRVJUKHNo
YWRvd1Jvb3QtPmhvc3QoKSk7CisgICAgcG9wU2NvcGUoc2hhZG93Um9vdCk7Cit9CisKKy8vIFRo
aXMgaXMgYSBzaW1wbGlmaWVkIHN0eWxlIHNldHRpbmcgZnVuY3Rpb24gZm9yIGtleWZyYW1lIHN0
eWxlcwordm9pZCBTdHlsZVJlc29sdmVyOjphZGRLZXlmcmFtZVN0eWxlKFBhc3NSZWZQdHI8U3R5
bGVSdWxlS2V5ZnJhbWVzPiBydWxlKQoreworICAgIEF0b21pY1N0cmluZyBzKHJ1bGUtPm5hbWUo
KSk7CisgICAgbV9rZXlmcmFtZXNSdWxlTWFwLnNldChzLmltcGwoKSwgcnVsZSk7Cit9CisKK1N0
eWxlUmVzb2x2ZXI6On5TdHlsZVJlc29sdmVyKCkKK3sKKyAgICBtX2ZvbnRTZWxlY3Rvci0+Y2xl
YXJEb2N1bWVudCgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZSgpCit7CisgICAgLy8gTG9vayBmb3IgY2FjaGUgZW50cmllcyBjb250YWluaW5n
IGEgc3R5bGUgZGVjbGFyYXRpb24gd2l0aCBhIHNpbmdsZSByZWYgYW5kIHJlbW92ZSB0aGVtLgor
ICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGFuIGVsZW1lbnQgYXR0cmlidXRlIG11dGF0aW9u
IGNhdXNlcyBpdCB0byBzd2FwIG91dCBpdHMgQXR0cmlidXRlOjpkZWNsKCkKKyAgICAvLyBmb3Ig
YW5vdGhlciBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiwgcG90ZW50aWFsbHkgbGVhdmlu
ZyB0aGlzIGNhY2hlIHdpdGggdGhlIGxhc3QgcmVmLgorICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+
IHRvUmVtb3ZlOworICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9t
YXRjaGVkUHJvcGVydGllc0NhY2hlLmJlZ2luKCk7CisgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZTo6aXRlcmF0b3IgZW5kID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpOworICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVz
PiYgbWF0Y2hlZFByb3BlcnRpZXMgPSBpdC0+c2Vjb25kLm1hdGNoZWRQcm9wZXJ0aWVzOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRpZXNbaV0ucHJvcGVydGllcy0+aGFz
T25lUmVmKCkpIHsKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAg
ICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKK30KKworU3R5
bGVSZXNvbHZlcjo6RmVhdHVyZXM6OkZlYXR1cmVzKCkKKyAgICA6IHVzZXNGaXJzdExpbmVSdWxl
cyhmYWxzZSkKKyAgICAsIHVzZXNCZWZvcmVBZnRlclJ1bGVzKGZhbHNlKQorICAgICwgdXNlc0xp
bmtSdWxlcyhmYWxzZSkKK3sKK30KKworU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6On5GZWF0dXJl
cygpCit7Cit9CisgICAgCit2b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjphZGQoY29uc3Qg
U3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIG90aGVyKQoreworICAgIEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+OjppdGVyYXRvciBlbmQgPSBvdGhlci5pZHNJblJ1bGVzLmVuZCgpOworICAgIGZv
ciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuaWRzSW5S
dWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGlkc0luUnVsZXMuYWRkKCpp
dCk7CisgICAgZW5kID0gb3RoZXIuYXR0cnNJblJ1bGVzLmVuZCgpOworICAgIGZvciAoSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuYXR0cnNJblJ1bGVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYXR0cnNJblJ1bGVzLmFkZCgqaXQpOwor
ICAgIHNpYmxpbmdSdWxlcy5hcHBlbmQob3RoZXIuc2libGluZ1J1bGVzKTsKKyAgICB1bmNvbW1v
bkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChvdGhlci51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKKyAg
ICB1c2VzRmlyc3RMaW5lUnVsZXMgPSB1c2VzRmlyc3RMaW5lUnVsZXMgfHwgb3RoZXIudXNlc0Zp
cnN0TGluZVJ1bGVzOworICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gdXNlc0JlZm9yZUFmdGVy
UnVsZXMgfHwgb3RoZXIudXNlc0JlZm9yZUFmdGVyUnVsZXM7CisgICAgdXNlc0xpbmtSdWxlcyA9
IHVzZXNMaW5rUnVsZXMgfHwgb3RoZXIudXNlc0xpbmtSdWxlczsKK30KKwordm9pZCBTdHlsZVJl
c29sdmVyOjpGZWF0dXJlczo6Y2xlYXIoKQoreworICAgIGlkc0luUnVsZXMuY2xlYXIoKTsKKyAg
ICBhdHRyc0luUnVsZXMuY2xlYXIoKTsKKyAgICBzaWJsaW5nUnVsZXMuY2xlYXIoKTsKKyAgICB1
bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7CisgICAgdXNlc0ZpcnN0TGluZVJ1bGVzID0g
ZmFsc2U7CisgICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSBmYWxzZTsKKyAgICB1c2VzTGlua1J1
bGVzID0gZmFsc2U7Cit9CisKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVl
dChjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0g
U3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0
IG9uIHB1cnBvc2UKKyAgICBzaGVldC0+cGFyc2VTdHJpbmcoc3RyKTsKKyAgICByZXR1cm4gc2hl
ZXQ7Cit9CisKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVldChjb25zdCBj
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzaXplKQoreworICAgIHJldHVybiBwYXJzZVVBU2hl
ZXQoU3RyaW5nKGNoYXJhY3RlcnMsIHNpemUpKTsKK30KKworc3RhdGljIHZvaWQgbG9hZEZ1bGxE
ZWZhdWx0U3R5bGUoKQoreworICAgIGlmIChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCkgeworICAg
ICAgICBBU1NFUlQoZGVmYXVsdFN0eWxlKTsKKyAgICAgICAgQVNTRVJUKGRlZmF1bHRQcmludFN0
eWxlID09IGRlZmF1bHRTdHlsZSk7CisgICAgICAgIGRlbGV0ZSBkZWZhdWx0U3R5bGU7CisgICAg
ICAgIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0LT5kZXJlZigpOworICAgICAgICBkZWZhdWx0U3R5
bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisgICAgICAgIGRlZmF1bHRQcmludFN0
eWxlID0gUnVsZVNldDo6Y3JlYXRlKCkubGVha1B0cigpOworICAgICAgICBzaW1wbGVEZWZhdWx0
U3R5bGVTaGVldCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFkZWZhdWx0U3R5
bGUpOworICAgICAgICBkZWZhdWx0U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7
CisgICAgICAgIGRlZmF1bHRQcmludFN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCkubGVha1B0cigp
OworICAgICAgICBkZWZhdWx0UXVpcmtzU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRy
KCk7CisgICAgfQorCisgICAgLy8gU3RyaWN0LW1vZGUgcnVsZXMuCisgICAgU3RyaW5nIGRlZmF1
bHRSdWxlcyA9IFN0cmluZyhodG1sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKGh0bWxVc2Vy
QWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJhRGVm
YXVsdFN0eWxlU2hlZXQoKTsKKyAgICBkZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChk
ZWZhdWx0UnVsZXMpOworICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZGVmYXVs
dFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KGRlZmF1bHRTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CisKKyAgICAvLyBR
dWlya3MtbW9kZSBydWxlcy4KKyAgICBTdHJpbmcgcXVpcmtzUnVsZXMgPSBTdHJpbmcocXVpcmtz
VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQpKSAr
IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7Cisg
ICAgcXVpcmtzU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChxdWlya3NSdWxlcyk7CisgICAgZGVm
YXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChxdWlya3NTdHlsZVNoZWV0LCBzY3Jl
ZW5FdmFsKCkpOworfQorCitzdGF0aWMgdm9pZCBsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKCkKK3sK
KyAgICBBU1NFUlQoIWRlZmF1bHRTdHlsZSk7CisgICAgQVNTRVJUKCFzaW1wbGVEZWZhdWx0U3R5
bGVTaGVldCk7CisKKyAgICBkZWZhdWx0U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRy
KCk7CisgICAgLy8gVGhlcmUgYXJlIG5vIG1lZGlhLXNwZWNpZmljIHJ1bGVzIGluIHRoZSBzaW1w
bGUgZGVmYXVsdCBzdHlsZS4KKyAgICBkZWZhdWx0UHJpbnRTdHlsZSA9IGRlZmF1bHRTdHlsZTsK
KyAgICBkZWZhdWx0UXVpcmtzU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisK
KyAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChzaW1wbGVVc2VyQWdl
bnRTdHlsZVNoZWV0LCBzdHJsZW4oc2ltcGxlVXNlckFnZW50U3R5bGVTaGVldCkpOworICAgIGRl
ZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQsIHNj
cmVlbkV2YWwoKSk7CisKKyAgICAvLyBObyBuZWVkIHRvIGluaXRpYWxpemUgcXVpcmtzIHNoZWV0
IHlldCBhcyB0aGVyZSBhcmUgbm8gcXVpcmsgcnVsZXMgZm9yIGVsZW1lbnRzIGFsbG93ZWQgaW4g
c2ltcGxlIGRlZmF1bHQgc3R5bGUuCit9CisKK3N0YXRpYyB2b2lkIGxvYWRWaWV3U291cmNlU3R5
bGUoKQoreworICAgIEFTU0VSVCghZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSk7CisgICAgZGVmYXVs
dFZpZXdTb3VyY2VTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKyAgICBkZWZh
dWx0Vmlld1NvdXJjZVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYXJzZVVBU2hlZXQoc291cmNl
VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQpKSwg
c2NyZWVuRXZhbCgpKTsKK30KKworc3RhdGljIHZvaWQgZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRz
Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChzaW1wbGVEZWZhdWx0U3R5
bGVTaGVldCAmJiAhZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShlbGVtZW50KSkKKyAg
ICAgICAgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgaWYg
KGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmICFzdmdTdHlsZVNoZWV0KSB7CisgICAgICAgIC8v
IFNWRyBydWxlcy4KKyAgICAgICAgc3ZnU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChzdmdVc2Vy
QWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yoc3ZnVXNlckFnZW50U3R5bGVTaGVldCkpOworICAgICAg
ICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN2Z1N0eWxlU2hlZXQsIHNjcmVlbkV2
YWwoKSk7CisgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdmdT
dHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTUFU
SE1MKQorICAgIGlmIChlbGVtZW50LT5pc01hdGhNTEVsZW1lbnQoKSAmJiAhbWF0aE1MU3R5bGVT
aGVldCkgeworICAgICAgICAvLyBNYXRoTUwgcnVsZXMuCisgICAgICAgIG1hdGhNTFN0eWxlU2hl
ZXQgPSBwYXJzZVVBU2hlZXQobWF0aG1sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1hdGht
bFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKyAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zy
b21TaGVldChtYXRoTUxTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAgICBkZWZhdWx0
UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWF0aE1MU3R5bGVTaGVldCwgcHJpbnRFdmFs
KCkpOworICAgIH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZJREVPKQorICAgIGlmICghbWVkaWFD
b250cm9sc1N0eWxlU2hlZXQgJiYgKGVsZW1lbnQtPmhhc1RhZ05hbWUodmlkZW9UYWcpIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoYXVkaW9UYWcpKSkgeworICAgICAgICBTdHJpbmcgbWVkaWFSdWxl
cyA9IFN0cmluZyhtZWRpYUNvbnRyb2xzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlh
Q29udHJvbHNVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdl
KGVsZW1lbnQtPmRvY3VtZW50KCktPnBhZ2UoKSktPmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hl
ZXQoKTsKKyAgICAgICAgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQobWVk
aWFSdWxlcyk7CisgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWVkaWFD
b250cm9sc1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgICAgIGRlZmF1bHRQcmludFN0
eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCwgcHJpbnRFdmFs
KCkpOworICAgIH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGlm
ICghZnVsbHNjcmVlblN0eWxlU2hlZXQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0SXNG
dWxsU2NyZWVuKCkpIHsKKyAgICAgICAgU3RyaW5nIGZ1bGxzY3JlZW5SdWxlcyA9IFN0cmluZyhm
dWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKGZ1bGxzY3JlZW5Vc2VyQWdlbnRT
dHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJhRnVsbFNjcmVl
blN0eWxlU2hlZXQoKTsKKyAgICAgICAgZnVsbHNjcmVlblN0eWxlU2hlZXQgPSBwYXJzZVVBU2hl
ZXQoZnVsbHNjcmVlblJ1bGVzKTsKKyAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChmdWxsc2NyZWVuU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKKyAgICAgICAgZGVmYXVs
dFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChmdWxsc2NyZWVuU3R5bGVTaGVldCwgc2Ny
ZWVuRXZhbCgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIEFTU0VSVChkZWZhdWx0U3R5bGUtPmZl
YXR1cmVzKCkuaWRzSW5SdWxlcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtYXRoTUxTdHlsZVNo
ZWV0IHx8IGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKS5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpKTsK
K30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSog
cnVsZSwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgYm9vbCBpblJlZ2lvblJ1bGUpCit7CisgICAg
bWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuZ3JvdyhtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgKyAxKTsKKyAgICBNYXRjaGVkUHJvcGVydGllcyYgbmV3UHJvcGVydGll
cyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmxhc3QoKTsKKyAgICBuZXdQcm9wZXJ0
aWVzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworICAgIG5ld1Byb3BlcnRpZXMubGlua01hdGNo
VHlwZSA9IGxpbmtNYXRjaFR5cGU7CisgICAgbmV3UHJvcGVydGllcy5pc0luUmVnaW9uUnVsZSA9
IGluUmVnaW9uUnVsZTsKKyAgICBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUp
OworfQorCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjphZGRFbGVtZW50U3R5bGVQcm9wZXJ0
aWVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0LCBi
b29sIGlzQ2FjaGVhYmxlKQoreworICAgIGlmICghcHJvcGVydHlTZXQpCisgICAgICAgIHJldHVy
bjsKKyAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKTsKKyAgICBpZiAocmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPT0g
LTEpCisgICAgICAgIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlID0gcmVzdWx0LnJhbmdl
cy5sYXN0QXV0aG9yUnVsZTsKKyAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHByb3Bl
cnR5U2V0KTsKKyAgICBpZiAoIWlzQ2FjaGVhYmxlKQorICAgICAgICByZXN1bHQuaXNDYWNoZWFi
bGUgPSBmYWxzZTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
cyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4
LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgQVNTRVJUKHJ1bGVzKTsKKyAg
ICBBU1NFUlQobV9lbGVtZW50KTsKKworICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVs
ZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIg
YW5kCisgICAgLy8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCisgICAgaWYgKG1fZWxlbWVudC0+aGFz
SUQoKSkKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5pZFJ1bGVz
KG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRl
eCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7CisgICAgaWYgKG1fZWxlbWVudC0+aGFzQ2xhc3Mo
KSkgeworICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKKyAgICAgICAgY29uc3QgU3Bh
Y2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcyA9IG1fc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygp
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IGNsYXNzTmFtZXMuc2l6ZSgpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChydWxlcy0+Y2xhc3NSdWxlcyhjbGFzc05hbWVzW2ldLmltcGwoKSksIGZp
cnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKKyAgICB9CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IG1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKKyAg
ICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkgeworICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVt
ZW50KTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5zaGFkb3dQ
c2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgsIG9wdGlvbnMpOworICAgIH0KKyAgICBpZiAobV9lbGVtZW50LT5pc0xpbmsoKSkK
KyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5saW5rUHNldWRvQ2xh
c3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7CisgICAg
aWYgKG1fY2hlY2tlci5tYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhtX2VsZW1lbnQpKQorICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPmZvY3VzUHNldWRvQ2xhc3NSdWxl
cygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7CisgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT50YWdSdWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFt
ZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKKyAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPnVuaXZlcnNhbFJ1bGVzKCksIGZp
cnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKK30KKwordm9pZCBTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBydWxlcywgaW50
JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgaWYgKCFtX3JlZ2lvbkZvclN0eWxpbmcpCisgICAgICAgIHJldHVy
bjsKKworICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxl
U2V0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBydWxlcy0+bV9yZWdpb25TZWxl
Y3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvcjsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9u
U2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3JlZ2lvbkZv
clN0eWxpbmctPm5vZGUoKSkpKSB7CisgICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9
IHJ1bGVzLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7
CisgICAgICAgICAgICBBU1NFUlQocmVnaW9uUnVsZXMpOworICAgICAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXMocmVnaW9uUnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBv
cHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0
QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBpZiAo
bV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzb3J0TWF0
Y2hlZFJ1bGVzKCk7CisKKyAgICBpZiAobV9jaGVja2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgp
KSB7CisgICAgICAgIGlmICghbV9ydWxlTGlzdCkKKyAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBT
dGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcnVsZUxpc3Qt
PnJ1bGVzKCkuYXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmNyZWF0ZUNTU09NV3Jh
cHBlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vdyB0cmFuc2ZlciB0
aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMu
CisgICAgLy8gRklYTUU6IFRoaXMgc3Vja3MsIHRoZSBpbnNwZWN0b3Igc2hvdWxkIGdldCB0aGUg
c3R5bGUgZnJvbSB0aGUgdmlzaXRlZCBzdHlsZSBpdHNlbGYuCisgICAgYm9vbCBzd2FwVmlzaXRl
ZFVudmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZSht
X2VsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1f
c3R5bGUgJiYgbV9tYXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxl
Y3RvcigpKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0QWZmZWN0ZWRCeVVuY29tbW9uQXR0cmli
dXRlU2VsZWN0b3JzKCk7CisgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtX21hdGNo
ZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpOworICAgICAgICBpZiAoc3dhcFZpc2l0ZWRVbnZp
c2l0ZWQgJiYgbGlua01hdGNoVHlwZSAmJiBsaW5rTWF0Y2hUeXBlICE9IFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hBbGwpCisgICAgICAgICAgICBsaW5rTWF0Y2hUeXBlID0gKGxpbmtNYXRjaFR5cGUg
PT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpID8gU2VsZWN0b3JDaGVja2VyOjpNYXRj
aExpbmsgOiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKKyAgICAgICAgYWRkTWF0Y2hl
ZFByb3BlcnRpZXMocmVzdWx0LCBtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5wcm9wZXJ0aWVz
KCksIG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCksIGxpbmtNYXRjaFR5cGUsIG1fbWF0Y2hlZFJ1
bGVzW2ldLT5pc0luUmVnaW9uUnVsZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYgKG1fc2Nv
cGVkQXV0aG9yU3R5bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWF0Y2hP
cHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMpOworCisgICAgLy8gTWF0Y2ggc2NvcGVk
IGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVi
dWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KKyAgICBjb25zdCBDb250YWluZXJOb2Rl
KiBwYXJlbnQgPSBtX2VsZW1lbnQtPnBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICBpZiAoIXNjb3Bl
U3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKKyAgICAgICAgc2V0dXBTY29wZVN0YWNrKHBhcmVu
dCk7CisgICAgZm9yIChzaXplX3QgaSA9IG1fc2NvcGVTdGFjay5zaXplKCk7IGk7IC0taSkgewor
ICAgICAgICBjb25zdCBTY29wZVN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVN0YWNrW2kgLSAx
XTsKKyAgICAgICAgb3B0aW9ucy5zY29wZSA9IGZyYW1lLm1fc2NvcGU7CisgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzKGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhv
clJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgICAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihmcmFtZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5n
ZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25z
KTsKKyAgICB9CisgICAgLy8gQWxzbyBpbmNsdWRlIHRoZSBjdXJyZW50IGVsZW1lbnQuCisgICAg
UnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3JTY29wZShtX2VsZW1lbnQpOworICAgIGlmIChy
dWxlU2V0KSB7CisgICAgICAgIG9wdGlvbnMuc2NvcGUgPSBtX2VsZW1lbnQ7CisgICAgICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxl
LCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JSZWdpb24ocnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhv
clJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgIH0KKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVF
bXB0eVJ1bGVzKTsKKyNlbmRpZgorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9y
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKKyAg
ICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKKworICAgIGlmICghbV9l
bGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1
bGVzLgorICAgIE1hdGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZp
cnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7Cisg
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV9hdXRob3JTdHlsZS5nZXQoKSwgcmVz
dWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUs
IG9wdGlvbnMpOworCisgICAgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhyZXN1bHQsIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKKworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwor
fQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1
bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CisgICAgaWYgKCFtX3VzZXJTdHlsZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICBy
ZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1fdXNlclN0eWxlLmdldCgpLCByZXN1
bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBpbmNs
dWRlRW1wdHlSdWxlcyk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV91c2Vy
U3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgcmVzdWx0LnJhbmdlcy5s
YXN0VXNlclJ1bGUsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKworICAgIHNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhyZXN1bHQpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKK3sKKyAgICBtX21hdGNoZWRS
dWxlcy5jbGVhcigpOworICAgIAorICAgIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSA9IHJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KHJ1bGVzLCByZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1
bGUsIGZhbHNlKTsKKworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwor
fQorCitjbGFzcyBNYXRjaGluZ1VBUnVsZXNTY29wZSB7CitwdWJsaWM6CisgICAgTWF0Y2hpbmdV
QVJ1bGVzU2NvcGUoKTsKKyAgICB+TWF0Y2hpbmdVQVJ1bGVzU2NvcGUoKTsKKworICAgIHN0YXRp
YyBib29sIGlzTWF0Y2hpbmdVQVJ1bGVzKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wg
bV9tYXRjaGluZ1VBUnVsZXM7Cit9OworCitNYXRjaGluZ1VBUnVsZXNTY29wZTo6TWF0Y2hpbmdV
QVJ1bGVzU2NvcGUoKQoreworICAgIEFTU0VSVCghbV9tYXRjaGluZ1VBUnVsZXMpOworICAgIG1f
bWF0Y2hpbmdVQVJ1bGVzID0gdHJ1ZTsKK30KKworTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6On5NYXRj
aGluZ1VBUnVsZXNTY29wZSgpCit7CisgICAgbV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKK30K
KworaW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkK
K3sKKyAgICByZXR1cm4gbV9tYXRjaGluZ1VBUnVsZXM7Cit9CisKK2Jvb2wgTWF0Y2hpbmdVQVJ1
bGVzU2NvcGU6Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7CisKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1
bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNo
T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBpZiAoIXJ1bGVzKQorICAgICAgICByZXR1cm47Cisg
ICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJh
bmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4K
KyAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1kYXRlIGlu
IHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCisgICAgYm9vbCBjYW5V
c2VGYXN0UmVqZWN0ID0gbV9jaGVja2VyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KG1fcGFyZW50
Tm9kZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IFJ1bGVEYXRhJiBy
dWxlRGF0YSA9IHJ1bGVzLT5hdChpKTsKKyAgICAgICAgaWYgKGNhblVzZUZhc3RSZWplY3QgJiYg
bV9jaGVja2VyLmZhc3RSZWplY3RTZWxlY3RvcjxSdWxlRGF0YTo6bWF4aW11bUlkZW50aWZpZXJD
b3VudD4ocnVsZURhdGEuZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcygpKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFN0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRh
LnJ1bGUoKTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1hdGNoUnVsZShkb2N1bWVudCgpLCBydWxl
KTsKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgICAgICBpZiAoY2hlY2tTZWxlY3Rvcihy
dWxlRGF0YSwgb3B0aW9ucy5zY29wZSkpIHsKKyNlbHNlCisgICAgICAgIGlmIChjaGVja1NlbGVj
dG9yKHJ1bGVEYXRhKSkgeworI2VuZGlmCisgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRo
ZSBydWxlIGlzIGFwcGxpY2FibGUgaW4gdGhlIGN1cnJlbnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEg
Zm9yIHRoaXM6CisgICAgICAgICAgICAvLyBhKSBpdCdzIGEgVUEgcnVsZQorICAgICAgICAgICAg
Ly8gYikgdGhlIHRyZWUgc2NvcGUgYWxsb3dzIGF1dGhvciBydWxlcworICAgICAgICAgICAgLy8g
YykgdGhlIHJ1bGVzIGNvbWVzIGZyb20gYSBzY29wZWQgc3R5bGUgc2hlZXQgd2l0aGluIHRoZSBz
YW1lIHRyZWUgc2NvcGUKKyAgICAgICAgICAgIC8vIGQpIHRoZSBydWxlIGNvbnRhaW5zIHNoYWRv
dy1JRCBwc2V1ZG8gZWxlbWVudHMKKyAgICAgICAgICAgIFRyZWVTY29wZSogdHJlZVNjb3BlID0g
bV9lbGVtZW50LT50cmVlU2NvcGUoKTsKKyAgICAgICAgICAgIGlmICghTWF0Y2hpbmdVQVJ1bGVz
U2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKKyAgICAgICAgICAgICAgICAmJiAhdHJlZVNjb3Bl
LT5hcHBseUF1dGhvclNoZWV0cygpCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAgICAg
ICAgICAgICAmJiAoIW9wdGlvbnMuc2NvcGUgfHwgb3B0aW9ucy5zY29wZS0+dHJlZVNjb3BlKCkg
IT0gdHJlZVNjb3BlKQorI2VuZGlmCisgICAgICAgICAgICAgICAgJiYgIW1fY2hlY2tlci5oYXNV
bmtub3duUHNldWRvRWxlbWVudHMoKSkgeworCisgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBo
YXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1
ZyBtb2RlLgorICAgICAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcyA9IHJ1bGUt
PnByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgIGlmICghcHJvcGVydGllcyB8fCAocHJvcGVydGll
cy0+aXNFbXB0eSgpICYmICFvcHRpb25zLmluY2x1ZGVFbXB0eVJ1bGVzKSkgeworICAgICAgICAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFs
c2UpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gRklYTUU6IEV4cG9zaW5nIHRoZSBub24tc3RhbmRhcmQgZ2V0TWF0Y2hlZENTU1J1bGVz
IEFQSSB0byB3ZWIgaXMgdGhlIG9ubHkgcmVhc29uIHRoaXMgaXMgbmVlZGVkLgorICAgICAgICAg
ICAgaWYgKG1fc2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4oKSkgeworICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
TWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVz
LCBzZXQgYSBwc2V1ZG8gYml0IGlmCisgICAgICAgICAgICAvLyB3ZSByZWFsbHkganVzdCBtYXRj
aGVkIGEgcHNldWRvLWVsZW1lbnQuCisgICAgICAgICAgICBpZiAobV9keW5hbWljUHNldWRvICE9
IE5PUFNFVURPICYmIG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpID09IE5PUFNFVURPKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fY2hlY2tlci5pc0NvbGxlY3RpbmdSdWxlc09ubHkoKSkgeworICAg
ICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShj
b29raWUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRF
Uk5BTF9QU0VVRE9JRCkKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzUHNldWRv
U3R5bGUobV9keW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5kaWNlcyBpbiB0aGUgbWF0Y2hl
ZCBydWxlcyBhcnJheS4KKyAgICAgICAgICAgICAgICArK2xhc3RSdWxlSW5kZXg7CisgICAgICAg
ICAgICAgICAgaWYgKGZpcnN0UnVsZUluZGV4ID09IC0xKQorICAgICAgICAgICAgICAgICAgICBm
aXJzdFJ1bGVJbmRleCA9IGxhc3RSdWxlSW5kZXg7CisKKyAgICAgICAgICAgICAgICAvLyBBZGQg
dGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCisgICAgICAgICAgICAgICAg
YWRkTWF0Y2hlZFJ1bGUoJnJ1bGVEYXRhKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIHRydWUpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOworICAgIH0KK30KKwor
c3RhdGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0
IFJ1bGVEYXRhKiByMikKK3sKKyAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTEgPSByMS0+c3BlY2lm
aWNpdHkoKTsKKyAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsK
KyAgICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9u
KCkgPCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsKK30KKwor
dm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKK3sKKyAgICBzdGQ6OnNvcnQo
bV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxl
cyk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0KQoreworICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQpOworCisgICAgLy8gTm93IHdlIGNo
ZWNrIHVzZXIgc2hlZXQgcnVsZXMuCisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
KQorICAgICAgICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQsIGZhbHNlKTsKKyAgICAgICAgCisgICAg
Ly8gTm93IGNoZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2VudGF0
aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgorICAgIGlmIChtX3N0eWxlZEVsZW1l
bnQpIHsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVk
RWxlbWVudC0+YXR0cmlidXRlU3R5bGUoKSk7CisKKyAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFk
ZGl0aW9uYWwgbWFwcGVkIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJs
ZSBjZWxscyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBs
aWVkCisgICAgICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQg
c3R5bGUgZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0ZXMuCisgICAg
ICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmFk
ZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpKTsKKworICAgICAgICBpZiAobV9zdHlsZWRFbGVtZW50
LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGJvb2wgaXNBdXRvOworICAgICAgICAg
ICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0eWxlZEVs
ZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAg
ICAgICAgICAgaWYgKGlzQXV0bykKKyAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGll
cyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmlnaHREZWNsYXJhdGlvbigp
IDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgorICAgIGlmIChtX21h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhyZXN1bHQs
IGZhbHNlKTsKKworICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4K
KyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50ICYm
IG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkgeworICAgICAgICAvLyBJbmxpbmUgc3R5
bGUgaXMgaW1tdXRhYmxlIGFzIGxvbmcgYXMgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4KKyAg
ICAgICAgLy8gRklYTUU6IE1lZGlhIGNvbnRyb2wgc2hhZG93IHRyZWVzIHNlZW0gdG8gaGF2ZSBw
cm9ibGVtcyB3aXRoIGNhY2hpbmcuCisgICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJs
ZSA9ICFtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFtX3N0
eWxlZEVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk7CisgICAgICAgIC8vIEZJWE1FOiBDb25zdGlm
eS4KKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIGNvbnN0X2Nhc3Q8
U3R5bGVQcm9wZXJ0eVNldCo+KG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSksIGlzSW5s
aW5lU3R5bGVDYWNoZWFibGUpOworICAgIH0KKworI2lmIEVOQUJMRShTVkcpCisgICAgLy8gTm93
IGNoZWNrIFNNSUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0eWxlLgorICAgIGlmIChtX21hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5p
c1NWR0VsZW1lbnQoKSkKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQs
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxT
dHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOworI2VuZGlmCit9CisK
K2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCit7Cisg
ICAgaWYgKG1fZWxlbWVudCAhPSBlKSB7CisgICAgICAgIG1fZWxlbWVudCA9IGU7CisgICAgICAg
IG1fc3R5bGVkRWxlbWVudCA9IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVu
dCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCkgOiAwOworICAgICAg
ICBtX2VsZW1lbnRMaW5rU3RhdGUgPSBtX2NoZWNrZXIuZGV0ZXJtaW5lTGlua1N0YXRlKG1fZWxl
bWVudCk7CisgICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCkpIHsKKyAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9j
dW1lbnRFbGVtZW50KGZhbHNlKTsKKyAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRp
bmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOworICAgICAgICB9CisgICAgfQorfQor
CitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQq
IGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQgcHNldWRvSUQpCit7CisgICAg
bV9jaGVja2VyLnNldFBzZXVkb1N0eWxlKHBzZXVkb0lEKTsKKworICAgIG1fcGFyZW50Tm9kZSA9
IGUgPyBlLT5wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKSA6IDA7CisKKyAgICBpZiAo
cGFyZW50U3R5bGUpCisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsKKyAgICBl
bHNlCisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUt
PnJlbmRlclN0eWxlKCkgOiAwOworCisgICAgTm9kZSogZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7CisgICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxl
ID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnJlbmRlclN0eWxlKCk7CisgICAgbV9yb290RWxlbWVu
dFN0eWxlID0gZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5k
ZXJTdHlsZSgpIDogZG9jU3R5bGU7CisKKyAgICBtX3N0eWxlID0gMDsKKworICAgIG1fcGVuZGlu
Z0ltYWdlUHJvcGVydGllcy5jbGVhcigpOworCisgICAgbV9ydWxlTGlzdCA9IDA7CisKKyAgICBt
X2ZvbnREaXJ0eSA9IGZhbHNlOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2Vh
cmNoVGhyZXNob2xkID0gMTA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoTGV2
ZWxUaHJlc2hvbGQgPSAxMDsKKworTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlz
dChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdAorewor
ICAgIGlmICh2aXNpdGVkTm9kZUNvdW50ID49IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAqIGNTdHls
ZVNlYXJjaExldmVsVGhyZXNob2xkKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXBhcmVu
dCB8fCAhcGFyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjaWYg
RU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVD
aGlsZCgpKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIFN0eWxlZEVsZW1lbnQqIHAg
PSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKKyAgICBpZiAocC0+aW5saW5l
U3R5bGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAocC0+
aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHApLT5hbmltYXRlZFNN
SUxTdHlsZVByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICBpZiAo
cC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMocC0+aWRGb3JTdHls
ZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IHAtPnJlbmRlclN0eWxlKCk7CisgICAgdW5zaWduZWQgc3ViY291
bnQgPSAwOworICAgIE5vZGUqIHRoaXNDb3VzaW4gPSBwOworICAgIE5vZGUqIGN1cnJlbnROb2Rl
ID0gcC0+cHJldmlvdXNTaWJsaW5nKCk7CisKKyAgICAvLyBSZXNlcnZlIHRoZSB0cmllcyBmb3Ig
dGhpcyBsZXZlbC4gVGhpcyBlZmZlY3RpdmVseSBtYWtlcyBzdXJlIHRoYXQgdGhlIGFsZ29yaXRo
bQorICAgIC8vIHdpbGwgbmV2ZXIgZ28gZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJl
c2hvbGQgbGV2ZWxzIGludG8gcmVjdXJzaW9uLgorICAgIHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0
eWxlU2VhcmNoVGhyZXNob2xkOworICAgIHdoaWxlICh0aGlzQ291c2luKSB7CisgICAgICAgIHdo
aWxlIChjdXJyZW50Tm9kZSkgeworICAgICAgICAgICAgKytzdWJjb3VudDsKKyAgICAgICAgICAg
IGlmIChjdXJyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAmJiBjdXJyZW50
Tm9kZS0+bGFzdENoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBBZGp1c3QgZm9yIHVudXNl
ZCByZXNlcnZlZCB0cmllcy4KKyAgICAgICAgICAgICAgICB2aXNpdGVkTm9kZUNvdW50IC09IGNT
dHlsZVNlYXJjaFRocmVzaG9sZCAtIHN1YmNvdW50OworICAgICAgICAgICAgICAgIHJldHVybiBj
dXJyZW50Tm9kZS0+bGFzdENoaWxkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
c3ViY291bnQgPj0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJs
aW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudE5vZGUgPSBsb2NhdGVDb3VzaW5MaXN0
KHRoaXNDb3VzaW4tPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5vZGVDb3VudCk7CisgICAgICAg
IHRoaXNDb3VzaW4gPSBjdXJyZW50Tm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBTdHlsZVJlc29sdmVyOjptYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQorewor
ICAgIGlmICghcnVsZVNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fbWF0Y2hlZFJ1
bGVzLmNsZWFyKCk7CisKKyAgICBpbnQgZmlyc3RSdWxlSW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRl
eCA9IC0xOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQsIGZpcnN0UnVsZUluZGV4
LCBsYXN0UnVsZUluZGV4LCBmYWxzZSk7CisKKyAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxl
V2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBIVE1MSW5w
dXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsK
KyAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IG1fZWxlbWVudC0+dG9J
bnB1dEVsZW1lbnQoKTsKKworICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1
dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0aGlzSW5wdXRFbGVt
ZW50LT5pc0F1dG9maWxsZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+c2hvdWxk
QXBwZWFyQ2hlY2tlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2Vk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNJ
bmRldGVybWluYXRlKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPnJlcXVpcmVk
KCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPnJlcXVpcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IG1fZWxlbWVu
dC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBtX2VsZW1lbnQtPmlzRGVm
YXVsdEJ1dHRvbkZvckZvcm0oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgeworICAg
ICAgICBib29sIHdpbGxWYWxpZGF0ZSA9IGVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpOworCisgICAg
ICAgIGlmICh3aWxsVmFsaWRhdGUgIT0gbV9lbGVtZW50LT53aWxsVmFsaWRhdGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVt
ZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1ZhbGlkRm9y
bUNvbnRyb2xFbGVtZW50KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlzSW5SYW5nZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChlbGVtZW50LT5pc091dE9mUmFu
Z2UoKSAhPSBtX2VsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIG1h
a2VzIHNvbWUgYXNzdW1wdGlvbnMgdGhhdCBvbmx5IG1ha2Ugc2Vuc2UgZm9yIGF0dHJpYnV0ZSBz
dHlsZXMgKHdlIG9ubHkgY29tcGFyZSBDU1NQcm9wZXJ0eTo6aWQoKSBhbmQgQ1NTUHJvcGVydHk6
OnZhbHVlKCkuKQorc3RhdGljIGlubGluZSBib29sIGF0dHJpYnV0ZVN0eWxlc0VxdWFsKFN0eWxl
UHJvcGVydHlTZXQqIGEsIFN0eWxlUHJvcGVydHlTZXQqIGIpCit7CisgICAgaWYgKGEgPT0gYikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGEtPnByb3BlcnR5Q291bnQoKSAhPSBiLT5w
cm9wZXJ0eUNvdW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB1bnNpZ25lZCBwcm9w
ZXJ0eUNvdW50ID0gYS0+cHJvcGVydHlDb3VudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIGFQ
cm9wZXJ0eSA9IGEtPnByb3BlcnR5QXQoaSk7CisgICAgICAgIHVuc2lnbmVkIGo7CisgICAgICAg
IGZvciAoaiA9IDA7IGogPCBwcm9wZXJ0eUNvdW50OyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0
IENTU1Byb3BlcnR5JiBiUHJvcGVydHkgPSBiLT5wcm9wZXJ0eUF0KGopOworICAgICAgICAgICAg
aWYgKGFQcm9wZXJ0eS5pZCgpICE9IGJQcm9wZXJ0eS5pZCgpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgLy8gV2UgY291bGQgZ2V0IGEgZmV3IG1vcmUgaGl0cyBieSBj
b21wYXJpbmcgY3NzVGV4dCgpIGhlcmUsIGJ1dCB0aGF0IGdldHMgZXhwZW5zaXZlIHF1aWNrbHku
CisgICAgICAgICAgICBpZiAoYVByb3BlcnR5LnZhbHVlKCkgIT0gYlByb3BlcnR5LnZhbHVlKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGogPT0gcHJvcGVydHlDb3VudCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIGVsZW1l
bnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIGVsZW1l
bnQtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5oYXNEaXJlY3Rp
b25BdXRvKCk7Cit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVt
ZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKworICAgIGlmICghc3R5bGUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3R5bGUtPnVuaXF1ZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gbV9lbGVtZW50LT50YWdRTmFt
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkg
IT0gbV9lbGVtZW50LT5oYXNDbGFzcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGVsZW1lbnQtPmlubGluZVN0eWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFC
TEUoU1ZHKQorICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4oZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICBpZiAoISFlbGVtZW50LT5hdHRyaWJ1dGVT
dHlsZSgpICE9ICEhbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgU3R5bGVQcm9wZXJ0eVNldCogYWRkaXRpb25hbEF0dHJpYnV0ZVN0
eWxlQSA9IGVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpOworICAgIFN0eWxlUHJv
cGVydHlTZXQqIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZUIgPSBtX3N0eWxlZEVsZW1lbnQtPmFk
ZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpOworICAgIGlmICghYWRkaXRpb25hbEF0dHJpYnV0ZVN0
eWxlQSAhPSAhYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAhPSBtX2VsZW1lbnQtPmlzTGluaygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0eWxlLT5hZmZlY3RlZEJ5VW5jb21tb25BdHRy
aWJ1dGVTZWxlY3RvcnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50
LT5ob3ZlcmVkKCkgIT0gbV9lbGVtZW50LT5ob3ZlcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgIT0gbV9lbGVtZW50LT5hY3RpdmUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gbV9lbGVt
ZW50LT5mb2N1c2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+
c2hhZG93UHNldWRvSWQoKSAhPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5j
c3NUYXJnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2VsZW1lbnQgPT0g
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChlbGVtZW50LT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpICE9IG1fZWxlbWVudC0+
Z2V0QXR0cmlidXRlKHR5cGVBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChl
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gbV9lbGVtZW50
LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gbV9l
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikgIT0gbV9l
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIp
ICE9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVz
Lmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBs
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQor
ICAgIGlmIChlbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKKworI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgIGlmICghbV9lbGVtZW50
LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiB0aGlzUHJvZ3Jlc3NFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICBIVE1MUHJvZ3Jl
c3NFbGVtZW50KiBvdGhlclByb2dyZXNzRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVz
c0VsZW1lbnQqPihtX2VsZW1lbnQpOworICAgICAgICBpZiAodGhpc1Byb2dyZXNzRWxlbWVudC0+
aXNEZXRlcm1pbmF0ZSgpICE9IG90aGVyUHJvZ3Jlc3NFbGVtZW50LT5pc0RldGVybWluYXRlKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisKKyAg
ICBpZiAoaXNDb250cm9sICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHls
ZVdpdGhDb250cm9sKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
c3R5bGUtPnRyYW5zaXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIFR1
cm4gb2ZmIHN0eWxlIHNoYXJpbmcgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGdhaW4gbGF5ZXJzIGZv
ciByZWFzb25zIG91dHNpZGUgb2YgdGhlIHN0eWxlIHN5c3RlbS4KKyAgICAvLyBTZWUgY29tbWVu
dHMgaW4gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSgpLgorICAgIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKGlmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcp
IHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKQorI2lmIEVOQUJMRShQTFVHSU5fUFJP
WFlfRk9SX1ZJREVPKQorICAgICAgICAvLyBXaXRoIHByb3h5aW5nLCB0aGUgbWVkaWEgZWxlbWVu
dHMgYXJlIGJhY2tlZCBieSBhIFJlbmRlckVtYmVkZGVkT2JqZWN0LgorICAgICAgICB8fCBlbGVt
ZW50LT5oYXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGF1ZGlvVGFn
KQorI2VuZGlmCisgICAgICAgICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyAg
ICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkgfHwgZWxlbWVudEhhc0RpcmVj
dGlvbkF1dG8obV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVs
ZW1lbnQtPmhhc0NsYXNzKCkgJiYgbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAh
PSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKGVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkgJiYgIWF0dHJpYnV0ZVN0eWxl
c0VxdWFsKGVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCksIG1fc3R5bGVkRWxlbWVudC0+YXR0cmli
dXRlU3R5bGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhZGRpdGlvbmFs
QXR0cmlidXRlU3R5bGVBICYmICFhdHRyaWJ1dGVTdHlsZXNFcXVhbChhZGRpdGlvbmFsQXR0cmli
dXRlU3R5bGVBLCBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVCKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICYmIG1fZWxlbWVudExpbmtTdGF0ZSAh
PSBzdHlsZS0+aW5zaWRlTGluaygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworaW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRT
aWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QK
K3sKKyAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7Cisg
ICAgICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0aWNfY2FzdDxTdHls
ZWRFbGVtZW50Kj4obm9kZSkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChjb3Vu
dCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgcGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcoY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKQoreworICAgIHJldHVybiBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5B
ZmZlY3RlZEJ5UG9zaXRpb25hbFJ1bGVzKCkKKyAgICAgICAgfHwgcGFyZW50U3R5bGUtPmNoaWxk
cmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpCisgICAgICAgIHx8IHBhcmVudFN0eWxlLT5j
aGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpIAorICAgICAgICB8fCBwYXJlbnRTdHls
ZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOworfQorCitSZW5kZXJT
dHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQoreworICAgIGlmICghbV9z
dHlsZWRFbGVtZW50IHx8ICFtX3BhcmVudFN0eWxlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAv
LyBJZiB0aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4K
KyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKQorICAgICAgICByZXR1cm4g
MDsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVu
dCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRl
ZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICAv
LyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVl
dHMuCisgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0lu
UnVsZXMuY29udGFpbnMobV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmlt
cGwoKSkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hh
cmluZyhtX3BhcmVudFN0eWxlKSkKKyAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKKyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGls
ZCgpKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorCisgICAgLy8gQ2hlY2sgcHJldmlvdXMg
c2libGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAg
IHVuc2lnbmVkIHZpc2l0ZWROb2RlQ291bnQgPSAwOworICAgIFN0eWxlZEVsZW1lbnQqIHNoYXJl
RWxlbWVudCA9IDA7CisgICAgTm9kZSogY291c2luTGlzdCA9IG1fc3R5bGVkRWxlbWVudC0+cHJl
dmlvdXNTaWJsaW5nKCk7CisgICAgd2hpbGUgKGNvdXNpbkxpc3QpIHsKKyAgICAgICAgc2hhcmVF
bGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoY291c2luTGlzdCwgY291bnQpOwor
ICAgICAgICBpZiAoc2hhcmVFbGVtZW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNv
dXNpbkxpc3QgPSBsb2NhdGVDb3VzaW5MaXN0KGNvdXNpbkxpc3QtPnBhcmVudEVsZW1lbnQoKSwg
dmlzaXRlZE5vZGVDb3VudCk7CisgICAgfQorCisgICAgLy8gSWYgd2UgaGF2ZSBleGhhdXN0ZWQg
YWxsIG91ciBidWRnZXQgb3Igb3VyIGNvdXNpbnMuCisgICAgaWYgKCFzaGFyZUVsZW1lbnQpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgc2libGluZyBydWxlcyBh
cHBseS4gVGhpcyBpcyBjaGVja2VkIGF0IHRoZSBlbmQgYXMgaXQgc2hvdWxkIHJhcmVseSBmYWls
LgorICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3NpYmxpbmdSdWxlU2V0LmdldCgpKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5
LgorICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQo
KSkpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJlcXVp
cmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBz
aWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCisgICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNTaGFy
aW5nKG1fcGFyZW50U3R5bGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc2hhcmVF
bGVtZW50LT5yZW5kZXJTdHlsZSgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFS
dWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQoreworICAgIE1hdGNoaW5nVUFSdWxlc1Njb3BlIHNj
b3BlOworCisgICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBz
aGVldC4KKyAgICBpZiAoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpCisgICAgICAgIHJlc3VsdC5p
c0NhY2hlYWJsZSA9IGZhbHNlOworICAgIFJ1bGVTZXQqIHVzZXJBZ2VudFN0eWxlU2hlZXQgPSBt
X21lZGl1bS0+bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQiKQorICAgICAgICA/IGRlZmF1
bHRQcmludFN0eWxlIDogZGVmYXVsdFN0eWxlOworICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIHVz
ZXJBZ2VudFN0eWxlU2hlZXQpOworCisgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1
bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgorICAgIGlmICghbV9jaGVja2Vy
LnN0cmljdFBhcnNpbmcoKSkKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgZGVmYXVsdFF1
aXJrc1N0eWxlKTsKKworICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBzb3VyY2Ugc3R5bGVz
IChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSksIHRoZW4gd2UgbWF0
Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCisgICAgaWYgKG1fY2hl
Y2tlci5kb2N1bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSkgeworICAgICAgICBpZiAoIWRlZmF1bHRW
aWV3U291cmNlU3R5bGUpCisgICAgICAgICAgICBsb2FkVmlld1NvdXJjZVN0eWxlKCk7CisgICAg
ICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIGRlZmF1bHRWaWV3U291cmNlU3R5bGUpOworICAgIH0K
K30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1
bWVudChEb2N1bWVudCogZG9jdW1lbnQsIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQor
eworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworCisgICAgUmVmUHRyPFJl
bmRlclN0eWxlPiBkb2N1bWVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIGRv
Y3VtZW50U3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOworICAgIGRvY3VtZW50U3R5bGUtPnNldFJU
TE9yZGVyaW5nKGRvY3VtZW50LT52aXN1YWxseU9yZGVyZWQoKSA/IFZpc3VhbE9yZGVyIDogTG9n
aWNhbE9yZGVyKTsKKyAgICBkb2N1bWVudFN0eWxlLT5zZXRab29tKGZyYW1lICYmICFkb2N1bWVu
dC0+cHJpbnRpbmcoKSA/IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpIDogMSk7CisgICAgZG9jdW1l
bnRTdHlsZS0+c2V0UGFnZVNjYWxlVHJhbnNmb3JtKGZyYW1lID8gZnJhbWUtPmZyYW1lU2NhbGVG
YWN0b3IoKSA6IDEpOworICAgIGRvY3VtZW50U3R5bGUtPnNldFVzZXJNb2RpZnkoZG9jdW1lbnQt
PmluRGVzaWduTW9kZSgpID8gUkVBRF9XUklURSA6IFJFQURfT05MWSk7CisgICAgZG9jdW1lbnRT
dHlsZS0+c2V0TG9jYWxlKGRvY3VtZW50LT5jb250ZW50TGFuZ3VhZ2UoKSk7CisKKyAgICBFbGVt
ZW50KiBkb2NFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIFJlbmRl
ck9iamVjdCogZG9jRWxlbWVudFJlbmRlcmVyID0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJl
bmRlcmVyKCkgOiAwOworICAgIGlmIChkb2NFbGVtZW50UmVuZGVyZXIpIHsKKyAgICAgICAgLy8g
VXNlIHRoZSBkaXJlY3Rpb24gYW5kIHdyaXRpbmctbW9kZSBvZiB0aGUgYm9keSB0byBzZXQgdGhl
CisgICAgICAgIC8vIHZpZXdwb3J0J3MgZGlyZWN0aW9uIGFuZCB3cml0aW5nLW1vZGUgdW5sZXNz
IHRoZSBwcm9wZXJ0eSBpcyBzZXQgb24gdGhlIGRvY3VtZW50IGVsZW1lbnQuCisgICAgICAgIC8v
IElmIHRoZXJlIGlzIG5vIGJvZHksIHRoZW4gdXNlIHRoZSBkb2N1bWVudCBlbGVtZW50LgorICAg
ICAgICBSZW5kZXJPYmplY3QqIGJvZHlSZW5kZXJlciA9IGRvY3VtZW50LT5ib2R5KCkgPyBkb2N1
bWVudC0+Ym9keSgpLT5yZW5kZXJlcigpIDogMDsKKyAgICAgICAgaWYgKGJvZHlSZW5kZXJlciAm
JiAhZG9jdW1lbnQtPndyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAg
ICAgIGRvY3VtZW50U3R5bGUtPnNldFdyaXRpbmdNb2RlKGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+
d3JpdGluZ01vZGUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRvY3VtZW50U3R5bGUt
PnNldFdyaXRpbmdNb2RlKGRvY0VsZW1lbnRSZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUo
KSk7CisgICAgICAgIGlmIChib2R5UmVuZGVyZXIgJiYgIWRvY3VtZW50LT5kaXJlY3Rpb25TZXRP
bkRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlyZWN0
aW9uKGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXREaXJlY3Rpb24oZG9jRWxlbWVudFJlbmRlcmVy
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7CisgICAgfQorCisgICAgaWYgKGZyYW1lKSB7CisgICAg
ICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICAgICAgY29uc3Qg
UGFnZTo6UGFnaW5hdGlvbiYgcGFnaW5hdGlvbiA9IHBhZ2UtPnBhZ2luYXRpb24oKTsKKyAgICAg
ICAgICAgIGlmIChwYWdpbmF0aW9uLm1vZGUgIT0gUGFnZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0
ZWQpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRDb2x1bW5BeGlzKHBhZ2lu
YXRpb24ubW9kZSA9PSBQYWdlOjpQYWdpbmF0aW9uOjpIb3Jpem9udGFsbHlQYWdpbmF0ZWQgPyBI
b3Jpem9udGFsQ29sdW1uQXhpcyA6IFZlcnRpY2FsQ29sdW1uQXhpcyk7CisgICAgICAgICAgICAg
ICAgZG9jdW1lbnRTdHlsZS0+c2V0Q29sdW1uR2FwKHBhZ2luYXRpb24uZ2FwKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb247CisgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50LT5w
cmludGluZygpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0
Q29kZUZvckZvbnRTZWxlY3Rpb24oZG9jdW1lbnRTdHlsZS0+bG9jYWxlKCkpKTsKKyAgICBpZiAo
U2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKKyAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2Rl
KCkpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5kYXJkRm9udCA9IHNldHRpbmdz
LT5zdGFuZGFyZEZvbnRGYW1pbHkoZm9udERlc2NyaXB0aW9uLnNjcmlwdCgpKTsKKyAgICAgICAg
aWYgKCFzdGFuZGFyZEZvbnQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5KTsKKyAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShzdGFuZGFy
ZEZvbnQpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5k
RmFtaWx5KDApOworICAgICAgICB9CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3Jk
U2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOworICAgICAgICBpbnQg
c2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCwgQ1NTVmFs
dWVNZWRpdW0sIGZhbHNlKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoc2l6ZSk7CisgICAgICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzID0gZG9jdW1lbnQtPmlzU1ZH
RG9jdW1lbnQoKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHls
ZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgZG9j
dW1lbnRTdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUs
IHVzZVNWR1pvb21SdWxlcykpOworICAgIH0KKworICAgIGRvY3VtZW50U3R5bGUtPnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgIGRvY3VtZW50U3R5bGUtPmZvbnQoKS51
cGRhdGUoZm9udFNlbGVjdG9yKTsKKworICAgIHJldHVybiBkb2N1bWVudFN0eWxlLnJlbGVhc2Uo
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShFbGVtZW50KiBl
bGVtZW50KQoreworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7CisgICAg
cmV0dXJuIHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+aXNTaGFkb3dSb290KCk7Cit9CisKK1Bh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVt
ZW50KiBlbGVtZW50LCBSZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVudCwKKyAgICBTdHlsZVNoYXJp
bmdCZWhhdmlvciBzaGFyaW5nQmVoYXZpb3IsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5n
QmVoYXZpb3IsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZykKK3sKKyAgICAvLyBPbmNl
IGFuIGVsZW1lbnQgaGFzIGEgcmVuZGVyZXIsIHdlIGRvbid0IHRyeSB0byBkZXN0cm95IGl0LCBz
aW5jZSBvdGhlcndpc2UgdGhlIHJlbmRlcmVyCisgICAgLy8gd2lsbCB2YW5pc2ggaWYgYSBzdHls
ZSByZWNhbGMgaGFwcGVucyBkdXJpbmcgbG9hZGluZy4KKyAgICBpZiAoc2hhcmluZ0JlaGF2aW9y
ID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFlbGVtZW50LT5kb2N1bWVudCgpLT5oYXZlU3R5bGVz
aGVldHNMb2FkZWQoKSAmJiAhZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAoIXNf
c3R5bGVOb3RZZXRBdmFpbGFibGUpIHsKKyAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFi
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCkubGVha1JlZigpOworICAgICAgICAgICAgc19zdHls
ZU5vdFlldEF2YWlsYWJsZS0+c2V0RGlzcGxheShOT05FKTsKKyAgICAgICAgICAgIHNfc3R5bGVO
b3RZZXRBdmFpbGFibGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOworICAgICAgICB9
CisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVy
U3R5bGUoKTsKKyAgICAgICAgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CisgICAgfQor
CisgICAgaW5pdEVsZW1lbnQoZWxlbWVudCk7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlbGVt
ZW50LCBkZWZhdWx0UGFyZW50KTsKKyAgICBtX3JlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JT
dHlsaW5nOworICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcpIHsK
KyAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsK
KyAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQorICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0eWxl
OworICAgIH0KKworICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisKKyAgICBp
ZiAobV9wYXJlbnRTdHlsZSkKKyAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9wYXJlbnRT
dHlsZSk7CisgICAgZWxzZSB7CisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBzdHlsZSgpOworICAg
ICAgICAvLyBNYWtlIHN1cmUgb3VyIGZvbnRzIGFyZSBpbml0aWFsaXplZCBpZiB3ZSBkb24ndCBp
bmhlcml0IHRoZW0gZnJvbSBvdXIgcGFyZW50IHN0eWxlLgorICAgICAgICBtX3N0eWxlLT5mb250
KCkudXBkYXRlKDApOworICAgIH0KKworICAgIC8vIEV2ZW4gaWYgc3Vycm91bmRpbmcgY29udGVu
dCBpcyB1c2VyLWVkaXRhYmxlLCBzaGFkb3cgRE9NIHNob3VsZCBhY3QgYXMgYSBzaW5nbGUgdW5p
dCwgYW5kIG5vdCBuZWNlc3NhcmlseSBiZSBlZGl0YWJsZQorICAgIGlmIChpc0F0U2hhZG93Qm91
bmRhcnkoZWxlbWVudCkpCisgICAgICAgIG1fc3R5bGUtPnNldFVzZXJNb2RpZnkoUmVuZGVyU3R5
bGU6OmluaXRpYWxVc2VyTW9kaWZ5KCkpOworCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKSB7
CisgICAgICAgIG1fc3R5bGUtPnNldElzTGluayh0cnVlKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0
SW5zaWRlTGluayhtX2VsZW1lbnRMaW5rU3RhdGUpOworICAgIH0KKworICAgIGVuc3VyZURlZmF1
bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxlbWVudCk7CisKKyAgICBNYXRjaFJlc3VsdCBtYXRj
aFJlc3VsdDsKKyAgICBpZiAobWF0Y2hpbmdCZWhhdmlvciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRS
dWxlcykKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKG1hdGNoUmVzdWx0KTsKKyAgICBlbHNlCisgICAg
ICAgIG1hdGNoQWxsUnVsZXMobWF0Y2hSZXN1bHQpOworCisgICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhtYXRjaFJlc3VsdCk7CisKKyAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0J3Mg
ZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KKyAgICBh
ZGp1c3RSZW5kZXJTdHlsZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlLCBlbGVtZW50KTsKKworICAg
IGluaXRFbGVtZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCisKKyAg
ICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KKyAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7
Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5
ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVLZXlmcmFt
ZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCit7CisgICAgTWF0Y2hS
ZXN1bHQgcmVzdWx0OworICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQorICAgICAgICBh
ZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOworCisg
ICAgQVNTRVJUKCFtX3N0eWxlKTsKKworICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKKyAgICBtX3N0
eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7CisKKyAgICBtX2xpbmVIZWln
aHRWYWx1ZSA9IDA7CisKKyAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoICFpbXBv
cnRhbnQuIFNpbmNlIHRoZXJlIGlzIG9ubHkgZXZlciBvbmUKKyAgICAvLyBkZWNsLCB0aGVyZSdz
IG5vdGhpbmcgdG8gb3ZlcnJpZGUuIFNvIGp1c3QgYWRkIHRoZSBmaXJzdCBwcm9wZXJ0aWVzLgor
ICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOworICAgIGlmIChrZXlmcmFtZS0+cHJvcGVy
dGllcygpKQorICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KHJlc3VsdCwgZmFs
c2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5
KTsKKworICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRl
IGl0IG5vdy4KKyAgICB1cGRhdGVGb250KCk7CisKKyAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQg
d2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUKKyAgICBpZiAobV9s
aW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVp
Z2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisKKyAgICAvLyBOb3cgZG8gcmVzdCBvZiB0aGUgcHJv
cGVydGllcy4KKyAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKKyAgICAgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxmYWxzZT4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworCisgICAgLy8gSWYgb3VyIGZv
bnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsCisg
ICAgLy8gZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBhIHNlY29uZCB0aW1lLgorICAgIHVwZGF0ZUZv
bnQoKTsKKworICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBz
dHlsZS4KKyAgICBsb2FkUGVuZGluZ0ltYWdlcygpOworICAgIAorI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKKyAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5jZWQgYnkgdGhp
cyBzdHlsZS4KKyAgICBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKKyNlbmRpZgorCisgICAgLy8gQWRk
IGFsbCB0aGUgYW5pbWF0aW5nIHByb3BlcnRpZXMgdG8gdGhlIGtleWZyYW1lLgorICAgIGlmIChT
dHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0aW9uID0ga2V5ZnJhbWUtPnByb3BlcnRpZXMo
KSkgeworICAgICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gc3R5bGVEZWNsYXJhdGlvbi0+
cHJvcGVydHlDb3VudCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVy
dHlDb3VudDsgKytpKSB7CisgICAgICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5ID0gc3R5
bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlBdChpKS5pZCgpOworICAgICAgICAgICAgLy8gVGltaW5n
LWZ1bmN0aW9uIHdpdGhpbiBrZXlmcmFtZXMgaXMgc3BlY2lhbCwgYmVjYXVzZSBpdCBpcyBub3Qg
YW5pbWF0ZWQ7IGl0IGp1c3QKKyAgICAgICAgICAgIC8vIGRlc2NyaWJlcyB0aGUgdGltaW5nIGZ1
bmN0aW9uIGJldHdlZW4gdGhpcyBrZXlmcmFtZSBhbmQgdGhlIG5leHQuCisgICAgICAgICAgICBp
ZiAocHJvcGVydHkgIT0gQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbikK
KyAgICAgICAgICAgICAgICBrZXlmcmFtZVZhbHVlLmFkZFByb3BlcnR5KHByb3BlcnR5KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKK30KKwordm9p
ZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBj
b25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCit7Cisg
ICAgbGlzdC5jbGVhcigpOworCisgICAgLy8gR2V0IHRoZSBrZXlmcmFtZXNSdWxlIGZvciB0aGlz
IG5hbWUKKyAgICBpZiAoIWUgfHwgbGlzdC5hbmltYXRpb25OYW1lKCkuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2tleWZyYW1lc1J1bGVNYXAuY2hlY2tDb25zaXN0ZW5jeSgp
OworCisgICAgS2V5ZnJhbWVzUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lc1J1bGVN
YXAuZmluZChsaXN0LmFuaW1hdGlvbk5hbWUoKS5pbXBsKCkpOworICAgIGlmIChpdCA9PSBtX2tl
eWZyYW1lc1J1bGVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFN0eWxl
UnVsZUtleWZyYW1lcyoga2V5ZnJhbWVzUnVsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisKKyAgICAv
LyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQorICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJh
bWVzUnVsZS0+a2V5ZnJhbWVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleWZy
YW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBBcHBseSB0aGUgZGVjbGFyYXRpb24gdG8g
dGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBz
dHlsZUZvckVsZW1lbnQKKyAgICAgICAgaW5pdEVsZW1lbnQoZSk7CisgICAgICAgIGluaXRGb3JT
dHlsZVJlc29sdmUoZSk7CisKKyAgICAgICAgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUg
PSBrZXlmcmFtZXNbaV0uZ2V0KCk7CisKKyAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZh
bHVlKDAsIDApOworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJh
bWUoZWxlbWVudFN0eWxlLCBrZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworCisgICAgICAgIC8v
IEFkZCB0aGlzIGtleWZyYW1lIHN0eWxlIHRvIGFsbCB0aGUgaW5kaWNhdGVkIGtleSB0aW1lcwor
ICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtleXM7CisgICAgICAgIGtleWZyYW1lLT5nZXRLZXlzKGtl
eXMpOworICAgICAgICBmb3IgKHNpemVfdCBrZXlJbmRleCA9IDA7IGtleUluZGV4IDwga2V5cy5z
aXplKCk7ICsra2V5SW5kZXgpIHsKKyAgICAgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0S2V5KGtl
eXNba2V5SW5kZXhdKTsKKyAgICAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYgdGhlIDAlIGtleWZyYW1lIGlzIG1pc3Npbmcs
IGNyZWF0ZSBpdCAoYnV0IG9ubHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZy
YW1lKQorICAgIGludCBpbml0aWFsTGlzdFNpemUgPSBsaXN0LnNpemUoKTsKKyAgICBpZiAoaW5p
dGlhbExpc3RTaXplID4gMCAmJiBsaXN0WzBdLmtleSgpICE9IDApIHsKKyAgICAgICAgc3RhdGlj
IFN0eWxlS2V5ZnJhbWUqIHplcm9QZXJjZW50S2V5ZnJhbWU7CisgICAgICAgIGlmICghemVyb1Bl
cmNlbnRLZXlmcmFtZSkgeworICAgICAgICAgICAgemVyb1BlcmNlbnRLZXlmcmFtZSA9IFN0eWxl
S2V5ZnJhbWU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKKyAgICAgICAgICAgIHplcm9QZXJjZW50S2V5
ZnJhbWUtPnNldEtleVRleHQoIjAlIik7CisgICAgICAgIH0KKyAgICAgICAgS2V5ZnJhbWVWYWx1
ZSBrZXlmcmFtZVZhbHVlKDAsIDApOworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0
eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCB6ZXJvUGVyY2VudEtleWZyYW1lLCBrZXlmcmFt
ZVZhbHVlKSk7CisgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOworICAgIH0KKwor
ICAgIC8vIElmIHRoZSAxMDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBpdCAoYnV0IG9u
bHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQorICAgIGlmIChpbml0
aWFsTGlzdFNpemUgPiAwICYmIChsaXN0W2xpc3Quc2l6ZSgpIC0gMV0ua2V5KCkgIT0gMSkpIHsK
KyAgICAgICAgc3RhdGljIFN0eWxlS2V5ZnJhbWUqIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWU7Cisg
ICAgICAgIGlmICghaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSkgeworICAgICAgICAgICAgaHVuZHJl
ZFBlcmNlbnRLZXlmcmFtZSA9IFN0eWxlS2V5ZnJhbWU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKKyAg
ICAgICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUtPnNldEtleVRleHQoIjEwMCUiKTsKKyAg
ICAgICAgfQorICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMSwgMCk7CisgICAg
ICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUs
IGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAgbGlzdC5p
bnNlcnQoa2V5ZnJhbWVWYWx1ZSk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBF
bGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit7CisgICAgaWYgKCFlKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGluaXRFbGVtZW50KGUpOworCisgICAgaW5pdEZvclN0eWxl
UmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKKyAgICBtX3N0eWxlID0gUmVuZGVyU3R5
bGU6OmNyZWF0ZSgpOworCisgICAgaWYgKG1fcGFyZW50U3R5bGUpCisgICAgICAgIG1fc3R5bGUt
PmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUpOworCisgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNl
IHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVs
ZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZworICAgIC8vIHRob3NlIHJ1bGVzLgorCisgICAg
Ly8gQ2hlY2sgVUEsIHVzZXIgYW5kIGF1dGhvciBydWxlcy4KKyAgICBNYXRjaFJlc3VsdCBtYXRj
aFJlc3VsdDsKKyAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOworCisgICAgaWYgKG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7CisgICAgICAgIG1hdGNoVXNlclJ1bGVzKG1hdGNoUmVz
dWx0LCBmYWxzZSk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMobWF0Y2hSZXN1bHQsIGZhbHNl
KTsKKyAgICB9CisKKyAgICBpZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fc3R5bGUtPnNldFN0eWxlVHlwZShwc2V1
ZG8pOworCisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCk7CisKKyAgICAv
LyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9u
cyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdHlsZSgpLCBw
YXJlbnRTdHlsZSwgMCk7CisKKyAgICAvLyBTdGFydCBsb2FkaW5nIGltYWdlcyByZWZlcmVuY2Vk
IGJ5IHRoaXMgc3R5bGUuCisgICAgbG9hZFBlbmRpbmdJbWFnZXMoKTsKKworI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKKyAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5jZWQg
YnkgdGhpcyBzdHlsZS4KKyAgICBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKKyNlbmRpZgorCisgICAg
Ly8gTm93IHJldHVybiB0aGUgc3R5bGUuCisgICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOwor
fQorCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2Uo
aW50IHBhZ2VJbmRleCkKK3sKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKG1fY2hlY2tlci5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJl
IHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCisKKyAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6
OmNyZWF0ZSgpOworICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcm9vdEVsZW1lbnRTdHlsZSk7
CisKKyAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVmdFBhZ2UocGFnZUluZGV4KTsKKyAgICBj
b25zdCBib29sIGlzRmlyc3QgPSBpc0ZpcnN0UGFnZShwYWdlSW5kZXgpOworICAgIGNvbnN0IFN0
cmluZyBwYWdlID0gcGFnZU5hbWUocGFnZUluZGV4KTsKKyAgICAKKyAgICBNYXRjaFJlc3VsdCBy
ZXN1bHQ7CisgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBkZWZhdWx0UHJpbnRTdHlsZSwgaXNM
ZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fdXNlclN0
eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOworICAgIC8vIE9ubHkgY29uc2lkZXIg
dGhlIGdsb2JhbCBhdXRob3IgUnVsZVNldCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRN
TDUgc3BlYy4KKyAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fYXV0aG9yU3R5bGUuZ2V0KCks
IGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAg
IGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
dHJ1ZT4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAt
IDEsIGluaGVyaXRlZE9ubHkpOworCisgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdv
IGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgorICAgIHVwZGF0ZUZvbnQoKTsKKworICAgIC8vIExp
bmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQt
c2l6ZS4KKyAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisKKyAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisKKyAgICAvLyBTdGFydCBsb2Fk
aW5nIGltYWdlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCisgICAgbG9hZFBlbmRpbmdJbWFn
ZXMoKTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAvLyBTdGFydCBsb2FkaW5nIHRo
ZSBzaGFkZXJzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KKyAgICBsb2FkUGVuZGluZ1NoYWRl
cnMoKTsKKyNlbmRpZgorCisgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCisgICAgcmV0dXJu
IG1fc3R5bGUucmVsZWFzZSgpOworfQorCitzdGF0aWMgdm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5z
KFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICAvLyBJbnRyaW5zaWMgbWFyZ2luIHZhbHVlLgor
ICAgIGNvbnN0IGludCBpbnRyaW5zaWNNYXJnaW4gPSAyICogc3R5bGUtPmVmZmVjdGl2ZVpvb20o
KTsKKworICAgIC8vIEZJWE1FOiBVc2luZyB3aWR0aC9oZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNv
IGRlYWxpbmcgd2l0aCBtaW4td2lkdGgvbWF4LXdpZHRoIGlzIGZsYXdlZC4KKyAgICAvLyBGSVhN
RTogVXNpbmcgInF1aXJrIiB0byBkZWNpZGUgdGhlIG1hcmdpbiB3YXNuJ3Qgc2V0IGlzIGtpbmQg
b2YgbGFtZS4KKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkgewor
ICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkxlZnQoKS5xdWlyaygpKQorICAgICAgICAgICAgc3R5
bGUtPnNldE1hcmdpbkxlZnQoTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKKyAgICAg
ICAgaWYgKHN0eWxlLT5tYXJnaW5SaWdodCgpLnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+
c2V0TWFyZ2luUmlnaHQoTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKKyAgICB9CisK
KyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7CisgICAgICAgIGlmIChzdHlsZS0+
bWFyZ2luVG9wKCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5Ub3AoTGVu
Z3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5C
b3R0b20oKS5xdWlyaygpKQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpbkJvdHRvbShMZW5n
dGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOworICAgIH0KK30KKworc3RhdGljIEVEaXNwbGF5
IGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoRURpc3BsYXkgZGlzcGxheSwgYm9vbCBpc0Zsb2F0aW5n
LCBib29sIHN0cmljdFBhcnNpbmcpCit7CisgICAgc3dpdGNoIChkaXNwbGF5KSB7CisgICAgY2Fz
ZSBCTE9DSzoKKyAgICBjYXNlIFRBQkxFOgorICAgIGNhc2UgQk9YOgorICAgIGNhc2UgRkxFWEJP
WDoKKyNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQorICAgIGNhc2UgR1JJRDoKKyNlbmRpZgor
ICAgICAgICByZXR1cm4gZGlzcGxheTsKKworICAgIGNhc2UgTElTVF9JVEVNOgorICAgICAgICAv
LyBJdCBpcyBhIFdpbklFIGJ1ZyB0aGF0IGZsb2F0ZWQgbGlzdCBpdGVtcyBsb3NlIHRoZWlyIGJ1
bGxldHMsIHNvIHdlJ2xsIGVtdWxhdGUgdGhlIHF1aXJrLCBidXQgb25seSBpbiBxdWlya3MgbW9k
ZS4KKyAgICAgICAgaWYgKCFzdHJpY3RQYXJzaW5nICYmIGlzRmxvYXRpbmcpCisgICAgICAgICAg
ICByZXR1cm4gQkxPQ0s7CisgICAgICAgIHJldHVybiBkaXNwbGF5OworICAgIGNhc2UgSU5MSU5F
X1RBQkxFOgorICAgICAgICByZXR1cm4gVEFCTEU7CisgICAgY2FzZSBJTkxJTkVfQk9YOgorICAg
ICAgICByZXR1cm4gQk9YOworICAgIGNhc2UgSU5MSU5FX0ZMRVhCT1g6CisgICAgICAgIHJldHVy
biBGTEVYQk9YOworI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCisgICAgY2FzZSBJTkxJTkVf
R1JJRDoKKyAgICAgICAgcmV0dXJuIEdSSUQ7CisjZW5kaWYKKworICAgIGNhc2UgSU5MSU5FOgor
ICAgIGNhc2UgUlVOX0lOOgorICAgIGNhc2UgQ09NUEFDVDoKKyAgICBjYXNlIElOTElORV9CTE9D
SzoKKyAgICBjYXNlIFRBQkxFX1JPV19HUk9VUDoKKyAgICBjYXNlIFRBQkxFX0hFQURFUl9HUk9V
UDoKKyAgICBjYXNlIFRBQkxFX0ZPT1RFUl9HUk9VUDoKKyAgICBjYXNlIFRBQkxFX1JPVzoKKyAg
ICBjYXNlIFRBQkxFX0NPTFVNTl9HUk9VUDoKKyAgICBjYXNlIFRBQkxFX0NPTFVNTjoKKyAgICBj
YXNlIFRBQkxFX0NFTEw6CisgICAgY2FzZSBUQUJMRV9DQVBUSU9OOgorICAgICAgICByZXR1cm4g
QkxPQ0s7CisgICAgY2FzZSBOT05FOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIE5PTkU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBCTE9DSzsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHls
ZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCAq
ZSkKK3sKKyAgICAvLyBDYWNoZSBvdXIgb3JpZ2luYWwgZGlzcGxheS4KKyAgICBzdHlsZS0+c2V0
T3JpZ2luYWxEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCkpOworCisgICAgaWYgKHN0eWxlLT5kaXNw
bGF5KCkgIT0gTk9ORSkgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgPHRkPiB0aGF0IHNwZWNp
ZmllcyBhIGZsb2F0IHByb3BlcnR5LCBpbiBxdWlya3MgbW9kZSB3ZSBqdXN0IGRyb3AgdGhlIGZs
b2F0CisgICAgICAgIC8vIHByb3BlcnR5LgorICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5
IHVzZSBkaXNwbGF5OmlubGluZS9ibG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMuICBJbiBxdWly
a3MgbW9kZSB3ZSBmb3JjZQorICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBk
aXNwbGF5IHR5cGVzLgorICAgICAgICBpZiAoIW1fY2hlY2tlci5zdHJpY3RQYXJzaW5nKCkgJiYg
ZSkgeworICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUodGRUYWcpKSB7CisgICAgICAgICAg
ICAgICAgc3R5bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7CisgICAgICAgICAgICAgICAgc3R5
bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCisgICAgICAgICAgICAgICAgc3R5bGUtPnNl
dERpc3BsYXkoc3R5bGUtPmlzRGlzcGxheUlubGluZVR5cGUoKSA/IElOTElORV9UQUJMRSA6IFRB
QkxFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKHRkVGFn
KSB8fCBlLT5oYXNUYWdOYW1lKHRoVGFnKSkpIHsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+d2hp
dGVTcGFjZSgpID09IEtIVE1MX05PV1JBUCkgeworICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBv
dXQgaWYgd2UgYXJlIHJlYWxseSBub3dyYXBwaW5nIG9yIGlmIHdlIHNob3VsZCBqdXN0CisgICAg
ICAgICAgICAgICAgLy8gdXNlIG5vcm1hbCBpbnN0ZWFkLiAgSWYgdGhlIHdpZHRoIG9mIHRoZSBj
ZWxsIGlzIGZpeGVkLCB0aGVuCisgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkg
dXNlIE5PV1JBUC4KKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgp
KQorICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShOT1JNQUwpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFdoaXRlU3Bh
Y2UoTk9XUkFQKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFRhYmxl
cyBuZXZlciBzdXBwb3J0IHRoZSAtd2Via2l0LSogdmFsdWVzIGZvciB0ZXh0LWFsaWduIGFuZCB3
aWxsIHJlc2V0IGJhY2sgdG8gdGhlIGRlZmF1bHQuCisgICAgICAgIGlmIChlICYmIGUtPmhhc1Rh
Z05hbWUodGFibGVUYWcpICYmIChzdHlsZS0+dGV4dEFsaWduKCkgPT0gV0VCS0lUX0xFRlQgfHwg
c3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9DRU5URVIgfHwgc3R5bGUtPnRleHRBbGlnbigp
ID09IFdFQktJVF9SSUdIVCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0VGV4dEFsaWduKFRBQVVU
Tyk7CisKKyAgICAgICAgLy8gRnJhbWVzIGFuZCBmcmFtZXNldHMgbmV2ZXIgaG9ub3IgcG9zaXRp
b246cmVsYXRpdmUgb3IgcG9zaXRpb246YWJzb2x1dGUuICBUaGlzIGlzIG5lY2Vzc2FyeSB0bwor
ICAgICAgICAvLyBmaXggYSBjcmFzaCB3aGVyZSBhIHNpdGUgdHJpZXMgdG8gcG9zaXRpb24gdGhl
c2Ugb2JqZWN0cy4gIFRoZXkgYWxzbyBuZXZlciBob25vciBkaXNwbGF5LgorICAgICAgICBpZiAo
ZSAmJiAoZS0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgZS0+aGFzVGFnTmFtZShmcmFtZXNldFRh
ZykpKSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU3RhdGljUG9zaXRpb24pOwor
ICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gUnVieSB0ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXQgb3IgcG9zaXRpb24uIFRoaXMg
bWlnaHQgY2hhbmdlIHdpdGggZXZvbHV0aW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorICAgICAg
ICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKHJ0VGFnKSkgeworICAgICAgICAgICAgc3R5bGUtPnNl
dFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGlu
ZyhOb0Zsb2F0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRhYmxlIGhlYWRlcnMgd2l0aCBh
IHRleHQtYWxpZ24gb2YgYXV0byB3aWxsIGNoYW5nZSB0aGUgdGV4dC1hbGlnbiB0byBjZW50ZXIu
CisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUodGhUYWcpICYmIHN0eWxlLT50ZXh0QWxp
Z24oKSA9PSBUQUFVVE8pCisgICAgICAgICAgICBzdHlsZS0+c2V0VGV4dEFsaWduKENFTlRFUik7
CisKKyAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZShsZWdlbmRUYWcpKQorICAgICAgICAg
ICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOworCisgICAgICAgIC8vIEFic29sdXRlL2ZpeGVk
IHBvc2l0aW9uZWQgZWxlbWVudHMsIGZsb2F0aW5nIGVsZW1lbnRzIGFuZCB0aGUgZG9jdW1lbnQg
ZWxlbWVudCBuZWVkIGJsb2NrLWxpa2Ugb3V0c2lkZSBkaXNwbGF5LgorICAgICAgICBpZiAoc3R5
bGUtPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbiB8fCBzdHlsZS0+cG9zaXRpb24oKSA9
PSBGaXhlZFBvc2l0aW9uIHx8IHN0eWxlLT5pc0Zsb2F0aW5nKCkgfHwgKGUgJiYgZS0+ZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkpCisgICAgICAgICAgICBzdHlsZS0+c2V0RGlz
cGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCksIHN0eWxlLT5pc0Zs
b2F0aW5nKCksIG1fY2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpKTsKKworICAgICAgICAvLyBGSVhN
RTogRG9uJ3Qgc3VwcG9ydCB0aGlzIG11dGF0aW9uIGZvciBwc2V1ZG8gc3R5bGVzIGxpa2UgZmly
c3QtbGV0dGVyIG9yIGZpcnN0LWxpbmUsIHNpbmNlIGl0J3Mgbm90IGNvbXBsZXRlbHkKKyAgICAg
ICAgLy8gY2xlYXIgaG93IHRoYXQgc2hvdWxkIHdvcmsuCisgICAgICAgIGlmIChzdHlsZS0+ZGlz
cGxheSgpID09IElOTElORSAmJiBzdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8gJiYgcGFy
ZW50U3R5bGUgJiYgc3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gcGFyZW50U3R5bGUtPndyaXRpbmdN
b2RlKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShJTkxJTkVfQkxPQ0spOworCisg
ICAgICAgIC8vIEFmdGVyIHBlcmZvcm1pbmcgdGhlIGRpc3BsYXkgbXV0YXRpb24sIGNoZWNrIHRh
YmxlIHJvd3MuICBXZSBkbyBub3QgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb24KKyAgICAgICAg
Ly8gdGFibGUgcm93cyBvciBjZWxscy4gIFRoaXMgaGFzIGJlZW4gZXN0YWJsaXNoZWQgaW4gQ1NT
Mi4xIChhbmQgY2F1c2VkIGEgY3Jhc2ggaW4gY29udGFpbmluZ0Jsb2NrKCkKKyAgICAgICAgLy8g
b24gc29tZSBzaXRlcykuCisgICAgICAgIGlmICgoc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9I
RUFERVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1dfR1JPVVAKKyAgICAg
ICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0ZPT1RFUl9HUk9VUCB8fCBzdHls
ZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVykgJiYKKyAgICAgICAgICAgICBzdHlsZS0+cG9zaXRp
b24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKQorICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9u
KFN0YXRpY1Bvc2l0aW9uKTsKKworICAgICAgICAvLyB3cml0aW5nLW1vZGUgZG9lcyBub3QgYXBw
bHkgdG8gdGFibGUgcm93IGdyb3VwcywgdGFibGUgY29sdW1uIGdyb3VwcywgdGFibGUgcm93cywg
YW5kIHRhYmxlIGNvbHVtbnMuCisgICAgICAgIC8vIEZJWE1FOiBUYWJsZSBjZWxscyBzaG91bGQg
YmUgYWxsb3dlZCB0byBiZSBwZXJwZW5kaWN1bGFyIG9yIGZsaXBwZWQgd2l0aCByZXNwZWN0IHRv
IHRoZSB0YWJsZSwgdGhvdWdoLgorICAgICAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJM
RV9DT0xVTU4gfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9DT0xVTU5fR1JPVVAgfHwgc3R5
bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9GT09URVJfR1JPVVAKKyAgICAgICAgICAgIHx8IHN0eWxl
LT5kaXNwbGF5KCkgPT0gVEFCTEVfSEVBREVSX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0g
VEFCTEVfUk9XIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XX0dST1VQCisgICAgICAg
ICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0NFTEwpCisgICAgICAgICAgICBzdHls
ZS0+c2V0V3JpdGluZ01vZGUocGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkpOworCisgICAgICAg
IC8vIEZJWE1FOiBTaW5jZSB3ZSBkb24ndCBzdXBwb3J0IGJsb2NrLWZsb3cgb24gZmxleGlibGUg
Ym94ZXMgeWV0LCBkaXNhbGxvdyBzZXR0aW5nCisgICAgICAgIC8vIG9mIGJsb2NrLWZsb3cgdG8g
YW55dGhpbmcgb3RoZXIgdGhhbiBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY0MTggLSBGbGV4aWJsZSBi
b3ggc3VwcG9ydC4KKyAgICAgICAgaWYgKHN0eWxlLT53cml0aW5nTW9kZSgpICE9IFRvcFRvQm90
dG9tV3JpdGluZ01vZGUgJiYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gQk9YIHx8IHN0eWxlLT5kaXNw
bGF5KCkgPT0gSU5MSU5FX0JPWCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0V3JpdGluZ01vZGUo
VG9wVG9Cb3R0b21Xcml0aW5nTW9kZSk7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIG91ciB6
LWluZGV4IHZhbHVlIGlzIG9ubHkgYXBwbGllZCBpZiB0aGUgb2JqZWN0IGlzIHBvc2l0aW9uZWQu
CisgICAgaWYgKHN0eWxlLT5wb3NpdGlvbigpID09IFN0YXRpY1Bvc2l0aW9uKQorICAgICAgICBz
dHlsZS0+c2V0SGFzQXV0b1pJbmRleCgpOworCisgICAgLy8gQXV0byB6LWluZGV4IGJlY29tZXMg
MCBmb3IgdGhlIHJvb3QgZWxlbWVudCBhbmQgdHJhbnNwYXJlbnQgb2JqZWN0cy4gIFRoaXMgcHJl
dmVudHMKKyAgICAvLyBjYXNlcyB3aGVyZSBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIGJsZW5kZWQg
YXMgYSBzaW5nbGUgdW5pdCBlbmQgdXAgd2l0aCBhIG5vbi10cmFuc3BhcmVudAorICAgIC8vIG9i
amVjdCB3ZWRnZWQgaW4gYmV0d2VlbiB0aGVtLiAgQXV0byB6LWluZGV4IGFsc28gYmVjb21lcyAw
IGZvciBvYmplY3RzIHRoYXQgc3BlY2lmeSB0cmFuc2Zvcm1zL21hc2tzL3JlZmxlY3Rpb25zLgor
ICAgIGlmIChzdHlsZS0+aGFzQXV0b1pJbmRleCgpICYmICgoZSAmJiBlLT5kb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSA9PSBlKSB8fCBzdHlsZS0+b3BhY2l0eSgpIDwgMS4wZgorICAgICAg
ICB8fCBzdHlsZS0+aGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgfHwgc3R5bGUtPmhhc01h
c2soKSB8fCBzdHlsZS0+Ym94UmVmbGVjdCgpIHx8IHN0eWxlLT5oYXNGaWx0ZXIoKQorI2lmZGVm
IEZJWEVEX1BPU0lUSU9OX0NSRUFURVNfU1RBQ0tJTkdfQ09OVEVYVAorICAgICAgICB8fCBzdHls
ZS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uCisjZW5kaWYKKyNpZiBFTkFCTEUoT1ZFUkZM
T1dfU0NST0xMSU5HKQorICAgICAgICAvLyBUb3VjaCBvdmVyZmxvdyBzY3JvbGxpbmcgY3JlYXRl
cyBhIHN0YWNraW5nIGNvbnRleHQuCisgICAgICAgIHx8IHN0eWxlLT51c2VUb3VjaE92ZXJmbG93
U2Nyb2xsaW5nKCkKKyNlbmRpZgorICAgICAgICApKQorICAgICAgICBzdHlsZS0+c2V0WkluZGV4
KDApOworCisgICAgLy8gVGV4dGFyZWEgY29uc2lkZXJzIG92ZXJmbG93IHZpc2libGUgYXMgYXV0
by4KKyAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgeworICAgICAgICBz
dHlsZS0+c2V0T3ZlcmZsb3dYKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPVklTSUJMRSA/IE9BVVRP
IDogc3R5bGUtPm92ZXJmbG93WCgpKTsKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShzdHls
ZS0+b3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUgPyBPQVVUTyA6IHN0eWxlLT5vdmVyZmxvd1koKSk7
CisgICAgfQorCisgICAgLy8gRmluYWxseSB1cGRhdGUgb3VyIHRleHQgZGVjb3JhdGlvbnMgaW4g
ZWZmZWN0LCBidXQgZG9uJ3QgYWxsb3cgdGV4dC1kZWNvcmF0aW9uIHRvIHBlcmNvbGF0ZSB0aHJv
dWdoCisgICAgLy8gdGFibGVzLCBpbmxpbmUgYmxvY2tzLCBpbmxpbmUgdGFibGVzLCBydW4taW5z
LCBvciBzaGFkb3cgRE9NLgorICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFIHx8IHN0
eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gUlVO
X0lOCisgICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JMT0NLIHx8IHN0eWxl
LT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JPWCB8fCBpc0F0U2hhZG93Qm91bmRhcnkoZSkpCisgICAg
ICAgIHN0eWxlLT5zZXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdChzdHlsZS0+dGV4dERlY29yYXRp
b24oKSk7CisgICAgZWxzZQorICAgICAgICBzdHlsZS0+YWRkVG9UZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdChzdHlsZS0+dGV4dERlY29yYXRpb24oKSk7CisKKyAgICAvLyBJZiBlaXRoZXIgb3ZlcmZs
b3cgdmFsdWUgaXMgbm90IHZpc2libGUsIGNoYW5nZSB0byBhdXRvLgorICAgIGlmIChzdHlsZS0+
b3ZlcmZsb3dYKCkgPT0gT01BUlFVRUUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9NQVJRVUVF
KQorICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9NQVJRVUVFKTsKKyAgICBlbHNlIGlmIChz
dHlsZS0+b3ZlcmZsb3dZKCkgPT0gT01BUlFVRUUgJiYgc3R5bGUtPm92ZXJmbG93WCgpICE9IE9N
QVJRVUVFKQorICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9NQVJRVUVFKTsKKyAgICBlbHNl
IGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WSgp
ICE9IE9WSVNJQkxFKQorICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9BVVRPKTsKKyAgICBl
bHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93
WCgpICE9IE9WSVNJQkxFKQorICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9BVVRPKTsKKwor
ICAgIC8vIFRhYmxlIHJvd3MsIHNlY3Rpb25zIGFuZCB0aGUgdGFibGUgaXRzZWxmIHdpbGwgc3Vw
cG9ydCBvdmVyZmxvdzpoaWRkZW4gYW5kIHdpbGwgaWdub3JlIHNjcm9sbC9hdXRvLgorICAgIC8v
IEZJWE1FOiBFdmVudHVhbGx5IHRhYmxlIHNlY3Rpb25zIHdpbGwgc3VwcG9ydCBhdXRvIGFuZCBz
Y3JvbGwuCisgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEUgfHwgc3R5bGUtPmRpc3Bs
YXkoKSA9PSBJTkxJTkVfVEFCTEUgfHwKKyAgICAgICAgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJM
RV9ST1dfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cpIHsKKyAgICAgICAg
aWYgKHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkg
IT0gT0hJRERFTikKKyAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT1ZJU0lCTEUpOwor
ICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WSgpICE9IE9WSVNJQkxFICYmIHN0eWxlLT5vdmVy
Zmxvd1koKSAhPSBPSElEREVOKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklT
SUJMRSk7CisgICAgfQorCisgICAgLy8gTWVudWxpc3RzIHNob3VsZCBoYXZlIHZpc2libGUgb3Zl
cmZsb3cKKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpIHsKKyAg
ICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPVklTSUJMRSk7CisgICAgICAgIHN0eWxlLT5zZXRP
dmVyZmxvd1koT1ZJU0lCTEUpOworICAgIH0KKworICAgIC8vIEN1bGwgb3V0IGFueSB1c2VsZXNz
IGxheWVycyBhbmQgYWxzbyByZXBlYXQgcGF0dGVybnMgaW50byBhZGRpdGlvbmFsIGxheWVycy4K
KyAgICBzdHlsZS0+YWRqdXN0QmFja2dyb3VuZExheWVycygpOworICAgIHN0eWxlLT5hZGp1c3RN
YXNrTGF5ZXJzKCk7CisKKyAgICAvLyBEbyB0aGUgc2FtZSBmb3IgYW5pbWF0aW9ucyBhbmQgdHJh
bnNpdGlvbnMuCisgICAgc3R5bGUtPmFkanVzdEFuaW1hdGlvbnMoKTsKKyAgICBzdHlsZS0+YWRq
dXN0VHJhbnNpdGlvbnMoKTsKKworICAgIC8vIEltcG9ydGFudDogSW50cmluc2ljIG1hcmdpbnMg
Z2V0IGFkZGVkIHRvIGNvbnRyb2xzIGJlZm9yZSB0aGUgdGhlbWUgaGFzIGFkanVzdGVkIHRoZSBz
dHlsZSwgc2luY2UgdGhlIHRoZW1lIHdpbGwKKyAgICAvLyBhbHRlciBmb250cyBhbmQgaGVpZ2h0
cy93aWR0aHMuCisgICAgaWYgKGUgJiYgZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSAmJiBzdHls
ZS0+Zm9udFNpemUoKSA+PSAxMSkgeworICAgICAgICAvLyBEb24ndCBhcHBseSBpbnRyaW5zaWMg
bWFyZ2lucyB0byBpbWFnZSBidXR0b25zLiAgVGhlIGRlc2lnbmVyIGtub3dzIGhvdyBiaWcgdGhl
IGltYWdlcyBhcmUsCisgICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gdHJlYXQgYWxsIGltYWdlIGJ1
dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNpdGx5IHNpemVkLgorICAgICAgICBpZiAo
IWUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8ICFzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4oZSktPmlzSW1hZ2VCdXR0b24oKSkKKyAgICAgICAgICAgIGFkZEludHJpbnNpY01hcmdpbnMo
c3R5bGUpOworICAgIH0KKworICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sg
YXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KKyAgICBpZiAoc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSkK
KyAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBz
dHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVyRGF0YSwgbV9iYWNrZ3JvdW5kRGF0
YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOworCisgICAgLy8gSWYgd2UgaGF2ZSBmaXJzdC1sZXR0ZXIg
cHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KKyAgICBpZiAoc3R5bGUtPmhh
c1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCisgICAgICAgIHN0eWxlLT5zZXRVbmlxdWUoKTsK
KworICAgIC8vIEZJWE1FOiB3aGVuIGRyb3BwaW5nIHRoZSAtd2Via2l0IHByZWZpeCBvbiB0cmFu
c2Zvcm0tc3R5bGUsIHdlIHNob3VsZCBhbHNvIGhhdmUgb3BhY2l0eSA8IDEgY2F1c2UgZmxhdHRl
bmluZy4KKyAgICBpZiAoc3R5bGUtPnByZXNlcnZlczNEKCkgJiYgKHN0eWxlLT5vdmVyZmxvd1go
KSAhPSBPVklTSUJMRQorICAgICAgICB8fCBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUK
KyAgICAgICAgfHwgc3R5bGUtPmhhc0ZpbHRlcigpKSkKKyAgICAgICAgc3R5bGUtPnNldFRyYW5z
Zm9ybVN0eWxlM0QoVHJhbnNmb3JtU3R5bGUzREZsYXQpOworCisjaWYgRU5BQkxFKFNWRykKKyAg
ICBpZiAoZSAmJiBlLT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAgICAvLyBTcGVjOiBodHRwOi8v
d3d3LnczLm9yZy9UUi9TVkcvbWFza2luZy5odG1sI092ZXJmbG93UHJvcGVydHkKKyAgICAgICAg
aWYgKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMKQorICAgICAgICAgICAgc3R5bGUtPnNl
dE92ZXJmbG93WShPSElEREVOKTsKKyAgICAgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WSgp
ID09IE9BVVRPKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklTSUJMRSk7CisK
KyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPU0NST0xMKQorICAgICAgICAgICAg
c3R5bGUtPnNldE92ZXJmbG93WChPSElEREVOKTsKKyAgICAgICAgZWxzZSBpZiAoc3R5bGUtPm92
ZXJmbG93WCgpID09IE9BVVRPKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPVklT
SUJMRSk7CisKKyAgICAgICAgLy8gT25seSB0aGUgcm9vdCA8c3ZnPiBlbGVtZW50IGluIGFuIFNW
RyBkb2N1bWVudCBmcmFnbWVudCB0cmVlIGhvbm9ycyBjc3MgcG9zaXRpb24KKyAgICAgICAgaWYg
KCEoZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSAmJiBlLT5wYXJlbnROb2RlKCkgJiYg
IWUtPnBhcmVudE5vZGUoKS0+aXNTVkdFbGVtZW50KCkpKQorICAgICAgICAgICAgc3R5bGUtPnNl
dFBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsUG9zaXRpb24oKSk7CisKKyAgICAgICAgLy8g
UmVuZGVyU1ZHUm9vdCBoYW5kbGVzIHpvb21pbmcgZm9yIHRoZSB3aG9sZSBTVkcgc3VidHJlZSwg
c28gZm9yZWlnbk9iamVjdCBjb250ZW50IHNob3VsZAorICAgICAgICAvLyBub3QgYmUgc2NhbGVk
IGFnYWluLgorICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9yZWlnbk9iamVj
dFRhZykpCisgICAgICAgICAgICBzdHlsZS0+c2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6
aW5pdGlhbFpvb20oKSk7CisgICAgfQorI2VuZGlmCit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6
Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiByZWdpb25FbGVtZW50KQoreworICAgIC8vIEZJWE1F
IChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9mIHNjb3Bl
ZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQsCisgICAgLy8gc28gYWxsIHJlZ2lvbiBydWxl
cyBhcmUgZ2xvYmFsIGJ5IGRlZmF1bHQuIFZlcmlmeSB3aGV0aGVyIHRoYXQgY2FuIHN0YW5kIG9y
IG5lZWRzIGNoYW5naW5nLgorCisgICAgdW5zaWduZWQgcnVsZXNTaXplID0gbV9hdXRob3JTdHls
ZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7CisgICAgICAgIEFTU0VSVChtX2F1dGhvclN0
eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOwor
ICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX2F1dGhvclN0eWxlLT5tX3JlZ2lvblNl
bGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50KSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtX3VzZXJTdHlsZSkgeworICAg
ICAgICBydWxlc1NpemUgPSBtX3VzZXJTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0
cy5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlc1NpemU7ICsr
aSkgeworICAgICAgICAgICAgQVNTRVJUKG1fdXNlclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0Fu
ZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGNoZWNrUmVn
aW9uU2VsZWN0b3IobV91c2VyU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQo
aSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFN0eWxl
UmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQoreworICAgIGlmICghbV9mb250RGlydHkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKKyAgICBjaGVja0Zvckdl
bmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7CisgICAgY2hlY2tGb3Ja
b29tQ2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOworICAgIG1fc3R5bGUtPmZvbnQoKS51
cGRhdGUobV9mb250U2VsZWN0b3IpOworICAgIG1fZm9udERpcnR5ID0gZmFsc2U7Cit9CisKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKK3sKKyAgICBtX2hh
c1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKKyAgICBpZiAobV9oYXNV
QUFwcGVhcmFuY2UpIHsKKyAgICAgICAgbV9ib3JkZXJEYXRhID0gbV9zdHlsZS0+Ym9yZGVyKCk7
CisgICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqbV9zdHlsZS0+YmFja2dyb3VuZExheWVycygp
OworICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IG1fc3R5bGUtPmJhY2tncm91bmRDb2xvcigp
OworICAgIH0KK30KKworUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUpCit7
CisgICAgcmV0dXJuIHBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGUsIE5PUFNFVURPLCBydWxl
c1RvSW5jbHVkZSk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6
OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzZXVkb0lkIHBzZXVkb0lk
LCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKK3sKKyAgICBpZiAoIWUgfHwgIWUtPmRvY3VtZW50
KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1f
Y2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KHRydWUpOworCisgICAgaW5pdEVsZW1lbnQo
ZSk7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCAwLCBwc2V1ZG9JZCk7CisKKyAgICBNYXRj
aFJlc3VsdCBkdW1teTsKKyAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxl
cykgeworICAgICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50
IHNoZWV0LgorICAgICAgICBtYXRjaFVBUnVsZXMoZHVtbXkpOworCisgICAgICAgIC8vIE5vdyB3
ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgorICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMpCisgICAgICAgICAgICBtYXRjaFVzZXJSdWxlcyhkdW1teSwgcnVsZXNUb0luY2x1
ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICB9CisKKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7CisgICAgICAg
IG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxl
cyk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCisgICAg
ICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxl
cyk7CisKKyAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOworICAgIH0KKworICAgIG1f
Y2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KGZhbHNlKTsKKworICAgIHJldHVybiBtX3J1
bGVMaXN0LnJlbGVhc2UoKTsKK30KKworaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tT
ZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNj
b3BlKQoreworICAgIG1fZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgIG1fY2hlY2tlci5j
bGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpOworCisgICAgaWYgKHJ1bGVEYXRhLmhhc0Zh
c3RDaGVja2FibGVTZWxlY3RvcigpKSB7CisgICAgICAgIC8vIFdlIGtub3cgdGhpcyBzZWxlY3Rv
ciBkb2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8gZWxlbWVudHMuCisgICAgICAgIGlmIChtX2No
ZWNrZXIucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETykKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgLy8gV2Uga25vdyBhIHN1ZmZpY2llbnRseSBzaW1wbGUgc2luZ2xlIHBhcnQg
c2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBmb3VuZCBpdCBmcm9tIHRoZSBydWxl
IGhhc2guCisgICAgICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9ubHkgc28gd2UgZG9u
J3QgbmVlZCB0byBjaGVjayB0aGUgbmFtZXNwYWNlLgorICAgICAgICBpZiAocnVsZURhdGEuaGFz
UmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBtX2VsZW1l
bnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKCFydWxlRGF0YS5oYXNNdWx0
aXBhcnRTZWxlY3RvcigpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
IGVsc2UgaWYgKCFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMobV9lbGVtZW50LCBydWxlRGF0
YS5zZWxlY3RvcigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFT
ZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKG1fZWxl
bWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBtX2NoZWNrZXIuZmFzdENoZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0
b3IoKSwgbV9lbGVtZW50KTsKKyAgICB9CisKKyAgICAvLyBTbG93IHBhdGguCisgICAgU2VsZWN0
b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVj
dG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsK
KyAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0eWxlKCk7CisgICAgY29udGV4dC5lbGVtZW50
UGFyZW50U3R5bGUgPSBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkg
OiAwOworICAgIGNvbnRleHQuc2NvcGUgPSBzY29wZTsKKyAgICBTZWxlY3RvckNoZWNrZXI6OlNl
bGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3Rvcihjb250ZXh0LCBtX2R5
bmFtaWNQc2V1ZG8pOworICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
TWF0Y2hlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2NoZWNrZXIucHNldWRv
U3R5bGUoKSAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBtX2R5bmFt
aWNQc2V1ZG8pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKENTU1NlbGVjdG9yKiByZWdp
b25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCkKK3sKKyAgICBpZiAoIXJlZ2lvblNl
bGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBt
X2NoZWNrZXIuY2xlYXJIYXNVbmtub3duUHNldWRvRWxlbWVudHMoKTsKKyAgICBtX2NoZWNrZXIu
c2V0UHNldWRvU3R5bGUoTk9QU0VVRE8pOworCisgICAgZm9yIChDU1NTZWxlY3RvciogcyA9IHJl
Z2lvblNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQorICAgICAgICBp
ZiAobV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocywgcmVnaW9uRWxlbWVudCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK2Jvb2wgU3R5bGVS
ZXNvbHZlcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKFN0eWxlU2hlZXRJbnRl
cm5hbCogc3R5bGVzaGVldCwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpCit7CisgICAgQVNTRVJUKCFz
dHlsZXNoZWV0LT5pc0xvYWRpbmcoKSk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMgPSBzdHlsZXNoZWV0LT5pbXBvcnRSdWxlcygpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbXBvcnRSdWxlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoIWltcG9ydFJ1bGVzW2ldLT5zdHlsZVNoZWV0KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKCFkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMo
aW1wb3J0UnVsZXNbaV0tPnN0eWxlU2hlZXQoKSwgaWRTY29wZXMsIGNsYXNzU2NvcGVzKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PFN0eWxlUnVsZUJhc2U+ID4mIHJ1bGVzID0gc3R5bGVzaGVldC0+Y2hpbGRSdWxlcygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlcy5zaXplKCk7IGkrKykgeworICAgICAgICBT
dHlsZVJ1bGVCYXNlKiBydWxlID0gcnVsZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChydWxlLT5p
c1N0eWxlUnVsZSgpKSB7CisgICAgICAgICAgICBTdHlsZVJ1bGUqIHN0eWxlUnVsZSA9IHN0YXRp
Y19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpOworICAgICAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNr
ZXI6OmRldGVybWluZVNlbGVjdG9yU2NvcGVzKHN0eWxlUnVsZS0+c2VsZWN0b3JMaXN0KCksIGlk
U2NvcGVzLCBjbGFzc1Njb3BlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gCisgICAgICAgIC8vIEZJWE1FOiBNZWRpYSBy
dWxlcyBhbmQgbWF5YmUgc29tZSBvdGhlcnMgY291bGQgYmUgYWxsb3dlZC4KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
c3RhdGljIGlubGluZSBib29sIGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2go
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
c2VsZWN0b3JOYW1lc3BhY2UgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJKCk7CisgICAg
aWYgKHNlbGVjdG9yTmFtZXNwYWNlICE9IHN0YXJBdG9tICYmIHNlbGVjdG9yTmFtZXNwYWNlICE9
IHhodG1sTmFtZXNwYWNlVVJJKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNlbGVj
dG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpOb25lKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoc2VsZWN0b3ItPnRhZygpICE9IHN0YXJBdG9tKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9y
KHNlbGVjdG9yKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNlbGVjdG9yLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6Q2xhc3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZWxlY3Rvckxpc3RDb250YWlu
c1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQor
eworICAgIENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9y
TGlzdCgpOworICAgIGlmICghc2VsZWN0b3JMaXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7
IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJTZWxl
Y3RvcikpIHsKKyAgICAgICAgaWYgKHN1YlNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tb25BdHRyaWJ1dGVTZWxlY3RvckF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCit7CisgICAgLy8gVGhlc2UgYXJlIGV4cGxp
Y2l0bHkgdGVzdGVkIGZvciBlcXVhbGl0eSBpbiBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQuCisg
ICAgcmV0dXJuIGF0dHJpYnV0ZSA9PSB0eXBlQXR0ciB8fCBhdHRyaWJ1dGUgPT0gcmVhZG9ubHlB
dHRyOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBmb3IgKDsgc2VsZWN0
b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICAvLyBBbGxv
dyBjZXJ0YWluIGNvbW1vbiBhdHRyaWJ1dGVzICh1c2VkIGluIHRoZSBkZWZhdWx0IHN0eWxlKSBp
biB0aGUgc2VsZWN0b3JzIHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgZWxlbWVudC4KKyAgICAgICAg
aWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkgJiYgIWlzQ29tbW9uQXR0cmlidXRl
U2VsZWN0b3JBdHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJp
YnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7
CisgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoOyBzZWxlY3Rvcjsgc2Vs
ZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIGlmIChzZWxlY3Rvci0+
aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmIChzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0
b3IpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworUnVsZURhdGE6OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yLCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkKKyAgICA6
IG1fcnVsZShydWxlKQorICAgICwgbV9zZWxlY3RvcihzZWxlY3RvcikKKyAgICAsIG1fc3BlY2lm
aWNpdHkoc2VsZWN0b3ItPnNwZWNpZmljaXR5KCkpCisgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9u
KQorICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY2FuVXNlRmFzdENoZWNrU2VsZWN0
b3IgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3Rvcikp
CisgICAgLCBtX2hhc011bHRpcGFydFNlbGVjdG9yKCEhc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkK
KyAgICAsIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2go
aXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChzZWxlY3RvcikpCisgICAgLCBt
X2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihXZWJDb3JlOjpjb250YWluc1VuY29t
bW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQorICAgICwgbV9saW5rTWF0Y2hUeXBlKFNl
bGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZShzZWxlY3RvcikpCisgICAgLCBt
X2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKKyAg
ICAsIG1faXNJblJlZ2lvblJ1bGUoaW5SZWdpb25SdWxlKQoreworICAgIFNlbGVjdG9yQ2hlY2tl
cjo6Y29sbGVjdElkZW50aWZpZXJIYXNoZXMobV9zZWxlY3RvciwgbV9kZXNjZW5kYW50U2VsZWN0
b3JJZGVudGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKK30KKworUnVsZVNl
dDo6UnVsZVNldCgpCisgICAgOiBtX3J1bGVDb3VudCgwKQorICAgICwgbV9hdXRvU2hyaW5rVG9G
aXRFbmFibGVkKHRydWUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RmVhdHVy
ZXNGcm9tU2VsZWN0b3IoU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBD
U1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpJZCkKKyAgICAgICAgZmVhdHVyZXMuaWRzSW5SdWxlcy5hZGQoc2VsZWN0b3It
PnZhbHVlKCkuaW1wbCgpKTsKKyAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3Io
KSkKKyAgICAgICAgZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChzZWxlY3Rvci0+YXR0cmlidXRl
KCkubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBl
KCkpIHsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExpbmU6CisgICAgICAgIGZl
YXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0JlZm9yZToKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9BZnRlcjoKKyAgICAgICAgZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB0cnVlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgorICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6CisgICAgICAgIGZlYXR1cmVzLnVzZXNMaW5r
UnVsZXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YShT
dHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0
YSkKK3sKKyAgICBib29sIGZvdW5kU2libGluZ1NlbGVjdG9yID0gZmFsc2U7CisgICAgZm9yIChD
U1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3RvcigpOyBzZWxlY3Rvcjsgc2Vs
ZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIGNvbGxlY3RGZWF0dXJl
c0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc2VsZWN0b3IpOworICAgICAgICAKKyAgICAgICAgaWYg
KENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgp
KSB7CisgICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJTZWxlY3RvciA9IHNlbGVjdG9y
TGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3I7IHN1YlNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0
OjpuZXh0KHN1YlNlbGVjdG9yKSkgeworICAgICAgICAgICAgICAgIGlmICghZm91bmRTaWJsaW5n
U2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCisgICAgICAgICAgICAg
ICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb2xs
ZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHN1YlNlbGVjdG9yKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghZm91bmRTaWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0
b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCisgICAgICAgICAgICBmb3VuZFNpYmxpbmdTZWxlY3Rv
ciA9IHRydWU7CisgICAgfQorICAgIGlmIChmb3VuZFNpYmxpbmdTZWxlY3RvcikKKyAgICAgICAg
ZmVhdHVyZXMuc2libGluZ1J1bGVzLmFwcGVuZChTdHlsZVJlc29sdmVyOjpSdWxlRmVhdHVyZShy
dWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCksIHJ1bGVEYXRhLmhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4oKSkpOworICAgIGlmIChydWxlRGF0YS5jb250YWluc1VuY29tbW9uQXR0
cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxl
cy5hcHBlbmQoU3R5bGVSZXNvbHZlcjo6UnVsZUZlYXR1cmUocnVsZURhdGEucnVsZSgpLCBydWxl
RGF0YS5zZWxlY3RvcigpLCBydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpKTsK
K30KKyAgICAKK3ZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtl
eSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQoreworICAgIGlm
ICgha2V5KQorICAgICAgICByZXR1cm47CisgICAgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiYg
cnVsZXMgPSBtYXAuYWRkKGtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBpZiAo
IXJ1bGVzKQorICAgICAgICBydWxlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UnVsZURhdGE+KTsK
KyAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSdWxl
KFN0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdp
b25SdWxlKQoreworICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9yLCBtX3J1bGVD
b3VudCsrLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3Rv
ciwgaW5SZWdpb25SdWxlKTsKKyAgICBjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEobV9mZWF0
dXJlcywgcnVsZURhdGEpOworCisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVj
dG9yOjpJZCkgeworICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgp
LCBtX2lkUnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
c2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKSB7CisgICAgICAgIGFkZFRv
UnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1fY2xhc3NSdWxlcywgcnVsZURhdGEp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzZWxlY3Rvci0+aXNVbmtub3duUHNl
dWRvRWxlbWVudCgpKSB7CisgICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5p
bXBsKCksIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzLCBydWxlRGF0YSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFz
c1NlbGVjdG9yKHNlbGVjdG9yKSkgeworICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9U
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluazoKKyAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQW55TGluazoKKyAgICAgICAgICAgIG1fbGlua1BzZXVkb0NsYXNzUnVsZXMuYXBw
ZW5kKHJ1bGVEYXRhKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRm9jdXM6CisgICAgICAgICAgICBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlcy5h
cHBlbmQocnVsZURhdGEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNlbGVjdG9y
LT50YWcoKS5sb2NhbE5hbWUoKTsKKyAgICBpZiAobG9jYWxOYW1lICE9IHN0YXJBdG9tKSB7Cisg
ICAgICAgIGFkZFRvUnVsZVNldChsb2NhbE5hbWUuaW1wbCgpLCBtX3RhZ1J1bGVzLCBydWxlRGF0
YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV91bml2ZXJzYWxSdWxlcy5hcHBlbmQo
cnVsZURhdGEpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2Uq
IHJ1bGUpCit7CisgICAgbV9wYWdlUnVsZXMuYXBwZW5kKHJ1bGUpOworfQorCit2b2lkIFJ1bGVT
ZXQ6OmFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiByZWdpb25SdWxlLCBib29sIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4pCit7CisgICAgT3duUHRyPFJ1bGVTZXQ+IHJlZ2lvblJ1bGVT
ZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICAvLyBUaGUgcmVnaW9uIHJ1bGUgc2V0IHNob3Vs
ZCB0YWtlIGludG8gYWNjb3VudCB0aGUgcG9zaXRpb24gaW5zaWRlIHRoZSBwYXJlbnQgcnVsZSBz
ZXQuCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcnVsZXMgaW5zaWRlIHJlZ2lvbiBibG9jayBtaWdo
dCBiZSBpbmNvcnJlY3RseSBwb3NpdGlvbmVkIGJlZm9yZSBvdGhlciBzaW1pbGFyIHJ1bGVzIGZy
b20KKyAgICAvLyB0aGUgc3R5bGVzaGVldCB0aGF0IGNvbnRhaW5zIHRoZSByZWdpb24gYmxvY2su
CisgICAgcmVnaW9uUnVsZVNldC0+bV9ydWxlQ291bnQgPSBtX3J1bGVDb3VudDsKKworICAgIC8v
IENvbGxlY3QgdGhlIHJlZ2lvbiBydWxlcyBpbnRvIGEgcnVsZSBzZXQKKyAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSByZWdpb25SdWxlLT5jaGls
ZFJ1bGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkUnVsZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgU3R5bGVSdWxlQmFzZSogcmVnaW9uU3R5bGluZ1J1bGUgPSBjaGls
ZFJ1bGVzW2ldLmdldCgpOworICAgICAgICBpZiAocmVnaW9uU3R5bGluZ1J1bGUtPmlzU3R5bGVS
dWxlKCkpCisgICAgICAgICAgICByZWdpb25SdWxlU2V0LT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nh
c3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLCB0cnVlLCB0cnVlKTsKKyAgICB9CisgICAgLy8gVXBkYXRlIHRoZSAiZ2xvYmFsIiBydWxl
IGNvdW50IHNvIHRoYXQgcHJvcGVyIG9yZGVyIGlzIG1haW50YWluZWQKKyAgICBtX3J1bGVDb3Vu
dCA9IHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50OworCisgICAgbV9yZWdpb25TZWxlY3RvcnNB
bmRSdWxlU2V0cy5hcHBlbmQoUnVsZVNldFNlbGVjdG9yUGFpcihyZWdpb25SdWxlLT5zZWxlY3Rv
ckxpc3QoKS5maXJzdCgpLCByZWdpb25SdWxlU2V0LnJlbGVhc2UoKSkpOworfQorCit2b2lkIFJ1
bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0
IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVSZXNvbHZlciogc3R5bGVTZWxlY3Rv
ciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgQVNTRVJUKHNoZWV0KTsKKwor
ICAgIC8vIE5vIG1lZGlhIGltcGxpZXMgImFsbCIsIGJ1dCBpZiBhIG1lZGlhIGxpc3QgZXhpc3Rz
IGl0IG11c3QKKyAgICAvLyBjb250YWluIG91ciBjdXJyZW50IG1lZGl1bQorICAgIGlmIChzaGVl
dC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1lZGl1bS5ldmFsKHNoZWV0LT5tZWRpYVF1ZXJpZXMoKSwg
c3R5bGVTZWxlY3RvcikpCisgICAgICAgIHJldHVybjsgLy8gdGhlIHN0eWxlIHNoZWV0IGRvZXNu
J3QgYXBwbHkKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4g
PiYgaW1wb3J0UnVsZXMgPSBzaGVldC0+aW1wb3J0UnVsZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVSdWxl
SW1wb3J0KiBpbXBvcnRSdWxlID0gaW1wb3J0UnVsZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChp
bXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFpbXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8
fCBtZWRpdW0uZXZhbChpbXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSwgc3R5bGVTZWxlY3Rvcikp
KQorICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgp
LCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IsIHNjb3BlKTsKKyAgICB9CisgICAgYm9vbCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luID0gc3R5bGVTZWxlY3RvciAmJiBzdHlsZVNlbGVjdG9yLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHNoZWV0LT5iYXNlVVJMKCkpOwor
CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBydWxlcyA9IHNoZWV0
LT5jaGlsZFJ1bGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGUgPSBydWxlc1tpXS5nZXQoKTsK
KworICAgICAgICBBU1NFUlQoIXJ1bGUtPmlzSW1wb3J0UnVsZSgpKTsKKyAgICAgICAgaWYgKHJ1
bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8
U3R5bGVSdWxlKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7Cisg
ICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkKKyAgICAgICAgICAgIGFkZFBhZ2VS
dWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxlKSk7CisgICAgICAgIGVsc2UgaWYg
KHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKKyAgICAgICAgICAgIFN0eWxlUnVsZU1lZGlhKiBtZWRp
YVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVNZWRpYSo+KHJ1bGUpOworCisgICAgICAgICAg
ICBpZiAoKCFtZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsKG1lZGlhUnVs
ZS0+bWVkaWFRdWVyaWVzKCksIHN0eWxlU2VsZWN0b3IpKSkgeworICAgICAgICAgICAgICAgIC8v
IFRyYXZlcnNlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBAbWVkaWEgcnVsZS4KKyAgICAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSBt
ZWRpYVJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBT
dHlsZVJ1bGVCYXNlKiBjaGlsZFJ1bGUgPSBjaGlsZFJ1bGVzW2pdLmdldCgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGRSdWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGNoaWxkUnVsZSks
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNQYWdlUnVsZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KGNoaWxkUnVsZSkpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzRm9udEZhY2VSdWxlKCkg
JiYgc3R5bGVTZWxlY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMg
Zm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShC
VUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUg
c2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3Bl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19j
YXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4oY2hpbGRSdWxlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZh
Y2VSdWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmludmFsaWRh
dGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2hpbGRSdWxlLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQu
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRShCVUcgNzI0NjIpOiBXZSBkb24ndCBh
ZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQu
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9y
LT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KGNoaWxk
UnVsZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAgIC8vIGZv
ciBydWxlcworICAgICAgICAgICAgfSAgIC8vIGlmIHJ1bGVzCisgICAgICAgIH0gZWxzZSBpZiAo
cnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CisgICAgICAgICAgICAv
LyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KKyAgICAgICAgICAgIC8vIEZJWE1FKEJV
RyA3MjQ2MSk6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBz
aGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9u
dEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlRm9udEZhY2UqPihydWxlKTsKKyAgICAg
ICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9u
dEZhY2VSdWxlKTsKKyAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmludmFsaWRhdGVNYXRjaGVk
UHJvcGVydGllc0NhY2hlKCk7CisgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNLZXlmcmFtZXNS
dWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgeworICAgICAgICAgICAgLy8gRklYTUUgKEJVRyA3MjQ2
Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBm
b3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4ocnVsZSkpOworICAgICAgICB9IGVsc2UgaWYg
KHJ1bGUtPmlzUmVnaW9uUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVnaW9uIHJ1bGVzIG9m
IHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICBpZiAoc2Nv
cGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhZGRSZWdpb25SdWxl
KHN0YXRpY19jYXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFi
bGVkKQorICAgICAgICBzaHJpbmtUb0ZpdCgpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxl
UnVsZShTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9v
bCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSkKK3sKKyAgICBm
b3IgKENTU1NlbGVjdG9yKiBzID0gcnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKTsgczsgcyA9
IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkKKyAgICAgICAgYWRkUnVsZShydWxlLCBzLCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaXNJblJlZ2lv
blJ1bGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1
bGVTZXQ6OkF0b21SdWxlTWFwJiBtYXApCit7CisgICAgUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKKyAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjpp
dGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5z
ZWNvbmQtPnNocmlua1RvRml0KCk7Cit9CisKK3ZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQor
eworICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2lkUnVsZXMpOworICAgIHNocmlua01hcFZl
Y3RvcnNUb0ZpdChtX2NsYXNzUnVsZXMpOworICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3Rh
Z1J1bGVzKTsKKyAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV9zaGFkb3dQc2V1ZG9FbGVtZW50
UnVsZXMpOworICAgIG1fbGlua1BzZXVkb0NsYXNzUnVsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICBt
X2ZvY3VzUHNldWRvQ2xhc3NSdWxlcy5zaHJpbmtUb0ZpdCgpOworICAgIG1fdW5pdmVyc2FsUnVs
ZXMuc2hyaW5rVG9GaXQoKTsKKyAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOworfQorCisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB0aGlzIGlzIG1vc3RseSBib3Jpbmcg
c3R1ZmYgb24gaG93IHRvIGFwcGx5IGEgY2VydGFpbiBydWxlIHRvIHRoZSByZW5kZXJzdHlsZS4u
LgorCitMZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSog
cm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4gcHJpbWl0aXZlVmFs
dWUgPyBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNp
b24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVy
Y2VudGFnZUNvbnZlcnNpb24+KHN0eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIpIDogTGVuZ3Ro
KFVuZGVmaW5lZCk7Cit9CisKK0xlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0VG9GbG9hdExl
bmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCit7CisgICAgcmV0
dXJuIHByaW1pdGl2ZVZhbHVlID8gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhl
ZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9u
IHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlw
bGllcikgOiBMZW5ndGgoVW5kZWZpbmVkKTsKK30KKwordGVtcGxhdGUgPGJvb2wgYXBwbHlGaXJz
dD4KK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVy
dHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0ltcG9ydGFudCwgYm9v
bCBpbmhlcml0ZWRPbmx5LCBib29sIGZpbHRlclJlZ2lvblByb3BlcnRpZXMpCit7CisgICAgQVNT
RVJUKCFmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzIHx8IG1fcmVnaW9uRm9yU3R5bGluZyk7CisgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50KCksIHJ1bGUpOworCisgICAgdW5zaWdu
ZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0
IENTU1Byb3BlcnR5JiBjdXJyZW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlBdChpKTsKKyAgICAg
ICAgaWYgKGlzSW1wb3J0YW50ICE9IGN1cnJlbnQuaXNJbXBvcnRhbnQoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBpZiAoaW5oZXJpdGVkT25seSAmJiAhY3VycmVudC5pc0luaGVy
aXRlZCgpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgZXhwbGlj
aXRseSBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gYXBwbHkgZnVydGhlciBub24taW5oZXJpdGVkIHBy
b3BlcnRpZXMKKyAgICAgICAgICAgIC8vIGFzIHRoZXkgbWlnaHQgb3ZlcnJpZGUgdGhlIHZhbHVl
IGluaGVyaXRlZCBoZXJlLiBGb3IgdGhpcyByZWFzb24gd2UgZG9uJ3QgYWxsb3cgZGVjbGFyYXRp
b25zIHdpdGgKKyAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgaW5oZXJpdGVkIHByb3BlcnRpZXMg
dG8gYmUgY2FjaGVkLgorICAgICAgICAgICAgQVNTRVJUKCFjdXJyZW50LnZhbHVlKCktPmlzSW5o
ZXJpdGVkVmFsdWUoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5ID0gY3VycmVudC5pZCgpOworCisgICAgICAgIGlmIChm
aWx0ZXJSZWdpb25Qcm9wZXJ0aWVzICYmICFTdHlsZVJlc29sdmVyOjppc1ZhbGlkUmVnaW9uU3R5
bGVQcm9wZXJ0eShwcm9wZXJ0eSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBp
ZiAoYXBwbHlGaXJzdCkgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoZmlyc3RDU1NQcm9w
ZXJ0eSA9PSBDU1NQcm9wZXJ0eUNvbG9yLCBDU1NfY29sb3JfaXNfZmlyc3RfcHJvcGVydHkpOwor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJvcGVydHlab29tID09IENTU1Byb3BlcnR5
Q29sb3IgKyAxOCwgQ1NTX3pvb21faXNfZW5kX29mX2ZpcnN0X3Byb3BfcmFuZ2UpOworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0ID09IENTU1Byb3BlcnR5
Wm9vbSArIDEsIENTU19saW5lX2hlaWdodF9pc19hZnRlcl96b29tKTsKKyAgICAgICAgICAgIC8v
IGdpdmUgc3BlY2lhbCBwcmlvcml0eSB0byBmb250LXh4eCwgY29sb3IgcHJvcGVydGllcywgZXRj
CisgICAgICAgICAgICBpZiAocHJvcGVydHkgPiBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAvLyB3ZSBhcHBseSBsaW5lLWhlaWdo
dCBsYXRlcgorICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5TGluZUhlaWdo
dCkgeworICAgICAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gY3VycmVudC52YWx1ZSgp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJvcGVydHkgPiBDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQpCisgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3Vy
cmVudC52YWx1ZSgpKTsKKyAgICB9CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQ
cm9jZXNzUnVsZShjb29raWUpOworfQorCit0ZW1wbGF0ZSA8Ym9vbCBhcHBseUZpcnN0Pgordm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0
JiBtYXRjaFJlc3VsdCwgYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJ
bmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KQoreworICAgIGlmIChzdGFydEluZGV4ID09IC0xKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdHlsZS0+aW5zaWRlTGluaygpICE9IE5vdElu
c2lkZUxpbmspIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5k
ZXg7ICsraSkgeworICAgICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQ
cm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07CisgICAgICAgICAg
ICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbWF0Y2hlZFByb3BlcnRpZXMubGlua01hdGNoVHlw
ZTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlciB0byBwYXNzIHRoZXNl
IGFzIGFyZ3VtZW50cyBidXQgdGhhdCByZXF1aXJlcyBjaGFuZ2VzIGluIG1hbnkgcGxhY2VzLgor
ICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBsaW5rTWF0Y2hUeXBl
ICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7CisgICAgICAgICAgICBtX2FwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpN
YXRjaFZpc2l0ZWQ7CisKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxhcHBseUZpcnN0Piht
YXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVs
ZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBtYXRjaGVkUHJvcGVydGllcy5pc0lu
UmVnaW9uUnVsZSk7CisgICAgICAgIH0KKyAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUgPSB0cnVlOworICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUg
PSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBpID0gc3RhcnRJ
bmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CisgICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0
aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ld
OworICAgICAgICBhcHBseVByb3BlcnRpZXM8YXBwbHlGaXJzdD4obWF0Y2hlZFByb3BlcnRpZXMu
cHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFu
dCwgaW5oZXJpdGVkT25seSwgbWF0Y2hlZFByb3BlcnRpZXMuaXNJblJlZ2lvblJ1bGUpOworICAg
IH0KK30KKwordW5zaWduZWQgU3R5bGVSZXNvbHZlcjo6Y29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVz
SGFzaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyogcHJvcGVydGllcywgdW5zaWduZWQgc2l6ZSkK
K3sKKyAgICAKKyAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KHByb3BlcnRpZXMs
IHNpemVvZihNYXRjaGVkUHJvcGVydGllcykgKiBzaXplKTsKK30KKworYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVy
OjpNYXRjaFJhbmdlcyYgYikKK3sKKyAgICByZXR1cm4gYS5maXJzdFVBUnVsZSA9PSBiLmZpcnN0
VUFSdWxlCisgICAgICAgICYmIGEubGFzdFVBUnVsZSA9PSBiLmxhc3RVQVJ1bGUKKyAgICAgICAg
JiYgYS5maXJzdEF1dGhvclJ1bGUgPT0gYi5maXJzdEF1dGhvclJ1bGUKKyAgICAgICAgJiYgYS5s
YXN0QXV0aG9yUnVsZSA9PSBiLmxhc3RBdXRob3JSdWxlCisgICAgICAgICYmIGEuZmlyc3RVc2Vy
UnVsZSA9PSBiLmZpcnN0VXNlclJ1bGUKKyAgICAgICAgJiYgYS5sYXN0VXNlclJ1bGUgPT0gYi5s
YXN0VXNlclJ1bGU7Cit9CisKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZVJlc29sdmVyOjpN
YXRjaFJhbmdlcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGIpCit7Cisg
ICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmVz
b2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVk
UHJvcGVydGllcyYgYikKK3sKKyAgICByZXR1cm4gYS5wcm9wZXJ0aWVzID09IGIucHJvcGVydGll
cyAmJiBhLmxpbmtNYXRjaFR5cGUgPT0gYi5saW5rTWF0Y2hUeXBlOworfQorCitib29sIG9wZXJh
dG9yIT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0IFN0
eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBiKQoreworICAgIHJldHVybiAhKGEgPT0g
Yik7Cit9CisKK2NvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVt
KiBTdHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUodW5zaWduZWQg
aGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0KQoreworICAgIEFTU0VSVChoYXNo
KTsKKworICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlLmZpbmQoaGFzaCk7CisgICAgaWYgKGl0ID09IG1fbWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUl0ZW0mIGNhY2hlSXRlbSA9IGl0LT5zZWNvbmQ7CisKKyAgICBzaXplX3Qgc2l6ZSA9
IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBpZiAoc2l6ZSAhPSBj
YWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAobWF0Y2hS
ZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV0gIT0gY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVz
W2ldKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChjYWNoZUl0ZW0ucmFu
Z2VzICE9IG1hdGNoUmVzdWx0LnJhbmdlcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
ICZjYWNoZUl0ZW07Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkVG9NYXRjaGVkUHJvcGVy
dGllc0NhY2hlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlLCB1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQp
Cit7CisgICAgc3RhdGljIHVuc2lnbmVkIG1hdGNoZWREZWNsYXJhdGlvbkNhY2hlQWRkaXRpb25z
QmV0d2VlblN3ZWVwcyA9IDEwMDsKKyAgICBpZiAoKyttX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVB
ZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA+PSBtYXRjaGVkRGVjbGFyYXRpb25DYWNoZUFkZGl0aW9u
c0JldHdlZW5Td2VlcHMpIHsKKyAgICAgICAgc3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7
CisgICAgICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVw
ID0gMDsKKyAgICB9CisKKyAgICBBU1NFUlQoaGFzaCk7CisgICAgTWF0Y2hlZFByb3BlcnRpZXND
YWNoZUl0ZW0gY2FjaGVJdGVtOworICAgIGNhY2hlSXRlbS5tYXRjaGVkUHJvcGVydGllcy5hcHBl
bmQobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMpOworICAgIGNhY2hlSXRlbS5yYW5nZXMg
PSBtYXRjaFJlc3VsdC5yYW5nZXM7CisgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGNhY2hlIHRo
ZSBvcmlnaW5hbCBSZW5kZXJTdHlsZSBpbnN0YW5jZS4gSXQgbWF5IGJlIGZ1cnRoZXIgbW9kaWZp
ZWQuCisgICAgLy8gVGhlIFJlbmRlclN0eWxlIGluIHRoZSBjYWNoZSBpcyByZWFsbHkganVzdCBh
IGhvbGRlciBmb3IgdGhlIHN1YnN0cnVjdHVyZXMgYW5kIG5ldmVyIHVzZWQgYXMtaXMuCisgICAg
Y2FjaGVJdGVtLnJlbmRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlKTsKKyAgICBj
YWNoZUl0ZW0ucGFyZW50UmVuZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUocGFyZW50U3R5
bGUpOworICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5hZGQoaGFzaCwgY2FjaGVJdGVtKTsK
K30KKwordm9pZCBTdHlsZVJlc29sdmVyOjppbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZSgpCit7CisgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmNsZWFyKCk7Cit9CisKK3N0YXRp
YyBib29sIGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKQoreworICAgIC8vIEZJWE1FOiBDU1NQcm9wZXJ0eVdlYmtpdFdyaXRpbmdNb2Rl
IG1vZGlmaWVzIHN0YXRlIHdoZW4gYXBwbHlpbmcgdG8gZG9jdW1lbnQgZWxlbWVudC4gV2UgY2Fu
J3Qgc2tpcCB0aGUgYXBwbHlpbmcgYnkgY2FjaGluZy4KKyAgICBpZiAoZWxlbWVudCA9PSBlbGVt
ZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgp
LT53cml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoc3R5bGUtPnVuaXF1ZSgpIHx8IChzdHlsZS0+c3R5bGVUeXBlKCkgIT0gTk9Q
U0VVRE8gJiYgcGFyZW50U3R5bGUtPnVuaXF1ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKHN0eWxlLT56b29tKCkgIT0gUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBUaGUgY2FjaGUgYXNzdW1lcyBzdGF0aWMga25vd2xl
ZGdlIGFib3V0IHdoaWNoIHByb3BlcnRpZXMgYXJlIGluaGVyaXRlZC4KKyAgICBpZiAocGFyZW50
U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCkKK3sKKyAg
ICB1bnNpZ25lZCBjYWNoZUhhc2ggPSBtYXRjaFJlc3VsdC5pc0NhY2hlYWJsZSA/IGNvbXB1dGVN
YXRjaGVkUHJvcGVydGllc0hhc2gobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuZGF0YSgp
LCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpIDogMDsKKyAgICBib29sIGFw
cGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOworICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGVJdGVtKiBjYWNoZUl0ZW0gPSAwOworICAgIGlmIChjYWNoZUhhc2ggJiYgKGNhY2hlSXRlbSA9
IGZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjYWNoZUhhc2gsIG1hdGNoUmVzdWx0KSkp
IHsKKyAgICAgICAgLy8gV2UgY2FuIGJ1aWxkIHVwIHRoZSBzdHlsZSBieSBjb3B5aW5nIG5vbi1p
bmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIGFuIGVhcmxpZXIgc3R5bGUgb2JqZWN0IGJ1aWx0IHVz
aW5nIHRoZSBzYW1lIGV4YWN0CisgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9ucy4gV2UgdGhl
biBvbmx5IG5lZWQgdG8gYXBwbHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzLCBpZiBhbnksIGFz
IHRoZWlyIHZhbHVlcyBjYW4gZGVwZW5kIG9uIHRoZSAKKyAgICAgICAgLy8gZWxlbWVudCBjb250
ZXh0LiBUaGlzIGlzIGZhc3QgYW5kIHNhdmVzIG1lbW9yeSBieSByZXVzaW5nIHRoZSBzdHlsZSBk
YXRhIHN0cnVjdHVyZXMuCisgICAgICAgIG1fc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNh
Y2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICBpZiAobV9wYXJlbnRTdHlsZS0+
aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSkg
eworICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IG1fc3R5bGUtPmluc2lkZUxp
bmsoKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBjYWNoZSBpdGVtIHBhcmVudCBzdHlsZSBoYXMg
aWRlbnRpY2FsIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvIHRoZSBjdXJyZW50IHBhcmVudCBzdHls
ZSB0aGVuIHRoZQorICAgICAgICAgICAgLy8gcmVzdWx0aW5nIHN0eWxlIHdpbGwgYmUgaWRlbnRp
Y2FsIHRvby4gV2UgY29weSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMgb3ZlciBmcm9tIHRoZSBj
YWNoZSBhbmQgYXJlIGRvbmUuCisgICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShjYWNo
ZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkg
dGhlIGxpbmsgc3RhdHVzIGlzIHRyZWF0ZWQgbGlrZSBhbiBpbmhlcml0ZWQgcHJvcGVydHkuIFdl
IG5lZWQgdG8gZXhwbGljaXRseSByZXN0b3JlIGl0LgorICAgICAgICAgICAgbV9zdHlsZS0+c2V0
SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSB0cnVlOyAKKyAgICB9CisgICAgLy8gTm93IHdl
IGhhdmUgYWxsIG9mIHRoZSBtYXRjaGVkIHJ1bGVzIGluIHRoZSBhcHByb3ByaWF0ZSBvcmRlci4g
V2FsayB0aGUgcnVsZXMgYW5kIGFwcGx5CisgICAgLy8gaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVz
IGZpcnN0LCBpLmUuLCB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVydGllcyBkZXBl
bmQgb24uCisgICAgLy8gVGhlIG9yZGVyIGlzICgxKSBoaWdoLXByaW9yaXR5IG5vdCBpbXBvcnRh
bnQsICgyKSBoaWdoLXByaW9yaXR5IGltcG9ydGFudCwgKDMpIG5vcm1hbCBub3QgaW1wb3J0YW50
CisgICAgLy8gYW5kICg0KSBub3JtYWwgaW1wb3J0YW50LgorICAgIG1fbGluZUhlaWdodFZhbHVl
ID0gMDsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KG1hdGNoUmVzdWx0LCBmYWxz
ZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhl
cml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KG1hdGNoUmVzdWx0
LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczx0cnVlPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
LmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5o
ZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczx0cnVlPihtYXRjaFJlc3Vs
dCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKworICAgIGlmIChjYWNoZUl0ZW0g
JiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG1fc3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKSkgeworICAgICAgICBtX2ZvbnREaXJ0eSA9IHRydWU7CisgICAgICAgIGFw
cGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIElmIG91ciBmb250IGdv
dCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KKyAgICB1cGRhdGVGb250KCk7
CisKKyAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVk
IG9uIHRoZSBmb250LXNpemUuCisgICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQorICAgICAgICBh
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOwor
CisgICAgLy8gTWFueSBwcm9wZXJ0aWVzIGRlcGVuZCBvbiB0aGUgZm9udC4gSWYgaXQgY2hhbmdl
cyB3ZSBqdXN0IGFwcGx5IGFsbCBwcm9wZXJ0aWVzLgorICAgIGlmIChjYWNoZUl0ZW0gJiYgY2Fj
aGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gbV9zdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkpCisgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOworCisgICAg
Ly8gTm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJvcGVydGllcy4KKyAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5o
ZXJpdGVkT25seSk7CisgICAgCisgICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3Vu
ZCBzbyB0aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCisgICAgY2FjaGVCb3JkZXJBbmRC
YWNrZ3JvdW5kKCk7CisgICAgCisgICAgLy8gTm93IGRvIHRoZSBhdXRob3IgYW5kIHVzZXIgbm9y
bWFsIHByaW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0aGUgIWltcG9ydGFudCBwcm9wZXJ0aWVz
LgorICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KG1hdGNoUmVzdWx0LCBmYWxzZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8ZmFsc2U+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
Zmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5
SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4obWF0Y2hS
ZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVy
aXRlZE9ubHkpOworICAgIAorICAgIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisgICAgCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQorICAgIGxvYWRQZW5kaW5nU2hhZGVycygpOworI2VuZGlmCisgICAg
CisgICAgQVNTRVJUKCFtX2ZvbnREaXJ0eSk7CisgICAgCisgICAgaWYgKGNhY2hlSXRlbSB8fCAh
Y2FjaGVIYXNoKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZShtX2VsZW1lbnQsIG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUp
KQorICAgICAgICByZXR1cm47CisgICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKG1fc3R5
bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVBhZ2VSdWxlcyhjb25zdCBTdHlsZVJ1bGVQYWdlKiBy
MSwgY29uc3QgU3R5bGVSdWxlUGFnZSogcjIpCit7CisgICAgcmV0dXJuIHIxLT5zZWxlY3Rvcigp
LT5zcGVjaWZpY2l0eSgpIDwgcjItPnNlbGVjdG9yKCktPnNwZWNpZmljaXR5KCk7Cit9CisKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hQYWdlUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgUnVs
ZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3Ry
aW5nJiBwYWdlTmFtZSkKK3sKKyAgICBpZiAoIXJ1bGVzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+IG1hdGNoZWRQYWdlUnVsZXM7CisgICAgbWF0Y2hQYWdl
UnVsZXNGb3JMaXN0KG1hdGNoZWRQYWdlUnVsZXMsIHJ1bGVzLT5wYWdlUnVsZXMoKSwgaXNMZWZ0
UGFnZSwgaXNGaXJzdFBhZ2UsIHBhZ2VOYW1lKTsKKyAgICBpZiAobWF0Y2hlZFBhZ2VSdWxlcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6c3RhYmxlX3NvcnQobWF0Y2hl
ZFBhZ2VSdWxlcy5iZWdpbigpLCBtYXRjaGVkUGFnZVJ1bGVzLmVuZCgpLCBjb21wYXJlUGFnZVJ1
bGVzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUGFnZVJ1bGVzLnNp
emUoKTsgaSsrKQorICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIG1hdGNoZWRQ
YWdlUnVsZXNbaV0tPnByb3BlcnRpZXMoKSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0
Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywg
Y29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9v
bCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSkKK3sKKyAgICB1bnNpZ25lZCBz
aXplID0gcnVsZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKKyAgICAgICAgU3R5bGVSdWxlUGFnZSogcnVsZSA9IHJ1bGVzW2ldOworICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yTG9jYWxOYW1lID0gcnVsZS0+c2VsZWN0b3IoKS0+
dGFnKCkubG9jYWxOYW1lKCk7CisgICAgICAgIGlmIChzZWxlY3RvckxvY2FsTmFtZSAhPSBzdGFy
QXRvbSAmJiBzZWxlY3RvckxvY2FsTmFtZSAhPSBwYWdlTmFtZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZSBwc2V1ZG9UeXBlID0gcnVsZS0+
c2VsZWN0b3IoKS0+cHNldWRvVHlwZSgpOworICAgICAgICBpZiAoKHBzZXVkb1R5cGUgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0xlZnRQYWdlICYmICFpc0xlZnRQYWdlKQorICAgICAgICAgICAgfHwg
KHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1JpZ2h0UGFnZSAmJiBpc0xlZnRQYWdl
KQorICAgICAgICAgICAgfHwgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0
UGFnZSAmJiAhaXNGaXJzdFBhZ2UpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Ly8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0
LgorICAgICAgICBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGll
cygpOworICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwgcHJvcGVydGllcy0+aXNFbXB0eSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gQWRkIHRoaXMgcnVsZSB0byBvdXIg
bGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgorICAgICAgICBtYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUp
OworICAgIH0KK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjppc0xlZnRQYWdlKGludCBwYWdlSW5k
ZXgpIGNvbnN0Cit7CisgICAgYm9vbCBpc0ZpcnN0UGFnZUxlZnQgPSBmYWxzZTsKKyAgICBpZiAo
IW1fcm9vdEVsZW1lbnRTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICBp
c0ZpcnN0UGFnZUxlZnQgPSB0cnVlOworCisgICAgcmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJz
dFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7Cit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6aXNGaXJz
dFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW4gY2FzZSBvZiBm
b3JjZWQgbGVmdC9yaWdodCBwYWdlLCBwYWdlIGF0IGluZGV4IDEgKG5vdCAwKSBjYW4gYmUgdGhl
IGZpcnN0IHBhZ2UuCisgICAgcmV0dXJuICghcGFnZUluZGV4KTsKK30KKworU3RyaW5nIFN0eWxl
UmVzb2x2ZXI6OnBhZ2VOYW1lKGludCAvKiBwYWdlSW5kZXggKi8pIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCBwYWdlIGluZGV4IHRvIHBhZ2UgbmFtZSBtYXBwaW5nLgorICAgIHJl
dHVybiAiIjsKK30KKwordGVtcGxhdGUgPGNsYXNzIExpc3RUeXBlPgorc3RhdGljIHZvaWQgY29s
bGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxl
PiA+JiB3cmFwcGVyTWFwLCBMaXN0VHlwZSogbGlzdFR5cGUpCit7CisgICAgaWYgKCFsaXN0VHlw
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0VHlwZS0+bGVuZ3Ro
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBD
U1NSdWxlKiBjc3NSdWxlID0gbGlzdFR5cGUtPml0ZW0oaSk7CisgICAgICAgIGlmIChjc3NSdWxl
LT5pc0ltcG9ydFJ1bGUoKSkKKyAgICAgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBw
ZXJNYXAsIHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihjc3NSdWxlKS0+c3R5bGVTaGVldCgp
KTsKKyAgICAgICAgZWxzZSBpZiAoY3NzUnVsZS0+aXNNZWRpYVJ1bGUoKSkKKyAgICAgICAgICAg
IGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PENTU01lZGlhUnVs
ZSo+KGNzc1J1bGUpKTsKKyAgICAgICAgZWxzZSBpZiAoY3NzUnVsZS0+aXNSZWdpb25SdWxlKCkp
CisgICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzdGF0aWNfY2Fz
dDxXZWJLaXRDU1NSZWdpb25SdWxlKj4oY3NzUnVsZSkpOworICAgICAgICBlbHNlIGlmIChjc3NS
dWxlLT5pc1N0eWxlUnVsZSgpKSB7CisgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIGNzc1N0eWxl
UnVsZSA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGNzc1J1bGUpOworICAgICAgICAgICAg
d3JhcHBlck1hcC5hZGQoY3NzU3R5bGVSdWxlLT5zdHlsZVJ1bGUoKSwgY3NzU3R5bGVSdWxlKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgY29sbGVjdENTU09NV3JhcHBlcnMo
SGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+JiB3cmFwcGVyTWFwLCBI
YXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBzaGVldFdyYXBwZXJTZXQsIFN0eWxlU2hl
ZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKK3sKKyAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAg
IHJldHVybjsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc3R5bGVTaGVldFdyYXBwZXIgPSBD
U1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldCk7CisgICAgc2hlZXRXcmFwcGVyU2V0LmFk
ZChzdHlsZVNoZWV0V3JhcHBlcik7CisgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1h
cCwgc3R5bGVTaGVldFdyYXBwZXIuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0Q1NT
T01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdy
YXBwZXJNYXAsIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0V3JhcHBlclNl
dCwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVT
aGVldD4gPiYgc3R5bGVTaGVldHMgPSBkb2N1bWVudC0+c3R5bGVTaGVldHMoKS0+dmVjdG9yKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0c1tpXS5nZXQoKTsK
KyAgICAgICAgaWYgKCFzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzdGF0
aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkpOworICAgIH0KKyAgICBjb2xsZWN0
Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzaGVldFdyYXBwZXJTZXQsIGRvY3VtZW50LT5wYWdl
VXNlclNoZWV0KCkpOworfQorCitDU1NTdHlsZVJ1bGUqIFN0eWxlUmVzb2x2ZXI6OmVuc3VyZUZ1
bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVSdWxlKiBydWxlKQoreworICAgIGlmICht
X3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBjb2xsZWN0
Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRD
U1NPTVdyYXBwZXJTZXQsIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVj
dENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0
Q1NTT01XcmFwcGVyU2V0LCBkZWZhdWx0U3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NP
TVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09N
V3JhcHBlclNldCwgcXVpcmtzU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBw
ZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBl
clNldCwgc3ZnU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5
bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgbWF0
aE1MU3R5bGVTaGVldCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxl
VG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgbWVkaWFDb250
cm9sc1N0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVs
ZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIGZ1bGxzY3Jl
ZW5TdHlsZVNoZWV0KTsKKworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVs
ZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIGRvY3VtZW50
KCkpOworICAgIH0KKyAgICByZXR1cm4gbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5nZXQo
cnVsZSkuZ2V0KCk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5
bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUp
Cit7CisgICAgaW5pdEVsZW1lbnQoMCk7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZSgwLCBzdHls
ZSk7CisgICAgbV9zdHlsZSA9IHN0eWxlOworICAgIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHls
ZShpZCwgdmFsdWUpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb0N1
cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlKQorICAgICAgICBhcHBseVByb3BlcnR5KGlkLCB2YWx1ZSk7Cit9CisKK2lubGluZSBi
b29sIGlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCit7CisgICAg
c3dpdGNoIChpZCkgeworICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgor
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgorICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
clRvcENvbG9yOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6Cisg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91
dGxpbmVDb2xvcjoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xv
cjoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yOgorICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKKyAgICAgICAgLy8gQWxzbyBhbGxvdyBz
aG9ydGhhbmRzIHNvIHRoYXQgaW5oZXJpdC9pbml0aWFsIHN0aWxsIHdvcmsuCisgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
TGVmdDoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0OgorICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyVG9wOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90
dG9tOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZToKKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6CisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUZpbGw6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6CisjZW5kaWYK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBodHRwOi8vZGV2Lncz
Lm9yZy9jc3N3Zy9jc3MzLXJlZ2lvbnMvI3RoZS1hdC1yZWdpb24tc3R5bGUtcnVsZQorLy8gRklY
TUU6IGFkZCBpbmNyZW1lbnRhbCBzdXBwb3J0IGZvciBvdGhlciByZWdpb24gc3R5bGluZyBwcm9w
ZXJ0aWVzLgoraW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aXNWYWxpZFJlZ2lvblN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKK3sKKyAgICBzd2l0Y2ggKGlkKSB7CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisv
LyBTVkcgaGFuZGxlcyB6b29taW5nIGluIGEgZGlmZmVyZW50IHdheSBjb21wYXJlZCB0byBDU1Mu
IFRoZSB3aG9sZSBkb2N1bWVudCBpcyBzY2FsZWQgaW5zdGVhZAorLy8gb2YgZWFjaCBpbmRpdmlk
dWFsIGxlbmd0aCB2YWx1ZSBpbiB0aGUgcmVuZGVyIHN0eWxlIC8gdHJlZS4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNvbXB1dGVMZW5ndGgqKCkKKy8vIG11bHRpcGxpZXMgZWFjaCByZXNvbHZlZCBsZW5n
dGggd2l0aCB0aGUgem9vbSBtdWx0aXBsaWVyIC0gc28gZm9yIFNWRyB3ZSBuZWVkIHRvIGRpc2Fi
bGUgdGhhdC4KKy8vIFRob3VnaCBhbGwgQ1NTIHZhbHVlcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRv
IG91dGVybW9zdCA8c3ZnPiBlbGVtZW50cyAod2lkdGgvaGVpZ2h0L2JvcmRlci9wYWRkaW5nLi4u
KQorLy8gbmVlZCB0byByZXNwZWN0IHRoZSBzY2FsaW5nLiBSZW5kZXJCb3ggKHRoZSBwYXJlbnQg
Y2xhc3Mgb2YgUmVuZGVyU1ZHUm9vdCkgZ3JhYnMgdmFsdWVzIGxpa2UKKy8vIHdpZHRoL2hlaWdo
dC9ib3JkZXIvcGFkZGluZy8uLi4gZnJvbSB0aGUgUmVuZGVyU3R5bGUgLT4gZm9yIFNWRyB0aGVz
ZSB2YWx1ZXMgd291bGQgbmV2ZXIgc2NhbGUsCisvLyBpZiB3ZSdkIHBhc3MgYSAxLjAgem9vbSBm
YWN0b3IgZXZlcnlod2VyZS4gU28gd2Ugb25seSBwYXNzIGEgem9vbSBmYWN0b3Igb2YgMS4wIGZv
ciBzcGVjaWZpYworLy8gcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgYWxsb3dlZCB0byBzY2FsZSB3
aXRoaW4gYSB6b29tZWQgU1ZHIGRvY3VtZW50IChsZXR0ZXIvd29yZC1zcGFjaW5nL2ZvbnQtc2l6
ZSkuCitib29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxlcygpCit7CisgICAgcmV0dXJu
IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOworfQorCisjaWYgRU5BQkxF
KENTU19HUklEX0xBWU9VVCkKKworc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9y
LCBMZW5ndGgmIGxlbmd0aCkKK3sKKyAgICBMZW5ndGggd29ya2luZ0xlbmd0aCA9IHByaW1pdGl2
ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRD
b252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9u
PihzZWxlY3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJvb3RFbGVtZW50U3R5bGUoKSwgc2VsZWN0
b3ItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgaWYgKHdvcmtpbmdMZW5ndGguaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc0xlbmd0aCgpKQorICAgICAgICB3b3JraW5nTGVuZ3RoLnNldFF1aXJrKHByaW1pdGl2
ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSk7CisKKyAgICBsZW5ndGggPSB3b3JraW5nTGVuZ3RoOwor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENT
U1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPExlbmd0aD4mIGxlbmd0aHMsIFN0eWxlUmVzb2x2ZXIqIHNl
bGVjdG9yKQoreworICAgIC8vIEhhbmRsZSAnbm9uZScuCisgICAgaWYgKHZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgICAg
IGxlbmd0aHMuYXBwZW5kKExlbmd0aChVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
dmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRv
ciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgQ1NT
VmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKKyAgICAgICAgICAgIGlmICghY3VyclZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICBMZW5ndGggbGVuZ3RoOworICAgICAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJh
Y2tCcmVhZHRoKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oY3VyclZhbHVlKSwgc2Vs
ZWN0b3IsIGxlbmd0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICAgICBsZW5ndGhzLmFwcGVuZChsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworCitzdGF0aWMgYm9vbCBjcmVh
dGVHcmlkUG9zaXRpb24oQ1NTVmFsdWUqIHZhbHVlLCBMZW5ndGgmIHBvc2l0aW9uKQoreworICAg
IC8vIEZvciBub3csIHdlIG9ubHkgYWNjZXB0OiA8aW50ZWdlcj4gfCAnYXV0bycKKyAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgQVNTRVJUKHByaW1p
dGl2ZVZhbHVlLT5pc051bWJlcigpKTsKKyAgICBwb3NpdGlvbi5zZXRWYWx1ZShwcmltaXRpdmVW
YWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
ICp2YWx1ZSkKK3sKKyAgICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+
aXNJbmhlcml0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlh
bFZhbHVlKCkgfHwgKCFtX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7
CisKKyAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJbmhlcml0IC0+
ICFpc0luaXRpYWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVyaXQKKworICAgIGlmICghYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgJiYgKCFhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKCkgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKKyAgICAgICAgLy8g
TGltaXQgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvbmx5IHRoZSBvbmVz
IGhvbm9yZWQgYnkgOnZpc2l0ZWQuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
aXNJbmhlcml0ICYmIG1fcGFyZW50U3R5bGUgJiYgIW1fcGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0
bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3Bl
cnR5KGlkKSkKKyAgICAgICAgbV9wYXJlbnRTdHlsZS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRl
ZFByb3BlcnRpZXMoKTsKKworICAgIC8vIGNoZWNrIGxvb2t1cCB0YWJsZSBmb3IgaW1wbGVtZW50
YXRpb25zIGFuZCB1c2Ugd2hlbiBhdmFpbGFibGUKKyAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXIm
IGhhbmRsZXIgPSBtX3N0eWxlQnVpbGRlci5wcm9wZXJ0eUhhbmRsZXIoaWQpOworICAgIGlmICho
YW5kbGVyLmlzVmFsaWQoKSkgeworICAgICAgICBpZiAoaXNJbmhlcml0KQorICAgICAgICAgICAg
aGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZSh0aGlzKTsKKyAgICAgICAgZWxzZSBpZiAoaXNJbml0
aWFsKQorICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZSh0aGlzKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKSA6IDA7CisKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOworCisgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1h
cHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9uZGluZyBmcm9udC1lbmQK
KyAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuICBTaG9ydGhhbmRzIChlLmcuIGJvcmRlciwgYmFj
a2dyb3VuZCkgb2NjdXIgaW4gdGhpcyBsaXN0IGFzIHdlbGwgYW5kCisgICAgLy8gYXJlIG9ubHkg
aGl0IHdoZW4gbWFwcGluZyAiaW5oZXJpdCIgb3IgImluaXRpYWwiIGludG8gZnJvbnQtZW5kIHZh
bHVlcy4KKyAgICBzd2l0Y2ggKGlkKSB7CisvLyBsaXN0cworICAgIGNhc2UgQ1NTUHJvcGVydHlD
b250ZW50OgorICAgICAgICAvLyBsaXN0IG9mIHN0cmluZywgdXJpLCBjb3VudGVyLCBhdHRyLCBp
CisgICAgeworICAgICAgICAvLyBGSVhNRTogSW4gQ1NTMywgaXQgd2lsbCBiZSBwb3NzaWJsZSB0
byBpbmhlcml0IGNvbnRlbnQuICBJbiBDU1MyIGl0IGlzIG5vdC4gIFRoaXMKKyAgICAgICAgLy8g
bm90ZSBpcyBhIHJlbWluZGVyIHRoYXQgZXZlbnR1YWxseSAiaW5oZXJpdCIgbmVlZHMgdG8gYmUg
c3VwcG9ydGVkLgorCisgICAgICAgIGlmIChpc0luaXRpYWwpIHsKKyAgICAgICAgICAgIG1fc3R5
bGUtPmNsZWFyQ29udGVudCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBib29sIGRpZFNldCA9IGZhbHNlOworICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0
ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgICAg
ICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChpdGVtLT5pc0lt
YWdlR2VuZXJhdG9yVmFsdWUoKSkgeworICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRl
bnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1
ZTsKKyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRl
bS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250
ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0
PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgZGlk
U2V0ID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXRl
bS0+aXNJbWFnZVZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50
KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0
PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworCisgICAgICAgICAgICBp
ZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQp
OworICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2Fu
IGEgbmFtZXNwYWNlIGJlIHNwZWNpZmllZCBmb3IgYW4gYXR0cihmb28pPworICAgICAgICAgICAg
ICAgIGlmIChtX3N0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBtX3BhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAg
ICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKS5pbXBsKCksIG51bGxBdG9tKTsKKyAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlID0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVl
LmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBh
ZmZlY3RzIHRoZSBzdHlsZQorICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVz
LmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNv
bnRlbnRWYWx1ZS0+aXNDb3VudGVyKCkpIHsKKyAgICAgICAgICAgICAgICBDb3VudGVyKiBjb3Vu
dGVyVmFsdWUgPSBjb250ZW50VmFsdWUtPmdldENvdW50ZXJWYWx1ZSgpOworICAgICAgICAgICAg
ICAgIEVMaXN0U3R5bGVUeXBlIGxpc3RTdHlsZVR5cGUgPSBOb25lTGlzdFN0eWxlOworICAgICAg
ICAgICAgICAgIGludCBsaXN0U3R5bGVJZGVudCA9IGNvdW50ZXJWYWx1ZS0+bGlzdFN0eWxlSWRl
bnQoKTsKKyAgICAgICAgICAgICAgICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25l
KQorICAgICAgICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RT
dHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKKyAgICAgICAgICAgICAg
ICBPd25QdHI8Q291bnRlckNvbnRlbnQ+IGNvdW50ZXIgPSBhZG9wdFB0cihuZXcgQ291bnRlckNv
bnRlbnQoY291bnRlclZhbHVlLT5pZGVudGlmaWVyKCksIGxpc3RTdHlsZVR5cGUsIGNvdW50ZXJW
YWx1ZS0+c2VwYXJhdG9yKCkpKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50
KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoY29udGVu
dFZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5R
dW90ZToKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChPUEVOX1FVT1RF
LCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90
ZToKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwg
ZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vT3BlblF1b3Rl
OgorICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE5PX09QRU5fUVVPVEUs
IGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0Nsb3NlUXVv
dGU6CisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9fQ0xPU0VfUVVP
VEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIC8vIG5vcm1hbCBhbmQgbm9uZSBkbyBub3QgaGF2ZSBhbnkgZWZmZWN0LgorICAg
ICAgICAgICAgICAgICAgICB7fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWRpZFNldCkKKyAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFy
Q29udGVudCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlR
dW90ZXM6CisgICAgICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIGlmIChtX3BhcmVu
dFN0eWxlKQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhtX3BhcmVudFN0eWxl
LT5xdW90ZXMoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGlzSW5pdGlhbCkgeworICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKDApOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkgeworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFs
dWVMaXN0Kj4odmFsdWUpOworICAgICAgICAgICAgUXVvdGVzRGF0YSogZGF0YSA9IFF1b3Rlc0Rh
dGE6OmNyZWF0ZShsaXN0LT5sZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOyAvLyBPdXQgb2YgbWVtb3J5CisgICAgICAgICAgICBTdHJpbmcq
IHF1b3RlcyA9IGRhdGEtPmRhdGEoKTsKKyAgICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRl
cmF0b3IgaSA9IGxpc3Q7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAg
ICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOworICAgICAgICAgICAgICAgIEFTU0VSVChp
dGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHF1
b3Rlc1tpLmluZGV4KCldID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoYWRvcHRSZWYoZGF0YSkp
OworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CisgICAgICAgICAgICBBU1NF
UlQocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldFF1b3RlcyhhZG9wdFJlZihRdW90ZXNEYXRhOjpjcmVhdGUoMCkpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6IHsKKyAg
ICAgICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFuZCBpZHMKKyAgICAgICAgaWYgKGlzSW5oZXJpdCkg
eworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IG1f
cGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0
aW9uLmdlbmVyaWNGYW1pbHkoKSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFt
aWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKKyAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlz
U3BlY2lmaWVkRm9udCgpKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGlzSW5p
dGlhbCkgeworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERl
c2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRv
IGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hhbmdl
IGZyb20gbW9ub3NwYWNlCisgICAgICAgICAgICAvLyB0byBub24tbW9ub3NwYWNlLgorICAgICAg
ICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlv
bi51c2VGaXhlZERlZmF1bHRTaXplKCkpCisgICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9u
dERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLmRvY3VtZW50KCksIENT
U1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2Up
KTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KGluaXRpYWxE
ZXNjLmdlbmVyaWNGYW1pbHkoKSk7CisgICAgICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0
RmFtaWx5KCkuZmFtaWx5SXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRGYW1pbHkoaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKSk7CisgICAgICAgICAgICBzZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0
eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udEZhbWlseSYgZmlyc3RGYW1pbHkg
PSBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKKyAgICAgICAgRm9udEZhbWlseSogY3Vy
ckZhbWlseSA9IDA7CisKKyAgICAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBuZXcgZm9udC1m
YW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1pbHkuCisgICAg
ICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJp
Y0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKKworICAgICAgICBmb3IgKENTU1Zh
bHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Cisg
ICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKKyAgICAgICAgICAgIGlmICgh
aXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgZmFjZTsK
KyAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5z
ZXR0aW5ncygpOworICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkKKyAg
ICAgICAgICAgICAgICBmYWNlID0gY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOworICAg
ICAgICAgICAgZWxzZSBpZiAoc2V0dGluZ3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNv
bnRlbnRWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlV2Via2l0Qm9keToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzZXR0aW5ncy0+
c3RhbmRhcmRGb250RmFtaWx5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgorICAgICAgICAgICAgICAgICAg
ICAgICAgZmFjZSA9IHNlcmlmRmFtaWx5OworICAgICAgICAgICAgICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVNhbnNTZXJpZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzYW5z
U2VyaWZGYW1pbHk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUN1cnNpdmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gY3Vyc2l2ZUZhbWlseTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5
KEZvbnREZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhbnRhc3k6CisgICAg
ICAgICAgICAgICAgICAgICAgICBmYWNlID0gZmFudGFzeUZhbWlseTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlv
bjo6RmFudGFzeUZhbWlseSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFjZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZhY2UgPSBtb25vc3BhY2VGYW1pbHk7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok1vbm9zcGFj
ZUZhbWlseSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6CisgICAgICAgICAgICAgICAgICAg
ICAgICBmYWNlID0gcGljdG9ncmFwaEZhbWlseTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6UGljdG9ncmFw
aEZhbWlseSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZmFjZS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWN1cnJGYW1pbHkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRmlsbGluZyBpbiB0aGUgZmlyc3QgZmFtaWx5LgorICAgICAgICAgICAgICAgICAgICBmaXJz
dEZhbWlseS5zZXRGYW1pbHkoZmFjZSk7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0RmFtaWx5
LmFwcGVuZEZhbWlseSgwKTsgLy8gUmVtb3ZlIGFueSBpbmhlcml0ZWQgZmFtaWx5LWZhbGxiYWNr
IGxpc3QuCisgICAgICAgICAgICAgICAgICAgIGN1cnJGYW1pbHkgPSAmZmlyc3RGYW1pbHk7Cisg
ICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQoZm9u
dERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSA9PSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7
CisgICAgICAgICAgICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZhY2UpOworICAgICAg
ICAgICAgICAgICAgICBjdXJyRmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKKyAgICAg
ICAgICAgICAgICAgICAgY3VyckZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBjYW4ndCBj
YWxsIHVzZUZpeGVkRGVmYXVsdFNpemUoKSB1bnRpbCBhbGwgbmV3IGZvbnQgZmFtaWxpZXMgaGF2
ZSBiZWVuIGFkZGVkCisgICAgICAgIC8vIElmIGN1cnJGYW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3
ZSBzZXQgYXQgbGVhc3Qgb25lIGZhbWlseSBvbiB0aGlzIGRlc2NyaXB0aW9uLgorICAgICAgICBp
ZiAoY3VyckZhbWlseSkgeworICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3Jk
U2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFt
aWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpCisgICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9u
dERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLmRvY3VtZW50KCksIENT
U1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgIW9sZEZh
bWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisvLyBzaG9ydGhhbmQgcHJvcGVydGllcworICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
OgorICAgICAgICBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckJh
Y2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldEJhY2tncm91bmRDb2xv
cihDb2xvcigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpIHsKKyAg
ICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCptX3BhcmVudFN0eWxl
LT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFja2dyb3Vu
ZENvbG9yKG1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s6CisgICAgICAgIGlm
IChpc0luaXRpYWwpCisgICAgICAgICAgICBtX3N0eWxlLT5jbGVhck1hc2tMYXllcnMoKTsKKyAg
ICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQorICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdE1h
c2tMYXllcnMoKm1fcGFyZW50U3R5bGUtPm1hc2tMYXllcnMoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKKyAgICAgICAgaWYgKGlzSW5oZXJpdCkgeworICAg
ICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fcGFyZW50U3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodCht
X3BhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFs
dWUgPSAwOworICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgICAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAg
IEFTU0VSVChzZXR0aW5ncyk7IC8vIElmIHdlJ3JlIGRvaW5nIHN0eWxlIHJlc29sdXRpb24sIHRo
aXMgZG9jdW1lbnQgc2hvdWxkIGFsd2F5cyBiZSBpbiBhIGZyYW1lIGFuZCB0aHVzIGhhdmUgc2V0
dGluZ3MKKyAgICAgICAgICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U3Rh
bmRhcmRGYW1pbHkpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01v
ZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOworICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFVzZVByaW50ZXJGb250KG1fY2hlY2tlci5kb2N1bWVudCgpLT5wcmludGluZygp
KTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250RmFtaWx5ID0g
bV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCktPnN0YW5kYXJkRm9udEZhbWlseSgpOwor
ICAgICAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnRGYW1pbHkuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KHN0YW5kYXJk
Rm9udEZhbWlseSk7CisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5
KCkuYXBwZW5kRmFtaWx5KDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsg
MSk7CisgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9y
S2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7Cisg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKKyAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAgICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlKSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0
KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIG1fbGluZUhl
aWdodFZhbHVlID0gMDsKKworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbjsKKyAgICAgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9u
dChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERlc2NyaXB0aW9uKTsKKworICAgICAg
ICAgICAgLy8gRG91YmxlLWNoZWNrIGFuZCBzZWUgaWYgdGhlIHRoZW1lIGRpZCBhbnl0aGluZy4g
IElmIG5vdCwgZG9uJ3QgYm90aGVyIHVwZGF0aW5nIHRoZSBmb250LgorICAgICAgICAgICAgaWYg
KGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoZSByZW5kZXJpbmcgbW9kZSBhbmQgcHJpbnRlciBmb250IHNldHRpbmdzIGFy
ZSB1cGRhdGVkLgorICAgICAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tl
ci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgICAgICAgICAgICAgIEFTU0VSVChzZXR0aW5n
cyk7IC8vIElmIHdlJ3JlIGRvaW5nIHN0eWxlIHJlc29sdXRpb24sIHRoaXMgZG9jdW1lbnQgc2hv
dWxkIGFsd2F5cyBiZSBpbiBhIGZyYW1lIGFuZCB0aHVzIGhhdmUgc2V0dGluZ3MKKyAgICAgICAg
ICAgICAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZv
bnRSZW5kZXJpbmdNb2RlKCkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRV
c2VQcmludGVyRm9udChtX2NoZWNrZXIuZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSk7CisKKyAgICAg
ICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFjdG9yLgorICAgICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmll
ZFNpemUobV9jaGVja2VyLmRvY3VtZW50KCksIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlv
bi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VT
Vkdab29tUnVsZXMoKSkpOworICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5p
c0ZvbnRWYWx1ZSgpKSB7CisgICAgICAgICAgICBGb250VmFsdWUgKmZvbnQgPSBzdGF0aWNfY2Fz
dDxGb250VmFsdWUqPih2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIWZvbnQtPnN0eWxlIHx8ICFm
b250LT52YXJpYW50IHx8ICFmb250LT53ZWlnaHQgfHwKKyAgICAgICAgICAgICAgICAgIWZvbnQt
PnNpemUgfHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZvbnQtPmZhbWlseSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0
eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1By
b3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOworICAgICAgICAgICAgYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQtPndlaWdodC5nZXQoKSk7Cisg
ICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcHJvcGVydGllcyBjYW4gZGlydHkgb3VyIGZvbnQg
YnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZvbnQncworICAgICAgICAgICAgLy8gcHJv
cGVydGllcyBiYWNrLCB3aGljaCBpcyBzYWZlLiBIb3dldmVyIGlmIGZvbnQtc2l6ZSBpcyB1c2lu
ZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxsCisgICAgICAgICAgICAvLyBuZWVkIHF1ZXJ5IHRoZSBk
aXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0byBnZXQgdGhlIGNvbXB1dGVkIHNpemUuIFRvIGJlIHNh
ZmUgaW4gdGhpcworICAgICAgICAgICAgLy8gY2FzZSwgbGV0J3MganVzdCB1cGRhdGUgdGhlIGZv
bnQgbm93LgorICAgICAgICAgICAgdXBkYXRlRm9udCgpOworICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKKworICAgICAgICAg
ICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBmb250LT5saW5lSGVpZ2h0LmdldCgpOworCisgICAgICAg
ICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5Lmdl
dCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDU1MzIFByb3BlcnRp
ZXMKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5
Qm94U2hhZG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6IHsKKyAgICAg
ICAgaWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4
dFNoYWRvdykKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyht
X3BhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9w
YXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVy
biBtX3N0eWxlLT5zZXRCb3hTaGFkb3cobV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9w
dFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkpKSA6IG51bGxw
dHIpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUp
IC8vIGluaXRpYWwgfCBub25lCisgICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlU
ZXh0U2hhZG93ID8gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IG1fc3R5bGUtPnNl
dEJveFNoYWRvdyhudWxscHRyKTsKKworICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0
b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIENT
U1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIWN1cnJWYWx1
ZS0+aXNTaGFkb3dWYWx1ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGN1cnJWYWx1
ZSk7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdHls
ZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkg
PSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0t
PmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpv
b21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBp
dGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxl
ID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNl
dCA/IEluc2V0IDogTm9ybWFsOworICAgICAgICAgICAgQ29sb3IgY29sb3I7CisgICAgICAgICAg
ICBpZiAoaXRlbS0+Y29sb3IpCisgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChtX3N0
eWxlKQorICAgICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+Y29sb3IoKTsKKworICAgICAg
ICAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihuZXcgU2hhZG93
RGF0YShJbnRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0gQ1NT
UHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6
OnRyYW5zcGFyZW50KSk7CisgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hh
ZG93KQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5y
ZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0
aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0
byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0
OiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJveFJlZmxlY3QsIEJveFJl
ZmxlY3QpCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkgeworICAgICAgICAgICAgbV9zdHls
ZS0+c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3QoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhbHVlLT5pc1JlZmxl
Y3RWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENTU1JlZmxlY3RWYWx1
ZSogcmVmbGVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUmVmbGVjdFZhbHVlKj4odmFsdWUpOwor
ICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0
aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKHJlZmxlY3RW
YWx1ZS0+ZGlyZWN0aW9uKCkpOworICAgICAgICBpZiAocmVmbGVjdFZhbHVlLT5vZmZzZXQoKSkK
KyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUtPm9mZnNldCgp
LT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJz
aW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3RvcikpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOworICAgICAgICBtYXNr
LnNldE1hc2tEZWZhdWx0cygpOworICAgICAgICBtYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVj
dFZhbHVlLT5tYXNrKCksIG1hc2spOworICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKG1hc2sp
OworCisgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlPcGFjaXR5Ogor
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKG9wYWNpdHks
IE9wYWNpdHkpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5U3JjOiAvLyBP
bmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q1NTUHJvcGVydHlVbmljb2RlUmFuZ2U6IC8vIE9ubHkgdXNlZCBpbiBAZm9udC1mYWNlIHJ1bGVz
LgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6
CisgICAgICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVt
blJ1bGVDb2xvcihtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBt
X3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSA6IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkp
OworICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKG1fcGFyZW50U3R5bGUt
PmNvbHVtblJ1bGVTdHlsZSgpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVX
aWR0aChtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoaXNJbml0aWFsKQorICAgICAgICAgICAgbV9zdHlsZS0+cmVzZXRDb2x1bW5S
dWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVl
ZToKKyAgICAgICAgaWYgKCFtX3BhcmVudE5vZGUgfHwgIXZhbHVlLT5pc0luaGVyaXRlZFZhbHVl
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVEaXJl
Y3Rpb24obV9wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKKyAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZUluY3JlbWVudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5jcmVtZW50KCkp
OworICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQobV9wYXJlbnRTdHlsZS0+bWFycXVl
ZVNwZWVkKCkpOworICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KG1fcGFyZW50
U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7CisgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVC
ZWhhdmlvcihtX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRpb246IHsKKyAgICAg
ICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZUxvb3BDb3VudCwgTWFycXVlZUxv
b3BDb3VudCkKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5m
aW5pdGUpCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8g
LTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc051bWJlcigpKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChw
cmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVlZDogeworICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVlU3BlZWQsIE1hcnF1ZWVTcGVlZCkKKyAgICAgICAg
aWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGlu
dCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKGlkZW50KSB7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNsb3c6CisgICAgICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZU5vcm1hbDoKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDg1
KTsgLy8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6CisgICAgICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3VwZXIgZmFzdC4K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0
TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2
ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0LgorICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVl
ZUluY3JlbWVudDogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVl
SW5jcmVtZW50LCBNYXJxdWVlSW5jcmVtZW50KQorICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGw6CisgICAgICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFw
eC4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZU5vcm1hbDoKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3Jl
bWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdl
OgorICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0
aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMZW5ndGggbWFycXVlZUxl
bmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290
RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIGlmICghbWFycXVlZUxlbmd0aC5pc1VuZGVmaW5l
ZCgpKQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobWFycXVl
ZUxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TGluZUNsYW1wOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTF9BTkRfUFJJTUlUSVZFKGxpbmVDbGFtcCwgTGluZUNsYW1wKQorICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvY2FsZTogeworICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChsb2NhbGUsIExvY2FsZSk7CisgICAgICAgIGlmICghcHJpbWl0aXZl
VmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2Nh
bGUobnVsbEF0b20pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2Nh
bGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNl
bGVjdGlvbihtX3N0eWxlLT5sb2NhbGUoKSkpOworICAgICAgICBzZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUwodGV4dFNpemVBZGp1c3QsIFRleHRTaXplQWRqdXN0KQorICAgICAgICBpZiAoIXBy
aW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgc2V0VGV4dFNpemVBZGp1c3QocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFC
TEUoREFTSEJPQVJEX1NVUFBPUlQpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdERhc2hib2Fy
ZFJlZ2lvbjogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChkYXNoYm9hcmRS
ZWdpb25zLCBEYXNoYm9hcmRSZWdpb25zKQorICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2Fy
ZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgRGFzaGJvYXJkUmVnaW9uICpyZWdpb24g
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0RGFzaGJvYXJkUmVnaW9uVmFsdWUoKTsKKyAgICAgICAgaWYg
KCFyZWdpb24pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRGFzaGJvYXJkUmVnaW9u
ICpmaXJzdCA9IHJlZ2lvbjsKKyAgICAgICAgd2hpbGUgKHJlZ2lvbikgeworICAgICAgICAgICAg
TGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnRvcCgpLCBzdHlsZSgpLCBt
X3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRv
SW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsK
KyAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5i
b3R0b20oKSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0
aCBsZWZ0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+bGVmdCgpLCBzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUpOworCisgICAgICAgICAgICBpZiAodG9wLmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgICAgICAgICAgdG9wID0gTGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAocmlnaHQuaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICByaWdodCA9IExlbmd0aCgpOworICAgICAgICAg
ICAgaWYgKGJvdHRvbS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGJvdHRvbSA9IExl
bmd0aCgpOworICAgICAgICAgICAgaWYgKGxlZnQuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAg
ICAgICBsZWZ0ID0gTGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGlmIChyZWdpb24tPm1faXNDaXJj
bGUpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFz
aGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9t
LCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOworICAgICAgICAgICAgZWxz
ZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24t
Pm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFs
c2UgOiB0cnVlKTsKKyAgICAgICAgICAgIHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0LmdldCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNEYXNoYm9h
cmRSZWdpb25zKHRydWUpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZVdpZHRoOiB7CisgICAgICAgIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMKHRleHRTdHJva2VXaWR0aCwgVGV4dFN0cm9rZVdpZHRoKQorICAg
ICAgICBmbG9hdCB3aWR0aCA9IDA7CisgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVUaGluOgorICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZU1lZGl1bToKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVUaGljazogewor
ICAgICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSAxLjAgLyA0ODsKKyAgICAgICAgICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVNZWRpdW0pCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVGhpY2spCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCAqPSA1OworICAgICAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0
ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0
aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U3Ry
b2tlV2lkdGgod2lkdGgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm06IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUwodHJhbnNmb3JtLCBUcmFuc2Zvcm0pOworICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnM7CisgICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWUsIHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucyk7CisgICAgICAgIG1fc3R5bGUtPnNl
dFRyYW5zZm9ybShvcGVyYXRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmU6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwocGVyc3BlY3RpdmUsIFBlcnNwZWN0aXZlKQorCisgICAgICAgIGlmICghcHJp
bWl0aXZlVmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgeworICAgICAgICAgICAgbV9zdHls
ZS0+c2V0UGVyc3BlY3RpdmUoMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBmbG9hdCBwZXJzcGVjdGl2ZVZhbHVlOworICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzTGVuZ3RoKCkpCisgICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3Rvcik7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigp
KSB7CisgICAgICAgICAgICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdHJlYXQgdmFs
dWVsZXNzIG51bWJlcnMgYXMgcHguCisgICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCks
IG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChwZXJzcGVjdGl2ZVZhbHVlID49IDAuMGYpCisg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9u
OgorICAgICAgICBpZiAoaXNJbml0aWFsKQorICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJBbmlt
YXRpb25zKCk7CisgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKKyAgICAgICAgICAgIG1fc3R5
bGUtPmluaGVyaXRBbmltYXRpb25zKG1fcGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKKyAgICAg
ICAgaWYgKGlzSW5pdGlhbCkKKyAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyVHJhbnNpdGlvbnMo
KTsKKyAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQorICAgICAgICAgICAgbV9zdHlsZS0+aW5o
ZXJpdFRyYW5zaXRpb25zKG1fcGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6CisgICAgeworI2lmIEVO
QUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzY1NjEw
Nzc+IFdvcmsgYXJvdW5kIHRoZSBTdG9ja3Mgd2lkZ2V0J3MgbWlzdXNlIG9mIHRoZQorICAgICAg
ICAvLyBwb2ludGVyLWV2ZW50cyBwcm9wZXJ0eSBieSBub3QgYXBwbHlpbmcgaXQgaW4gRGFzaGJv
YXJkLgorICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+
c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT51c2VzRGFzaGJv
YXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQorICAgICAgICAgICAgcmV0dXJuOworI2Vu
ZGlmCisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUocG9p
bnRlckV2ZW50cywgUG9pbnRlckV2ZW50cykKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUYXBIaWdobGln
aHRDb2xvcjogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0YXBIaWdobGln
aHRDb2xvciwgVGFwSGlnaGxpZ2h0Q29sb3IpOworICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgQ29sb3IgY29sID0gY29sb3JGcm9tUHJp
bWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpOworICAgICAgICBtX3N0eWxlLT5zZXRUYXBIaWdo
bGlnaHRDb2xvcihjb2wpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisjaWYgRU5B
QkxFKE9WRVJGTE9XX1NDUk9MTElORykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0T3ZlcmZs
b3dTY3JvbGxpbmc6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodXNlVG91
Y2hPdmVyZmxvd1Njcm9sbGluZywgVXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyk7CisgICAgICAg
IGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbV9zdHls
ZS0+c2V0VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZVRvdWNoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAg
IGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgorICAgICAgICByZXR1cm47CisgICAgLy8gRGlyZWN0
aW9uYWwgcHJvcGVydGllcyBhcmUgcmVzb2x2ZWQgYnkgcmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJv
cGVydHkoKSBiZWZvcmUgdGhlIHN3aXRjaC4KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyRW5kOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRDb2xvcjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlckVuZFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJT
dGFydDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRDb2xvcjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRTdHlsZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVyU3RhcnRXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyQmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVDb2xvcjoK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlU3R5bGU6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3JkZXJBZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJD
b2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJXaWR0aDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFyZ2luRW5kOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5TdGFy
dDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXJnaW5BZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
Z2luQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZUNvbGxh
cHNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Ub3BDb2xsYXBzZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQWZ0ZXJDb2xsYXBzZToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFBhZGRpbmdFbmQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdTdGFydDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0JlZm9yZToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0UGFkZGluZ0FmdGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2dp
Y2FsV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxIZWlnaHQ6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2ljYWxXaWR0aDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWluTG9naWNhbEhlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4
TG9naWNhbFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsSGVpZ2h0
OgorICAgIHsKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNv
bHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgbV9zdHlsZS0+ZGlyZWN0aW9uKCksIG1fc3R5
bGUtPndyaXRpbmdNb2RlKCkpOworICAgICAgICBBU1NFUlQobmV3SWQgIT0gaWQpOworICAgICAg
ICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOworICAgIH0KKyAgICBjYXNlIENT
U1Byb3BlcnR5Rm9udFN0cmV0Y2g6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2U6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaDoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExp
bmVUaHJvdWdoQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaE1vZGU6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaFN0eWxlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0TGluZVRocm91Z2hXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92
ZXJsaW5lOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVDb2xvcjoKKyAgICBjYXNl
IENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lTW9kZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92
ZXJsaW5lU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZVdpZHRoOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
VW5kZXJsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVNb2RlOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lU3R5bGU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRVbmRlcmxpbmVXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNp
emVEZWx0YToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3Q6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2U6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpczoKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ1NT
IFRleHQgTGF5b3V0IE1vZHVsZSBMZXZlbCAzOiBWZXJ0aWNhbCB3cml0aW5nIHN1cHBvcnQKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGU6IHsKKyAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh3cml0aW5nTW9kZSwgV3JpdGluZ01vZGUp
CisgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3Qgb2sgdG8gbW9kaWZ5IGRvY3VtZW50IHN0YXRl
IHdoaWxlIGFwcGx5aW5nIHN0eWxlLgorICAgICAgICBpZiAoIWlzSW5oZXJpdCAmJiAhaXNJbml0
aWFsICYmIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0
V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKKyAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24obV9zdHlsZS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IEhvcml6b250YWwgOiBWZXJ0aWNhbCk7CisgICAgICAgIHNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCb3hDb250YWluOiB7CisgICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKGxpbmVCb3hDb250YWluLCBMaW5lQm94Q29udGFpbikKKyAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlTm9uZSkgeworICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJveENvbnRhaW4o
TGluZUJveENvbnRhaW5Ob25lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghdmFsdWUtPmlzQ1NTTGluZUJveENvbnRhaW5WYWx1ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIENTU0xpbmVCb3hDb250YWluVmFsdWUqIGxpbmVCb3hDb250
YWluVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NMaW5lQm94Q29udGFpblZhbHVlKj4odmFsdWUpOwor
ICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRTaGFwZUluc2lkZToKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwod3Jh
cFNoYXBlSW5zaWRlLCBXcmFwU2hhcGVJbnNpZGUpOworICAgICAgICBpZiAoIXByaW1pdGl2ZVZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0V3JhcFNo
YXBlSW5zaWRlKDApOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgp
KQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0V3JhcFNoYXBlSW5zaWRlKHByaW1pdGl2ZVZhbHVl
LT5nZXRTaGFwZVZhbHVlKCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0U2hhcGVPdXRzaWRlOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TCh3cmFwU2hhcGVPdXRzaWRlLCBXcmFwU2hhcGVPdXRzaWRlKTsKKyAgICAgICAgaWYgKCFwcmlt
aXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKKyAgICAgICAgICAgIG1fc3R5bGUtPnNl
dFdyYXBTaGFwZU91dHNpZGUoMCk7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5p
c1NoYXBlKCkpCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRXcmFwU2hhcGVPdXRzaWRlKHByaW1p
dGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpOworICAgICAgICByZXR1cm47CisKKyAgICAvLyBD
U1MgRm9udHMgTW9kdWxlIExldmVsIDMKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEZl
YXR1cmVTZXR0aW5nczogeworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKKyAgICAgICAgICAgIHNldEZv
bnREZXNjcmlwdGlvbihtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVy
ZVNldHRpbmdzKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCk7CisgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVl
TGlzdCo+KHZhbHVlKTsKKyAgICAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IHNldHRp
bmdzID0gRm9udEZlYXR1cmVTZXR0aW5nczo6Y3JlYXRlKCk7CisgICAgICAgIGludCBsZW4gPSBs
aXN0LT5sZW5ndGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewor
ICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KGkpOworICAgICAgICAgICAgaWYgKCFpdGVtLT5pc0ZvbnRGZWF0dXJlVmFsdWUoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEZvbnRGZWF0dXJlVmFsdWUqIGZlYXR1
cmUgPSBzdGF0aWNfY2FzdDxGb250RmVhdHVyZVZhbHVlKj4oaXRlbSk7CisgICAgICAgICAgICBz
ZXR0aW5ncy0+YXBwZW5kKEZvbnRGZWF0dXJlKGZlYXR1cmUtPnRhZygpLCBmZWF0dXJlLT52YWx1
ZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZlYXR1cmVTZXR0
aW5ncyhzZXR0aW5ncy5yZWxlYXNlKCkpOworICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOiB7CisgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZpbHRlciwgRmlsdGVyKTsKKyAgICAgICAgRmlsdGVy
T3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9u
cyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKSkKKyAgICAg
ICAgICAgIG1fc3R5bGUtPnNldEZpbHRlcihvcGVyYXRpb25zKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5zOiB7CisgICAgICAgIFZlY3RvcjxMZW5ndGg+IGxlbmd0
aHM7CisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgbGVuZ3RocywgdGhp
cykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3R5bGUtPnNldEdyaWRDb2x1bW5z
KGxlbmd0aHMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRHcmlkUm93czogeworICAgICAgICBWZWN0b3I8TGVuZ3RoPiBsZW5ndGhzOworICAgICAg
ICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIGxlbmd0aHMsIHRoaXMpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX3N0eWxlLT5zZXRHcmlkUm93cyhsZW5ndGhzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29s
dW1uOiB7CisgICAgICAgIExlbmd0aCBjb2x1bW47CisgICAgICAgIGlmICghY3JlYXRlR3JpZFBv
c2l0aW9uKHZhbHVlLCBjb2x1bW4pKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3N0
eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93OiB7CisgICAgICAgIExlbmd0aCByb3c7
CisgICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCByb3cpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBtX3N0eWxlLT5zZXRHcmlkSXRlbVJvdyhyb3cpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBp
bXBsZW1lbnRlZCBpbiB0aGUgU3R5bGVCdWlsZGVyIGxvb2t1cCB0YWJsZS4KKyAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDbGlwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dy
b3VuZE9yaWdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25ZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVw
ZWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXM6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJCb3R0b21TdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGg6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2U6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckltYWdlT3V0c2V0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJ
bWFnZVJlcGVhdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlckltYWdlV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnQ6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
TGVmdFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclJhZGl1czoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmln
aHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0
V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmc6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3A6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJUb3BMZWZ0UmFkaXVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1
czoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlclRvcFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJXaWR0aDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaXppbmc6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNhcHRpb25TaWRlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlD
bGVhcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29s
b3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQ6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUNvdW50ZXJSZXNldDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eURpc3BsYXk6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb2F0
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9u
dFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudDoKKyAgICBjYXNlIENTU1By
b3BlcnR5Rm9udFdlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0OgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlJbWFnZVJlbmRlcmluZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5TGVmdDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5TGlu
ZUhlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlMaXN0U3R5bGVJbWFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlUG9zaXRp
b246CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eU1hcmdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlNYXJnaW5MZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5SaWdodDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luVG9wOgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhI
ZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlNaW5IZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1pbldpZHRoOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlPcnBoYW5zOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVPZmZz
ZXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVTdHlsZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5T3V0bGluZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvdzoKKyAgICBjYXNl
IENTU1Byb3BlcnR5T3ZlcmZsb3dYOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1k6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdC
b3R0b206CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0OgorICAgIGNhc2UgQ1NTUHJv
cGVydHlQYWRkaW5nUmlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdUb3A6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdl
QnJlYWtCZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lkZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5UG9zaXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVJlc2l6ZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVNpemU6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVNwZWFrOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJsZUxheW91dDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEFsaWduOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEluZGVudDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dE92ZXJmbG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0UmVuZGVyaW5n
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VHJhbnNmb3JtOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlUb3A6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlWZXJ0aWNhbEFsaWduOgorICAgIGNhc2UgQ1NTUHJvcGVydHlWaXNpYmlsaXR5OgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25EdXJhdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRmls
bE1vZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRBbmltYXRpb25QbGF5U3RhdGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
cHBlYXJhbmNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbzoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFj
a2dyb3VuZENvbXBvc2l0ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZE9y
aWdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNpemU6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
ckltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXM6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZzoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm94QWxpZ246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveERpcmVj
dGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RmxleDoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm94RmxleEdyb3VwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hM
aW5lczoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JkaW5hbEdyb3VwOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmllbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJveFBhY2s6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbG9yQ29ycmVjdGlvbjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQXhpczoKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uQnJlYWtBZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
QnJlYWtCZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRl
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudDoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Q29sdW1uR2FwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5S
dWxlQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVTdHlsZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5zOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5TcGFu
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aDoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0RmxleDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleEFsaWduOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4RGlyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRGbGV4RmxvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleEl0ZW1B
bGlnbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleExpbmVQYWNrOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRGbGV4T3JkZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZs
ZXhQYWNrOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4V3JhcDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Rmxvd0Zyb206CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dJ
bnRvOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250S2VybmluZzoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Rm9udFZhcmlhbnRMaWdhdHVyZXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEhpZ2hsaWdo
dDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlQ2hhcmFjdGVyOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVyOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEJlZm9yZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0SHlwaGVuYXRlTGltaXRMaW5lczoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVu
czoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUFsaWduOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRMaW5lQnJlYWs6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVHcmlk
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lU25hcDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFycXVlZURpcmVjdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
cXVlZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQXR0YWNobWVudDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrQm94SW1hZ2VPdXRzZXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tCb3hJbWFnZVJlcGVhdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdl
U2xpY2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlV2lkdGg6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tDbGlwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ29t
cG9zaXRlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2U6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW46CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tQb3NpdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza1JlcGVhdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVh
dFg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXNrU2l6ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF0Y2hO
ZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TmJz
cE1vZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpblg6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0UHJpbnRDb2xvckFkanVzdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJl
YWtBZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRSZWdpb25PdmVyZmxvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
UnRsT3JkZXJpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRDb21iaW5lOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvcjoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRleHRFbXBoYXNpc1N0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0Rmls
bENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0T3JpZW50YXRpb246CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1cml0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dFN0cm9rZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zv
cm1PcmlnaW46CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblg6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblk6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVs
YXk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5OgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFVzZXJEcmFnOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyTW9kaWZ5Ogor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0OgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRXcmFwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwRmxvdzoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcE1hcmdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0V3JhcFBhZGRpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBUaHJvdWdoOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXaWRv
d3M6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXb3Jk
QnJlYWs6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXb3JkV3JhcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5WkluZGV4OgorICAgIGNhc2UgQ1NT
UHJvcGVydHlab29tOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuOworI2lmIEVOQUJMRShTVkcpCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gVHJ5IHRoZSBT
VkcgcHJvcGVydGllcworICAgICAgICBhcHBseVNWR1Byb3BlcnR5KGlkLCB2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyNlbmRpZgorICAgIH0KK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBG
aWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSog
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGxh
eWVyLT5zZXRBdHRhY2htZW50KEZpbGxMYXllcjo6aW5pdGlhbEZpbGxBdHRhY2htZW50KGxheWVy
LT50eXBlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7CisgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgICAgICBj
YXNlIENTU1ZhbHVlRml4ZWQ6CisgICAgICAgICAgICBsYXllci0+c2V0QXR0YWNobWVudChGaXhl
ZEJhY2tncm91bmRBdHRhY2htZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENTU1ZhbHVlU2Nyb2xsOgorICAgICAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQoU2Nyb2xs
QmFja2dyb3VuZEF0dGFjaG1lbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q1NTVmFsdWVMb2NhbDoKKyAgICAgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KExvY2FsQmFj
a2dyb3VuZEF0dGFjaG1lbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
cEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXIt
PnNldENsaXAoRmlsbExheWVyOjppbml0aWFsRmlsbENsaXAobGF5ZXItPnR5cGUoKSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBsYXllci0+
c2V0Q2xpcCgqcHJpbWl0aXZlVmFsdWUpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZp
bGxDb21wb3NpdGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXll
ci0+c2V0Q29tcG9zaXRlKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUobGF5ZXItPnR5
cGUoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsK
KyAgICBsYXllci0+c2V0Q29tcG9zaXRlKCpwcmltaXRpdmVWYWx1ZSk7Cit9CisKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6bWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7
CisgICAgICAgIGxheWVyLT5zZXRPcmlnaW4oRmlsbExheWVyOjppbml0aWFsRmlsbE9yaWdpbihs
YXllci0+dHlwZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOworICAgIGxheWVyLT5zZXRPcmlnaW4oKnByaW1pdGl2ZVZhbHVlKTsKK30KKworUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW1hZ2VW
YWx1ZSgpKQorICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5
LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4odmFsdWUpKTsKKworICAgIGlmICh2YWx1ZS0+
aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpCisgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRp
bmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUq
Pih2YWx1ZSkpOworCisjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCisgICAgaWYgKHZhbHVlLT5p
c0ltYWdlU2V0VmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zyb21WYWx1ZShw
cm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7CisjZW5kaWYK
KworICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2
ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJ
bWFnZVZhbHVlKiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1
ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKKyAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVu
ZGluZ0ltYWdlKCkpCisgICAgICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5hZGQocHJvcGVy
dHkpOworICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsKKyAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LmFkZChwcm9wZXJ0eSk7CisgICAgICAgIHJldHVybiBTdHlsZVBlbmRpbmdJbWFnZTo6Y3JlYXRl
KHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSh2
YWx1ZSk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKK1Bhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUqIHZhbHVlKQoreworICAgIFJlZlB0cjxTdHlsZUlt
YWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZVNldChkb2N1bWVudCgpKTsK
KyAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgIG1fcGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5hZGQocHJvcGVydHkpOworICAgIHJldHVybiBpbWFnZS5yZWxl
YXNlKCk7Cit9CisjZW5kaWYKKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBGaWxsSW1hZ2UoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0
SW1hZ2UoRmlsbExheWVyOjppbml0aWFsRmlsbEltYWdlKGxheWVyLT50eXBlKCkpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGxheWVyLT5zZXRJbWFnZShzdHlsZUltYWdlKHByb3Bl
cnR5LCB2YWx1ZSkpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxSZXBlYXRYKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldFJlcGVhdFgo
RmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFgobGF5ZXItPnR5cGUoKSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBsYXllci0+c2V0UmVw
ZWF0WCgqcHJpbWl0aXZlVmFsdWUpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxS
ZXBlYXRZKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXItPnNl
dFJlcGVhdFkoRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFkobGF5ZXItPnR5cGUoKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBsYXll
ci0+c2V0UmVwZWF0WSgqcHJpbWl0aXZlVmFsdWUpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hcEZpbGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAg
bGF5ZXItPnNldFNpemVUeXBlKFNpemVOb25lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZUNvbnRhaW4pCisgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShDb250YWlu
KTsKKyAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNv
dmVyKQorICAgICAgICBsYXllci0+c2V0U2l6ZVR5cGUoQ292ZXIpOworICAgIGVsc2UKKyAgICAg
ICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVMZW5ndGgpOworCisgICAgTGVuZ3RoU2l6ZSBiID0g
RmlsbExheWVyOjppbml0aWFsRmlsbFNpemVMZW5ndGgobGF5ZXItPnR5cGUoKSk7CisKKyAgICBp
ZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVDb250YWluIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlQ292ZXIpIHsKKyAgICAgICAgbGF5ZXItPnNldFNpemVMZW5ndGgoYik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZl
Wm9vbSgpOworCisgICAgTGVuZ3RoIGZpcnN0TGVuZ3RoOworICAgIExlbmd0aCBzZWNvbmRMZW5n
dGg7CisKKyAgICBpZiAoUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUo
KSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3QgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0KCkpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogc2Vjb25kID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5zZWNvbmQo
KSk7CisgICAgICAgIGZpcnN0TGVuZ3RoID0gZmlyc3QtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252
ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAg
ICBzZWNvbmRMZW5ndGggPSBzZWNvbmQtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGZpcnN0TGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxBbnlD
b252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAg
ICAgICBzZWNvbmRMZW5ndGggPSBMZW5ndGgoKTsKKyAgICB9CisKKyAgICBpZiAoZmlyc3RMZW5n
dGguaXNVbmRlZmluZWQoKSB8fCBzZWNvbmRMZW5ndGguaXNVbmRlZmluZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYi5zZXRXaWR0aChmaXJzdExlbmd0aCk7CisgICAgYi5zZXRIZWlnaHQo
c2Vjb25kTGVuZ3RoKTsKKyAgICBsYXllci0+c2V0U2l6ZUxlbmd0aChiKTsKK30KKwordm9pZCBT
dHlsZVJlc29sdmVyOjptYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciog
bGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVl
KCkpIHsKKyAgICAgICAgbGF5ZXItPnNldFhQb3NpdGlvbihGaWxsTGF5ZXI6OmluaXRpYWxGaWxs
WFBvc2l0aW9uKGxheWVyLT50eXBlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKworICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOworICAgIExlbmd0aCBsOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNM
ZW5ndGgoKSkKKyAgICAgICAgbCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgIGwgPSBMZW5ndGgocHJp
bWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOworICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQorICAgICAg
ICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUo
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7CisgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCisgICAgICAgIGwg
PSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm47CisgICAgbGF5ZXItPnNldFhQb3NpdGlvbihsKTsKK30KKwordm9pZCBT
dHlsZVJlc29sdmVyOjptYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciog
bGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVl
KCkpIHsKKyAgICAgICAgbGF5ZXItPnNldFlQb3NpdGlvbihGaWxsTGF5ZXI6OmluaXRpYWxGaWxs
WVBvc2l0aW9uKGxheWVyLT50eXBlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKworICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOworICAgIExlbmd0aCBsOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNM
ZW5ndGgoKSkKKyAgICAgICAgbCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgIGwgPSBMZW5ndGgocHJp
bWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOworICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQorICAgICAg
ICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUo
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7CisgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCisgICAgICAgIGwg
PSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm47CisgICAgbGF5ZXItPnNldFlQb3NpdGlvbihsKTsKK30KKwordm9pZCBT
dHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NT
VmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAg
ICAgICBhbmltYXRpb24tPnNldERlbGF5KEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAg
ICBhbmltYXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxmbG9hdCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGxheWVyLT5z
ZXREaXJlY3Rpb24oQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGlyZWN0aW9uKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBzd2l0Y2gg
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoK
KyAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlv
bk5vcm1hbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVBbHRlcm5hdGU6Cisg
ICAgICAgIGxheWVyLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25B
bHRlcm5hdGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlUmV2ZXJzZToKKyAg
ICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJl
dmVyc2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlQWx0ZXJuYXRlUmV2ZXJz
ZToKKyAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVj
dGlvbkFsdGVybmF0ZVJldmVyc2UpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uRHVyYXRpb24oQW5pbWF0aW9uKiBhbmltYXRpb24s
IENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsK
KyAgICAgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihBbmltYXRpb246OmluaXRpYWxBbmltYXRp
b25EdXJhdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZVRpbWU8ZmxvYXQsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNvbmRzPigpKTsKK30KKwordm9pZCBT
dHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qIGxheWVyLCBDU1NW
YWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAg
ICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25GaWxsTW9k
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Cisg
ICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgIGNhc2UgQ1NTVmFs
dWVOb25lOgorICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9uRmlsbE1vZGVOb25l
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUZvcndhcmRzOgorICAgICAgICBs
YXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9uRmlsbE1vZGVGb3J3YXJkcyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ1NTVmFsdWVCYWNrd2FyZHM6CisgICAgICAgIGxheWVyLT5zZXRGaWxs
TW9kZShBbmltYXRpb25GaWxsTW9kZUJhY2t3YXJkcyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ1NTVmFsdWVCb3RoOgorICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9uRmls
bE1vZGVCb3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NW
YWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAg
ICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0
aW9uSXRlcmF0aW9uQ291bnQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZUluZmluaXRlKQorICAgICAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50KC0xKTsK
KyAgICBlbHNlCisgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQocHJpbWl0aXZl
VmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5p
bWF0aW9uTmFtZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGxheWVyLT5zZXROYW1lKEFuaW1h
dGlvbjo6aW5pdGlhbEFuaW1hdGlvbk5hbWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgIGxheWVyLT5zZXRJc05vbmVBbmltYXRpb24odHJ1
ZSk7CisgICAgZWxzZQorICAgICAgICBsYXllci0+c2V0TmFtZShwcmltaXRpdmVWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uUGxh
eVN0YXRlKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldFBsYXlTdGF0ZShBbmlt
YXRpb246OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIEVBbmltUGxheVN0YXRlIHBsYXlTdGF0
ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVBhdXNlZCkgPyBBbmlt
UGxheVN0YXRlUGF1c2VkIDogQW5pbVBsYXlTdGF0ZVBsYXlpbmc7CisgICAgbGF5ZXItPnNldFBs
YXlTdGF0ZShwbGF5U3RhdGUpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlv
blByb3BlcnR5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5p
bWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVBbGwpOworICAgICAgICBhbmltYXRpb24tPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZUFsbCkgeworICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbk1vZGUo
QW5pbWF0aW9uOjpBbmltYXRlQWxsKTsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUludmFsaWQpOworICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9u
TW9kZShBbmltYXRpb246OkFuaW1hdGVOb25lKTsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFuaW1hdGlv
bi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVTaW5nbGVQcm9wZXJ0eSk7Cisg
ICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4o
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENT
U1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAg
ICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihBbmltYXRpb246OmluaXRpYWxBbmlt
YXRpb25UaW1pbmdGdW5jdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
OworICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlTGluZWFyOgorICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0
VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlOgorICAgICAgICAg
ICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbjo6Y3JlYXRlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUVhc2VJbjoKKyAgICAgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1
bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgwLjQyLCAwLjAsIDEuMCwg
MS4wKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
RWFzZU91dDoKKyAgICAgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgwLjAsIDAuMCwgMC41OCwgMS4wKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRWFzZUluT3V0
OgorICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDAuNDIsIDAuMCwgMC41OCwgMS4wKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU3RlcFN0YXJ0OgorICAg
ICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5j
dGlvbjo6Y3JlYXRlKDEsIHRydWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVTdGVwRW5kOgorICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0
VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDEsIGZhbHNlKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICh2YWx1ZS0+aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoKSkgewor
ICAgICAgICBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUqIGN1YmljVGltaW5nRnVu
Y3Rpb24gPSBzdGF0aWNfY2FzdDxDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUqPih2
YWx1ZSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKGN1YmljVGltaW5nRnVuY3Rpb24tPngxKCksIGN1YmljVGlt
aW5nRnVuY3Rpb24tPnkxKCksIGN1YmljVGltaW5nRnVuY3Rpb24tPngyKCksIGN1YmljVGltaW5n
RnVuY3Rpb24tPnkyKCkpKTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc1N0ZXBzVGltaW5nRnVu
Y3Rpb25WYWx1ZSgpKSB7CisgICAgICAgIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSogc3Rl
cHNUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1
ZSo+KHZhbHVlKTsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihTdGVwc1Rp
bWluZ0Z1bmN0aW9uOjpjcmVhdGUoc3RlcHNUaW1pbmdGdW5jdGlvbi0+bnVtYmVyT2ZTdGVwcygp
LCBzdGVwc1RpbWluZ0Z1bmN0aW9uLT5zdGVwQXRTdGFydCgpKSk7CisgICAgfSBlbHNlIGlmICh2
YWx1ZS0+aXNMaW5lYXJUaW1pbmdGdW5jdGlvblZhbHVlKCkpCisgICAgICAgIGFuaW1hdGlvbi0+
c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKK30KKwor
dm9pZCBTdHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5LCBDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKK3sKKyAgICAvLyBJ
ZiB3ZSdyZSBub3QgYSB2YWx1ZSBsaXN0LCB0aGVuIHdlIGFyZSAibm9uZSIgYW5kIGRvbid0IG5l
ZWQgdG8gYWx0ZXIgdGhlIGVtcHR5IGltYWdlIGF0IGFsbC4KKyAgICBpZiAoIXZhbHVlIHx8ICF2
YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUmV0cmlldmUg
dGhlIGJvcmRlciBpbWFnZSB2YWx1ZS4KKyAgICBDU1NWYWx1ZUxpc3QqIGJvcmRlckltYWdlID0g
c3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOworCisgICAgLy8gU2V0IHRoZSBpbWFn
ZSAodGhpcyBraWNrcyBvZmYgdGhlIGxvYWQpLgorICAgIENTU1Byb3BlcnR5SUQgaW1hZ2VQcm9w
ZXJ0eTsKKyAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFnZSkK
KyAgICAgICAgaW1hZ2VQcm9wZXJ0eSA9IENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U7Cisg
ICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2UpCisg
ICAgICAgIGltYWdlUHJvcGVydHkgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJj
ZTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlUHJvcGVydHkgPSBwcm9wZXJ0eTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDAgOyBpIDwgYm9yZGVySW1hZ2UtPmxlbmd0aCgpIDsgKytpKSB7Cisg
ICAgICAgIENTU1ZhbHVlKiBjdXJyZW50ID0gYm9yZGVySW1hZ2UtPml0ZW0oaSk7CisKKyAgICAg
ICAgaWYgKGN1cnJlbnQtPmlzSW1hZ2VWYWx1ZSgpIHx8IGN1cnJlbnQtPmlzSW1hZ2VHZW5lcmF0
b3JWYWx1ZSgpCisjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCisgICAgICAgICAgICB8fCBjdXJy
ZW50LT5pc0ltYWdlU2V0VmFsdWUoKQorI2VuZGlmCisgICAgICAgICAgICApCisgICAgICAgICAg
ICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdlUHJvcGVydHksIGN1cnJlbnQpKTsKKyAg
ICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKKyAgICAg
ICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoY3VycmVudCwgaW1hZ2UpOworICAgICAgICBl
bHNlIGlmIChjdXJyZW50LT5pc1ZhbHVlTGlzdCgpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZUxp
c3QqIHNsYXNoTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KGN1cnJlbnQpOworICAg
ICAgICAgICAgLy8gTWFwIGluIHRoZSBpbWFnZSBzbGljZXMuCisgICAgICAgICAgICBpZiAoc2xh
c2hMaXN0LT5pdGVtKDApICYmIHNsYXNoTGlzdC0+aXRlbSgwKS0+aXNCb3JkZXJJbWFnZVNsaWNl
VmFsdWUoKSkKKyAgICAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKHNsYXNoTGlz
dC0+aXRlbSgwKSwgaW1hZ2UpOworCisgICAgICAgICAgICAvLyBNYXAgaW4gdGhlIGJvcmRlciBz
bGljZXMuCisgICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5pdGVtKDEpKQorICAgICAgICAgICAg
ICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhtYXBOaW5lUGllY2VJbWFnZVF1YWQoc2xhc2hMaXN0
LT5pdGVtKDEpKSk7CisKKyAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgb3V0c2V0LgorICAgICAg
ICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgyKSkKKyAgICAgICAgICAgICAgICBpbWFnZS5zZXRP
dXRzZXQobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC0+aXRlbSgyKSkpOworICAgICAg
ICB9IGVsc2UgaWYgKGN1cnJlbnQtPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAg
Ly8gU2V0IHRoZSBhcHByb3ByaWF0ZSBydWxlcyBmb3Igc3RyZXRjaC9yb3VuZC9yZXBlYXQgb2Yg
dGhlIHNsaWNlcy4KKyAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KGN1cnJlbnQs
IGltYWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckltYWdlKSB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gcHJlc2VydmUg
dGhlIGxlZ2FjeSBiZWhhdmlvciBvZiAtd2Via2l0LWJvcmRlci1pbWFnZSBhbmQgbWFrZSB0aGUg
Ym9yZGVyIHNsaWNlcworICAgICAgICAvLyBhbHNvIHNldCB0aGUgYm9yZGVyIHdpZHRocy4gV2Ug
ZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBwZXJjZW50YWdlcywgc2luY2Ugd2UgZG9uJ3QgZXZl
biBzdXBwb3J0CisgICAgICAgIC8vIHRob3NlIG9uIHJlYWwgYm9yZGVycyB5ZXQuCisgICAgICAg
IGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS50b3AoKS5pc0ZpeGVkKCkpCisgICAgICAgICAgICBz
dHlsZSgpLT5zZXRCb3JkZXJUb3BXaWR0aChpbWFnZS5ib3JkZXJTbGljZXMoKS50b3AoKS52YWx1
ZSgpKTsKKyAgICAgICAgaWYgKGltYWdlLmJvcmRlclNsaWNlcygpLnJpZ2h0KCkuaXNGaXhlZCgp
KQorICAgICAgICAgICAgc3R5bGUoKS0+c2V0Qm9yZGVyUmlnaHRXaWR0aChpbWFnZS5ib3JkZXJT
bGljZXMoKS5yaWdodCgpLnZhbHVlKCkpOworICAgICAgICBpZiAoaW1hZ2UuYm9yZGVyU2xpY2Vz
KCkuYm90dG9tKCkuaXNGaXhlZCgpKQorICAgICAgICAgICAgc3R5bGUoKS0+c2V0Qm9yZGVyQm90
dG9tV2lkdGgoaW1hZ2UuYm9yZGVyU2xpY2VzKCkuYm90dG9tKCkudmFsdWUoKSk7CisgICAgICAg
IGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS5sZWZ0KCkuaXNGaXhlZCgpKQorICAgICAgICAgICAg
c3R5bGUoKS0+c2V0Qm9yZGVyTGVmdFdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLmxlZnQoKS52
YWx1ZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwTmluZVBpZWNlSW1h
Z2VTbGljZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKK3sKKyAgICBp
ZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gUmV0cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1ZS4KKyAgICBD
U1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUqIGJvcmRlckltYWdlU2xpY2UgPSBzdGF0aWNfY2FzdDxD
U1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUqPih2YWx1ZSk7CisKKyAgICAvLyBTZXQgdXAgYSBsZW5n
dGggYm94IHRvIHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xpY2VzLgorICAgIExlbmd0aEJveCBib3g7
CisgICAgUXVhZCogc2xpY2VzID0gYm9yZGVySW1hZ2VTbGljZS0+c2xpY2VzKCk7CisgICAgaWYg
KHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQorICAgICAgICBib3gubV90b3AgPSBMZW5n
dGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgZWxzZQor
ICAgICAgICBib3gubV90b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0SW50VmFsdWUoQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7CisgICAgaWYgKHNsaWNlcy0+Ym90
dG9tKCktPmlzUGVyY2VudGFnZSgpKQorICAgICAgICBib3gubV9ib3R0b20gPSBMZW5ndGgoc2xp
Y2VzLT5ib3R0b20oKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgZWxzZQorICAg
ICAgICBib3gubV9ib3R0b20gPSBMZW5ndGgoKGludClzbGljZXMtPmJvdHRvbSgpLT5nZXRGbG9h
dFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4ZWQpOworICAgIGlmIChz
bGljZXMtPmxlZnQoKS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgIGJveC5tX2xlZnQgPSBMZW5n
dGgoc2xpY2VzLT5sZWZ0KCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOworICAgIGVsc2UK
KyAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0SW50VmFsdWUo
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7CisgICAgaWYgKHNsaWNlcy0+
cmlnaHQoKS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgIGJveC5tX3JpZ2h0ID0gTGVuZ3RoKHNs
aWNlcy0+cmlnaHQoKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgZWxzZQorICAg
ICAgICBib3gubV9yaWdodCA9IExlbmd0aChzbGljZXMtPnJpZ2h0KCktPmdldEludFZhbHVlKENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4ZWQpOworICAgIGltYWdlLnNldEltYWdl
U2xpY2VzKGJveCk7CisKKyAgICAvLyBTZXQgb3VyIGZpbGwgbW9kZS4KKyAgICBpbWFnZS5zZXRG
aWxsKGJvcmRlckltYWdlU2xpY2UtPm1fZmlsbCk7Cit9CisKK0xlbmd0aEJveCBTdHlsZVJlc29s
dmVyOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICgh
dmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBMZW5n
dGhCb3goKTsKKworICAgIC8vIEdldCBvdXIgem9vbSB2YWx1ZS4KKyAgICBmbG9hdCB6b29tID0g
dXNlU1ZHWm9vbVJ1bGVzKCkgPyAxLjBmIDogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworCisg
ICAgLy8gUmV0cmlldmUgdGhlIHByaW1pdGl2ZSB2YWx1ZS4KKyAgICBDU1NQcmltaXRpdmVWYWx1
ZSogYm9yZGVyV2lkdGhzID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CisKKyAgICAvLyBTZXQgdXAgYSBsZW5ndGggYm94IHRvIHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xp
Y2VzLgorICAgIExlbmd0aEJveCBib3g7IC8vIERlZmF1bHRzIHRvICdhdXRvJyBzbyB3ZSBkb24n
dCBoYXZlIHRvIGhhbmRsZSB0aGF0IGV4cGxpY2l0bHkgYmVsb3cuCisgICAgUXVhZCogc2xpY2Vz
ID0gYm9yZGVyV2lkdGhzLT5nZXRRdWFkVmFsdWUoKTsKKyAgICBpZiAoc2xpY2VzLT50b3AoKS0+
aXNOdW1iZXIoKSkKKyAgICAgICAgYm94Lm1fdG9wID0gTGVuZ3RoKHNsaWNlcy0+dG9wKCktPmdl
dEludFZhbHVlKCksIFJlbGF0aXZlKTsKKyAgICBlbHNlIGlmIChzbGljZXMtPnRvcCgpLT5pc1Bl
cmNlbnRhZ2UoKSkKKyAgICAgICAgYm94Lm1fdG9wID0gTGVuZ3RoKHNsaWNlcy0+dG9wKCktPmdl
dERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQp
OworICAgIGVsc2UgaWYgKHNsaWNlcy0+dG9wKCktPmdldElkZW50KCkgIT0gQ1NTVmFsdWVBdXRv
KQorICAgICAgICBib3gubV90b3AgPSBzbGljZXMtPnRvcCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKKworICAgIGlmIChzbGljZXMt
PnJpZ2h0KCktPmlzTnVtYmVyKCkpCisgICAgICAgIGJveC5tX3JpZ2h0ID0gTGVuZ3RoKHNsaWNl
cy0+cmlnaHQoKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOworICAgIGVsc2UgaWYgKHNsaWNl
cy0+cmlnaHQoKS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgIGJveC5tX3JpZ2h0ID0gTGVuZ3Ro
KHNsaWNlcy0+cmlnaHQoKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
RVJDRU5UQUdFKSwgUGVyY2VudCk7CisgICAgZWxzZSBpZiAoc2xpY2VzLT5yaWdodCgpLT5nZXRJ
ZGVudCgpICE9IENTU1ZhbHVlQXV0bykKKyAgICAgICAgYm94Lm1fcmlnaHQgPSBzbGljZXMtPnJp
Z2h0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCks
IHpvb20pOworCisgICAgaWYgKHNsaWNlcy0+Ym90dG9tKCktPmlzTnVtYmVyKCkpCisgICAgICAg
IGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgpLT5nZXRJbnRWYWx1ZSgpLCBS
ZWxhdGl2ZSk7CisgICAgZWxzZSBpZiAoc2xpY2VzLT5ib3R0b20oKS0+aXNQZXJjZW50YWdlKCkp
CisgICAgICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgpLT5nZXREb3Vi
bGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50KTsKKyAg
ICBlbHNlIGlmIChzbGljZXMtPmJvdHRvbSgpLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlQXV0bykK
KyAgICAgICAgYm94Lm1fYm90dG9tID0gc2xpY2VzLT5ib3R0b20oKS0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CisKKyAgICBpZiAoc2xp
Y2VzLT5sZWZ0KCktPmlzTnVtYmVyKCkpCisgICAgICAgIGJveC5tX2xlZnQgPSBMZW5ndGgoc2xp
Y2VzLT5sZWZ0KCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKKyAgICBlbHNlIGlmIChzbGlj
ZXMtPmxlZnQoKS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgIGJveC5tX2xlZnQgPSBMZW5ndGgo
c2xpY2VzLT5sZWZ0KCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVS
Q0VOVEFHRSksIFBlcmNlbnQpOworICAgIGVsc2UgaWYgKHNsaWNlcy0+bGVmdCgpLT5nZXRJZGVu
dCgpICE9IENTU1ZhbHVlQXV0bykKKyAgICAgICAgYm94Lm1fbGVmdCA9IHNsaWNlcy0+bGVmdCgp
LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6b29t
KTsKKworICAgIHJldHVybiBib3g7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwTmluZVBp
ZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCit7
CisgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgUGFpciogcGFpciA9IHByaW1p
dGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKKyAgICBpZiAoIXBhaXIgfHwgIXBhaXItPmZpcnN0
KCkgfHwgIXBhaXItPnNlY29uZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgZmlyc3RJ
ZGVudGlmaWVyID0gcGFpci0+Zmlyc3QoKS0+Z2V0SWRlbnQoKTsKKyAgICBpbnQgc2Vjb25kSWRl
bnRpZmllciA9IHBhaXItPnNlY29uZCgpLT5nZXRJZGVudCgpOworCisgICAgRU5pbmVQaWVjZUlt
YWdlUnVsZSBob3Jpem9udGFsUnVsZTsKKyAgICBzd2l0Y2ggKGZpcnN0SWRlbnRpZmllcikgewor
ICAgIGNhc2UgQ1NTVmFsdWVTdHJldGNoOgorICAgICAgICBob3Jpem9udGFsUnVsZSA9IFN0cmV0
Y2hJbWFnZVJ1bGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVSb3VuZDoKKyAg
ICAgICAgaG9yaXpvbnRhbFJ1bGUgPSBSb3VuZEltYWdlUnVsZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDU1NWYWx1ZVNwYWNlOgorICAgICAgICBob3Jpem9udGFsUnVsZSA9IFNwYWNlSW1h
Z2VSdWxlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAvLyBDU1NWYWx1ZVJlcGVhdAor
ICAgICAgICBob3Jpem9udGFsUnVsZSA9IFJlcGVhdEltYWdlUnVsZTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGltYWdlLnNldEhvcml6b250YWxSdWxlKGhvcml6b250YWxSdWxlKTsKKwor
ICAgIEVOaW5lUGllY2VJbWFnZVJ1bGUgdmVydGljYWxSdWxlOworICAgIHN3aXRjaCAoc2Vjb25k
SWRlbnRpZmllcikgeworICAgIGNhc2UgQ1NTVmFsdWVTdHJldGNoOgorICAgICAgICB2ZXJ0aWNh
bFJ1bGUgPSBTdHJldGNoSW1hZ2VSdWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Zh
bHVlUm91bmQ6CisgICAgICAgIHZlcnRpY2FsUnVsZSA9IFJvdW5kSW1hZ2VSdWxlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlU3BhY2U6CisgICAgICAgIHZlcnRpY2FsUnVsZSA9
IFNwYWNlSW1hZ2VSdWxlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAvLyBDU1NWYWx1
ZVJlcGVhdAorICAgICAgICB2ZXJ0aWNhbFJ1bGUgPSBSZXBlYXRJbWFnZVJ1bGU7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBpbWFnZS5zZXRWZXJ0aWNhbFJ1bGUodmVydGljYWxSdWxlKTsK
K30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KCkKK3sKKyAg
ICBpZiAobV9zdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Rm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihtX3N0eWxlLT5mb250RGVzY3JpcHRp
b24oKSk7CisgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVz
Y3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpKTsKKyAgICBtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRp
b24obmV3Rm9udERlc2NyaXB0aW9uKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zv
clpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
Cit7CisgICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkgPT0gcGFyZW50U3R5bGUtPmVmZmVj
dGl2ZVpvb20oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgRm9udERlc2NyaXB0
aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOworICAgIHNldEZvbnRTaXplKG5ld0Zv
bnREZXNjcmlwdGlvbiwgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSk7CisgICAgc3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOworfQorCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3sKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNo
aWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKworICAgIGlmIChjaGlsZEZvbnQu
aXNBYnNvbHV0ZVNpemUoKSB8fCAhcGFyZW50U3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udCA9IHBhcmVudFN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKTsKKyAgICBpZiAoY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSA9PSBw
YXJlbnRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRm9yIG5vdywgbHVtcCBhbGwgZmFtaWxpZXMgYnV0IG1vbm9zcGFjZSB0b2dldGhlci4KKyAg
ICBpZiAoY2hpbGRGb250LmdlbmVyaWNGYW1pbHkoKSAhPSBGb250RGVzY3JpcHRpb246Ok1vbm9z
cGFjZUZhbWlseSAmJgorICAgICAgICBwYXJlbnRGb250LmdlbmVyaWNGYW1pbHkoKSAhPSBGb250
RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
V2Uga25vdyB0aGUgcGFyZW50IGlzIG1vbm9zcGFjZSBvciB0aGUgY2hpbGQgaXMgbW9ub3NwYWNl
LCBhbmQgdGhhdCBmb250CisgICAgLy8gc2l6ZSB3YXMgdW5zcGVjaWZpZWQuICBXZSB3YW50IHRv
IHNjYWxlIG91ciBmb250IHNpemUgYXMgYXBwcm9wcmlhdGUuCisgICAgLy8gSWYgdGhlIGZvbnQg
dXNlcyBhIGtleXdvcmQgc2l6ZSwgdGhlbiB3ZSByZWZldGNoIGZyb20gdGhlIHRhYmxlIHJhdGhl
ciB0aGFuCisgICAgLy8gbXVsdGlwbHlpbmcgYnkgb3VyIHNjYWxlIGZhY3Rvci4KKyAgICBmbG9h
dCBzaXplOworICAgIGlmIChjaGlsZEZvbnQua2V5d29yZFNpemUoKSkKKyAgICAgICAgc2l6ZSA9
IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxs
ICsgY2hpbGRGb250LmtleXdvcmRTaXplKCkgLSAxLCBjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0
U2l6ZSgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVj
a2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7CisgICAgICAgIGZsb2F0IGZpeGVkU2NhbGVGYWN0
b3IgPSBzZXR0aW5ncworICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxmbG9hdD4oc2V0dGluZ3Mt
PmRlZmF1bHRGaXhlZEZvbnRTaXplKCkpIC8gc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpCisg
ICAgICAgICAgICA6IDE7CisgICAgICAgIHNpemUgPSBwYXJlbnRGb250LnVzZUZpeGVkRGVmYXVs
dFNpemUoKSA/CisgICAgICAgICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSAvIGZp
eGVkU2NhbGVGYWN0b3IgOgorICAgICAgICAgICAgICAgIGNoaWxkRm9udC5zcGVjaWZpZWRTaXpl
KCkgKiBmaXhlZFNjYWxlRmFjdG9yOworICAgIH0KKworICAgIEZvbnREZXNjcmlwdGlvbiBuZXdG
b250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKKyAgICBzZXRGb250U2l6ZShuZXdGb250RGVzY3Jp
cHRpb24sIHNpemUpOworICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2Ny
aXB0aW9uKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKK3sKKyAgICBmb250RGVzY3JpcHRp
b24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0
ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tlci5kb2N1bWVu
dCgpLCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6
ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKK30KKworZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29t
cHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJTdHls
ZSogc3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wg
dXNlU1ZHWm9vbVJ1bGVzKQoreworICAgIGZsb2F0IHpvb21GYWN0b3IgPSAxLjBmOworICAgIGlm
ICghdXNlU1ZHWm9vbVJ1bGVzKSB7CisgICAgICAgIHpvb21GYWN0b3IgPSBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpOworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkp
CisgICAgICAgICAgICB6b29tRmFjdG9yICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOworICAg
IH0KKworICAgIHJldHVybiBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lm
aWVkU2l6ZShkb2N1bWVudCwgem9vbUZhY3RvciwgaXNBYnNvbHV0ZVNpemUsIHNwZWNpZmllZFNp
emUpOworfQorCitmbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lm
aWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGZsb2F0IHpvb21GYWN0b3IsIGJvb2wgaXNBYnNv
bHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSB1
c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSkKK3sKKyAgICAvLyBUZXh0IHdpdGggYSAwcHggZm9u
dCBzaXplIHNob3VsZCBub3QgYmUgdmlzaWJsZSBhbmQgdGhlcmVmb3JlIG5lZWRzIHRvIGJlCisg
ICAgLy8gZXhlbXB0IGZyb20gbWluaW11bSBmb250IHNpemUgcnVsZXMuIEFjaWQzIHJlbGllcyBv
biB0aGlzIGZvciBwaXhlbC1wZXJmZWN0CisgICAgLy8gcmVuZGVyaW5nLiBUaGlzIGlzIGFsc28g
Y29tcGF0aWJsZSB3aXRoIG90aGVyIGJyb3dzZXJzIHRoYXQgaGF2ZSBtaW5pbXVtCisgICAgLy8g
Zm9udCBzaXplIHNldHRpbmdzIChlLmcuIEZpcmVmb3gpLgorICAgIGlmIChmYWJzZihzcGVjaWZp
ZWRTaXplKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCkpCisgICAgICAg
IHJldHVybiAwLjBmOworCisgICAgLy8gV2Ugc3VwcG9ydCB0d28gdHlwZXMgb2YgbWluaW11bSBm
b250IHNpemUuICBUaGUgZmlyc3QgaXMgYSBoYXJkIG92ZXJyaWRlIHRoYXQgYXBwbGllcyB0bwor
ICAgIC8vIGFsbCBmb250cy4gIFRoaXMgaXMgIm1pblNpemUuIiAgVGhlIHNlY29uZCB0eXBlIG9m
IG1pbmltdW0gZm9udCBzaXplIGlzIGEgInNtYXJ0IG1pbmltdW0iCisgICAgLy8gdGhhdCBpcyBh
cHBsaWVkIG9ubHkgd2hlbiB0aGUgV2ViIHBhZ2UgY2FuJ3Qga25vdyB3aGF0IHNpemUgaXQgcmVh
bGx5IGFza2VkIGZvciwgZS5nLiwKKyAgICAvLyB3aGVuIGl0IHVzZXMgbG9naWNhbCBzaXplcyBs
aWtlICJzbWFsbCIgb3IgZXhwcmVzc2VzIHRoZSBmb250LXNpemUgYXMgYSBwZXJjZW50YWdlIG9m
CisgICAgLy8gdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgc2V0dGluZy4KKworICAgIC8vIFdpdGgg
dGhlIHNtYXJ0IG1pbmltdW0sIHdlIG5ldmVyIHdhbnQgdG8gZ2V0IHNtYWxsZXIgdGhhbiB0aGUg
bWluaW11bSBmb250IHNpemUgdG8ga2VlcCBmb250cyByZWFkYWJsZS4KKyAgICAvLyBIb3dldmVy
IHdlIGFsd2F5cyBhbGxvdyB0aGUgcGFnZSB0byBzZXQgYW4gZXhwbGljaXQgcGl4ZWwgc2l6ZSB0
aGF0IGlzIHNtYWxsZXIsCisgICAgLy8gc2luY2Ugc2l0ZXMgd2lsbCBtaXMtcmVuZGVyIG90aGVy
d2lzZSAoZS5nLiwgaHR0cDovL3d3dy5nYW1lc3BvdC5jb20gd2l0aCBhIDlweCBtaW5pbXVtKS4K
KworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOworICAgIGlm
ICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiAxLjBmOworCisgICAgaW50IG1pblNpemUgPSBz
ZXR0aW5ncy0+bWluaW11bUZvbnRTaXplKCk7CisgICAgaW50IG1pbkxvZ2ljYWxTaXplID0gc2V0
dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKKyAgICBmbG9hdCB6b29tZWRTaXplID0g
c3BlY2lmaWVkU2l6ZSAqIHpvb21GYWN0b3I7CisKKyAgICAvLyBBcHBseSB0aGUgaGFyZCBtaW5p
bXVtIGZpcnN0LiAgV2Ugb25seSBhcHBseSB0aGUgaGFyZCBtaW5pbXVtIGlmIGFmdGVyIHpvb21p
bmcgd2UncmUgc3RpbGwgdG9vIHNtYWxsLgorICAgIGlmICh6b29tZWRTaXplIDwgbWluU2l6ZSkK
KyAgICAgICAgem9vbWVkU2l6ZSA9IG1pblNpemU7CisKKyAgICAvLyBOb3cgYXBwbHkgdGhlICJz
bWFydCBtaW5pbXVtLiIgIFRoaXMgbWluaW11bSBpcyBhbHNvIG9ubHkgYXBwbGllZCBpZiB3ZSdy
ZSBzdGlsbCB0b28gc21hbGwKKyAgICAvLyBhZnRlciB6b29taW5nLiAgVGhlIGZvbnQgc2l6ZSBt
dXN0IGVpdGhlciBiZSByZWxhdGl2ZSB0byB0aGUgdXNlciBkZWZhdWx0IG9yIHRoZSBvcmlnaW5h
bCBzaXplCisgICAgLy8gbXVzdCBoYXZlIGJlZW4gYWNjZXB0YWJsZS4gIEluIG90aGVyIHdvcmRz
LCB3ZSBvbmx5IGFwcGx5IHRoZSBzbWFydCBtaW5pbXVtIHdoZW5ldmVyIHdlJ3JlIHBvc2l0aXZl
CisgICAgLy8gZG9pbmcgc28gd29uJ3QgZGlzcnVwdCB0aGUgbGF5b3V0LgorICAgIGlmICh1c2VT
bWFydE1pbmltdW1Gb3JGb250U2l6ZSAmJiB6b29tZWRTaXplIDwgbWluTG9naWNhbFNpemUgJiYg
KHNwZWNpZmllZFNpemUgPj0gbWluTG9naWNhbFNpemUgfHwgIWlzQWJzb2x1dGVTaXplKSkKKyAg
ICAgICAgem9vbWVkU2l6ZSA9IG1pbkxvZ2ljYWxTaXplOworCisgICAgLy8gQWxzbyBjbGFtcCB0
byBhIHJlYXNvbmFibGUgbWF4aW11bSB0byBwcmV2ZW50IGluc2FuZSBmb250IHNpemVzIGZyb20g
Y2F1c2luZyBjcmFzaGVzIG9uIHZhcmlvdXMKKyAgICAvLyBwbGF0Zm9ybXMgKEknbSBsb29raW5n
IGF0IHlvdSwgV2luZG93cy4pCisgICAgcmV0dXJuIG1pbigxMDAwMDAwLjBmLCB6b29tZWRTaXpl
KTsKK30KKworY29uc3QgaW50IGZvbnRTaXplVGFibGVNYXggPSAxNjsKK2NvbnN0IGludCBmb250
U2l6ZVRhYmxlTWluID0gOTsKK2NvbnN0IGludCB0b3RhbEtleXdvcmRzID0gODsKKworLy8gV2lu
SUUvTmF2NCB0YWJsZSBmb3IgZm9udCBzaXplcy4gIERlc2lnbmVkIHRvIG1hdGNoIHRoZSBsZWdh
Y3kgZm9udCBtYXBwaW5nIHN5c3RlbSBvZiBIVE1MLgorc3RhdGljIGNvbnN0IGludCBxdWlya3NG
b250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBmb250U2l6ZVRhYmxlTWluICsgMV1bdG90
YWxLZXl3b3Jkc10gPQoreworICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAgIDksICAgIDExLCAg
ICAxNCwgICAgMTgsICAgIDI4IH0sCisgICAgICB7IDksICAgIDksICAgICA5LCAgICAxMCwgICAg
MTIsICAgIDE1LCAgICAyMCwgICAgMzEgfSwKKyAgICAgIHsgOSwgICAgOSwgICAgIDksICAgIDEx
LCAgICAxMywgICAgMTcsICAgIDIyLCAgICAzNCB9LAorICAgICAgeyA5LCAgICA5LCAgICAxMCwg
ICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQsICAgIDM3IH0sCisgICAgICB7IDksICAgIDksICAg
IDEwLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwgICAgNDAgfSwgLy8gZml4ZWQgZm9udCBk
ZWZhdWx0ICgxMykKKyAgICAgIHsgOSwgICAgOSwgICAgMTEsICAgIDE0LCAgICAxNywgICAgMjEs
ICAgIDI4LCAgICA0MiB9LAorICAgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTUsICAgIDE3LCAg
ICAyMywgICAgMzAsICAgIDQ1IH0sCisgICAgICB7IDksICAgMTAsICAgIDEzLCAgICAxNiwgICAg
MTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAgLy8gcHJvcG9ydGlvbmFsIGZvbnQgZGVmYXVsdCAo
MTYpCit9OworLy8gSFRNTCAgICAgICAxICAgICAgMiAgICAgIDMgICAgICA0ICAgICAgNSAgICAg
IDYgICAgICA3CisvLyBDU1MgIHh4cyAgIHhzICAgICBzICAgICAgbSAgICAgIGwgICAgIHhsICAg
ICB4eGwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB8CisvLyAgICAgICAgICAgICAgICAg
ICAgICB1c2VyIHByZWYKKworLy8gU3RyaWN0IG1vZGUgdGFibGUgbWF0Y2hlcyBNYWNJRSBhbmQg
TW96aWxsYSdzIHNldHRpbmdzIGV4YWN0bHkuCitzdGF0aWMgY29uc3QgaW50IHN0cmljdEZvbnRT
aXplVGFibGVbZm9udFNpemVUYWJsZU1heCAtIGZvbnRTaXplVGFibGVNaW4gKyAxXVt0b3RhbEtl
eXdvcmRzXSA9Cit7CisgICAgICB7IDksICAgIDksICAgICA5LCAgICAgOSwgICAgMTEsICAgIDE0
LCAgICAxOCwgICAgMjcgfSwKKyAgICAgIHsgOSwgICAgOSwgICAgIDksICAgIDEwLCAgICAxMiwg
ICAgMTUsICAgIDIwLCAgICAzMCB9LAorICAgICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTEsICAg
IDEzLCAgICAxNywgICAgMjIsICAgIDMzIH0sCisgICAgICB7IDksICAgIDksICAgIDEwLCAgICAx
MiwgICAgMTQsICAgIDE4LCAgICAyNCwgICAgMzYgfSwKKyAgICAgIHsgOSwgICAxMCwgICAgMTIs
ICAgIDEzLCAgICAxNiwgICAgMjAsICAgIDI2LCAgICAzOSB9LCAvLyBmaXhlZCBmb250IGRlZmF1
bHQgKDEzKQorICAgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE3LCAgICAyMSwgICAg
MjgsICAgIDQyIH0sCisgICAgICB7IDksICAgMTAsICAgIDEzLCAgICAxNSwgICAgMTgsICAgIDIz
LCAgICAzMCwgICAgNDUgfSwKKyAgICAgIHsgOSwgICAxMCwgICAgMTMsICAgIDE2LCAgICAxOCwg
ICAgMjQsICAgIDMyLCAgICA0OCB9ICAvLyBwcm9wb3J0aW9uYWwgZm9udCBkZWZhdWx0ICgxNikK
K307CisvLyBIVE1MICAgICAgIDEgICAgICAyICAgICAgMyAgICAgIDQgICAgICA1ICAgICAgNiAg
ICAgIDcKKy8vIENTUyAgeHhzICAgeHMgICAgIHMgICAgICBtICAgICAgbCAgICAgeGwgICAgIHh4
bAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAg
IHVzZXIgcHJlZgorCisvLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSB0YWJs
ZSwgd2UgdXNlIFRvZGQgRmFocm5lcidzIHN1Z2dlc3RlZCBzY2FsZQorLy8gZmFjdG9ycyBmb3Ig
ZWFjaCBrZXl3b3JkIHZhbHVlLgorc3RhdGljIGNvbnN0IGZsb2F0IGZvbnRTaXplRmFjdG9yc1t0
b3RhbEtleXdvcmRzXSA9IHsgMC42MGYsIDAuNzVmLCAwLjg5ZiwgMS4wZiwgMS4yZiwgMS41Ziwg
Mi4wZiwgMy4wZiB9OworCitmbG9hdCBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQo
RG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29yZCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1
bHRTaXplKQoreworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygp
OworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiAxLjBmOworCisgICAgYm9vbCBx
dWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpOworICAgIGludCBtZWRpdW1TaXpl
ID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/IHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250
U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOworICAgIGlmIChtZWRpdW1TaXpl
ID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVtU2l6ZSA8PSBmb250U2l6ZVRhYmxlTWF4KSB7
CisgICAgICAgIC8vIExvb2sgdXAgdGhlIGVudHJ5IGluIHRoZSB0YWJsZS4KKyAgICAgICAgaW50
IHJvdyA9IG1lZGl1bVNpemUgLSBmb250U2l6ZVRhYmxlTWluOworICAgICAgICBpbnQgY29sID0g
KGtleXdvcmQgLSBDU1NWYWx1ZVh4U21hbGwpOworICAgICAgICByZXR1cm4gcXVpcmtzTW9kZSA/
IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93XVtjb2xdIDogc3RyaWN0Rm9udFNpemVUYWJsZVtyb3dd
W2NvbF07CisgICAgfQorCisgICAgLy8gVmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhl
IHRhYmxlLiBBcHBseSB0aGUgc2NhbGUgZmFjdG9yIGluc3RlYWQuCisgICAgZmxvYXQgbWluTG9n
aWNhbFNpemUgPSBtYXgoc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKSwgMSk7Cisg
ICAgcmV0dXJuIG1heChmb250U2l6ZUZhY3RvcnNba2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbF0q
bWVkaXVtU2l6ZSwgbWluTG9naWNhbFNpemUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
c3RhdGljIGludCBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplKGludCBwaXhlbEZvbnRTaXplLCBj
b25zdCBUKiB0YWJsZSwgaW50IG11bHRpcGxpZXIpCit7CisgICAgLy8gSWdub3JlIHRhYmxlWzBd
IGJlY2F1c2UgeHgtc21hbGwgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkgbGVnYWN5IGZvbnQg
c2l6ZS4KKyAgICBmb3IgKGludCBpID0gMTsgaSA8IHRvdGFsS2V5d29yZHMgLSAxOyBpKyspIHsK
KyAgICAgICAgaWYgKHBpeGVsRm9udFNpemUgKiAyIDwgKHRhYmxlW2ldICsgdGFibGVbaSArIDFd
KSAqIG11bHRpcGxpZXIpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJu
IHRvdGFsS2V5d29yZHMgLSAxOworfQorCitpbnQgU3R5bGVSZXNvbHZlcjo6bGVnYWN5Rm9udFNp
emUoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VG
aXhlZERlZmF1bHRTaXplKQoreworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5z
ZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiAxOworCisgICAg
Ym9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpOworICAgIGludCBtZWRp
dW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/IHNldHRpbmdzLT5kZWZhdWx0Rml4
ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOworICAgIGlmIChtZWRp
dW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVtU2l6ZSA8PSBmb250U2l6ZVRhYmxl
TWF4KSB7CisgICAgICAgIGludCByb3cgPSBtZWRpdW1TaXplIC0gZm9udFNpemVUYWJsZU1pbjsK
KyAgICAgICAgcmV0dXJuIGZpbmROZWFyZXN0TGVnYWN5Rm9udFNpemU8aW50PihwaXhlbEZvbnRT
aXplLCBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVUYWJsZVtyb3ddIDogc3RyaWN0Rm9udFNp
emVUYWJsZVtyb3ddLCAxKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmluZE5lYXJlc3RMZWdhY3lG
b250U2l6ZTxmbG9hdD4ocGl4ZWxGb250U2l6ZSwgZm9udFNpemVGYWN0b3JzLCBtZWRpdW1TaXpl
KTsKK30KKworc3RhdGljIENvbG9yIGNvbG9yRm9yQ1NTVmFsdWUoaW50IGNzc1ZhbHVlSWQpCit7
CisgICAgc3RydWN0IENvbG9yVmFsdWUgeworICAgICAgICBpbnQgY3NzVmFsdWVJZDsKKyAgICAg
ICAgUkdCQTMyIGNvbG9yOworICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgQ29sb3JWYWx1ZSBj
b2xvclZhbHVlc1tdID0geworICAgICAgICB7IENTU1ZhbHVlQXF1YSwgMHhGRjAwRkZGRiB9LAor
ICAgICAgICB7IENTU1ZhbHVlQmxhY2ssIDB4RkYwMDAwMDAgfSwKKyAgICAgICAgeyBDU1NWYWx1
ZUJsdWUsIDB4RkYwMDAwRkYgfSwKKyAgICAgICAgeyBDU1NWYWx1ZUZ1Y2hzaWEsIDB4RkZGRjAw
RkYgfSwKKyAgICAgICAgeyBDU1NWYWx1ZUdyYXksIDB4RkY4MDgwODAgfSwKKyAgICAgICAgeyBD
U1NWYWx1ZUdyZWVuLCAweEZGMDA4MDAwICB9LAorICAgICAgICB7IENTU1ZhbHVlR3JleSwgMHhG
RjgwODA4MCB9LAorICAgICAgICB7IENTU1ZhbHVlTGltZSwgMHhGRjAwRkYwMCB9LAorICAgICAg
ICB7IENTU1ZhbHVlTWFyb29uLCAweEZGODAwMDAwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVOYXZ5
LCAweEZGMDAwMDgwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVPbGl2ZSwgMHhGRjgwODAwMCAgfSwK
KyAgICAgICAgeyBDU1NWYWx1ZU9yYW5nZSwgMHhGRkZGQTUwMCB9LAorICAgICAgICB7IENTU1Zh
bHVlUHVycGxlLCAweEZGODAwMDgwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVSZWQsIDB4RkZGRjAw
MDAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZVNpbHZlciwgMHhGRkMwQzBDMCB9LAorICAgICAgICB7
IENTU1ZhbHVlVGVhbCwgMHhGRjAwODA4MCAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZVRyYW5zcGFy
ZW50LCAweDAwMDAwMDAwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVXaGl0ZSwgMHhGRkZGRkZGRiB9
LAorICAgICAgICB7IENTU1ZhbHVlWWVsbG93LCAweEZGRkZGRjAwIH0sCisgICAgICAgIHsgMCwg
MCB9CisgICAgfTsKKworICAgIGZvciAoY29uc3QgQ29sb3JWYWx1ZSogY29sID0gY29sb3JWYWx1
ZXM7IGNvbC0+Y3NzVmFsdWVJZDsgKytjb2wpIHsKKyAgICAgICAgaWYgKGNvbC0+Y3NzVmFsdWVJ
ZCA9PSBjc3NWYWx1ZUlkKQorICAgICAgICAgICAgcmV0dXJuIGNvbC0+Y29sb3I7CisgICAgfQor
ICAgIHJldHVybiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUNvbG9yKGNzc1Zh
bHVlSWQpOworfQorCitDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1
ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspIGNvbnN0Cit7
CisgICAgaWYgKHZhbHVlLT5pc1JHQkNvbG9yKCkpCisgICAgICAgIHJldHVybiBDb2xvcih2YWx1
ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7CisKKyAgICBpbnQgaWRlbnQgPSB2YWx1ZS0+Z2V0SWRlbnQo
KTsKKyAgICBzd2l0Y2ggKGlkZW50KSB7CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4gQ29s
b3IoKTsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKKyAgICAgICAgcmV0dXJuIG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExp
bms6CisgICAgICAgIHJldHVybiAobV9lbGVtZW50LT5pc0xpbmsoKSAmJiBmb3JWaXNpdGVkTGlu
aykgPyBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6IG1fZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2
ZWxpbms6CisgICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtD
b2xvcigpOworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoKKyAgICAgICAg
cmV0dXJuIFJlbmRlclRoZW1lOjpmb2N1c1JpbmdDb2xvcigpOworICAgIGNhc2UgQ1NTVmFsdWVD
dXJyZW50Y29sb3I6CisgICAgICAgIHJldHVybiBtX3N0eWxlLT5jb2xvcigpOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlkZW50KTsKKyAgICB9Cit9CisK
K2Jvb2wgU3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWlj
U3RyaW5nICZhdHRybmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mZWF0dXJlcy5hdHRyc0lu
UnVsZXMuY29udGFpbnMoYXR0cm5hbWUuaW1wbCgpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVy
OjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4
cCogZXhwciwgYm9vbCByZXN1bHQpCit7CisgICAgbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVl
cnlSZXN1bHRzLmFwcGVuZChhZG9wdFB0cihuZXcgTWVkaWFRdWVyeVJlc3VsdCgqZXhwciwgcmVz
dWx0KSkpOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5n
ZSgpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgcyA9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1
ZXJ5UmVzdWx0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHM7IGkrKykg
eworICAgICAgICBpZiAobV9tZWRpdW0tPmV2YWwoJm1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1
ZXJ5UmVzdWx0c1tpXS0+bV9leHByZXNzaW9uKSAhPSBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFR
dWVyeVJlc3VsdHNbaV0tPm1fcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uOiAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRTsKKyAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9u
OiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g7CisgICAgICAgIGNh
c2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbjogICAg
ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOworICAgICAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAg
cmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWjsKKyAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgIHJldHVy
biBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOworICAgICAgICBjYXNlIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgcmV0dXJuIFRy
YW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgcmV0dXJuIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246ICAgICByZXR1cm4gVHJhbnNm
b3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWTsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogICAgIHJldHVybiBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9aOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogICAgcmV0dXJuIFRyYW5zZm9y
bU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9y
bU9wZXJhdGlvbjo6Uk9UQVRFOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFX1g7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJv
dGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9u
OjpST1RBVEVfWTsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRl
WlRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJP
VEFURV9aOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRy
YW5zZm9ybU9wZXJhdGlvbjogICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRF
XzNEOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3Jt
T3BlcmF0aW9uOiAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzsKKyAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFuc2Zvcm1PcGVyYXRp
b246ICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDsKKyAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246ICAg
ICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWTsKKyAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAg
IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDsKKyAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgIHJldHVy
biBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246ICAgIHJldHVybiBU
cmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOworICAgICAgICBjYXNlIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpVbmtub3duVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgcmV0dXJuIFRy
YW5zZm9ybU9wZXJhdGlvbjo6Tk9ORTsKKyAgICB9CisgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Tk9ORTsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVUcmFuc2Zvcm1PcGVy
YXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCit7CisgICAg
aWYgKCFpblZhbHVlIHx8ICFpblZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CisgICAgICAgIG91dE9w
ZXJhdGlvbnMuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZs
b2F0IHpvb21GYWN0b3IgPSBzdHlsZSA/IHN0eWxlLT5lZmZlY3RpdmVab29tKCkgOiAxOworICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBmb3IgKENTU1ZhbHVlTGlzdEl0
ZXJhdG9yIGkgPSBpblZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAgICAgICAg
Q1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKKyAgICAgICAgaWYgKCFjdXJyVmFsdWUt
PmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKiB0cmFuc2Zvcm1WYWx1ZSA9IHN0YXRpY19j
YXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4oaS52YWx1ZSgpKTsKKyAgICAgICAgaWYgKCF0
cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBib29sIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgdHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpOyArK2opIHsKKyAgICAgICAg
ICAgIGlmICghdHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaiktPmlzUHJp
bWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgICAgIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygwKSk7CisKKyAgICAgICAgc3dpdGNoICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5z
Zm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAg
IGRvdWJsZSBzeCA9IDEuMDsKKyAgICAgICAgICAgICAgICBkb3VibGUgc3kgPSAxLjA7CisgICAg
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAg
ICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJs
ZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVy
YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVu
Z3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zv
cm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoc3gsIHN5LCAxLjAsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3Jt
VmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxl
WlRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlNjYWxlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgICAgICBkb3Vi
bGUgc3ggPSAxLjA7CisgICAgICAgICAgICAgICAgZG91YmxlIHN5ID0gMS4wOworICAgICAgICAg
ICAgICAgIGRvdWJsZSBzeiA9IDEuMDsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJh
bnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICBzeiA9IGZpcnN0VmFsdWUtPmdl
dERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUt
Pm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNm
b3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFsdWUtPmdldERv
dWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gdGhpcmRWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoc3gsIHN5LCBzeiwgZ2V0VHJh
bnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOgorICAg
ICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9y
bU9wZXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRy
YW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgICAgICBMZW5ndGggdHgg
PSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAgICAgICAgICAgIExlbmd0aCB0eSA9IExlbmd0aCgw
LCBGaXhlZCk7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25U
eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVy
YXRpb24pCisgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmly
c3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmly
c3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRv
RmxvYXRMZW5ndGgoc2Vjb25kVmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHR4LmlzVW5kZWZpbmVkKCkgfHwgdHku
aXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAsIEZpeGVkKSwgZ2V0VHJhbnNm
b3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNEVHJhbnNmb3Jt
T3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAsIEZpeGVk
KTsKKyAgICAgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAg
ICAgICAgICAgIExlbmd0aCB0eiA9IExlbmd0aCgwLCBGaXhlZCk7CisgICAgICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAg
IHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwg
em9vbUZhY3Rvcik7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5z
Zm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExl
bmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9GbG9hdExl
bmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eiA9IGNv
bnZlcnRUb0Zsb2F0TGVuZ3RoKHRoaXJkVmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0
b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3Ro
KHNlY29uZFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICh0eC5pc1VuZGVmaW5lZCgpIHx8IHR5LmlzVW5kZWZpbmVk
KCkgfHwgdHouaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgdHosIGdldFRyYW5zZm9ybU9w
ZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAg
ICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CisgICAgICAg
ICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjo6Y3JlYXRlKDAsIDAsIDEsIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBl
KHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb246
IHsKKyAgICAgICAgICAgICAgICBkb3VibGUgeCA9IDA7CisgICAgICAgICAgICAgICAgZG91Ymxl
IHkgPSAwOworICAgICAgICAgICAgICAgIGRvdWJsZSB6ID0gMDsKKyAgICAgICAgICAgICAgICBk
b3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygpOworCisgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAg
ICAgIHggPSAxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVy
YXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1P
cGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgIHkgPSAxOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgeiA9IDE7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgs
IHksIHosIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5v
cGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRyYW5z
Zm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVu
Z3RoKCkgPCA0KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MikpOworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmb3VydGhWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMykpOworICAgICAgICAgICAgICAgIGRvdWJsZSB4ID0gZmlyc3RWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBkb3VibGUgeSA9IHNlY29uZFZhbHVl
LT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIGRvdWJsZSB6ID0gdGhpcmRWYWx1
ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmb3Vy
dGhWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwg
eiwgYW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJh
dGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVy
YXRpb246CisgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WFRy
YW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAgZG91YmxlIGFu
Z2xlWCA9IDA7CisgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlWSA9IDA7CisgICAgICAgICAg
ICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAg
ICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAg
ICAgICAgIGFuZ2xlWSA9IGFuZ2xlOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBhbmdsZVggPSBhbmdsZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVZID0gc2Vjb25kVmFsdWUtPmNvbXB1dGVEZWdy
ZWVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25z
KCkuYXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgsIGFuZ2xlWSwg
Z2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
KSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOiB7
CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA8IDYpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRvdWJsZSBhID0gZmlyc3RW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBkb3VibGUgYiA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMSkpLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIGRvdWJsZSBj
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygyKSktPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAg
ZG91YmxlIGQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICBkb3VibGUgZSA9IHpvb21GYWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91
YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBkb3VibGUgZiA9IHpvb21GYWN0b3IgKiBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
YSwgYiwgYywgZCwgZSwgZikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxl
bmd0aCgpIDwgMTYpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKS0+Z2V0RG91Ymxl
VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMikpLT5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSktPmdl
dERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soNSkpLT5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDYpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg3KSktPmdldERvdWJsZVZh
bHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
OCkpLT5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zv
cm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMCkpLT5nZXREb3VibGVWYWx1ZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDExKSktPmdl
dERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb21G
YWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDEyKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHpvb21GYWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEzKSkt
PmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMTQpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1W
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNSkpLT5nZXREb3VibGVWYWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtYXRyaXgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAgTGVuZ3Ro
IHAgPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5p
c0xlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICBwID0gY29udmVydFRvRmxvYXRMZW5ndGgo
Zmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBxdWlyayB0aGF0IHNo
b3VsZCBnbyBhd2F5IHdoZW4gM2QgdHJhbnNmb3JtcyBhcmUgZmluYWxpemVkLgorICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgdmFsID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcCA9IHZhbCA+PSAwID8gTGVuZ3RoKGNsYW1wVG9Qb3NpdGl2ZUlu
dGVnZXIodmFsKSwgRml4ZWQpIDogTGVuZ3RoKFVuZGVmaW5lZCk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgaWYgKHAuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUocCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIG91dE9wZXJhdGlvbnMgPSBvcGVyYXRpb25zOworICAg
IHJldHVybiB0cnVlOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorc3RhdGljIEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBlKFdlYktpdENT
U0ZpbHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6UmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U7CisgICAg
Y2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVyT3BlcmF0aW9uOgorICAg
ICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU7CisgICAgY2FzZSBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVybiBGaWx0
ZXJPcGVyYXRpb246OlNFUElBOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVy
YXRlRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpTQVRV
UkFURTsKKyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpIdWVSb3RhdGVGaWx0ZXJPcGVy
YXRpb246CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU7CisgICAg
Y2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SW52ZXJ0RmlsdGVyT3BlcmF0aW9uOgorICAgICAg
ICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9w
ZXJhdGlvbjo6T1BBQ0lUWTsKKyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRu
ZXNzRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpCUklH
SFRORVNTOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3Bl
cmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDsKKyAgICBj
YXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICBy
ZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpCTFVSOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVy
YXRpb246OkRST1BfU0hBRE9XOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBjYXNlIFdl
YktpdENTU0ZpbHRlclZhbHVlOjpDdXN0b21GaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVy
biBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTTsKKyNlbmRpZgorICAgIGNhc2UgV2ViS2l0Q1NTRmls
dGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVybiBGaWx0ZXJP
cGVyYXRpb246Ok5PTkU7CisgICAgfQorICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246Ok5PTkU7
Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCitTdHlsZVNoYWRlciogU3R5bGVSZXNvbHZl
cjo6c3R5bGVTaGFkZXIoQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNXZWJL
aXRDU1NTaGFkZXJWYWx1ZSgpKQorICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nU3R5bGVT
aGFkZXJGcm9tVmFsdWUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUqPih2YWx1ZSkp
OworICAgIHJldHVybiAwOworfQorCitTdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVk
T3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHZhbHVl
KQoreworICAgIFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nU2hh
ZGVyKCk7CisgICAgaWYgKHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1NoYWRlcigpKQorICAg
ICAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsKKyAgICByZXR1cm4gc2hhZGVyOworfQor
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCit7CisgICAgaWYgKCFt
X3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9oYXNQZW5kaW5nU2hhZGVycykKKyAgICAgICAgcmV0
dXJuOworCisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0g
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworCisgICAgVmVj
dG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxl
LT5maWx0ZXIoKS5vcGVyYXRpb25zKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZp
bHRlck9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4gZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVyT3BlcmF0aW9ucy5hdChpKTsKKyAgICAgICAg
aWYgKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlv
bjo6Q1VTVE9NKSB7CisgICAgICAgICAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb24qIGN1c3RvbUZp
bHRlciA9IHN0YXRpY19jYXN0PEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlv
bi5nZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQoY3VzdG9tRmlsdGVyLT5wcm9ncmFtKCkpOwor
ICAgICAgICAgICAgU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtKiBwcm9ncmFtID0gc3RhdGljX2Nh
c3Q8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtKj4oY3VzdG9tRmlsdGVyLT5wcm9ncmFtKCkpOwor
ICAgICAgICAgICAgaWYgKHByb2dyYW0tPnZlcnRleFNoYWRlcigpICYmIHByb2dyYW0tPnZlcnRl
eFNoYWRlcigpLT5pc1BlbmRpbmdTaGFkZXIoKSkgeworICAgICAgICAgICAgICAgIFdlYktpdENT
U1NoYWRlclZhbHVlKiBzaGFkZXJWYWx1ZSA9IHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ1NoYWRl
cio+KHByb2dyYW0tPnZlcnRleFNoYWRlcigpKS0+Y3NzU2hhZGVyVmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICBwcm9ncmFtLT5zZXRWZXJ0ZXhTaGFkZXIoc2hhZGVyVmFsdWUtPmNhY2hlZFNoYWRl
cihjYWNoZWRSZXNvdXJjZUxvYWRlcikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkgJiYgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS0+
aXNQZW5kaW5nU2hhZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBXZWJLaXRDU1NTaGFkZXJWYWx1
ZSogc2hhZGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdTaGFkZXIqPihwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpKS0+Y3NzU2hhZGVyVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBw
cm9ncmFtLT5zZXRGcmFnbWVudFNoYWRlcihzaGFkZXJWYWx1ZS0+Y2FjaGVkU2hhZGVyKGNhY2hl
ZFJlc291cmNlTG9hZGVyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
bV9oYXNQZW5kaW5nU2hhZGVycyA9IGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBzb3J0UGFyYW1l
dGVyc0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4m
IGEsIGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQoreworICAgIHJldHVy
biBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYS0+bmFtZSgpLCBiLT5uYW1lKCkpOworfQorCitQ
YXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0
b21GaWx0ZXJOdW1iZXJQYXJhbXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCog
dmFsdWVzKQoreworICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI+IG51bWJl
clBhcmFtZXRlciA9IEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAg
ICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gdmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkp
OworICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIG51bWJlclBhcmFtZXRlci0+YWRkVmFs
dWUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4g
bnVtYmVyUGFyYW1ldGVyLnJlbGVhc2UoKTsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJz
ZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVyTGlzdCkKK3sKKyAgICBIYXNoU2V0PFN0
cmluZz4ga25vd25QYXJhbWV0ZXJOYW1lczsKKyAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvciBwYXJh
bWV0ZXJJdGVyYXRvcihwYXJhbWV0ZXJzVmFsdWUpOworICAgIGZvciAoOyBwYXJhbWV0ZXJJdGVy
YXRvci5oYXNNb3JlKCk7IHBhcmFtZXRlckl0ZXJhdG9yLmFkdmFuY2UoKSkgeworICAgICAgICBp
ZiAoIXBhcmFtZXRlckl0ZXJhdG9yLnZhbHVlKCktPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKHBh
cmFtZXRlckl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICBpZiAoIWl0ZXJhdG9yLmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRp
dmVUeXBlKCkgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbmFtZSA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAvLyBEbyBub3QgYWxsb3cgZHVwbGljYXRl
IHBhcmFtZXRlciBuYW1lcy4KKyAgICAgICAgaWYgKGtub3duUGFyYW1ldGVyTmFtZXMuY29udGFp
bnMobmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGtub3duUGFyYW1l
dGVyTmFtZXMuYWRkKG5hbWUpOworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgp
OworICAgICAgICAKKyAgICAgICAgaWYgKCFpdGVyYXRvci5oYXNNb3JlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90
aGVyIHBhcmFtZXRlcnMgdHlwZXMgcGFyc2luZy4KKyAgICAgICAgLy8gYm9vbGVhbnM6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQzOAorICAgICAgICAvLyB0ZXh0
dXJlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDQyCisgICAg
ICAgIC8vIDNkLXRyYW5zZm9ybXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MTQ0MworICAgICAgICAvLyBtYXQyLCBtYXQzLCBtYXQ0OiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0NDQKKyAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRl
clBhcmFtZXRlcj4gcGFyYW1ldGVyOworICAgICAgICBpZiAoaXRlcmF0b3IudmFsdWUoKS0+aXNW
YWx1ZUxpc3QoKSkgeworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMgPSBzdGF0aWNf
Y2FzdDxDU1NWYWx1ZUxpc3QqPihpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGl0ZXJh
dG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgY2FuIGhhdmUg
b25seSBhcnJheXMgb2YgYm9vbGVhbnMgb3IgbnVtYmVycywgc28gdXNlIHRoZSBmaXJzdCB2YWx1
ZSB0byBjaG9vc2UgYmV0d2VlbiB0aG9zZSB0d28uCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUg
d2UgaGF2ZSBhdCBsZWFzdCBvbmUgdmFsdWUuIFdlIG5lZWQgdXAgdG8gNCB2YWx1ZXMgKGFsbCBi
b29sZWFucyBvciBhbGwgbnVtYmVycykuCisgICAgICAgICAgICBpZiAoIXZhbHVlcy0+bGVuZ3Ro
KCkgfHwgdmFsdWVzLT5sZW5ndGgoKSA+IDQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXZhbHVlcy0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygwKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0
UHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAgICAgICAgICBpZiAoZmlyc3RQcmltaXRp
dmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KQorICAgICAgICAgICAgICAgIHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9tRmlsdGVyTnVtYmVyUGFy
YW10ZXIobmFtZSwgdmFsdWVzKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhl
IGJvb2xlYW4gYXJyYXkgcGFyYW1ldGVyIGhlcmUuCisgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0MzgKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKCFwYXJhbWV0ZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICBwYXJhbWV0ZXJMaXN0LmFwcGVuZChwYXJhbWV0ZXIucmVsZWFzZSgpKTsK
KyAgICB9CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHdlIHNvcnQgdGhlIHBhcmFtZXRlcnMgYmVm
b3JlIHBhc3NpbmcgdGhlbSBkb3duIHRvIHRoZSBDdXN0b21GaWx0ZXJPcGVyYXRpb24uCisgICAg
c3RkOjpzb3J0KHBhcmFtZXRlckxpc3QuYmVnaW4oKSwgcGFyYW1ldGVyTGlzdC5lbmQoKSwgc29y
dFBhcmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUp
Cit7CisgICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5ndGgoKSk7CisKKyAgICBDU1NWYWx1ZSog
c2hhZGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7Cisg
ICAgQVNTRVJUKHNoYWRlcnNWYWx1ZS0+aXNWYWx1ZUxpc3QoKSk7CisgICAgQ1NTVmFsdWVMaXN0
KiBzaGFkZXJzTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHNoYWRlcnNWYWx1ZSk7
CisKKyAgICBBU1NFUlQoc2hhZGVyc0xpc3QtPmxlbmd0aCgpKTsKKyAgICBSZWZQdHI8U3R5bGVT
aGFkZXI+IHZlcnRleFNoYWRlciA9IHN0eWxlU2hhZGVyKHNoYWRlcnNMaXN0LT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApKTsKKyAgICBSZWZQdHI8U3R5bGVTaGFkZXI+IGZyYWdtZW50U2hhZGVy
ID0gKHNoYWRlcnNMaXN0LT5sZW5ndGgoKSA+IDEpID8gc3R5bGVTaGFkZXIoc2hhZGVyc0xpc3Qt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpIDogMDsKKyAgICAKKyAgICB1bnNpZ25lZCBtZXNo
Um93cyA9IDE7CisgICAgdW5zaWduZWQgbWVzaENvbHVtbnMgPSAxOworICAgIEN1c3RvbUZpbHRl
ck9wZXJhdGlvbjo6TWVzaEJveFR5cGUgbWVzaEJveFR5cGUgPSBDdXN0b21GaWx0ZXJPcGVyYXRp
b246OkZJTFRFUl9CT1g7CisgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBtZXNo
VHlwZSA9IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6QVRUQUNIRUQ7CisgICAgCisgICAgQ1NTVmFs
dWUqIHBhcmFtZXRlcnNWYWx1ZSA9IDA7CisgICAgCisgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5n
dGgoKSA+IDEpIHsKKyAgICAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXRlcmF0b3IoZmlsdGVy
VmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAKKyAgICAgICAgLy8g
VGhlIHNlY29uZCB2YWx1ZSBtaWdodCBiZSB0aGUgbWVzaCBib3ggb3IgdGhlIGxpc3Qgb2YgcGFy
YW1ldGVyczoKKyAgICAgICAgLy8gSWYgaXQgc3RhcnRzIHdpdGggYSBudW1iZXIgb3IgYW55IG9m
IHRoZSBtZXNoLWJveCBpZGVudGlmaWVycyBpdCBpcyAKKyAgICAgICAgLy8gdGhlIG1lc2gtYm94
IGxpc3QsIGlmIG5vdCBpdCBtZWFucyBpdCBpcyB0aGUgcGFyYW1ldGVycyBsaXN0LgorCisgICAg
ICAgIGlmIChpdGVyYXRvci5oYXNNb3JlKCkgJiYgaXRlcmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgp
KSB7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgLy8g
SWYgb25seSBvbmUgaW50ZWdlciB2YWx1ZSBpcyBzcGVjaWZpZWQsIGl0IHdpbGwgc2V0IGJvdGgK
KyAgICAgICAgICAgICAgICAvLyB0aGUgcm93cyBhbmQgdGhlIGNvbHVtbnMuCisgICAgICAgICAg
ICAgICAgbWVzaFJvd3MgPSBtZXNoQ29sdW1ucyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1
ZSgpOworICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbWF0Y2ggYW5vdGhlciBudW1iZXIgZm9yIHRo
ZSBjb2x1bW5zLgorICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvci5oYXNNb3JlKCkgJiYgaXRl
cmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4oaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWVzaENvbHVtbnMg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGl0
ZXJhdG9yLmhhc01vcmUoKSAmJiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVCb3JkZXJCb3gKKyAgICAgICAgICAg
ICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVBhZGRpbmdCb3gK
KyAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZUNvbnRlbnRCb3gKKyAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZUZpbHRlckJveCkgeworICAgICAgICAgICAgICAgIG1lc2hCb3hUeXBlID0g
KnByaW1pdGl2ZVZhbHVlOworICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGl0ZXJhdG9yLmhh
c01vcmUoKSAmJiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEZXRhY2hlZCkgeworICAgICAgICAgICAgICAgIG1l
c2hUeXBlID0gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpERVRBQ0hFRDsKKyAgICAgICAgICAgICAg
ICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmICghaXRlcmF0b3IuaW5kZXgoKSkgeworICAgICAgICAgICAgLy8gSWYgbm8g
dmFsdWUgd2FzIGNvbnN1bWVkIGZyb20gdGhlIG1lc2ggdmFsdWUsIHRoZW4gaXQgaXMganVzdCBh
IHBhcmFtZXRlciBsaXN0LCBtZWFuaW5nIHRoYXQgd2UgZW5kIHVwCisgICAgICAgICAgICAvLyBo
YXZpbmcganVzdCB0d28gQ1NTTGlzdFZhbHVlczogbGlzdCBvZiBzaGFkZXJzIGFuZCBsaXN0IG9m
IHBhcmFtZXRlcnMuCisgICAgICAgICAgICBBU1NFUlQoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09
IDIpOworICAgICAgICAgICAgcGFyYW1ldGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKGZpbHRl
clZhbHVlLT5sZW5ndGgoKSA+IDIgJiYgIXBhcmFtZXRlcnNWYWx1ZSkKKyAgICAgICAgcGFyYW1l
dGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMik7CisgICAg
CisgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJMaXN0OworICAgIGlmIChw
YXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChwYXJhbWV0
ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBS
ZWZQdHI8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gU3R5bGVDdXN0b21GaWx0
ZXJQcm9ncmFtOjpjcmVhdGUodmVydGV4U2hhZGVyLnJlbGVhc2UoKSwgZnJhZ21lbnRTaGFkZXIu
cmVsZWFzZSgpKTsKKyAgICByZXR1cm4gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUocHJv
Z3JhbS5yZWxlYXNlKCksIHBhcmFtZXRlckxpc3QsIG1lc2hSb3dzLCBtZXNoQ29sdW1ucywgbWVz
aEJveFR5cGUsIG1lc2hUeXBlKTsKK30KKyNlbmRpZgorCitib29sIFN0eWxlUmVzb2x2ZXI6OmNy
ZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9u
cykKK3sKKyAgICBBU1NFUlQob3V0T3BlcmF0aW9ucy5pc0VtcHR5KCkpOworICAgIAorICAgIGlm
ICghaW5WYWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChpblZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpblZhbHVlKTsKKyAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoIWluVmFsdWUtPmlz
VmFsdWVMaXN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHpvb21GYWN0
b3IgPSBzdHlsZSA/IHN0eWxlLT5lZmZlY3RpdmVab29tKCkgOiAxOworICAgIEZpbHRlck9wZXJh
dGlvbnMgb3BlcmF0aW9uczsKKyAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBpblZh
bHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAgICAgICAgQ1NTVmFsdWUqIGN1cnJW
YWx1ZSA9IGkudmFsdWUoKTsKKyAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzV2ViS2l0Q1NTRmls
dGVyVmFsdWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFdlYktpdENTU0Zp
bHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU0ZpbHRlclZhbHVl
Kj4oaS52YWx1ZSgpKTsKKyAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvblR5cGUgPSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBlKGZpbHRlclZhbHVlLT5vcGVyYXRp
b25UeXBlKCkpOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBpZiAob3BlcmF0
aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgeworICAgICAgICAgICAgUmVmUHRy
PEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gY3JlYXRlQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uKGZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlmICghb3BlcmF0aW9uKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3BlcmF0
aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKG9wZXJhdGlvbik7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgcGFyYW1l
dGVycyBhcmUgcHJpbWl0aXZlIHZhbHVlcywgd2l0aCB0aGUKKyAgICAgICAgLy8gZXhjZXB0aW9u
IG9mIGRyb3Agc2hhZG93IHdoaWNoIGhhcyBhIFNoYWRvd1ZhbHVlIHBhcmFtZXRlci4KKyAgICAg
ICAgaWYgKG9wZXJhdGlvblR5cGUgIT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVykgewor
ICAgICAgICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCk7ICsraikg
eworICAgICAgICAgICAgICAgIGlmICghZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaiktPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBoYXZlTm9u
UHJpbWl0aXZlVmFsdWUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGF2ZU5vblByaW1p
dGl2ZVZhbHVlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSBmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkg
PyBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGZpbHRlclZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApKSA6IDA7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyVmFsdWUtPm9wZXJh
dGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpSZWZlcmVu
Y2VGaWx0ZXJPcGVyYXRpb246IHsKKyAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlKQorICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSZWZlcmVuY2VGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZShmaXJzdFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLCBvcGVyYXRpb25U
eXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktp
dENTU0ZpbHRlclZhbHVlOjpHcmF5c2NhbGVGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICBjYXNl
IFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbjogeworICAgICAg
ICAgICAgZG91YmxlIGFtb3VudCA9IDE7CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxl
bmd0aCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICBhbW91bnQgPSBmaXJzdFZhbHVlLT5nZXRE
b3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc1BlcmNlbnRh
Z2UoKSkKKyAgICAgICAgICAgICAgICAgICAgYW1vdW50IC89IDEwMDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbW91bnQsIG9wZXJhdGlvblR5cGUpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlvbjogeworICAgICAgICAgICAgZG91YmxlIGFu
Z2xlID0gMDsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkKKyAg
ICAgICAgICAgICAgICBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CisKKyAg
ICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW5nbGUsIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6
OkludmVydEZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRpb246IHsKKyAgICAgICAgICAgIGRvdWJs
ZSBhbW91bnQgPSAoZmlsdGVyVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbikgPyAwIDogMTsKKyAgICAgICAgICAg
IGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGFtb3Vu
dCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKGZp
cnN0VmFsdWUtPmlzUGVyY2VudGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0g
MTAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFt
b3VudCwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Qmx1ckZpbHRlck9wZXJhdGlvbjogewor
ICAgICAgICAgICAgTGVuZ3RoIHN0ZERldmlhdGlvbiA9IExlbmd0aCgwLCBGaXhlZCk7CisgICAg
ICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID49IDEpIHsKKyAgICAgICAgICAgICAg
ICBzdGREZXZpYXRpb24gPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwg
cm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChz
dGREZXZpYXRpb24uaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCbHVyRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVl
OjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFs
dWUtPmxlbmd0aCgpICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygwKTsKKyAgICAgICAgICAgIGlmICghY3NzVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgU2hhZG93VmFsdWUqIGl0
ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGNzc1ZhbHVlKTsKKyAgICAgICAgICAgIElu
dFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0
eWxlLCB6b29tRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnkt
PmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKSk7CisgICAg
ICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3Ro
PGludD4oc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvcikgOiAwOworICAgICAgICAgICAgQ29s
b3IgY29sb3I7CisgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCisgICAgICAgICAgICAgICAg
Y29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisKKyAg
ICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9y
IDogQ29sb3I6OnRyYW5zcGFyZW50LCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpVbmtub3du
RmlsdGVyT3BlcmF0aW9uOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IG91dE9wZXJhdGlvbnMgPSBvcGVyYXRpb25zOworICAgIHJldHVybiB0cnVlOworfQorCisjZW5k
aWYKKworUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0lt
YWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCit7CisgICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpOworCisgICAgaWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VW
YWx1ZSgpKSB7CisgICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBwZW5kaW5nSW1h
Z2UtPmNzc0ltYWdlVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGltYWdlVmFsdWUtPmNhY2hlZElt
YWdlKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICB9CisKKyAgICBpZiAocGVuZGluZ0ltYWdl
LT5jc3NJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKKyAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZSogaW1hZ2VHZW5lcmF0b3JWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VHZW5lcmF0
b3JWYWx1ZSgpOworICAgICAgICBpbWFnZUdlbmVyYXRvclZhbHVlLT5sb2FkU3ViaW1hZ2VzKGNh
Y2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6
OmNyZWF0ZShpbWFnZUdlbmVyYXRvclZhbHVlKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX0lN
QUdFX1NFVCkKKyAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVNldFZhbHVlKCkpIHsKKyAg
ICAgICAgQ1NTSW1hZ2VTZXRWYWx1ZSogaW1hZ2VTZXRWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3Nz
SW1hZ2VTZXRWYWx1ZSgpOworICAgICAgICByZXR1cm4gaW1hZ2VTZXRWYWx1ZS0+Y2FjaGVkSW1h
Z2VTZXQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQoreworICAg
IGlmIChtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bl
bmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PENTU1Byb3BlcnR5
SUQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVy
dHkgPSAqaXQ7CisKKyAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsKKyAgICAgICAgICAgICAgICBm
b3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdHlsZS0+YWNjZXNzQmFja2dyb3Vu
ZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRM
YXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXIt
PmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVy
LT5pbWFnZSgpKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OiB7Cisg
ICAgICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0
PENvbnRlbnREYXRhKj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250
ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxl
SW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRh
KS0+aW1hZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5n
SW1hZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdl
PiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihpbWFnZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkZWRJ
bWFnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW1hZ2VD
b250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+c2V0SW1hZ2UobG9hZGVkSW1hZ2UucmVsZWFzZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDdXJzb3I6IHsKKyAgICAgICAgICAgICAgICBpZiAo
Q3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IG1fc3R5bGUtPmN1cnNvcnMoKSkgeworICAgICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50Q3Vyc29yID0g
Y3Vyc29yTGlzdC0+YXQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFn
ZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRDdXJzb3Iuc2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0
aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdlKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUxpc3RTdHlsZUltYWdlOiB7CisgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmxpc3RT
dHlsZUltYWdlKCkgJiYgbV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2Uo
KSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBl
bmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmxpc3RT
dHlsZUltYWdlKCkpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0eWxlLT5ib3Jk
ZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSkpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7CisgICAgICAgICAgICAgICAgaWYgKFN0eWxlUmVm
bGVjdGlvbiogcmVmbGVjdGlvbiA9IG1fc3R5bGUtPmJveFJlZmxlY3QoKSkgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+
bWFzaygpOworICAgICAgICAgICAgICAgICAgICBpZiAobWFza0ltYWdlLmltYWdlKCkgJiYgbWFz
a0ltYWdlLmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3Rh
dGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayhOaW5lUGllY2VJbWFnZShsb2Fk
ZWRJbWFnZS5yZWxlYXNlKCksIG1hc2tJbWFnZS5pbWFnZVNsaWNlcygpLCBtYXNrSW1hZ2UuZmls
bCgpLCBtYXNrSW1hZ2UuYm9yZGVyU2xpY2VzKCksIG1hc2tJbWFnZS5vdXRzZXQoKSwgbWFza0lt
YWdlLmhvcml6b250YWxSdWxlKCksIG1hc2tJbWFnZS52ZXJ0aWNhbFJ1bGUoKSkpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tC
b3hJbWFnZVNvdXJjZTogeworICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5tYXNrQm94SW1h
Z2VTb3VyY2UoKSAmJiBtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1h
Z2UoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFza0JveEltYWdlU291cmNl
KGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxl
LT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2U6IHsK
KyAgICAgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogbWFza0xheWVyID0gbV9zdHlsZS0+YWNj
ZXNzTWFza0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xh
eWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
bWFza0xheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVu
ZGluZ0ltYWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29y
a2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5o
IgogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNp
bmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ29udGVudERhdGEuaCIKLSNp
bmNsdWRlICJDb3VudGVyLmgiCi0jaW5jbHVkZSAiQ291bnRlckNvbnRlbnQuaCIKICNpbmNsdWRl
ICJDU1NCb3JkZXJJbWFnZS5oIgogI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCkBAIC01NCw2ICs0OSwxMSBAQAogI2luY2x1
ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNp
bmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKKyNp
bmNsdWRlICJDb3VudGVyLmgiCisjaW5jbHVkZSAiQ291bnRlckNvbnRlbnQuaCIKICNpbmNsdWRl
ICJDdXJzb3JMaXN0LmgiCiAjaW5jbHVkZSAiRm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUg
IkZvbnRWYWx1ZS5oIgpAQCAtMTAxLDkgKzEwMSw5IEBACiAjaW5jbHVkZSAiU2tld1RyYW5zZm9y
bU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlN0eWxlQnVpbGRlci5oIgogI2luY2x1ZGUgIlN0eWxl
Q2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCiAjaW5jbHVk
ZSAiU3R5bGVQZW5kaW5nSW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKLSNpbmNsdWRl
ICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNp
bmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAgLTM3
Miw5ICszNzIsOCBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkCiAg
ICAgaWYgKCFkZWZhdWx0U3R5bGUpIHsKICAgICAgICAgaWYgKCFyb290IHx8IGVsZW1lbnRDYW5V
c2VTaW1wbGVEZWZhdWx0U3R5bGUocm9vdCkpCiAgICAgICAgICAgICBsb2FkU2ltcGxlRGVmYXVs
dFN0eWxlKCk7Ci0gICAgICAgIGVsc2UgeworICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2Fk
RnVsbERlZmF1bHRTdHlsZSgpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gY29uc3RydWN0
IGRvY3VtZW50IHJvb3QgZWxlbWVudCBkZWZhdWx0IHN0eWxlLiB0aGlzIGlzIG5lZWRlZApAQCAt
MTczMyw3ICsxNzMyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFu
aQogCiAgICAgLy8gSWYgdGhlIDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBpdCAoYnV0
IG9ubHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQogICAgIGludCBp
bml0aWFsTGlzdFNpemUgPSBsaXN0LnNpemUoKTsKLSAgICBpZiAoaW5pdGlhbExpc3RTaXplID4g
MCAmJiBsaXN0WzBdLmtleSgpICE9IDApIHsKKyAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAm
JiBsaXN0WzBdLmtleSgpKSB7CiAgICAgICAgIHN0YXRpYyBTdHlsZUtleWZyYW1lKiB6ZXJvUGVy
Y2VudEtleWZyYW1lOwogICAgICAgICBpZiAoIXplcm9QZXJjZW50S2V5ZnJhbWUpIHsKICAgICAg
ICAgICAgIHplcm9QZXJjZW50S2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoKS5sZWFr
UmVmKCk7CkBAIC0xOTI0LDIxICsxOTIzLDIwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0
UmVuZGVyU3R5bGUoUmUKICAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSAhPSBOT05FKSB7CiAgICAg
ICAgIC8vIElmIHdlIGhhdmUgYSA8dGQ+IHRoYXQgc3BlY2lmaWVzIGEgZmxvYXQgcHJvcGVydHks
IGluIHF1aXJrcyBtb2RlIHdlIGp1c3QgZHJvcCB0aGUgZmxvYXQKICAgICAgICAgLy8gcHJvcGVy
dHkuCi0gICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Js
b2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNlCisgICAg
ICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2NrIG9uIDx0
ZD5zIGFuZCA8dGFibGU+cy4gSW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKICAgICAgICAgLy8gdGhl
c2UgdGFncyB0byByZXRhaW4gdGhlaXIgZGlzcGxheSB0eXBlcy4KICAgICAgICAgaWYgKCFtX2No
ZWNrZXIuc3RyaWN0UGFyc2luZygpICYmIGUpIHsKICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdO
YW1lKHRkVGFnKSkgewogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NF
TEwpOwogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhOb0Zsb2F0KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKQor
ICAgICAgICAgICAgfSBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKICAgICAgICAg
ICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShzdHlsZS0+aXNEaXNwbGF5SW5saW5lVHlwZSgpID8g
SU5MSU5FX1RBQkxFIDogVEFCTEUpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGUgJiYgKGUt
Pmhhc1RhZ05hbWUodGRUYWcpIHx8IGUtPmhhc1RhZ05hbWUodGhUYWcpKSkgewogICAgICAgICAg
ICAgaWYgKHN0eWxlLT53aGl0ZVNwYWNlKCkgPT0gS0hUTUxfTk9XUkFQKSB7CiAgICAgICAgICAg
ICAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBhcmUgcmVhbGx5IG5vd3JhcHBpbmcgb3IgaWYgd2Ug
c2hvdWxkIGp1c3QKLSAgICAgICAgICAgICAgICAvLyB1c2Ugbm9ybWFsIGluc3RlYWQuICBJZiB0
aGUgd2lkdGggb2YgdGhlIGNlbGwgaXMgZml4ZWQsIHRoZW4KKyAgICAgICAgICAgICAgICAvLyB1
c2Ugbm9ybWFsIGluc3RlYWQuIElmIHRoZSB3aWR0aCBvZiB0aGUgY2VsbCBpcyBmaXhlZCwgdGhl
bgogICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IHVzZSBOT1dSQVAuCiAgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSkKICAgICAgICAgICAgICAg
ICAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoTk9STUFMKTsKQEAgLTE5NTEsOCArMTk0OSw4IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmUKICAgICAgICAgaWYgKGUg
JiYgZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykgJiYgKHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJL
SVRfTEVGVCB8fCBzdHlsZS0+dGV4dEFsaWduKCkgPT0gV0VCS0lUX0NFTlRFUiB8fCBzdHlsZS0+
dGV4dEFsaWduKCkgPT0gV0VCS0lUX1JJR0hUKSkKICAgICAgICAgICAgIHN0eWxlLT5zZXRUZXh0
QWxpZ24oVEFBVVRPKTsKIAotICAgICAgICAvLyBGcmFtZXMgYW5kIGZyYW1lc2V0cyBuZXZlciBo
b25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjphYnNvbHV0ZS4gIFRoaXMgaXMgbmVj
ZXNzYXJ5IHRvCi0gICAgICAgIC8vIGZpeCBhIGNyYXNoIHdoZXJlIGEgc2l0ZSB0cmllcyB0byBw
b3NpdGlvbiB0aGVzZSBvYmplY3RzLiAgVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRpc3BsYXkuCisg
ICAgICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVzZXRzIG5ldmVyIGhvbm9yIHBvc2l0aW9uOnJlbGF0
aXZlIG9yIHBvc2l0aW9uOmFic29sdXRlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0bworICAgICAgICAv
LyBmaXggYSBjcmFzaCB3aGVyZSBhIHNpdGUgdHJpZXMgdG8gcG9zaXRpb24gdGhlc2Ugb2JqZWN0
cy4gVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRpc3BsYXkuCiAgICAgICAgIGlmIChlICYmIChlLT5o
YXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSkpIHsKICAg
ICAgICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihTdGF0aWNQb3NpdGlvbik7CiAgICAgICAgICAg
ICBzdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CkBAIC0xOTgwLDEyICsxOTc4LDEyIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmUKICAgICAgICAgaWYgKHN0eWxlLT5k
aXNwbGF5KCkgPT0gSU5MSU5FICYmIHN0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETyAmJiBw
YXJlbnRTdHlsZSAmJiBzdHlsZS0+d3JpdGluZ01vZGUoKSAhPSBwYXJlbnRTdHlsZS0+d3JpdGlu
Z01vZGUoKSkKICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7CiAK
LSAgICAgICAgLy8gQWZ0ZXIgcGVyZm9ybWluZyB0aGUgZGlzcGxheSBtdXRhdGlvbiwgY2hlY2sg
dGFibGUgcm93cy4gIFdlIGRvIG5vdCBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvbgotICAgICAg
ICAvLyB0YWJsZSByb3dzIG9yIGNlbGxzLiAgVGhpcyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBpbiBD
U1MyLjEgKGFuZCBjYXVzZWQgYSBjcmFzaCBpbiBjb250YWluaW5nQmxvY2soKQorICAgICAgICAv
LyBBZnRlciBwZXJmb3JtaW5nIHRoZSBkaXNwbGF5IG11dGF0aW9uLCBjaGVjayB0YWJsZSByb3dz
LiBXZSBkbyBub3QgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb24KKyAgICAgICAgLy8gdGFibGUg
cm93cyBvciBjZWxscy4gVGhpcyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBpbiBDU1MyLjEgKGFuZCBj
YXVzZWQgYSBjcmFzaCBpbiBjb250YWluaW5nQmxvY2soKQogICAgICAgICAvLyBvbiBzb21lIHNp
dGVzKS4KICAgICAgICAgaWYgKChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0hFQURFUl9HUk9V
UCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPV19HUk9VUAotICAgICAgICAgICAgIHx8
IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfRk9PVEVSX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5
KCkgPT0gVEFCTEVfUk9XKSAmJgotICAgICAgICAgICAgIHN0eWxlLT5wb3NpdGlvbigpID09IFJl
bGF0aXZlUG9zaXRpb24pCisgICAgICAgICAgICAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJM
RV9GT09URVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cpCisgICAgICAg
ICAgICAgJiYgc3R5bGUtPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbikKICAgICAgICAg
ICAgIHN0eWxlLT5zZXRQb3NpdGlvbihTdGF0aWNQb3NpdGlvbik7CiAKICAgICAgICAgLy8gd3Jp
dGluZy1tb2RlIGRvZXMgbm90IGFwcGx5IHRvIHRhYmxlIHJvdyBncm91cHMsIHRhYmxlIGNvbHVt
biBncm91cHMsIHRhYmxlIHJvd3MsIGFuZCB0YWJsZSBjb2x1bW5zLgpAQCAtMjAwNiw5ICsyMDA0
LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZQogICAgIGlmIChz
dHlsZS0+cG9zaXRpb24oKSA9PSBTdGF0aWNQb3NpdGlvbikKICAgICAgICAgc3R5bGUtPnNldEhh
c0F1dG9aSW5kZXgoKTsKIAotICAgIC8vIEF1dG8gei1pbmRleCBiZWNvbWVzIDAgZm9yIHRoZSBy
b290IGVsZW1lbnQgYW5kIHRyYW5zcGFyZW50IG9iamVjdHMuICBUaGlzIHByZXZlbnRzCisgICAg
Ly8gQXV0byB6LWluZGV4IGJlY29tZXMgMCBmb3IgdGhlIHJvb3QgZWxlbWVudCBhbmQgdHJhbnNw
YXJlbnQgb2JqZWN0cy4gVGhpcyBwcmV2ZW50cwogICAgIC8vIGNhc2VzIHdoZXJlIG9iamVjdHMg
dGhhdCBzaG91bGQgYmUgYmxlbmRlZCBhcyBhIHNpbmdsZSB1bml0IGVuZCB1cCB3aXRoIGEgbm9u
LXRyYW5zcGFyZW50Ci0gICAgLy8gb2JqZWN0IHdlZGdlZCBpbiBiZXR3ZWVuIHRoZW0uICBBdXRv
IHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9yIG9iamVjdHMgdGhhdCBzcGVjaWZ5IHRyYW5zZm9y
bXMvbWFza3MvcmVmbGVjdGlvbnMuCisgICAgLy8gb2JqZWN0IHdlZGdlZCBpbiBiZXR3ZWVuIHRo
ZW0uIEF1dG8gei1pbmRleCBhbHNvIGJlY29tZXMgMCBmb3Igb2JqZWN0cyB0aGF0IHNwZWNpZnkg
dHJhbnNmb3Jtcy9tYXNrcy9yZWZsZWN0aW9ucy4KICAgICBpZiAoc3R5bGUtPmhhc0F1dG9aSW5k
ZXgoKSAmJiAoKGUgJiYgZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkgfHwg
c3R5bGUtPm9wYWNpdHkoKSA8IDEuMGYKICAgICAgICAgfHwgc3R5bGUtPmhhc1RyYW5zZm9ybVJl
bGF0ZWRQcm9wZXJ0eSgpIHx8IHN0eWxlLT5oYXNNYXNrKCkgfHwgc3R5bGUtPmJveFJlZmxlY3Qo
KSB8fCBzdHlsZS0+aGFzRmlsdGVyKCkKICNpZmRlZiBGSVhFRF9QT1NJVElPTl9DUkVBVEVTX1NU
QUNLSU5HX0NPTlRFWFQKQEAgLTIwNDcsOCArMjA0NSw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUoUmUKIAogICAgIC8vIFRhYmxlIHJvd3MsIHNlY3Rpb25zIGFuZCB0
aGUgdGFibGUgaXRzZWxmIHdpbGwgc3VwcG9ydCBvdmVyZmxvdzpoaWRkZW4gYW5kIHdpbGwgaWdu
b3JlIHNjcm9sbC9hdXRvLgogICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHRhYmxlIHNlY3Rpb25z
IHdpbGwgc3VwcG9ydCBhdXRvIGFuZCBzY3JvbGwuCi0gICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkg
PT0gVEFCTEUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVfVEFCTEUgfHwKLSAgICAgICAg
c3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1dfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9
PSBUQUJMRV9ST1cpIHsKKyAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRSB8fCBzdHls
ZS0+ZGlzcGxheSgpID09IElOTElORV9UQUJMRQorICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgp
ID09IFRBQkxFX1JPV19HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVykgewog
ICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFICYmIHN0eWxlLT5vdmVy
Zmxvd1goKSAhPSBPSElEREVOKQogICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPVklT
SUJMRSk7CiAgICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUgJiYgc3R5
bGUtPm92ZXJmbG93WSgpICE9IE9ISURERU4pCkBAIC0yMDcyLDcgKzIwNzAsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlCiAgICAgLy8gSW1wb3J0YW50OiBJbnRy
aW5zaWMgbWFyZ2lucyBnZXQgYWRkZWQgdG8gY29udHJvbHMgYmVmb3JlIHRoZSB0aGVtZSBoYXMg
YWRqdXN0ZWQgdGhlIHN0eWxlLCBzaW5jZSB0aGUgdGhlbWUgd2lsbAogICAgIC8vIGFsdGVyIGZv
bnRzIGFuZCBoZWlnaHRzL3dpZHRocy4KICAgICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpICYmIHN0eWxlLT5mb250U2l6ZSgpID49IDExKSB7Ci0gICAgICAgIC8vIERvbid0IGFw
cGx5IGludHJpbnNpYyBtYXJnaW5zIHRvIGltYWdlIGJ1dHRvbnMuICBUaGUgZGVzaWduZXIga25v
d3MgaG93IGJpZyB0aGUgaW1hZ2VzIGFyZSwKKyAgICAgICAgLy8gRG9uJ3QgYXBwbHkgaW50cmlu
c2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9ucy4gVGhlIGRlc2lnbmVyIGtub3dzIGhvdyBiaWcg
dGhlIGltYWdlcyBhcmUsCiAgICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gdHJlYXQgYWxsIGltYWdl
IGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNpdGx5IHNpemVkLgogICAgICAgICBp
ZiAoIWUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8ICFzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4oZSktPmlzSW1hZ2VCdXR0b24oKSkKICAgICAgICAgICAgIGFkZEludHJpbnNpY01hcmdp
bnMoc3R5bGUpOwpAQCAtMjUzMCw4ICsyNTI4LDggQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zy
b21TaGVldChTdHlsZVNoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShz
dGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihjaGlsZFJ1bGUpKTsKICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gICAvLyBmb3IgcnVsZXMKLSAgICAgICAgICAg
IH0gICAvLyBpZiBydWxlcworICAgICAgICAgICAgICAgIH0gLy8gZm9yIHJ1bGVzCisgICAgICAg
ICAgICB9IC8vIGlmIHJ1bGVzCiAgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNGb250RmFjZVJ1
bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZh
Y2UgdG8gb3VyIHNldC4KICAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdlIGRvbid0
IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21l
bnQuCkBAIC0yOTcyLDMyICsyOTcwLDMyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eVRvQ3VycmUKIGlubGluZSBib29sIGlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQpCiB7CiAgICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENv
bG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoKLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyQm90dG9tQ29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKLSAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRFbXBoYXNpc0NvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxD
b2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKLSAg
ICAgICAgLy8gQWxzbyBhbGxvdyBzaG9ydGhhbmRzIHNvIHRoYXQgaW5oZXJpdC9pbml0aWFsIHN0
aWxsIHdvcmsuCi0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgotICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
clJpZ2h0OgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wOgotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGlu
ZToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVm
dENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90
dG9tQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlPdXRsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xv
cjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRleHRTdHJva2VDb2xvcjoKKyAgICAvLyBBbHNvIGFsbG93IHNob3J0aGFuZHMgc28gdGhh
dCBpbmhlcml0L2luaXRpYWwgc3RpbGwgd29yay4KKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dy
b3VuZDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyUmlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgogI2lmIEVOQUJMRShTVkcpCi0g
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ry
b2tlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgorICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJv
a2U6CiAjZW5kaWYKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTMxMjQsMTAwICsz
MTIyLDEwMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvCiAgICAg
ZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIC8vIFdo
YXQgZm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRo
ZWlyIGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5kCi0gICAgLy8gUmVuZGVyU3R5bGUgdmFsdWVzLiAg
U2hvcnRoYW5kcyAoZS5nLiBib3JkZXIsIGJhY2tncm91bmQpIG9jY3VyIGluIHRoaXMgbGlzdCBh
cyB3ZWxsIGFuZAorICAgIC8vIFJlbmRlclN0eWxlIHZhbHVlcy4gU2hvcnRoYW5kcyAoZS5nLiBi
b3JkZXIsIGJhY2tncm91bmQpIG9jY3VyIGluIHRoaXMgbGlzdCBhcyB3ZWxsIGFuZAogICAgIC8v
IGFyZSBvbmx5IGhpdCB3aGVuIG1hcHBpbmcgImluaGVyaXQiIG9yICJpbml0aWFsIiBpbnRvIGZy
b250LWVuZCB2YWx1ZXMuCiAgICAgc3dpdGNoIChpZCkgewotLy8gbGlzdHMKKyAgICAvLyBsaXN0
cwogICAgIGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OgogICAgICAgICAvLyBsaXN0IG9mIHN0cmlu
ZywgdXJpLCBjb3VudGVyLCBhdHRyLCBpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW4gQ1NT
MywgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBpbmhlcml0IGNvbnRlbnQuICBJbiBDU1MyIGl0IGlz
IG5vdC4gIFRoaXMKLSAgICAgICAgLy8gbm90ZSBpcyBhIHJlbWluZGVyIHRoYXQgZXZlbnR1YWxs
eSAiaW5oZXJpdCIgbmVlZHMgdG8gYmUgc3VwcG9ydGVkLgorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogSW4gQ1NTMywgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBpbmhlcml0IGNvbnRl
bnQuIEluIENTUzIgaXQgaXMgbm90LiBUaGlzCisgICAgICAgICAgICAvLyBub3RlIGlzIGEgcmVt
aW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCiAK
LSAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250
ZW50KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmIChp
c0luaXRpYWwpIHsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICgh
dmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IGJvb2wgZGlkU2V0ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3Ig
aSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgICAgIENTU1Zh
bHVlKiBpdGVtID0gaS52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5l
cmF0b3JWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChTdHls
ZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworICAg
ICAgICAgICAgYm9vbCBkaWRTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQ1NTVmFsdWVM
aXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAgICAg
ICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0
eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7
Ci0gICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGl0ZW0tPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwg
c3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAg
ICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNlbmRpZgotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkp
LCBkaWRTZXQpOwotICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlz
SW1hZ2VWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQo
Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8
Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlk
U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250
ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogCi0gICAg
ICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgp
LCBkaWRTZXQpOwotICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogQ2FuIGEgbmFtZXNwYWNlIGJlIHNwZWNpZmllZCBmb3IgYW4gYXR0cihmb28pPwotICAg
ICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKLSAgICAg
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAg
ICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlID0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0cik7Ci0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRv
bSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0
ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQotICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMuYXR0
cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNDb3VudGVyKCkpIHsKLSAgICAgICAgICAgICAgICBDb3Vu
dGVyKiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFsdWUtPmdldENvdW50ZXJWYWx1ZSgpOwotICAg
ICAgICAgICAgICAgIEVMaXN0U3R5bGVUeXBlIGxpc3RTdHlsZVR5cGUgPSBOb25lTGlzdFN0eWxl
OwotICAgICAgICAgICAgICAgIGludCBsaXN0U3R5bGVJZGVudCA9IGNvdW50ZXJWYWx1ZS0+bGlz
dFN0eWxlSWRlbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NT
VmFsdWVOb25lKQotICAgICAgICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nh
c3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKLSAgICAg
ICAgICAgICAgICBPd25QdHI8Q291bnRlckNvbnRlbnQ+IGNvdW50ZXIgPSBhZG9wdFB0cihuZXcg
Q291bnRlckNvbnRlbnQoY291bnRlclZhbHVlLT5pZGVudGlmaWVyKCksIGxpc3RTdHlsZVR5cGUs
IGNvdW50ZXJWYWx1ZS0+c2VwYXJhdG9yKCkpKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN3aXRj
aCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZU9wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChP
UEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUtPmlz
U3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjb250
ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAg
ICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9v
KT8KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnN0eWxlVHlwZSgpID09IE5PUFNF
VURPKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyZW50U3R5
bGUtPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIo
bnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9t
KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IG1fZWxl
bWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOworICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRT
ZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9PcGVuUXVvdGU6Ci0g
ICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlk
U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUg
YXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlCisgICAgICAgICAgICAgICAgICAgIG1f
ZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQ291bnRlcigpKSB7CisgICAg
ICAgICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50ZXJWYWx1ZSA9IGNvbnRlbnRWYWx1ZS0+Z2V0
Q291bnRlclZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIEVMaXN0U3R5bGVUeXBlIGxpc3RT
dHlsZVR5cGUgPSBOb25lTGlzdFN0eWxlOworICAgICAgICAgICAgICAgICAgICBpbnQgbGlzdFN0
eWxlSWRlbnQgPSBjb3VudGVyVmFsdWUtPmxpc3RTdHlsZUlkZW50KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RTdHlsZVR5cGU+KGxp
c3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKKyAgICAgICAgICAgICAgICAgICAgT3duUHRy
PENvdW50ZXJDb250ZW50PiBjb3VudGVyID0gYWRvcHRQdHIobmV3IENvdW50ZXJDb250ZW50KGNv
dW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNl
cGFyYXRvcigpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY291
bnRlci5yZWxlYXNlKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVOb0Nsb3NlUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRl
bnQoTk9fQ0xPU0VfUVVPVEUsIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGRpZFNldCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbCBhbmQgbm9uZSBkbyBub3QgaGF2ZSBh
bnkgZWZmZWN0LgotICAgICAgICAgICAgICAgICAgICB7fQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZVF1
b3RlOgorICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChDTE9TRV9R
VU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZU5vT3BlblF1b3RlOgorICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
Q29udGVudChOT19PUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9DbG9zZVF1b3RlOgorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIG5vcm1hbCBhbmQgbm9uZSBkbyBub3QgaGF2ZSBhbnkgZWZmZWN0LgorICAgICAg
ICAgICAgICAgICAgICAgICAgeyB9CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWRpZFNldCkKKyAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBpZiAoIWRpZFNldCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFy
Q29udGVudCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlR
dW90ZXM6CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAgIGlmIChtX3BhcmVu
dFN0eWxlKQpAQCAtMzI1OCw3ICszMjU2LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1BybwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVk
Rm9udChwYXJlbnRGb250RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkpOwogICAgICAgICAg
ICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaXNJbml0aWFsKSB7CiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gaW5pdGlhbERl
c2MgPSBGb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5lcmljIGZh
bWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UKQEAgLTMyOTMsMzMgKzMyOTMsMzMgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1BybwogICAgICAgICAgICAgICAgIGZhY2Ug
PSBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChz
ZXR0aW5ncykgewogICAgICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgotICAg
ICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHko
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlU2VyaWY6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gc2VyaWZG
YW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJp
Y0ZhbWlseShGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2Fuc1Nlcmlm
OgotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHNhbnNTZXJpZkZhbWlseTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnRE
ZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ3Vyc2l2ZToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZhY2UgPSBjdXJzaXZlRmFtaWx5OwotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpD
dXJzaXZlRmFtaWx5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZhY2UgPSBmYW50YXN5RmFtaWx5OwotICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpGYW50YXN5RmFtaWx5KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlTW9ub3NwYWNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IG1vbm9z
cGFjZUZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRH
ZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
V2Via2l0UGljdG9ncmFwaDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBwaWN0b2dy
YXBoRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdl
bmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpQaWN0b2dyYXBoRmFtaWx5KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRCb2R5OgorICAgICAgICAgICAgICAgICAgICBmYWNlID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9u
dEZhbWlseSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlU2VyaWY6CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzZXJpZkZhbWls
eTsKKyAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHko
Rm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAgICAgICAgICAg
ICAgICAgIGZhY2UgPSBzYW5zU2VyaWZGYW1pbHk7CisgICAgICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFt
aWx5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZUN1cnNpdmU6CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBjdXJzaXZlRmFtaWx5
OworICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShG
b250RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKKyAgICAgICAgICAgICAg
ICAgICAgZmFjZSA9IGZhbnRhc3lGYW1pbHk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVNb25vc3BhY2U6CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBtb25vc3BhY2VGYW1pbHk7
CisgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZv
bnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6CisgICAg
ICAgICAgICAgICAgICAgIGZhY2UgPSBwaWN0b2dyYXBoRmFtaWx5OworICAgICAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlBp
Y3RvZ3JhcGhGYW1pbHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTMzNTQsOCArMzM1NCw3IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm8KICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewog
ICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7CiAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAoaXNJbmhlcml0KSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbmhlcml0KSB7
CiAgICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0QmFja2dyb3VuZExheWVycygqbV9wYXJlbnRT
dHlsZS0+YmFja2dyb3VuZExheWVycygpKTsKICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJhY2tn
cm91bmRDb2xvcihtX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAgICAgIH0K
QEAgLTMzOTgsNyArMzM5Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm8KICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAg
ICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZvbnQocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCksIGZvbnREZXNjcmlwdGlvbik7CiAKLSAgICAgICAgICAgIC8vIERv
dWJsZS1jaGVjayBhbmQgc2VlIGlmIHRoZSB0aGVtZSBkaWQgYW55dGhpbmcuICBJZiBub3QsIGRv
bid0IGJvdGhlciB1cGRhdGluZyB0aGUgZm9udC4KKyAgICAgICAgICAgIC8vIERvdWJsZS1jaGVj
ayBhbmQgc2VlIGlmIHRoZSB0aGVtZSBkaWQgYW55dGhpbmcuIElmIG5vdCwgZG9uJ3QgYm90aGVy
IHVwZGF0aW5nIHRoZSBmb250LgogICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc0Fi
c29sdXRlU2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSByZW5kZXJp
bmcgbW9kZSBhbmQgcHJpbnRlciBmb250IHNldHRpbmdzIGFyZSB1cGRhdGVkLgogICAgICAgICAg
ICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5n
cygpOwpAQCAtMzQxMyw5ICszNDEyLDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1BybwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRW
YWx1ZSgpKSB7Ci0gICAgICAgICAgICBGb250VmFsdWUgKmZvbnQgPSBzdGF0aWNfY2FzdDxGb250
VmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIWZvbnQtPnN0eWxlIHx8ICFmb250LT52
YXJpYW50IHx8ICFmb250LT53ZWlnaHQgfHwKLSAgICAgICAgICAgICAgICAgIWZvbnQtPnNpemUg
fHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZvbnQtPmZhbWlseSkKKyAgICAgICAgICAgIEZvbnRW
YWx1ZSogZm9udCA9IHN0YXRpY19jYXN0PEZvbnRWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgICAg
IGlmICghZm9udC0+c3R5bGUgfHwgIWZvbnQtPnZhcmlhbnQgfHwgIWZvbnQtPndlaWdodAorICAg
ICAgICAgICAgICAgIHx8ICFmb250LT5zaXplIHx8ICFmb250LT5saW5lSGVpZ2h0IHx8ICFmb250
LT5mYW1pbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOwogICAgICAgICAg
ICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50Lmdl
dCgpKTsKQEAgLTM1MDcsOCArMzUwNiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm8KICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVDb2xvcihtX3Bh
cmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0eWxlLT5j
b2x1bW5SdWxlQ29sb3IoKSA6IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOwogICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1bGVTdHls
ZSgpKTsKICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVXaWR0aChtX3BhcmVudFN0
eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaXNJ
bml0aWFsKQorICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkKICAgICAgICAgICAgIG1fc3R5
bGUtPnJlc2V0Q29sdW1uUnVsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hcnF1ZWU6CkBAIC0zNTM2LDE1ICszNTM0LDE1IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
aWYgKGludCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKGlkZW50KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNsb3c6Ci0g
ICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAg
bXNlYy4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNw
ZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3VwZXIg
ZmFzdC4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlU2xvdzoKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsg
Ly8gNTAwIG1zZWMuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg4
NSk7IC8vIDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFzdDoKKyAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzVGltZSgpKQogICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNl
Y29uZHM+KCkpOwpAQCAtMzU1OCwxNSArMzU1NiwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoK
LSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgo
MSwgRml4ZWQpKTsgLy8gMXB4LgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCg2LCBGaXhlZCkpOyAvLyA2cHguIFRoZSBXaW5J
RSBkZWZhdWx0LgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlTGFyZ2U6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1
ZWVJbmNyZW1lbnQoTGVuZ3RoKDM2LCBGaXhlZCkpOyAvLyAzNnB4LgotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKKyAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAx
cHguCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9y
bWFsOgorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3Ro
KDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6CisgICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHgu
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChw
cmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKQEAgLTM2MDksMTEg
KzM2MDcsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1BybwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgRGFzaGJvYXJkUmVnaW9uICpy
ZWdpb24gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RGFzaGJvYXJkUmVnaW9uVmFsdWUoKTsKKyAgICAg
ICAgRGFzaGJvYXJkUmVnaW9uKiByZWdpb24gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RGFzaGJvYXJk
UmVnaW9uVmFsdWUoKTsKICAgICAgICAgaWYgKCFyZWdpb24pCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgRGFzaGJvYXJkUmVnaW9uICpmaXJzdCA9IHJlZ2lvbjsKKyAgICAgICAgRGFz
aGJvYXJkUmVnaW9uKiBmaXJzdCA9IHJlZ2lvbjsKICAgICAgICAgd2hpbGUgKHJlZ2lvbikgewog
ICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnRvcCgp
LCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwogICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0
ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlKTsKQEAgLTM2NDUsMjAgKzM2NDMsMjAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1BybwogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0
ZXh0U3Ryb2tlV2lkdGgsIFRleHRTdHJva2VXaWR0aCkKICAgICAgICAgZmxvYXQgd2lkdGggPSAw
OwogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlVGhpbjoKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNZWRpdW06
Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlVGhpY2s6IHsKLSAgICAgICAgICAgICAgICBkb3Vi
bGUgcmVzdWx0ID0gMS4wIC8gNDg7Ci0gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlTWVkaXVtKQotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgKj0gMzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZVRoaWNrKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgKj0gNTsK
LSAgICAgICAgICAgICAgICB3aWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1f
cm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTVmFsdWVUaGluOgorICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgor
ICAgICAgICBjYXNlIENTU1ZhbHVlVGhpY2s6IHsKKyAgICAgICAgICAgIGRvdWJsZSByZXN1bHQg
PSAxLjAgLyA0ODsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZU1lZGl1bSkKKyAgICAgICAgICAgICAgICByZXN1bHQgKj0gMzsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVGhpY2sp
CisgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDU7CisgICAgICAgICAgICB3aWR0aCA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUykt
PmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZh
Y3Rvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4o
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0
aCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQxODQsMTcgKzQxODIsMTcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjptYXBGaWxsQXR0YWNobWVudChDUwogCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAg
ICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICBjYXNlIENT
U1ZhbHVlRml4ZWQ6Ci0gICAgICAgICAgICBsYXllci0+c2V0QXR0YWNobWVudChGaXhlZEJhY2tn
cm91bmRBdHRhY2htZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Zh
bHVlU2Nyb2xsOgotICAgICAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQoU2Nyb2xsQmFja2dy
b3VuZEF0dGFjaG1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFs
dWVMb2NhbDoKLSAgICAgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KExvY2FsQmFja2dyb3Vu
ZEF0dGFjaG1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NWYWx1ZUZpeGVkOgorICAgICAgICBsYXllci0+
c2V0QXR0YWNobWVudChGaXhlZEJhY2tncm91bmRBdHRhY2htZW50KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NWYWx1ZVNjcm9sbDoKKyAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQo
U2Nyb2xsQmFja2dyb3VuZEF0dGFjaG1lbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENT
U1ZhbHVlTG9jYWw6CisgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KExvY2FsQmFja2dyb3Vu
ZEF0dGFjaG1lbnQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm47CiAgICAgfQogfQogCkBAIC00Mzc5LDE4ICs0Mzc3LDE4IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6bWFwRmlsbFhQb3NpdGlvbihDU1MKICAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgTGVuZ3RoIGw7
CisgICAgTGVuZ3RoIGxlbmd0aDsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkp
Ci0gICAgICAgIGwgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgIGxlbmd0aCA9IHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlLCB6b29tRmFjdG9yKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJj
ZW50YWdlKCkpCi0gICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZh
bHVlKCksIFBlcmNlbnQpOworICAgICAgICBsZW5ndGggPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUt
PmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQotICAgICAgICBsID0gTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGUoKSwgbV9y
b290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGxlbmd0aCA9IExlbmd0aChw
cmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlKCksIG1fcm9v
dEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQotICAgICAgICBsID0gcHJpbWl0aXZlVmFs
dWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOworICAgICAgICBsZW5ndGggPSBwcmltaXRp
dmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAgZWxzZQogICAgICAgICBy
ZXR1cm47Ci0gICAgbGF5ZXItPnNldFhQb3NpdGlvbihsKTsKKyAgICBsYXllci0+c2V0WFBvc2l0
aW9uKGxlbmd0aCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFlQb3NpdGlvbihD
U1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCkBAIC00NDA2
LDE4ICs0NDA0LDE4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFlQb3NpdGlvbihDU1MK
ICAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgTGVuZ3RoIGw7CisgICAgTGVuZ3RoIGxlbmd0aDsKICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgIGwgPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3Rvcik7CisgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIGwgPSBM
ZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOworICAgICAg
ICBsZW5ndGggPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNl
bnQpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdl
V2l0aExlbmd0aCgpKQotICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxj
VmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFj
dG9yKSk7CisgICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1Zh
bHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cikpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxl
bmd0aCgpKQotICAgICAgICBsID0gcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxl
bmd0aCgpOworICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50
YWdlTGVuZ3RoKCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXItPnNldFlQ
b3NpdGlvbihsKTsKKyAgICBsYXllci0+c2V0WVBvc2l0aW9uKGxlbmd0aCk7CiB9CiAKIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0aW9uKiBhbmltYXRpb24sIENT
U1ZhbHVlKiB2YWx1ZSkKQEAgLTQ1ODUsMjcgKzQ1ODMsMjcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjptYXBBbmltYXRpb25UaW1pbmdGdQogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGluZWFyOgot
ICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5n
RnVuY3Rpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVFYXNlOgotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5n
RnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbjoKLSAgICAgICAg
ICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb246OmNyZWF0ZSgwLjQyLCAwLjAsIDEuMCwgMS4wKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlRWFzZU91dDoKLSAgICAgICAgICAgICAgICBh
bmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNy
ZWF0ZSgwLjAsIDAuMCwgMC41OCwgMS4wKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlRWFzZUluT3V0OgotICAgICAgICAgICAgICAgIGFuaW1hdGlv
bi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDAu
NDIsIDAuMCwgMC41OCwgMS4wKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlU3RlcFN0YXJ0OgotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0
VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDEsIHRydWUpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTdGVwRW5kOgot
ICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKDEsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ1NTVmFsdWVMaW5lYXI6CisgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWlu
Z0Z1bmN0aW9uKExpbmVhclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2U6CisgICAgICAgICAgICBhbmltYXRpb24t
PnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlRWFzZUluOgorICAgICAg
ICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoMC40MiwgMC4wLCAxLjAsIDEuMCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlT3V0OgorICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRU
aW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoMC4wLCAwLjAs
IDAuNTgsIDEuMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVF
YXNlSW5PdXQ6CisgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgwLjQyLCAwLjAsIDAuNTgsIDEuMCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTdGVwU3RhcnQ6CisgICAgICAg
ICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFN0ZXBzVGltaW5nRnVuY3Rpb246OmNy
ZWF0ZSgxLCB0cnVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZVN0ZXBFbmQ6CisgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFN0ZXBz
VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgxLCBmYWxzZSkpOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ4NDIsMTIgKzQ4NDAsMTIgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbAogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBGb3Igbm93LCBsdW1wIGFsbCBmYW1pbGllcyBidXQgbW9ub3NwYWNlIHRvZ2V0
aGVyLgotICAgIGlmIChjaGlsZEZvbnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlv
bjo6TW9ub3NwYWNlRmFtaWx5ICYmCi0gICAgICAgIHBhcmVudEZvbnQuZ2VuZXJpY0ZhbWlseSgp
ICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KQorICAgIGlmIChjaGlsZEZvbnQu
Z2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5CisgICAg
ICAgICYmIHBhcmVudEZvbnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9u
b3NwYWNlRmFtaWx5KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBrbm93IHRoZSBwYXJl
bnQgaXMgbW9ub3NwYWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3BhY2UsIGFuZCB0aGF0IGZvbnQK
LSAgICAvLyBzaXplIHdhcyB1bnNwZWNpZmllZC4gIFdlIHdhbnQgdG8gc2NhbGUgb3VyIGZvbnQg
c2l6ZSBhcyBhcHByb3ByaWF0ZS4KKyAgICAvLyBzaXplIHdhcyB1bnNwZWNpZmllZC4gV2Ugd2Fu
dCB0byBzY2FsZSBvdXIgZm9udCBzaXplIGFzIGFwcHJvcHJpYXRlLgogICAgIC8vIElmIHRoZSBm
b250IHVzZXMgYSBrZXl3b3JkIHNpemUsIHRoZW4gd2UgcmVmZXRjaCBmcm9tIHRoZSB0YWJsZSBy
YXRoZXIgdGhhbgogICAgIC8vIG11bHRpcGx5aW5nIGJ5IG91ciBzY2FsZSBmYWN0b3IuCiAgICAg
ZmxvYXQgc2l6ZTsKQEAgLTQ4OTUsOCArNDg5Myw4IEBAIGZsb2F0IFN0eWxlUmVzb2x2ZXI6Omdl
dENvbXB1dGVkU2l6ZUZyb20KICAgICBpZiAoZmFic2Yoc3BlY2lmaWVkU2l6ZSkgPCBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpKQogICAgICAgICByZXR1cm4gMC4wZjsKIAot
ICAgIC8vIFdlIHN1cHBvcnQgdHdvIHR5cGVzIG9mIG1pbmltdW0gZm9udCBzaXplLiAgVGhlIGZp
cnN0IGlzIGEgaGFyZCBvdmVycmlkZSB0aGF0IGFwcGxpZXMgdG8KLSAgICAvLyBhbGwgZm9udHMu
ICBUaGlzIGlzICJtaW5TaXplLiIgIFRoZSBzZWNvbmQgdHlwZSBvZiBtaW5pbXVtIGZvbnQgc2l6
ZSBpcyBhICJzbWFydCBtaW5pbXVtIgorICAgIC8vIFdlIHN1cHBvcnQgdHdvIHR5cGVzIG9mIG1p
bmltdW0gZm9udCBzaXplLiBUaGUgZmlyc3QgaXMgYSBoYXJkIG92ZXJyaWRlIHRoYXQgYXBwbGll
cyB0bworICAgIC8vIGFsbCBmb250cy4gVGhpcyBpcyAibWluU2l6ZS4iIFRoZSBzZWNvbmQgdHlw
ZSBvZiBtaW5pbXVtIGZvbnQgc2l6ZSBpcyBhICJzbWFydCBtaW5pbXVtIgogICAgIC8vIHRoYXQg
aXMgYXBwbGllZCBvbmx5IHdoZW4gdGhlIFdlYiBwYWdlIGNhbid0IGtub3cgd2hhdCBzaXplIGl0
IHJlYWxseSBhc2tlZCBmb3IsIGUuZy4sCiAgICAgLy8gd2hlbiBpdCB1c2VzIGxvZ2ljYWwgc2l6
ZXMgbGlrZSAic21hbGwiIG9yIGV4cHJlc3NlcyB0aGUgZm9udC1zaXplIGFzIGEgcGVyY2VudGFn
ZSBvZgogICAgIC8vIHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IHNldHRpbmcuCkBAIC00OTEzLDEz
ICs0OTExLDEzIEBAIGZsb2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb20KICAg
ICBpbnQgbWluTG9naWNhbFNpemUgPSBzZXR0aW5ncy0+bWluaW11bUxvZ2ljYWxGb250U2l6ZSgp
OwogICAgIGZsb2F0IHpvb21lZFNpemUgPSBzcGVjaWZpZWRTaXplICogem9vbUZhY3RvcjsKIAot
ICAgIC8vIEFwcGx5IHRoZSBoYXJkIG1pbmltdW0gZmlyc3QuICBXZSBvbmx5IGFwcGx5IHRoZSBo
YXJkIG1pbmltdW0gaWYgYWZ0ZXIgem9vbWluZyB3ZSdyZSBzdGlsbCB0b28gc21hbGwuCisgICAg
Ly8gQXBwbHkgdGhlIGhhcmQgbWluaW11bSBmaXJzdC4gV2Ugb25seSBhcHBseSB0aGUgaGFyZCBt
aW5pbXVtIGlmIGFmdGVyIHpvb21pbmcgd2UncmUgc3RpbGwgdG9vIHNtYWxsLgogICAgIGlmICh6
b29tZWRTaXplIDwgbWluU2l6ZSkKICAgICAgICAgem9vbWVkU2l6ZSA9IG1pblNpemU7CiAKLSAg
ICAvLyBOb3cgYXBwbHkgdGhlICJzbWFydCBtaW5pbXVtLiIgIFRoaXMgbWluaW11bSBpcyBhbHNv
IG9ubHkgYXBwbGllZCBpZiB3ZSdyZSBzdGlsbCB0b28gc21hbGwKLSAgICAvLyBhZnRlciB6b29t
aW5nLiAgVGhlIGZvbnQgc2l6ZSBtdXN0IGVpdGhlciBiZSByZWxhdGl2ZSB0byB0aGUgdXNlciBk
ZWZhdWx0IG9yIHRoZSBvcmlnaW5hbCBzaXplCi0gICAgLy8gbXVzdCBoYXZlIGJlZW4gYWNjZXB0
YWJsZS4gIEluIG90aGVyIHdvcmRzLCB3ZSBvbmx5IGFwcGx5IHRoZSBzbWFydCBtaW5pbXVtIHdo
ZW5ldmVyIHdlJ3JlIHBvc2l0aXZlCisgICAgLy8gTm93IGFwcGx5IHRoZSAic21hcnQgbWluaW11
bS4iIFRoaXMgbWluaW11bSBpcyBhbHNvIG9ubHkgYXBwbGllZCBpZiB3ZSdyZSBzdGlsbCB0b28g
c21hbGwKKyAgICAvLyBhZnRlciB6b29taW5nLiBUaGUgZm9udCBzaXplIG11c3QgZWl0aGVyIGJl
IHJlbGF0aXZlIHRvIHRoZSB1c2VyIGRlZmF1bHQgb3IgdGhlIG9yaWdpbmFsIHNpemUKKyAgICAv
LyBtdXN0IGhhdmUgYmVlbiBhY2NlcHRhYmxlLiBJbiBvdGhlciB3b3Jkcywgd2Ugb25seSBhcHBs
eSB0aGUgc21hcnQgbWluaW11bSB3aGVuZXZlciB3ZSdyZSBwb3NpdGl2ZQogICAgIC8vIGRvaW5n
IHNvIHdvbid0IGRpc3J1cHQgdGhlIGxheW91dC4KICAgICBpZiAodXNlU21hcnRNaW5pbXVtRm9y
Rm9udFNpemUgJiYgem9vbWVkU2l6ZSA8IG1pbkxvZ2ljYWxTaXplICYmIChzcGVjaWZpZWRTaXpl
ID49IG1pbkxvZ2ljYWxTaXplIHx8ICFpc0Fic29sdXRlU2l6ZSkpCiAgICAgICAgIHpvb21lZFNp
emUgPSBtaW5Mb2dpY2FsU2l6ZTsKQEAgLTQ5MzMsNyArNDkzMSw3IEBAIGNvbnN0IGludCBmb250
U2l6ZVRhYmxlTWF4ID0gMTY7CiBjb25zdCBpbnQgZm9udFNpemVUYWJsZU1pbiA9IDk7CiBjb25z
dCBpbnQgdG90YWxLZXl3b3JkcyA9IDg7CiAKLS8vIFdpbklFL05hdjQgdGFibGUgZm9yIGZvbnQg
c2l6ZXMuICBEZXNpZ25lZCB0byBtYXRjaCB0aGUgbGVnYWN5IGZvbnQgbWFwcGluZyBzeXN0ZW0g
b2YgSFRNTC4KKy8vIFdpbklFL05hdjQgdGFibGUgZm9yIGZvbnQgc2l6ZXMuIERlc2lnbmVkIHRv
IG1hdGNoIHRoZSBsZWdhY3kgZm9udCBtYXBwaW5nIHN5c3RlbSBvZiBIVE1MLgogc3RhdGljIGNv
bnN0IGludCBxdWlya3NGb250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBmb250U2l6ZVRh
YmxlTWluICsgMV1bdG90YWxLZXl3b3Jkc10gPQogewogICAgICAgeyA5LCAgICA5LCAgICAgOSwg
ICAgIDksICAgIDExLCAgICAxNCwgICAgMTgsICAgIDI4IH0sCkBAIC00OTQzLDcgKzQ5NDEsNyBA
QCBzdGF0aWMgY29uc3QgaW50IHF1aXJrc0ZvbnRTaXplVGFibGVbZm9uCiAgICAgICB7IDksICAg
IDksICAgIDEwLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwgICAgNDAgfSwgLy8gZml4ZWQg
Zm9udCBkZWZhdWx0ICgxMykKICAgICAgIHsgOSwgICAgOSwgICAgMTEsICAgIDE0LCAgICAxNywg
ICAgMjEsICAgIDI4LCAgICA0MiB9LAogICAgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTUsICAg
IDE3LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCi0gICAgICB7IDksICAgMTAsICAgIDEzLCAgICAx
NiwgICAgMTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAgLy8gcHJvcG9ydGlvbmFsIGZvbnQgZGVm
YXVsdCAoMTYpCisgICAgICB7IDksICAgMTAsICAgIDEzLCAgICAxNiwgICAgMTgsICAgIDI0LCAg
ICAzMiwgICAgNDggfSAvLyBwcm9wb3J0aW9uYWwgZm9udCBkZWZhdWx0ICgxNikKIH07CiAvLyBI
VE1MICAgICAgIDEgICAgICAyICAgICAgMyAgICAgIDQgICAgICA1ICAgICAgNiAgICAgIDcKIC8v
IENTUyAgeHhzICAgeHMgICAgIHMgICAgICBtICAgICAgbCAgICAgeGwgICAgIHh4bApAQCAtNDk2
MCw3ICs0OTU4LDcgQEAgc3RhdGljIGNvbnN0IGludCBzdHJpY3RGb250U2l6ZVRhYmxlW2Zvbgog
ICAgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE2LCAgICAyMCwgICAgMjYsICAgIDM5
IH0sIC8vIGZpeGVkIGZvbnQgZGVmYXVsdCAoMTMpCiAgICAgICB7IDksICAgMTAsICAgIDEyLCAg
ICAxNCwgICAgMTcsICAgIDIxLCAgICAyOCwgICAgNDIgfSwKICAgICAgIHsgOSwgICAxMCwgICAg
MTMsICAgIDE1LCAgICAxOCwgICAgMjMsICAgIDMwLCAgICA0NSB9LAotICAgICAgeyA5LCAgIDEw
LCAgICAxMywgICAgMTYsICAgIDE4LCAgICAyNCwgICAgMzIsICAgIDQ4IH0gIC8vIHByb3BvcnRp
b25hbCBmb250IGRlZmF1bHQgKDE2KQorICAgICAgeyA5LCAgIDEwLCAgICAxMywgICAgMTYsICAg
IDE4LCAgICAyNCwgICAgMzIsICAgIDQ4IH0gLy8gcHJvcG9ydGlvbmFsIGZvbnQgZGVmYXVsdCAo
MTYpCiB9OwogLy8gSFRNTCAgICAgICAxICAgICAgMiAgICAgIDMgICAgICA0ICAgICAgNSAgICAg
IDYgICAgICA3CiAvLyBDU1MgIHh4cyAgIHhzICAgICBzICAgICAgbSAgICAgIGwgICAgIHhsICAg
ICB4eGwKQEAgLTUxMDIsMjggKzUxMDAsMjggQEAgYm9vbCBTdHlsZVJlc29sdmVyOjphZmZlY3Rl
ZEJ5Vmlld3BvcnRDaAogc3RhdGljIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBn
ZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2Zv
cm1PcGVyYXRpb25UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNh
c2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAg
ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRTsKLSAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgIHJl
dHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICByZXR1cm4g
VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0NBTEVfWjsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2NhbGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgIHJldHVybiBUcmFuc2Zvcm1P
cGVyYXRpb246OlNDQUxFXzNEOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6VFJBTlNMQVRFOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpU
cmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFX1g7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRy
YW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWTsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJh
bnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9aOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFu
c2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFXzNEOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6
Uk9UQVRFOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJh
bnNmb3JtT3BlcmF0aW9uOiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRF
X1g7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zv
cm1PcGVyYXRpb246ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWTsK
LSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9w
ZXJhdGlvbjogICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9aOwotICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRyYW5zZm9ybU9wZXJh
dGlvbjogICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOwotICAgICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOiAg
ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzsKLSAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAg
IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDsKLSAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgIHJldHVy
biBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWTsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgIHJldHVybiBUcmFu
c2Zvcm1PcGVyYXRpb246Ok1BVFJJWDsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgIHJldHVybiBUcmFuc2Zvcm1P
cGVyYXRpb246Ok1BVFJJWF8zRDsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246ICAgIHJldHVybiBUcmFuc2Zvcm1PcGVy
YXRpb246OlBFUlNQRUNUSVZFOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpVbmtub3duVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Tk9ORTsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5z
Zm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU7CisgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1
cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9YOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6U0NBTEVfWTsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpU
cmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o7Cisg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUzRFRyYW5zZm9ybU9wZXJhdGlv
bjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q7CisgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJh
bnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6VFJBTlNMQVRFX1g7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJh
bnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1k7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRy
YW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1o7
CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlM0RUcmFuc2Zvcm1P
cGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDsKKyAgICBj
YXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246IHJl
dHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURTsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3Bl
cmF0aW9uOjpST1RBVEVfWDsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3Rh
dGVZVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVf
WTsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVaVHJhbnNmb3JtT3Bl
cmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWjsKKyAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJu
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRp
b246OlNLRVc7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFuc2Zv
cm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDsKKyAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJu
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19ZOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlv
bjo6TUFUUklYOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeDNEVHJh
bnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVhfM0Q7Cisg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVy
YXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOworICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb246IHJldHVy
biBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU7CiAgICAgfQogICAgIHJldHVybiBUcmFuc2Zvcm1P
cGVyYXRpb246Ok5PTkU7CiB9CkBAIC01MTU5LDIxMiArNTE1NywyMTIgQEAgYm9vbCBTdHlsZVJl
c29sdmVyOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYQogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
Zmlyc3RWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFs
dWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwogCiAgICAgICAgIHN3aXRjaCAodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAg
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVy
YXRpb246IHsKLSAgICAgICAgICAgICAgICBkb3VibGUgc3ggPSAxLjA7Ci0gICAgICAgICAgICAg
ICAgZG91YmxlIHN5ID0gMS4wOwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+
b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zv
cm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
c3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUtPmdldERv
dWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzeSA9IHN4OwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOgor
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVy
YXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5z
Zm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgZG91YmxlIHN4ID0gMS4wOworICAgICAgICAg
ICAgZG91YmxlIHN5ID0gMS4wOworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVy
YXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9w
ZXJhdGlvbikKKyAgICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVl
KCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUt
PmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5v
cGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9y
bU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxl
bmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1W
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBzeSwgMS4wLCBnZXRUcmFuc2Zvcm1PcGVy
YXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0g
ICAgICAgICAgICAgICAgZG91YmxlIHN4ID0gMS4wOwotICAgICAgICAgICAgICAgIGRvdWJsZSBz
eSA9IDEuMDsKLSAgICAgICAgICAgICAgICBkb3VibGUgc3ogPSAxLjA7Ci0gICAgICAgICAgICAg
ICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAg
c3ogPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgc3kg
PSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAyKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeiA9
IHRoaXJkVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4g
MSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNv
bmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHN4OworICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoc3gsIHN5LCAxLjAsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9y
bU9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUz
RFRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgZG91YmxlIHN4ID0gMS4wOworICAg
ICAgICAgICAgZG91YmxlIHN5ID0gMS4wOworICAgICAgICAgICAgZG91YmxlIHN6ID0gMS4wOwor
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAg
ICAgICBzeiA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBlbHNl
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgc3kgPSBm
aXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAg
ICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzeiA9IHRoaXJkVmFsdWUtPmdldERvdWJsZVZhbHVl
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHN4Owog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIHN6LCBnZXRU
cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246Ci0g
ICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNm
b3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgIExlbmd0aCB0
eCA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3Ro
KDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlv
blR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9w
ZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChm
aXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChm
aXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0
VG9GbG9hdExlbmd0aChzZWNvbmRWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIHN6
LCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBl
KCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRp
b246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFu
c2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgIExlbmd0aCB0eCA9IExlbmd0aCgwLCBGaXhl
ZCk7CisgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAgICAg
ICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAg
dHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6
b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHR4ID0gY29u
dmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rv
cik7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkg
IT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24p
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252
ZXJ0VG9GbG9hdExlbmd0aChzZWNvbmRWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rv
cik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodHguaXNVbmRlZmluZWQoKSB8fCB0eS5pc1VuZGVm
aW5lZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBp
ZiAodHguaXNVbmRlZmluZWQoKSB8fCB0eS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygp
LmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0eCwgdHksIExlbmd0
aCgwLCBGaXhlZCksIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9w
ZXJhdGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFu
c2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgIExlbmd0
aCB0eCA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVu
Z3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICBMZW5ndGggdHogPSBMZW5ndGgoMCwgRml4
ZWQpOwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9u
KQotICAgICAgICAgICAgICAgICAgICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFs
dWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAg
IHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwg
em9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwg
em9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3Bl
cmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNm
b3JtT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFs
dWUtPmxlbmd0aCgpID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0
cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aCh0aGlyZFZhbHVlLCBzdHls
ZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkg
PSBjb252ZXJ0VG9GbG9hdExlbmd0aChzZWNvbmRWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9v
bUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUodHgsIHR5LCBMZW5ndGgoMCwgRml4ZWQpLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRy
YW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVa
VHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgTGVuZ3RoIHR4
ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAgIExlbmd0aCB0eSA9IExlbmd0aCgwLCBG
aXhlZCk7CisgICAgICAgICAgICBMZW5ndGggdHogPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAg
ICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxl
LCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVy
YXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zv
cm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChm
aXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1
ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICAgICAgaWYgKHRy
YW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKHRoaXJkVmFsdWUs
IHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRv
RmxvYXRMZW5ndGgoc2Vjb25kVmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKHR4LmlzVW5kZWZpbmVkKCkgfHwgdHkuaXNVbmRlZmluZWQo
KSB8fCB0ei5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBpZiAodHguaXNVbmRlZmluZWQoKSB8fCB0eS5pc1VuZGVmaW5lZCgpIHx8
IHR6LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgdHosIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5
cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgIGRvdWJs
ZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7Ci0gICAgICAgICAgICAgICAg
b3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKDAsIDAsIDEsIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3Rh
dGVYVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAg
ICAgICAgICAgICBkb3VibGUgeCA9IDA7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHkgPSAwOwot
ICAgICAgICAgICAgICAgIGRvdWJsZSB6ID0gMDsKLSAgICAgICAgICAgICAgICBkb3VibGUgYW5n
bGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygpOwotCi0gICAgICAgICAgICAgICAgaWYg
KHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHggPSAx
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBl
KCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24p
Ci0gICAgICAgICAgICAgICAgICAgIHkgPSAxOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgeiA9IDE7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIGFu
Z2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25U
eXBlKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRyYW5zZm9ybU9wZXJh
dGlvbjogewotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPCA0
KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRy
YW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOwotICAg
ICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmb3VydGhWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soMykpOwotICAgICAgICAgICAgICAgIGRvdWJsZSB4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgeSA9IHNlY29uZFZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGRvdWJsZSB6ID0gdGhpcmRWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmb3VydGhWYWx1ZS0+
Y29tcHV0ZURlZ3JlZXMoKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUs
IGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUo
KSkpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0eCwgdHksIHR6LCBnZXRUcmFuc2Zvcm1PcGVy
YXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9
IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMCwgMCwg
MSwgYW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJh
dGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246Cisg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1PcGVy
YXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVpUcmFu
c2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgIGRvdWJsZSB4ID0gMDsKKyAgICAgICAgICAg
IGRvdWJsZSB5ID0gMDsKKyAgICAgICAgICAgIGRvdWJsZSB6ID0gMDsKKyAgICAgICAgICAgIGRv
dWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CisKKyAgICAgICAgICAg
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHggPSAx
OworICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKKyAg
ICAgICAgICAgICAgICB5ID0gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB6
ID0gMTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgZ2V0VHJhbnNmb3JtT3Bl
cmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zv
cm1WYWx1ZS0+bGVuZ3RoKCkgPCA0KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5z
Zm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlNrZXdYVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICBk
b3VibGUgYW5nbGVYID0gMDsKLSAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGVZID0gMDsKLSAg
ICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygp
OwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAg
ICAgICAgICAgICAgICAgYW5nbGVZID0gYW5nbGU7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGFuZ2xlWCA9IGFuZ2xlOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBzZWNvbmRWYWx1ZS0+Y29t
cHV0ZURlZ3JlZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsK
KyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmb3VydGhWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soMykpOworICAgICAgICAgICAgZG91YmxlIHggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1
ZSgpOworICAgICAgICAgICAgZG91YmxlIHkgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKKyAgICAgICAgICAgIGRvdWJsZSB6ID0gdGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsK
KyAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZvdXJ0aFZhbHVlLT5jb21wdXRlRGVncmVlcygp
OworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRp
b25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgIGRvdWJs
ZSBhbmdsZVggPSAwOworICAgICAgICAgICAgZG91YmxlIGFuZ2xlWSA9IDA7CisgICAgICAgICAg
ICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygpOworICAgICAgICAg
ICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIGFuZ2xl
WSA9IGFuZ2xlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYW5nbGVYID0g
YW5nbGU7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBl
KCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVZID0gc2Vj
b25kVmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBw
ZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgsIGFuZ2xlWSwgZ2V0VHJh
bnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA8IDYpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRvdWJsZSBhID0gZmlyc3RWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgYiA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soMSkpLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBjID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygyKSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZG91Ymxl
IGQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICBkb3VibGUgZSA9IHpvb21GYWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91YmxlVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgZiA9IHpvb21GYWN0b3IgKiBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoYSwgYiwg
YywgZCwgZSwgZikpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5k
KFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgsIGFuZ2xlWSwgZ2V0VHJhbnNm
b3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBpZiAodHJh
bnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgNikKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZh
bHVlLT5sZW5ndGgoKSA8IDE2KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSktPmdl
dERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMSkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSktPmdldERvdWJsZVZh
bHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
NCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zv
cm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg2KSktPmdldERvdWJsZVZhbHVlKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNykpLT5nZXRE
b3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDgpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg5KSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTApKS0+Z2V0RG91YmxlVmFs
dWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
MSkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB6b29tRmFjdG9yICogc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1W
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMikpLT5nZXREb3VibGVWYWx1ZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tRmFjdG9yICogc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxMykpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDE0KSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJh
bnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS0+Z2V0RG91YmxlVmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4KSk7CisgICAgICAgICAgICBkb3Vi
bGUgYSA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3VibGUg
YiA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMSkpLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91
YmxlIGMgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAg
IGRvdWJsZSBkID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSktPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAg
ICAgICBkb3VibGUgZSA9IHpvb21GYWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91Ymxl
VmFsdWUoKTsKKyAgICAgICAgICAgIGRvdWJsZSBmID0gem9vbUZhY3RvciAqIHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soNSkpLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGEsIGIsIGMsIGQs
IGUsIGYpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgMTYpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygwKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygxKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zv
cm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSktPmdldERvdWJsZVZhbHVlKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSktPmdldERvdWJs
ZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0
KSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayg1KSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg2KSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFu
c2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg3KSktPmdldERvdWJsZVZhbHVlKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg4KSktPmdldERv
dWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
ayg5KSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygxMCkpLT5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFs
dWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tRmFjdG9yICogc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMikp
LT5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb21G
YWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDEzKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFu
c2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNCkpLT5nZXREb3VibGVWYWx1ZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS0+Z2V0
RG91YmxlVmFsdWUoKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmQoTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtYXRyaXgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBMZW5ndGgg
cCA9IExlbmd0aCgwLCBGaXhlZCk7CisgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNMZW5n
dGgoKSkKKyAgICAgICAgICAgICAgICBwID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1
ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcXVpcmsgdGhhdCBzaG91bGQgZ28gYXdheSB3aGVu
IDNkIHRyYW5zZm9ybXMgYXJlIGZpbmFsaXplZC4KKyAgICAgICAgICAgICAgICBkb3VibGUgdmFs
ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBwID0gdmFs
ID49IDAgPyBMZW5ndGgoY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcih2YWwpLCBGaXhlZCkgOiBMZW5n
dGgoVW5kZWZpbmVkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAg
ICAgICAgICAgTGVuZ3RoIHAgPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgICAgIGlm
IChmaXJzdFZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgICAgICAgICBwID0gY29udmVy
dFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
YSBxdWlyayB0aGF0IHNob3VsZCBnbyBhd2F5IHdoZW4gM2QgdHJhbnNmb3JtcyBhcmUgZmluYWxp
emVkLgotICAgICAgICAgICAgICAgICAgICBkb3VibGUgdmFsID0gZmlyc3RWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgcCA9IHZhbCA+PSAwID8gTGVuZ3RoKGNs
YW1wVG9Qb3NpdGl2ZUludGVnZXIodmFsKSwgRml4ZWQpIDogTGVuZ3RoKFVuZGVmaW5lZCk7Ci0g
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKHAuaXNVbmRlZmluZWQoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKHAuaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
ICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpVbmtub3duVHJh
bnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25z
KCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUocCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTU3MTIsOSArNTcxMCw4IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0
aW8KICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmls
dGVyT3BlcmF0aW9uOiB7CiAgICAgICAgICAgICBMZW5ndGggc3RkRGV2aWF0aW9uID0gTGVuZ3Ro
KDAsIEZpeGVkKTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPj0gMSkg
eworICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA+PSAxKQogICAgICAgICAg
ICAgICAgIHN0ZERldmlhdGlvbiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0
eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKHN0ZERldmlhdGlvbi5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtNTc4OCw3MiArNTc4NSw3MiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQ
ZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSAq
aXQ7CiAKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKLSAgICAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsKLSAgICAgICAgICAgICAgICBmb3IgKEZp
bGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdHlsZS0+YWNjZXNzQmFja2dyb3VuZExheWVy
cygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+
bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdl
KCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0lt
YWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFn
ZSgpKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZTogeworICAgICAgICAgICAgZm9yIChG
aWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXll
cnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXIt
Pm5leHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkg
JiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAg
ICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3Rh
dGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDogewot
ICAgICAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2Fz
dDxDb250ZW50RGF0YSo+KG1fc3R5bGUtPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29u
dGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChjb250ZW50RGF0YS0+aXNJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHls
ZUltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0
YSktPmltYWdlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGlu
Z0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFn
ZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGlu
Z0ltYWdlKj4oaW1hZ2UpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGVk
SW1hZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEltYWdl
Q29udGVudERhdGEqPihjb250ZW50RGF0YSktPnNldEltYWdlKGxvYWRlZEltYWdlLnJlbGVhc2Uo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDogeworICAgICAgICAgICAgZm9y
IChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9z
dHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnRE
YXRhLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGVudERhdGEtPmlzSW1hZ2Uo
KSkgeworICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0
PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPmltYWdlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShz
dGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdlKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobG9hZGVkSW1hZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+c2V0SW1hZ2UobG9hZGVk
SW1hZ2UucmVsZWFzZSgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlDdXJzb3I6IHsKLSAgICAgICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCog
Y3Vyc29yTGlzdCA9IG1fc3R5bGUtPmN1cnNvcnMoKSkgewotICAgICAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50Q3Vyc29yID0gY3Vyc29yTGlzdC0+
YXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBj
dXJyZW50Q3Vyc29yLmltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRDdXJzb3Iuc2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHls
ZVBlbmRpbmdJbWFnZSo+KGltYWdlKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNv
cjogeworICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0eWxlLT5j
dXJzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNv
ckxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEN1cnNvckRhdGEmIGN1
cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVudEN1cnNvci5pbWFnZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0
YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKLSAg
ICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0eWxlLT5s
aXN0U3R5bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3Jk
ZXJJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGlu
Z0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckltYWdlU291
cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0
eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6
IHsKLSAgICAgICAgICAgICAgICBpZiAoU3R5bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbV9z
dHlsZS0+Ym94UmVmbGVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IE5pbmVQaWVj
ZUltYWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0aW9uLT5tYXNrKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQZW5kaW5n
SW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxv
YWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFn
ZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWZsZWN0
aW9uLT5zZXRNYXNrKE5pbmVQaWVjZUltYWdlKGxvYWRlZEltYWdlLnJlbGVhc2UoKSwgbWFza0lt
YWdlLmltYWdlU2xpY2VzKCksIG1hc2tJbWFnZS5maWxsKCksIG1hc2tJbWFnZS5ib3JkZXJTbGlj
ZXMoKSwgbWFza0ltYWdlLm91dHNldCgpLCBtYXNrSW1hZ2UuaG9yaXpvbnRhbFJ1bGUoKSwgbWFz
a0ltYWdlLnZlcnRpY2FsUnVsZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJ
bWFnZTogeworICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9z
dHlsZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJ
bWFnZVNvdXJjZTogeworICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNl
KCkgJiYgbV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0lt
YWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+Ym9yZGVySW1hZ2VT
b3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7CisgICAgICAgICAgICBpZiAoU3R5bGVSZWZs
ZWN0aW9uKiByZWZsZWN0aW9uID0gbV9zdHlsZS0+Ym94UmVmbGVjdCgpKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJbWFnZSA9IHJlZmxlY3Rpb24tPm1hc2so
KTsKKyAgICAgICAgICAgICAgICBpZiAobWFza0ltYWdlLmltYWdlKCkgJiYgbWFza0ltYWdlLmlt
YWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0
eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHls
ZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
IHJlZmxlY3Rpb24tPnNldE1hc2soTmluZVBpZWNlSW1hZ2UobG9hZGVkSW1hZ2UucmVsZWFzZSgp
LCBtYXNrSW1hZ2UuaW1hZ2VTbGljZXMoKSwgbWFza0ltYWdlLmZpbGwoKSwgbWFza0ltYWdlLmJv
cmRlclNsaWNlcygpLCBtYXNrSW1hZ2Uub3V0c2V0KCksIG1hc2tJbWFnZS5ob3Jpem9udGFsUnVs
ZSgpLCBtYXNrSW1hZ2UudmVydGljYWxSdWxlKCkpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
c3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJj
ZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRN
YXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRp
bmdJbWFnZSo+KG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tJbWFnZTogewotICAgICAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5
ZXIgPSBtX3N0eWxlLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0g
bWFza0xheWVyLT5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+
aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3Rh
dGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNv
dXJjZTogeworICAgICAgICAgICAgaWYgKG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYm
IG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdl
KHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bWFza0JveEltYWdlU291
cmNlKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOiB7CisgICAgICAgICAgICBmb3IgKEZpbGxMYXllciog
bWFza0xheWVyID0gbV9zdHlsZS0+YWNjZXNzTWFza0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tM
YXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hc2tMYXll
ci0+aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1hc2tMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0
aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tMYXllci0+aW1hZ2UoKSkpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkocmV2aXNpb24gMTE1MTg3KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOjExNTE4NykKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aWZuZGVmIENTU1N0eWxlU2VsZWN0b3JfaAorI2RlZmluZSBDU1NTdHlsZVNlbGVjdG9yX2gKKwor
I2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRl
ICJMaW5rSGFzaC5oIgorI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIEVTbWFydE1pbmltdW1Gb3JGb250
U2l6ZSB7IERvTm90VXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUsIFVzZVNtYXJ0TWluaW11bUZv
ckZvbnRGaXplIH07CisKK2NsYXNzIENTU0ZvbnRTZWxlY3RvcjsKK2NsYXNzIENTU1BhZ2VSdWxl
OworY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CitjbGFzcyBDU1NQcm9wZXJ0eTsKK2NsYXNzIENT
U1J1bGVMaXN0OworY2xhc3MgQ1NTRm9udEZhY2U7CitjbGFzcyBDU1NGb250RmFjZVJ1bGU7Citj
bGFzcyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOworY2xhc3MgQ1NTSW1hZ2VTZXRWYWx1ZTsKK2Ns
YXNzIENTU0ltYWdlVmFsdWU7CitjbGFzcyBDU1NTZWxlY3RvcjsKK2NsYXNzIENTU1N0eWxlUnVs
ZTsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENvbnRhaW5l
ck5vZGU7CitjbGFzcyBDdXN0b21GaWx0ZXJPcGVyYXRpb247CitjbGFzcyBDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXI7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBGcmFtZTsK
K2NsYXNzIEZyYW1lVmlldzsKK2NsYXNzIEtVUkw7CitjbGFzcyBLZXlmcmFtZUxpc3Q7CitjbGFz
cyBLZXlmcmFtZVZhbHVlOworY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvcjsKK2NsYXNzIE5vZGU7
CitjbGFzcyBSZW5kZXJSZWdpb247CitjbGFzcyBSdWxlRGF0YTsKK2NsYXNzIFJ1bGVTZXQ7Citj
bGFzcyBTZXR0aW5nczsKK2NsYXNzIFN0YXRpY0NTU1J1bGVMaXN0OworY2xhc3MgU3R5bGVCdWls
ZGVyOworY2xhc3MgU3R5bGVJbWFnZTsKK2NsYXNzIFN0eWxlS2V5ZnJhbWU7CitjbGFzcyBTdHls
ZVBlbmRpbmdJbWFnZTsKK2NsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CitjbGFzcyBTdHlsZVJ1bGU7
CitjbGFzcyBTdHlsZVJ1bGVLZXlmcmFtZXM7CitjbGFzcyBTdHlsZVJ1bGVQYWdlOworY2xhc3Mg
U3R5bGVSdWxlUmVnaW9uOworY2xhc3MgU3R5bGVTaGFkZXI7CitjbGFzcyBTdHlsZVNoZWV0Owor
Y2xhc3MgU3R5bGVTaGVldEludGVybmFsOworY2xhc3MgU3R5bGVTaGVldExpc3Q7CitjbGFzcyBT
dHlsZWRFbGVtZW50OworY2xhc3MgV2ViS2l0Q1NTRmlsdGVyVmFsdWU7CitjbGFzcyBXZWJLaXRD
U1NTaGFkZXJWYWx1ZTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKK3R5cGVkZWYgVmVjdG9y
PFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+ID4gQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dDsKKyNlbmRpZgorCitjbGFzcyBNZWRpYVF1ZXJ5UmVzdWx0IHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShNZWRpYVF1ZXJ5UmVzdWx0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgTWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwJiBleHByLCBib29s
IHJlc3VsdCkKKyAgICAgICAgOiBtX2V4cHJlc3Npb24oZXhwcikKKyAgICAgICAgLCBtX3Jlc3Vs
dChyZXN1bHQpCisgICAgeworICAgIH0KKworICAgIE1lZGlhUXVlcnlFeHAgbV9leHByZXNzaW9u
OworICAgIGJvb2wgbV9yZXN1bHQ7Cit9OworCitlbnVtIFN0eWxlU2hhcmluZ0JlaGF2aW9yIHsK
KyAgICBBbGxvd1N0eWxlU2hhcmluZywKKyAgICBEaXNhbGxvd1N0eWxlU2hhcmluZywKK307CisK
Ky8vIE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzIGlzIHVzZWQgaW4gbWVkaWEgcXVlcmllcywgd2hl
cmUgcmVsYXRpdmUgdW5pdHMKKy8vIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIGRv
Y3VtZW50IHJvb3QgZWxlbWVudCBzdHlsZSwgYW5kIHN0eWxlZCBvbmx5CisvLyBmcm9tIHRoZSBV
c2VyIEFnZW50IFN0eWxlc2hlZXQgcnVsZXMuCisKK2VudW0gUnVsZU1hdGNoaW5nQmVoYXZpb3Ig
eworICAgIE1hdGNoQWxsUnVsZXMsCisgICAgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMsCit9Owor
CisvLyBUaGlzIGNsYXNzIHNlbGVjdHMgYSBSZW5kZXJTdHlsZSBmb3IgYSBnaXZlbiBlbGVtZW50
IGJhc2VkIG9uIGEgY29sbGVjdGlvbiBvZiBzdHlsZXNoZWV0cy4KK2NsYXNzIFN0eWxlUmVzb2x2
ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0eWxlUmVzb2x2ZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTdHlsZVJlc29sdmVyKERvY3VtZW50KiwgYm9v
bCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpOworICAgIH5TdHlsZVJlc29sdmVyKCk7CisKKyAg
ICAvLyBVc2luZyB0aGVzZSBkdXJpbmcgdHJlZSB3YWxrIHdpbGwgYWxsb3cgc3R5bGUgc2VsZWN0
b3IgdG8gb3B0aW1pemUgY2hpbGQgYW5kIGRlc2NlbmRhbnQgc2VsZWN0b3IgbG9va3Vwcy4KKyAg
ICB2b2lkIHB1c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKKyAgICB2b2lkIHBvcFBhcmVudEVs
ZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgcHVzaFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hh
ZG93Um9vdCopOworICAgIHZvaWQgcG9wUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290
Kik7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVu
dCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFN0eWxlU2hhcmluZ0JlaGF2aW9yID0g
QWxsb3dTdHlsZVNoYXJpbmcsCisgICAgICAgIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hB
bGxSdWxlcywgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7CisKKyAgICB2b2lk
IGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSos
IEtleWZyYW1lTGlzdCYpOworCisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5
bGVGb3JFbGVtZW50KFBzZXVkb0lkLCBFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gMCk7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBh
Z2VJbmRleCk7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JE
b2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKKworICAgIFJlbmRlclN0
eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKyAgICBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAg
UmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVt
ZW50U3R5bGU7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50OyB9CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9jaGVja2Vy
LmRvY3VtZW50KCk7IH0KKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bigpIHsgcmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBwYXJlbnRTdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0
eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CisgICAgdm9pZCBz
ZXRab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Wm9vbShmKTsgfQor
ICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxl
KCktPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KKyAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJv
b2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQor
ICAgIGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQor
ICAgIAorICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcs
IGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYpOworICAgIAorICAgIC8vIEZpbmQg
dGhlIGlkcyBvciBjbGFzc2VzIHRoZSBzZWxlY3RvcnMgb24gYSBzdHlsZXNoZWV0IGFyZSBzY29w
ZWQgdG8uIFRoZSBzZWxlY3RvcnMgb25seSBhcHBseSB0byBlbGVtZW50cyBpbiBzdWJ0cmVlcyB3
aGVyZSB0aGUgcm9vdCBlbGVtZW50IG1hdGNoZXMgdGhlIHNjb3BlLgorICAgIHN0YXRpYyBib29s
IGRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhTdHlsZVNoZWV0SW50ZXJuYWwqLCBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5n
SW1wbCo+JiBjbGFzc1Njb3Blcyk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0Rm9yU3R5bGVS
ZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9
IE5PUFNFVURPKTsKKyAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKKyAgICB2b2lkIGNv
bGxlY3RGZWF0dXJlcygpOworICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFyZWRTdHlsZSgpOwor
ICAgIGJvb2wgbWF0Y2hlc1J1bGVTZXQoUnVsZVNldCopOworICAgIE5vZGUqIGxvY2F0ZUNvdXNp
bkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkgY29uc3Q7
CisgICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSosIHVu
c2lnbmVkJiBjb3VudCkgY29uc3Q7CisgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQo
U3R5bGVkRWxlbWVudCopIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5
bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBL
ZXlmcmFtZVZhbHVlJik7CisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIHZvaWQgcHVz
aFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBz
Y29wZVBhcmVudCk7CisgICAgdm9pZCBwb3BTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSk7CisjZWxzZQorICAgIHZvaWQgcHVzaFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqLCBjb25z
dCBDb250YWluZXJOb2RlKikgeyB9CisgICAgdm9pZCBwb3BTY29wZShjb25zdCBDb250YWluZXJO
b2RlKikgeyB9CisjZW5kaWYKKworcHVibGljOgorICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBn
aXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVu
dCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCisgICAgZW51bSBDU1NSdWxlRmlsdGVyIHsKKyAgICAg
ICAgVUFBbmRVc2VyQ1NTUnVsZXMgICA9IDEgPDwgMSwKKyAgICAgICAgQXV0aG9yQ1NTUnVsZXMg
ICAgICA9IDEgPDwgMiwKKyAgICAgICAgRW1wdHlDU1NSdWxlcyAgICAgICA9IDEgPDwgMywKKyAg
ICAgICAgQ3Jvc3NPcmlnaW5DU1NSdWxlcyA9IDEgPDwgNCwKKyAgICAgICAgQWxsQnV0RW1wdHlD
U1NSdWxlcyA9IFVBQW5kVXNlckNTU1J1bGVzIHwgQXV0aG9yQ1NTUnVsZXMgfCBDcm9zc09yaWdp
bkNTU1J1bGVzLAorICAgICAgICBBbGxDU1NSdWxlcyAgICAgICAgID0gQWxsQnV0RW1wdHlDU1NS
dWxlcyB8IEVtcHR5Q1NTUnVsZXMsCisgICAgfTsKKyAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUg
PSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsKKyAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgUHNldWRvSWQsIHVuc2lnbmVkIHJ1bGVz
VG9JbmNsdWRlID0gQWxsQnV0RW1wdHlDU1NSdWxlcyk7CisKKyAgICAvLyBHaXZlbiBhIENTUyBr
ZXl3b3JkIGluIHRoZSByYW5nZSAoeHgtc21hbGwgdG8gLXdlYmtpdC14eHgtbGFyZ2UpLCB0aGlz
IGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisgICAgLy8gdGhlIGNvcnJlY3QgZm9udCBzaXplIHNjYWxl
ZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRlZmF1bHQgKG1lZGl1bSkuCisgICAgc3RhdGljIGZs
b2F0IGZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCosIGludCBrZXl3b3JkLCBib29sIHNob3Vs
ZFVzZUZpeGVkRGVmYXVsdFNpemUpOworCisgICAgLy8gR2l2ZW4gYSBmb250IHNpemUgaW4gcGl4
ZWwsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbGVnYWN5IGZvbnQgc2l6ZSBiZXR3ZWVuIDEg
YW5kIDcuCisgICAgc3RhdGljIGludCBsZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGludCBwaXhl
bEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOworCitwdWJsaWM6Cisg
ICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzKSB7IG1fc3R5bGUgPSBz
OyB9IC8vIFVzZWQgYnkgdGhlIGRvY3VtZW50IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHls
ZS4KKworICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFs
dWUqLCBSZW5kZXJTdHlsZSopOworCisgICAgdm9pZCBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5
bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKworICAgIHZvaWQgdXBkYXRlRm9udCgpOwor
CisgICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3Vt
ZW50KiwgZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lm
aWVkU2l6ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXplID0gVXNlU21hcnRNaW5pbXVtRm9yRm9u
dEZpemUpOworCisgICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
aXplKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNw
ZWNpZmllZFNpemUoRG9jdW1lbnQqLCBSZW5kZXJTdHlsZSosIGJvb2wgaXNBYnNvbHV0ZVNpemUs
IGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKTsKKworcHVibGljOgor
ICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCk7CisKKyAgICBDb2xvciBjb2xvckZyb21QcmltaXRp
dmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSosIGJvb2wgZm9yVmlzaXRlZExpbmsgPSBmYWxzZSkg
Y29uc3Q7CisKKyAgICBib29sIGhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0
cmluZyYpIGNvbnN0OworCisgICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQoKTsgfQorCisgICAgdm9pZCBhZGRWaWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCosIGJvb2wgcmVz
dWx0KTsKKworICAgIGJvb2wgYWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29uc3Q7CisKKyAg
ICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKSB7IG1fY2hlY2tlci5hbGxWaXNpdGVkU3Rh
dGVDaGFuZ2VkKCk7IH0KKyAgICB2b2lkIHZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlz
aXRlZEhhc2gpIHsgbV9jaGVja2VyLnZpc2l0ZWRTdGF0ZUNoYW5nZWQodmlzaXRlZEhhc2gpOyB9
CisKKyAgICB2b2lkIGFkZEtleWZyYW1lU3R5bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVLZXlmcmFt
ZXM+KTsKKworICAgIGJvb2wgY2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiByZWdpb25FbGVtZW50
KTsKKworICAgIGJvb2wgdXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0IHsgcmV0dXJuICFtX2ZlYXR1
cmVzLnNpYmxpbmdSdWxlcy5pc0VtcHR5KCk7IH0KKyAgICBib29sIHVzZXNGaXJzdExpbmVSdWxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzOyB9CisgICAg
Ym9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNl
c0JlZm9yZUFmdGVyUnVsZXM7IH0KKyAgICBib29sIHVzZXNMaW5rUnVsZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzLnVzZXNMaW5rUnVsZXM7IH0KKworICAgIHN0YXRpYyBib29sIGNyZWF0
ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0
eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVy
YXRpb25zKTsKKyAgICAKKyAgICB2b2lkIGludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hl
KCk7CisgICAgCisgICAgLy8gV0FSTklORy4gVGhpcyB3aWxsIGNvbnN0cnVjdCBDU1NPTSB3cmFw
cGVycyBmb3IgYWxsIHN0eWxlIHJ1bGVzIGFuZCBjYWNoZSB0aGVuIGluIGEgbWFwIGZvciBzaWdu
aWZpY2FudCBtZW1vcnkgY29zdC4KKyAgICAvLyBJdCBpcyBoZXJlIHRvIHN1cHBvcnQgaW5zcGVj
dG9yLiBEb24ndCB1c2UgZm9yIGFueSByZWd1bGFyIGVuZ2luZSBmdW5jdGlvbnMuCisgICAgQ1NT
U3R5bGVSdWxlKiBlbnN1cmVGdWxsQ1NTT01XcmFwcGVyRm9ySW5zcGVjdG9yKFN0eWxlUnVsZSop
OworCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0
aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOworI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICBTdHlsZVNoYWRlciogc3R5bGVTaGFkZXIoQ1NTVmFsdWUqKTsK
KyAgICBTdHlsZVNoYWRlciogY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2Vi
S2l0Q1NTU2hhZGVyVmFsdWUqKTsKKyAgICBib29sIHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
TGlzdChDU1NWYWx1ZSosIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmKTsKKyAgICBQYXNzUmVm
UHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbXRl
cihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCopOworICAgIFBhc3NSZWZQdHI8Q3Vz
dG9tRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0Q1NT
RmlsdGVyVmFsdWUqKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nU2hhZGVycygpOworI2VuZGlmCisj
ZW5kaWYgLy8gRU5BQkxFKENTU19GSUxURVJTKQorCisgICAgc3RydWN0IFJ1bGVGZWF0dXJlIHsK
KyAgICAgICAgUnVsZUZlYXR1cmUoU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKKyAgICAgICAgICAgIDogcnVsZShy
dWxlKQorICAgICAgICAgICAgLCBzZWxlY3RvcihzZWxlY3RvcikKKyAgICAgICAgICAgICwgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbihoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKSAKKyAgICAg
ICAgeyAKKyAgICAgICAgfQorICAgICAgICBTdHlsZVJ1bGUqIHJ1bGU7CisgICAgICAgIENTU1Nl
bGVjdG9yKiBzZWxlY3RvcjsKKyAgICAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
OworICAgIH07CisgICAgc3RydWN0IEZlYXR1cmVzIHsKKyAgICAgICAgRmVhdHVyZXMoKTsKKyAg
ICAgICAgfkZlYXR1cmVzKCk7CisgICAgICAgIHZvaWQgYWRkKGNvbnN0IFN0eWxlUmVzb2x2ZXI6
OkZlYXR1cmVzJik7CisgICAgICAgIHZvaWQgY2xlYXIoKTsKKyAgICAgICAgSGFzaFNldDxBdG9t
aWNTdHJpbmdJbXBsKj4gaWRzSW5SdWxlczsKKyAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJ
bXBsKj4gYXR0cnNJblJ1bGVzOworICAgICAgICBWZWN0b3I8UnVsZUZlYXR1cmU+IHNpYmxpbmdS
dWxlczsKKyAgICAgICAgVmVjdG9yPFJ1bGVGZWF0dXJlPiB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVz
OworICAgICAgICBib29sIHVzZXNGaXJzdExpbmVSdWxlczsKKyAgICAgICAgYm9vbCB1c2VzQmVm
b3JlQWZ0ZXJSdWxlczsKKyAgICAgICAgYm9vbCB1c2VzTGlua1J1bGVzOworICAgIH07CisKK3By
aXZhdGU6CisgICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1cCB0aGUgZGVmYXVsdCBmb250IHNp
emUgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdlbmVyaWMgZm9udCBmYW1pbHkgaGFz
IGNoYW5nZWQuIC1kd2gKKyAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5k
ZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0Zvclpv
b21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHZv
aWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOworCisgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHls
ZShSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBF
bGVtZW50Kik7CisKKyAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxl
KSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQorCisgICAgc3RydWN0IE1hdGNoUmFu
Z2VzIHsKKyAgICAgICAgTWF0Y2hSYW5nZXMoKSA6IGZpcnN0VUFSdWxlKC0xKSwgbGFzdFVBUnVs
ZSgtMSksIGZpcnN0QXV0aG9yUnVsZSgtMSksIGxhc3RBdXRob3JSdWxlKC0xKSwgZmlyc3RVc2Vy
UnVsZSgtMSksIGxhc3RVc2VyUnVsZSgtMSkgeyB9CisgICAgICAgIGludCBmaXJzdFVBUnVsZTsK
KyAgICAgICAgaW50IGxhc3RVQVJ1bGU7CisgICAgICAgIGludCBmaXJzdEF1dGhvclJ1bGU7Cisg
ICAgICAgIGludCBsYXN0QXV0aG9yUnVsZTsKKyAgICAgICAgaW50IGZpcnN0VXNlclJ1bGU7Cisg
ICAgICAgIGludCBsYXN0VXNlclJ1bGU7CisgICAgfTsKKworICAgIHN0cnVjdCBNYXRjaGVkUHJv
cGVydGllcyB7CisgICAgICAgIE1hdGNoZWRQcm9wZXJ0aWVzKCkgOiBwb3NzaWJseVBhZGRlZE1l
bWJlcigwKSB7IH0KKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBw
cm9wZXJ0aWVzOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgOiAyOworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGlzSW5SZWdpb25SdWxlIDogMTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAv
LyBVc2VkIHRvIG1ha2Ugc3VyZSBhbGwgbWVtb3J5IGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2Ug
d2UgY29tcHV0ZSB0aGUgaGFzaCBvdmVyIHRoZSBieXRlcyBvZiB0aGlzIG9iamVjdC4KKyAgICAg
ICAgICAgIHZvaWQqIHBvc3NpYmx5UGFkZGVkTWVtYmVyOworICAgICAgICB9OworICAgIH07CisK
KyAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgeworICAgICAgICBNYXRjaFJlc3VsdCgpIDogaXNDYWNo
ZWFibGUodHJ1ZSkgeyB9CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcywgNjQ+IG1h
dGNoZWRQcm9wZXJ0aWVzOworICAgICAgICBWZWN0b3I8U3R5bGVSdWxlKiwgNjQ+IG1hdGNoZWRS
dWxlczsKKyAgICAgICAgTWF0Y2hSYW5nZXMgcmFuZ2VzOworICAgICAgICBib29sIGlzQ2FjaGVh
YmxlOworICAgIH07CisKKyAgICBzdHJ1Y3QgTWF0Y2hPcHRpb25zIHsKKyAgICAgICAgTWF0Y2hP
cHRpb25zKGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
ID0gMCkgOiBzY29wZShzY29wZSksIGluY2x1ZGVFbXB0eVJ1bGVzKGluY2x1ZGVFbXB0eVJ1bGVz
KSB7IH0KKyAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGU7CisgICAgICAgIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXM7CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIGFkZE1hdGNoZWRQ
cm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5
bGVSdWxlKiA9IDAsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoQWxsLCBib29sIGluUmVnaW9uUnVsZSA9IGZhbHNlKTsKKyAgICB2b2lkIGFkZEVsZW1lbnRT
dHlsZVByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBTdHlsZVByb3BlcnR5U2V0KiwgYm9vbCBpc0Nh
Y2hlYWJsZSA9IHRydWUpOworCisgICAgdm9pZCBtYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0Jik7
CisgICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoVUFS
dWxlcyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqKTsKKyAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMo
TWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoVXNl
clJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBt
YXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cyk7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1
bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKKyAgICB2
b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOworICAgIHZv
aWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9u
cyYpOworICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7
CisgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKworICAgIGJvb2wgY2hlY2tTZWxlY3Rvcihjb25z
dCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gMCk7CisgICAgYm9vbCBj
aGVja1JlZ2lvblNlbGVjdG9yKENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCog
cmVnaW9uRWxlbWVudCk7CisgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1h
dGNoUmVzdWx0Jik7CisgICAgdGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNzPgorICAgIHZvaWQgYXBw
bHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBp
bnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOworICAgIHRl
bXBsYXRlIDxib29sIGZpcnN0UGFzcz4KKyAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhjb25zdCBT
dHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqLCBib29sIGlzSW1wb3J0YW50
LCBib29sIGluaGVyaXRlZE9ubHksIGJvb2wgZmlsdGVyUmVnaW9uUHJvcGVydGllcyk7CisKKyAg
ICBzdGF0aWMgYm9vbCBpc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsK
KworICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXMoTWF0Y2hSZXN1bHQmLCBSdWxlU2V0KiwgYm9vbCBp
c0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKTsKKyAg
ICB2b2lkIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRj
aGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mLCBib29sIGlzTGVmdFBhZ2Us
IGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOworICAgIGJvb2wgaXNM
ZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKKyAgICBib29sIGlzUmlnaHRQYWdlKGludCBw
YWdlSW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0xlZnRQYWdlKHBhZ2VJbmRleCk7IH0KKyAgICBi
b29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OworICAgIFN0cmluZyBwYWdlTmFt
ZShpbnQgcGFnZUluZGV4KSBjb25zdDsKKworICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0
eWxlOworICAgIE93blB0cjxSdWxlU2V0PiBtX3VzZXJTdHlsZTsKKworICAgIEZlYXR1cmVzIG1f
ZmVhdHVyZXM7CisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVTZXQ7CisgICAgT3du
UHRyPFJ1bGVTZXQ+IG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0OworCisgICAgYm9vbCBtX2hh
c1VBQXBwZWFyYW5jZTsKKyAgICBCb3JkZXJEYXRhIG1fYm9yZGVyRGF0YTsKKyAgICBGaWxsTGF5
ZXIgbV9iYWNrZ3JvdW5kRGF0YTsKKyAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPFN0eWxlUnVsZUtleWZy
YW1lcz4gPiBLZXlmcmFtZXNSdWxlTWFwOworICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFt
ZXNSdWxlTWFwOworCitwdWJsaWM6CisgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFll
dEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KKworICAgIFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSop
OworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENT
U1Byb3BlcnR5SUQsIENTU0ltYWdlVmFsdWUqKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVy
YXRvclZhbHVlKik7CisjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCisgICAgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VT
ZXRWYWx1ZSopOworI2VuZGlmCisKKyAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9CisgICAg
Ym9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9h
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9CisKKyAgICBzdGF0aWMgTGVuZ3RoIGNv
bnZlcnRUb0ludExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVy
U3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsKKyAgICBzdGF0aWMgTGVu
Z3RoIGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUq
LCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOworCitwcml2
YXRlOgorICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKKwor
ICAgIHZvaWQgYWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiosIFJ1bGVTZXQmIHVzZXJTdHls
ZSk7CisKKyAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOworCisgICAgdm9pZCBt
YXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwor
ICAgIHZvaWQgbWFwRmlsbENsaXAoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUq
KTsKKyAgICB2b2lkIG1hcEZpbGxDb21wb3NpdGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwg
Q1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxPcmlnaW4oQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxJbWFnZShDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVy
dHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxSZXBlYXRZKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsU2l6
ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmls
bFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZv
aWQgbWFwRmlsbFlQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSop
OworCisgICAgdm9pZCBtYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwor
ICAgIHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Cisg
ICAgdm9pZCBtYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAg
IHZvaWQgbWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2
b2lkIG1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Cisg
ICAgdm9pZCBtYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9p
ZCBtYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lk
IG1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9pZCBt
YXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOworCitwdWJs
aWM6CisgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSos
IE5pbmVQaWVjZUltYWdlJik7CisgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1Zh
bHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKKyAgICBMZW5ndGhCb3ggbWFwTmluZVBpZWNlSW1hZ2VR
dWFkKENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1
ZSosIE5pbmVQaWVjZUltYWdlJik7Citwcml2YXRlOgorICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdp
dGhDb250cm9sKFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZvaWQgYXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworCisjaWYgRU5BQkxFKFNWRykKKyAgICB2b2lk
IGFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyNlbmRpZgorCisg
ICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0lt
YWdlKik7CisgICAgdm9pZCBsb2FkUGVuZGluZ0ltYWdlcygpOworCisgICAgc3RhdGljIHVuc2ln
bmVkIGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMq
LCB1bnNpZ25lZCBzaXplKTsKKyAgICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0g
eworICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+IG1hdGNoZWRQcm9wZXJ0aWVzOwor
ICAgICAgICBNYXRjaFJhbmdlcyByYW5nZXM7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cmVuZGVyU3R5bGU7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcGFyZW50UmVuZGVyU3R5
bGU7CisgICAgfTsKKyAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogZmluZEZy
b21NYXRjaGVkUHJvcGVydGllc0NhY2hlKHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNoUmVzdWx0
Jik7CisgICAgdm9pZCBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgUmVuZGVyU3R5
bGUqLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIHVuc2lnbmVkIGhhc2gsIGNvbnN0
IE1hdGNoUmVzdWx0Jik7CisKKyAgICAvLyBFdmVyeSBOIGFkZGl0aW9ucyB0byB0aGUgbWF0Y2hl
ZCBkZWNsYXJhdGlvbiBjYWNoZSB0cmlnZ2VyIGEgc3dlZXAgd2hlcmUgZW50cmllcyBob2xkaW5n
CisgICAgLy8gdGhlIGxhc3QgcmVmZXJlbmNlIHRvIGEgc3R5bGUgZGVjbGFyYXRpb24gYXJlIGdh
cmJhZ2UgY29sbGVjdGVkLgorICAgIHZvaWQgc3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7
CisKKyAgICB1bnNpZ25lZCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxh
c3RTd2VlcDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUl0ZW0+IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU7CisgICAgTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU7CisKKyAgICAvLyBBIGJ1ZmZlciB1c2Vk
IHRvIGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LCBhbmQgYSB0
ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yCisgICAgLy8gbWVyZ2Ugc29ydGluZy4KKyAgICBWZWN0
b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7CisKKyAgICBSZWZQdHI8U3Rh
dGljQ1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7CisKKyAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsKKworICAgIE93blB0cjxNZWRpYVF1ZXJ5RXZhbHVh
dG9yPiBtX21lZGl1bTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fcm9vdERlZmF1bHRTdHls
ZTsKKworICAgIFBzZXVkb0lkIG1fZHluYW1pY1BzZXVkbzsKKworICAgIFNlbGVjdG9yQ2hlY2tl
ciBtX2NoZWNrZXI7CisKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7CisgICAgUmVu
ZGVyU3R5bGUqIG1fcGFyZW50U3R5bGU7CisgICAgUmVuZGVyU3R5bGUqIG1fcm9vdEVsZW1lbnRT
dHlsZTsKKyAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CisgICAgU3R5bGVkRWxlbWVudCogbV9zdHls
ZWRFbGVtZW50OworICAgIFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nOworICAgIEVJ
bnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZTsKKyAgICBDb250YWluZXJOb2RlKiBtX3BhcmVu
dE5vZGU7CisgICAgQ1NTVmFsdWUqIG1fbGluZUhlaWdodFZhbHVlOworICAgIGJvb2wgbV9mb250
RGlydHk7CisgICAgYm9vbCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKKyAgICBib29sIG1f
c2FtZU9yaWdpbk9ubHk7CisKKyAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxl
Y3RvcjsKKyAgICBWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlSZXN1bHQ+ID4gbV92aWV3cG9ydERl
cGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOworCisgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZTsKKyAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsK
KyAgICBjb25zdCBTdHlsZUJ1aWxkZXImIG1fc3R5bGVCdWlsZGVyOworICAgIAorICAgIEhhc2hN
YXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBtX3N0eWxlUnVsZVRvQ1NTT01X
cmFwcGVyTWFwOworICAgIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gbV9zdHlsZVNo
ZWV0Q1NTT01XcmFwcGVyU2V0OworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGJvb2wg
bV9oYXNQZW5kaW5nU2hhZGVyczsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkK
KyAgICBzdGF0aWMgY29uc3QgQ29udGFpbmVyTm9kZSogZGV0ZXJtaW5lU2NvcGUoY29uc3QgU3R5
bGVTaGVldEludGVybmFsKik7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgQ29udGFpbmVy
Tm9kZSosIE93blB0cjxSdWxlU2V0PiA+IFNjb3BlZFJ1bGVTZXRNYXA7CisKKyAgICBSdWxlU2V0
KiBydWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSopIGNvbnN0OworCisgICAgdm9p
ZCBzZXR1cFNjb3BlU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSopOworICAgIGJvb2wgc2NvcGVT
dGFja0lzQ29uc2lzdGVudChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpIGNvbnN0IHsgcmV0
dXJuIHBhcmVudCAmJiBwYXJlbnQgPT0gbV9zY29wZVN0YWNrUGFyZW50OyB9CisKKyAgICBTY29w
ZWRSdWxlU2V0TWFwIG1fc2NvcGVkQXV0aG9yU3R5bGVzOworICAgIAorICAgIHN0cnVjdCBTY29w
ZVN0YWNrRnJhbWUgeworICAgICAgICBTY29wZVN0YWNrRnJhbWUoKSA6IG1fc2NvcGUoMCksIG1f
cnVsZVNldCgwKSB7IH0KKyAgICAgICAgU2NvcGVTdGFja0ZyYW1lKGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlLCBSdWxlU2V0KiBydWxlU2V0KSA6IG1fc2NvcGUoc2NvcGUpLCBtX3J1bGVTZXQo
cnVsZVNldCkgeyB9CisgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2NvcGU7CisgICAg
ICAgIFJ1bGVTZXQqIG1fcnVsZVNldDsKKyAgICB9OworICAgIC8vIFZlY3RvciAodXNlZCBhcyBz
dGFjaykgdGhhdCBrZWVwcyB0cmFjayBvZiBzY29waW5nIGVsZW1lbnRzIChpLmUuLCBlbGVtZW50
cyB3aXRoIGEgPHN0eWxlIHNjb3BlZD4gY2hpbGQpCisgICAgLy8gZW5jb3VudGVyZWQgZHVyaW5n
IHRyZWUgaXRlcmF0aW9uIGZvciBzdHlsZSByZXNvbHV0aW9uLgorICAgIFZlY3RvcjxTY29wZVN0
YWNrRnJhbWU+IG1fc2NvcGVTdGFjazsKKyAgICAvLyBFbGVtZW50IGxhc3Qgc2VlbiBhcyBwYXJl
bnQgZWxlbWVudCB3aGVuIHVwZGF0aW5nIG1fc2NvcGluZ0VsZW1lbnRTdGFjay4KKyAgICAvLyBU
aGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9zY29waW5nRWxlbWVudFN0YWNrIGlzIGNv
bnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxlY3RvckNoZWNrZXI6Om1fcGFyZW50U3RhY2su
CisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZVN0YWNrUGFyZW50OworI2VuZGlmCisK
KyAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOworICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
PT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwor
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25z
dCBNYXRjaGVkUHJvcGVydGllcyYpOworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
TWF0Y2hSYW5nZXMmLCBjb25zdCBNYXRjaFJhbmdlcyYpOworICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yIT0oY29uc3QgTWF0Y2hSYW5nZXMmLCBjb25zdCBNYXRjaFJhbmdlcyYpOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ1NTU3R5bGVTZWxlY3Rvcl9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDggKzE5LDgg
QEAKICAqCiAgKi8KIAotI2lmbmRlZiBDU1NTdHlsZVNlbGVjdG9yX2gKLSNkZWZpbmUgQ1NTU3R5
bGVTZWxlY3Rvcl9oCisjaWZuZGVmIFN0eWxlUmVzb2x2ZXJfaAorI2RlZmluZSBTdHlsZVJlc29s
dmVyX2gKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIK
QEAgLTUzOCw0ICs1MzgsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZiAvLyBDU1NTdHlsZVNlbGVjdG9yX2gKKyNlbmRpZiAvLyBTdHlsZVJlc29sdmVyX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCShyZXZpc2lvbiAxMTUx
ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsMTEgKzI3LDExIEBACiAjaW5jbHVkZSAiV2ViS2l0Q1NTTWF0cml4LmgiCiAK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNl
dC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJDREFUQVNlY3Rpb24uaCIK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgi
Ci0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5
bGVTaGVldC5oIgpAQCAtMTQzLDYgKzE0Miw3IEBACiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgog
I2luY2x1ZGUgIlNoYWRvd1RyZWUuaCIKICNpbmNsdWRlICJTdGF0aWNIYXNoU2V0Tm9kZUxpc3Qu
aCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3Qu
aCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAog
I2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NT
ZWxlY3Rvckxpc3QuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
Q2xhc3NMaXN0LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgogI2luY2x1ZGUgIkNsaWVudFJl
Y3RMaXN0LmgiCkBAIC02NCw2ICs2Myw3IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgor
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAi
VGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTE1MTg3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiQ1NT
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKICNpbmNsdWRlICJDU1NT
dHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NT
U3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNoaWxkTm9kZUxpc3QuaCIKICNpbmNsdWRlICJDbGFz
c05vZGVMaXN0LmgiCkBAIC04OSw2ICs4OCw3IEBACiAjaW5jbHVkZSAiU2hhZG93VHJlZS5oIgog
I2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCisj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRhZ05vZGVMaXN0LmgiCiAjaW5j
bHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1NoYWRvd1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmNwcAkocmV2aXNpb24gMTE1MTg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1No
YWRvd1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogCi0jaW5jbHVkZSAiQ1NTU3R5bGVT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRPTVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC00MCw2ICszOSw3IEBACiAjaW5jbHVkZSAi
Tm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiU2hhZG93VHJlZS5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93VHJl
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1RyZWUuY3BwCShy
ZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93VHJlZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTaGFkb3dUcmVlLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5j
bHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKQEAgLTM1LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAog
I2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKICNpbmNs
dWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgog
I2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
CiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIlN0
eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hGdW5jdGlvbnMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMTUx
ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2lu
Y2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
CiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQ1
LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUmVz
b2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmdTdHlsZS5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1
ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NT
U3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNT
U1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgpAQCAtNDUsNiArNDQsNyBAQAogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNp
bmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVk
ZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNp
bmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NQcm9w
ZXJ0eS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkRXZlbnQuaCIKQEAgLTgw
LDYgKzc5LDcgQEAKICNpbmNsdWRlICJTcGVsbENoZWNrZXIuaCIKICNpbmNsdWRlICJTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4
dENoZWNrZXJDbGllbnQuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBA
QAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1
ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRl
ICJDaGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCkBAIC01NSw2ICs1NCw3IEBACiAjaW5jbHVkZSAi
UmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTdHlsZVByb3Bl
cnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJYTUxOU05h
bWVzLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAJKHJldmlzaW9u
IDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJDYWNoZWRQYWdlLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCkBAIC0zNCw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWRMZWFrQ291bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyAr
NTQsNiBAQAogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDb29r
aWVKYXIuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50
VHlwZS5oIgpAQCAtNzQsNiArNzMsNyBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTUx
ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKIAog
I2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNp
bmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2Uu
aCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgpAQCAtNDUsNiArNDQsNyBAQAog
I2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0
LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlcmlu
Z0NvbnRleHQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTE1MTg3KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKICNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgogCiAjaW5jbHVkZSAi
QXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw3ICszMiw2IEBACiAjaW5jbHVkZSAiVmFsaWRhdGlvbk1lc3NhZ2UuaCIKIAogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhv
bGRlci5oIgogI2luY2x1ZGUgIkZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIgpAQCAtNDUsNiArNDQs
NyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2lu
Y2x1ZGUgIlNoYWRvd1RyZWUuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSAiVGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcAkocmV2aXNpb24gMTE1MTg3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBA
QAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgog
I2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9y
LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5o
IgogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKQEAgLTU5LDYgKzU4LDcgQEAKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgogI2luY2x1ZGUg
IlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSAiVGV4dE1ldHJpY3MuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJl
dmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bEVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogCiAjaW5jbHVk
ZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiRE9NVG9rZW5MaXN0
LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNTMsNiArNTIsNyBAQAogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZUxp
c3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1
cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgpAQCAtNDksNiArNDgsNyBAQAog
I2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlN0eWxl
UHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5
bGVSdWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKIApJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAxMTUx
ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgogI2lu
Y2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCi0jaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNs
dWRlICJDaGFyYWN0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgpAQCAtODUs
NiArODQsNyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTaGFkb3dUcmVl
LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNp
bmNsdWRlICJYUGF0aFJlc3VsdC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTE1MTg3KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgogI2luY2x1ZGUgIkNTU1J1
bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDb250ZW50
U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNDksNiArNDgsNyBA
QAogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJT
dHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIldlYktp
dENTU0tleWZyYW1lc1J1bGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTGlua0xvYWRlci5j
cHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkxpbmtMb2FkZXIuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVT
aGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCkBAIC00Myw2ICs0Miw3
IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTGlua1JlbEF0dHJpYnV0ZS5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJl
dmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkJlZm9yZVVubG9hZEV2ZW50
LmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAi
Q1NTUnVsZUxpc3QuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
Q2hyb21lLmgiCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkNyeXB0by5oIgpAQCAt
OTEsNiArOTAsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VJbmZvLmgiCiAjaW5jbHVkZSAiU3RvcmFn
ZU5hbWVzcGFjZS5oIgogI2luY2x1ZGUgIlN0eWxlTWVkaWEuaCIKKyNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiU3VkZGVuVGVybWluYXRpb24uaCIKICNpbmNsdWRlICJXZWJL
aXRQb2ludC5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1
ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIK
QEAgLTY2LDYgKzY1LDcgQEAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUg
IlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogCiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlz
aW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRlICJCYXNlNjQuaCIKLSNpbmNs
dWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIKQEAgLTY3LDYg
KzY2LDcgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJl
YS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlZvaWRD
YWxsYmFjay5oIgogI2luY2x1ZGUgIldpZGdldC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMTE1
MTg3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTEgQEAKIAogI2luY2x1ZGUgIkFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgot
I2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRp
b24uaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94TW9kZWxP
YmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3Bw
CShyZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lUXQuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxl
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hy
b21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCkBAIC01Nyw2ICs1Niw3IEBACiAjaW5j
bHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZVF0TW9iaWxlLmgiCiAj
aW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAJKHJldmlzaW9u
IDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2Jp
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdE1vYmlsZS5oIgogCi0jaW5jbHVkZSAiQ1NTU3R5
bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJD
b2xvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC00MCw2ICszOSw3IEBACiAjaWYgRU5B
QkxFKFBST0dSRVNTX1RBRykKICNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgogI2VuZGlmCisj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lv
biAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBACiAKICNpbmNsdWRlICJDb2x1bW5JbmZvLmgi
CiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0
b3IuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkRvY3VtZW50RXZlbnRRdWV1ZS5oIgpAQCAtOTIsNiArOTEsNyBAQAogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogI2luY2x1ZGUgIlN0eWxlUHJv
cGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dFN0
cmVhbS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMTE1MTg3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5
TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2hyb21l
LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01
Miw2ICs1MSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTdHls
ZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCiAKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwCShyZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUg
IkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKLSNpbmNsdWRl
ICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJE
b2N1bWVudEV2ZW50UXVldWUuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKQEAgLTU4LDYg
KzU3LDcgQEAKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZS5oIgogI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgogI2luY2x1ZGUgPG1hdGguaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24g
MTE1MTg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUu
aCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVudUxpc3QuaCIKICNpbmNsdWRlICJDU1NGb250
U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2hy
b21lLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTQ0
LDYgKzQzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxMTUxODcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCiAjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNp
bmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb250ZW50RGF0YS5oIgogI2luY2x1ZGUgIkN1
cnNvckxpc3QuaCIKQEAgLTY0LDYgKzYzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUg
Imh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9u
LmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKQEAgLTM4LDYgKzM3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJCb3hSZWdpb25JbmZvLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkocmV2aXNpb24g
MTE1MTg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIK
IAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1
ZGUgIkV2ZW50SGFuZGxlci5oIgpAQCAtNDAsNiArMzksNyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jv
b3QuaCIKICNpbmNsdWRlICJTbGlkZXJUaHVtYkVsZW1lbnQuaCIKICNpbmNsdWRlICJTdGVwUmFu
Z2UuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KIAogdXNpbmcgc3RkOjptaW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24g
MTE1MTg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKIAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rv
ci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTQz
LDYgKzQyLDcgQEAKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQkocmV2aXNpb24gMTE1MTg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbXBv
cnQgIkJpdG1hcEltYWdlLmgiCiAjaW1wb3J0ICJDb2xvck1hYy5oIgotI2ltcG9ydCAiQ1NTU3R5
bGVTZWxlY3Rvci5oIgogI2ltcG9ydCAiQ1NTVmFsdWVMaXN0LmgiCiAjaW1wb3J0ICJDU1NWYWx1
ZUtleXdvcmRzLmgiCiAjaW1wb3J0ICJEb2N1bWVudC5oIgpAQCAtNDUsNiArNDQsNyBAQAogI2lt
cG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJT
dHJpbmdUcnVuY2F0b3IuaCIKKyNpbXBvcnQgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbXBvcnQgIlRp
bWVSYW5nZXMuaCIKICNpbXBvcnQgIlRoZW1lTWFjLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVT
YWZhcmkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZVNhZmFyaS5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAj
aW5jbHVkZSAiU29mdExpbmtpbmcuaCIKLSNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCisj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDExNTE4
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDb250ZW50RGF0YS5oIgog
I2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0j
aW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1dyYXBTaGFwZXMuaCIK
ICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJRdW90ZXNEYXRhLmgiCkBAIC0z
NSw2ICszNCw3IEBACiAjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNs
dWRlICJTaGFkb3dEYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgorI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogI2luY2x1ZGUgIlJlbmRl
clRoZW1lLmgiCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUdlbmVyYXRlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDExNTE4NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVk
SW1hZ2UuaCIKIAogI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVk
ZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEuY3BwCShyZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
dHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9y
LmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNsdWRlICJSZW5kZXJDb3VudGVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTMwLDYgKzI5LDcgQEAKICNpbmNsdWRlICJT
dHlsZUZpbHRlckRhdGEuaCIKICNpbmNsdWRlICJTdHlsZVRyYW5zZm9ybURhdGEuaCIKICNpbmNs
dWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gMTE1MTg3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIK
IAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0
b3IuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgpAQCAtMzcsNiArMzYsNyBAQAogI2luY2x1ZGUg
IlNWR0lubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCiAj
aW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDEx
NTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsMTIgQEAKICNpbmNsdWRlICJTVkdDbGlwUGF0aEVsZW1l
bnQuaCIKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0
b3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNW
R05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUg
IkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC01MSw2ICs1MCw3IEBA
CiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDEx
NTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5j
bHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNp
bmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCkBA
IC00MCw2ICszOSw3IEBACiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VTcmNFbGVtZW50LmgiCiAjaW5j
bHVkZSAiU1ZHR2x5cGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSA8bWF0
aC5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAko
cmV2aXNpb24gMTE1MTg3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJTVkdHcmFk
aWVudEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkNTU1N0
eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudC5oIgpAQCAtMzUsNiArMzQsNyBAQAogI2luY2x1ZGUgIlNWR1N0b3BFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9y
bWFibGUuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiAx
MTUxODcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAKICNpbmNsdWRlICJTVkdNYXNrRWxlbWVudC5oIgog
CiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVu
dEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJT
dXBwb3J0LmgiCiAjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDExNTE4NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5j
bHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKLSNp
bmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKQEAgLTQ5LDYgKzQ4LDcg
QEAKICNpbmNsdWRlICJTVkdTTUlMRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQu
aCIKICNpbmNsdWRlICJTVkdTeW1ib2xFbGVtZW50LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNl
ci5oIgogI2luY2x1ZGUgIlhNTFNlcmlhbGl6ZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA0LTI1ICBBbGV4aXMg
TWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJlbmFtZSBD
U1NTdHlsZVNlbGVjdG9yIGZpbGVzIHRvIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDgxNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBDU1NTdHlsZVNlbGVjdG9yIGZp
bGVzIHRvIG1hdGNoIHRoZSBuZXcgY2xhc3MgbmFtZSBTdHlsZVJlc29sdmVyLgorICAgICAgICBV
cGRhdGUgdGhlIGluY2x1ZGVzIGFsbCBvdmVyIHRoZSBjb2RlIGJhc2UgdG8gdGhlIG5ldyBuYW1l
LgorCisgICAgICAgICogc3JjL0F1dG9maWxsUG9wdXBNZW51Q2xpZW50LmNwcDoKKyAgICAgICAg
KiBzcmMvV2ViVmlld0ltcGwuY3BwOgorCiAyMDEyLTA0LTI0ICBEYW5hIEphbnNlbnMgIDxkYW5h
a2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVW5ib3VuZGVkIGRyYXdzIHNo
b3VsZCB1c2UgY2xpcCB0byBsaW1pdCB0aGVpciBkYW1hZ2UgdG8gb3BhcXVlIHRyYWNraW5nCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2ZpbGxQb3B1
cE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDYgQEAKICNpbmNsdWRlICJBdXRvZmlsbFBvcHVwTWVudUNsaWVudC5oIgogCiAjaW5j
bHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgog
I2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgpAQCAtNDAsNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1l
bnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV2ViQXV0b2ZpbGxDbGllbnQuaCIKICNp
bmNsdWRlICJXZWJOb2RlLmgiCiAjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gMTE1MTg3
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiQXV0b2ZpbGxQb3B1cE1lbnVDbGll
bnQuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkJh
dHRlcnlDbGllbnRJbXBsLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJD
b2xvci5oIgpAQCAtMTEyLDYgKzExMSw3IEBACiAjaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuaCIKICNpbmNsdWRlICJTcGVlY2hJbnB1dENsaWVudEltcGwuaCIKICNpbmNsdWRlICJT
cGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5o
IgogI2luY2x1ZGUgIlRleHRGaWVsZERlY29yYXRvckltcGwuaCIKICNpbmNsdWRlICJUZXh0SXRl
cmF0b3IuaCIKICNpbmNsdWRlICJUaW1lci5oIgpJbmRleDogU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDExNTE4NykKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTItMDQtMjUgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJk
QG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIENTU1N0eWxlU2VsZWN0b3IgZmlsZXMg
dG8gU3R5bGVSZXNvbHZlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg0ODE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVuYW1lIENTU1N0eWxlU2VsZWN0b3IgZmlsZXMgdG8gbWF0Y2ggdGhlIG5ldyBj
bGFzcyBuYW1lIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIFVwZGF0ZSB0aGUgaW5jbHVkZXMgYWxs
IG92ZXIgdGhlIGNvZGUgYmFzZSB0byB0aGUgbmV3IG5hbWUuCisKKyAgICAgICAgKiBBcGkvcXdl
YmVsZW1lbnQuY3BwOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxl
LmNwcDoKKwogMjAxMi0wNC0yNCAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJv
c3NhLm9yZz4KIAogICAgICAgICBSZXBsYWNlIG9jY3VyZW5jZXMgb2Ygc3R5bGUgc2VsZWN0b3Ig
ZnJvbSB2YXJpYWJsZXMgYW5kIG1ldGhvZHMgbmFtZXMgYnkgc3R5bGUgcmVzb2x2ZXIuCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTUxODcpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3Qu
aCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9y
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01MSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVySW1hZ2UuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlN0YXRpY05v
ZGVMaXN0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgInF3ZWJmcmFt
ZS5oIgogI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCiAjaWYgVVNFKEpTQykKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUu
Y3BwCShyZXZpc2lvbiAxMTUxODcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1JlbmRlclRoZW1lUVN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAog
I2luY2x1ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCiAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0
b3IuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgpAQCAtNTQsNiArNTMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgogI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCiAjaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hl
ZXRzLmgiCiAKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138804</attachid>
            <date>2012-04-25 07:10:54 -0700</date>
            <delta_ts>2012-04-25 08:48:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84814-20120425111034.patch</filename>
            <type>text/plain</type>
            <size>695842</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMiBAQAorMjAxMi0wNC0yNSAgQWxleGlz
IE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5hbWUg
Q1NTU3R5bGVTZWxlY3RvciBmaWxlcyB0byBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ4MTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgQ1NTU3R5bGVTZWxlY3RvciBm
aWxlcyB0byBtYXRjaCB0aGUgbmV3IGNsYXNzIG5hbWUgU3R5bGVSZXNvbHZlci4KKyAgICAgICAg
VXBkYXRlIHRoZSBpbmNsdWRlcyBhbGwgb3ZlciB0aGUgY29kZSBiYXNlIHRvIHRoZSBuZXcgbmFt
ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgOiByZW5hbWluZyBmaWxlcywgbm8gYmVoYXZpb3Ig
Y2hhbmdlcyBleHBlY3RlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNz
cy9DU1NBbGxJbk9uZS5jcHA6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3Bw
OgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAqIGNzcy9DU1NH
cmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHA6
CisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcDoKKyAgICAgICAgKiBjc3MvU1ZH
Q1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlci5jcHA6Cisg
ICAgICAgICogY3NzL1N0eWxlTWVkaWEuY3BwOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVy
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUnVsZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6OnBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpy
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpzZWxlY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSdWxlRGF0YTo6aGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVEYXRhOjpoYXNNdWx0aXBhcnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlRGF0YTo6aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhh
c2gpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1
dGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6c3BlY2lmaWNpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmxpbmtNYXRjaFR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6Omhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6OmlzSW5SZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVE
YXRhOjpkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKToKKyAgICAgICAgKFNhbWVT
aXplQXNSdWxlRGF0YSk6CisgICAgICAgIChSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1
bGVTZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpkaXNhYmxlQXV0b1No
cmlua1RvRml0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmZlYXR1cmVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmlkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNl
dDo6Y2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0Ojp0YWdSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpzaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UnVsZVNldDo6bGlua1BzZXVkb0NsYXNzUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZVNldDo6Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bGVTZXQ6OnVuaXZlcnNhbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6
OnBhZ2VSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpSdWxlU2V0U2VsZWN0b3JQ
YWlyOjpSdWxlU2V0U2VsZWN0b3JQYWlyKToKKyAgICAgICAgKFJ1bGVTZXRTZWxlY3RvclBhaXIp
OgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JlZW5FdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnByaW50RXZh
bCk6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0VG9SaWdodERlY2xhcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OnJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1ha2VSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpk
ZXRlcm1pbmVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlU2V0
Rm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0dXBTY29w
ZVN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnB1c2hTY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwb3BTY29wZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnBvcFBhcmVudFNoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6YWRkS2V5ZnJhbWVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjp+U3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6RmVhdHVyZXM6OkZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OkZlYXR1cmVzOjp+RmVhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6RmVhdHVyZXM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpG
ZWF0dXJlczo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVQVNoZWV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmxvYWRGdWxsRGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Omxv
YWRTaW1wbGVEZWZhdWx0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZFZpZXdTb3VyY2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZE1hdGNoZWRQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29y
dEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bWF0Y2hBdXRob3JSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaFVzZXJSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aFVBUnVsZXMpOgorICAgICAgICAoTWF0Y2hpbmdVQVJ1bGVzU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Ok1hdGNoaW5nVUFSdWxlc1Njb3BlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGNoaW5nVUFSdWxlc1Njb3BlOjp+TWF0Y2hpbmdVQVJ1bGVzU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmguCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKE1lZGlhUXVlcnlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFR
dWVyeVJlc3VsdDo6TWVkaWFRdWVyeVJlc3VsdCk6CisgICAgICAgIChTdHlsZVJlc29sdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmb250RGVzY3JpcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50Rm9udERlc2NyaXB0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnREZXNjcmlwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRab29tKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnNldEVmZmVjdGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6c2V0VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6aGFzUGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpwdXNoU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cG9wU2Nv
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Zm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjp1c2VzU2libGluZ1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnVzZXNGaXJzdExpbmVSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjp1c2VzQmVmb3JlQWZ0ZXJSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjp1c2VzTGlua1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OlJ1bGVGZWF0dXJlOjpSdWxlRmVhdHVyZSk6CisgICAgICAgIChSdWxlRmVhdHVyZSk6
CisgICAgICAgIChGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjph
ZGRNYXRjaGVkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaFJh
bmdlczo6TWF0Y2hSYW5nZXMpOgorICAgICAgICAoTWF0Y2hSYW5nZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXM6Ok1hdGNoZWRQcm9wZXJ0aWVz
KToKKyAgICAgICAgKE1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6Ok1hdGNoUmVzdWx0OjpNYXRjaFJlc3VsdCk6CisgICAgICAgIChNYXRjaFJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaE9wdGlvbnM6Ok1hdGNo
T3B0aW9ucyk6CisgICAgICAgIChNYXRjaE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6aXNSaWdodFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6c3R5bGVOb3RZZXRBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6c2NvcGVTdGFja0lzQ29uc2lzdGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpTY29wZVN0YWNrRnJhbWU6OlNjb3BlU3RhY2tGcmFtZSk6CisgICAgICAgIChTY29wZVN0
YWNrRnJhbWUpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgICog
ZG9tL1NoYWRvd1RyZWUuY3BwOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZFBhZ2UuY3Bw
OgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxM
aW5rRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoK
KyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL1Zh
bGlkYXRpb25NZXNzYWdlLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAqIGxvYWRlci9MaW5rTG9hZGVy
LmNwcDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgICogcGFnZS9GcmFt
ZVZpZXcuY3BwOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclJlZ2lvbi5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZVNhZmFyaS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFn
ZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGEuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6
CisgICAgICAgICogc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NW
R0VsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwOgorICAg
ICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdNYXNr
RWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorCiAyMDEyLTA0
LTI1ICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgogCiAgICAgICAgIFtT
VkddIE5vdGhpbmcgc2hvdWxkIGJlIHN0cm9rZWQgd2hlbiB0aGUgc3Ryb2tlLXdpZHRoIGlzIDAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMTUyMDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDgzLDcgKzQ4Myw2IEBAIFNF
VChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3MvQ1NTU2VsZWN0b3JMaXN0LmNwcAogICAgIGNzcy9D
U1NTdHlsZURlY2xhcmF0aW9uLmNwcAogICAgIGNzcy9DU1NTdHlsZVJ1bGUuY3BwCi0gICAgY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCiAgICAgY3NzL0NTU1N0eWxlU2hlZXQuY3BwCiAgICAgY3Nz
L0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwCiAgICAgY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVl
LmNwcApAQCAtNTEwLDYgKzUwOSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3MvU3R5
bGVNZWRpYS5jcHAKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKICAgICBjc3MvU3R5bGVQ
cm9wZXJ0eVNob3J0aGFuZC5jcHAKKyAgICBjc3MvU3R5bGVSZXNvbHZlci5jcHAKICAgICBjc3Mv
U3R5bGVSdWxlLmNwcAogICAgIGNzcy9TdHlsZVNoZWV0LmNwcAogICAgIGNzcy9TdHlsZVNoZWV0
TGlzdC5jcHAKQEAgLTI1NDksNyArMjU0OSw3IEBAIEFERF9DVVNUT01fQ09NTUFORCgKICAgICBD
T01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAtSSR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL3Njcmlw
dHMgJHtXRUJDT1JFX0RJUn0vY3NzL21ha2UtY3NzLWZpbGUtYXJyYXlzLnBsIC0tZGVmaW5lcyAi
JHtGRUFUVVJFX0RFRklORVNfV0lUSF9TUEFDRV9TRVBBUkFUT1J9IiAtLXByZXByb2Nlc3NvciAi
JHtDT0RFX0dFTkVSQVRPUl9QUkVQUk9DRVNTT1J9IiAke0RFUklWRURfU09VUkNFU19XRUJDT1JF
X0RJUn0vVXNlckFnZW50U3R5bGVTaGVldHMuaCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJ
Un0vVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAke1dlYkNvcmVfVVNFUl9BR0VOVF9TVFlM
RV9TSEVFVFN9CiAgICAgVkVSQkFUSU0pCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1VzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAp
Ci1BRERfU09VUkNFX1dFQkNPUkVfREVSSVZFRF9ERVBFTkRFTkNJRVMoJHtXRUJDT1JFX0RJUn0v
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgVXNl
ckFnZW50U3R5bGVTaGVldHMuaCkKK0FERF9TT1VSQ0VfV0VCQ09SRV9ERVJJVkVEX0RFUEVOREVO
Q0lFUygke1dFQkNPUkVfRElSfS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgVXNlckFnZW50U3R5bGVT
aGVldHNEYXRhLmNwcCBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oKQogCiAKIEdFTkVSQVRFX0dSQU1N
QVIoY3NzeXkgJHtXRUJDT1JFX0RJUn0vY3NzL0NTU0dyYW1tYXIueSAke0RFUklWRURfU09VUkNF
U19XRUJDT1JFX0RJUn0vQ1NTR3JhbW1hci5oICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS9DU1NHcmFtbWFyLmNwcCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2
aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29y
a2luZyBjb3B5KQpAQCAtMTY0Miw4ICsxNjQyLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVs
ZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNoZWV0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaCBc
CiAJU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwIFwKQEAgLTE3
MDAsNiArMTY5OCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUHJvcGVydHlTZXQuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlT
aG9ydGhhbmQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNob3J0aGFu
ZC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1
bGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmggXAogCVNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNoZWV0LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDExNTIw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw3
ICs0NjMsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3Bw
IFwKICAgICBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgXAogICAgIGNzcy9DU1NTdHlsZVJ1
bGUuY3BwIFwKLSAgICBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgXAogICAgIGNzcy9DU1NTdHls
ZVNoZWV0LmNwcCBcCiAgICAgY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwIFwKICAgICBj
c3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwIFwKQEAgLTQ5MCw2ICs0ODksNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBjc3MvU3R5bGVNZWRpYS5jcHAgXAogICAgIGNzcy9TdHlsZVByb3BlcnR5U2V0
LmNwcCBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIFwKKyAgICBjc3MvU3R5
bGVSZXNvbHZlci5jcHAgXAogICAgIGNzcy9TdHlsZVJ1bGUuY3BwIFwKICAgICBjc3MvU3R5bGVT
aGVldC5jcHAgXAogICAgIGNzcy9TdHlsZVNoZWV0TGlzdC5jcHAgXApAQCAtMTYyMCw3ICsxNjIw
LDYgQEAgSEVBREVSUyArPSBcCiAgICAgY3NzL0NTU1NlbGVjdG9yTGlzdC5oIFwKICAgICBjc3Mv
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIFwKICAgICBjc3MvQ1NTU3R5bGVSdWxlLmggXAotICAgIGNz
cy9DU1NTdHlsZVNlbGVjdG9yLmggXAogICAgIGNzcy9DU1NTdHlsZVNoZWV0LmggXAogICAgIGNz
cy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggXAogICAgIGNzcy9DU1NVbmljb2RlUmFuZ2VWYWx1
ZS5oIFwKQEAgLTE2NDcsNiArMTY0Niw3IEBAIEhFQURFUlMgKz0gXAogICAgIGNzcy9TdHlsZUJ1
aWxkZXIuaCBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTZXQuaCBcCiAgICAgY3NzL1N0eWxlUHJv
cGVydHlTaG9ydGhhbmQuaCBcCisgICAgY3NzL1N0eWxlUmVzb2x2ZXIuaCBcCiAgICAgY3NzL1N0
eWxlUnVsZS5oIFwKICAgICBjc3MvU3R5bGVTaGVldC5oIFwKICAgICBjc3MvU3R5bGVTaGVldExp
c3QuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMTUyMDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI0NjEsOCArMjQ2MSw2IEBA
CiAgICAgICAgICAgICAnY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwJywKICAgICAgICAgICAg
ICdjc3MvQ1NTU3R5bGVSdWxlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL0NTU1N0eWxlUnVsZS5o
JywKLSAgICAgICAgICAgICdjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAnLAotICAgICAgICAgICAg
J2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgnLAogICAgICAgICAgICAgJ2Nzcy9DU1NTdHlsZVNoZWV0
LmNwcCcsCiAgICAgICAgICAgICAnY3NzL0NTU1N0eWxlU2hlZXQuaCcsCiAgICAgICAgICAgICAn
Y3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwJywKQEAgLTI1MTgsNiArMjUxNiw4IEBACiAg
ICAgICAgICAgICAnY3NzL1N0eWxlUHJvcGVydHlTZXQuaCcsCiAgICAgICAgICAgICAnY3NzL1N0
eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwJywKICAgICAgICAgICAgICdjc3MvU3R5bGVQcm9wZXJ0
eVNob3J0aGFuZC5oJywKKyAgICAgICAgICAgICdjc3MvU3R5bGVSZXNvbHZlci5jcHAnLAorICAg
ICAgICAgICAgJ2Nzcy9TdHlsZVJlc29sdmVyLmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVJ1
bGUuY3BwJywKICAgICAgICAgICAgICdjc3MvU3R5bGVSdWxlLmgnLAogICAgICAgICAgICAgJ2Nz
cy9TdHlsZVNoZWV0LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1ODU0LDYyICsz
NTg1NCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGNzc1xDU1NTdHlsZVNlbGVjdG9yLmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJ
CQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgot
CQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
LQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJ
Lz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJ
CQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVD
b25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXENTU1N0eWxlU2VsZWN0b3IuaCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXENT
U1N0eWxlU2hlZXQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KQEAgLTM2ODAy
LDYgKzM2NzQ2LDYyIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGNzc1xTdHlsZVJlc29sdmVyLmNwcCIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1
cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJ
CQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgor
CQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1
cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZp
bGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFN0eWxlUmVzb2x2ZXIuaCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFN0
eWxlUnVsZS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTE1MjAxKQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Mzc1LDggKzUzNzUsNiBAQAogCQlCQzc3MkIzQzBDNEVBOTFFMDA4MzI4
NUYgLyogQ1NTSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzc3MkIzNjBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTSGVscGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM3NzJCM0QwQzRFQTkx
RTAwODMyODVGIC8qIENTU1BhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkIzNzBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmNw
cCAqLzsgfTsKIAkJQkM3NzJCM0UwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJCMzgwQzRFQTkx
RTAwODMyODVGIC8qIENTU1BhcnNlci5oICovOyB9OwotCQlCQzc3MkIzRjBDNEVBOTFFMDA4MzI4
NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkIzOTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAgKi87IH07Ci0JCUJDNzcyQjQwMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNl
bGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Qzc3MkIzQTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5oICovOyB9OwogCQlC
Qzc3MkM0NjBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNDQwQzRFQjJDNjAwODMy
ODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCAqLzsgfTsKIAkJQkM3NzJDNDcwQzRFQjJDNjAwODMy
ODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzc3MkM0NTBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3Qu
aCAqLzsgfTsKIAkJQkM3NzJDNEUwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJD
NEMwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3BwICovOyB9OwpAQCAtNTg2
Myw2ICs1ODYxLDggQEAKIAkJRTEyRURCN0IwQjMwOEE3ODAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTJFREI3
QTBCMzA4QTc4MDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTJFREJFQTBCMzA4RTBCMDAyNzA0QjYgLyog
RXZlbnRUYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTEyRURCRTkwQjMwOEUwQjAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmNwcCAqLzsgfTsK
IAkJRTEzNEY1QUIxMkVFMzQzRjAwNEVDNThEIC8qIEludFJlY3RIYXNoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM0RjVBQTEyRUUzNDNGMDA0RUM1
OEQgLyogSW50UmVjdEhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2
MTE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi87IH07CisJCUUxMzk4NjY0
MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUgLyogU3R5
bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2ll
U3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1tICovOyB9
OwogCQlFMTRGMUM0NDE0QjVEQUM2MDBFQTkwMDkgLyogSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTRGMUM0MjE0QjVEQUM2MDBFQTkwMDkgLyogSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZS5jcHAgKi87IH07CiAJCUUxNEYxQzQ1MTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMTRGMUM0MzE0QjVEQUM2MDBFQTkwMDkgLyogSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xMjQ2NCw4ICsxMjQ2NCw2IEBACiAJCUJDNzcyQjM2MEM0RUE5MUUwMDgz
Mjg1RiAvKiBDU1NIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENT
U0hlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkIzNzBDNEVBOTFF
MDA4MzI4NUYgLyogQ1NTUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3
MkIzODBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDU1NQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QkM3NzJCMzkwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1N0eWxlU2VsZWN0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzc3MkIzQTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NT
U3R5bGVTZWxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTU3R5
bGVTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkM0NDBDNEVC
MkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkM3NzJDNDUwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkM0QzBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5
cGVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTUlN
RVR5cGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzAwMSw2
ICsxMjk5OSw4IEBACiAJCUUxMkVEQjdBMEIzMDhBNzgwMDI3MDRCNiAvKiBFdmVudFRhcmdldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudFRhcmdldC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTJFREJFOTBCMzA4RTBCMDAyNzA0QjYgLyogRXZlbnRU
YXJnZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRUYXJn
ZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTM0RjVBQTEyRUUzNDNGMDA0
RUM1OEQgLyogSW50UmVjdEhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50UmVjdEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEzOTg2NjExNTQ3
ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3R5bGVSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUUxMzk4NjYyMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tpZVN0b3Jh
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llU3RvcmFnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTNGMDFGMDEyNzBFMTkwMDBERkJBNzEgLyog
Q29va2llU3RvcmFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IENvb2tpZVN0b3JhZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
NEYxQzQyMTRCNURBQzYwMEVBOTAwOSAvKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA2
MDcsOCArMjA2MDcsNiBAQAogCQkJCUE4MEU2Q0M1MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHls
ZVJ1bGUuY3BwICovLAogCQkJCUE4MEU2Q0UyMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHlsZVJ1
bGUuaCAqLywKIAkJCQk4NUM1NkNBMTBBQTg5QUI0MDBEOTU3NTUgLyogQ1NTU3R5bGVSdWxlLmlk
bCAqLywKLQkJCQlCQzc3MkIzOTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5j
cHAgKi8sCi0JCQkJQkM3NzJCM0EwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0b3Iu
aCAqLywKIAkJCQlBOEVBODAwMDBBMTk1MTZFMDBBOEVGNUYgLyogQ1NTU3R5bGVTaGVldC5jcHAg
Ki8sCiAJCQkJQThFQTdGRkYwQTE5NTE2RTAwQThFRjVGIC8qIENTU1N0eWxlU2hlZXQuaCAqLywK
IAkJCQk4NThDMzkxMDBBQThGRjAwMDBCMTg3QTQgLyogQ1NTU3R5bGVTaGVldC5pZGwgKi8sCkBA
IC0yMDY4Niw2ICsyMDY4NCw4IEBACiAJCQkJQTgwRTZERkEwQTE5OTA2NzAwN0ZCOEM1IC8qIFN0
eWxlUHJvcGVydHlTZXQuaCAqLywKIAkJCQlFMUIyNTEwNDE1MkEwQkFGMDA2OUI3NzkgLyogU3R5
bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAgKi8sCiAJCQkJRTFCMjUxMDUxNTJBMEJBRjAwNjlCNzc5
IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCAqLywKKwkJCQlFMTM5ODY2MTE1NDc4NDc0MDAx
RTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi8sCisJCQkJRTEzOTg2NjIxNTQ3ODQ3NDAwMUUz
RjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCAqLywKIAkJCQlFNEJCRUQ0QTE0RkNEQkExMDAzRjBCOTgg
LyogU3R5bGVSdWxlLmNwcCAqLywKIAkJCQlFNEJCRUQ0QjE0RkNEQkExMDAzRjBCOTggLyogU3R5
bGVSdWxlLmggKi8sCiAJCQkJQThFQTgwMDUwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQu
Y3BwICovLApAQCAtMjE5MTksNyArMjE5MTksNiBAQAogCQkJCUE4MEU3MzUyMEExOTlDNzcwMDdG
QjhDNSAvKiBDU1NTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZFMEYwQTE5OTEx
QzAwN0ZCOEM1IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
MEU2RDBDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHlsZVJ1bGUuaCBpbiBIZWFkZXJzICovLAot
CQkJCUJDNzcyQjQwMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNlbGVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEVBODAwNzBBMTk1MTZFMDBBOEVGNUYgLyogQ1NTU3R5bGVTaGVldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4MEM5ODgwQ0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWlu
Z0Z1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MUY1M0U5MEQyNzA0RjkwMEVD
RTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDgxNCw2
ICsyNDgxMyw3IEBACiAJCQkJNTBEMTBEOUExNTQ1RjU3NjAwOTZEMjg4IC8qIFJlbmRlckxheWVy
RmlsdGVySW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwMEVFNzYxNTQ2RUFDMTAwQkExMUQx
IC8qIFN0eWxlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGQTJENzgxNTIxMzJCMzAw
QzFCQTBCIC8qIERPTVdpbmRvd0V4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTEzOTg2
NjQxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MjU0MDQsNyArMjU0MDQsNiBAQAogCQkJCUU0QzE3ODlBMEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NT
ZWxlY3Rvckxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZFMTAwQTE5OTExQzAwN0ZC
OEM1IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZD
RUYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1N0eWxlUnVsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCQzc3MkIzRjBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEVBODAwODBBMTk1MTZFMDBBOEVGNUYgLyogQ1NTU3R5bGVTaGVldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgwQzk4NzBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGlt
aW5nRnVuY3Rpb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzFGNTNFQTBEMjcwNEY5
MDBFQ0UwRDUgLyogQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0y
NzgyNyw2ICsyNzgyNiw3IEBACiAJCQkJNTBEMTBEOTkxNTQ1RjU3NjAwOTZEMjg4IC8qIFJlbmRl
ckxheWVyRmlsdGVySW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTAwRUU3NTE1NDZFQUMx
MDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxN0ZCQTFF
MTUxQUIxN0MwMEI1Nzk1OSAvKiBET01XaW5kb3dFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRTEzOTg2NjMxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDEx
NTIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlICJDU1NSdWxlLmNwcCIKICNpbmNsdWRlICJD
U1NSdWxlTGlzdC5jcHAiCiAjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwIgotI2lu
Y2x1ZGUgIkNTU1NlbGVjdG9yLmNwcCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuY3BwIgog
I2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uY3BwIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVs
ZS5jcHAiCkBAIC03MSwzICs3MCw0IEBACiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmNwcCIKICNp
bmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmNwcCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hv
cnRoYW5kLmNwcCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmNwcCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU0Nh
bGN1bGF0aW9uVmFsdWUuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKKyNpbmNsdWRlICJTdHls
ZVJlc29sdmVyLmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCShy
ZXZpc2lvbiAxMTUyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1Nl
Z21lbnRlZEZvbnRGYWNlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkNTU1VuaWNvZGVSYW5nZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgpAQCAtNDYsNiArNDUsNyBAQAogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJTdHls
ZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0
eWxlUnVsZS5oIgogI2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFk
aWVudFZhbHVlLmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5j
bHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgogCiAjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1
ZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuaCIKICNpbmNsdWRl
ICJHcmFkaWVudC5oIgpAQCAtMzcsNiArMzYsNyBAQAogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAx
MTUyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTg2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFs
ZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vKQotICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBG
b3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKLQotI2luY2x1ZGUgIkF0dHJpYnV0
ZS5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1
ZS5oIgotI2luY2x1ZGUgIkNvbnRlbnREYXRhLmgiCi0jaW5jbHVkZSAiQ291bnRlci5oIgotI2lu
Y2x1ZGUgIkNvdW50ZXJDb250ZW50LmgiCi0jaW5jbHVkZSAiQ1NTQm9yZGVySW1hZ2UuaCIKLSNp
bmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgotI2luY2x1ZGUgIkNTU0ZvbnRT
ZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJDU1NMaW5l
Qm94Q29udGFpblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgiCi0jaW5jbHVkZSAi
Q1NTUGFnZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NQYXJzZXIuaCIKLSNpbmNsdWRlICJDU1NQcmlt
aXRpdmVWYWx1ZU1hcHBpbmdzLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2lu
Y2x1ZGUgIkNTU1JlZmxlY3RWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCi0jaW5j
bHVkZSAiQ1NTU2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKLSNpbmNs
dWRlICJDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVk
ZSAiQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgot
I2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKLSNpbmNsdWRlICJGb250RmVhdHVyZVZhbHVlLmgiCi0j
aW5jbHVkZSAiRm9udFZhbHVlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFt
ZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTFByb2dyZXNzRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxT
dHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVMaXN0Lmgi
Ci0jaW5jbHVkZSAiTGlua0hhc2guaCIKLSNpbmNsdWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcu
aCIKLSNpbmNsdWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1h
dHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgotI2luY2x1
ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKLSNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIK
LSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGFp
ci5oIgotI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVk
ZSAiUXVvdGVzRGF0YS5oIgotI2luY2x1ZGUgIlJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJSZWdp
b24uaCIKLSNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTY3Jv
bGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
LSNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCi0jaW5jbHVkZSAiU1ZHRG9jdW1l
bnRFeHRlbnNpb25zLmgiCi0jaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2hhZG93RGF0YS5oIgotI2luY2x1
ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJTaGFkb3dWYWx1ZS5oIgotI2luY2x1ZGUgIlNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKLSNpbmNs
dWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiU3R5bGVQZW5kaW5nSW1hZ2UuaCIK
LSNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgi
Ci0jaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKLSNpbmNsdWRlICJUZXh0LmgiCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotI2luY2x1ZGUg
IldlYktpdENTU0tleWZyYW1lUnVsZS5oIgotI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1
bGUuaCIKLSNpbmNsdWRlICJXZWJLaXRDU1NSZWdpb25SdWxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWUuaCIKLSNpbmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFtZXMuaCIK
LSNpbmNsdWRlICJYTUxOYW1lcy5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0jaW5jbHVk
ZSAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCIK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotI2luY2x1ZGUgIkRhc2hi
b2FyZFJlZ2lvbi5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR0Vs
ZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyLmgiCi0jaW5j
bHVkZSAiQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyLmgiCi0jaW5jbHVkZSAiU3R5bGVDYWNoZWRTaGFkZXIuaCIKLSNpbmNsdWRlICJTdHls
ZUN1c3RvbUZpbHRlclByb2dyYW0uaCIKLSNpbmNsdWRlICJTdHlsZVBlbmRpbmdTaGFkZXIuaCIK
LSNpbmNsdWRlICJTdHlsZVNoYWRlci5oIgotI2luY2x1ZGUgIldlYktpdENTU1NoYWRlclZhbHVl
LmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotI2luY2x1ZGUgIkNTU0lt
YWdlU2V0VmFsdWUuaCIKLSNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlU2V0LmgiCi0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKFFUKQotI2RlZmluZSBGSVhFRF9QT1NJVElPTl9DUkVBVEVTX1NUQUNL
SU5HX0NPTlRFWFQgMQotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotI2RlZmluZSBIQU5E
TEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCi1pZiAoaXNJbmhlcml0KSB7IFwKLSAgICBtX3N0eWxl
LT5zZXQjI1Byb3AobV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAotICAgIHJldHVybjsgXAotfQot
Ci0jZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKLUhBTkRM
RV9JTkhFUklUKHByb3AsIFByb3ApIFwKLWlmIChpc0luaXRpYWwpIHsgXAotICAgIG1fc3R5bGUt
PnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAotICAgIHJldHVybjsg
XAotfQotCi0jZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX1dJVEhfVkFMVUUocHJv
cCwgUHJvcCwgVmFsdWUpIFwKLUhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKLWlmIChpc0lu
aXRpYWwpIHsgXAotICAgIG1fc3R5bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMj
VmFsdWUoKSk7XAotICAgIHJldHVybjtcCi19Ci0KLSNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUxfQU5EX1BSSU1JVElWRShwcm9wLCBQcm9wKSBcCi1IQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTChwcm9wLCBQcm9wKSBcCi1pZiAocHJpbWl0aXZlVmFsdWUpIFwKLSAgICBtX3N0eWxl
LT5zZXQjI1Byb3AoKnByaW1pdGl2ZVZhbHVlKTsKLQotY2xhc3MgUnVsZURhdGEgewotcHVibGlj
OgotICAgIFJ1bGVEYXRhKFN0eWxlUnVsZSosIENTU1NlbGVjdG9yKiwgdW5zaWduZWQgcG9zaXRp
b24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tT
ZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpOwotCi0gICAgdW5zaWduZWQgcG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgU3R5bGVSdWxlKiBydWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9ydWxlOyB9Ci0gICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3RvcjsgfQotCi0gICAgYm9vbCBoYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcjsgfQotICAgIGJvb2wg
aGFzTXVsdGlwYXJ0U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc011bHRpcGFydFNlbGVj
dG9yOyB9Ci0gICAgYm9vbCBoYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25S
dWxlSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hU
TUxCYXNlZE9uUnVsZUhhc2g7IH0KLSAgICBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVT
ZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVj
dG9yOyB9Ci0gICAgdW5zaWduZWQgc3BlY2lmaWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NwZWNp
ZmljaXR5OyB9Ci0gICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGlua01hdGNoVHlwZTsgfQotICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbjsgfQotICAgIGJvb2wgaXNJ
blJlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5SZWdpb25SdWxlOyB9Ci0KLSAgICAv
LyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVuIG1lbW9yeSB1c2FnZSAodGhlcmUgY2FuIGJlIGxvdHMg
b2YgUnVsZURhdGEgb2JqZWN0cykgYW5kIGdvb2QgZmlsdGVyaW5nIHBlcmZvcm1hbmNlLgotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmllckNvdW50ID0gNDsKLSAgICBj
b25zdCB1bnNpZ25lZCogZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcygpIGNvbnN0
IHsgcmV0dXJuIG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlczsgfQotCi1wcml2
YXRlOgotICAgIFN0eWxlUnVsZSogbV9ydWxlOwotICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9y
OwotICAgIHVuc2lnbmVkIG1fc3BlY2lmaWNpdHk7Ci0gICAgLy8gVGhpcyBudW1iZXIgd2FzIHBp
Y2tlZCBmYWlybHkgYXJiaXRyYXJpbHkuIFdlIGNhbiBwcm9iYWJseSBsb3dlciBpdCBpZiB3ZSBu
ZWVkIHRvLgotICAgIC8vIFNvbWUgc2ltcGxlIHRlc3Rpbmcgc2hvd2VkIDwxMDAsMDAwIFJ1bGVE
YXRhJ3Mgb24gbGFyZ2Ugc2l0ZXMuCi0gICAgdW5zaWduZWQgbV9wb3NpdGlvbiA6IDI0OwotICAg
IHVuc2lnbmVkIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yIDogMTsKLSAgICB1bnNpZ25lZCBt
X2hhc011bHRpcGFydFNlbGVjdG9yIDogMTsKLSAgICB1bnNpZ25lZCBtX2hhc1JpZ2h0bW9zdFNl
bGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoIDogMTsKLSAgICB1bnNpZ25lZCBtX2Nv
bnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvciA6IDE7Ci0gICAgdW5zaWduZWQgbV9saW5r
TWF0Y2hUeXBlIDogMjsgLy8gIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzawotICAgIHVu
c2lnbmVkIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IDE7Ci0gICAgdW5zaWduZWQgbV9p
c0luUmVnaW9uUnVsZSA6IDE7Ci0gICAgLy8gVXNlIHBsYWluIGFycmF5IGluc3RlYWQgb2YgYSBW
ZWN0b3IgdG8gbWluaW1pemUgbWVtb3J5IG92ZXJoZWFkLgotICAgIHVuc2lnbmVkIG1fZGVzY2Vu
ZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlc1ttYXhpbXVtSWRlbnRpZmllckNvdW50XTsKLX07
Ci0gICAgCi1zdHJ1Y3QgU2FtZVNpemVBc1J1bGVEYXRhIHsKLSAgICB2b2lkKiBhOwotICAgIHZv
aWQqIGI7Ci0gICAgdW5zaWduZWQgYzsKLSAgICB1bnNpZ25lZCBkOwotICAgIHVuc2lnbmVkIGVb
NF07Ci19OwotCi1DT01QSUxFX0FTU0VSVChzaXplb2YoUnVsZURhdGEpID09IHNpemVvZihTYW1l
U2l6ZUFzUnVsZURhdGEpLCBSdWxlRGF0YV9zaG91bGRfc3RheV9zbWFsbCk7Ci0KLWNsYXNzIFJ1
bGVTZXQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJ1bGVTZXQpOwotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5l
dyBSdWxlU2V0KTsgfQotCi0gICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBP
d25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+ID4gQXRvbVJ1bGVNYXA7Ci0KLSAgICB2b2lkIGFkZFJ1
bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImLCBTdHlsZVJlc29sdmVyKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7Ci0KLSAg
ICB2b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUg
PSBmYWxzZSk7Ci0gICAgdm9pZCBhZGRSdWxlKFN0eWxlUnVsZSosIENTU1NlbGVjdG9yKiwgYm9v
bCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9y
LCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOwotICAgIHZvaWQgYWRkUGFnZVJ1bGUoU3R5
bGVSdWxlUGFnZSopOwotICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtl
eSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwotICAgIHZvaWQgYWRkUmVnaW9uUnVs
ZShTdHlsZVJ1bGVSZWdpb24qLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOwotICAg
IHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICB2b2lkIGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7
IG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9Ci0KLSAgICBjb25zdCBTdHlsZVJl
c29sdmVyOjpGZWF0dXJlcyYgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9
Ci0KLSAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBpZFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwq
IGtleSkgY29uc3QgeyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9Ci0gICAgY29uc3QgVmVj
dG9yPFJ1bGVEYXRhPiogY2xhc3NSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsg
cmV0dXJuIG1fY2xhc3NSdWxlcy5nZXQoa2V5KTsgfQotICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qIHRhZ1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV90YWdS
dWxlcy5nZXQoa2V5KTsgfQotICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHNoYWRvd1BzZXVk
b0VsZW1lbnRSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fc2hh
ZG93UHNldWRvRWxlbWVudFJ1bGVzLmdldChrZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVE
YXRhPiogbGlua1BzZXVkb0NsYXNzUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV9saW5rUHNldWRv
Q2xhc3NSdWxlczsgfQotICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGZvY3VzUHNldWRvQ2xh
c3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsgfQotICAg
IGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHVuaXZlcnNhbFJ1bGVzKCkgY29uc3QgeyByZXR1cm4g
Jm1fdW5pdmVyc2FsUnVsZXM7IH0KLSAgICBjb25zdCBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBw
YWdlUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VSdWxlczsgfQotCi1wdWJsaWM6Ci0gICAg
UnVsZVNldCgpOwotCi0gICAgQXRvbVJ1bGVNYXAgbV9pZFJ1bGVzOwotICAgIEF0b21SdWxlTWFw
IG1fY2xhc3NSdWxlczsKLSAgICBBdG9tUnVsZU1hcCBtX3RhZ1J1bGVzOwotICAgIEF0b21SdWxl
TWFwIG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzOwotICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9s
aW5rUHNldWRvQ2xhc3NSdWxlczsKLSAgICBWZWN0b3I8UnVsZURhdGE+IG1fZm9jdXNQc2V1ZG9D
bGFzc1J1bGVzOwotICAgIFZlY3RvcjxSdWxlRGF0YT4gbV91bml2ZXJzYWxSdWxlczsKLSAgICBW
ZWN0b3I8U3R5bGVSdWxlUGFnZSo+IG1fcGFnZVJ1bGVzOwotICAgIHVuc2lnbmVkIG1fcnVsZUNv
dW50OwotICAgIGJvb2wgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkOwotICAgIFN0eWxlUmVzb2x2
ZXI6OkZlYXR1cmVzIG1fZmVhdHVyZXM7Ci0KLSAgICBzdHJ1Y3QgUnVsZVNldFNlbGVjdG9yUGFp
ciB7Ci0gICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBQ
YXNzT3duUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQpIDogc2VsZWN0b3Ioc2VsZWN0b3IpLCBydWxlU2V0
KHJ1bGVTZXQpIHsgfQotICAgICAgICBSdWxlU2V0U2VsZWN0b3JQYWlyKGNvbnN0IFJ1bGVTZXRT
ZWxlY3RvclBhaXImIHJzKSA6IHNlbGVjdG9yKHJzLnNlbGVjdG9yKSwgcnVsZVNldChjb25zdF9j
YXN0PFJ1bGVTZXRTZWxlY3RvclBhaXIqPigmcnMpLT5ydWxlU2V0LnJlbGVhc2UoKSkgeyB9Ci0g
ICAgICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcjsKLSAgICAgICAgT3duUHRyPFJ1bGVTZXQ+IHJ1
bGVTZXQ7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxSdWxlU2V0U2VsZWN0b3JQYWlyPiBtX3JlZ2lv
blNlbGVjdG9yc0FuZFJ1bGVTZXRzOwotfTsKLQotc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRTdHls
ZTsKLXN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UXVpcmtzU3R5bGU7Ci1zdGF0aWMgUnVsZVNldCog
ZGVmYXVsdFByaW50U3R5bGU7Ci1zdGF0aWMgUnVsZVNldCogZGVmYXVsdFZpZXdTb3VyY2VTdHls
ZTsKLXN0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0Owot
c3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogZGVmYXVsdFN0eWxlU2hlZXQ7Ci1zdGF0aWMgU3R5
bGVTaGVldEludGVybmFsKiBxdWlya3NTdHlsZVNoZWV0Owotc3RhdGljIFN0eWxlU2hlZXRJbnRl
cm5hbCogc3ZnU3R5bGVTaGVldDsKLXN0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIG1hdGhNTFN0
eWxlU2hlZXQ7Ci1zdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBtZWRpYUNvbnRyb2xzU3R5bGVT
aGVldDsKLXN0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIGZ1bGxzY3JlZW5TdHlsZVNoZWV0Owot
Ci1SZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKLQot
c3RhdGljIHZvaWQgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKTsKLXN0YXRpYyB2b2lkIGxvYWRTaW1w
bGVEZWZhdWx0U3R5bGUoKTsKLXRlbXBsYXRlIDxjbGFzcyBMaXN0VHlwZT4KLXN0YXRpYyB2b2lk
IGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxl
UnVsZT4gPiYsIExpc3RUeXBlKik7Ci0KLS8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVz
ZSBzb21lIG1lY2hhbmlzbSB0aGF0IGd1YXJhbnRlZXMgdGhpcyBpcyBpbiBzeW5jIHdpdGggdGhl
IHJlYWwgVUEgc3R5bGVzaGVldC4KLXN0YXRpYyBjb25zdCBjaGFyKiBzaW1wbGVVc2VyQWdlbnRT
dHlsZVNoZWV0ID0gImh0bWwsYm9keSxkaXZ7ZGlzcGxheTpibG9ja31oZWFke2Rpc3BsYXk6bm9u
ZX1ib2R5e21hcmdpbjo4cHh9ZGl2OmZvY3VzLHNwYW46Zm9jdXN7b3V0bGluZTphdXRvIDVweCAt
d2Via2l0LWZvY3VzLXJpbmctY29sb3J9YTotd2Via2l0LWFueS1saW5re2NvbG9yOi13ZWJraXQt
bGluazt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfWE6LXdlYmtpdC1hbnktbGluazphY3RpdmV7
Y29sb3I6LXdlYmtpdC1hY3RpdmVsaW5rfSI7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50
Q2FuVXNlU2ltcGxlRGVmYXVsdFN0eWxlKEVsZW1lbnQqIGUpCi17Ci0gICAgcmV0dXJuIGUtPmhh
c1RhZ05hbWUoaHRtbFRhZykgfHwgZS0+aGFzVGFnTmFtZShoZWFkVGFnKSB8fCBlLT5oYXNUYWdO
YW1lKGJvZHlUYWcpIHx8IGUtPmhhc1RhZ05hbWUoZGl2VGFnKSB8fCBlLT5oYXNUYWdOYW1lKHNw
YW5UYWcpIHx8IGUtPmhhc1RhZ05hbWUoYnJUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYVRhZyk7Ci19
Ci0KLXN0YXRpYyBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBzY3JlZW5FdmFsKCkKLXsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3IsIHN0YXRpY1Nj
cmVlbkV2YWwsICgic2NyZWVuIikpOwotICAgIHJldHVybiBzdGF0aWNTY3JlZW5FdmFsOwotfQot
Ci1zdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgcHJpbnRFdmFsKCkKLXsKLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3IsIHN0YXRpY1ByaW50
RXZhbCwgKCJwcmludCIpKTsKLSAgICByZXR1cm4gc3RhdGljUHJpbnRFdmFsOwotfQotCi1zdGF0
aWMgU3R5bGVQcm9wZXJ0eVNldCogbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpCi17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4sIGxlZnRUb1JpZ2h0RGVj
bCwgKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpKSk7Ci0gICAgaWYgKGxlZnRUb1JpZ2h0RGVj
bC0+aXNFbXB0eSgpKQotICAgICAgICBsZWZ0VG9SaWdodERlY2wtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZUx0cik7Ci0gICAgcmV0dXJuIGxlZnRUb1JpZ2h0RGVj
bC5nZXQoKTsKLX0KLQotc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJpZ2h0VG9MZWZ0RGVjbGFy
YXRpb24oKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPFN0eWxlUHJvcGVydHlT
ZXQ+LCByaWdodFRvTGVmdERlY2wsIChTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKSkpOwotICAg
IGlmIChyaWdodFRvTGVmdERlY2wtPmlzRW1wdHkoKSkKLSAgICAgICAgcmlnaHRUb0xlZnREZWNs
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVSdGwpOwotICAgIHJl
dHVybiByaWdodFRvTGVmdERlY2wuZ2V0KCk7Ci19Ci0KLVN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVz
b2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykK
LSAgICA6IG1faGFzVUFBcHBlYXJhbmNlKGZhbHNlKQotICAgICwgbV9iYWNrZ3JvdW5kRGF0YShC
YWNrZ3JvdW5kRmlsbExheWVyKQotICAgICwgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRp
b25zU2luY2VMYXN0U3dlZXAoMCkKLSAgICAsIG1fY2hlY2tlcihkb2N1bWVudCwgIWRvY3VtZW50
LT5pblF1aXJrc01vZGUoKSkKLSAgICAsIG1fcGFyZW50U3R5bGUoMCkKLSAgICAsIG1fcm9vdEVs
ZW1lbnRTdHlsZSgwKQotICAgICwgbV9lbGVtZW50KDApCi0gICAgLCBtX3N0eWxlZEVsZW1lbnQo
MCkKLSAgICAsIG1fcmVnaW9uRm9yU3R5bGluZygwKQotICAgICwgbV9lbGVtZW50TGlua1N0YXRl
KE5vdEluc2lkZUxpbmspCi0gICAgLCBtX3BhcmVudE5vZGUoMCkKLSAgICAsIG1fbGluZUhlaWdo
dFZhbHVlKDApCi0gICAgLCBtX2ZvbnREaXJ0eShmYWxzZSkKLSAgICAsIG1fbWF0Y2hBdXRob3JB
bmRVc2VyU3R5bGVzKG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAsIG1fc2FtZU9yaWdp
bk9ubHkoZmFsc2UpCi0gICAgLCBtX2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0
ZShkb2N1bWVudCkpCi0gICAgLCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQot
ICAgICwgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKQotICAgICwgbV9z
dHlsZUJ1aWxkZXIoU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKSkKLSNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCi0gICAgLCBtX2hhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKQotI2VuZGlm
Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICAsIG1fc2NvcGVTdGFja1BhcmVudCgwKQot
I2VuZGlmCi17Ci0gICAgRWxlbWVudCogcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KTsKLQotICAgIGlmICghZGVmYXVsdFN0eWxlKSB7Ci0gICAgICAgIGlmICghcm9vdCB8fCBlbGVt
ZW50Q2FuVXNlU2ltcGxlRGVmYXVsdFN0eWxlKHJvb3QpKQotICAgICAgICAgICAgbG9hZFNpbXBs
ZURlZmF1bHRTdHlsZSgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxvYWRGdWxsRGVm
YXVsdFN0eWxlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBjb25zdHJ1Y3QgZG9jdW1l
bnQgcm9vdCBlbGVtZW50IGRlZmF1bHQgc3R5bGUuIHRoaXMgaXMgbmVlZGVkCi0gICAgLy8gdG8g
ZXZhbHVhdGUgbWVkaWEgcXVlcmllcyB0aGF0IGNvbnRhaW4gcmVsYXRpdmUgY29uc3RyYWludHMs
IGxpa2UgInNjcmVlbiBhbmQgKG1heC13aWR0aDogMTBlbSkiCi0gICAgLy8gVGhpcyBpcyBoZXJl
IGluc3RlYWQgb2YgY29uc3RydWN0b3IsIGJlY2F1c2Ugd2hlbiBjb25zdHJ1Y3RvciBpcyBydW4s
Ci0gICAgLy8gZG9jdW1lbnQgZG9lc24ndCBoYXZlIGRvY3VtZW50RWxlbWVudAotICAgIC8vIE5P
VEU6IHRoaXMgYXNzdW1lcyB0aGF0IGVsZW1lbnQgdGhhdCBnZXRzIHBhc3NlZCB0byBzdHlsZUZv
ckVsZW1lbnQgLWNhbGwKLSAgICAvLyBpcyBhbHdheXMgZnJvbSB0aGUgZG9jdW1lbnQgdGhhdCBv
d25zIHRoZSBzdHlsZSBzZWxlY3RvcgotICAgIEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50LT52
aWV3KCk7Ci0gICAgaWYgKHZpZXcpCi0gICAgICAgIG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1l
ZGlhUXVlcnlFdmFsdWF0b3Iodmlldy0+bWVkaWFUeXBlKCkpKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlFdmFsdWF0b3IoImFsbCIpKTsKLQot
ICAgIGlmIChyb290KQotICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1l
bnQocm9vdCwgMCwgRGlzYWxsb3dTdHlsZVNoYXJpbmcsIE1hdGNoT25seVVzZXJBZ2VudFJ1bGVz
KTsKLQotICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmlldykKLSAgICAgICAgbV9tZWRp
dW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3LT5tZWRpYVR5cGUoKSwg
dmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxlLmdldCgpKSk7Ci0KLSAgICBtX2F1dGhv
clN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgLy8gQWRkaW5nIHJ1bGVzIGZyb20gbXVs
dGlwbGUgc2hlZXRzLCBzaHJpbmsgYXQgdGhlIGVuZC4KLSAgICAvLyBBZGRpbmcgZ2xvYmFsIHJ1
bGVzIGZyb20gbXVsdGlwbGUgc2hlZXRzLCBzaHJpbmsgYXQgdGhlIGVuZC4KLSAgICAvLyBOb3Rl
IHRoYXQgdGhlcmUgdXN1YWxseSBpcyBvbmx5IDEgc2hlZXQgZm9yIHNjb3BlZCBydWxlcywgc28g
YXV0by1zaHJpbmstdG8tZml0IGlzIGZpbmUuCi0gICAgbV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1
dG9TaHJpbmtUb0ZpdCgpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgc3Vja3MhIFRoZSB1c2VyIHNo
ZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRpbWUhCi0gICAgT3duUHRyPFJ1bGVTZXQ+IHRlbXBVc2Vy
U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBpZiAoU3R5bGVTaGVldEludGVybmFsKiBw
YWdlVXNlclNoZWV0ID0gZG9jdW1lbnQtPnBhZ2VVc2VyU2hlZXQoKSkKLSAgICAgICAgdGVtcFVz
ZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZVVzZXJTaGVldCwgKm1fbWVkaXVtLCB0aGlz
KTsKLSAgICBhZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGRvY3Vt
ZW50LT5wYWdlR3JvdXBVc2VyU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsKLSAgICBhZGRBdXRo
b3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGRvY3VtZW50LT5kb2N1bWVudFVz
ZXJTaGVldHMoKSwgKnRlbXBVc2VyU3R5bGUpOwotICAgIGlmICh0ZW1wVXNlclN0eWxlLT5tX3J1
bGVDb3VudCA+IDAgfHwgdGVtcFVzZXJTdHlsZS0+bV9wYWdlUnVsZXMuc2l6ZSgpID4gMCkKLSAg
ICAgICAgbV91c2VyU3R5bGUgPSB0ZW1wVXNlclN0eWxlLnJlbGVhc2UoKTsKLQotI2lmIEVOQUJM
RShTVkdfRk9OVFMpCi0gICAgaWYgKGRvY3VtZW50LT5zdmdFeHRlbnNpb25zKCkpIHsKLSAgICAg
ICAgY29uc3QgSGFzaFNldDxTVkdGb250RmFjZUVsZW1lbnQqPiYgc3ZnRm9udEZhY2VFbGVtZW50
cyA9IGRvY3VtZW50LT5zdmdFeHRlbnNpb25zKCktPnN2Z0ZvbnRGYWNlRWxlbWVudHMoKTsKLSAg
ICAgICAgSGFzaFNldDxTVkdGb250RmFjZUVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
c3ZnRm9udEZhY2VFbGVtZW50cy5lbmQoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFNWR0ZvbnRG
YWNlRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN2Z0ZvbnRGYWNlRWxlbWVudHMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZm9udFNlbGVjdG9yKCktPmFkZEZv
bnRGYWNlUnVsZSgoKml0KS0+Zm9udEZhY2VSdWxlKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAg
YXBwZW5kQXV0aG9yU3R5bGVzaGVldHMoMCwgZG9jdW1lbnQtPnN0eWxlU2hlZXRzKCktPnZlY3Rv
cigpKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjphZGRBdXRob3JSdWxlc0FuZENvbGxlY3RV
c2VyUnVsZXNGcm9tU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFs
PiA+KiB1c2VyU2hlZXRzLCBSdWxlU2V0JiB1c2VyU3R5bGUpCi17Ci0gICAgaWYgKCF1c2VyU2hl
ZXRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSB1c2VyU2hlZXRz
LT5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgIGNvbnN0IFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+JiBzaGVldCA9IHVzZXJTaGVl
dHMtPmF0KGkpOwotICAgICAgICBpZiAoc2hlZXQtPmlzVXNlclN0eWxlU2hlZXQoKSkKLSAgICAg
ICAgICAgIHVzZXJTdHlsZS5hZGRSdWxlc0Zyb21TaGVldChzaGVldC5nZXQoKSwgKm1fbWVkaXVt
LCB0aGlzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQoc2hlZXQuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7Ci0gICAgfQotfQotCi1z
dGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8U3R5bGVS
ZXNvbHZlcjo6UnVsZUZlYXR1cmU+JiBydWxlcykKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IHJ1bGVz
LnNpemUoKTsKLSAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIE93
blB0cjxSdWxlU2V0PiBydWxlU2V0ID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZXNb
aV0ucnVsZSwgcnVsZXNbaV0uc2VsZWN0b3IsIHJ1bGVzW2ldLmhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGZhbHNlKTsKLSAgICByZXR1cm4gcnVsZVNldC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQg
U3R5bGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzKCkKLXsKLSAgICBtX2ZlYXR1cmVzLmNsZWFy
KCk7Ci0gICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2luZyBzaWJsaW5nIHNlbGVj
dG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQotICAgIC8vIGluIHRoZSBjdXJyZW50IHNl
dCBvZiBzdHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZvcm1hdGlv
biB0byByZWplY3QKLSAgICAvLyBzaGFyaW5nIGNhbmRpZGF0ZXMuCi0gICAgbV9mZWF0dXJlcy5h
ZGQoZGVmYXVsdFN0eWxlLT5mZWF0dXJlcygpKTsKLSAgICBtX2ZlYXR1cmVzLmFkZChtX2F1dGhv
clN0eWxlLT5mZWF0dXJlcygpKTsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGZvciAo
U2NvcGVkUnVsZVNldE1hcDo6aXRlcmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5iZWdp
bigpOyBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgbV9m
ZWF0dXJlcy5hZGQoaXQtPnNlY29uZC0+ZmVhdHVyZXMoKSk7Ci0jZW5kaWYKLSAgICBpZiAobV91
c2VyU3R5bGUpCi0gICAgICAgIG1fZmVhdHVyZXMuYWRkKG1fdXNlclN0eWxlLT5mZWF0dXJlcygp
KTsKLQotICAgIG1fc2libGluZ1J1bGVTZXQgPSBtYWtlUnVsZVNldChtX2ZlYXR1cmVzLnNpYmxp
bmdSdWxlcyk7Ci0gICAgbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQgPSBtYWtlUnVsZVNldCht
X2ZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOwotfQotCi0jaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKLWNvbnN0IENvbnRhaW5lck5vZGUqIFN0eWxlUmVzb2x2ZXI6OmRldGVybWluZVNj
b3BlKGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQpCi17Ci0gICAgQVNTRVJUKHNoZWV0
KTsKLQotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c3R5bGVTY29wZWRFbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTm9kZSogb3duZXJOb2RlID0gc2hlZXQtPmZp
bmRTdHlsZVNoZWV0T3duZXJOb2RlKCk7Ci0gICAgaWYgKCFvd25lck5vZGUgfHwgIW93bmVyTm9k
ZS0+aXNIVE1MRWxlbWVudCgpIHx8ICFvd25lck5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
dHlsZVRhZykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSFRNTFN0eWxlRWxlbWVudCogc3R5
bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7Ci0g
ICAgaWYgKCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHN0eWxlRWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAg
IGlmICghcGFyZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiAocGFyZW50LT5p
c0VsZW1lbnROb2RlKCkgfHwgcGFyZW50LT5pc1NoYWRvd1Jvb3QoKSkgPyBwYXJlbnQgOiAwOwot
fQotCi1pbmxpbmUgUnVsZVNldCogU3R5bGVSZXNvbHZlcjo6cnVsZVNldEZvclNjb3BlKGNvbnN0
IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjb25zdAotewotICAgIGlmICghc2NvcGUtPmhhc1Njb3Bl
ZEhUTUxTdHlsZUNoaWxkKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIFNjb3BlZFJ1bGVTZXRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuZmluZChzY29wZSk7
Ci0gICAgcmV0dXJuIGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpID8gaXQtPnNlY29u
ZC5nZXQoKSA6IDA7IAotfQotI2VuZGlmCi0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0
aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVTaGVldD4gPiYgc3R5bGVzaGVldHMpCi17Ci0gICAgLy8gVGhpcyBoYW5kbGVzIHNoZWV0cyBh
ZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzdHlsZXNoZWV0IGxpc3Qgb25seS4gSW4gb3RoZXIgY2Fz
ZXMgdGhlIHN0eWxlIHJlc29sdmVyCi0gICAgLy8gbmVlZHMgdG8gYmUgcmVjb25zdHJ1Y3RlZC4g
VG8gaGFuZGxlIGluc2VydGlvbnMgdG9vIHRoZSBydWxlIG9yZGVyIG51bWJlcnMgd291bGQgbmVl
ZCB0byBiZSB1cGRhdGVkLgotICAgIHVuc2lnbmVkIHNpemUgPSBzdHlsZXNoZWV0cy5zaXplKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3ROZXc7IGkgPCBzaXplOyArK2kpIHsKLSAgICAg
ICAgaWYgKCFzdHlsZXNoZWV0c1tpXS0+aXNDU1NTdHlsZVNoZWV0KCkgfHwgc3R5bGVzaGVldHNb
aV0tPmRpc2FibGVkKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQ1NTU3R5bGVT
aGVldCogY3NzU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVzaGVldHNb
aV0uZ2V0KCkpOwotICAgICAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0gY3NzU2hlZXQt
PmludGVybmFsKCk7Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICAgICAgY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGUgPSBkZXRlcm1pbmVTY29wZShzaGVldCk7Ci0gICAgICAgIGlmIChz
Y29wZSkgewotICAgICAgICAgICAgU2NvcGVkUnVsZVNldE1hcDo6QWRkUmVzdWx0IGFkZFJlc3Vs
dCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmFkZChzY29wZSwgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0
aGlzLCBzY29wZSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlmCi0g
ICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0s
IHRoaXMpOwotICAgICAgICBpZiAoIW1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuaXNFbXB0
eSgpKQotICAgICAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09N
V3JhcHBlck1hcCwgY3NzU2hlZXQpOwotICAgIH0KLSAgICBtX2F1dGhvclN0eWxlLT5zaHJpbmtU
b0ZpdCgpOwotICAgIGNvbGxlY3RGZWF0dXJlcygpOwotICAgIAotICAgIGlmIChkb2N1bWVudCgp
LT5yZW5kZXJlcigpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkpCi0gICAgICAg
IGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVj
dG9yKCkpOwotfQotCi0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLXZvaWQgU3R5bGVSZXNvbHZl
cjo6c2V0dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkKLXsKLSAgICAv
LyBUaGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIHNob3VsZG4ndCBiZSB1c2VkIGlmIDxzdHlsZSBz
Y29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCi0gICAgQVNTRVJUKCFtX3Njb3BlZEF1dGhvclN0
eWxlcy5pc0VtcHR5KCkpOwotCi0gICAgbV9zY29wZVN0YWNrLnNocmluaygwKTsKLSAgICBmb3Ig
KDsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSkgewotICAgICAg
ICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvclNjb3BlKHBhcmVudCk7Ci0gICAgICAgIGlm
IChydWxlU2V0KQotICAgICAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChTY29wZVN0YWNrRnJh
bWUocGFyZW50LCBydWxlU2V0KSk7Ci0gICAgfQotICAgIG1fc2NvcGVTdGFjay5yZXZlcnNlKCk7
Ci0gICAgbV9zY29wZVN0YWNrUGFyZW50ID0gcGFyZW50OwotfQotCi12b2lkIFN0eWxlUmVzb2x2
ZXI6OnB1c2hTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGVQYXJlbnQpCi17Ci0gICAgLy8gU2hvcnRjdXQ6IERvbid0IGJvdGhlciB3aXRo
IHRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBh
bnl3aGVyZS4KLSAgICBpZiAobV9zY29wZWRBdXRob3JTdHlsZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIEFTU0VSVCghbV9zY29wZVN0YWNrUGFyZW50KTsKLSAgICAgICAgQVNTRVJUKG1fc2NvcGVT
dGFjay5pc0VtcHR5KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEluIHNvbWUg
d2Fja3kgY2FzZXMgZHVyaW5nIHN0eWxlIHJlc29sdmUgd2UgbWF5IGdldCBpbnZva2VkIGZvciBy
YW5kb20gZWxlbWVudHMuCi0gICAgLy8gUmVjcmVhdGUgdGhlIHdob2xlIHNjb3BpbmcgZWxlbWVu
dCBzdGFjayBpbiBzdWNoIGNhc2VzLgotICAgIGlmICghc2NvcGVTdGFja0lzQ29uc2lzdGVudChz
Y29wZVBhcmVudCkpIHsKLSAgICAgICAgc2V0dXBTY29wZVN0YWNrKHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRoZSBwYXJlbnQgb250
byB0aGUgc3RhY2suCi0gICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3JTY29wZShzY29w
ZSk7Ci0gICAgaWYgKHJ1bGVTZXQpCi0gICAgICAgIG1fc2NvcGVTdGFjay5hcHBlbmQoU2NvcGVT
dGFja0ZyYW1lKHNjb3BlLCBydWxlU2V0KSk7Ci0gICAgbV9zY29wZVN0YWNrUGFyZW50ID0gc2Nv
cGU7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wU2NvcGUoY29uc3QgQ29udGFpbmVyTm9k
ZSogc2NvcGUpCi17Ci0gICAgLy8gT25seSBib3RoZXIgdG8gdXBkYXRlIHRoZSBzY29waW5nIGVs
ZW1lbnQgc3RhY2sgaWYgaXQgaXMgY29uc2lzdGVudC4KLSAgICBpZiAoc2NvcGVTdGFja0lzQ29u
c2lzdGVudChzY29wZSkpIHsKLSAgICAgICAgbV9zY29wZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAg
ICAgICAgbV9zY29wZVN0YWNrUGFyZW50ID0gc2NvcGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKLSAg
ICB9Ci19Ci0jZW5kaWYKLQotdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudChF
bGVtZW50KiBwYXJlbnQpCi17Ci0gICAgY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50c1BhcmVu
dCA9IHBhcmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpOwotCi0gICAgLy8gV2UgYXJlIG5vdCBh
bHdheXMgaW52b2tlZCBjb25zaXN0ZW50bHkuIEZvciBleGFtcGxlLCBzY3JpcHQgZXhlY3V0aW9u
IGNhbiBjYXVzZSB1cyB0byBlbnRlcgotICAgIC8vIHN0eWxlIHJlY2FsYyBpbiB0aGUgbWlkZGxl
IG9mIHRyZWUgYnVpbGRpbmcuIFdlIG1heSBhbHNvIGJlIGludm9rZWQgZnJvbSBzb21ld2hlcmUg
d2l0aGluIHRoZSB0cmVlLgotICAgIC8vIFJlc2V0IHRoZSBzdGFjayBpbiB0aGlzIGNhc2UsIG9y
IGlmIHdlIHNlZSBhIG5ldyByb290IGVsZW1lbnQuCi0gICAgLy8gT3RoZXJ3aXNlIGp1c3QgcHVz
aCB0aGUgbmV3IHBhcmVudC4KLSAgICBpZiAoIXBhcmVudHNQYXJlbnQgfHwgbV9jaGVja2VyLnBh
cmVudFN0YWNrSXNFbXB0eSgpKQotICAgICAgICBtX2NoZWNrZXIuc2V0dXBQYXJlbnRTdGFjayhw
YXJlbnQpOwotICAgIGVsc2UKLSAgICAgICAgbV9jaGVja2VyLnB1c2hQYXJlbnQocGFyZW50KTsK
LQotICAgIC8vIE5vdGU6IFdlIG11c3RuJ3Qgc2tpcCBTaGFkb3dSb290IG5vZGVzIGZvciB0aGUg
c2NvcGUgc3RhY2suCi0gICAgcHVzaFNjb3BlKHBhcmVudCwgcGFyZW50LT5wYXJlbnRPckhvc3RO
b2RlKCkpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudEVsZW1lbnQoRWxlbWVu
dCogcGFyZW50KQotewotICAgIC8vIE5vdGUgdGhhdCB3ZSBtYXkgZ2V0IGludm9rZWQgZm9yIHNv
bWUgcmFuZG9tIGVsZW1lbnRzIGluIHNvbWUgd2Fja3kgY2FzZXMgZHVyaW5nIHN0eWxlIHJlc29s
dmUuCi0gICAgLy8gUGF1c2UgbWFpbnRhaW5pbmcgdGhlIHN0YWNrIGluIHRoaXMgY2FzZS4KLSAg
ICBpZiAobV9jaGVja2VyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHBhcmVudCkpCi0gICAgICAg
IG1fY2hlY2tlci5wb3BQYXJlbnQoKTsKLSAgICBwb3BTY29wZShwYXJlbnQpOwotfQotCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqIHNo
YWRvd1Jvb3QpCi17Ci0gICAgQVNTRVJUKHNoYWRvd1Jvb3QtPmhvc3QoKSk7Ci0gICAgcHVzaFNj
b3BlKHNoYWRvd1Jvb3QsIHNoYWRvd1Jvb3QtPmhvc3QoKSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNv
bHZlcjo6cG9wUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQot
ewotICAgIEFTU0VSVChzaGFkb3dSb290LT5ob3N0KCkpOwotICAgIHBvcFNjb3BlKHNoYWRvd1Jv
b3QpOwotfQotCi0vLyBUaGlzIGlzIGEgc2ltcGxpZmllZCBzdHlsZSBzZXR0aW5nIGZ1bmN0aW9u
IGZvciBrZXlmcmFtZSBzdHlsZXMKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkS2V5ZnJhbWVTdHls
ZShQYXNzUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4gcnVsZSkKLXsKLSAgICBBdG9taWNTdHJp
bmcgcyhydWxlLT5uYW1lKCkpOwotICAgIG1fa2V5ZnJhbWVzUnVsZU1hcC5zZXQocy5pbXBsKCks
IHJ1bGUpOwotfQotCi1TdHlsZVJlc29sdmVyOjp+U3R5bGVSZXNvbHZlcigpCi17Ci0gICAgbV9m
b250U2VsZWN0b3ItPmNsZWFyRG9jdW1lbnQoKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpz
d2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKQotewotICAgIC8vIExvb2sgZm9yIGNhY2hlIGVu
dHJpZXMgY29udGFpbmluZyBhIHN0eWxlIGRlY2xhcmF0aW9uIHdpdGggYSBzaW5nbGUgcmVmIGFu
ZCByZW1vdmUgdGhlbS4KLSAgICAvLyBUaGlzIG1heSBoYXBwZW4gd2hlbiBhbiBlbGVtZW50IGF0
dHJpYnV0ZSBtdXRhdGlvbiBjYXVzZXMgaXQgdG8gc3dhcCBvdXQgaXRzIEF0dHJpYnV0ZTo6ZGVj
bCgpCi0gICAgLy8gZm9yIGFub3RoZXIgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24sIHBv
dGVudGlhbGx5IGxlYXZpbmcgdGhpcyBjYWNoZSB3aXRoIHRoZSBsYXN0IHJlZi4KLSAgICBWZWN0
b3I8dW5zaWduZWQsIDE2PiB0b1JlbW92ZTsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjpp
dGVyYXRvciBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5iZWdpbigpOwotICAgIE1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGVuZCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZS5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFZlY3RvcjxN
YXRjaGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0aWVzID0gaXQtPnNlY29uZC5tYXRjaGVk
UHJvcGVydGllczsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaGVkUHJvcGVy
dGllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzW2ld
LnByb3BlcnRpZXMtPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBw
ZW5kKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXpl
KCk7ICsraSkKLSAgICAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLnJlbW92ZSh0b1JlbW92
ZVtpXSk7Ci19Ci0KLVN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjpGZWF0dXJlcygpCi0gICAgOiB1
c2VzRmlyc3RMaW5lUnVsZXMoZmFsc2UpCi0gICAgLCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyhmYWxz
ZSkKLSAgICAsIHVzZXNMaW5rUnVsZXMoZmFsc2UpCi17Ci19Ci0KLVN0eWxlUmVzb2x2ZXI6OkZl
YXR1cmVzOjp+RmVhdHVyZXMoKQotewotfQotICAgIAotdm9pZCBTdHlsZVJlc29sdmVyOjpGZWF0
dXJlczo6YWRkKGNvbnN0IFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJiBvdGhlcikKLXsKLSAgICBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgZW5kID0gb3RoZXIuaWRzSW5SdWxl
cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBp
dCA9IG90aGVyLmlkc0luUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBp
ZHNJblJ1bGVzLmFkZCgqaXQpOwotICAgIGVuZCA9IG90aGVyLmF0dHJzSW5SdWxlcy5lbmQoKTsK
LSAgICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdCA9IG90aGVy
LmF0dHJzSW5SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGF0dHJzSW5S
dWxlcy5hZGQoKml0KTsKLSAgICBzaWJsaW5nUnVsZXMuYXBwZW5kKG90aGVyLnNpYmxpbmdSdWxl
cyk7Ci0gICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBlbmQob3RoZXIudW5jb21tb25BdHRy
aWJ1dGVSdWxlcyk7Ci0gICAgdXNlc0ZpcnN0TGluZVJ1bGVzID0gdXNlc0ZpcnN0TGluZVJ1bGVz
IHx8IG90aGVyLnVzZXNGaXJzdExpbmVSdWxlczsKLSAgICB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9
IHVzZXNCZWZvcmVBZnRlclJ1bGVzIHx8IG90aGVyLnVzZXNCZWZvcmVBZnRlclJ1bGVzOwotICAg
IHVzZXNMaW5rUnVsZXMgPSB1c2VzTGlua1J1bGVzIHx8IG90aGVyLnVzZXNMaW5rUnVsZXM7Ci19
Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6OmNsZWFyKCkKLXsKLSAgICBpZHNJblJ1
bGVzLmNsZWFyKCk7Ci0gICAgYXR0cnNJblJ1bGVzLmNsZWFyKCk7Ci0gICAgc2libGluZ1J1bGVz
LmNsZWFyKCk7Ci0gICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlcy5jbGVhcigpOwotICAgIHVzZXNG
aXJzdExpbmVSdWxlcyA9IGZhbHNlOwotICAgIHVzZXNCZWZvcmVBZnRlclJ1bGVzID0gZmFsc2U7
Ci0gICAgdXNlc0xpbmtSdWxlcyA9IGZhbHNlOwotfQotCi1zdGF0aWMgU3R5bGVTaGVldEludGVy
bmFsKiBwYXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCi17Ci0gICAgU3R5bGVTaGVldElu
dGVybmFsKiBzaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKCkubGVha1JlZigpOyAv
LyBsZWFrIHRoZSBzaGVldCBvbiBwdXJwb3NlCi0gICAgc2hlZXQtPnBhcnNlU3RyaW5nKHN0cik7
Ci0gICAgcmV0dXJuIHNoZWV0OwotfQotCi1zdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBwYXJz
ZVVBU2hlZXQoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc2l6ZSkKLXsKLSAgICBy
ZXR1cm4gcGFyc2VVQVNoZWV0KFN0cmluZyhjaGFyYWN0ZXJzLCBzaXplKSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGxvYWRGdWxsRGVmYXVsdFN0eWxlKCkKLXsKLSAgICBpZiAoc2ltcGxlRGVmYXVsdFN0
eWxlU2hlZXQpIHsKLSAgICAgICAgQVNTRVJUKGRlZmF1bHRTdHlsZSk7Ci0gICAgICAgIEFTU0VS
VChkZWZhdWx0UHJpbnRTdHlsZSA9PSBkZWZhdWx0U3R5bGUpOwotICAgICAgICBkZWxldGUgZGVm
YXVsdFN0eWxlOwotICAgICAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldC0+ZGVyZWYoKTsKLSAg
ICAgICAgZGVmYXVsdFN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCkubGVha1B0cigpOwotICAgICAg
ICBkZWZhdWx0UHJpbnRTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKLSAgICAg
ICAgc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFT
U0VSVCghZGVmYXVsdFN0eWxlKTsKLSAgICAgICAgZGVmYXVsdFN0eWxlID0gUnVsZVNldDo6Y3Jl
YXRlKCkubGVha1B0cigpOwotICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZSA9IFJ1bGVTZXQ6OmNy
ZWF0ZSgpLmxlYWtQdHIoKTsKLSAgICAgICAgZGVmYXVsdFF1aXJrc1N0eWxlID0gUnVsZVNldDo6
Y3JlYXRlKCkubGVha1B0cigpOwotICAgIH0KLQotICAgIC8vIFN0cmljdC1tb2RlIHJ1bGVzLgot
ICAgIFN0cmluZyBkZWZhdWx0UnVsZXMgPSBTdHJpbmcoaHRtbFVzZXJBZ2VudFN0eWxlU2hlZXQs
IHNpemVvZihodG1sVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRU
aGVtZSgpLT5leHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7Ci0gICAgZGVmYXVsdFN0eWxlU2hlZXQg
PSBwYXJzZVVBU2hlZXQoZGVmYXVsdFJ1bGVzKTsKLSAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVz
RnJvbVNoZWV0KGRlZmF1bHRTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgIGRlZmF1bHRQ
cmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChkZWZhdWx0U3R5bGVTaGVldCwgcHJpbnRFdmFs
KCkpOwotCi0gICAgLy8gUXVpcmtzLW1vZGUgcnVsZXMuCi0gICAgU3RyaW5nIHF1aXJrc1J1bGVz
ID0gU3RyaW5nKHF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihxdWlya3NVc2VyQWdl
bnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJhUXVpcmtz
U3R5bGVTaGVldCgpOwotICAgIHF1aXJrc1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQocXVpcmtz
UnVsZXMpOwotICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocXVpcmtz
U3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZFNpbXBsZURl
ZmF1bHRTdHlsZSgpCi17Ci0gICAgQVNTRVJUKCFkZWZhdWx0U3R5bGUpOwotICAgIEFTU0VSVCgh
c2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpOwotCi0gICAgZGVmYXVsdFN0eWxlID0gUnVsZVNldDo6
Y3JlYXRlKCkubGVha1B0cigpOwotICAgIC8vIFRoZXJlIGFyZSBubyBtZWRpYS1zcGVjaWZpYyBy
dWxlcyBpbiB0aGUgc2ltcGxlIGRlZmF1bHQgc3R5bGUuCi0gICAgZGVmYXVsdFByaW50U3R5bGUg
PSBkZWZhdWx0U3R5bGU7Ci0gICAgZGVmYXVsdFF1aXJrc1N0eWxlID0gUnVsZVNldDo6Y3JlYXRl
KCkubGVha1B0cigpOwotCi0gICAgc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQgPSBwYXJzZVVBU2hl
ZXQoc2ltcGxlVXNlckFnZW50U3R5bGVTaGVldCwgc3RybGVuKHNpbXBsZVVzZXJBZ2VudFN0eWxl
U2hlZXQpKTsKLSAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNpbXBsZURlZmF1
bHRTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotCi0gICAgLy8gTm8gbmVlZCB0byBpbml0aWFs
aXplIHF1aXJrcyBzaGVldCB5ZXQgYXMgdGhlcmUgYXJlIG5vIHF1aXJrIHJ1bGVzIGZvciBlbGVt
ZW50cyBhbGxvd2VkIGluIHNpbXBsZSBkZWZhdWx0IHN0eWxlLgotfQotCi1zdGF0aWMgdm9pZCBs
b2FkVmlld1NvdXJjZVN0eWxlKCkKLXsKLSAgICBBU1NFUlQoIWRlZmF1bHRWaWV3U291cmNlU3R5
bGUpOwotICAgIGRlZmF1bHRWaWV3U291cmNlU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFr
UHRyKCk7Ci0gICAgZGVmYXVsdFZpZXdTb3VyY2VTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFy
c2VVQVNoZWV0KHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihzb3VyY2VVc2VyQWdl
bnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuc3VyZURl
ZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAo
c2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQgJiYgIWVsZW1lbnRDYW5Vc2VTaW1wbGVEZWZhdWx0U3R5
bGUoZWxlbWVudCkpCi0gICAgICAgIGxvYWRGdWxsRGVmYXVsdFN0eWxlKCk7Ci0KLSNpZiBFTkFC
TEUoU1ZHKQotICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiAhc3ZnU3R5bGVTaGVl
dCkgewotICAgICAgICAvLyBTVkcgcnVsZXMuCi0gICAgICAgIHN2Z1N0eWxlU2hlZXQgPSBwYXJz
ZVVBU2hlZXQoc3ZnVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHN2Z1VzZXJBZ2VudFN0eWxl
U2hlZXQpKTsKLSAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdmdTdHls
ZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQoc3ZnU3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOwotICAgIH0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKE1BVEhNTCkKLSAgICBpZiAoZWxlbWVudC0+aXNNYXRoTUxFbGVtZW50KCkg
JiYgIW1hdGhNTFN0eWxlU2hlZXQpIHsKLSAgICAgICAgLy8gTWF0aE1MIHJ1bGVzLgotICAgICAg
ICBtYXRoTUxTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KG1hdGhtbFVzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZihtYXRobWxVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci0gICAgICAgIGRlZmF1bHRT
dHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWF0aE1MU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsK
LSAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1hdGhNTFN0eWxl
U2hlZXQsIHByaW50RXZhbCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShWSURFTykK
LSAgICBpZiAoIW1lZGlhQ29udHJvbHNTdHlsZVNoZWV0ICYmIChlbGVtZW50LT5oYXNUYWdOYW1l
KHZpZGVvVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkpIHsKLSAgICAgICAg
U3RyaW5nIG1lZGlhUnVsZXMgPSBTdHJpbmcobWVkaWFDb250cm9sc1VzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhl
bWU6OnRoZW1lRm9yUGFnZShlbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCkpLT5leHRyYU1lZGlh
Q29udHJvbHNTdHlsZVNoZWV0KCk7Ci0gICAgICAgIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0ID0g
cGFyc2VVQVNoZWV0KG1lZGlhUnVsZXMpOwotICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVz
RnJvbVNoZWV0KG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgICAg
ICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWVkaWFDb250cm9sc1N0eWxl
U2hlZXQsIHByaW50RXZhbCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKLSAgICBpZiAoIWZ1bGxzY3JlZW5TdHlsZVNoZWV0ICYmIGVsZW1lbnQtPmRvY3Vt
ZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpKSB7Ci0gICAgICAgIFN0cmluZyBmdWxsc2NyZWVu
UnVsZXMgPSBTdHJpbmcoZnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihmdWxs
c2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LT5leHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCk7Ci0gICAgICAgIGZ1bGxzY3JlZW5TdHlsZVNo
ZWV0ID0gcGFyc2VVQVNoZWV0KGZ1bGxzY3JlZW5SdWxlcyk7Ci0gICAgICAgIGRlZmF1bHRTdHls
ZS0+YWRkUnVsZXNGcm9tU2hlZXQoZnVsbHNjcmVlblN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7
Ci0gICAgICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZnVsbHNjcmVl
blN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBBU1NFUlQo
ZGVmYXVsdFN0eWxlLT5mZWF0dXJlcygpLmlkc0luUnVsZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NF
UlQobWF0aE1MU3R5bGVTaGVldCB8fCBkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkuc2libGluZ1J1
bGVzLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkTWF0Y2hlZFByb3Bl
cnRpZXMoTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0
aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIGJvb2wgaW5SZWdp
b25SdWxlKQotewotICAgIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmdyb3cobWF0Y2hS
ZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpICsgMSk7Ci0gICAgTWF0Y2hlZFByb3BlcnRp
ZXMmIG5ld1Byb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5sYXN0KCk7
Ci0gICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKLSAgICBuZXdQcm9w
ZXJ0aWVzLmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hUeXBlOwotICAgIG5ld1Byb3BlcnRpZXMu
aXNJblJlZ2lvblJ1bGUgPSBpblJlZ2lvblJ1bGU7Ci0gICAgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1
bGVzLmFwcGVuZChydWxlKTsKLX0KLQotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkRWxl
bWVudFN0eWxlUHJvcGVydGllcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBTdHlsZVByb3BlcnR5U2V0
KiBwcm9wZXJ0eVNldCwgYm9vbCBpc0NhY2hlYWJsZSkKLXsKLSAgICBpZiAoIXByb3BlcnR5U2V0
KQotICAgICAgICByZXR1cm47Ci0gICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7Ci0gICAgaWYgKHJlc3VsdC5yYW5nZXMuZmly
c3RBdXRob3JSdWxlID09IC0xKQotICAgICAgICByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVs
ZSA9IHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGU7Ci0gICAgYWRkTWF0Y2hlZFByb3BlcnRp
ZXMocmVzdWx0LCBwcm9wZXJ0eVNldCk7Ci0gICAgaWYgKCFpc0NhY2hlYWJsZSkKLSAgICAgICAg
cmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29s
bGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJiBvcHRpb25zKQotewotICAgIEFT
U0VSVChydWxlcyk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0KLSAgICAvLyBXZSBuZWVkIHRv
IGNvbGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxz
ZSBpbnRvIGEgYnVmZmVyIGFuZAotICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgotICAgIGlm
IChtX2VsZW1lbnQtPmhhc0lEKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlz
dChydWxlcy0+aWRSdWxlcyhtX2VsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgp
KSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwotICAgIGlmIChtX2Vs
ZW1lbnQtPmhhc0NsYXNzKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7Ci0g
ICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMgPSBtX3N0eWxlZEVsZW1l
bnQtPmNsYXNzTmFtZXMoKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBjbGFzc05hbWVzLnNpemUo
KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPmNsYXNzUnVsZXMoY2xhc3NOYW1l
c1tpXS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7Ci0g
ICAgfQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHNldWRvSWQgPSBtX2VsZW1lbnQtPnNoYWRv
d1BzZXVkb0lkKCk7Ci0gICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNT
RVJUKG1fc3R5bGVkRWxlbWVudCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlz
dChydWxlcy0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIGZpcnN0
UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKLSAgICB9Ci0gICAgaWYgKG1fZWxl
bWVudC0+aXNMaW5rKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxl
cy0+bGlua1BzZXVkb0NsYXNzUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IG9wdGlvbnMpOwotICAgIGlmIChtX2NoZWNrZXIubWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MobV9l
bGVtZW50KSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5mb2N1
c1BzZXVkb0NsYXNzUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlv
bnMpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+dGFnUnVsZXMobV9l
bGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRl
eCwgb3B0aW9ucyk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT51bml2
ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7Ci19
Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVs
ZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29u
c3QgTWF0Y2hPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmICghbV9yZWdpb25Gb3JTdHlsaW5n
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPm1fcmVnaW9u
U2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yID0gcnVs
ZXMtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3I7Ci0gICAgICAg
IGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgewotICAgICAgICAgICAgUnVsZVNl
dCogcmVnaW9uUnVsZXMgPSBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChp
KS5ydWxlU2V0LmdldCgpOwotICAgICAgICAgICAgQVNTRVJUKHJlZ2lvblJ1bGVzKTsKLSAgICAg
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJlZ2lvblJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwg
bGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgU3R5
bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1
bHQpCi17Ci0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc29ydE1hdGNoZWRSdWxlcygpOwotCi0gICAgaWYgKG1fY2hlY2tlci5pc0NvbGxl
Y3RpbmdSdWxlc09ubHkoKSkgewotICAgICAgICBpZiAoIW1fcnVsZUxpc3QpCi0gICAgICAgICAg
ICBtX3J1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICBtX3J1bGVMaXN0LT5ydWxlcygpLmFwcGVuZChtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgp
LT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qg
b2YgZGVjbGFyYXRpb25zLgotICAgIC8vIEZJWE1FOiBUaGlzIHN1Y2tzLCB0aGUgaW5zcGVjdG9y
IHNob3VsZCBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIHZpc2l0ZWQgc3R5bGUgaXRzZWxmLgotICAg
IGJvb2wgc3dhcFZpc2l0ZWRVbnZpc2l0ZWQgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZv
cmNlUHNldWRvU3RhdGUobV9lbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIGlmIChtX3N0eWxlICYmIG1fbWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29t
bW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEFmZmVjdGVk
QnlVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9ycygpOwotICAgICAgICB1bnNpZ25lZCBsaW5rTWF0
Y2hUeXBlID0gbV9tYXRjaGVkUnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUoKTsKLSAgICAgICAgaWYg
KHN3YXBWaXNpdGVkVW52aXNpdGVkICYmIGxpbmtNYXRjaFR5cGUgJiYgbGlua01hdGNoVHlwZSAh
PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsKQotICAgICAgICAgICAgbGlua01hdGNoVHlwZSA9
IChsaW5rTWF0Y2hUeXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKSA/IFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hMaW5rIDogU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7Ci0g
ICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgbV9tYXRjaGVkUnVsZXNbaV0tPnJ1
bGUoKS0+cHJvcGVydGllcygpLCBtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLCBsaW5rTWF0Y2hU
eXBlLCBtX21hdGNoZWRSdWxlc1tpXS0+aXNJblJlZ2lvblJ1bGUoKSk7Ci0gICAgfQotfQotCi12
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKLXsKLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVE
KQotICAgIGlmIChtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIE1hdGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzKTsKLQotICAg
IC8vIE1hdGNoIHNjb3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVkIGVs
ZW1lbnQgc3RhY2sgKHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCi0gICAgY29u
c3QgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV9lbGVtZW50LT5wYXJlbnRPckhvc3ROb2RlKCk7
Ci0gICAgaWYgKCFzY29wZVN0YWNrSXNDb25zaXN0ZW50KHBhcmVudCkpCi0gICAgICAgIHNldHVw
U2NvcGVTdGFjayhwYXJlbnQpOwotICAgIGZvciAoc2l6ZV90IGkgPSBtX3Njb3BlU3RhY2suc2l6
ZSgpOyBpOyAtLWkpIHsKLSAgICAgICAgY29uc3QgU2NvcGVTdGFja0ZyYW1lJiBmcmFtZSA9IG1f
c2NvcGVTdGFja1tpIC0gMV07Ci0gICAgICAgIG9wdGlvbnMuc2NvcGUgPSBmcmFtZS5tX3Njb3Bl
OwotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhmcmFtZS5tX3J1bGVTZXQsIHJlc3VsdC5y
YW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRp
b25zKTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oZnJhbWUubV9ydWxl
U2V0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0
aG9yUnVsZSwgb3B0aW9ucyk7Ci0gICAgfQotICAgIC8vIEFsc28gaW5jbHVkZSB0aGUgY3VycmVu
dCBlbGVtZW50LgotICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yU2NvcGUobV9lbGVt
ZW50KTsKLSAgICBpZiAocnVsZVNldCkgewotICAgICAgICBvcHRpb25zLnNjb3BlID0gbV9lbGVt
ZW50OwotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhydWxlU2V0LCByZXN1bHQucmFuZ2Vz
LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7
Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHJ1bGVTZXQsIHJlc3VsdC5y
YW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRp
b25zKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwotICAgIFVOVVNF
RF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpCi17Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLSAgICByZXN1bHQucmFu
Z2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7
Ci0KLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWF0Y2gg
Z2xvYmFsIGF1dGhvciBydWxlcy4KLSAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1w
dHlSdWxlcyk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwg
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIG9wdGlvbnMpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1fYXV0aG9y
U3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2Vz
Lmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKLQotICAgIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMo
cmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0KLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVk
UnVsZXMocmVzdWx0KTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhN
YXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQotewotICAgIGlmICgh
bV91c2VyU3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX21hdGNoZWRSdWxlcy5j
bGVhcigpOwotCi0gICAgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUgPSByZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtX3VzZXJT
dHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCByZXN1bHQucmFuZ2VzLmxh
c3RVc2VyUnVsZSwgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yUmVnaW9uKG1fdXNlclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUs
IHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0KLSAgICBz
b3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKLX0KLQotdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgUnVsZVNldCogcnVsZXMpCi17
Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLSAgICAKLSAgICByZXN1bHQucmFuZ2VzLmxh
c3RVQVJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKLSAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhydWxlcywgcmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgcmVzdWx0
LnJhbmdlcy5sYXN0VUFSdWxlLCBmYWxzZSk7Ci0KLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVk
UnVsZXMocmVzdWx0KTsKLX0KLQotY2xhc3MgTWF0Y2hpbmdVQVJ1bGVzU2NvcGUgewotcHVibGlj
OgotICAgIE1hdGNoaW5nVUFSdWxlc1Njb3BlKCk7Ci0gICAgfk1hdGNoaW5nVUFSdWxlc1Njb3Bl
KCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc01hdGNoaW5nVUFSdWxlcygpOwotCi1wcml2YXRlOgot
ICAgIHN0YXRpYyBib29sIG1fbWF0Y2hpbmdVQVJ1bGVzOwotfTsKLQotTWF0Y2hpbmdVQVJ1bGVz
U2NvcGU6Ok1hdGNoaW5nVUFSdWxlc1Njb3BlKCkKLXsKLSAgICBBU1NFUlQoIW1fbWF0Y2hpbmdV
QVJ1bGVzKTsKLSAgICBtX21hdGNoaW5nVUFSdWxlcyA9IHRydWU7Ci19Ci0KLU1hdGNoaW5nVUFS
dWxlc1Njb3BlOjp+TWF0Y2hpbmdVQVJ1bGVzU2NvcGUoKQotewotICAgIG1fbWF0Y2hpbmdVQVJ1
bGVzID0gZmFsc2U7Ci19Ci0KLWlubGluZSBib29sIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01h
dGNoaW5nVUFSdWxlcygpCi17Ci0gICAgcmV0dXJuIG1fbWF0Y2hpbmdVQVJ1bGVzOwotfQotCi1i
b29sIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwotCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUlu
ZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKCFydWxlcykKLSAg
ICAgICAgcmV0dXJuOwotICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgbWF5IGVuZCB1cCBsb29raW5n
IHVwIHN0eWxlIGZvciByYW5kb20gZWxlbWVudHMgaW4gdGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2
ZSB0cmVlIHJlc29sdmUuCi0gICAgLy8gQW5jZXN0b3IgaWRlbnRpZmllciBmaWx0ZXIgd29uJ3Qg
YmUgdXAtdG8tZGF0ZSBpbiB0aGF0IGNhc2UgYW5kIHdlIGNhbid0IHVzZSB0aGUgZmFzdCBwYXRo
LgotICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29u
c2lzdGVudChtX3BhcmVudE5vZGUpOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVzLT5zaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBj
b25zdCBSdWxlRGF0YSYgcnVsZURhdGEgPSBydWxlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChjYW5V
c2VGYXN0UmVqZWN0ICYmIG1fY2hlY2tlci5mYXN0UmVqZWN0U2VsZWN0b3I8UnVsZURhdGE6Om1h
eGltdW1JZGVudGlmaWVyQ291bnQ+KHJ1bGVEYXRhLmRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZp
ZXJIYXNoZXMoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBTdHlsZVJ1bGUq
IHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGUo
ZG9jdW1lbnQoKSwgcnVsZSk7Ci0jaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICAgICAgaWYg
KGNoZWNrU2VsZWN0b3IocnVsZURhdGEsIG9wdGlvbnMuc2NvcGUpKSB7Ci0jZWxzZQotICAgICAg
ICBpZiAoY2hlY2tTZWxlY3RvcihydWxlRGF0YSkpIHsKLSNlbmRpZgotICAgICAgICAgICAgLy8g
Q2hlY2sgd2hldGhlciB0aGUgcnVsZSBpcyBhcHBsaWNhYmxlIGluIHRoZSBjdXJyZW50IHRyZWUg
c2NvcGUuIENyaXRlcmlhIGZvciB0aGlzOgotICAgICAgICAgICAgLy8gYSkgaXQncyBhIFVBIHJ1
bGUKLSAgICAgICAgICAgIC8vIGIpIHRoZSB0cmVlIHNjb3BlIGFsbG93cyBhdXRob3IgcnVsZXMK
LSAgICAgICAgICAgIC8vIGMpIHRoZSBydWxlcyBjb21lcyBmcm9tIGEgc2NvcGVkIHN0eWxlIHNo
ZWV0IHdpdGhpbiB0aGUgc2FtZSB0cmVlIHNjb3BlCi0gICAgICAgICAgICAvLyBkKSB0aGUgcnVs
ZSBjb250YWlucyBzaGFkb3ctSUQgcHNldWRvIGVsZW1lbnRzCi0gICAgICAgICAgICBUcmVlU2Nv
cGUqIHRyZWVTY29wZSA9IG1fZWxlbWVudC0+dHJlZVNjb3BlKCk7Ci0gICAgICAgICAgICBpZiAo
IU1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCi0gICAgICAgICAgICAg
ICAgJiYgIXRyZWVTY29wZS0+YXBwbHlBdXRob3JTaGVldHMoKQotI2lmIEVOQUJMRShTVFlMRV9T
Q09QRUQpCi0gICAgICAgICAgICAgICAgJiYgKCFvcHRpb25zLnNjb3BlIHx8IG9wdGlvbnMuc2Nv
cGUtPnRyZWVTY29wZSgpICE9IHRyZWVTY29wZSkKLSNlbmRpZgotICAgICAgICAgICAgICAgICYm
ICFtX2NoZWNrZXIuaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCkpIHsKLQotICAgICAgICAgICAg
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2Up
OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ly8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0
IGluIHRoZSBub24tZGVidWcgbW9kZS4KLSAgICAgICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIHBy
b3BlcnRpZXMgPSBydWxlLT5wcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICBpZiAoIXByb3BlcnRp
ZXMgfHwgKHByb3BlcnRpZXMtPmlzRW1wdHkoKSAmJiAhb3B0aW9ucy5pbmNsdWRlRW1wdHlSdWxl
cykpIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNo
UnVsZShjb29raWUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBFeHBvc2luZyB0aGUgbm9uLXN0YW5kYXJkIGdl
dE1hdGNoZWRDU1NSdWxlcyBBUEkgdG8gd2ViIGlzIHRoZSBvbmx5IHJlYXNvbiB0aGlzIGlzIG5l
ZWRlZC4KLSAgICAgICAgICAgIGlmIChtX3NhbWVPcmlnaW5Pbmx5ICYmICFydWxlRGF0YS5oYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIG1hdGNo
aW5nIG5vcm1hbCBydWxlcywgc2V0IGEgcHNldWRvIGJpdCBpZgotICAgICAgICAgICAgLy8gd2Ug
cmVhbGx5IGp1c3QgbWF0Y2hlZCBhIHBzZXVkby1lbGVtZW50LgotICAgICAgICAgICAgaWYgKG1f
ZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIucHNldWRvU3R5bGUoKSA9PSBO
T1BTRVVETykgewotICAgICAgICAgICAgICAgIGlmIChtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVs
ZXNPbmx5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobV9keW5hbWljUHNl
dWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCi0gICAgICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldEhhc1BzZXVkb1N0eWxlKG1fZHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBvdXIgZmlyc3QvbGFzdCBydWxlIGluZGlj
ZXMgaW4gdGhlIG1hdGNoZWQgcnVsZXMgYXJyYXkuCi0gICAgICAgICAgICAgICAgKytsYXN0UnVs
ZUluZGV4OwotICAgICAgICAgICAgICAgIGlmIChmaXJzdFJ1bGVJbmRleCA9PSAtMSkKLSAgICAg
ICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXggPSBsYXN0UnVsZUluZGV4OwotCi0gICAgICAg
ICAgICAgICAgLy8gQWRkIHRoaXMgcnVsZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgot
ICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRSdWxlKCZydWxlRGF0YSk7Ci0gICAgICAgICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCB0cnVlKTsK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNl
KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUnVsZXMoY29uc3QgUnVs
ZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0YSogcjIpCi17Ci0gICAgdW5zaWduZWQgc3BlY2lmaWNp
dHkxID0gcjEtPnNwZWNpZmljaXR5KCk7Ci0gICAgdW5zaWduZWQgc3BlY2lmaWNpdHkyID0gcjIt
PnNwZWNpZmljaXR5KCk7Ci0gICAgcmV0dXJuIChzcGVjaWZpY2l0eTEgPT0gc3BlY2lmaWNpdHky
KSA/IHIxLT5wb3NpdGlvbigpIDwgcjItPnBvc2l0aW9uKCkgOiBzcGVjaWZpY2l0eTEgPCBzcGVj
aWZpY2l0eTI7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcygpCi17
Ci0gICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVu
ZCgpLCBjb21wYXJlUnVsZXMpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKLXsKLSAgICBtYXRjaFVBUnVsZXMocmVzdWx0KTsKLQot
ICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgotICAgIGlmIChtX21hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgbWF0Y2hVc2VyUnVsZXMocmVzdWx0LCBmYWxzZSk7
Ci0gICAgICAgIAotICAgIC8vIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmluZyBmaXJz
dCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMgbWFwcGVkIGZyb20gSFRNTC4KLSAgICBp
ZiAobV9zdHlsZWRFbGVtZW50KSB7Ci0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMo
cmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkpOwotCi0gICAgICAgIC8v
IE5vdyB3ZSBjaGVjayBhZGRpdGlvbmFsIG1hcHBlZCBkZWNsYXJhdGlvbnMuCi0gICAgICAgIC8v
IFRhYmxlcyBhbmQgdGFibGUgY2VsbHMgc2hhcmUgYW4gYWRkaXRpb25hbCBtYXBwZWQgcnVsZSB0
aGF0IG11c3QgYmUgYXBwbGllZAotICAgICAgICAvLyBhZnRlciBhbGwgYXR0cmlidXRlcywgc2lu
Y2UgdGhlaXIgbWFwcGVkIHN0eWxlIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZiBtdWx0aXBsZSBh
dHRyaWJ1dGVzLgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9z
dHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUoKSk7Ci0KLSAgICAgICAgaWYg
KG1fc3R5bGVkRWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBib29sIGlz
QXV0bzsKLSAgICAgICAgICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRvSFRNTEVs
ZW1lbnQobV9zdHlsZWRFbGVtZW50KS0+ZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1
dGUoaXNBdXRvKTsKLSAgICAgICAgICAgIGlmIChpc0F1dG8pCi0gICAgICAgICAgICAgICAgYWRk
TWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCB0ZXh0RGlyZWN0aW9uID09IExUUiA/IGxlZnRUb1Jp
Z2h0RGVjbGFyYXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMgbmV4
dC4KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgIG1hdGNoQXV0
aG9yUnVsZXMocmVzdWx0LCBmYWxzZSk7Ci0KLSAgICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBz
dHlsZSBhdHRyaWJ1dGUuCi0gICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1f
c3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpIHsKLSAgICAg
ICAgLy8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJsZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIENT
U09NIHdyYXBwZXIuCi0gICAgICAgIC8vIEZJWE1FOiBNZWRpYSBjb250cm9sIHNoYWRvdyB0cmVl
cyBzZWVtIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBjYWNoaW5nLgotICAgICAgICBib29sIGlzSW5s
aW5lU3R5bGVDYWNoZWFibGUgPSAhbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLT5pc011
dGFibGUoKSAmJiAhbV9zdHlsZWRFbGVtZW50LT5pc0luU2hhZG93VHJlZSgpOwotICAgICAgICAv
LyBGSVhNRTogQ29uc3RpZnkuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVz
dWx0LCBjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPihtX3N0eWxlZEVsZW1lbnQtPmlubGlu
ZVN0eWxlKCkpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUo
U1ZHKQotICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlkZSBzdHlsZS4KLSAg
ICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50ICYmIG1f
c3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMocmVzdWx0LCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obV9zdHlsZWRFbGVtZW50
KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICov
KTsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudChF
bGVtZW50KiBlKQotewotICAgIGlmIChtX2VsZW1lbnQgIT0gZSkgewotICAgICAgICBtX2VsZW1l
bnQgPSBlOwotICAgICAgICBtX3N0eWxlZEVsZW1lbnQgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50
LT5pc1N0eWxlZEVsZW1lbnQoKSA/IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1l
bnQpIDogMDsKLSAgICAgICAgbV9lbGVtZW50TGlua1N0YXRlID0gbV9jaGVja2VyLmRldGVybWlu
ZUxpbmtTdGF0ZShtX2VsZW1lbnQpOwotICAgICAgICBpZiAoZSAmJiBlID09IGUtPmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRE
aXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7Ci0gICAgICAgICAgICBlLT5kb2N1
bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEZvclN0eWxl
UmVzb2x2ZShFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFBzZXVkb0lkIHBz
ZXVkb0lEKQotewotICAgIG1fY2hlY2tlci5zZXRQc2V1ZG9TdHlsZShwc2V1ZG9JRCk7Ci0KLSAg
ICBtX3BhcmVudE5vZGUgPSBlID8gZS0+cGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCkg
OiAwOwotCi0gICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICBtX3BhcmVudFN0eWxlID0gcGFy
ZW50U3R5bGU7Ci0gICAgZWxzZQotICAgICAgICBtX3BhcmVudFN0eWxlID0gbV9wYXJlbnROb2Rl
ID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKLQotICAgIE5vZGUqIGRvY0VsZW1l
bnQgPSBlID8gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiAwOwotICAgIFJlbmRl
clN0eWxlKiBkb2NTdHlsZSA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5yZW5kZXJTdHlsZSgpOwot
ICAgIG1fcm9vdEVsZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8g
ZG9jRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOwotCi0gICAgbV9zdHlsZSA9IDA7
Ci0KLSAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKLQotICAgIG1fcnVsZUxp
c3QgPSAwOwotCi0gICAgbV9mb250RGlydHkgPSBmYWxzZTsKLX0KLQotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkID0gMTA7Ci0KLU5vZGUqIFN0eWxlUmVzb2x2ZXI6
OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVD
b3VudCkgY29uc3QKLXsKLSAgICBpZiAodmlzaXRlZE5vZGVDb3VudCA+PSBjU3R5bGVTZWFyY2hU
aHJlc2hvbGQgKiBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNTdHlsZWRFbGVtZW50KCkpCi0gICAgICAg
IHJldHVybiAwOwotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgaWYgKHBhcmVudC0+aGFz
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKLSAgICBT
dHlsZWRFbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7Ci0g
ICAgaWYgKHAtPmlubGluZVN0eWxlKCkpCi0gICAgICAgIHJldHVybiAwOwotI2lmIEVOQUJMRShT
VkcpCi0gICAgaWYgKHAtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQq
PihwKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybiAwOwot
I2VuZGlmCi0gICAgaWYgKHAtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRh
aW5zKHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBwLT5yZW5kZXJTdHlsZSgpOwotICAg
IHVuc2lnbmVkIHN1YmNvdW50ID0gMDsKLSAgICBOb2RlKiB0aGlzQ291c2luID0gcDsKLSAgICBO
b2RlKiBjdXJyZW50Tm9kZSA9IHAtPnByZXZpb3VzU2libGluZygpOwotCi0gICAgLy8gUmVzZXJ2
ZSB0aGUgdHJpZXMgZm9yIHRoaXMgbGV2ZWwuIFRoaXMgZWZmZWN0aXZlbHkgbWFrZXMgc3VyZSB0
aGF0IHRoZSBhbGdvcml0aG0KLSAgICAvLyB3aWxsIG5ldmVyIGdvIGRlZXBlciB0aGFuIGNTdHls
ZVNlYXJjaExldmVsVGhyZXNob2xkIGxldmVscyBpbnRvIHJlY3Vyc2lvbi4KLSAgICB2aXNpdGVk
Tm9kZUNvdW50ICs9IGNTdHlsZVNlYXJjaFRocmVzaG9sZDsKLSAgICB3aGlsZSAodGhpc0NvdXNp
bikgewotICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUpIHsKLSAgICAgICAgICAgICsrc3ViY291
bnQ7Ci0gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUtPnJlbmRlclN0eWxlKCkgPT0gcGFyZW50
U3R5bGUgJiYgY3VycmVudE5vZGUtPmxhc3RDaGlsZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
QWRqdXN0IGZvciB1bnVzZWQgcmVzZXJ2ZWQgdHJpZXMuCi0gICAgICAgICAgICAgICAgdmlzaXRl
ZE5vZGVDb3VudCAtPSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgLSBzdWJjb3VudDsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY3VycmVudE5vZGUtPmxhc3RDaGlsZCgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKHN1YmNvdW50ID49IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5v
ZGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnROb2RlID0g
bG9jYXRlQ291c2luTGlzdCh0aGlzQ291c2luLT5wYXJlbnRFbGVtZW50KCksIHZpc2l0ZWROb2Rl
Q291bnQpOwotICAgICAgICB0aGlzQ291c2luID0gY3VycmVudE5vZGU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIDA7Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6bWF0Y2hlc1J1bGVTZXQoUnVsZVNl
dCogcnVsZVNldCkKLXsKLSAgICBpZiAoIXJ1bGVTZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwotCi0gICAgaW50IGZpcnN0UnVsZUluZGV4ID0g
LTEsIGxhc3RSdWxlSW5kZXggPSAtMTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhydWxlU2V0
LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgZmFsc2UpOwotCi0gICAgaWYgKG1fbWF0
Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbWF0Y2hl
ZFJ1bGVzLmNsZWFyKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZl
cjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0
Ci17Ci0gICAgSFRNTElucHV0RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRv
SW5wdXRFbGVtZW50KCk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQg
PSBtX2VsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0KLSAgICBpZiAoIXRoaXNJbnB1dEVsZW1l
bnQgfHwgIW90aGVySW5wdXRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAodGhpc0lucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQt
PmlzQXV0b2ZpbGxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXNJbnB1
dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+c2hv
dWxkQXBwZWFyQ2hlY2tlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXNJ
bnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc0lu
ZGV0ZXJtaW5hdGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh0aGlzSW5wdXRF
bGVtZW50LT5yZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5yZXF1aXJlZCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRy
b2woKSAhPSBtX2VsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0g
bV9lbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlTdHls
ZVJ1bGVzKCkpIHsKLSAgICAgICAgYm9vbCB3aWxsVmFsaWRhdGUgPSBlbGVtZW50LT53aWxsVmFs
aWRhdGUoKTsKLQotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9IG1fZWxlbWVudC0+d2lsbFZh
bGlkYXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHdpbGxW
YWxpZGF0ZSAmJiAoZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpICE9IG1fZWxl
bWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAoZWxlbWVudC0+aXNJblJhbmdlKCkgIT0gbV9lbGVtZW50LT5p
c0luUmFuZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZWxl
bWVudC0+aXNPdXRPZlJhbmdlKCkgIT0gbV9lbGVtZW50LT5pc091dE9mUmFuZ2UoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8g
VGhpcyBmdW5jdGlvbiBtYWtlcyBzb21lIGFzc3VtcHRpb25zIHRoYXQgb25seSBtYWtlIHNlbnNl
IGZvciBhdHRyaWJ1dGUgc3R5bGVzICh3ZSBvbmx5IGNvbXBhcmUgQ1NTUHJvcGVydHk6OmlkKCkg
YW5kIENTU1Byb3BlcnR5Ojp2YWx1ZSgpLikKLXN0YXRpYyBpbmxpbmUgYm9vbCBhdHRyaWJ1dGVT
dHlsZXNFcXVhbChTdHlsZVByb3BlcnR5U2V0KiBhLCBTdHlsZVByb3BlcnR5U2V0KiBiKQotewot
ICAgIGlmIChhID09IGIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChhLT5wcm9wZXJ0
eUNvdW50KCkgIT0gYi0+cHJvcGVydHlDb3VudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IGEtPnByb3BlcnR5Q291bnQoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IENTU1Byb3BlcnR5JiBhUHJvcGVydHkgPSBhLT5wcm9wZXJ0eUF0KGkpOwotICAgICAgICB1bnNp
Z25lZCBqOwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgcHJvcGVydHlDb3VudDsgKytqKSB7Ci0g
ICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgYlByb3BlcnR5ID0gYi0+cHJvcGVydHlBdChq
KTsKLSAgICAgICAgICAgIGlmIChhUHJvcGVydHkuaWQoKSAhPSBiUHJvcGVydHkuaWQoKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGdldCBhIGZl
dyBtb3JlIGhpdHMgYnkgY29tcGFyaW5nIGNzc1RleHQoKSBoZXJlLCBidXQgdGhhdCBnZXRzIGV4
cGVuc2l2ZSBxdWlja2x5LgotICAgICAgICAgICAgaWYgKGFQcm9wZXJ0eS52YWx1ZSgpICE9IGJQ
cm9wZXJ0eS52YWx1ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChqID09IHByb3BlcnR5Q291bnQpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1p
bmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhFbGVtZW50KiBlbGVtZW50KQotewot
ICAgIHJldHVybiBlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChlbGVt
ZW50KS0+aGFzRGlyZWN0aW9uQXV0bygpOwotfQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNo
YXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0KLSAgICBpZiAo
IXN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0eWxlLT51bmlxdWUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IG1f
ZWxlbWVudC0+dGFnUU5hbWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVt
ZW50LT5oYXNDbGFzcygpICE9IG1fZWxlbWVudC0+aGFzQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5pbmxpbmVTdHlsZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkg
JiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVBy
b3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0gICAgaWYgKCEhZWxl
bWVudC0+YXR0cmlidXRlU3R5bGUoKSAhPSAhIW1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5
bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0eWxlUHJvcGVydHlTZXQqIGFkZGl0
aW9uYWxBdHRyaWJ1dGVTdHlsZUEgPSBlbGVtZW50LT5hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUo
KTsKLSAgICBTdHlsZVByb3BlcnR5U2V0KiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVCID0gbV9z
dHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUoKTsKLSAgICBpZiAoIWFkZGl0
aW9uYWxBdHRyaWJ1dGVTdHlsZUEgIT0gIWFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZUIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gbV9lbGVtZW50
LT5pc0xpbmsoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZS0+YWZmZWN0
ZWRCeVVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3JzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgpICE9IG1fZWxlbWVudC0+aG92ZXJlZCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFjdGl2ZSgpICE9IG1fZWxlbWVu
dC0+YWN0aXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+Zm9j
dXNlZCgpICE9IG1fZWxlbWVudC0+Zm9jdXNlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gbV9lbGVtZW50LT5zaGFkb3dQc2V1
ZG9JZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAobV9lbGVtZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRy
KSAhPSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZSh0eXBlQXR0cikpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0
dHIpICE9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUo
bGFuZ0F0dHIpICE9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyZWFk
b25seUF0dHIpICE9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyZWFkb25seUF0dHIpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUo
Y2VsbHBhZGRpbmdBdHRyKSAhPSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2VsbHBhZGRp
bmdBdHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQtPmhhc0lE
KCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVS
ZXNvbHV0aW9uKCkuaW1wbCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxF
KFNUWUxFX1NDT1BFRCkKLSAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoUFJPR1JFU1Nf
VEFHKQotICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgewotICAgICAg
ICBpZiAoIW1fZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgSFRNTFByb2dyZXNzRWxlbWVudCogdGhpc1Byb2dyZXNz
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihlbGVtZW50KTsKLSAg
ICAgICAgSFRNTFByb2dyZXNzRWxlbWVudCogb3RoZXJQcm9ncmVzc0VsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICAgICAgaWYgKHRoaXNQ
cm9ncmVzc0VsZW1lbnQtPmlzRGV0ZXJtaW5hdGUoKSAhPSBvdGhlclByb2dyZXNzRWxlbWVudC0+
aXNEZXRlcm1pbmF0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9s
RWxlbWVudCgpOwotCi0gICAgaWYgKGlzQ29udHJvbCAhPSBtX2VsZW1lbnQtPmlzRm9ybUNvbnRy
b2xFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpc0NvbnRyb2wg
JiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKHN0eWxlLT50cmFuc2l0aW9ucygpIHx8IHN0eWxlLT5hbmltYXRpb25z
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICAvLyBUdXJuIG9mZiBzdHlsZSBzaGFyaW5nIGZvciBlbGVtZW50cyB0aGF0IGNh
biBnYWluIGxheWVycyBmb3IgcmVhc29ucyBvdXRzaWRlIG9mIHRoZSBzdHlsZSBzeXN0ZW0uCi0g
ICAgLy8gU2VlIGNvbW1lbnRzIGluIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoKS4KLSAgICBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoZnJh
bWVUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IGVsZW1lbnQtPmhhc1Rh
Z05hbWUob2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykKLSNpZiBF
TkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICAgICAgLy8gV2l0aCBwcm94eWluZywg
dGhlIG1lZGlhIGVsZW1lbnRzIGFyZSBiYWNrZWQgYnkgYSBSZW5kZXJFbWJlZGRlZE9iamVjdC4K
LSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgZWxlbWVudC0+aGFz
VGFnTmFtZShhdWRpb1RhZykKLSNlbmRpZgotICAgICAgICApCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZgotCi0gICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKGVsZW1lbnQpIHx8
IGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIG1fZWxlbWVudC0+Z2V0QXR0cmli
dXRlKGNsYXNzQXR0cikgIT0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpICYm
ICFhdHRyaWJ1dGVTdHlsZXNFcXVhbChlbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpLCBtX3N0eWxl
ZEVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQSAmJiAhYXR0cmlidXRlU3R5bGVzRXF1YWwo
YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQSwgYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlQikpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBtX2Vs
ZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBTdHlsZWRFbGVtZW50KiBTdHls
ZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpZ25l
ZCYgY291bnQpIGNvbnN0Ci17Ci0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91
c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoIW5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQo
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpKSkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBpZiAoY291bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
Pihub2RlKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHBhcmVudFN0eWxlUHJldmVudHNTaGFy
aW5nKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICByZXR1cm4gcGFyZW50
U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeVBvc2l0aW9uYWxSdWxlcygpCi0gICAgICAgIHx8IHBh
cmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKQotICAgICAgICB8
fCBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKSAKLSAgICAg
ICAgfHwgcGFyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMo
KTsKLX0KLQotUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkK
LXsKLSAgICBpZiAoIW1fc3R5bGVkRWxlbWVudCB8fCAhbV9wYXJlbnRTdHlsZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGlubGluZSBzdHlsZSBpdCBpcyBw
cm9iYWJseSB1bmlxdWUuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBpZiAobV9zdHlsZWRFbGVt
ZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obV9zdHlsZWRF
bGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybiAw
OwotI2VuZGlmCi0gICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5IHNob3cgdXAg
aW4gdGhlIHN0eWxlc2hlZXRzLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc0lEKCkgJiYg
bV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKG1fc3R5bGVkRWxlbWVudC0+aWRGb3JTdHls
ZVJlc29sdXRpb24oKS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAocGFyZW50
U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCi0gICAgICAgIHJldHVybiAwOwot
I2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzU2Nv
cGVkSFRNTFN0eWxlQ2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKLQotICAgIC8v
IENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVpciBjb3VzaW5zLgotICAgIHVuc2lnbmVk
IGNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCB2aXNpdGVkTm9kZUNvdW50ID0gMDsKLSAgICBTdHls
ZWRFbGVtZW50KiBzaGFyZUVsZW1lbnQgPSAwOwotICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBtX3N0
eWxlZEVsZW1lbnQtPnByZXZpb3VzU2libGluZygpOwotICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7
Ci0gICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNp
bkxpc3QsIGNvdW50KTsKLSAgICAgICAgaWYgKHNoYXJlRWxlbWVudCkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjb3VzaW5MaXN0ID0gbG9jYXRlQ291c2luTGlzdChjb3VzaW5MaXN0LT5w
YXJlbnRFbGVtZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOwotICAgIH0KLQotICAgIC8vIElmIHdl
IGhhdmUgZXhoYXVzdGVkIGFsbCBvdXIgYnVkZ2V0IG9yIG91ciBjb3VzaW5zLgotICAgIGlmICgh
c2hhcmVFbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIENhbid0IHNoYXJlIGlm
IHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMgaXMgY2hlY2tlZCBhdCB0aGUgZW5kIGFzIGl0IHNo
b3VsZCByYXJlbHkgZmFpbC4KLSAgICBpZiAobWF0Y2hlc1J1bGVTZXQobV9zaWJsaW5nUnVsZVNl
dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIC8vIENhbid0IHNoYXJlIGlmIGF0dHJp
YnV0ZSBydWxlcyBhcHBseS4KLSAgICBpZiAobWF0Y2hlc1J1bGVTZXQobV91bmNvbW1vbkF0dHJp
YnV0ZVJ1bGVTZXQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBUcmFja2luZyBj
aGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkg
Z2V0IHNldCBieSB0aGUgc2libGluZyBydWxlIG1hdGNoIGFib3ZlLgotICAgIGlmIChwYXJlbnRT
dHlsZVByZXZlbnRzU2hhcmluZyhtX3BhcmVudFN0eWxlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIHNoYXJlRWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLX0KLQotdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKLXsKLSAgICBNYXRjaGlu
Z1VBUnVsZXNTY29wZSBzY29wZTsKLQotICAgIC8vIEZpcnN0IHdlIG1hdGNoIHJ1bGVzIGZyb20g
dGhlIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgaWYgKHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KQot
ICAgICAgICByZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKLSAgICBSdWxlU2V0KiB1c2VyQWdl
bnRTdHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1hdGNoU3BlY2lmaWMoInByaW50IikK
LSAgICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRlZmF1bHRTdHlsZTsKLSAgICBtYXRjaFVB
UnVsZXMocmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKLQotICAgIC8vIEluIHF1aXJrcyBt
b2RlLCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSBxdWlya3MgdXNlciBhZ2VudCBzaGVldC4KLSAg
ICBpZiAoIW1fY2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhy
ZXN1bHQsIGRlZmF1bHRRdWlya3NTdHlsZSk7Ci0KLSAgICAvLyBJZiBkb2N1bWVudCB1c2VzIHZp
ZXcgc291cmNlIHN0eWxlcyAoaW4gdmlldyBzb3VyY2UgbW9kZSBvciBpbiB4bWwgdmlld2VyIG1v
ZGUpLCB0aGVuIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHZpZXcgc291cmNlIHN0eWxlIHNoZWV0
LgotICAgIGlmIChtX2NoZWNrZXIuZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCkpIHsKLSAgICAg
ICAgaWYgKCFkZWZhdWx0Vmlld1NvdXJjZVN0eWxlKQotICAgICAgICAgICAgbG9hZFZpZXdTb3Vy
Y2VTdHlsZSgpOwotICAgICAgICBtYXRjaFVBUnVsZXMocmVzdWx0LCBkZWZhdWx0Vmlld1NvdXJj
ZVN0eWxlKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NGb250U2VsZWN0b3Iq
IGZvbnRTZWxlY3RvcikKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsK
LQotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGUoKTsKLSAgICBkb2N1bWVudFN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICBkb2N1
bWVudFN0eWxlLT5zZXRSVExPcmRlcmluZyhkb2N1bWVudC0+dmlzdWFsbHlPcmRlcmVkKCkgPyBW
aXN1YWxPcmRlciA6IExvZ2ljYWxPcmRlcik7Ci0gICAgZG9jdW1lbnRTdHlsZS0+c2V0Wm9vbShm
cmFtZSAmJiAhZG9jdW1lbnQtPnByaW50aW5nKCkgPyBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSA6
IDEpOwotICAgIGRvY3VtZW50U3R5bGUtPnNldFBhZ2VTY2FsZVRyYW5zZm9ybShmcmFtZSA/IGZy
YW1lLT5mcmFtZVNjYWxlRmFjdG9yKCkgOiAxKTsKLSAgICBkb2N1bWVudFN0eWxlLT5zZXRVc2Vy
TW9kaWZ5KGRvY3VtZW50LT5pbkRlc2lnbk1vZGUoKSA/IFJFQURfV1JJVEUgOiBSRUFEX09OTFkp
OwotICAgIGRvY3VtZW50U3R5bGUtPnNldExvY2FsZShkb2N1bWVudC0+Y29udGVudExhbmd1YWdl
KCkpOwotCi0gICAgRWxlbWVudCogZG9jRWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1l
bnQoKTsKLSAgICBSZW5kZXJPYmplY3QqIGRvY0VsZW1lbnRSZW5kZXJlciA9IGRvY0VsZW1lbnQg
PyBkb2NFbGVtZW50LT5yZW5kZXJlcigpIDogMDsKLSAgICBpZiAoZG9jRWxlbWVudFJlbmRlcmVy
KSB7Ci0gICAgICAgIC8vIFVzZSB0aGUgZGlyZWN0aW9uIGFuZCB3cml0aW5nLW1vZGUgb2YgdGhl
IGJvZHkgdG8gc2V0IHRoZQotICAgICAgICAvLyB2aWV3cG9ydCdzIGRpcmVjdGlvbiBhbmQgd3Jp
dGluZy1tb2RlIHVubGVzcyB0aGUgcHJvcGVydHkgaXMgc2V0IG9uIHRoZSBkb2N1bWVudCBlbGVt
ZW50LgotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBib2R5LCB0aGVuIHVzZSB0aGUgZG9jdW1l
bnQgZWxlbWVudC4KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBib2R5UmVuZGVyZXIgPSBkb2N1bWVu
dC0+Ym9keSgpID8gZG9jdW1lbnQtPmJvZHkoKS0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgICAgIGlm
IChib2R5UmVuZGVyZXIgJiYgIWRvY3VtZW50LT53cml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVt
ZW50KCkpCi0gICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRXcml0aW5nTW9kZShib2R5UmVu
ZGVyZXItPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBkb2N1bWVudFN0eWxlLT5zZXRXcml0aW5nTW9kZShkb2NFbGVtZW50UmVuZGVyZXItPnN0eWxl
KCktPndyaXRpbmdNb2RlKCkpOwotICAgICAgICBpZiAoYm9keVJlbmRlcmVyICYmICFkb2N1bWVu
dC0+ZGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50
U3R5bGUtPnNldERpcmVjdGlvbihib2R5UmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlyZWN0aW9uKGRv
Y0VsZW1lbnRSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpOwotICAgIH0KLQotICAgIGlm
IChmcmFtZSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKLSAg
ICAgICAgICAgIGNvbnN0IFBhZ2U6OlBhZ2luYXRpb24mIHBhZ2luYXRpb24gPSBwYWdlLT5wYWdp
bmF0aW9uKCk7Ci0gICAgICAgICAgICBpZiAocGFnaW5hdGlvbi5tb2RlICE9IFBhZ2U6OlBhZ2lu
YXRpb246OlVucGFnaW5hdGVkKSB7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0
Q29sdW1uQXhpcyhwYWdpbmF0aW9uLm1vZGUgPT0gUGFnZTo6UGFnaW5hdGlvbjo6SG9yaXpvbnRh
bGx5UGFnaW5hdGVkID8gSG9yaXpvbnRhbENvbHVtbkF4aXMgOiBWZXJ0aWNhbENvbHVtbkF4aXMp
OwotICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldENvbHVtbkdhcChwYWdpbmF0aW9u
LmdhcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVy
Rm9udChkb2N1bWVudC0+cHJpbnRpbmcoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlw
dChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKGRvY3VtZW50U3R5bGUtPmxvY2Fs
ZSgpKSk7Ci0gICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygp
KSB7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5m
b250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFy
ZEZvbnQgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KGZvbnREZXNjcmlwdGlvbi5zY3Jp
cHQoKSk7Ci0gICAgICAgIGlmICghc3RhbmRhcmRGb250LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFu
ZGFyZEZhbWlseSk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5z
ZXRGYW1pbHkoc3RhbmRhcmRGb250KTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKLSAgICAgICAgfQotICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAx
KTsKLSAgICAgICAgaW50IHNpemUgPSBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQo
ZG9jdW1lbnQsIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgICAgICBib29sIHVzZVNWR1pvb21SdWxlcyA9
IGRvY3VtZW50LT5pc1NWR0RvY3VtZW50KCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRD
b21wdXRlZFNpemUoU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUoZG9jdW1lbnQsIGRvY3VtZW50U3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29s
dXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMpKTsKLSAgICB9Ci0KLSAgICBkb2N1bWVu
dFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICBkb2N1bWVu
dFN0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7Ci0KLSAgICByZXR1cm4gZG9jdW1l
bnRTdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91
bmRhcnkoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gZWxlbWVudC0+cGFy
ZW50Tm9kZSgpOwotICAgIHJldHVybiBwYXJlbnROb2RlICYmIHBhcmVudE5vZGUtPmlzU2hhZG93
Um9vdCgpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHls
ZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyU3R5bGUqIGRlZmF1bHRQYXJlbnQs
Ci0gICAgU3R5bGVTaGFyaW5nQmVoYXZpb3Igc2hhcmluZ0JlaGF2aW9yLCBSdWxlTWF0Y2hpbmdC
ZWhhdmlvciBtYXRjaGluZ0JlaGF2aW9yLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcp
Ci17Ci0gICAgLy8gT25jZSBhbiBlbGVtZW50IGhhcyBhIHJlbmRlcmVyLCB3ZSBkb24ndCB0cnkg
dG8gZGVzdHJveSBpdCwgc2luY2Ugb3RoZXJ3aXNlIHRoZSByZW5kZXJlcgotICAgIC8vIHdpbGwg
dmFuaXNoIGlmIGEgc3R5bGUgcmVjYWxjIGhhcHBlbnMgZHVyaW5nIGxvYWRpbmcuCi0gICAgaWYg
KHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZyAmJiAhZWxlbWVudC0+ZG9jdW1l
bnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgJiYgIWVsZW1lbnQtPnJlbmRlcmVyKCkpIHsK
LSAgICAgICAgaWYgKCFzX3N0eWxlTm90WWV0QXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICBzX3N0
eWxlTm90WWV0QXZhaWxhYmxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAg
ICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPnNldERpc3BsYXkoTk9ORSk7Ci0gICAg
ICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5mb250KCkudXBkYXRlKG1fZm9udFNlbGVj
dG9yKTsKLSAgICAgICAgfQotICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNOb2Rl
c1dpdGhQbGFjZWhvbGRlclN0eWxlKCk7Ci0gICAgICAgIHJldHVybiBzX3N0eWxlTm90WWV0QXZh
aWxhYmxlOwotICAgIH0KLQotICAgIGluaXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGluaXRGb3JT
dHlsZVJlc29sdmUoZWxlbWVudCwgZGVmYXVsdFBhcmVudCk7Ci0gICAgbV9yZWdpb25Gb3JTdHls
aW5nID0gcmVnaW9uRm9yU3R5bGluZzsKLSAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93
U3R5bGVTaGFyaW5nKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxvY2F0
ZVNoYXJlZFN0eWxlKCk7Ci0gICAgICAgIGlmIChzaGFyZWRTdHlsZSkKLSAgICAgICAgICAgIHJl
dHVybiBzaGFyZWRTdHlsZTsKLSAgICB9Ci0KLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNy
ZWF0ZSgpOwotCi0gICAgaWYgKG1fcGFyZW50U3R5bGUpCi0gICAgICAgIG1fc3R5bGUtPmluaGVy
aXRGcm9tKG1fcGFyZW50U3R5bGUpOwotICAgIGVsc2UgewotICAgICAgICBtX3BhcmVudFN0eWxl
ID0gc3R5bGUoKTsKLSAgICAgICAgLy8gTWFrZSBzdXJlIG91ciBmb250cyBhcmUgaW5pdGlhbGl6
ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVudCBzdHlsZS4KLSAgICAg
ICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKLSAgICB9Ci0KLSAgICAvLyBFdmVuIGlmIHN1
cnJvdW5kaW5nIGNvbnRlbnQgaXMgdXNlci1lZGl0YWJsZSwgc2hhZG93IERPTSBzaG91bGQgYWN0
IGFzIGEgc2luZ2xlIHVuaXQsIGFuZCBub3QgbmVjZXNzYXJpbHkgYmUgZWRpdGFibGUKLSAgICBp
ZiAoaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKQotICAgICAgICBtX3N0eWxlLT5zZXRVc2Vy
TW9kaWZ5KFJlbmRlclN0eWxlOjppbml0aWFsVXNlck1vZGlmeSgpKTsKLQotICAgIGlmIChlbGVt
ZW50LT5pc0xpbmsoKSkgewotICAgICAgICBtX3N0eWxlLT5zZXRJc0xpbmsodHJ1ZSk7Ci0gICAg
ICAgIG1fc3R5bGUtPnNldEluc2lkZUxpbmsobV9lbGVtZW50TGlua1N0YXRlKTsKLSAgICB9Ci0K
LSAgICBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KGVsZW1lbnQpOwotCi0gICAg
TWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7Ci0gICAgaWYgKG1hdGNoaW5nQmVoYXZpb3IgPT0gTWF0
Y2hPbmx5VXNlckFnZW50UnVsZXMpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhtYXRjaFJlc3VsdCk7
Ci0gICAgZWxzZQotICAgICAgICBtYXRjaEFsbFJ1bGVzKG1hdGNoUmVzdWx0KTsKLQotICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQpOwotCi0gICAgLy8gQ2xlYW4gdXAgb3Vy
IHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVy
IGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSwg
ZWxlbWVudCk7Ci0KLSAgICBpbml0RWxlbWVudCgwKTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4
dCByZXNvbHZlLgotCi0gICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1f
c3R5bGUucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIGNv
bnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVl
KQotewotICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKLSAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRp
ZXMoKSkKLSAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBrZXlmcmFtZS0+cHJv
cGVydGllcygpKTsKLQotICAgIEFTU0VSVCghbV9zdHlsZSk7Ci0KLSAgICAvLyBDcmVhdGUgdGhl
IHN0eWxlCi0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUpOwot
Ci0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotCi0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBi
b3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCi0gICAg
Ly8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmly
c3QgcHJvcGVydGllcy4KLSAgICBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZTsKLSAgICBpZiAo
a2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczx0
cnVlPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0g
MSwgaW5oZXJpdGVkT25seSk7Ci0KLSAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28g
YWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOwotCi0gICAgLy8gTGlu
ZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1z
aXplCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOwotCi0gICAgLy8gTm93IGRv
IHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMuCi0gICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkp
Ci0gICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8ZmFsc2U+KHJlc3VsdCwgZmFsc2UsIDAs
IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKLQot
ICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUgbm9uLWVzc2VudGlh
bCBmb250IHByb3BzLAotICAgIC8vIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgYSBzZWNvbmQgdGlt
ZS4KLSAgICB1cGRhdGVGb250KCk7Ci0KLSAgICAvLyBTdGFydCBsb2FkaW5nIGltYWdlcyByZWZl
cmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdJbWFnZXMoKTsKLSAgICAKLSNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgc2hhZGVycyBy
ZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7Ci0jZW5k
aWYKLQotICAgIC8vIEFkZCBhbGwgdGhlIGFuaW1hdGluZyBwcm9wZXJ0aWVzIHRvIHRoZSBrZXlm
cmFtZS4KLSAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiA9IGtleWZy
YW1lLT5wcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHN0
eWxlRGVjbGFyYXRpb24tPnByb3BlcnR5Q291bnQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkgewotICAgICAgICAgICAgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSA9IHN0eWxlRGVjbGFyYXRpb24tPnByb3BlcnR5QXQoaSkuaWQoKTsKLSAgICAg
ICAgICAgIC8vIFRpbWluZy1mdW5jdGlvbiB3aXRoaW4ga2V5ZnJhbWVzIGlzIHNwZWNpYWwsIGJl
Y2F1c2UgaXQgaXMgbm90IGFuaW1hdGVkOyBpdCBqdXN0Ci0gICAgICAgICAgICAvLyBkZXNjcmli
ZXMgdGhlIHRpbWluZyBmdW5jdGlvbiBiZXR3ZWVuIHRoaXMga2V5ZnJhbWUgYW5kIHRoZSBuZXh0
LgotICAgICAgICAgICAgaWYgKHByb3BlcnR5ICE9IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9u
VGltaW5nRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAga2V5ZnJhbWVWYWx1ZS5hZGRQcm9wZXJ0
eShwcm9wZXJ0eSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbV9zdHlsZS5yZWxl
YXNlKCk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRp
b24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJhbWVM
aXN0JiBsaXN0KQotewotICAgIGxpc3QuY2xlYXIoKTsKLQotICAgIC8vIEdldCB0aGUga2V5ZnJh
bWVzUnVsZSBmb3IgdGhpcyBuYW1lCi0gICAgaWYgKCFlIHx8IGxpc3QuYW5pbWF0aW9uTmFtZSgp
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9rZXlmcmFtZXNSdWxlTWFwLmNo
ZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIEtleWZyYW1lc1J1bGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9rZXlmcmFtZXNSdWxlTWFwLmZpbmQobGlzdC5hbmltYXRpb25OYW1lKCkuaW1wbCgpKTsKLSAg
ICBpZiAoaXQgPT0gbV9rZXlmcmFtZXNSdWxlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqIGtleWZyYW1lc1J1bGUgPSBpdC0+c2Vjb25k
LmdldCgpOwotCi0gICAgLy8gQ29uc3RydWN0IGFuZCBwb3B1bGF0ZSB0aGUgc3R5bGUgZm9yIGVh
Y2gga2V5ZnJhbWUKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4mIGtl
eWZyYW1lcyA9IGtleWZyYW1lc1J1bGUtPmtleWZyYW1lcygpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8gQXBwbHkgdGhl
IGRlY2xhcmF0aW9uIHRvIHRoZSBzdHlsZS4gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBv
ZiB0aGUgbG9naWMgaW4gc3R5bGVGb3JFbGVtZW50Ci0gICAgICAgIGluaXRFbGVtZW50KGUpOwot
ICAgICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUpOwotCi0gICAgICAgIGNvbnN0IFN0eWxlS2V5
ZnJhbWUqIGtleWZyYW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwotCi0gICAgICAgIEtleWZyYW1l
VmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHls
ZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwga2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUp
KTsKLQotICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBzdHlsZSB0byBhbGwgdGhlIGluZGlj
YXRlZCBrZXkgdGltZXMKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXlzOwotICAgICAgICBrZXlm
cmFtZS0+Z2V0S2V5cyhrZXlzKTsKLSAgICAgICAgZm9yIChzaXplX3Qga2V5SW5kZXggPSAwOyBr
ZXlJbmRleCA8IGtleXMuc2l6ZSgpOyArK2tleUluZGV4KSB7Ci0gICAgICAgICAgICBrZXlmcmFt
ZVZhbHVlLnNldEtleShrZXlzW2tleUluZGV4XSk7Ci0gICAgICAgICAgICBsaXN0Lmluc2VydChr
ZXlmcmFtZVZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHRoZSAwJSBrZXlm
cmFtZSBpcyBtaXNzaW5nLCBjcmVhdGUgaXQgKGJ1dCBvbmx5IGlmIHRoZXJlIGlzIGF0IGxlYXN0
IG9uZSBvdGhlciBrZXlmcmFtZSkKLSAgICBpbnQgaW5pdGlhbExpc3RTaXplID0gbGlzdC5zaXpl
KCk7Ci0gICAgaWYgKGluaXRpYWxMaXN0U2l6ZSA+IDAgJiYgbGlzdFswXS5rZXkoKSAhPSAwKSB7
Ci0gICAgICAgIHN0YXRpYyBTdHlsZUtleWZyYW1lKiB6ZXJvUGVyY2VudEtleWZyYW1lOwotICAg
ICAgICBpZiAoIXplcm9QZXJjZW50S2V5ZnJhbWUpIHsKLSAgICAgICAgICAgIHplcm9QZXJjZW50
S2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoKS5sZWFrUmVmKCk7Ci0gICAgICAgICAg
ICB6ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIwJSIpOwotICAgICAgICB9Ci0gICAg
ICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVW
YWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwgemVyb1BlcmNlbnRL
ZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwotICAgICAgICBsaXN0Lmluc2VydChrZXlmcmFtZVZh
bHVlKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgMTAwJSBrZXlmcmFtZSBpcyBtaXNzaW5nLCBj
cmVhdGUgaXQgKGJ1dCBvbmx5IGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBvdGhlciBrZXlmcmFt
ZSkKLSAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiAobGlzdFtsaXN0LnNpemUoKSAtIDFd
LmtleSgpICE9IDEpKSB7Ci0gICAgICAgIHN0YXRpYyBTdHlsZUtleWZyYW1lKiBodW5kcmVkUGVy
Y2VudEtleWZyYW1lOwotICAgICAgICBpZiAoIWh1bmRyZWRQZXJjZW50S2V5ZnJhbWUpIHsKLSAg
ICAgICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUo
KS5sZWFrUmVmKCk7Ci0gICAgICAgICAgICBodW5kcmVkUGVyY2VudEtleWZyYW1lLT5zZXRLZXlU
ZXh0KCIxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZh
bHVlKDEsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJh
bWUoZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7
Ci0gICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOwotICAgIH0KLX0KLQotUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBz
ZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQotewot
ICAgIGlmICghZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbml0RWxlbWVudChlKTsKLQot
ICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgcGFyZW50U3R5bGUsIHBzZXVkbyk7Ci0gICAgbV9z
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLQotICAgIGlmIChtX3BhcmVudFN0eWxlKQot
ICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlKTsKLQotICAgIC8vIFNp
bmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4gYW55IG9mIG91ciBxdWlyay9wcmlu
dCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1lIHdhbGtpbmcKLSAgICAvLyB0aG9z
ZSBydWxlcy4KLQotICAgIC8vIENoZWNrIFVBLCB1c2VyIGFuZCBhdXRob3IgcnVsZXMuCi0gICAg
TWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7Ci0gICAgbWF0Y2hVQVJ1bGVzKG1hdGNoUmVzdWx0KTsK
LQotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgewotICAgICAgICBtYXRjaFVz
ZXJSdWxlcyhtYXRjaFJlc3VsdCwgZmFsc2UpOwotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKG1h
dGNoUmVzdWx0LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBtX3N0eWxlLT5z
ZXRTdHlsZVR5cGUocHNldWRvKTsKLQotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hS
ZXN1bHQpOwotCi0gICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5k
IHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVy
U3R5bGUoc3R5bGUoKSwgcGFyZW50U3R5bGUsIDApOwotCi0gICAgLy8gU3RhcnQgbG9hZGluZyBp
bWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nSW1hZ2VzKCk7
Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgc2hh
ZGVycyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7
Ci0jZW5kaWYKLQotICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0
eWxlLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCi17Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2
ZShtX2NoZWNrZXIuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RFbGVt
ZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgotCi0gICAgbV9zdHls
ZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3Jv
b3RFbGVtZW50U3R5bGUpOwotCi0gICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBh
Z2VJbmRleCk7Ci0gICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4
KTsKLSAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7Ci0gICAgCi0g
ICAgTWF0Y2hSZXN1bHQgcmVzdWx0OwotICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgZGVmYXVs
dFByaW50U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbWF0Y2hQYWdlUnVsZXMo
cmVzdWx0LCBtX3VzZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICAv
LyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVz
LCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCi0gICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX2F1
dGhvclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIG1fbGluZUhlaWdo
dFZhbHVlID0gMDsKLSAgICBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZTsKLSAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPHRydWU+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKLQotICAgIC8vIElmIG91ciBmb250
IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250
KCk7Ci0KLSAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNp
ZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAg
ICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUp
OwotCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4ocmVzdWx0LCBmYWxzZSwgMCwg
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwotCi0g
ICAgLy8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAg
IGxvYWRQZW5kaW5nSW1hZ2VzKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgLy8g
U3RhcnQgbG9hZGluZyB0aGUgc2hhZGVycyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAg
bG9hZFBlbmRpbmdTaGFkZXJzKCk7Ci0jZW5kaWYKLQotICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0
eWxlLgotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIHZvaWQgYWRk
SW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgLy8gSW50cmluc2lj
IG1hcmdpbiB2YWx1ZS4KLSAgICBjb25zdCBpbnQgaW50cmluc2ljTWFyZ2luID0gMiAqIHN0eWxl
LT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICAvLyBGSVhNRTogVXNpbmcgd2lkdGgvaGVpZ2h0IGFs
b25lIGFuZCBub3QgYWxzbyBkZWFsaW5nIHdpdGggbWluLXdpZHRoL21heC13aWR0aCBpcyBmbGF3
ZWQuCi0gICAgLy8gRklYTUU6IFVzaW5nICJxdWlyayIgdG8gZGVjaWRlIHRoZSBtYXJnaW4gd2Fz
bid0IHNldCBpcyBraW5kIG9mIGxhbWUuCi0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5MZWZ0KCkucXVpcmsoKSkK
LSAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5MZWZ0KExlbmd0aChpbnRyaW5zaWNNYXJnaW4s
IEZpeGVkKSk7Ci0gICAgICAgIGlmIChzdHlsZS0+bWFyZ2luUmlnaHQoKS5xdWlyaygpKQotICAg
ICAgICAgICAgc3R5bGUtPnNldE1hcmdpblJpZ2h0KExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZp
eGVkKSk7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkgewotICAg
ICAgICBpZiAoc3R5bGUtPm1hcmdpblRvcCgpLnF1aXJrKCkpCi0gICAgICAgICAgICBzdHlsZS0+
c2V0TWFyZ2luVG9wKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7Ci0gICAgICAgIGlm
IChzdHlsZS0+bWFyZ2luQm90dG9tKCkucXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRN
YXJnaW5Cb3R0b20oTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKLSAgICB9Ci19Ci0K
LXN0YXRpYyBFRGlzcGxheSBlcXVpdmFsZW50QmxvY2tEaXNwbGF5KEVEaXNwbGF5IGRpc3BsYXks
IGJvb2wgaXNGbG9hdGluZywgYm9vbCBzdHJpY3RQYXJzaW5nKQotewotICAgIHN3aXRjaCAoZGlz
cGxheSkgewotICAgIGNhc2UgQkxPQ0s6Ci0gICAgY2FzZSBUQUJMRToKLSAgICBjYXNlIEJPWDoK
LSAgICBjYXNlIEZMRVhCT1g6Ci0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICBjYXNl
IEdSSUQ6Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIGRpc3BsYXk7Ci0KLSAgICBjYXNlIExJU1Rf
SVRFTToKLSAgICAgICAgLy8gSXQgaXMgYSBXaW5JRSBidWcgdGhhdCBmbG9hdGVkIGxpc3QgaXRl
bXMgbG9zZSB0aGVpciBidWxsZXRzLCBzbyB3ZSdsbCBlbXVsYXRlIHRoZSBxdWlyaywgYnV0IG9u
bHkgaW4gcXVpcmtzIG1vZGUuCi0gICAgICAgIGlmICghc3RyaWN0UGFyc2luZyAmJiBpc0Zsb2F0
aW5nKQotICAgICAgICAgICAgcmV0dXJuIEJMT0NLOwotICAgICAgICByZXR1cm4gZGlzcGxheTsK
LSAgICBjYXNlIElOTElORV9UQUJMRToKLSAgICAgICAgcmV0dXJuIFRBQkxFOwotICAgIGNhc2Ug
SU5MSU5FX0JPWDoKLSAgICAgICAgcmV0dXJuIEJPWDsKLSAgICBjYXNlIElOTElORV9GTEVYQk9Y
OgotICAgICAgICByZXR1cm4gRkxFWEJPWDsKLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQot
ICAgIGNhc2UgSU5MSU5FX0dSSUQ6Ci0gICAgICAgIHJldHVybiBHUklEOwotI2VuZGlmCi0KLSAg
ICBjYXNlIElOTElORToKLSAgICBjYXNlIFJVTl9JTjoKLSAgICBjYXNlIENPTVBBQ1Q6Ci0gICAg
Y2FzZSBJTkxJTkVfQkxPQ0s6Ci0gICAgY2FzZSBUQUJMRV9ST1dfR1JPVVA6Ci0gICAgY2FzZSBU
QUJMRV9IRUFERVJfR1JPVVA6Ci0gICAgY2FzZSBUQUJMRV9GT09URVJfR1JPVVA6Ci0gICAgY2Fz
ZSBUQUJMRV9ST1c6Ci0gICAgY2FzZSBUQUJMRV9DT0xVTU5fR1JPVVA6Ci0gICAgY2FzZSBUQUJM
RV9DT0xVTU46Ci0gICAgY2FzZSBUQUJMRV9DRUxMOgotICAgIGNhc2UgVEFCTEVfQ0FQVElPTjoK
LSAgICAgICAgcmV0dXJuIEJMT0NLOwotICAgIGNhc2UgTk9ORToKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBOT05FOwotICAgIH0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQkxPQ0s7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUsIEVsZW1lbnQgKmUpCi17Ci0gICAgLy8gQ2FjaGUgb3VyIG9yaWdpbmFsIGRpc3BsYXku
Ci0gICAgc3R5bGUtPnNldE9yaWdpbmFsRGlzcGxheShzdHlsZS0+ZGlzcGxheSgpKTsKLQotICAg
IGlmIChzdHlsZS0+ZGlzcGxheSgpICE9IE5PTkUpIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBh
IDx0ZD4gdGhhdCBzcGVjaWZpZXMgYSBmbG9hdCBwcm9wZXJ0eSwgaW4gcXVpcmtzIG1vZGUgd2Ug
anVzdCBkcm9wIHRoZSBmbG9hdAotICAgICAgICAvLyBwcm9wZXJ0eS4KLSAgICAgICAgLy8gU2l0
ZXMgYWxzbyBjb21tb25seSB1c2UgZGlzcGxheTppbmxpbmUvYmxvY2sgb24gPHRkPnMgYW5kIDx0
YWJsZT5zLiAgSW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKLSAgICAgICAgLy8gdGhlc2UgdGFncyB0
byByZXRhaW4gdGhlaXIgZGlzcGxheSB0eXBlcy4KLSAgICAgICAgaWYgKCFtX2NoZWNrZXIuc3Ry
aWN0UGFyc2luZygpICYmIGUpIHsKLSAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKHRkVGFn
KSkgewotICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NFTEwpOwotICAg
ICAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhOb0Zsb2F0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKQotICAgICAgICAg
ICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJ
TkxJTkVfVEFCTEUgOiBUQUJMRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZSAmJiAoZS0+
aGFzVGFnTmFtZSh0ZFRhZykgfHwgZS0+aGFzVGFnTmFtZSh0aFRhZykpKSB7Ci0gICAgICAgICAg
ICBpZiAoc3R5bGUtPndoaXRlU3BhY2UoKSA9PSBLSFRNTF9OT1dSQVApIHsKLSAgICAgICAgICAg
ICAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIGFyZSByZWFsbHkgbm93cmFwcGluZyBvciBpZiB3ZSBz
aG91bGQganVzdAotICAgICAgICAgICAgICAgIC8vIHVzZSBub3JtYWwgaW5zdGVhZC4gIElmIHRo
ZSB3aWR0aCBvZiB0aGUgY2VsbCBpcyBmaXhlZCwgdGhlbgotICAgICAgICAgICAgICAgIC8vIHdl
IGRvbid0IGFjdHVhbGx5IHVzZSBOT1dSQVAuCi0gICAgICAgICAgICAgICAgaWYgKHN0eWxlLT53
aWR0aCgpLmlzRml4ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFdoaXRlU3Bh
Y2UoTk9STUFMKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0
eWxlLT5zZXRXaGl0ZVNwYWNlKE5PV1JBUCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBUYWJsZXMgbmV2ZXIgc3VwcG9ydCB0aGUgLXdlYmtpdC0qIHZhbHVlcyBmb3Ig
dGV4dC1hbGlnbiBhbmQgd2lsbCByZXNldCBiYWNrIHRvIHRoZSBkZWZhdWx0LgotICAgICAgICBp
ZiAoZSAmJiBlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSAmJiAoc3R5bGUtPnRleHRBbGlnbigpID09
IFdFQktJVF9MRUZUIHx8IHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfQ0VOVEVSIHx8IHN0
eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklHSFQpKQotICAgICAgICAgICAgc3R5bGUtPnNl
dFRleHRBbGlnbihUQUFVVE8pOwotCi0gICAgICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVzZXRzIG5l
dmVyIGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFic29sdXRlLiAgVGhpcyBp
cyBuZWNlc3NhcnkgdG8KLSAgICAgICAgLy8gZml4IGEgY3Jhc2ggd2hlcmUgYSBzaXRlIHRyaWVz
IHRvIHBvc2l0aW9uIHRoZXNlIG9iamVjdHMuICBUaGV5IGFsc28gbmV2ZXIgaG9ub3IgZGlzcGxh
eS4KLSAgICAgICAgaWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGUtPmhhc1Rh
Z05hbWUoZnJhbWVzZXRUYWcpKSkgewotICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFN0
YXRpY1Bvc2l0aW9uKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFJ1YnkgdGV4dCBkb2VzIG5vdCBzdXBwb3J0IGZsb2F0IG9y
IHBvc2l0aW9uLiBUaGlzIG1pZ2h0IGNoYW5nZSB3aXRoIGV2b2x1dGlvbiBvZiB0aGUgc3BlY2lm
aWNhdGlvbi4KLSAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZShydFRhZykpIHsKLSAgICAg
ICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihTdGF0aWNQb3NpdGlvbik7Ci0gICAgICAgICAgICBz
dHlsZS0+c2V0RmxvYXRpbmcoTm9GbG9hdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUYWJs
ZSBoZWFkZXJzIHdpdGggYSB0ZXh0LWFsaWduIG9mIGF1dG8gd2lsbCBjaGFuZ2UgdGhlIHRleHQt
YWxpZ24gdG8gY2VudGVyLgotICAgICAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKHRoVGFnKSAm
JiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFBVVRPKQotICAgICAgICAgICAgc3R5bGUtPnNldFRl
eHRBbGlnbihDRU5URVIpOwotCi0gICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUobGVnZW5k
VGFnKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLQotICAgICAgICAv
LyBBYnNvbHV0ZS9maXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzLCBmbG9hdGluZyBlbGVtZW50cyBh
bmQgdGhlIGRvY3VtZW50IGVsZW1lbnQgbmVlZCBibG9jay1saWtlIG91dHNpZGUgZGlzcGxheS4K
LSAgICAgICAgaWYgKHN0eWxlLT5wb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24gfHwgc3R5
bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbiB8fCBzdHlsZS0+aXNGbG9hdGluZygpIHx8
IChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IGUpKQotICAgICAgICAg
ICAgc3R5bGUtPnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZS0+ZGlzcGxh
eSgpLCBzdHlsZS0+aXNGbG9hdGluZygpLCBtX2NoZWNrZXIuc3RyaWN0UGFyc2luZygpKSk7Ci0K
LSAgICAgICAgLy8gRklYTUU6IERvbid0IHN1cHBvcnQgdGhpcyBtdXRhdGlvbiBmb3IgcHNldWRv
IHN0eWxlcyBsaWtlIGZpcnN0LWxldHRlciBvciBmaXJzdC1saW5lLCBzaW5jZSBpdCdzIG5vdCBj
b21wbGV0ZWx5Ci0gICAgICAgIC8vIGNsZWFyIGhvdyB0aGF0IHNob3VsZCB3b3JrLgotICAgICAg
ICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkUgJiYgc3R5bGUtPnN0eWxlVHlwZSgpID09
IE5PUFNFVURPICYmIHBhcmVudFN0eWxlICYmIHN0eWxlLT53cml0aW5nTW9kZSgpICE9IHBhcmVu
dFN0eWxlLT53cml0aW5nTW9kZSgpKQotICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoSU5M
SU5FX0JMT0NLKTsKLQotICAgICAgICAvLyBBZnRlciBwZXJmb3JtaW5nIHRoZSBkaXNwbGF5IG11
dGF0aW9uLCBjaGVjayB0YWJsZSByb3dzLiAgV2UgZG8gbm90IGhvbm9yIHBvc2l0aW9uOnJlbGF0
aXZlIG9uCi0gICAgICAgIC8vIHRhYmxlIHJvd3Mgb3IgY2VsbHMuICBUaGlzIGhhcyBiZWVuIGVz
dGFibGlzaGVkIGluIENTUzIuMSAoYW5kIGNhdXNlZCBhIGNyYXNoIGluIGNvbnRhaW5pbmdCbG9j
aygpCi0gICAgICAgIC8vIG9uIHNvbWUgc2l0ZXMpLgotICAgICAgICBpZiAoKHN0eWxlLT5kaXNw
bGF5KCkgPT0gVEFCTEVfSEVBREVSX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVf
Uk9XX0dST1VQCi0gICAgICAgICAgICAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9GT09U
RVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cpICYmCi0gICAgICAgICAg
ICAgc3R5bGUtPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbikKLSAgICAgICAgICAgIHN0
eWxlLT5zZXRQb3NpdGlvbihTdGF0aWNQb3NpdGlvbik7Ci0KLSAgICAgICAgLy8gd3JpdGluZy1t
b2RlIGRvZXMgbm90IGFwcGx5IHRvIHRhYmxlIHJvdyBncm91cHMsIHRhYmxlIGNvbHVtbiBncm91
cHMsIHRhYmxlIHJvd3MsIGFuZCB0YWJsZSBjb2x1bW5zLgotICAgICAgICAvLyBGSVhNRTogVGFi
bGUgY2VsbHMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUgcGVycGVuZGljdWxhciBvciBmbGlwcGVk
IHdpdGggcmVzcGVjdCB0byB0aGUgdGFibGUsIHRob3VnaC4KLSAgICAgICAgaWYgKHN0eWxlLT5k
aXNwbGF5KCkgPT0gVEFCTEVfQ09MVU1OIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfQ09M
VU1OX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfRk9PVEVSX0dST1VQCi0gICAg
ICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0hFQURFUl9HUk9VUCB8fCBzdHls
ZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVyB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JP
V19HUk9VUAotICAgICAgICAgICAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9DRUxMKQot
ICAgICAgICAgICAgc3R5bGUtPnNldFdyaXRpbmdNb2RlKHBhcmVudFN0eWxlLT53cml0aW5nTW9k
ZSgpKTsKLQotICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBibG9jay1m
bG93IG9uIGZsZXhpYmxlIGJveGVzIHlldCwgZGlzYWxsb3cgc2V0dGluZwotICAgICAgICAvLyBv
ZiBibG9jay1mbG93IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gVG9wVG9Cb3R0b21Xcml0aW5nTW9k
ZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2
NDE4IC0gRmxleGlibGUgYm94IHN1cHBvcnQuCi0gICAgICAgIGlmIChzdHlsZS0+d3JpdGluZ01v
ZGUoKSAhPSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlICYmIChzdHlsZS0+ZGlzcGxheSgpID09IEJP
WCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9CT1gpKQotICAgICAgICAgICAgc3R5bGUt
PnNldFdyaXRpbmdNb2RlKFRvcFRvQm90dG9tV3JpdGluZ01vZGUpOwotICAgIH0KLQotICAgIC8v
IE1ha2Ugc3VyZSBvdXIgei1pbmRleCB2YWx1ZSBpcyBvbmx5IGFwcGxpZWQgaWYgdGhlIG9iamVj
dCBpcyBwb3NpdGlvbmVkLgotICAgIGlmIChzdHlsZS0+cG9zaXRpb24oKSA9PSBTdGF0aWNQb3Np
dGlvbikKLSAgICAgICAgc3R5bGUtPnNldEhhc0F1dG9aSW5kZXgoKTsKLQotICAgIC8vIEF1dG8g
ei1pbmRleCBiZWNvbWVzIDAgZm9yIHRoZSByb290IGVsZW1lbnQgYW5kIHRyYW5zcGFyZW50IG9i
amVjdHMuICBUaGlzIHByZXZlbnRzCi0gICAgLy8gY2FzZXMgd2hlcmUgb2JqZWN0cyB0aGF0IHNo
b3VsZCBiZSBibGVuZGVkIGFzIGEgc2luZ2xlIHVuaXQgZW5kIHVwIHdpdGggYSBub24tdHJhbnNw
YXJlbnQKLSAgICAvLyBvYmplY3Qgd2VkZ2VkIGluIGJldHdlZW4gdGhlbS4gIEF1dG8gei1pbmRl
eCBhbHNvIGJlY29tZXMgMCBmb3Igb2JqZWN0cyB0aGF0IHNwZWNpZnkgdHJhbnNmb3Jtcy9tYXNr
cy9yZWZsZWN0aW9ucy4KLSAgICBpZiAoc3R5bGUtPmhhc0F1dG9aSW5kZXgoKSAmJiAoKGUgJiYg
ZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkgfHwgc3R5bGUtPm9wYWNpdHko
KSA8IDEuMGYKLSAgICAgICAgfHwgc3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgp
IHx8IHN0eWxlLT5oYXNNYXNrKCkgfHwgc3R5bGUtPmJveFJlZmxlY3QoKSB8fCBzdHlsZS0+aGFz
RmlsdGVyKCkKLSNpZmRlZiBGSVhFRF9QT1NJVElPTl9DUkVBVEVTX1NUQUNLSU5HX0NPTlRFWFQK
LSAgICAgICAgfHwgc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbgotI2VuZGlmCi0j
aWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElORykKLSAgICAgICAgLy8gVG91Y2ggb3ZlcmZsb3cg
c2Nyb2xsaW5nIGNyZWF0ZXMgYSBzdGFja2luZyBjb250ZXh0LgotICAgICAgICB8fCBzdHlsZS0+
dXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpCi0jZW5kaWYKLSAgICAgICAgKSkKLSAgICAgICAg
c3R5bGUtPnNldFpJbmRleCgwKTsKLQotICAgIC8vIFRleHRhcmVhIGNvbnNpZGVycyBvdmVyZmxv
dyB2aXNpYmxlIGFzIGF1dG8uCi0gICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRh
ZykpIHsKLSAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0g
T1ZJU0lCTEUgPyBPQVVUTyA6IHN0eWxlLT5vdmVyZmxvd1goKSk7Ci0gICAgICAgIHN0eWxlLT5z
ZXRPdmVyZmxvd1koc3R5bGUtPm92ZXJmbG93WSgpID09IE9WSVNJQkxFID8gT0FVVE8gOiBzdHls
ZS0+b3ZlcmZsb3dZKCkpOwotICAgIH0KLQotICAgIC8vIEZpbmFsbHkgdXBkYXRlIG91ciB0ZXh0
IGRlY29yYXRpb25zIGluIGVmZmVjdCwgYnV0IGRvbid0IGFsbG93IHRleHQtZGVjb3JhdGlvbiB0
byBwZXJjb2xhdGUgdGhyb3VnaAotICAgIC8vIHRhYmxlcywgaW5saW5lIGJsb2NrcywgaW5saW5l
IHRhYmxlcywgcnVuLWlucywgb3Igc2hhZG93IERPTS4KLSAgICBpZiAoc3R5bGUtPmRpc3BsYXko
KSA9PSBUQUJMRSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9UQUJMRSB8fCBzdHlsZS0+
ZGlzcGxheSgpID09IFJVTl9JTgotICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElO
RV9CTE9DSyB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9CT1ggfHwgaXNBdFNoYWRvd0Jv
dW5kYXJ5KGUpKQotICAgICAgICBzdHlsZS0+c2V0VGV4dERlY29yYXRpb25zSW5FZmZlY3Qoc3R5
bGUtPnRleHREZWNvcmF0aW9uKCkpOwotICAgIGVsc2UKLSAgICAgICAgc3R5bGUtPmFkZFRvVGV4
dERlY29yYXRpb25zSW5FZmZlY3Qoc3R5bGUtPnRleHREZWNvcmF0aW9uKCkpOwotCi0gICAgLy8g
SWYgZWl0aGVyIG92ZXJmbG93IHZhbHVlIGlzIG5vdCB2aXNpYmxlLCBjaGFuZ2UgdG8gYXV0by4K
LSAgICBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9NQVJRVUVFICYmIHN0eWxlLT5vdmVyZmxv
d1koKSAhPSBPTUFSUVVFRSkKLSAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPTUFSUVVFRSk7
Ci0gICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9NQVJRVUVFICYmIHN0eWxlLT5v
dmVyZmxvd1goKSAhPSBPTUFSUVVFRSkKLSAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPTUFS
UVVFRSk7Ci0gICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9WSVNJQkxFICYmIHN0
eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJMRSkKLSAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93
WChPQVVUTyk7Ci0gICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9WSVNJQkxFICYm
IHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSkKLSAgICAgICAgc3R5bGUtPnNldE92ZXJm
bG93WShPQVVUTyk7Ci0KLSAgICAvLyBUYWJsZSByb3dzLCBzZWN0aW9ucyBhbmQgdGhlIHRhYmxl
IGl0c2VsZiB3aWxsIHN1cHBvcnQgb3ZlcmZsb3c6aGlkZGVuIGFuZCB3aWxsIGlnbm9yZSBzY3Jv
bGwvYXV0by4KLSAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0YWJsZSBzZWN0aW9ucyB3aWxsIHN1
cHBvcnQgYXV0byBhbmQgc2Nyb2xsLgotICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxF
IHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFIHx8Ci0gICAgICAgIHN0eWxlLT5k
aXNwbGF5KCkgPT0gVEFCTEVfUk9XX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVf
Uk9XKSB7Ci0gICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUgJiYgc3R5
bGUtPm92ZXJmbG93WCgpICE9IE9ISURERU4pCi0gICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZs
b3dYKE9WSVNJQkxFKTsKLSAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJM
RSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT0hJRERFTikKLSAgICAgICAgICAgIHN0eWxlLT5z
ZXRPdmVyZmxvd1koT1ZJU0lCTEUpOwotICAgIH0KLQotICAgIC8vIE1lbnVsaXN0cyBzaG91bGQg
aGF2ZSB2aXNpYmxlIG92ZXJmbG93Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT1ZJU0lCTEUpOwotICAg
ICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9WSVNJQkxFKTsKLSAgICB9Ci0KLSAgICAvLyBDdWxs
IG91dCBhbnkgdXNlbGVzcyBsYXllcnMgYW5kIGFsc28gcmVwZWF0IHBhdHRlcm5zIGludG8gYWRk
aXRpb25hbCBsYXllcnMuCi0gICAgc3R5bGUtPmFkanVzdEJhY2tncm91bmRMYXllcnMoKTsKLSAg
ICBzdHlsZS0+YWRqdXN0TWFza0xheWVycygpOwotCi0gICAgLy8gRG8gdGhlIHNhbWUgZm9yIGFu
aW1hdGlvbnMgYW5kIHRyYW5zaXRpb25zLgotICAgIHN0eWxlLT5hZGp1c3RBbmltYXRpb25zKCk7
Ci0gICAgc3R5bGUtPmFkanVzdFRyYW5zaXRpb25zKCk7Ci0KLSAgICAvLyBJbXBvcnRhbnQ6IElu
dHJpbnNpYyBtYXJnaW5zIGdldCBhZGRlZCB0byBjb250cm9scyBiZWZvcmUgdGhlIHRoZW1lIGhh
cyBhZGp1c3RlZCB0aGUgc3R5bGUsIHNpbmNlIHRoZSB0aGVtZSB3aWxsCi0gICAgLy8gYWx0ZXIg
Zm9udHMgYW5kIGhlaWdodHMvd2lkdGhzLgotICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkgJiYgc3R5bGUtPmZvbnRTaXplKCkgPj0gMTEpIHsKLSAgICAgICAgLy8gRG9uJ3Qg
YXBwbHkgaW50cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9ucy4gIFRoZSBkZXNpZ25lciBr
bm93cyBob3cgYmlnIHRoZSBpbWFnZXMgYXJlLAotICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIHRy
ZWF0IGFsbCBpbWFnZSBidXR0b25zIGFzIHRob3VnaCB0aGV5IHdlcmUgZXhwbGljaXRseSBzaXpl
ZC4KLSAgICAgICAgaWYgKCFlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSB8fCAhc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGUpLT5pc0ltYWdlQnV0dG9uKCkpCi0gICAgICAgICAgICBhZGRJ
bnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKLSAgICB9Ci0KLSAgICAvLyBMZXQgdGhlIHRoZW1lIGFs
c28gaGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0aGUgc3R5bGUuCi0gICAgaWYgKHN0eWxlLT5o
YXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRq
dXN0U3R5bGUodGhpcywgc3R5bGUsIGUsIG1faGFzVUFBcHBlYXJhbmNlLCBtX2JvcmRlckRhdGEs
IG1fYmFja2dyb3VuZERhdGEsIG1fYmFja2dyb3VuZENvbG9yKTsKLQotICAgIC8vIElmIHdlIGhh
dmUgZmlyc3QtbGV0dGVyIHBzZXVkbyBzdHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCi0g
ICAgaWYgKHN0eWxlLT5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQotICAgICAgICBzdHls
ZS0+c2V0VW5pcXVlKCk7Ci0KLSAgICAvLyBGSVhNRTogd2hlbiBkcm9wcGluZyB0aGUgLXdlYmtp
dCBwcmVmaXggb24gdHJhbnNmb3JtLXN0eWxlLCB3ZSBzaG91bGQgYWxzbyBoYXZlIG9wYWNpdHkg
PCAxIGNhdXNlIGZsYXR0ZW5pbmcuCi0gICAgaWYgKHN0eWxlLT5wcmVzZXJ2ZXMzRCgpICYmIChz
dHlsZS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUKLSAgICAgICAgfHwgc3R5bGUtPm92ZXJmbG93
WSgpICE9IE9WSVNJQkxFCi0gICAgICAgIHx8IHN0eWxlLT5oYXNGaWx0ZXIoKSkpCi0gICAgICAg
IHN0eWxlLT5zZXRUcmFuc2Zvcm1TdHlsZTNEKFRyYW5zZm9ybVN0eWxlM0RGbGF0KTsKLQotI2lm
IEVOQUJMRShTVkcpCi0gICAgaWYgKGUgJiYgZS0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAg
Ly8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL21hc2tpbmcuaHRtbCNPdmVyZmxvd1By
b3BlcnR5Ci0gICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCkKLSAgICAg
ICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koT0hJRERFTik7Ci0gICAgICAgIGVsc2UgaWYgKHN0
eWxlLT5vdmVyZmxvd1koKSA9PSBPQVVUTykKLSAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxv
d1koT1ZJU0lCTEUpOwotCi0gICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT1NDUk9M
TCkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT0hJRERFTik7Ci0gICAgICAgIGVs
c2UgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPQVVUTykKLSAgICAgICAgICAgIHN0eWxlLT5z
ZXRPdmVyZmxvd1goT1ZJU0lCTEUpOwotCi0gICAgICAgIC8vIE9ubHkgdGhlIHJvb3QgPHN2Zz4g
ZWxlbWVudCBpbiBhbiBTVkcgZG9jdW1lbnQgZnJhZ21lbnQgdHJlZSBob25vcnMgY3NzIHBvc2l0
aW9uCi0gICAgICAgIGlmICghKGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykgJiYgZS0+
cGFyZW50Tm9kZSgpICYmICFlLT5wYXJlbnROb2RlKCktPmlzU1ZHRWxlbWVudCgpKSkKLSAgICAg
ICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFBvc2l0aW9uKCkp
OwotCi0gICAgICAgIC8vIFJlbmRlclNWR1Jvb3QgaGFuZGxlcyB6b29taW5nIGZvciB0aGUgd2hv
bGUgU1ZHIHN1YnRyZWUsIHNvIGZvcmVpZ25PYmplY3QgY29udGVudCBzaG91bGQKLSAgICAgICAg
Ly8gbm90IGJlIHNjYWxlZCBhZ2Fpbi4KLSAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OmZvcmVpZ25PYmplY3RUYWcpKQotICAgICAgICAgICAgc3R5bGUtPnNldEVmZmVjdGl2ZVpv
b20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgIH0KLSNlbmRpZgotfQotCi1ib29s
IFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogcmVnaW9uRWxlbWVudCkK
LXsKLSAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0LXJlZ2lv
biBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LAotICAgIC8vIHNv
IGFsbCByZWdpb24gcnVsZXMgYXJlIGdsb2JhbCBieSBkZWZhdWx0LiBWZXJpZnkgd2hldGhlciB0
aGF0IGNhbiBzdGFuZCBvciBuZWVkcyBjaGFuZ2luZy4KLQotICAgIHVuc2lnbmVkIHJ1bGVzU2l6
ZSA9IG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlc1NpemU7ICsraSkgewotICAgICAgICBB
U1NFUlQobV9hdXRob3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5y
dWxlU2V0LmdldCgpKTsKLSAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IobV9hdXRob3JT
dHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvciwgcmVnaW9u
RWxlbWVudCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV91
c2VyU3R5bGUpIHsKLSAgICAgICAgcnVsZXNTaXplID0gbV91c2VyU3R5bGUtPm1fcmVnaW9uU2Vs
ZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcnVsZXNTaXplOyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3VzZXJTdHlsZS0+bV9y
ZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpKTsKLSAgICAgICAg
ICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKG1fdXNlclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9y
c0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKLXsKLSAgICBpZiAoIW1fZm9u
dERpcnR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7
Ci0gICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUp
OwotICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsKLSAgICBt
X3N0eWxlLT5mb250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKLSAgICBtX2ZvbnREaXJ0eSA9
IGZhbHNlOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3Vu
ZCgpCi17Ci0gICAgbV9oYXNVQUFwcGVhcmFuY2UgPSBtX3N0eWxlLT5oYXNBcHBlYXJhbmNlKCk7
Ci0gICAgaWYgKG1faGFzVUFBcHBlYXJhbmNlKSB7Ci0gICAgICAgIG1fYm9yZGVyRGF0YSA9IG1f
c3R5bGUtPmJvcmRlcigpOwotICAgICAgICBtX2JhY2tncm91bmREYXRhID0gKm1fc3R5bGUtPmJh
Y2tncm91bmRMYXllcnMoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBtX3N0eWxlLT5i
YWNrZ3JvdW5kQ29sb3IoKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0
eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIHVuc2lnbmVkIHJ1
bGVzVG9JbmNsdWRlKQotewotICAgIHJldHVybiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChl
LCBOT1BTRVVETywgcnVsZXNUb0luY2x1ZGUpOwotfQotCi1QYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBQ
c2V1ZG9JZCBwc2V1ZG9JZCwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUpCi17Ci0gICAgaWYgKCFl
IHx8ICFlLT5kb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBtX2NoZWNrZXIuc2V0Q29sbGVjdGluZ1J1bGVzT25seSh0cnVlKTsKLQot
ICAgIGluaXRFbGVtZW50KGUpOwotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgMCwgcHNldWRv
SWQpOwotCi0gICAgTWF0Y2hSZXN1bHQgZHVtbXk7Ci0gICAgaWYgKHJ1bGVzVG9JbmNsdWRlICYg
VUFBbmRVc2VyQ1NTUnVsZXMpIHsKLSAgICAgICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJv
bSB0aGUgdXNlciBhZ2VudCBzaGVldC4KLSAgICAgICAgbWF0Y2hVQVJ1bGVzKGR1bW15KTsKLQot
ICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KLSAgICAgICAgaWYgKG1f
bWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICAgICAgbWF0Y2hVc2VyUnVsZXMoZHVt
bXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7Ci0gICAgfQotCi0gICAgaWYgKG1f
bWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIChydWxlc1RvSW5jbHVkZSAmIEF1dGhvckNTU1J1
bGVzKSkgewotICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0gIShydWxlc1RvSW5jbHVkZSAmIENy
b3NzT3JpZ2luQ1NTUnVsZXMpOwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRo
b3Igc2hlZXRzLgotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVk
ZSAmIEVtcHR5Q1NTUnVsZXMpOwotCi0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsK
LSAgICB9Ci0KLSAgICBtX2NoZWNrZXIuc2V0Q29sbGVjdGluZ1J1bGVzT25seShmYWxzZSk7Ci0K
LSAgICByZXR1cm4gbV9ydWxlTGlzdC5yZWxlYXNlKCk7Ci19Ci0KLWlubGluZSBib29sIFN0eWxl
UmVzb2x2ZXI6OmNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSkKLXsKLSAgICBtX2R5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsK
LSAgICBtX2NoZWNrZXIuY2xlYXJIYXNVbmtub3duUHNldWRvRWxlbWVudHMoKTsKLQotICAgIGlm
IChydWxlRGF0YS5oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSkgewotICAgICAgICAvLyBXZSBr
bm93IHRoaXMgc2VsZWN0b3IgZG9lcyBub3QgaW5jbHVkZSBhbnkgcHNldWRvIGVsZW1lbnRzLgot
ICAgICAgICBpZiAobV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8pCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIFdlIGtub3cgYSBzdWZmaWNpZW50bHkgc2lt
cGxlIHNpbmdsZSBwYXJ0IHNlbGVjdG9yIG1hdGNoZXMgc2ltcGx5IGJlY2F1c2Ugd2UgZm91bmQg
aXQgZnJvbSB0aGUgcnVsZSBoYXNoLgotICAgICAgICAvLyBUaGlzIGlzIGxpbWl0ZWQgdG8gSFRN
TCBvbmx5IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIG5hbWVzcGFjZS4KLSAgICAgICAg
aWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVI
YXNoKCkgJiYgbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmICgh
cnVsZURhdGEuaGFzTXVsdGlwYXJ0U2VsZWN0b3IoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmICghU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKG1f
ZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1
dGVTZWxlY3RvcihtX2VsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9jaGVja2VyLmZhc3RDaGVja1NlbGVjdG9y
KHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCk7Ci0gICAgfQotCi0gICAgLy8gU2xvdyBw
YXRoLgotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4
dChydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRl
ZE1hdGNoRW5hYmxlZCk7Ci0gICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdHlsZSgpOwotICAg
IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlID0gbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2Rl
LT5yZW5kZXJTdHlsZSgpIDogMDsKLSAgICBjb250ZXh0LnNjb3BlID0gc2NvcGU7Ci0gICAgU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0
b3IoY29udGV4dCwgbV9keW5hbWljUHNldWRvKTsKLSAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JD
aGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
bV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8gJiYgbV9jaGVja2VyLnBzZXVkb1N0
eWxlKCkgIT0gbV9keW5hbWljUHNldWRvKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TZWxlY3RvcihD
U1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpCi17Ci0g
ICAgaWYgKCFyZWdpb25TZWxlY3RvciB8fCAhcmVnaW9uRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgbV9jaGVja2VyLmNsZWFySGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCk7
Ci0gICAgbV9jaGVja2VyLnNldFBzZXVkb1N0eWxlKE5PUFNFVURPKTsKLQotICAgIGZvciAoQ1NT
U2VsZWN0b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4
dChzKSkKLSAgICAgICAgaWYgKG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHMsIHJlZ2lvbkVsZW1l
bnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0g
ICAgCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3Bl
cyhTdHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlc2hlZXQsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKQot
ewotICAgIEFTU0VSVCghc3R5bGVzaGVldC0+aXNMb2FkaW5nKCkpOwotCi0gICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+ID4mIGltcG9ydFJ1bGVzID0gc3R5bGVzaGVldC0+
aW1wb3J0UnVsZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFpbXBvcnRSdWxlc1tpXS0+c3R5bGVTaGVldCgp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghZGV0ZXJtaW5lU3R5bGVzaGVl
dFNlbGVjdG9yU2NvcGVzKGltcG9ydFJ1bGVzW2ldLT5zdHlsZVNoZWV0KCksIGlkU2NvcGVzLCBj
bGFzc1Njb3BlcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBydWxlcyA9IHN0eWxlc2hlZXQtPmNo
aWxkUnVsZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXMuc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgU3R5bGVSdWxlQmFzZSogcnVsZSA9IHJ1bGVzW2ldLmdldCgpOwotICAg
ICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkgewotICAgICAgICAgICAgU3R5bGVSdWxlKiBz
dHlsZVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxlKTsKLSAgICAgICAgICAgIGlm
ICghU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVTZWxlY3RvclNjb3BlcyhzdHlsZVJ1bGUtPnNl
bGVjdG9yTGlzdCgpLCBpZFNjb3BlcywgY2xhc3NTY29wZXMpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IAotICAgICAgICAv
LyBGSVhNRTogTWVkaWEgcnVsZXMgYW5kIG1heWJlIHNvbWUgb3RoZXJzIGNvdWxkIGJlIGFsbG93
ZWQuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NlbGVjdG9yTWF0Y2hpbmdIVE1M
QmFzZWRPblJ1bGVIYXNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yTmFtZXNwYWNlID0gc2VsZWN0b3ItPnRhZygpLm5hbWVz
cGFjZVVSSSgpOwotICAgIGlmIChzZWxlY3Rvck5hbWVzcGFjZSAhPSBzdGFyQXRvbSAmJiBzZWxl
Y3Rvck5hbWVzcGFjZSAhPSB4aHRtbE5hbWVzcGFjZVVSSSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Tm9uZSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHNlbGVjdG9yLT50YWcoKSAhPSBzdGFyQXRvbSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNl
dWRvQ2xhc3NTZWxlY3RvcihzZWxlY3RvcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJl
dHVybiBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgfHwgc2VsZWN0b3ItPm1f
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2Vs
ZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvcikKLXsKLSAgICBDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNl
bGVjdG9yLT5zZWxlY3Rvckxpc3QoKTsKLSAgICBpZiAoIXNlbGVjdG9yTGlzdCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0
b3JMaXN0LT5maXJzdCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxp
c3Q6Om5leHQoc3ViU2VsZWN0b3IpKSB7Ci0gICAgICAgIGlmIChzdWJTZWxlY3Rvci0+aXNBdHRy
aWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzQ29tbW9uQXR0cmlidXRlU2Vs
ZWN0b3JBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQotewotICAgIC8v
IFRoZXNlIGFyZSBleHBsaWNpdGx5IHRlc3RlZCBmb3IgZXF1YWxpdHkgaW4gY2FuU2hhcmVTdHls
ZVdpdGhFbGVtZW50LgotICAgIHJldHVybiBhdHRyaWJ1dGUgPT0gdHlwZUF0dHIgfHwgYXR0cmli
dXRlID09IHJlYWRvbmx5QXR0cjsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zVW5j
b21tb25BdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0g
ICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsK
LSAgICAgICAgLy8gQWxsb3cgY2VydGFpbiBjb21tb24gYXR0cmlidXRlcyAodXNlZCBpbiB0aGUg
ZGVmYXVsdCBzdHlsZSkgaW4gdGhlIHNlbGVjdG9ycyB0aGF0IG1hdGNoIHRoZSBjdXJyZW50IGVs
ZW1lbnQuCi0gICAgICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpICYmICFp
c0NvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yQXR0cmlidXRlKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHNlbGVjdG9yTGlzdENvbnRh
aW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9y
OjpTdWJTZWxlY3RvcikgewotICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlz
dG9yeSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3Ig
KDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAg
ICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0
ZVNlbGVjdG9yKHNlbGVjdG9yKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJ1bGVEYXRhOjpSdWxlRGF0YShTdHlsZVJ1bGUqIHJ1bGUs
IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgdW5zaWduZWQgcG9zaXRpb24sIGJvb2wgaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJl
Z2lvblJ1bGUpCi0gICAgOiBtX3J1bGUocnVsZSkKLSAgICAsIG1fc2VsZWN0b3Ioc2VsZWN0b3Ip
Ci0gICAgLCBtX3NwZWNpZmljaXR5KHNlbGVjdG9yLT5zcGVjaWZpY2l0eSgpKQotICAgICwgbV9w
b3NpdGlvbihwb3NpdGlvbikKLSAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNhblVz
ZUZhc3RDaGVja1NlbGVjdG9yICYmIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2Vs
ZWN0b3Ioc2VsZWN0b3IpKQotICAgICwgbV9oYXNNdWx0aXBhcnRTZWxlY3RvcighIXNlbGVjdG9y
LT50YWdIaXN0b3J5KCkpCi0gICAgLCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1M
QmFzZWRPblJ1bGVIYXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goc2Vs
ZWN0b3IpKQotICAgICwgbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoV2ViQ29y
ZTo6Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKLSAgICAsIG1f
bGlua01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoc2Vs
ZWN0b3IpKQotICAgICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4pCi0gICAgLCBtX2lzSW5SZWdpb25SdWxlKGluUmVnaW9uUnVsZSkKLXsKLSAg
ICBTZWxlY3RvckNoZWNrZXI6OmNvbGxlY3RJZGVudGlmaWVySGFzaGVzKG1fc2VsZWN0b3IsIG1f
ZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcywgbWF4aW11bUlkZW50aWZpZXJDb3Vu
dCk7Ci19Ci0KLVJ1bGVTZXQ6OlJ1bGVTZXQoKQotICAgIDogbV9ydWxlQ291bnQoMCkKLSAgICAs
IG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCh0cnVlKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZv
aWQgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJiBm
ZWF0dXJlcywgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlmIChzZWxlY3Rv
ci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCi0gICAgICAgIGZlYXR1cmVzLmlkc0luUnVs
ZXMuYWRkKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Ci0gICAgaWYgKHNlbGVjdG9yLT5pc0F0
dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgIGZlYXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoc2Vs
ZWN0b3ItPmF0dHJpYnV0ZSgpLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgc3dpdGNoIChzZWxl
Y3Rvci0+cHNldWRvVHlwZSgpKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RM
aW5lOgotICAgICAgICBmZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXMgPSB0cnVlOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9CZWZvcmU6Ci0gICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQWZ0ZXI6Ci0gICAgICAgIGZlYXR1cmVzLnVzZXNCZWZvcmVBZnRl
clJ1bGVzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvTGluazoKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgotICAgICAgICBm
ZWF0dXJlcy51c2VzTGlua1J1bGVzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb2xsZWN0RmVhdHVy
ZXNGcm9tUnVsZURhdGEoU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBS
dWxlRGF0YSYgcnVsZURhdGEpCi17Ci0gICAgYm9vbCBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IGZh
bHNlOwotICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0b3Io
KTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAg
ICBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoZmVhdHVyZXMsIHNlbGVjdG9yKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCA9IHNlbGVjdG9y
LT5zZWxlY3Rvckxpc3QoKSkgewotICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2Vs
ZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9
IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJTZWxlY3RvcikpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIWZvdW5kU2libGluZ1NlbGVjdG9yICYmIHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3Rvcigp
KQotICAgICAgICAgICAgICAgICAgICBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKGZlYXR1cmVzLCBzdWJTZWxl
Y3Rvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIWZvdW5kU2libGluZ1Nl
bGVjdG9yICYmIHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQotICAgICAgICAgICAgZm91
bmRTaWJsaW5nU2VsZWN0b3IgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoZm91bmRTaWJsaW5nU2Vs
ZWN0b3IpCi0gICAgICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcy5hcHBlbmQoU3R5bGVSZXNvbHZl
cjo6UnVsZUZlYXR1cmUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvcigpLCBydWxl
RGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpKTsKLSAgICBpZiAocnVsZURhdGEuY29u
dGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgIGZlYXR1cmVzLnVuY29t
bW9uQXR0cmlidXRlUnVsZXMuYXBwZW5kKFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlKHJ1bGVE
YXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSwgcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbigpKSk7Ci19Ci0gICAgCi12b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9t
aWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYXRhJiBydWxl
RGF0YSkKLXsKLSAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuOwotICAgIE93blB0cjxWZWN0
b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT5z
ZWNvbmQ7Ci0gICAgaWYgKCFydWxlcykKLSAgICAgICAgcnVsZXMgPSBhZG9wdFB0cihuZXcgVmVj
dG9yPFJ1bGVEYXRhPik7Ci0gICAgcnVsZXMtPmFwcGVuZChydWxlRGF0YSk7Ci19Ci0KLXZvaWQg
UnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxlY3Rvciwg
Ym9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVj
dG9yLCBib29sIGluUmVnaW9uUnVsZSkKLXsKLSAgICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBz
ZWxlY3RvciwgbV9ydWxlQ291bnQrKywgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY2FuVXNl
RmFzdENoZWNrU2VsZWN0b3IsIGluUmVnaW9uUnVsZSk7Ci0gICAgY29sbGVjdEZlYXR1cmVzRnJv
bVJ1bGVEYXRhKG1fZmVhdHVyZXMsIHJ1bGVEYXRhKTsKLQotICAgIGlmIChzZWxlY3Rvci0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9y
LT52YWx1ZSgpLmltcGwoKSwgbV9pZFJ1bGVzLCBydWxlRGF0YSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykg
ewotICAgICAgICBhZGRUb1J1bGVTZXQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX2NsYXNz
UnVsZXMsIHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc2VsZWN0
b3ItPmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkgewotICAgICAgICBhZGRUb1J1bGVTZXQoc2Vs
ZWN0b3ItPnZhbHVlKCkuaW1wbCgpLCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcywgcnVsZURh
dGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChTZWxlY3RvckNoZWNrZXI6Omlz
Q29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWxlY3RvcikpIHsKLSAgICAgICAgc3dpdGNoIChz
ZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0xpbms6Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6Ci0gICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAgICAgICBtX2xpbmtQc2V1
ZG9DbGFzc1J1bGVzLmFwcGVuZChydWxlRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgotICAgICAgICAgICAgbV9mb2N1c1Bz
ZXVkb0NsYXNzUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bE5hbWUgPSBzZWxlY3Rvci0+dGFnKCkubG9jYWxOYW1lKCk7Ci0gICAgaWYgKGxvY2FsTmFtZSAh
PSBzdGFyQXRvbSkgewotICAgICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGwoKSwgbV90
YWdSdWxlcywgcnVsZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fdW5pdmVy
c2FsUnVsZXMuYXBwZW5kKHJ1bGVEYXRhKTsKLX0KLQotdm9pZCBSdWxlU2V0OjphZGRQYWdlUnVs
ZShTdHlsZVJ1bGVQYWdlKiBydWxlKQotewotICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChydWxlKTsK
LX0KLQotdm9pZCBSdWxlU2V0OjphZGRSZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lvbiogcmVnaW9u
UnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQotewotICAgIE93blB0cjxSdWxl
U2V0PiByZWdpb25SdWxlU2V0ID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgLy8gVGhlIHJlZ2lv
biBydWxlIHNldCBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQgdGhlIHBvc2l0aW9uIGluc2lkZSB0
aGUgcGFyZW50IHJ1bGUgc2V0LgotICAgIC8vIE90aGVyd2lzZSwgdGhlIHJ1bGVzIGluc2lkZSBy
ZWdpb24gYmxvY2sgbWlnaHQgYmUgaW5jb3JyZWN0bHkgcG9zaXRpb25lZCBiZWZvcmUgb3RoZXIg
c2ltaWxhciBydWxlcyBmcm9tCi0gICAgLy8gdGhlIHN0eWxlc2hlZXQgdGhhdCBjb250YWlucyB0
aGUgcmVnaW9uIGJsb2NrLgotICAgIHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50ID0gbV9ydWxl
Q291bnQ7Ci0KLSAgICAvLyBDb2xsZWN0IHRoZSByZWdpb24gcnVsZXMgaW50byBhIHJ1bGUgc2V0
Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0g
cmVnaW9uUnVsZS0+Y2hpbGRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
aGlsZFJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0eWxlUnVsZUJhc2UqIHJlZ2lvblN0
eWxpbmdSdWxlID0gY2hpbGRSdWxlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKHJlZ2lvblN0eWxp
bmdSdWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgcmVnaW9uUnVsZVNldC0+YWRkU3R5
bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSwgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgfQotICAgIC8vIFVwZGF0ZSB0
aGUgImdsb2JhbCIgcnVsZSBjb3VudCBzbyB0aGF0IHByb3BlciBvcmRlciBpcyBtYWludGFpbmVk
Ci0gICAgbV9ydWxlQ291bnQgPSByZWdpb25SdWxlU2V0LT5tX3J1bGVDb3VudDsKLQotICAgIG1f
cmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXBwZW5kKFJ1bGVTZXRTZWxlY3RvclBhaXIocmVn
aW9uUnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSwgcmVnaW9uUnVsZVNldC5yZWxlYXNlKCkp
KTsKLX0KLQotdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0SW50ZXJu
YWwqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlU2VsZWN0b3IsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQotewotICAgIEFT
U0VSVChzaGVldCk7Ci0KLSAgICAvLyBObyBtZWRpYSBpbXBsaWVzICJhbGwiLCBidXQgaWYgYSBt
ZWRpYSBsaXN0IGV4aXN0cyBpdCBtdXN0Ci0gICAgLy8gY29udGFpbiBvdXIgY3VycmVudCBtZWRp
dW0KLSAgICBpZiAoc2hlZXQtPm1lZGlhUXVlcmllcygpICYmICFtZWRpdW0uZXZhbChzaGVldC0+
bWVkaWFRdWVyaWVzKCksIHN0eWxlU2VsZWN0b3IpKQotICAgICAgICByZXR1cm47IC8vIHRoZSBz
dHlsZSBzaGVldCBkb2Vzbid0IGFwcGx5Ci0gICAgCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxT
dHlsZVJ1bGVJbXBvcnQ+ID4mIGltcG9ydFJ1bGVzID0gc2hlZXQtPmltcG9ydFJ1bGVzKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIFN0eWxlUnVsZUltcG9ydCogaW1wb3J0UnVsZSA9IGltcG9ydFJ1bGVzW2ldLmdldCgp
OwotICAgICAgICBpZiAoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpICYmICghaW1wb3J0UnVsZS0+
bWVkaWFRdWVyaWVzKCkgfHwgbWVkaXVtLmV2YWwoaW1wb3J0UnVsZS0+bWVkaWFRdWVyaWVzKCks
IHN0eWxlU2VsZWN0b3IpKSkKLSAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydFJ1
bGUtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHlsZVNlbGVjdG9yLCBzY29wZSk7Ci0gICAgfQot
ICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9IHN0eWxlU2VsZWN0b3IgJiYgc3R5
bGVTZWxlY3Rvci0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzaGVl
dC0+YmFzZVVSTCgpKTsKLQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4g
PiYgcnVsZXMgPSBzaGVldC0+Y2hpbGRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBydWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0g
cnVsZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAgQVNTRVJUKCFydWxlLT5pc0ltcG9ydFJ1bGUoKSk7
Ci0gICAgICAgIGlmIChydWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgYWRkU3R5bGVS
dWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLCAhc2NvcGUpOwotICAgICAgICBlbHNlIGlmIChydWxlLT5pc1BhZ2VSdWxlKCkpCi0gICAg
ICAgICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4ocnVsZSkpOwot
ICAgICAgICBlbHNlIGlmIChydWxlLT5pc01lZGlhUnVsZSgpKSB7Ci0gICAgICAgICAgICBTdHls
ZVJ1bGVNZWRpYSogbWVkaWFSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlTWVkaWEqPihydWxl
KTsKLQotICAgICAgICAgICAgaWYgKCghbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRp
dW0uZXZhbChtZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpLCBzdHlsZVNlbGVjdG9yKSkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBUcmF2ZXJzZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgQG1lZGlhIHJ1
bGUuCi0gICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+
JiBjaGlsZFJ1bGVzID0gbWVkaWFSdWxlLT5jaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2opIHsKLSAgICAg
ICAgICAgICAgICAgICAgU3R5bGVSdWxlQmFzZSogY2hpbGRSdWxlID0gY2hpbGRSdWxlc1tqXS5n
ZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUnVsZS0+aXNTdHlsZVJ1bGUoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1
bGUqPihjaGlsZFJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUpOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzUGFnZVJ1bGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2Uq
PihjaGlsZFJ1bGUpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRSdWxlLT5p
c0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUUoQlVHIDcyNDYxKTogV2UgZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMg
b2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzY29wZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFj
ZVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVGb250RmFjZSo+KGNoaWxkUnVsZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9u
dEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNl
bGVjdG9yLT5pbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNLZXlmcmFtZXNSdWxlKCkgJiYgc3R5bGVT
ZWxlY3RvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUg
cnVsZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcy
NDYyKTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRz
IGZvciB0aGUgbW9tZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVL
ZXlmcmFtZXMqPihjaGlsZFJ1bGUpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0gICAvLyBmb3IgcnVsZXMKLSAgICAgICAgICAgIH0gICAvLyBpZiBydWxlcwotICAg
ICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3Rvcikg
ewotICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCi0gICAgICAg
ICAgICAvLyBGSVhNRShCVUcgNzI0NjEpOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFjZSBydWxlcyBv
ZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgotICAgICAgICAgICAgaWYgKHNj
b3BlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29uc3QgU3R5bGVS
dWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNl
Kj4ocnVsZSk7Ci0gICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRk
Rm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7Ci0gICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5p
bnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwotICAgICAgICB9IGVsc2UgaWYgKHJ1
bGUtPmlzS2V5ZnJhbWVzUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FIChCVUcgNzI0NjIpOiBXZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3Bl
ZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCi0gICAgICAgICAgICBpZiAoc2NvcGUpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRL
ZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHJ1bGUpKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChydWxlLT5pc1JlZ2lvblJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0
LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgotICAg
ICAgICAgICAgaWYgKHNjb3BlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fYXV0
b1Nocmlua1RvRml0RW5hYmxlZCkKLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLX0KLQotdm9pZCBS
dWxlU2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiBydWxlLCBib29sIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lv
blJ1bGUpCi17Ci0gICAgZm9yIChDU1NTZWxlY3RvciogcyA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgp
LmZpcnN0KCk7IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCi0gICAgICAgIGFkZFJ1
bGUocnVsZSwgcywgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2Vs
ZWN0b3IsIGlzSW5SZWdpb25SdWxlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNocmlua01h
cFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1hcCYgbWFwKQotewotICAgIFJ1bGVTZXQ6
OkF0b21SdWxlTWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7Ci0gICAgZm9yIChSdWxlU2V0
OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5zaHJpbmtUb0ZpdCgpOwotfQotCi12b2lkIFJ1bGVTZXQ6
OnNocmlua1RvRml0KCkKLXsKLSAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV9pZFJ1bGVzKTsK
LSAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV9jbGFzc1J1bGVzKTsKLSAgICBzaHJpbmtNYXBW
ZWN0b3JzVG9GaXQobV90YWdSdWxlcyk7Ci0gICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1fc2hh
ZG93UHNldWRvRWxlbWVudFJ1bGVzKTsKLSAgICBtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzLnNocmlu
a1RvRml0KCk7Ci0gICAgbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXMuc2hyaW5rVG9GaXQoKTsKLSAg
ICBtX3VuaXZlcnNhbFJ1bGVzLnNocmlua1RvRml0KCk7Ci0gICAgbV9wYWdlUnVsZXMuc2hyaW5r
VG9GaXQoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdGhpcyBp
cyBtb3N0bHkgYm9yaW5nIHN0dWZmIG9uIGhvdyB0byBhcHBseSBhIGNlcnRhaW4gcnVsZSB0byB0
aGUgcmVuZGVyc3R5bGUuLi4KLQotTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0ludExl
bmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCi17Ci0gICAgcmV0
dXJuIHByaW1pdGl2ZVZhbHVlID8gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhl
ZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNp
b24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZSwgcm9vdFN0eWxlLCBtdWx0
aXBsaWVyKSA6IExlbmd0aChVbmRlZmluZWQpOwotfQotCi1MZW5ndGggU3R5bGVSZXNvbHZlcjo6
Y29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBs
aWVyKQotewotICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZSA/IHByaW1pdGl2ZVZhbHVlLT5jb252
ZXJ0VG9MZW5ndGg8Rml4ZWRGbG9hdENvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZy
YWN0aW9uQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlLCBy
b290U3R5bGUsIG11bHRpcGxpZXIpIDogTGVuZ3RoKFVuZGVmaW5lZCk7Ci19Ci0KLXRlbXBsYXRl
IDxib29sIGFwcGx5Rmlyc3Q+Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhj
b25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wg
aXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgYm9vbCBmaWx0ZXJSZWdpb25Qcm9wZXJ0
aWVzKQotewotICAgIEFTU0VSVCghZmlsdGVyUmVnaW9uUHJvcGVydGllcyB8fCBtX3JlZ2lvbkZv
clN0eWxpbmcpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxl
KTsKLQotICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUNv
dW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkg
ewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgY3VycmVudCA9IHByb3BlcnRpZXMtPnByb3Bl
cnR5QXQoaSk7Ci0gICAgICAgIGlmIChpc0ltcG9ydGFudCAhPSBjdXJyZW50LmlzSW1wb3J0YW50
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGluaGVyaXRlZE9ubHkgJiYg
IWN1cnJlbnQuaXNJbmhlcml0ZWQoKSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5
IHZhbHVlIGlzIGV4cGxpY2l0bHkgaW5oZXJpdGVkLCB3ZSBuZWVkIHRvIGFwcGx5IGZ1cnRoZXIg
bm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAvLyBhcyB0aGV5IG1pZ2h0IG92
ZXJyaWRlIHRoZSB2YWx1ZSBpbmhlcml0ZWQgaGVyZS4gRm9yIHRoaXMgcmVhc29uIHdlIGRvbid0
IGFsbG93IGRlY2xhcmF0aW9ucyB3aXRoCi0gICAgICAgICAgICAvLyBleHBsaWNpdGx5IGluaGVy
aXRlZCBwcm9wZXJ0aWVzIHRvIGJlIGNhY2hlZC4KLSAgICAgICAgICAgIEFTU0VSVCghY3VycmVu
dC52YWx1ZSgpLT5pc0luaGVyaXRlZFZhbHVlKCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSA9IGN1cnJlbnQuaWQoKTsK
LQotICAgICAgICBpZiAoZmlsdGVyUmVnaW9uUHJvcGVydGllcyAmJiAhU3R5bGVSZXNvbHZlcjo6
aXNWYWxpZFJlZ2lvblN0eWxlUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKGFwcGx5Rmlyc3QpIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKGZpcnN0Q1NTUHJvcGVydHkgPT0gQ1NTUHJvcGVydHlDb2xvciwgQ1NTX2NvbG9yX2lzX2Zp
cnN0X3Byb3BlcnR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKENTU1Byb3BlcnR5Wm9v
bSA9PSBDU1NQcm9wZXJ0eUNvbG9yICsgMTgsIENTU196b29tX2lzX2VuZF9vZl9maXJzdF9wcm9w
X3JhbmdlKTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKENTU1Byb3BlcnR5TGluZUhlaWdo
dCA9PSBDU1NQcm9wZXJ0eVpvb20gKyAxLCBDU1NfbGluZV9oZWlnaHRfaXNfYWZ0ZXJfem9vbSk7
Ci0gICAgICAgICAgICAvLyBnaXZlIHNwZWNpYWwgcHJpb3JpdHkgdG8gZm9udC14eHgsIGNvbG9y
IHByb3BlcnRpZXMsIGV0YwotICAgICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlM
aW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gd2Ug
YXBwbHkgbGluZS1oZWlnaHQgbGF0ZXIKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQpIHsKLSAgICAgICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9
IGN1cnJlbnQudmFsdWUoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVl
KCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByb3Bl
cnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShj
dXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7Ci0gICAgfQotICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkUHJvY2Vzc1J1bGUoY29va2llKTsKLX0KLQotdGVtcGxhdGUgPGJvb2wg
YXBwbHlGaXJzdD4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhj
b25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wgaXNJbXBvcnRhbnQsIGludCBzdGFy
dEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSkKLXsKLSAgICBpZiAoc3Rh
cnRJbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc3R5bGUtPmluc2lk
ZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBzdGFydElu
ZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IE1hdGNoZWRQcm9w
ZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
W2ldOwotICAgICAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IG1hdGNoZWRQcm9wZXJ0
aWVzLmxpbmtNYXRjaFR5cGU7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmlj
ZXIgdG8gcGFzcyB0aGVzZSBhcyBhcmd1bWVudHMgYnV0IHRoYXQgcmVxdWlyZXMgY2hhbmdlcyBp
biBtYW55IHBsYWNlcy4KLSAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
ID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rOwotICAgICAgICAg
ICAgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gbGlua01hdGNoVHlwZSAmIFNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwotCi0gICAgICAgICAgICBhcHBseVByb3BlcnRp
ZXM8YXBwbHlGaXJzdD4obWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hS
ZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgbWF0Y2hl
ZFByb3BlcnRpZXMuaXNJblJlZ2lvblJ1bGUpOwotICAgICAgICB9Ci0gICAgICAgIG1fYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlID0gdHJ1ZTsKLSAgICAgICAgbV9hcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZm9y
IChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewotICAgICAgICBjb25z
dCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRj
aGVkUHJvcGVydGllc1tpXTsKLSAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPGFwcGx5Rmlyc3Q+KG1h
dGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxl
c1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHksIG1hdGNoZWRQcm9wZXJ0aWVzLmlzSW5S
ZWdpb25SdWxlKTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIFN0eWxlUmVzb2x2ZXI6OmNvbXB1dGVN
YXRjaGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMqIHByb3BlcnRpZXMs
IHVuc2lnbmVkIHNpemUpCi17Ci0gICAgCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1l
bW9yeShwcm9wZXJ0aWVzLCBzaXplb2YoTWF0Y2hlZFByb3BlcnRpZXMpICogc2l6ZSk7Ci19Ci0K
LWJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJhbmdlcyYgYSwgY29u
c3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGIpCi17Ci0gICAgcmV0dXJuIGEuZmlyc3RV
QVJ1bGUgPT0gYi5maXJzdFVBUnVsZQotICAgICAgICAmJiBhLmxhc3RVQVJ1bGUgPT0gYi5sYXN0
VUFSdWxlCi0gICAgICAgICYmIGEuZmlyc3RBdXRob3JSdWxlID09IGIuZmlyc3RBdXRob3JSdWxl
Ci0gICAgICAgICYmIGEubGFzdEF1dGhvclJ1bGUgPT0gYi5sYXN0QXV0aG9yUnVsZQotICAgICAg
ICAmJiBhLmZpcnN0VXNlclJ1bGUgPT0gYi5maXJzdFVzZXJSdWxlCi0gICAgICAgICYmIGEubGFz
dFVzZXJSdWxlID09IGIubGFzdFVzZXJSdWxlOwotfQotCi1ib29sIG9wZXJhdG9yIT0oY29uc3Qg
U3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNo
UmFuZ2VzJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYgYSwgY29uc3QgU3R5bGVS
ZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGIpCi17Ci0gICAgcmV0dXJuIGEucHJvcGVydGll
cyA9PSBiLnByb3BlcnRpZXMgJiYgYS5saW5rTWF0Y2hUeXBlID09IGIubGlua01hdGNoVHlwZTsK
LX0KLQotYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0
aWVzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYgYikKLXsKLSAg
ICByZXR1cm4gIShhID09IGIpOwotfQotCi1jb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJv
cGVydGllc0NhY2hlSXRlbSogU3R5bGVSZXNvbHZlcjo6ZmluZEZyb21NYXRjaGVkUHJvcGVydGll
c0NhY2hlKHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCkKLXsK
LSAgICBBU1NFUlQoaGFzaCk7Ci0KLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRv
ciBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5maW5kKGhhc2gpOwotICAgIGlmIChpdCA9
PSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtJiBjYWNoZUl0ZW0gPSBpdC0+c2Vjb25kOwotCi0g
ICAgc2l6ZV90IHNpemUgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7Ci0g
ICAgaWYgKHNpemUgIT0gY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldICE9IGNhY2hlSXRlbS5t
YXRjaGVkUHJvcGVydGllc1tpXSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBp
ZiAoY2FjaGVJdGVtLnJhbmdlcyAhPSBtYXRjaFJlc3VsdC5yYW5nZXMpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiAmY2FjaGVJdGVtOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFk
ZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgdW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0KQotewotICAgIHN0YXRpYyB1bnNpZ25lZCBtYXRjaGVkRGVjbGFyYXRp
b25DYWNoZUFkZGl0aW9uc0JldHdlZW5Td2VlcHMgPSAxMDA7Ci0gICAgaWYgKCsrbV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAgPj0gbWF0Y2hlZERlY2xhcmF0
aW9uQ2FjaGVBZGRpdGlvbnNCZXR3ZWVuU3dlZXBzKSB7Ci0gICAgICAgIHN3ZWVwTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZSgpOwotICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlv
bnNTaW5jZUxhc3RTd2VlcCA9IDA7Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc2gpOwotICAgIE1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtIGNhY2hlSXRlbTsKLSAgICBjYWNoZUl0ZW0ubWF0Y2hl
ZFByb3BlcnRpZXMuYXBwZW5kKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKTsKLSAgICBj
YWNoZUl0ZW0ucmFuZ2VzID0gbWF0Y2hSZXN1bHQucmFuZ2VzOwotICAgIC8vIE5vdGUgdGhhdCB3
ZSBkb24ndCBjYWNoZSB0aGUgb3JpZ2luYWwgUmVuZGVyU3R5bGUgaW5zdGFuY2UuIEl0IG1heSBi
ZSBmdXJ0aGVyIG1vZGlmaWVkLgotICAgIC8vIFRoZSBSZW5kZXJTdHlsZSBpbiB0aGUgY2FjaGUg
aXMgcmVhbGx5IGp1c3QgYSBob2xkZXIgZm9yIHRoZSBzdWJzdHJ1Y3R1cmVzIGFuZCBuZXZlciB1
c2VkIGFzLWlzLgotICAgIGNhY2hlSXRlbS5yZW5kZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9u
ZShzdHlsZSk7Ci0gICAgY2FjaGVJdGVtLnBhcmVudFJlbmRlclN0eWxlID0gUmVuZGVyU3R5bGU6
OmNsb25lKHBhcmVudFN0eWxlKTsKLSAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYWRkKGhh
c2gsIGNhY2hlSXRlbSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6aW52YWxpZGF0ZU1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGUoKQotewotICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5jbGVh
cigpOwotfQotCi1zdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICAvLyBGSVhNRTogQ1NTUHJvcGVydHlX
ZWJraXRXcml0aW5nTW9kZSBtb2RpZmllcyBzdGF0ZSB3aGVuIGFwcGx5aW5nIHRvIGRvY3VtZW50
IGVsZW1lbnQuIFdlIGNhbid0IHNraXAgdGhlIGFwcGx5aW5nIGJ5IGNhY2hpbmcuCi0gICAgaWYg
KGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgJiYgZWxl
bWVudC0+ZG9jdW1lbnQoKS0+d3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0eWxlLT51bmlxdWUoKSB8fCAoc3R5bGUtPnN0
eWxlVHlwZSgpICE9IE5PUFNFVURPICYmIHBhcmVudFN0eWxlLT51bmlxdWUoKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZS0+em9vbSgpICE9IFJlbmRlclN0eWxlOjppbml0
aWFsWm9vbSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhlIGNhY2hlIGFzc3Vt
ZXMgc3RhdGljIGtub3dsZWRnZSBhYm91dCB3aGljaCBwcm9wZXJ0aWVzIGFyZSBpbmhlcml0ZWQu
Ci0gICAgaWYgKHBhcmVudFN0eWxlLT5oYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0
Y2hSZXN1bHQpCi17Ci0gICAgdW5zaWduZWQgY2FjaGVIYXNoID0gbWF0Y2hSZXN1bHQuaXNDYWNo
ZWFibGUgPyBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLmRhdGEoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKSA6
IDA7Ci0gICAgYm9vbCBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKLSAgICBjb25zdCBNYXRj
aGVkUHJvcGVydGllc0NhY2hlSXRlbSogY2FjaGVJdGVtID0gMDsKLSAgICBpZiAoY2FjaGVIYXNo
ICYmIChjYWNoZUl0ZW0gPSBmaW5kRnJvbU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY2FjaGVIYXNo
LCBtYXRjaFJlc3VsdCkpKSB7Ci0gICAgICAgIC8vIFdlIGNhbiBidWlsZCB1cCB0aGUgc3R5bGUg
YnkgY29weWluZyBub24taW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSBhbiBlYXJsaWVyIHN0eWxl
IG9iamVjdCBidWlsdCB1c2luZyB0aGUgc2FtZSBleGFjdAotICAgICAgICAvLyBzdHlsZSBkZWNs
YXJhdGlvbnMuIFdlIHRoZW4gb25seSBuZWVkIHRvIGFwcGx5IHRoZSBpbmhlcml0ZWQgcHJvcGVy
dGllcywgaWYgYW55LCBhcyB0aGVpciB2YWx1ZXMgY2FuIGRlcGVuZCBvbiB0aGUgCi0gICAgICAg
IC8vIGVsZW1lbnQgY29udGV4dC4gVGhpcyBpcyBmYXN0IGFuZCBzYXZlcyBtZW1vcnkgYnkgcmV1
c2luZyB0aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1cmVzLgotICAgICAgICBtX3N0eWxlLT5jb3B5Tm9u
SW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKLSAgICAgICAgaWYg
KG1fcGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFyZWQoY2FjaGVJdGVtLT5wYXJlbnRSZW5k
ZXJTdHlsZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0dXMgPSBt
X3N0eWxlLT5pbnNpZGVMaW5rKCk7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgaXRlbSBw
YXJlbnQgc3R5bGUgaGFzIGlkZW50aWNhbCBpbmhlcml0ZWQgcHJvcGVydGllcyB0byB0aGUgY3Vy
cmVudCBwYXJlbnQgc3R5bGUgdGhlbiB0aGUKLSAgICAgICAgICAgIC8vIHJlc3VsdGluZyBzdHls
ZSB3aWxsIGJlIGlkZW50aWNhbCB0b28uIFdlIGNvcHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVz
IG92ZXIgZnJvbSB0aGUgY2FjaGUgYW5kIGFyZSBkb25lLgotICAgICAgICAgICAgbV9zdHlsZS0+
aW5oZXJpdEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICAv
LyBVbmZvcnR1bmF0ZWx5IHRoZSBsaW5rIHN0YXR1cyBpcyB0cmVhdGVkIGxpa2UgYW4gaW5oZXJp
dGVkIHByb3BlcnR5LiBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgcmVzdG9yZSBpdC4KLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0YXR1cyk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gdHJ1ZTsgCi0gICAg
fQotICAgIC8vIE5vdyB3ZSBoYXZlIGFsbCBvZiB0aGUgbWF0Y2hlZCBydWxlcyBpbiB0aGUgYXBw
cm9wcmlhdGUgb3JkZXIuIFdhbGsgdGhlIHJ1bGVzIGFuZCBhcHBseQotICAgIC8vIGhpZ2gtcHJp
b3JpdHkgcHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90aGVy
IHByb3BlcnRpZXMgZGVwZW5kIG9uLgotICAgIC8vIFRoZSBvcmRlciBpcyAoMSkgaGlnaC1wcmlv
cml0eSBub3QgaW1wb3J0YW50LCAoMikgaGlnaC1wcmlvcml0eSBpbXBvcnRhbnQsICgzKSBub3Jt
YWwgbm90IGltcG9ydGFudAotICAgIC8vIGFuZCAoNCkgbm9ybWFsIGltcG9ydGFudC4KLSAgICBt
X2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczx0cnVlPiht
YXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczx0
cnVlPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVs
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkp
OwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8dHJ1ZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVz
ZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
dHJ1ZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0KLSAg
ICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20o
KSAhPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgbV9mb250RGlydHkgPSB0
cnVlOwotICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0g
ICAgdXBkYXRlRm9udCgpOwotCi0gICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJl
IHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX2xpbmVIZWlnaHRW
YWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGlu
ZUhlaWdodFZhbHVlKTsKLQotICAgIC8vIE1hbnkgcHJvcGVydGllcyBkZXBlbmQgb24gdGhlIGZv
bnQuIElmIGl0IGNoYW5nZXMgd2UganVzdCBhcHBseSBhbGwgcHJvcGVydGllcy4KLSAgICBpZiAo
Y2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9
IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKQotICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkg
PSBmYWxzZTsKLQotICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IFVBIHByb3BlcnRp
ZXMuCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxmYWxzZT4obWF0Y2hSZXN1bHQsIGZhbHNl
LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIAotICAgIC8vIENhY2hlIG91ciBib3Jk
ZXIgYW5kIGJhY2tncm91bmQgc28gdGhhdCB3ZSBjYW4gZXhhbWluZSB0aGVtIGxhdGVyLgotICAg
IGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwotICAgIAotICAgIC8vIE5vdyBkbyB0aGUgYXV0
aG9yIGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBhbGwgdGhlICFpbXBv
cnRhbnQgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihtYXRj
aFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlICsgMSwgbWF0Y2hS
ZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
LSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RB
dXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXM8ZmFsc2U+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2Vy
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihtYXRjaFJlc3VsdCwgdHJ1ZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVB
UnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICAKLSAgICBsb2FkUGVuZGluZ0ltYWdlcygp
OwotICAgIAotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBsb2FkUGVuZGluZ1NoYWRlcnMo
KTsKLSNlbmRpZgotICAgIAotICAgIEFTU0VSVCghbV9mb250RGlydHkpOwotICAgIAotICAgIGlm
IChjYWNoZUl0ZW0gfHwgIWNhY2hlSGFzaCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXND
YWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUobV9lbGVtZW50LCBtX3N0eWxlLmdldCgp
LCBtX3BhcmVudFN0eWxlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGFkZFRvTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZShtX3N0eWxlLmdldCgpLCBtX3BhcmVudFN0eWxlLCBjYWNoZUhhc2gsIG1hdGNo
UmVzdWx0KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVQYWdlUnVsZXMoY29uc3Qg
U3R5bGVSdWxlUGFnZSogcjEsIGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIyKQotewotICAgIHJldHVy
biByMS0+c2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKSA8IHIyLT5zZWxlY3RvcigpLT5zcGVjaWZp
Y2l0eSgpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJz
dFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCi17Ci0gICAgaWYgKCFydWxlcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiBtYXRjaGVkUGFnZVJ1bGVz
OwotICAgIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChtYXRjaGVkUGFnZVJ1bGVzLCBydWxlcy0+cGFn
ZVJ1bGVzKCksIGlzTGVmdFBhZ2UsIGlzRmlyc3RQYWdlLCBwYWdlTmFtZSk7Ci0gICAgaWYgKG1h
dGNoZWRQYWdlUnVsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnN0
YWJsZV9zb3J0KG1hdGNoZWRQYWdlUnVsZXMuYmVnaW4oKSwgbWF0Y2hlZFBhZ2VSdWxlcy5lbmQo
KSwgY29tcGFyZVBhZ2VSdWxlcyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0
Y2hlZFBhZ2VSdWxlcy5zaXplKCk7IGkrKykKLSAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMo
cmVzdWx0LCBtYXRjaGVkUGFnZVJ1bGVzW2ldLT5wcm9wZXJ0aWVzKCkpOwotfQotCi12b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+
JiBtYXRjaGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHJ1bGVzLCBib29s
IGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCi17
Ci0gICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0eWxlUnVsZVBhZ2UqIHJ1bGUgPSBydWxl
c1tpXTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvckxvY2FsTmFtZSA9IHJ1
bGUtPnNlbGVjdG9yKCktPnRhZygpLmxvY2FsTmFtZSgpOwotICAgICAgICBpZiAoc2VsZWN0b3JM
b2NhbE5hbWUgIT0gc3RhckF0b20gJiYgc2VsZWN0b3JMb2NhbE5hbWUgIT0gcGFnZU5hbWUpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgcHNl
dWRvVHlwZSA9IHJ1bGUtPnNlbGVjdG9yKCktPnBzZXVkb1R5cGUoKTsKLSAgICAgICAgaWYgKChw
c2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9MZWZ0UGFnZSAmJiAhaXNMZWZ0UGFnZSkK
LSAgICAgICAgICAgIHx8IChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9SaWdodFBh
Z2UgJiYgaXNMZWZ0UGFnZSkKLSAgICAgICAgICAgIHx8IChwc2V1ZG9UeXBlID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9GaXJzdFBhZ2UgJiYgIWlzRmlyc3RQYWdlKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5
LCB0aGVuIGlnbm9yZSBpdC4KLSAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcyA9
IHJ1bGUtPnByb3BlcnRpZXMoKTsKLSAgICAgICAgaWYgKCFwcm9wZXJ0aWVzIHx8IHByb3BlcnRp
ZXMtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIEFkZCB0
aGlzIHJ1bGUgdG8gb3VyIGxpc3Qgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICAgICAgbWF0Y2hlZFJ1
bGVzLmFwcGVuZChydWxlKTsKLSAgICB9Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6aXNMZWZ0
UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAotewotICAgIGJvb2wgaXNGaXJzdFBhZ2VMZWZ0ID0g
ZmFsc2U7Ci0gICAgaWYgKCFtX3Jvb3RFbGVtZW50U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkKLSAgICAgICAgaXNGaXJzdFBhZ2VMZWZ0ID0gdHJ1ZTsKLQotICAgIHJldHVybiAocGFn
ZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVmdCA/IDEgOiAwKSkgJSAyOwotfQotCi1ib29sIFN0eWxl
UmVzb2x2ZXI6OmlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0Ci17Ci0gICAgLy8gRklY
TUU6IEluIGNhc2Ugb2YgZm9yY2VkIGxlZnQvcmlnaHQgcGFnZSwgcGFnZSBhdCBpbmRleCAxIChu
b3QgMCkgY2FuIGJlIHRoZSBmaXJzdCBwYWdlLgotICAgIHJldHVybiAoIXBhZ2VJbmRleCk7Ci19
Ci0KLVN0cmluZyBTdHlsZVJlc29sdmVyOjpwYWdlTmFtZShpbnQgLyogcGFnZUluZGV4ICovKSBj
b25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcGFnZSBpbmRleCB0byBwYWdlIG5hbWUg
bWFwcGluZy4KLSAgICByZXR1cm4gIiI7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBMaXN0VHlwZT4K
LXN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVm
UHRyPENTU1N0eWxlUnVsZT4gPiYgd3JhcHBlck1hcCwgTGlzdFR5cGUqIGxpc3RUeXBlKQotewot
ICAgIGlmICghbGlzdFR5cGUpCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBzaXplID0g
bGlzdFR5cGUtPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgQ1NTUnVsZSogY3NzUnVsZSA9IGxpc3RUeXBlLT5pdGVtKGkpOwotICAg
ICAgICBpZiAoY3NzUnVsZS0+aXNJbXBvcnRSdWxlKCkpCi0gICAgICAgICAgICBjb2xsZWN0Q1NT
T01XcmFwcGVycyh3cmFwcGVyTWFwLCBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oY3NzUnVs
ZSktPnN0eWxlU2hlZXQoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGNzc1J1bGUtPmlzTWVkaWFSdWxl
KCkpCi0gICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzdGF0aWNf
Y2FzdDxDU1NNZWRpYVJ1bGUqPihjc3NSdWxlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGNzc1J1bGUt
PmlzUmVnaW9uUnVsZSgpKQotICAgICAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBl
ck1hcCwgc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTUmVnaW9uUnVsZSo+KGNzc1J1bGUpKTsKLSAgICAg
ICAgZWxzZSBpZiAoY3NzUnVsZS0+aXNTdHlsZVJ1bGUoKSkgewotICAgICAgICAgICAgQ1NTU3R5
bGVSdWxlKiBjc3NTdHlsZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihjc3NSdWxl
KTsKLSAgICAgICAgICAgIHdyYXBwZXJNYXAuYWRkKGNzc1N0eWxlUnVsZS0+c3R5bGVSdWxlKCks
IGNzc1N0eWxlUnVsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxl
Y3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4g
PiYgd3JhcHBlck1hcCwgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYgc2hlZXRXcmFw
cGVyU2V0LCBTdHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlU2hlZXQpCi17Ci0gICAgaWYgKCFzdHls
ZVNoZWV0KQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHN0eWxl
U2hlZXRXcmFwcGVyID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxlU2hlZXQpOwotICAgIHNo
ZWV0V3JhcHBlclNldC5hZGQoc3R5bGVTaGVldFdyYXBwZXIpOwotICAgIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKHdyYXBwZXJNYXAsIHN0eWxlU2hlZXRXcmFwcGVyLmdldCgpKTsKLX0KLQotc3RhdGlj
IHZvaWQgY29sbGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NT
U3R5bGVSdWxlPiA+JiB3cmFwcGVyTWFwLCBIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+
JiBzaGVldFdyYXBwZXJTZXQsIERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0eWxlU2hlZXRzID0gZG9jdW1lbnQtPnN0eWxlU2hl
ZXRzKCktPnZlY3RvcigpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZVNoZWV0
cy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVT
aGVldHNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMo
d3JhcHBlck1hcCwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlU2hlZXQpKTsKLSAg
ICB9Ci0gICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwgc2hlZXRXcmFwcGVyU2V0
LCBkb2N1bWVudC0+cGFnZVVzZXJTaGVldCgpKTsKLX0KLQotQ1NTU3R5bGVSdWxlKiBTdHlsZVJl
c29sdmVyOjplbnN1cmVGdWxsQ1NTT01XcmFwcGVyRm9ySW5zcGVjdG9yKFN0eWxlUnVsZSogcnVs
ZSkKLXsKLSAgICBpZiAobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1h
cCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCk7
Ci0gICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJN
YXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgZGVmYXVsdFN0eWxlU2hlZXQpOwotICAg
ICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBt
X3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQsIHF1aXJrc1N0eWxlU2hlZXQpOwotICAgICAgICBj
b2xsZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxl
U2hlZXRDU1NPTVdyYXBwZXJTZXQsIHN2Z1N0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NT
T01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NP
TVdyYXBwZXJTZXQsIG1hdGhNTFN0eWxlU2hlZXQpOwotICAgICAgICBjb2xsZWN0Q1NTT01XcmFw
cGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBw
ZXJTZXQsIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KTsKLSAgICAgICAgY29sbGVjdENTU09NV3Jh
cHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFw
cGVyU2V0LCBmdWxsc2NyZWVuU3R5bGVTaGVldCk7Ci0KLSAgICAgICAgY29sbGVjdENTU09NV3Jh
cHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFw
cGVyU2V0LCBkb2N1bWVudCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fc3R5bGVSdWxlVG9DU1NP
TVdyYXBwZXJNYXAuZ2V0KHJ1bGUpLmdldCgpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgUmVu
ZGVyU3R5bGUqIHN0eWxlKQotewotICAgIGluaXRFbGVtZW50KDApOwotICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoMCwgc3R5bGUpOwotICAgIG1fc3R5bGUgPSBzdHlsZTsKLSAgICBhcHBseVByb3Bl
cnR5VG9DdXJyZW50U3R5bGUoaWQsIHZhbHVlKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShpZCwgdmFsdWUp
OwotfQotCi1pbmxpbmUgYm9vbCBpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkKQotewotICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoK
LSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I6Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
ckJvdHRvbUNvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6Ci0gICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRDb2x1bW5SdWxlQ29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1w
aGFzaXNDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6
Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3I6Ci0gICAgICAg
IC8vIEFsc28gYWxsb3cgc2hvcnRoYW5kcyBzbyB0aGF0IGluaGVyaXQvaW5pdGlhbCBzdGlsbCB3
b3JrLgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKLSAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckxlZnQ6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDoKLSAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmU6Ci0g
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgotI2lmIEVOQUJMRShTVkcp
Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5
U3Ryb2tlOgotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ly8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzMy1yZWdpb25zLyN0aGUtYXQtcmVnaW9uLXN0
eWxlLXJ1bGUKLS8vIEZJWE1FOiBhZGQgaW5jcmVtZW50YWwgc3VwcG9ydCBmb3Igb3RoZXIgcmVn
aW9uIHN0eWxpbmcgcHJvcGVydGllcy4KLWlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OmlzVmFs
aWRSZWdpb25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCi17Ci0gICAgc3dpdGNoIChp
ZCkgewotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkg
Y29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKLS8v
IG9mIGVhY2ggaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgaW4gdGhlIHJlbmRlciBzdHlsZSAvIHRy
ZWUuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKigpCi0vLyBtdWx0aXBsaWVzIGVh
Y2ggcmVzb2x2ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20gbXVsdGlwbGllciAtIHNvIGZvciBTVkcg
d2UgbmVlZCB0byBkaXNhYmxlIHRoYXQuCi0vLyBUaG91Z2ggYWxsIENTUyB2YWx1ZXMgdGhhdCBj
YW4gYmUgYXBwbGllZCB0byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudHMgKHdpZHRoL2hlaWdodC9i
b3JkZXIvcGFkZGluZy4uLikKLS8vIG5lZWQgdG8gcmVzcGVjdCB0aGUgc2NhbGluZy4gUmVuZGVy
Qm94ICh0aGUgcGFyZW50IGNsYXNzIG9mIFJlbmRlclNWR1Jvb3QpIGdyYWJzIHZhbHVlcyBsaWtl
Ci0vLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcvLi4uIGZyb20gdGhlIFJlbmRlclN0eWxl
IC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5ldmVyIHNjYWxlLAotLy8gaWYgd2UnZCBw
YXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFzcyBhIHpvb20g
ZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKLS8vIHByb3BlcnRpZXMgdGhhdCBhcmUgTk9UIGFs
bG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1bWVudCAobGV0dGVyL3dvcmQt
c3BhY2luZy9mb250LXNpemUpLgotYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXMo
KQotewotICAgIHJldHVybiBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsK
LX0KLQotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0KLXN0YXRpYyBib29sIGNyZWF0ZUdy
aWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJl
c29sdmVyKiBzZWxlY3RvciwgTGVuZ3RoJiBsZW5ndGgpCi17Ci0gICAgTGVuZ3RoIHdvcmtpbmdM
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZl
cnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24g
fCBBdXRvQ29udmVyc2lvbj4oc2VsZWN0b3ItPnN0eWxlKCksIHNlbGVjdG9yLT5yb290RWxlbWVu
dFN0eWxlKCksIHNlbGVjdG9yLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwotICAgIGlmICh3
b3JraW5nTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgd29ya2luZ0xlbmd0aC5z
ZXRRdWlyayhwcmltaXRpdmVWYWx1ZS0+aXNRdWlya1ZhbHVlKCkpOwotCi0gICAgbGVuZ3RoID0g
d29ya2luZ0xlbmd0aDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgY3JlYXRl
R3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxMZW5ndGg+JiBsZW5ndGhzLCBT
dHlsZVJlc29sdmVyKiBzZWxlY3RvcikKLXsKLSAgICAvLyBIYW5kbGUgJ25vbmUnLgotICAgIGlm
ICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
OwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25l
KSB7Ci0gICAgICAgICAgICBsZW5ndGhzLmFwcGVuZChMZW5ndGgoVW5kZWZpbmVkKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsK
LSAgICAgICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7Ci0gICAgICAgICAg
ICBpZiAoIWN1cnJWYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aDsKLSAgICAgICAgICAgIGlm
ICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KGN1cnJWYWx1ZSksIHNlbGVjdG9yLCBsZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAgICAgbGVuZ3Rocy5hcHBlbmQobGVuZ3RoKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLQot
c3RhdGljIGJvb2wgY3JlYXRlR3JpZFBvc2l0aW9uKENTU1ZhbHVlKiB2YWx1ZSwgTGVuZ3RoJiBw
b3NpdGlvbikKLXsKLSAgICAvLyBGb3Igbm93LCB3ZSBvbmx5IGFjY2VwdDogPGludGVnZXI+IHwg
J2F1dG8nCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSk7Ci0gICAgcG9zaXRpb24uc2V0
VmFsdWUocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOwotICAgIHJldHVybiB0cnVlOwot
fQotI2VuZGlmCi0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSAqdmFsdWUpCi17Ci0gICAgYm9vbCBpc0luaGVyaXQgPSBtX3BhcmVu
dE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKLSAgICBib29sIGlzSW5pdGlhbCA9
IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0lu
aGVyaXRlZFZhbHVlKCkpOwotCi0gICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgIWlzSW5pdGlhbCk7
IC8vIGlzSW5oZXJpdCAtPiAhaXNJbml0aWFsICYmIGlzSW5pdGlhbCAtPiAhaXNJbmhlcml0Ci0K
LSAgICBpZiAoIWFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpICYmICghYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpIHx8ICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkp
KSB7Ci0gICAgICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQg
dG8gb25seSB0aGUgb25lcyBob25vcmVkIGJ5IDp2aXNpdGVkLgotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKGlzSW5oZXJpdCAmJiBtX3BhcmVudFN0eWxlICYmICFtX3BhcmVudFN0
eWxlLT5oYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6
aXNJbmhlcml0ZWRQcm9wZXJ0eShpZCkpCi0gICAgICAgIG1fcGFyZW50U3R5bGUtPnNldEhhc0V4
cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7Ci0KLSAgICAvLyBjaGVjayBsb29rdXAgdGFi
bGUgZm9yIGltcGxlbWVudGF0aW9ucyBhbmQgdXNlIHdoZW4gYXZhaWxhYmxlCi0gICAgY29uc3Qg
UHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gbV9zdHlsZUJ1aWxkZXIucHJvcGVydHlIYW5kbGVy
KGlkKTsKLSAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgaWYgKGlzSW5oZXJp
dCkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUodGhpcyk7Ci0gICAgICAg
IGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFs
dWUodGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZSh0
aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkgOiAwOwotCi0gICAgZmxvYXQgem9vbUZh
Y3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIC8vIFdoYXQgZm9sbG93cyBp
cyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWlyIGNvcnJlc3Bv
bmRpbmcgZnJvbnQtZW5kCi0gICAgLy8gUmVuZGVyU3R5bGUgdmFsdWVzLiAgU2hvcnRoYW5kcyAo
ZS5nLiBib3JkZXIsIGJhY2tncm91bmQpIG9jY3VyIGluIHRoaXMgbGlzdCBhcyB3ZWxsIGFuZAot
ICAgIC8vIGFyZSBvbmx5IGhpdCB3aGVuIG1hcHBpbmcgImluaGVyaXQiIG9yICJpbml0aWFsIiBp
bnRvIGZyb250LWVuZCB2YWx1ZXMuCi0gICAgc3dpdGNoIChpZCkgewotLy8gbGlzdHMKLSAgICBj
YXNlIENTU1Byb3BlcnR5Q29udGVudDoKLSAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmcsIHVyaSwg
Y291bnRlciwgYXR0ciwgaQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEluIENTUzMsIGl0IHdp
bGwgYmUgcG9zc2libGUgdG8gaW5oZXJpdCBjb250ZW50LiAgSW4gQ1NTMiBpdCBpcyBub3QuICBU
aGlzCi0gICAgICAgIC8vIG5vdGUgaXMgYSByZW1pbmRlciB0aGF0IGV2ZW50dWFsbHkgImluaGVy
aXQiIG5lZWRzIHRvIGJlIHN1cHBvcnRlZC4KLQotICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0g
ICAgICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgYm9vbCBkaWRTZXQgPSBmYWxzZTsKLSAgICAgICAgZm9y
IChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2Uo
KSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAg
ICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2Fz
dDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwotICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgICAgICAg
ICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250
ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwotICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250
ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwotICAgICAg
ICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogY29udGVudFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsK
LQotICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkgewotICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
LmltcGwoKSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQXR0cigpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9v
KT8KLSAgICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8p
Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9wYXJlbnRTdHlsZS0+c2V0VW5pcXVlKCk7
Ci0gICAgICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFs
dWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxsQXRvbSk7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIp
OwotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBl
bXB0eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAvLyByZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBh
dHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUKLSAgICAgICAgICAgICAgICBtX2ZlYXR1
cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQ291bnRlcigpKSB7Ci0gICAgICAgICAgICAg
ICAgQ291bnRlciogY291bnRlclZhbHVlID0gY29udGVudFZhbHVlLT5nZXRDb3VudGVyVmFsdWUo
KTsKLSAgICAgICAgICAgICAgICBFTGlzdFN0eWxlVHlwZSBsaXN0U3R5bGVUeXBlID0gTm9uZUxp
c3RTdHlsZTsKLSAgICAgICAgICAgICAgICBpbnQgbGlzdFN0eWxlSWRlbnQgPSBjb3VudGVyVmFs
dWUtPmxpc3RTdHlsZUlkZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxpc3RTdHlsZUlkZW50
ICE9IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgbGlzdFN0eWxlVHlwZSA9IHN0
YXRpY19jYXN0PEVMaXN0U3R5bGVUeXBlPihsaXN0U3R5bGVJZGVudCAtIENTU1ZhbHVlRGlzYyk7
Ci0gICAgICAgICAgICAgICAgT3duUHRyPENvdW50ZXJDb250ZW50PiBjb3VudGVyID0gYWRvcHRQ
dHIobmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5
bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKSk7Ci0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0Q29udGVudChjb3VudGVyLnJlbGVhc2UoKSwgZGlkU2V0KTsKLSAgICAgICAgICAg
ICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENv
bnRlbnQoT1BFTl9RVU9URSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZUNsb3NlUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRl
bnQoQ0xPU0VfUVVPVEUsIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVu
dChOT19PUEVOX1FVT1RFLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlTm9DbG9zZVF1b3RlOgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250
ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgICAgICBkaWRTZXQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWwgYW5kIG5vbmUgZG8gbm90IGhhdmUg
YW55IGVmZmVjdC4KLSAgICAgICAgICAgICAgICAgICAge30KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkaWRTZXQpCi0gICAgICAgICAg
ICBtX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
YXNlIENTU1Byb3BlcnR5UXVvdGVzOgotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAg
ICAgICBpZiAobV9wYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90
ZXMobV9wYXJlbnRTdHlsZS0+cXVvdGVzKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1
b3RlcygwKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFs
dWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0
YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIFF1b3Rlc0RhdGEq
IGRhdGEgPSBRdW90ZXNEYXRhOjpjcmVhdGUobGlzdC0+bGVuZ3RoKCkpOwotICAgICAgICAgICAg
aWYgKCFkYXRhKQotICAgICAgICAgICAgICAgIHJldHVybjsgLy8gT3V0IG9mIG1lbW9yeQotICAg
ICAgICAgICAgU3RyaW5nKiBxdW90ZXMgPSBkYXRhLT5kYXRhKCk7Ci0gICAgICAgICAgICBmb3Ig
KENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBsaXN0OyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkp
IHsKLSAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgICAgICAg
ICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLT5pc1N0cmluZygpKTsKLSAg
ICAgICAgICAgICAgICBxdW90ZXNbaS5pbmRleCgpXSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJp
bmdWYWx1ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVz
KGFkb3B0UmVmKGRhdGEpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewot
ICAgICAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkpOwotICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoYWRvcHRSZWYoUXVvdGVzRGF0YTo6Y3JlYXRl
KDApKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250RmFtaWx5OiB7Ci0gICAgICAgIC8vIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgaWRzCi0gICAgICAg
IGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250
RGVzY3JpcHRpb24gPSBtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3Jp
cHRpb24oKTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KHBh
cmVudEZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpOwotICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEZhbWlseShwYXJlbnRGb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKSk7
Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZpZWRGb250KHBhcmVudEZv
bnREZXNjcmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSk7Ci0gICAgICAgICAgICBzZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fSBlbHNlIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBpbml0
aWFsRGVzYyA9IEZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVy
aWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZQotICAgICAgICAgICAgLy8gdG8gbm9uLW1v
bm9zcGFjZS4KLSAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAm
JiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQotICAgICAgICAgICAgICAg
IHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tl
ci5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNp
emUoKSAtIDEsIGZhbHNlKSk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJp
Y0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmljRmFtaWx5KCkpOwotICAgICAgICAgICAgaWYgKCFp
bml0aWFsRGVzYy5maXJzdEZhbWlseSgpLmZhbWlseUlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KGluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkpOwot
ICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIEZvbnRGYW1p
bHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7Ci0gICAgICAg
IEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOwotCi0gICAgICAgIC8vIEJlZm9yZSBtYXBwaW5n
IGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVy
aWMgZmFtaWx5LgotICAgICAgICBib29sIG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplID0g
Zm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKTsKLSAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7Ci0KLSAg
ICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBp
LmFkdmFuY2UoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0g
ICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgQXRv
bWljU3RyaW5nIGZhY2U7Ci0gICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNr
ZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKLSAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUt
PmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgZmFjZSA9IGNvbnRlbnRWYWx1ZS0+Z2V0U3Ry
aW5nVmFsdWUoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNldHRpbmdzKSB7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEJvZHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
YWNlID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzZXJpZkZhbWlseTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlv
bjo6U2VyaWZGYW1pbHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmYWNlID0gc2Fuc1NlcmlmRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZG
YW1pbHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9
IGN1cnNpdmVGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVGYW50YXN5OgotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IGZhbnRhc3lGYW1pbHk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWls
eShGb250RGVzY3JpcHRpb246OkZhbnRhc3lGYW1pbHkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gbW9ub3NwYWNlRmFtaWx5OwotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2Ny
aXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgotICAg
ICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHBpY3RvZ3JhcGhGYW1pbHk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3Jp
cHRpb246OlBpY3RvZ3JhcGhGYW1pbHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWZh
Y2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjdXJyRmFtaWx5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIEZpbGxpbmcgaW4gdGhlIGZpcnN0IGZhbWlseS4KLSAgICAgICAg
ICAgICAgICAgICAgZmlyc3RGYW1pbHkuc2V0RmFtaWx5KGZhY2UpOwotICAgICAgICAgICAgICAg
ICAgICBmaXJzdEZhbWlseS5hcHBlbmRGYW1pbHkoMCk7IC8vIFJlbW92ZSBhbnkgaW5oZXJpdGVk
IGZhbWlseS1mYWxsYmFjayBsaXN0LgotICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5ID0g
JmZpcnN0RmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNT
cGVjaWZpZWRGb250KGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkgPT0gRm9udERlc2Ny
aXB0aW9uOjpOb0ZhbWlseSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG5ld0ZhbWlseSA9IFNoYXJlZEZvbnRG
YW1pbHk6OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBuZXdGYW1pbHktPnNldEZhbWls
eShmYWNlKTsKLSAgICAgICAgICAgICAgICAgICAgY3VyckZhbWlseS0+YXBwZW5kRmFtaWx5KG5l
d0ZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJGYW1pbHkgPSBuZXdGYW1pbHkuZ2V0
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gV2UgY2FuJ3QgY2FsbCB1c2VGaXhlZERlZmF1bHRTaXplKCkgdW50aWwgYWxsIG5ldyBm
b250IGZhbWlsaWVzIGhhdmUgYmVlbiBhZGRlZAotICAgICAgICAvLyBJZiBjdXJyRmFtaWx5IGlz
IG5vbi16ZXJvIHRoZW4gd2Ugc2V0IGF0IGxlYXN0IG9uZSBmYW1pbHkgb24gdGhpcyBkZXNjcmlw
dGlvbi4KLSAgICAgICAgaWYgKGN1cnJGYW1pbHkpIHsKLSAgICAgICAgICAgIGlmIChmb250RGVz
Y3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKQotICAgICAgICAgICAgICAg
IHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tl
ci5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNp
emUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkpOwotCi0gICAgICAgICAg
ICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm47Ci0gICAgfQotLy8gc2hvcnRoYW5kIHByb3BlcnRpZXMKLSAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZDoKLSAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAg
bV9zdHlsZS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5z
ZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo
aXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0QmFja2dyb3VuZExheWVy
cygqbV9wYXJlbnRTdHlsZS0+YmFja2dyb3VuZExheWVycygpKTsKLSAgICAgICAgICAgIG1fc3R5
bGUtPnNldEJhY2tncm91bmRDb2xvcihtX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrOgotICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJN
YXNrTGF5ZXJzKCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIG1f
c3R5bGUtPmluaGVyaXRNYXNrTGF5ZXJzKCptX3BhcmVudFN0eWxlLT5tYXNrTGF5ZXJzKCkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6Ci0gICAgICAgIGlmIChp
c0luaGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldExpbmVIZWlnaHQobV9wYXJlbnRTdHlsZS0+bGluZUhlaWdodCgpKTsKLSAgICAgICAgICAg
IG1fbGluZUhlaWdodFZhbHVlID0gMDsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwotICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewotICAgICAg
ICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdz
KCk7Ci0gICAgICAgICAgICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHls
ZSByZXNvbHV0aW9uLCB0aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBh
bmQgdGh1cyBoYXZlIHNldHRpbmdzCi0gICAgICAgICAgICBpZiAoIXNldHRpbmdzKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb247Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250
RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5KTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChtX2NoZWNrZXIuZG9jdW1l
bnQoKS0+cHJpbnRpbmcoKSk7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5k
YXJkRm9udEZhbWlseSA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpLT5zdGFuZGFy
ZEZvbnRGYW1pbHkoKTsKLSAgICAgICAgICAgIGlmICghc3RhbmRhcmRGb250RmFtaWx5LmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNl
dEZhbWlseShzdGFuZGFyZEZvbnRGYW1pbHkpOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENT
U1ZhbHVlWHhTbWFsbCArIDEpOwotICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0
aW9uLCBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLmRvY3VtZW50KCksIENTU1ZhbHVlTWVk
aXVtLCBmYWxzZSkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJT
dHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1
ZSA9IDA7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
LSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAg
ICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0KLSAgICAgICAgICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb247Ci0gICAgICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRo
ZW1lKCktPnN5c3RlbUZvbnQocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCksIGZvbnREZXNjcmlw
dGlvbik7Ci0KLSAgICAgICAgICAgIC8vIERvdWJsZS1jaGVjayBhbmQgc2VlIGlmIHRoZSB0aGVt
ZSBkaWQgYW55dGhpbmcuICBJZiBub3QsIGRvbid0IGJvdGhlciB1cGRhdGluZyB0aGUgZm9udC4K
LSAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkgewotICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVuZGVyaW5nIG1vZGUgYW5kIHByaW50ZXIg
Zm9udCBzZXR0aW5ncyBhcmUgdXBkYXRlZC4KLSAgICAgICAgICAgICAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0
aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNl
dHRpbmdzCi0gICAgICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdN
b2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLmRvY3VtZW50KCktPnByaW50
aW5nKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KLSAg
ICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVk
U2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tlci5kb2N1bWVudCgpLCBtX3N0eWxlLmdldCgp
LCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNp
ZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKLSAgICAgICAgICAgICAgICBzZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkgewotICAgICAgICAgICAgRm9udFZhbHVlICpm
b250ID0gc3RhdGljX2Nhc3Q8Rm9udFZhbHVlKj4odmFsdWUpOwotICAgICAgICAgICAgaWYgKCFm
b250LT5zdHlsZSB8fCAhZm9udC0+dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0IHx8Ci0gICAgICAg
ICAgICAgICAgICFmb250LT5zaXplIHx8ICFmb250LT5saW5lSGVpZ2h0IHx8ICFmb250LT5mYW1p
bHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsK
LSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LT53
ZWlnaHQuZ2V0KCkpOwotICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIHByb3BlcnRpZXMgY2Fu
IGRpcnR5IG91ciBmb250IGJ1dCB0aGV5IGRvbid0IHRyeSB0byByZWFkIHRoZSBmb250J3MKLSAg
ICAgICAgICAgIC8vIHByb3BlcnRpZXMgYmFjaywgd2hpY2ggaXMgc2FmZS4gSG93ZXZlciBpZiBm
b250LXNpemUgaXMgdXNpbmcgdGhlICdleCcgdW5pdCwgaXQgd2lsbAotICAgICAgICAgICAgLy8g
bmVlZCBxdWVyeSB0aGUgZGlydGllZCBmb250J3MgeC1oZWlnaHQgdG8gZ2V0IHRoZSBjb21wdXRl
ZCBzaXplLiBUbyBiZSBzYWZlIGluIHRoaXMKLSAgICAgICAgICAgIC8vIGNhc2UsIGxldCdzIGp1
c3QgdXBkYXRlIHRoZSBmb250IG5vdy4KLSAgICAgICAgICAgIHVwZGF0ZUZvbnQoKTsKLSAgICAg
ICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5nZXQo
KSk7Ci0KLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdodC5n
ZXQoKTsKLQotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHks
IGZvbnQtPmZhbWlseS5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gQ1NTMyBQcm9wZXJ0aWVzCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRTaGFkb3c6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJveFNoYWRvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94
U2hhZG93OiB7Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIGlmIChpZCA9
PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUt
PnNldFRleHRTaGFkb3cobV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpID8gYWRvcHRQdHIobmV3
IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9zdHlsZS0+c2V0Qm94U2hhZG93KG1fcGFyZW50U3R5bGUtPmJv
eFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPmJveFNo
YWRvdygpKSkgOiBudWxscHRyKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNJbml0aWFsIHx8
IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQotICAgICAgICAgICAgcmV0dXJuIGlk
ID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IG1fc3R5bGUtPnNldFRleHRTaGFkb3cobnVsbHB0
cikgOiBtX3N0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci0KLSAgICAgICAgaWYgKCF2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb3IgKENT
U1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7
Ci0gICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOwotICAgICAgICAg
ICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93
VmFsdWUqPihjdXJyVmFsdWUpOwotICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRl
TGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAg
ICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1f
cm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0
ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290
RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7Ci0gICAgICAgICAgICBpbnQgc3ByZWFkID0g
aXRlbS0+c3ByZWFkID8gaXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwg
bV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7Ci0gICAgICAgICAgICBTaGFkb3dT
dHlsZSBzaGFkb3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0eWxlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKLSAgICAgICAgICAgIENvbG9yIGNv
bG9yOwotICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9y
ID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOwotICAgICAgICAg
ICAgZWxzZSBpZiAobV9zdHlsZSkKLSAgICAgICAgICAgICAgICBjb2xvciA9IG1fc3R5bGUtPmNv
bG9yKCk7Ci0KLSAgICAgICAgICAgIE93blB0cjxTaGFkb3dEYXRhPiBzaGFkb3dEYXRhID0gYWRv
cHRQdHIobmV3IFNoYWRvd0RhdGEoSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93
U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkg
PyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkpOwotICAgICAgICAgICAgaWYgKGlkID09IENT
U1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U2hh
ZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3Qg
aWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmlu
ZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm94UmVmbGVjdDogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChi
b3hSZWZsZWN0LCBCb3hSZWZsZWN0KQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAg
ICAgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hS
ZWZsZWN0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCF2YWx1ZS0+aXNSZWZsZWN0VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBDU1NSZWZsZWN0VmFsdWUqIHJlZmxlY3RWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1JlZmxlY3RW
YWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdGlv
biA9IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgIHJlZmxlY3Rpb24tPnNldERp
cmVjdGlvbihyZWZsZWN0VmFsdWUtPmRpcmVjdGlvbigpKTsKLSAgICAgICAgaWYgKHJlZmxlY3RW
YWx1ZS0+b2Zmc2V0KCkpCi0gICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVj
dFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24g
fCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpKTsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgbWFz
azsKLSAgICAgICAgbWFzay5zZXRNYXNrRGVmYXVsdHMoKTsKLSAgICAgICAgbWFwTmluZVBpZWNl
SW1hZ2UoaWQsIHJlZmxlY3RWYWx1ZS0+bWFzaygpLCBtYXNrKTsKLSAgICAgICAgcmVmbGVjdGlv
bi0+c2V0TWFzayhtYXNrKTsKLQotICAgICAgICBtX3N0eWxlLT5zZXRCb3hSZWZsZWN0KHJlZmxl
Y3Rpb24ucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1By
b3BlcnR5T3BhY2l0eToKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BS
SU1JVElWRShvcGFjaXR5LCBPcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVNyYzogLy8gT25seSB1c2VkIGluIEBmb250LWZhY2UgcnVsZXMuCi0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5VW5pY29kZVJhbmdlOiAvLyBPbmx5IHVzZWQgaW4g
QGZvbnQtZmFjZSBydWxlcy4KLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRDb2x1bW5SdWxlOgotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBt
X3N0eWxlLT5zZXRDb2x1bW5SdWxlQ29sb3IobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9y
KCkuaXNWYWxpZCgpID8gbV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBtX3BhcmVu
dFN0eWxlLT5jb2xvcigpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVTdHls
ZShtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7Ci0gICAgICAgICAgICBtX3N0eWxl
LT5zZXRDb2x1bW5SdWxlV2lkdGgobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5
bGUtPnJlc2V0Q29sdW1uUnVsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hcnF1ZWU6Ci0gICAgICAgIGlmICghbV9wYXJlbnROb2RlIHx8ICF2YWx1ZS0+
aXNJbmhlcml0ZWRWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxl
LT5zZXRNYXJxdWVlRGlyZWN0aW9uKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVEaXJlY3Rpb24oKSk7
Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobV9wYXJlbnRTdHlsZS0+bWFy
cXVlZUluY3JlbWVudCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKG1fcGFy
ZW50U3R5bGUtPm1hcnF1ZWVTcGVlZCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxv
b3BDb3VudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlTG9vcENvdW50KCkpOwotICAgICAgICBtX3N0
eWxlLT5zZXRNYXJxdWVlQmVoYXZpb3IobV9wYXJlbnRTdHlsZS0+bWFycXVlZUJlaGF2aW9yKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBl
dGl0aW9uOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVMb29w
Q291bnQsIE1hcnF1ZWVMb29wQ291bnQpCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxv
b3BDb3VudCgtMSk7IC8vIC0xIG1lYW5zIHJlcGVhdCBmb3JldmVyLgotICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1h
cnF1ZWVMb29wQ291bnQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6IHsK
LSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZVNwZWVkLCBNYXJxdWVl
U3BlZWQpCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGlmIChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewot
ICAgICAgICAgICAgc3dpdGNoIChpZGVudCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVTbG93OgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoNTAw
KTsgLy8gNTAwIG1zZWMuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dE1hcnF1ZWVTcGVlZCg4NSk7IC8vIDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCi0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVGYXN0Ogot
ICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1z
ZWMuIFN1cGVyIGZhc3QuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1RpbWUoKSkKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8
aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKLSAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9y
dC4KLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+
Z2V0SW50VmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hcnF1ZWVJbmNyZW1lbnQ6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUwobWFycXVlZUluY3JlbWVudCwgTWFycXVlZUluY3JlbWVudCkKLSAgICAgICAgaWYg
KCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsOgot
ICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgx
LCBGaXhlZCkpOyAvLyAxcHguCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUt
PnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklF
IGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVMYXJnZToKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVl
ZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCi0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
TGVuZ3RoIG1hcnF1ZWVMZW5ndGggPSBjb252ZXJ0VG9JbnRMZW5ndGgocHJpbWl0aXZlVmFsdWUs
IHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBpZiAoIW1hcnF1ZWVM
ZW5ndGguaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVl
SW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVDbGFtcDoKLSAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShsaW5lQ2xhbXAsIExpbmVDbGFtcCkK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2NhbGU6IHsKLSAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobG9jYWxlLCBMb2NhbGUpOwotICAgICAg
ICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TG9jYWxlKG51bGxBdG9tKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2Ny
aXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9zdHlsZS0+bG9jYWxlKCkpKTsKLSAgICAgICAgc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTaXplQWRqdXN0OiB7Ci0gICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRTaXplQWRqdXN0LCBUZXh0U2l6ZUFkanVzdCkK
LSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNldFRleHRTaXplQWRqdXN0KHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0byk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXREYXNoYm9hcmRSZWdpb246IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwoZGFzaGJvYXJkUmVnaW9ucywgRGFzaGJvYXJkUmVnaW9ucykKLSAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0
eWxlLT5zZXREYXNoYm9hcmRSZWdpb25zKFJlbmRlclN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9u
cygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIERhc2hib2Fy
ZFJlZ2lvbiAqcmVnaW9uID0gcHJpbWl0aXZlVmFsdWUtPmdldERhc2hib2FyZFJlZ2lvblZhbHVl
KCk7Ci0gICAgICAgIGlmICghcmVnaW9uKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IERhc2hib2FyZFJlZ2lvbiAqZmlyc3QgPSByZWdpb247Ci0gICAgICAgIHdoaWxlIChyZWdpb24p
IHsKLSAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50
b3AoKSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKLSAgICAgICAgICAgIExlbmd0aCBy
aWdodCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0eWxlKCksIG1fcm9v
dEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvSW50
TGVuZ3RoKHJlZ2lvbi0+Ym90dG9tKCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0g
ICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQo
KSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKLQotICAgICAgICAgICAgaWYgKHRvcC5p
c1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIHRvcCA9IExlbmd0aCgpOwotICAgICAgICAg
ICAgaWYgKHJpZ2h0LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgcmlnaHQgPSBMZW5n
dGgoKTsKLSAgICAgICAgICAgIGlmIChib3R0b20uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAg
ICAgICBib3R0b20gPSBMZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChsZWZ0LmlzVW5kZWZpbmVk
KCkpCi0gICAgICAgICAgICAgICAgbGVmdCA9IExlbmd0aCgpOwotCi0gICAgICAgICAgICBpZiAo
cmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2Fy
ZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRv
cCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSkKLSAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OlJl
Y3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lv
biA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7Ci0gICAgICAgICAgICByZWdpb24gPSByZWdpb24t
Pm1fbmV4dC5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS0+c2V0SGFzRGFzaGJvYXJkUmVnaW9ucyh0cnVlKTsKLQotICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0aDogewot
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0ZXh0U3Ryb2tlV2lkdGgsIFRleHRT
dHJva2VXaWR0aCkKLSAgICAgICAgZmxvYXQgd2lkdGggPSAwOwotICAgICAgICBzd2l0Y2ggKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlVGhp
bjoKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNZWRpdW06Ci0gICAgICAgICAgICBjYXNlIENT
U1ZhbHVlVGhpY2s6IHsKLSAgICAgICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gMS4wIC8gNDg7
Ci0gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlTWVkaXVtKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgKj0gMzsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRoaWNr
KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgKj0gNTsKLSAgICAgICAgICAgICAgICB3aWR0
aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHls
ZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFs
dWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbV9z
dHlsZS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7Ci0gICAgICAgIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybSwgVHJhbnNmb3JtKTsKLSAgICAgICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRp
b25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOwotICAg
ICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlOiB7Ci0gICAgICAg
IEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHBlcnNwZWN0aXZlLCBQZXJzcGVjdGl2ZSkKLQot
ICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAg
ICAgICAgICAgIG1fc3R5bGUtPnNldFBlcnNwZWN0aXZlKDApOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsKLSAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgcGVyc3BlY3RpdmVW
YWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGli
aWxpdHksIHRyZWF0IHZhbHVlbGVzcyBudW1iZXJzIGFzIHB4LgotICAgICAgICAgICAgcGVyc3Bl
Y3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdl
dERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3Ro
PGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAocGVyc3BlY3RpdmVW
YWx1ZSA+PSAwLjBmKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUocGVyc3Bl
Y3RpdmVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEFuaW1hdGlvbjoKLSAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1f
c3R5bGUtPmNsZWFyQW5pbWF0aW9ucygpOwotICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0g
ICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0QW5pbWF0aW9ucyhtX3BhcmVudFN0eWxlLT5hbmlt
YXRpb25zKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb246Ci0gICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5j
bGVhclRyYW5zaXRpb25zKCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAg
ICAgIG1fc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9u
cygpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlQb2ludGVyRXZlbnRz
OgotICAgIHsKLSNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0gICAgICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS82NTYxMDc3PiBXb3JrIGFyb3VuZCB0aGUgU3RvY2tzIHdpZGdldCdzIG1pc3Vz
ZSBvZiB0aGUKLSAgICAgICAgLy8gcG9pbnRlci1ldmVudHMgcHJvcGVydHkgYnkgbm90IGFwcGx5
aW5nIGl0IGluIERhc2hib2FyZC4KLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVj
a2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7Ci0gICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0
aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSNlbmRpZgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9B
TkRfUFJJTUlUSVZFKHBvaW50ZXJFdmVudHMsIFBvaW50ZXJFdmVudHMpCi0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwodGFwSGlnaGxpZ2h0Q29sb3IsIFRhcEhpZ2hsaWdodENvbG9yKTsKLSAgICAgICAgaWYg
KCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIENvbG9yIGNv
bCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgbV9z
dHlsZS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbmRpZgotI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkcpCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKHVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcsIFVzZVRvdWNoT3ZlcmZsb3dTY3Jv
bGxpbmcpOwotICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIG1fc3R5bGUtPnNldFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUb3VjaCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5SW52YWxpZDoKLSAgICAgICAgcmV0dXJu
OwotICAgIC8vIERpcmVjdGlvbmFsIHByb3BlcnRpZXMgYXJlIHJlc29sdmVkIGJ5IHJlc29sdmVE
aXJlY3Rpb25Bd2FyZVByb3BlcnR5KCkgYmVmb3JlIHRoZSBzd2l0Y2guCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlckVuZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
RW5kQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZFN0eWxlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRXaWR0aDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVyU3RhcnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0
YXJ0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0U3R5bGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0V2lkdGg6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyQmVmb3JlQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZVN0
eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVXaWR0aDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckFmdGVyQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFm
dGVyU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyV2lkdGg6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkVuZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFyZ2luU3RhcnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9y
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hcmdpbkNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5CZWZvcmVDb2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luVG9w
Q29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJvdHRvbUNvbGxhcHNlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nRW5kOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRQYWRkaW5nU3RhcnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdCZWZvcmU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdBZnRlcjoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TG9naWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2dp
Y2FsSGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2FsV2lkdGg6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2ljYWxIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWF4TG9naWNhbEhlaWdodDoKLSAgICB7Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgbmV3SWQgPSBD
U1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQsIG1fc3R5bGUtPmRp
cmVjdGlvbigpLCBtX3N0eWxlLT53cml0aW5nTW9kZSgpKTsKLSAgICAgICAgQVNTRVJUKG5ld0lk
ICE9IGlkKTsKLSAgICAgICAgcmV0dXJuIGFwcGx5UHJvcGVydHkobmV3SWQsIHZhbHVlKTsKLSAg
ICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlQYWdlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2g6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
TGluZVRocm91Z2hNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hTdHls
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoV2lkdGg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRPdmVybGluZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5l
Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZU1vZGU6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRPdmVybGluZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3Zl
cmxpbmVXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5VGV4dFVuZGVybGluZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
VW5kZXJsaW5lTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZVN0eWxlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXM6Ci0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIENTUyBUZXh0IExheW91dCBNb2R1bGUgTGV2ZWwgMzogVmVydGljYWwgd3Jp
dGluZyBzdXBwb3J0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyaXRpbmdNb2RlOiB7Ci0g
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUod3JpdGluZ01v
ZGUsIFdyaXRpbmdNb2RlKQotICAgICAgICAvLyBGSVhNRTogSXQgaXMgbm90IG9rIHRvIG1vZGlm
eSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBseWluZyBzdHlsZS4KLSAgICAgICAgaWYgKCFpc0lu
aGVyaXQgJiYgIWlzSW5pdGlhbCAmJiBtX2VsZW1lbnQgJiYgbV9lbGVtZW50ID09IG1fZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgICAgICBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7Ci0g
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVz
Y3JpcHRpb24oKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKG1fc3R5
bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFsIDogVmVydGljYWwpOwot
ICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFpbjog
ewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaW5lQm94Q29udGFpbiwgTGlu
ZUJveENvbnRhaW4pCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNl
dExpbmVCb3hDb250YWluKExpbmVCb3hDb250YWluTm9uZSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbHVlLT5pc0NTU0xpbmVCb3hDb250YWluVmFs
dWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBDU1NMaW5lQm94Q29udGFpblZh
bHVlKiBsaW5lQm94Q29udGFpblZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTTGluZUJveENvbnRhaW5W
YWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJveENvbnRhaW4obGluZUJv
eENvbnRhaW5WYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbnNpZGU6Ci0gICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMKHdyYXBTaGFwZUluc2lkZSwgV3JhcFNoYXBlSW5zaWRlKTsKLSAgICAgICAg
aWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIG1f
c3R5bGUtPnNldFdyYXBTaGFwZUluc2lkZSgwKTsKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzU2hhcGUoKSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFdyYXBTaGFwZUluc2lk
ZShwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZToKLSAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwod3JhcFNoYXBlT3V0c2lkZSwgV3JhcFNoYXBlT3V0c2lkZSk7Ci0g
ICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAg
ICAgICBtX3N0eWxlLT5zZXRXcmFwU2hhcGVPdXRzaWRlKDApOwotICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0V3JhcFNo
YXBlT3V0c2lkZShwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKTsKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gQ1NTIEZvbnRzIE1vZHVsZSBMZXZlbCAzCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0g
ICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24obV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCku
bWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0
aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgIFJlZlB0cjxGb250RmVhdHVy
ZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJlU2V0dGluZ3M6OmNyZWF0ZSgpOwotICAg
ICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAgIGlmICghaXRlbS0+aXNGb250RmVhdHVy
ZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBGb250RmVh
dHVyZVZhbHVlKiBmZWF0dXJlID0gc3RhdGljX2Nhc3Q8Rm9udEZlYXR1cmVWYWx1ZSo+KGl0ZW0p
OwotICAgICAgICAgICAgc2V0dGluZ3MtPmFwcGVuZChGb250RmVhdHVyZShmZWF0dXJlLT50YWco
KSwgZmVhdHVyZS0+dmFsdWUoKSkpOwotICAgICAgICB9Ci0gICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRGZWF0dXJlU2V0dGluZ3Moc2V0dGluZ3MucmVsZWFzZSgpKTsKLSAgICAgICAgc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRl
cjogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7
Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYgKGNyZWF0
ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3Bl
cmF0aW9ucykpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VU
KQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uczogewotICAgICAgICBWZWN0
b3I8TGVuZ3RoPiBsZW5ndGhzOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFs
dWUsIGxlbmd0aHMsIHRoaXMpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxl
LT5zZXRHcmlkQ29sdW1ucyhsZW5ndGhzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKLSAgICAgICAgVmVjdG9yPExlbmd0aD4g
bGVuZ3RoczsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCBsZW5ndGhz
LCB0aGlzKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZFJv
d3MobGVuZ3Rocyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0R3JpZENvbHVtbjogewotICAgICAgICBMZW5ndGggY29sdW1uOwotICAgICAgICBp
ZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgY29sdW1uKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29sdW1uKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvdzogewotICAg
ICAgICBMZW5ndGggcm93OwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwg
cm93KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZEl0ZW1S
b3cocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gVGhlc2Ug
cHJvcGVydGllcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRlciBsb29rdXAgdGFi
bGUuCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFJlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVh
dFg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kU2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
ckJvdHRvbUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21MZWZ0UmFkaXVz
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1czoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
ckJvdHRvbVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcklt
YWdlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91dHNldDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVySW1hZ2VSZXBlYXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcklt
YWdlU2xpY2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJMZWZ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVm
dFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSYWRpdXM6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9y
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJSaWdodFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTcGFjaW5n
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyVG9wOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1czoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyVG9wUmlnaHRSYWRpdXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvdHRvbToKLSAgICBjYXNlIENTU1By
b3BlcnR5Qm94U2l6aW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlDYXB0aW9uU2lkZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5Q2xlYXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXA6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlDb3VudGVyUmVzZXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUN1cnNvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlEaXNwbGF5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlFbXB0eUNlbGxzOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlGbG9hdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUhl
aWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5SW1hZ2VSZW5kZXJpbmc6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUxlZnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmc6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUxpc3RTdHlsZVBvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVUeXBlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkJv
dHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luTGVmdDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5TWFyZ2luUmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblRvcDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5TWF4SGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhXaWR0aDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5XaWR0
aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3JwaGFuczoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0
bGluZToKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlPdXRsaW5lT2Zmc2V0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lU3R5bGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3Zl
cmZsb3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93WDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5T3ZlcmZsb3dZOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlQYWRkaW5nQm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nTGVmdDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlQ
YWRkaW5nVG9wOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlcjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5UGFnZUJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJl
YWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlSZXNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVJpZ2h0OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlTaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlTcGVhazoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VGFibGVMYXlvdXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRBbGlnbjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRJbmRl
bnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dFJlbmRlcmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFRyYW5zZm9ybToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VG9wOgotICAgIGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlQmlkaToK
LSAgICBjYXNlIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
VmlzaWJpbGl0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXk6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRpcmVjdGlvbjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvbkZpbGxNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRp
b25JdGVyYXRpb25Db3VudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFt
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0YXRlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0QXBwZWFyYW5jZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXNw
ZWN0UmF0aW86Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENsaXA6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJhY2tncm91bmRPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91
bmRTaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJGaXQ6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJJbWFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
UmFkaXVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmc6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEFsaWduOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3hEaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXg6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXhHcm91cDoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm94TGluZXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yZGlu
YWxHcm91cDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JpZW50OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3hQYWNrOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2xv
ckNvcnJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkF4aXM6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5CcmVha0luc2lkZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQ291bnQ6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVXaWR0aDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uczoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uU3BhbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uV2lkdGg6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEZsZXhBbGlnbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleERpcmVjdGlvbjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleEZsb3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZsZXhJdGVtQWxpZ246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhMaW5l
UGFjazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleE9yZGVyOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRGbGV4UGFjazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleFdy
YXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dGcm9tOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRGbG93SW50bzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEtlcm5p
bmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhpbmc6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRIaWdobGlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUNo
YXJhY3RlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRBZnRlcjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRCZWZvcmU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXM6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEh5cGhlbnM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVBbGlnbjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFrOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRMaW5lR3JpZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZVNuYXA6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVEaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hcnF1ZWVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFz
a0F0dGFjaG1lbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlT3V0c2V0OgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VSZXBlYXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tCb3hJbWFnZVNsaWNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94
SW1hZ2VTb3VyY2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVdpZHRo
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza0NvbXBvc2l0ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0lt
YWdlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tQb3NpdGlvblg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblk6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tSZXBlYXRYOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0
WToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1NpemU6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hdGNoTmVhcmVzdE1haWxCbG9ja3F1b3RlQ29sb3I6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE5ic3BNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVj
dGl2ZU9yaWdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmlnaW5Y
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpblk6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFByaW50Q29sb3JBZGp1c3Q6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lv
bkJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0luc2lk
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uT3ZlcmZsb3c6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0Q29tYmluZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1Bvc2l0aW9uOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNTdHlsZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dE9y
aWVudGF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2VjdXJpdHk6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2Zvcm1PcmlnaW5YOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5Z
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5aOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1TdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvbkRlbGF5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9u
RHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eToK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJhZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VXNlck1vZGlmeToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
V3JhcEZsb3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBNYXJnaW46Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBQYWRkaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRXcmFwVGhyb3VnaDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2hpdGVTcGFjZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2lkb3dzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXaWR0aDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V29yZEJyZWFrOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkU3BhY2luZzoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V29yZFdyYXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVpJbmRl
eDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Wm9vbToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybjsKLSNpZiBFTkFCTEUoU1ZHKQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMKLSAgICAgICAgYXBwbHlTVkdQcm9wZXJ0eShp
ZCwgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICB9Ci19Ci0KLXZvaWQgU3R5
bGVSZXNvbHZlcjo6bWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUo
KSkgewotICAgICAgICBsYXllci0+c2V0QXR0YWNobWVudChGaWxsTGF5ZXI6OmluaXRpYWxGaWxs
QXR0YWNobWVudChsYXllci0+dHlwZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUZpeGVkOgotICAgICAgICAgICAgbGF5ZXItPnNl
dEF0dGFjaG1lbnQoRml4ZWRCYWNrZ3JvdW5kQXR0YWNobWVudCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVNjcm9sbDoKLSAgICAgICAgICAgIGxheWVyLT5zZXRB
dHRhY2htZW50KFNjcm9sbEJhY2tncm91bmRBdHRhY2htZW50KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1ZhbHVlTG9jYWw6Ci0gICAgICAgICAgICBsYXllci0+c2V0QXR0
YWNobWVudChMb2NhbEJhY2tncm91bmRBdHRhY2htZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBT
dHlsZVJlc29sdmVyOjptYXBGaWxsQ2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7
Ci0gICAgICAgIGxheWVyLT5zZXRDbGlwKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDbGlwKGxheWVy
LT50eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7Ci0gICAgbGF5ZXItPnNldENsaXAoKnByaW1pdGl2ZVZhbHVlKTsKLX0KLQotdm9pZCBTdHls
ZVJlc29sdmVyOjptYXBGaWxsQ29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkp
IHsKLSAgICAgICAgbGF5ZXItPnNldENvbXBvc2l0ZShGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ29t
cG9zaXRlKGxheWVyLT50eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7Ci0gICAgbGF5ZXItPnNldENvbXBvc2l0ZSgqcHJpbWl0aXZlVmFsdWUp
OwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxPcmlnaW4oQ1NTUHJvcGVydHlJRCwg
RmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJ
bml0aWFsVmFsdWUoKSkgewotICAgICAgICBsYXllci0+c2V0T3JpZ2luKEZpbGxMYXllcjo6aW5p
dGlhbEZpbGxPcmlnaW4obGF5ZXItPnR5cGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBsYXllci0+c2V0T3JpZ2luKCpwcmltaXRpdmVW
YWx1ZSk7Ci19Ci0KLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJ
bWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYg
KHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zy
b21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlKSk7Ci0K
LSAgICBpZiAodmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKQotICAgICAgICByZXR1cm4g
Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlKj4odmFsdWUpKTsKLQotI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQot
ICAgIGlmICh2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBzZXRPclBl
bmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPih2
YWx1ZSkpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gMDsKLX0KLQotUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1ZSogdmFsdWUpCi17Ci0gICAgUmVmUHRyPFN0eWxlSW1h
Z2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7Ci0gICAgaWYgKGltYWdl
ICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3Bl
cnRpZXMuYWRkKHByb3BlcnR5KTsKLSAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwotfQotCi1Q
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzUGVuZGluZygpKSB7Ci0gICAgICAgIG1fcGVuZGlu
Z0ltYWdlUHJvcGVydGllcy5hZGQocHJvcGVydHkpOwotICAgICAgICByZXR1cm4gU3R5bGVQZW5k
aW5nSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiBTdHlsZUdlbmVyYXRl
ZEltYWdlOjpjcmVhdGUodmFsdWUpOwotfQotCi0jaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi1Q
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNldE9yUGVuZGluZ0Zyb21WYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZhbHVlKiB2YWx1ZSkKLXsKLSAg
ICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2VT
ZXQoZG9jdW1lbnQoKSk7Ci0gICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgp
KQotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKLSAgICBy
ZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwotfQotI2VuZGlmCi0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6
bWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEZpbGxMYXllciogbGF5ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKLSAg
ICAgICAgbGF5ZXItPnNldEltYWdlKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxJbWFnZShsYXllci0+
dHlwZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsYXllci0+c2V0SW1hZ2Uo
c3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpt
YXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSog
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGxh
eWVyLT5zZXRSZXBlYXRYKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxSZXBlYXRYKGxheWVyLT50eXBl
KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0g
ICAgbGF5ZXItPnNldFJlcGVhdFgoKnByaW1pdGl2ZVZhbHVlKTsKLX0KLQotdm9pZCBTdHlsZVJl
c29sdmVyOjptYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0g
ICAgICAgIGxheWVyLT5zZXRSZXBlYXRZKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxSZXBlYXRZKGxh
eWVyLT50eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7Ci0gICAgbGF5ZXItPnNldFJlcGVhdFkoKnByaW1pdGl2ZVZhbHVlKTsKLX0KLQotdm9p
ZCBTdHlsZVJlc29sdmVyOjptYXBGaWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShTaXplTm9uZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVDb250YWluKQotICAgICAgICBsYXllci0+c2V0
U2l6ZVR5cGUoQ29udGFpbik7Ci0gICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVDb3ZlcikKLSAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKENvdmVyKTsK
LSAgICBlbHNlCi0gICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShTaXplTGVuZ3RoKTsKLQotICAg
IExlbmd0aFNpemUgYiA9IEZpbGxMYXllcjo6aW5pdGlhbEZpbGxTaXplTGVuZ3RoKGxheWVyLT50
eXBlKCkpOwotCi0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8IHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ29udGFpbiB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZUNvdmVyKSB7Ci0gICAgICAgIGxheWVyLT5zZXRTaXplTGVuZ3Ro
KGIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IG1f
c3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIExlbmd0aCBmaXJzdExlbmd0aDsKLSAgICBM
ZW5ndGggc2Vjb25kTGVuZ3RoOwotCi0gICAgaWYgKFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1
ZS0+Z2V0UGFpclZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0ID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5maXJzdCgpKTsKLSAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4ocGFpci0+c2Vjb25kKCkpOwotICAgICAgICBmaXJzdExlbmd0aCA9IGZpcnN0LT5jb252ZXJ0
VG9MZW5ndGg8QW55Q29udmVyc2lvbj4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29t
RmFjdG9yKTsKLSAgICAgICAgc2Vjb25kTGVuZ3RoID0gc2Vjb25kLT5jb252ZXJ0VG9MZW5ndGg8
QW55Q29udmVyc2lvbj4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBmaXJzdExlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252
ZXJ0VG9MZW5ndGg8QW55Q29udmVyc2lvbj4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6
b29tRmFjdG9yKTsKLSAgICAgICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKCk7Ci0gICAgfQotCi0g
ICAgaWYgKGZpcnN0TGVuZ3RoLmlzVW5kZWZpbmVkKCkgfHwgc2Vjb25kTGVuZ3RoLmlzVW5kZWZp
bmVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGIuc2V0V2lkdGgoZmlyc3RMZW5ndGgpOwot
ICAgIGIuc2V0SGVpZ2h0KHNlY29uZExlbmd0aCk7Ci0gICAgbGF5ZXItPnNldFNpemVMZW5ndGgo
Yik7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFhQb3NpdGlvbihDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
LT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRYUG9zaXRpb24oRmlsbExh
eWVyOjppbml0aWFsRmlsbFhQb3NpdGlvbihsYXllci0+dHlwZSgpKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29t
KCk7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBMZW5ndGggbDsKLSAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgIGwgPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cik7Ci0gICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAg
ICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsK
LSAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhM
ZW5ndGgoKSkKLSAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVl
KCktPnRvQ2FsY1ZhbHVlKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcikp
OwotICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0
aCgpKQotICAgICAgICBsID0gcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0
aCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotICAgIGxheWVyLT5zZXRYUG9zaXRpb24o
bCk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFlQb3NpdGlvbihDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
LT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRZUG9zaXRpb24oRmlsbExh
eWVyOjppbml0aWFsRmlsbFlQb3NpdGlvbihsYXllci0+dHlwZSgpKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29t
KCk7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBMZW5ndGggbDsKLSAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgIGwgPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cik7Ci0gICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAg
ICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsK
LSAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhM
ZW5ndGgoKSkKLSAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVl
KCktPnRvQ2FsY1ZhbHVlKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcikp
OwotICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0
aCgpKQotICAgICAgICBsID0gcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0
aCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotICAgIGxheWVyLT5zZXRZUG9zaXRpb24o
bCk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0aW9u
KiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlh
bFZhbHVlKCkpIHsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXREZWxheShBbmltYXRpb246OmluaXRp
YWxBbmltYXRpb25EZWxheSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXREZWxheShwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZVRpbWU8ZmxvYXQsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNvbmRzPigpKTsKLX0KLQotdm9p
ZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiBsYXllciwg
Q1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewot
ICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkRp
cmVjdGlvbigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgIGNhc2Ug
Q1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgIGxheWVyLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpB
bmltYXRpb25EaXJlY3Rpb25Ob3JtYWwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Zh
bHVlQWx0ZXJuYXRlOgotICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5p
bWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NW
YWx1ZVJldmVyc2U6Ci0gICAgICAgIGxheWVyLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb25SZXZlcnNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1
ZUFsdGVybmF0ZVJldmVyc2U6Ci0gICAgICAgIGxheWVyLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9u
OjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1h
dGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0lu
aXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oQW5pbWF0aW9u
Ojppbml0aWFsQW5pbWF0aW9uRHVyYXRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24ocHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGZsb2F0LCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vjb25kcz4o
KSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0
aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSkgewotICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9uOjppbml0aWFs
QW5pbWF0aW9uRmlsbE1vZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsK
LSAgICBjYXNlIENTU1ZhbHVlTm9uZToKLSAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1h
dGlvbkZpbGxNb2RlTm9uZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVGb3J3
YXJkczoKLSAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1hdGlvbkZpbGxNb2RlRm9yd2Fy
ZHMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlQmFja3dhcmRzOgotICAgICAg
ICBsYXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9uRmlsbE1vZGVCYWNrd2FyZHMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlQm90aDoKLSAgICAgICAgbGF5ZXItPnNldEZpbGxN
b2RlKEFuaW1hdGlvbkZpbGxNb2RlQm90aCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
dm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChBbmltYXRpb24q
IGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSkgewotICAgICAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50KEFuaW1hdGlv
bjo6aW5pdGlhbEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRJdGVy
YXRpb25Db3VudCgtMSk7Ci0gICAgZWxzZQotICAgICAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlv
bkNvdW50KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpOwotfQotCi12b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewotICAgICAgICBsYXll
ci0+c2V0TmFtZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25OYW1lKCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICBsYXllci0+c2V0SXNO
b25lQW5pbWF0aW9uKHRydWUpOwotICAgIGVsc2UKLSAgICAgICAgbGF5ZXItPnNldE5hbWUocHJp
bWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUp
Ci17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgIGxheWVyLT5z
ZXRQbGF5U3RhdGUoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uUGxheVN0YXRlKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBFQW5pbVBs
YXlTdGF0ZSBwbGF5U3RhdGUgPSAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVQYXVzZWQpID8gQW5pbVBsYXlTdGF0ZVBhdXNlZCA6IEFuaW1QbGF5U3RhdGVQbGF5aW5nOwot
ICAgIGxheWVyLT5zZXRQbGF5U3RhdGUocGxheVN0YXRlKTsKLX0KLQotdm9pZCBTdHlsZVJlc29s
dmVyOjptYXBBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUq
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewotICAgICAgICBh
bmltYXRpb24tPnNldEFuaW1hdGlvbk1vZGUoQW5pbWF0aW9uOjpBbmltYXRlQWxsKTsKLSAgICAg
ICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBbGwpIHsKLSAgICAgICAgYW5pbWF0aW9uLT5z
ZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCk7Ci0gICAgICAgIGFuaW1hdGlv
bi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJbnZhbGlkKTsKLSAgICB9IGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICBhbmltYXRp
b24tPnNldEFuaW1hdGlvbk1vZGUoQW5pbWF0aW9uOjpBbmltYXRlTm9uZSk7Ci0gICAgICAgIGFu
aW1hdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJbnZhbGlkKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbk1vZGUoQW5pbWF0aW9uOjpBbmltYXRlU2lu
Z2xlUHJvcGVydHkpOwotICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KHN0YXRpY19jYXN0
PENTU1Byb3BlcnR5SUQ+KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSk7Ci0gICAgfQotfQot
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlv
biogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRp
YWxWYWx1ZSgpKSB7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQW5pbWF0
aW9uOjppbml0aWFsQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSkgewotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxpbmVhcjoKLSAgICAgICAgICAgICAg
ICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKExpbmVhclRpbWluZ0Z1bmN0aW9uOjpjcmVh
dGUoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVl
RWFzZToKLSAgICAgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlSW46Ci0gICAgICAgICAgICAgICAgYW5pbWF0
aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
MC40MiwgMC4wLCAxLjAsIDEuMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZUVhc2VPdXQ6Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRU
aW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoMC4wLCAwLjAs
IDAuNTgsIDEuMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZUVhc2VJbk91dDoKLSAgICAgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1
bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgwLjQyLCAwLjAsIDAuNTgs
IDEuMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZVN0ZXBTdGFydDoKLSAgICAgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9u
KFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgxLCB0cnVlKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU3RlcEVuZDoKLSAgICAgICAgICAgICAg
ICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0
ZSgxLCBmYWxzZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodmFsdWUtPmlzQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvblZhbHVlKCkpIHsKLSAgICAgICAgQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVl
KiBjdWJpY1RpbWluZ0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvblZhbHVlKj4odmFsdWUpOwotICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0
aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZShjdWJpY1RpbWluZ0Z1bmN0aW9u
LT54MSgpLCBjdWJpY1RpbWluZ0Z1bmN0aW9uLT55MSgpLCBjdWJpY1RpbWluZ0Z1bmN0aW9uLT54
MigpLCBjdWJpY1RpbWluZ0Z1bmN0aW9uLT55MigpKSk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS0+
aXNTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUoKSkgewotICAgICAgICBDU1NTdGVwc1RpbWluZ0Z1
bmN0aW9uVmFsdWUqIHN0ZXBzVGltaW5nRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxDU1NTdGVwc1Rp
bWluZ0Z1bmN0aW9uVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5n
RnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHN0ZXBzVGltaW5nRnVuY3Rpb24t
Pm51bWJlck9mU3RlcHMoKSwgc3RlcHNUaW1pbmdGdW5jdGlvbi0+c3RlcEF0U3RhcnQoKSkpOwot
ICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzTGluZWFyVGltaW5nRnVuY3Rpb25WYWx1ZSgpKQotICAg
ICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKExpbmVhclRpbWluZ0Z1bmN0aW9uOjpj
cmVhdGUoKSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1h
Z2UpCi17Ci0gICAgLy8gSWYgd2UncmUgbm90IGEgdmFsdWUgbGlzdCwgdGhlbiB3ZSBhcmUgIm5v
bmUiIGFuZCBkb24ndCBuZWVkIHRvIGFsdGVyIHRoZSBlbXB0eSBpbWFnZSBhdCBhbGwuCi0gICAg
aWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFJldHJpZXZlIHRoZSBib3JkZXIgaW1hZ2UgdmFsdWUuCi0gICAgQ1NTVmFsdWVMaXN0
KiBib3JkZXJJbWFnZSA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLQotICAg
IC8vIFNldCB0aGUgaW1hZ2UgKHRoaXMga2lja3Mgb2ZmIHRoZSBsb2FkKS4KLSAgICBDU1NQcm9w
ZXJ0eUlEIGltYWdlUHJvcGVydHk7Ci0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVySW1hZ2UpCi0gICAgICAgIGltYWdlUHJvcGVydHkgPSBDU1NQcm9wZXJ0eUJvcmRl
ckltYWdlU291cmNlOwotICAgIGVsc2UgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0
TWFza0JveEltYWdlKQotICAgICAgICBpbWFnZVByb3BlcnR5ID0gQ1NTUHJvcGVydHlXZWJraXRN
YXNrQm94SW1hZ2VTb3VyY2U7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZVByb3BlcnR5ID0gcHJv
cGVydHk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGJvcmRlckltYWdlLT5sZW5n
dGgoKSA7ICsraSkgewotICAgICAgICBDU1NWYWx1ZSogY3VycmVudCA9IGJvcmRlckltYWdlLT5p
dGVtKGkpOwotCi0gICAgICAgIGlmIChjdXJyZW50LT5pc0ltYWdlVmFsdWUoKSB8fCBjdXJyZW50
LT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKQotI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAg
ICAgICAgICAgfHwgY3VycmVudC0+aXNJbWFnZVNldFZhbHVlKCkKLSNlbmRpZgotICAgICAgICAg
ICAgKQotICAgICAgICAgICAgaW1hZ2Uuc2V0SW1hZ2Uoc3R5bGVJbWFnZShpbWFnZVByb3BlcnR5
LCBjdXJyZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlzQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlKCkpCi0gICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKGN1cnJlbnQsIGlt
YWdlKTsKLSAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAg
ICAgICAgQ1NTVmFsdWVMaXN0KiBzbGFzaExpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3Qq
PihjdXJyZW50KTsKLSAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgaW1hZ2Ugc2xpY2VzLgotICAg
ICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgwKSAmJiBzbGFzaExpc3QtPml0ZW0oMCktPmlz
Qm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1h
Z2VTbGljZShzbGFzaExpc3QtPml0ZW0oMCksIGltYWdlKTsKLQotICAgICAgICAgICAgLy8gTWFw
IGluIHRoZSBib3JkZXIgc2xpY2VzLgotICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgx
KSkKLSAgICAgICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXMobWFwTmluZVBpZWNlSW1h
Z2VRdWFkKHNsYXNoTGlzdC0+aXRlbSgxKSkpOwotCi0gICAgICAgICAgICAvLyBNYXAgaW4gdGhl
IG91dHNldC4KLSAgICAgICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0oMikpCi0gICAgICAgICAg
ICAgICAgaW1hZ2Uuc2V0T3V0c2V0KG1hcE5pbmVQaWVjZUltYWdlUXVhZChzbGFzaExpc3QtPml0
ZW0oMikpKTsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LT5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKLSAgICAgICAgICAgIC8vIFNldCB0aGUgYXBwcm9wcmlhdGUgcnVsZXMgZm9yIHN0cmV0Y2gv
cm91bmQvcmVwZWF0IG9mIHRoZSBzbGljZXMuCi0gICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFn
ZVJlcGVhdChjdXJyZW50LCBpbWFnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJv
cGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFnZSkgewotICAgICAgICAvLyBXZSBo
YXZlIHRvIHByZXNlcnZlIHRoZSBsZWdhY3kgYmVoYXZpb3Igb2YgLXdlYmtpdC1ib3JkZXItaW1h
Z2UgYW5kIG1ha2UgdGhlIGJvcmRlciBzbGljZXMKLSAgICAgICAgLy8gYWxzbyBzZXQgdGhlIGJv
cmRlciB3aWR0aHMuIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgcGVyY2VudGFnZXMsIHNp
bmNlIHdlIGRvbid0IGV2ZW4gc3VwcG9ydAotICAgICAgICAvLyB0aG9zZSBvbiByZWFsIGJvcmRl
cnMgeWV0LgotICAgICAgICBpZiAoaW1hZ2UuYm9yZGVyU2xpY2VzKCkudG9wKCkuaXNGaXhlZCgp
KQotICAgICAgICAgICAgc3R5bGUoKS0+c2V0Qm9yZGVyVG9wV2lkdGgoaW1hZ2UuYm9yZGVyU2xp
Y2VzKCkudG9wKCkudmFsdWUoKSk7Ci0gICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS5y
aWdodCgpLmlzRml4ZWQoKSkKLSAgICAgICAgICAgIHN0eWxlKCktPnNldEJvcmRlclJpZ2h0V2lk
dGgoaW1hZ2UuYm9yZGVyU2xpY2VzKCkucmlnaHQoKS52YWx1ZSgpKTsKLSAgICAgICAgaWYgKGlt
YWdlLmJvcmRlclNsaWNlcygpLmJvdHRvbSgpLmlzRml4ZWQoKSkKLSAgICAgICAgICAgIHN0eWxl
KCktPnNldEJvcmRlckJvdHRvbVdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLmJvdHRvbSgpLnZh
bHVlKCkpOwotICAgICAgICBpZiAoaW1hZ2UuYm9yZGVyU2xpY2VzKCkubGVmdCgpLmlzRml4ZWQo
KSkKLSAgICAgICAgICAgIHN0eWxlKCktPnNldEJvcmRlckxlZnRXaWR0aChpbWFnZS5ib3JkZXJT
bGljZXMoKS5sZWZ0KCkudmFsdWUoKSk7Ci0gICAgfQotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hcE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYg
aW1hZ2UpCi17Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzQm9yZGVySW1hZ2VTbGljZVZh
bHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJldHJpZXZlIHRoZSBib3JkZXIgaW1h
Z2UgdmFsdWUuCi0gICAgQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlKiBib3JkZXJJbWFnZVNsaWNl
ID0gc3RhdGljX2Nhc3Q8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlKj4odmFsdWUpOwotCi0gICAg
Ly8gU2V0IHVwIGEgbGVuZ3RoIGJveCB0byByZXByZXNlbnQgb3VyIGltYWdlIHNsaWNlcy4KLSAg
ICBMZW5ndGhCb3ggYm94OwotICAgIFF1YWQqIHNsaWNlcyA9IGJvcmRlckltYWdlU2xpY2UtPnNs
aWNlcygpOwotICAgIGlmIChzbGljZXMtPnRvcCgpLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAg
Ym94Lm1fdG9wID0gTGVuZ3RoKHNsaWNlcy0+dG9wKCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNl
bnQpOwotICAgIGVsc2UKLSAgICAgICAgYm94Lm1fdG9wID0gTGVuZ3RoKHNsaWNlcy0+dG9wKCkt
PmdldEludFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4ZWQpOwotICAg
IGlmIChzbGljZXMtPmJvdHRvbSgpLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgYm94Lm1fYm90
dG9tID0gTGVuZ3RoKHNsaWNlcy0+Ym90dG9tKCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQp
OwotICAgIGVsc2UKLSAgICAgICAgYm94Lm1fYm90dG9tID0gTGVuZ3RoKChpbnQpc2xpY2VzLT5i
b3R0b20oKS0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIEZp
eGVkKTsKLSAgICBpZiAoc2xpY2VzLT5sZWZ0KCktPmlzUGVyY2VudGFnZSgpKQotICAgICAgICBi
b3gubV9sZWZ0ID0gTGVuZ3RoKHNsaWNlcy0+bGVmdCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJj
ZW50KTsKLSAgICBlbHNlCi0gICAgICAgIGJveC5tX2xlZnQgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0
KCktPmdldEludFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4ZWQpOwot
ICAgIGlmIChzbGljZXMtPnJpZ2h0KCktPmlzUGVyY2VudGFnZSgpKQotICAgICAgICBib3gubV9y
aWdodCA9IExlbmd0aChzbGljZXMtPnJpZ2h0KCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQp
OwotICAgIGVsc2UKLSAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgp
LT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIEZpeGVkKTsKLSAg
ICBpbWFnZS5zZXRJbWFnZVNsaWNlcyhib3gpOwotCi0gICAgLy8gU2V0IG91ciBmaWxsIG1vZGUu
Ci0gICAgaW1hZ2Uuc2V0RmlsbChib3JkZXJJbWFnZVNsaWNlLT5tX2ZpbGwpOwotfQotCi1MZW5n
dGhCb3ggU3R5bGVSZXNvbHZlcjo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1
ZSkKLXsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAg
ICAgICByZXR1cm4gTGVuZ3RoQm94KCk7Ci0KLSAgICAvLyBHZXQgb3VyIHpvb20gdmFsdWUuCi0g
ICAgZmxvYXQgem9vbSA9IHVzZVNWR1pvb21SdWxlcygpID8gMS4wZiA6IHN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKTsKLQotICAgIC8vIFJldHJpZXZlIHRoZSBwcmltaXRpdmUgdmFsdWUuCi0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIGJvcmRlcldpZHRocyA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwotCi0gICAgLy8gU2V0IHVwIGEgbGVuZ3RoIGJveCB0byByZXByZXNl
bnQgb3VyIGltYWdlIHNsaWNlcy4KLSAgICBMZW5ndGhCb3ggYm94OyAvLyBEZWZhdWx0cyB0byAn
YXV0bycgc28gd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhhdCBleHBsaWNpdGx5IGJlbG93Lgot
ICAgIFF1YWQqIHNsaWNlcyA9IGJvcmRlcldpZHRocy0+Z2V0UXVhZFZhbHVlKCk7Ci0gICAgaWYg
KHNsaWNlcy0+dG9wKCktPmlzTnVtYmVyKCkpCi0gICAgICAgIGJveC5tX3RvcCA9IExlbmd0aChz
bGljZXMtPnRvcCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7Ci0gICAgZWxzZSBpZiAoc2xp
Y2VzLT50b3AoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIGJveC5tX3RvcCA9IExlbmd0aChz
bGljZXMtPnRvcCgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpLCBQZXJjZW50KTsKLSAgICBlbHNlIGlmIChzbGljZXMtPnRvcCgpLT5nZXRJZGVudCgp
ICE9IENTU1ZhbHVlQXV0bykKLSAgICAgICAgYm94Lm1fdG9wID0gc2xpY2VzLT50b3AoKS0+Y29t
cHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7Ci0K
LSAgICBpZiAoc2xpY2VzLT5yaWdodCgpLT5pc051bWJlcigpKQotICAgICAgICBib3gubV9yaWdo
dCA9IExlbmd0aChzbGljZXMtPnJpZ2h0KCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKLSAg
ICBlbHNlIGlmIChzbGljZXMtPnJpZ2h0KCktPmlzUGVyY2VudGFnZSgpKQotICAgICAgICBib3gu
bV9yaWdodCA9IExlbmd0aChzbGljZXMtPnJpZ2h0KCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQpOwotICAgIGVsc2UgaWYgKHNsaWNl
cy0+cmlnaHQoKS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJveC5tX3Jp
Z2h0ID0gc2xpY2VzLT5yaWdodCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9v
dEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKLQotICAgIGlmIChzbGljZXMtPmJvdHRvbSgpLT5pc051
bWJlcigpKQotICAgICAgICBib3gubV9ib3R0b20gPSBMZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+
Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOwotICAgIGVsc2UgaWYgKHNsaWNlcy0+Ym90dG9tKCkt
PmlzUGVyY2VudGFnZSgpKQotICAgICAgICBib3gubV9ib3R0b20gPSBMZW5ndGgoc2xpY2VzLT5i
b3R0b20oKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdF
KSwgUGVyY2VudCk7Ci0gICAgZWxzZSBpZiAoc2xpY2VzLT5ib3R0b20oKS0+Z2V0SWRlbnQoKSAh
PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJveC5tX2JvdHRvbSA9IHNsaWNlcy0+Ym90dG9tKCkt
PmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb20p
OwotCi0gICAgaWYgKHNsaWNlcy0+bGVmdCgpLT5pc051bWJlcigpKQotICAgICAgICBib3gubV9s
ZWZ0ID0gTGVuZ3RoKHNsaWNlcy0+bGVmdCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7Ci0g
ICAgZWxzZSBpZiAoc2xpY2VzLT5sZWZ0KCktPmlzUGVyY2VudGFnZSgpKQotICAgICAgICBib3gu
bV9sZWZ0ID0gTGVuZ3RoKHNsaWNlcy0+bGVmdCgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50KTsKLSAgICBlbHNlIGlmIChzbGljZXMt
PmxlZnQoKS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJveC5tX2xlZnQg
PSBzbGljZXMtPmxlZnQoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVt
ZW50U3R5bGUoKSwgem9vbSk7Ci0KLSAgICByZXR1cm4gYm94OwotfQotCi12b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNl
SW1hZ2UmIGltYWdlKQotewotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIFBh
aXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7Ci0gICAgaWYgKCFwYWly
IHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW50IGZpcnN0SWRlbnRpZmllciA9IHBhaXItPmZpcnN0KCktPmdldElkZW50KCk7Ci0g
ICAgaW50IHNlY29uZElkZW50aWZpZXIgPSBwYWlyLT5zZWNvbmQoKS0+Z2V0SWRlbnQoKTsKLQot
ICAgIEVOaW5lUGllY2VJbWFnZVJ1bGUgaG9yaXpvbnRhbFJ1bGU7Ci0gICAgc3dpdGNoIChmaXJz
dElkZW50aWZpZXIpIHsKLSAgICBjYXNlIENTU1ZhbHVlU3RyZXRjaDoKLSAgICAgICAgaG9yaXpv
bnRhbFJ1bGUgPSBTdHJldGNoSW1hZ2VSdWxlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1ZhbHVlUm91bmQ6Ci0gICAgICAgIGhvcml6b250YWxSdWxlID0gUm91bmRJbWFnZVJ1bGU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVTcGFjZToKLSAgICAgICAgaG9yaXpvbnRh
bFJ1bGUgPSBTcGFjZUltYWdlUnVsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogLy8g
Q1NTVmFsdWVSZXBlYXQKLSAgICAgICAgaG9yaXpvbnRhbFJ1bGUgPSBSZXBlYXRJbWFnZVJ1bGU7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpbWFnZS5zZXRIb3Jpem9udGFsUnVsZShob3Jp
em9udGFsUnVsZSk7Ci0KLSAgICBFTmluZVBpZWNlSW1hZ2VSdWxlIHZlcnRpY2FsUnVsZTsKLSAg
ICBzd2l0Y2ggKHNlY29uZElkZW50aWZpZXIpIHsKLSAgICBjYXNlIENTU1ZhbHVlU3RyZXRjaDoK
LSAgICAgICAgdmVydGljYWxSdWxlID0gU3RyZXRjaEltYWdlUnVsZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDU1NWYWx1ZVJvdW5kOgotICAgICAgICB2ZXJ0aWNhbFJ1bGUgPSBSb3VuZElt
YWdlUnVsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVNwYWNlOgotICAgICAg
ICB2ZXJ0aWNhbFJ1bGUgPSBTcGFjZUltYWdlUnVsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDogLy8gQ1NTVmFsdWVSZXBlYXQKLSAgICAgICAgdmVydGljYWxSdWxlID0gUmVwZWF0SW1h
Z2VSdWxlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaW1hZ2Uuc2V0VmVydGljYWxSdWxl
KHZlcnRpY2FsUnVsZSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6
ZUFkanVzdCgpCi17Ci0gICAgaWYgKG1fc3R5bGUtPnRleHRTaXplQWRqdXN0KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24obV9zdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCkpOwotICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSk7Ci0gICAgbV9zdHlsZS0+
c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Ci19Ci0KLXZvaWQgU3R5bGVS
ZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKQotewotICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpID09IHBh
cmVudFN0eWxlLT5lZmZlY3RpdmVab29tKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwot
ICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKLSAgICBz
ZXRGb250U2l6ZShuZXdGb250RGVzY3JpcHRpb24sIGNoaWxkRm9udC5zcGVjaWZpZWRTaXplKCkp
OwotICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLX0K
LQotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCi17Ci0gICAgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0KLSAg
ICBpZiAoY2hpbGRGb250LmlzQWJzb2x1dGVTaXplKCkgfHwgIXBhcmVudFN0eWxlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnQgPSBwYXJl
bnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKGNoaWxkRm9udC51c2VGaXhlZERl
ZmF1bHRTaXplKCkgPT0gcGFyZW50Rm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIEZvciBub3csIGx1bXAgYWxsIGZhbWlsaWVzIGJ1dCBtb25vc3Bh
Y2UgdG9nZXRoZXIuCi0gICAgaWYgKGNoaWxkRm9udC5nZW5lcmljRmFtaWx5KCkgIT0gRm9udERl
c2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkgJiYKLSAgICAgICAgcGFyZW50Rm9udC5nZW5lcmlj
RmFtaWx5KCkgIT0gRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFdlIGtub3cgdGhlIHBhcmVudCBpcyBtb25vc3BhY2Ugb3IgdGhlIGNo
aWxkIGlzIG1vbm9zcGFjZSwgYW5kIHRoYXQgZm9udAotICAgIC8vIHNpemUgd2FzIHVuc3BlY2lm
aWVkLiAgV2Ugd2FudCB0byBzY2FsZSBvdXIgZm9udCBzaXplIGFzIGFwcHJvcHJpYXRlLgotICAg
IC8vIElmIHRoZSBmb250IHVzZXMgYSBrZXl3b3JkIHNpemUsIHRoZW4gd2UgcmVmZXRjaCBmcm9t
IHRoZSB0YWJsZSByYXRoZXIgdGhhbgotICAgIC8vIG11bHRpcGx5aW5nIGJ5IG91ciBzY2FsZSBm
YWN0b3IuCi0gICAgZmxvYXQgc2l6ZTsKLSAgICBpZiAoY2hpbGRGb250LmtleXdvcmRTaXplKCkp
Ci0gICAgICAgIHNpemUgPSBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLmRvY3VtZW50KCks
IENTU1ZhbHVlWHhTbWFsbCArIGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgpIC0gMSwgY2hpbGRGb250
LnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFNldHRpbmdzKiBz
ZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwotICAgICAgICBmbG9h
dCBmaXhlZFNjYWxlRmFjdG9yID0gc2V0dGluZ3MKLSAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpKSAvIHNldHRpbmdzLT5kZWZh
dWx0Rm9udFNpemUoKQotICAgICAgICAgICAgOiAxOwotICAgICAgICBzaXplID0gcGFyZW50Rm9u
dC51c2VGaXhlZERlZmF1bHRTaXplKCkgPwotICAgICAgICAgICAgICAgIGNoaWxkRm9udC5zcGVj
aWZpZWRTaXplKCkgLyBmaXhlZFNjYWxlRmFjdG9yIDoKLSAgICAgICAgICAgICAgICBjaGlsZEZv
bnQuc3BlY2lmaWVkU2l6ZSgpICogZml4ZWRTY2FsZUZhY3RvcjsKLSAgICB9Ci0KLSAgICBGb250
RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7Ci0gICAgc2V0Rm9udFNp
emUobmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9u
dFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCi17Ci0g
ICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZSht
X2NoZWNrZXIuZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJz
b2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7Ci19Ci0KLWZsb2F0IFN0eWxl
UmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1
bWVudCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVj
aWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcykKLXsKLSAgICBmbG9hdCB6b29tRmFjdG9y
ID0gMS4wZjsKLSAgICBpZiAoIXVzZVNWR1pvb21SdWxlcykgewotICAgICAgICB6b29tRmFjdG9y
ID0gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50LT5mcmFtZSgpKQotICAgICAgICAgICAgem9vbUZhY3RvciAqPSBmcmFtZS0+dGV4dFpv
b21GYWN0b3IoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0
ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIHpvb21GYWN0b3IsIGlzQWJzb2x1dGVT
aXplLCBzcGVjaWZpZWRTaXplKTsKLX0KLQotZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0
ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBmbG9hdCB6b29tRmFj
dG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRNaW5p
bXVtRm9yRm9udFNpemUgdXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUpCi17Ci0gICAgLy8gVGV4
dCB3aXRoIGEgMHB4IGZvbnQgc2l6ZSBzaG91bGQgbm90IGJlIHZpc2libGUgYW5kIHRoZXJlZm9y
ZSBuZWVkcyB0byBiZQotICAgIC8vIGV4ZW1wdCBmcm9tIG1pbmltdW0gZm9udCBzaXplIHJ1bGVz
LiBBY2lkMyByZWxpZXMgb24gdGhpcyBmb3IgcGl4ZWwtcGVyZmVjdAotICAgIC8vIHJlbmRlcmlu
Zy4gVGhpcyBpcyBhbHNvIGNvbXBhdGlibGUgd2l0aCBvdGhlciBicm93c2VycyB0aGF0IGhhdmUg
bWluaW11bQotICAgIC8vIGZvbnQgc2l6ZSBzZXR0aW5ncyAoZS5nLiBGaXJlZm94KS4KLSAgICBp
ZiAoZmFic2Yoc3BlY2lmaWVkU2l6ZSkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBz
aWxvbigpKQotICAgICAgICByZXR1cm4gMC4wZjsKLQotICAgIC8vIFdlIHN1cHBvcnQgdHdvIHR5
cGVzIG9mIG1pbmltdW0gZm9udCBzaXplLiAgVGhlIGZpcnN0IGlzIGEgaGFyZCBvdmVycmlkZSB0
aGF0IGFwcGxpZXMgdG8KLSAgICAvLyBhbGwgZm9udHMuICBUaGlzIGlzICJtaW5TaXplLiIgIFRo
ZSBzZWNvbmQgdHlwZSBvZiBtaW5pbXVtIGZvbnQgc2l6ZSBpcyBhICJzbWFydCBtaW5pbXVtIgot
ICAgIC8vIHRoYXQgaXMgYXBwbGllZCBvbmx5IHdoZW4gdGhlIFdlYiBwYWdlIGNhbid0IGtub3cg
d2hhdCBzaXplIGl0IHJlYWxseSBhc2tlZCBmb3IsIGUuZy4sCi0gICAgLy8gd2hlbiBpdCB1c2Vz
IGxvZ2ljYWwgc2l6ZXMgbGlrZSAic21hbGwiIG9yIGV4cHJlc3NlcyB0aGUgZm9udC1zaXplIGFz
IGEgcGVyY2VudGFnZSBvZgotICAgIC8vIHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IHNldHRpbmcu
Ci0KLSAgICAvLyBXaXRoIHRoZSBzbWFydCBtaW5pbXVtLCB3ZSBuZXZlciB3YW50IHRvIGdldCBz
bWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gZm9udCBzaXplIHRvIGtlZXAgZm9udHMgcmVhZGFibGUu
Ci0gICAgLy8gSG93ZXZlciB3ZSBhbHdheXMgYWxsb3cgdGhlIHBhZ2UgdG8gc2V0IGFuIGV4cGxp
Y2l0IHBpeGVsIHNpemUgdGhhdCBpcyBzbWFsbGVyLAotICAgIC8vIHNpbmNlIHNpdGVzIHdpbGwg
bWlzLXJlbmRlciBvdGhlcndpc2UgKGUuZy4sIGh0dHA6Ly93d3cuZ2FtZXNwb3QuY29tIHdpdGgg
YSA5cHggbWluaW11bSkuCi0KLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0
dGluZ3MoKTsKLSAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICByZXR1cm4gMS4wZjsKLQotICAg
IGludCBtaW5TaXplID0gc2V0dGluZ3MtPm1pbmltdW1Gb250U2l6ZSgpOwotICAgIGludCBtaW5M
b2dpY2FsU2l6ZSA9IHNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCk7Ci0gICAgZmxv
YXQgem9vbWVkU2l6ZSA9IHNwZWNpZmllZFNpemUgKiB6b29tRmFjdG9yOwotCi0gICAgLy8gQXBw
bHkgdGhlIGhhcmQgbWluaW11bSBmaXJzdC4gIFdlIG9ubHkgYXBwbHkgdGhlIGhhcmQgbWluaW11
bSBpZiBhZnRlciB6b29taW5nIHdlJ3JlIHN0aWxsIHRvbyBzbWFsbC4KLSAgICBpZiAoem9vbWVk
U2l6ZSA8IG1pblNpemUpCi0gICAgICAgIHpvb21lZFNpemUgPSBtaW5TaXplOwotCi0gICAgLy8g
Tm93IGFwcGx5IHRoZSAic21hcnQgbWluaW11bS4iICBUaGlzIG1pbmltdW0gaXMgYWxzbyBvbmx5
IGFwcGxpZWQgaWYgd2UncmUgc3RpbGwgdG9vIHNtYWxsCi0gICAgLy8gYWZ0ZXIgem9vbWluZy4g
IFRoZSBmb250IHNpemUgbXVzdCBlaXRoZXIgYmUgcmVsYXRpdmUgdG8gdGhlIHVzZXIgZGVmYXVs
dCBvciB0aGUgb3JpZ2luYWwgc2l6ZQotICAgIC8vIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGFibGUu
ICBJbiBvdGhlciB3b3Jkcywgd2Ugb25seSBhcHBseSB0aGUgc21hcnQgbWluaW11bSB3aGVuZXZl
ciB3ZSdyZSBwb3NpdGl2ZQotICAgIC8vIGRvaW5nIHNvIHdvbid0IGRpc3J1cHQgdGhlIGxheW91
dC4KLSAgICBpZiAodXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUgJiYgem9vbWVkU2l6ZSA8IG1p
bkxvZ2ljYWxTaXplICYmIChzcGVjaWZpZWRTaXplID49IG1pbkxvZ2ljYWxTaXplIHx8ICFpc0Fi
c29sdXRlU2l6ZSkpCi0gICAgICAgIHpvb21lZFNpemUgPSBtaW5Mb2dpY2FsU2l6ZTsKLQotICAg
IC8vIEFsc28gY2xhbXAgdG8gYSByZWFzb25hYmxlIG1heGltdW0gdG8gcHJldmVudCBpbnNhbmUg
Zm9udCBzaXplcyBmcm9tIGNhdXNpbmcgY3Jhc2hlcyBvbiB2YXJpb3VzCi0gICAgLy8gcGxhdGZv
cm1zIChJJ20gbG9va2luZyBhdCB5b3UsIFdpbmRvd3MuKQotICAgIHJldHVybiBtaW4oMTAwMDAw
MC4wZiwgem9vbWVkU2l6ZSk7Ci19Ci0KLWNvbnN0IGludCBmb250U2l6ZVRhYmxlTWF4ID0gMTY7
Ci1jb25zdCBpbnQgZm9udFNpemVUYWJsZU1pbiA9IDk7Ci1jb25zdCBpbnQgdG90YWxLZXl3b3Jk
cyA9IDg7Ci0KLS8vIFdpbklFL05hdjQgdGFibGUgZm9yIGZvbnQgc2l6ZXMuICBEZXNpZ25lZCB0
byBtYXRjaCB0aGUgbGVnYWN5IGZvbnQgbWFwcGluZyBzeXN0ZW0gb2YgSFRNTC4KLXN0YXRpYyBj
b25zdCBpbnQgcXVpcmtzRm9udFNpemVUYWJsZVtmb250U2l6ZVRhYmxlTWF4IC0gZm9udFNpemVU
YWJsZU1pbiArIDFdW3RvdGFsS2V5d29yZHNdID0KLXsKLSAgICAgIHsgOSwgICAgOSwgICAgIDks
ICAgICA5LCAgICAxMSwgICAgMTQsICAgIDE4LCAgICAyOCB9LAotICAgICAgeyA5LCAgICA5LCAg
ICAgOSwgICAgMTAsICAgIDEyLCAgICAxNSwgICAgMjAsICAgIDMxIH0sCi0gICAgICB7IDksICAg
IDksICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE3LCAgICAyMiwgICAgMzQgfSwKLSAgICAgIHsg
OSwgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNCwgICAgMTgsICAgIDI0LCAgICAzNyB9LAotICAg
ICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTMsICAgIDE2LCAgICAyMCwgICAgMjYsICAgIDQwIH0s
IC8vIGZpeGVkIGZvbnQgZGVmYXVsdCAoMTMpCi0gICAgICB7IDksICAgIDksICAgIDExLCAgICAx
NCwgICAgMTcsICAgIDIxLCAgICAyOCwgICAgNDIgfSwKLSAgICAgIHsgOSwgICAxMCwgICAgMTIs
ICAgIDE1LCAgICAxNywgICAgMjMsICAgIDMwLCAgICA0NSB9LAotICAgICAgeyA5LCAgIDEwLCAg
ICAxMywgICAgMTYsICAgIDE4LCAgICAyNCwgICAgMzIsICAgIDQ4IH0gIC8vIHByb3BvcnRpb25h
bCBmb250IGRlZmF1bHQgKDE2KQotfTsKLS8vIEhUTUwgICAgICAgMSAgICAgIDIgICAgICAzICAg
ICAgNCAgICAgIDUgICAgICA2ICAgICAgNwotLy8gQ1NTICB4eHMgICB4cyAgICAgcyAgICAgIG0g
ICAgICBsICAgICB4bCAgICAgeHhsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgfAotLy8g
ICAgICAgICAgICAgICAgICAgICAgdXNlciBwcmVmCi0KLS8vIFN0cmljdCBtb2RlIHRhYmxlIG1h
dGNoZXMgTWFjSUUgYW5kIE1vemlsbGEncyBzZXR0aW5ncyBleGFjdGx5Lgotc3RhdGljIGNvbnN0
IGludCBzdHJpY3RGb250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBmb250U2l6ZVRhYmxl
TWluICsgMV1bdG90YWxLZXl3b3Jkc10gPQotewotICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAg
IDksICAgIDExLCAgICAxNCwgICAgMTgsICAgIDI3IH0sCi0gICAgICB7IDksICAgIDksICAgICA5
LCAgICAxMCwgICAgMTIsICAgIDE1LCAgICAyMCwgICAgMzAgfSwKLSAgICAgIHsgOSwgICAgOSwg
ICAgMTAsICAgIDExLCAgICAxMywgICAgMTcsICAgIDIyLCAgICAzMyB9LAotICAgICAgeyA5LCAg
ICA5LCAgICAxMCwgICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQsICAgIDM2IH0sCi0gICAgICB7
IDksICAgMTAsICAgIDEyLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwgICAgMzkgfSwgLy8g
Zml4ZWQgZm9udCBkZWZhdWx0ICgxMykKLSAgICAgIHsgOSwgICAxMCwgICAgMTIsICAgIDE0LCAg
ICAxNywgICAgMjEsICAgIDI4LCAgICA0MiB9LAotICAgICAgeyA5LCAgIDEwLCAgICAxMywgICAg
MTUsICAgIDE4LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCi0gICAgICB7IDksICAgMTAsICAgIDEz
LCAgICAxNiwgICAgMTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAgLy8gcHJvcG9ydGlvbmFsIGZv
bnQgZGVmYXVsdCAoMTYpCi19OwotLy8gSFRNTCAgICAgICAxICAgICAgMiAgICAgIDMgICAgICA0
ICAgICAgNSAgICAgIDYgICAgICA3Ci0vLyBDU1MgIHh4cyAgIHhzICAgICBzICAgICAgbSAgICAg
IGwgICAgIHhsICAgICB4eGwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0vLyAgICAg
ICAgICAgICAgICAgICAgICB1c2VyIHByZWYKLQotLy8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBy
YW5nZSBvZiB0aGUgdGFibGUsIHdlIHVzZSBUb2RkIEZhaHJuZXIncyBzdWdnZXN0ZWQgc2NhbGUK
LS8vIGZhY3RvcnMgZm9yIGVhY2gga2V5d29yZCB2YWx1ZS4KLXN0YXRpYyBjb25zdCBmbG9hdCBm
b250U2l6ZUZhY3RvcnNbdG90YWxLZXl3b3Jkc10gPSB7IDAuNjBmLCAwLjc1ZiwgMC44OWYsIDEu
MGYsIDEuMmYsIDEuNWYsIDIuMGYsIDMuMGYgfTsKLQotZmxvYXQgU3R5bGVSZXNvbHZlcjo6Zm9u
dFNpemVGb3JLZXl3b3JkKERvY3VtZW50KiBkb2N1bWVudCwgaW50IGtleXdvcmQsIGJvb2wgc2hv
dWxkVXNlRml4ZWREZWZhdWx0U2l6ZSkKLXsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1
bWVudC0+c2V0dGluZ3MoKTsKLSAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICByZXR1cm4gMS4w
ZjsKLQotICAgIGJvb2wgcXVpcmtzTW9kZSA9IGRvY3VtZW50LT5pblF1aXJrc01vZGUoKTsKLSAg
ICBpbnQgbWVkaXVtU2l6ZSA9IHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUgPyBzZXR0aW5ncy0+
ZGVmYXVsdEZpeGVkRm9udFNpemUoKSA6IHNldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKTsKLSAg
ICBpZiAobWVkaXVtU2l6ZSA+PSBmb250U2l6ZVRhYmxlTWluICYmIG1lZGl1bVNpemUgPD0gZm9u
dFNpemVUYWJsZU1heCkgewotICAgICAgICAvLyBMb29rIHVwIHRoZSBlbnRyeSBpbiB0aGUgdGFi
bGUuCi0gICAgICAgIGludCByb3cgPSBtZWRpdW1TaXplIC0gZm9udFNpemVUYWJsZU1pbjsKLSAg
ICAgICAgaW50IGNvbCA9IChrZXl3b3JkIC0gQ1NTVmFsdWVYeFNtYWxsKTsKLSAgICAgICAgcmV0
dXJuIHF1aXJrc01vZGUgPyBxdWlya3NGb250U2l6ZVRhYmxlW3Jvd11bY29sXSA6IHN0cmljdEZv
bnRTaXplVGFibGVbcm93XVtjb2xdOwotICAgIH0KLQotICAgIC8vIFZhbHVlIGlzIG91dHNpZGUg
dGhlIHJhbmdlIG9mIHRoZSB0YWJsZS4gQXBwbHkgdGhlIHNjYWxlIGZhY3RvciBpbnN0ZWFkLgot
ICAgIGZsb2F0IG1pbkxvZ2ljYWxTaXplID0gbWF4KHNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZv
bnRTaXplKCksIDEpOwotICAgIHJldHVybiBtYXgoZm9udFNpemVGYWN0b3JzW2tleXdvcmQgLSBD
U1NWYWx1ZVh4U21hbGxdKm1lZGl1bVNpemUsIG1pbkxvZ2ljYWxTaXplKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbnQgZmluZE5lYXJlc3RMZWdhY3lGb250U2l6ZShpbnQg
cGl4ZWxGb250U2l6ZSwgY29uc3QgVCogdGFibGUsIGludCBtdWx0aXBsaWVyKQotewotICAgIC8v
IElnbm9yZSB0YWJsZVswXSBiZWNhdXNlIHh4LXNtYWxsIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8g
YW55IGxlZ2FjeSBmb250IHNpemUuCi0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCB0b3RhbEtleXdv
cmRzIC0gMTsgaSsrKSB7Ci0gICAgICAgIGlmIChwaXhlbEZvbnRTaXplICogMiA8ICh0YWJsZVtp
XSArIHRhYmxlW2kgKyAxXSkgKiBtdWx0aXBsaWVyKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0g
ICAgfQotICAgIHJldHVybiB0b3RhbEtleXdvcmRzIC0gMTsKLX0KLQotaW50IFN0eWxlUmVzb2x2
ZXI6OmxlZ2FjeUZvbnRTaXplKERvY3VtZW50KiBkb2N1bWVudCwgaW50IHBpeGVsRm9udFNpemUs
IGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSkKLXsKLSAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKLSAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICBy
ZXR1cm4gMTsKLQotICAgIGJvb2wgcXVpcmtzTW9kZSA9IGRvY3VtZW50LT5pblF1aXJrc01vZGUo
KTsKLSAgICBpbnQgbWVkaXVtU2l6ZSA9IHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUgPyBzZXR0
aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKSA6IHNldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUo
KTsKLSAgICBpZiAobWVkaXVtU2l6ZSA+PSBmb250U2l6ZVRhYmxlTWluICYmIG1lZGl1bVNpemUg
PD0gZm9udFNpemVUYWJsZU1heCkgewotICAgICAgICBpbnQgcm93ID0gbWVkaXVtU2l6ZSAtIGZv
bnRTaXplVGFibGVNaW47Ci0gICAgICAgIHJldHVybiBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXpl
PGludD4ocGl4ZWxGb250U2l6ZSwgcXVpcmtzTW9kZSA/IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93
XSA6IHN0cmljdEZvbnRTaXplVGFibGVbcm93XSwgMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZp
bmROZWFyZXN0TGVnYWN5Rm9udFNpemU8ZmxvYXQ+KHBpeGVsRm9udFNpemUsIGZvbnRTaXplRmFj
dG9ycywgbWVkaXVtU2l6ZSk7Ci19Ci0KLXN0YXRpYyBDb2xvciBjb2xvckZvckNTU1ZhbHVlKGlu
dCBjc3NWYWx1ZUlkKQotewotICAgIHN0cnVjdCBDb2xvclZhbHVlIHsKLSAgICAgICAgaW50IGNz
c1ZhbHVlSWQ7Ci0gICAgICAgIFJHQkEzMiBjb2xvcjsKLSAgICB9OwotCi0gICAgc3RhdGljIGNv
bnN0IENvbG9yVmFsdWUgY29sb3JWYWx1ZXNbXSA9IHsKLSAgICAgICAgeyBDU1NWYWx1ZUFxdWEs
IDB4RkYwMEZGRkYgfSwKLSAgICAgICAgeyBDU1NWYWx1ZUJsYWNrLCAweEZGMDAwMDAwIH0sCi0g
ICAgICAgIHsgQ1NTVmFsdWVCbHVlLCAweEZGMDAwMEZGIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVG
dWNoc2lhLCAweEZGRkYwMEZGIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVHcmF5LCAweEZGODA4MDgw
IH0sCi0gICAgICAgIHsgQ1NTVmFsdWVHcmVlbiwgMHhGRjAwODAwMCAgfSwKLSAgICAgICAgeyBD
U1NWYWx1ZUdyZXksIDB4RkY4MDgwODAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZUxpbWUsIDB4RkYw
MEZGMDAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZU1hcm9vbiwgMHhGRjgwMDAwMCB9LAotICAgICAg
ICB7IENTU1ZhbHVlTmF2eSwgMHhGRjAwMDA4MCB9LAotICAgICAgICB7IENTU1ZhbHVlT2xpdmUs
IDB4RkY4MDgwMDAgIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVPcmFuZ2UsIDB4RkZGRkE1MDAgfSwK
LSAgICAgICAgeyBDU1NWYWx1ZVB1cnBsZSwgMHhGRjgwMDA4MCB9LAotICAgICAgICB7IENTU1Zh
bHVlUmVkLCAweEZGRkYwMDAwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVTaWx2ZXIsIDB4RkZDMEMw
QzAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZVRlYWwsIDB4RkYwMDgwODAgIH0sCi0gICAgICAgIHsg
Q1NTVmFsdWVUcmFuc3BhcmVudCwgMHgwMDAwMDAwMCB9LAotICAgICAgICB7IENTU1ZhbHVlV2hp
dGUsIDB4RkZGRkZGRkYgfSwKLSAgICAgICAgeyBDU1NWYWx1ZVllbGxvdywgMHhGRkZGRkYwMCB9
LAotICAgICAgICB7IDAsIDAgfQotICAgIH07Ci0KLSAgICBmb3IgKGNvbnN0IENvbG9yVmFsdWUq
IGNvbCA9IGNvbG9yVmFsdWVzOyBjb2wtPmNzc1ZhbHVlSWQ7ICsrY29sKSB7Ci0gICAgICAgIGlm
IChjb2wtPmNzc1ZhbHVlSWQgPT0gY3NzVmFsdWVJZCkKLSAgICAgICAgICAgIHJldHVybiBjb2wt
PmNvbG9yOwotICAgIH0KLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5z
eXN0ZW1Db2xvcihjc3NWYWx1ZUlkKTsKLX0KLQotQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JG
cm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBib29sIGZvclZpc2l0
ZWRMaW5rKSBjb25zdAotewotICAgIGlmICh2YWx1ZS0+aXNSR0JDb2xvcigpKQotICAgICAgICBy
ZXR1cm4gQ29sb3IodmFsdWUtPmdldFJHQkEzMlZhbHVlKCkpOwotCi0gICAgaW50IGlkZW50ID0g
dmFsdWUtPmdldElkZW50KCk7Ci0gICAgc3dpdGNoIChpZGVudCkgewotICAgIGNhc2UgMDoKLSAg
ICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFRleHQ6Ci0gICAg
ICAgIHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnRleHRDb2xvcigpOwotICAgIGNhc2Ug
Q1NTVmFsdWVXZWJraXRMaW5rOgotICAgICAgICByZXR1cm4gKG1fZWxlbWVudC0+aXNMaW5rKCkg
JiYgZm9yVmlzaXRlZExpbmspID8gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0Nv
bG9yKCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOwotICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRBY3RpdmVsaW5rOgotICAgICAgICByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT5hY3RpdmVMaW5rQ29sb3IoKTsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5n
Q29sb3I6Ci0gICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6Zm9jdXNSaW5nQ29sb3IoKTsKLSAg
ICBjYXNlIENTU1ZhbHVlQ3VycmVudGNvbG9yOgotICAgICAgICByZXR1cm4gbV9zdHlsZS0+Y29s
b3IoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gY29sb3JGb3JDU1NWYWx1ZShpZGVu
dCk7Ci0gICAgfQotfQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9yQXR0cmli
dXRlKGNvbnN0IEF0b21pY1N0cmluZyAmYXR0cm5hbWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmNvbnRhaW5zKGF0dHJuYW1lLmltcGwoKSk7Ci19Ci0KLXZv
aWQgU3R5bGVSZXNvbHZlcjo6YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNv
bnN0IE1lZGlhUXVlcnlFeHAqIGV4cHIsIGJvb2wgcmVzdWx0KQotewotICAgIG1fdmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5hcHBlbmQoYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlS
ZXN1bHQoKmV4cHIsIHJlc3VsdCkpKTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjphZmZlY3Rl
ZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdAotewotICAgIHVuc2lnbmVkIHMgPSBtX3ZpZXdwb3J0
RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzOyBpKyspIHsKLSAgICAgICAgaWYgKG1fbWVkaXVtLT5ldmFsKCZtX3ZpZXdwb3J0
RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1fZXhwcmVzc2lvbikgIT0gbV92aWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX3Jlc3VsdCkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBUcmFuc2Zv
cm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZShXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB0eXBlKQotewotICAg
IHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpT
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlv
bjo6U0NBTEU7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRy
YW5zZm9ybU9wZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FM
RV9YOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zv
cm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWTsK
LSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3Bl
cmF0aW9uOiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o7Ci0gICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlM0RUcmFuc2Zvcm1PcGVyYXRp
b246ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDsKLSAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OiAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURTsKLSAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbjog
ICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOwotICAgICAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOiAg
ICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k7Ci0gICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb246ICAg
ICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWjsKLSAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlM0RUcmFuc2Zvcm1PcGVyYXRpb246ICAg
IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDsKLSAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAg
IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURTsKLSAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgIHJldHVy
biBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOwotICAgICAgICBjYXNlIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpSb3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgcmV0dXJuIFRy
YW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlJvdGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICByZXR1cm4gVHJhbnNm
b3JtT3BlcmF0aW9uOjpST1RBVEVfWjsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgIHJldHVybiBUcmFuc2Zvcm1P
cGVyYXRpb246OlJPVEFURV8zRDsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVy
YXRpb246OlNLRVc7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdY
VHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpT
S0VXX1g7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNm
b3JtT3BlcmF0aW9uOiAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k7
Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg7Ci0gICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uOiAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVhfM0Q7Ci0gICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0
aW9uOiAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRTsKLSAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbjog
ICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU7Ci0gICAgfQotICAgIHJldHVy
biBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU7Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVy
YXRpb25zKQotewotICAgIGlmICghaW5WYWx1ZSB8fCAhaW5WYWx1ZS0+aXNWYWx1ZUxpc3QoKSkg
ewotICAgICAgICBvdXRPcGVyYXRpb25zLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBmbG9hdCB6b29tRmFjdG9yID0gc3R5bGUgPyBzdHlsZS0+ZWZmZWN0aXZl
Wm9vbSgpIDogMTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgZm9y
IChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gaW5WYWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5j
ZSgpKSB7Ci0gICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7Ci0gICAgICAg
IGlmICghY3VyclZhbHVlLT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdHJhbnNmb3Jt
VmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSo+KGkudmFsdWUoKSk7
Ci0gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKTsg
KytqKSB7Ci0gICAgICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGopLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICBoYXZlTm9u
UHJpbWl0aXZlVmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChoYXZlTm9uUHJpbWl0aXZlVmFsdWUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMCkpOwotCi0gICAgICAgIHN3aXRjaCAodHJhbnNmb3JtVmFsdWUt
Pm9wZXJhdGlvblR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBj
YXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb246IHsK
LSAgICAgICAgICAgICAgICBkb3VibGUgc3ggPSAxLjA7Ci0gICAgICAgICAgICAgICAgZG91Ymxl
IHN5ID0gMS4wOwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9u
VHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRp
b24pCi0gICAgICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3ggPSBmaXJz
dFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2Nh
bGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJh
bnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzeSA9IHN4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBzeSwgMS4wLCBnZXRUcmFuc2Zvcm1PcGVyYXRp
b25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAg
ICAgICAgICAgICAgZG91YmxlIHN4ID0gMS4wOwotICAgICAgICAgICAgICAgIGRvdWJsZSBzeSA9
IDEuMDsKLSAgICAgICAgICAgICAgICBkb3VibGUgc3ogPSAxLjA7Ci0gICAgICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgc3og
PSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgc3kgPSBm
aXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeiA9IHRo
aXJkVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5
ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHN4OwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wZXJhdGlv
bnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHN4
LCBzeSwgc3osIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJh
dGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRy
YW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAg
ICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICBMZW5n
dGggdHkgPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1W
YWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xh
dGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRU
b0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwot
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0eCA9IGNvbnZlcnRU
b0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAh
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vj
b25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKHNlY29uZFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxl
LCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0eC5pc1Vu
ZGVmaW5lZCgpIHx8IHR5LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVu
ZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0eCwgdHksIExlbmd0aCgwLCBG
aXhlZCksIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlv
blR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1P
cGVyYXRpb246Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFu
c2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgIExlbmd0aCB0eCA9
IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAs
IEZpeGVkKTsKLSAgICAgICAgICAgICAgICBMZW5ndGggdHogPSBMZW5ndGgoMCwgRml4ZWQpOwot
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uKQotICAg
ICAgICAgICAgICAgICAgICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0
eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRy
YW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHR5ID0g
Y29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZh
Y3Rvcik7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHR4ID0g
Y29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZh
Y3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9u
VHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3Bl
cmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxl
bmd0aCgpID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zv
cm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aCh0aGlyZFZhbHVlLCBzdHlsZSwgcm9v
dFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252
ZXJ0VG9GbG9hdExlbmd0aChzZWNvbmRWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rv
cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodHguaXNVbmRlZmluZWQoKSB8
fCB0eS5pc1VuZGVmaW5lZCgpIHx8IHR6LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0eCwgdHksIHR6
LCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBl
KCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246
IHsKLSAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVn
cmVlcygpOwotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgwLCAwLCAxLCBhbmdsZSwgZ2V0VHJhbnNm
b3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1PcGVyYXRp
b246Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVaVHJh
bnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHggPSAwOwotICAgICAg
ICAgICAgICAgIGRvdWJsZSB5ID0gMDsKLSAgICAgICAgICAgICAgICBkb3VibGUgeiA9IDA7Ci0g
ICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMo
KTsKLQotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKQot
ICAgICAgICAgICAgICAgICAgICB4ID0gMTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0cmFu
c2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpS
b3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICAgICB5ID0gMTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHogPSAxOwotICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0
cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICBpZiAodHJh
bnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgNCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
Zm91cnRoVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKTsKLSAgICAgICAgICAgICAgICBkb3VibGUg
eCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZG91Ymxl
IHkgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3Vi
bGUgeiA9IHRoaXJkVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZG91
YmxlIGFuZ2xlID0gZm91cnRoVmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7Ci0gICAgICAgICAgICAg
ICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5z
Zm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6U2tld1hUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAg
ICAgICAgIGRvdWJsZSBhbmdsZVggPSAwOwotICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVkg
PSAwOwotICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVE
ZWdyZWVzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25U
eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9u
KQotICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBhbmdsZTsKLSAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYW5nbGVYID0gYW5nbGU7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlWSA9IHNlY29uZFZh
bHVlLT5jb21wdXRlRGVncmVlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
YW5nbGVYLCBhbmdsZVksIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUt
Pm9wZXJhdGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVu
Z3RoKCkgPCA2KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBk
b3VibGUgYSA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
ZG91YmxlIGIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAg
ICAgICAgICBkb3VibGUgYyA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNm
b3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLT5nZXREb3VibGVWYWx1ZSgpOwot
ICAgICAgICAgICAgICAgIGRvdWJsZSBkID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSktPmdldERvdWJsZVZh
bHVlKCk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGUgPSB6b29tRmFjdG9yICogc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjayg0KSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGYgPSB6
b29tRmFjdG9yICogc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg1KSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Y3JlYXRlKGEsIGIsIGMsIGQsIGUsIGYpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgaWYgKHRy
YW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA8IDE2KQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygwKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMSkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSktPmdl
dERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soNCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg2KSktPmdldERvdWJsZVZh
bHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
NykpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDgpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zv
cm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg5KSktPmdldERvdWJsZVZhbHVlKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTApKS0+Z2V0
RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygxMSkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB6b29tRmFjdG9yICogc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0
cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMikpLT5nZXREb3VibGVWYWx1
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tRmFjdG9yICogc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxMykpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDE0KSktPmdldERvdWJsZVZhbHVlKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS0+Z2V0RG91
YmxlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBw
ZW5kKE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4KSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAg
ICAgICAgICAgIExlbmd0aCBwID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICBp
ZiAoZmlyc3RWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICAgICAgcCA9IGNvbnZl
cnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3Ip
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IGEgcXVpcmsgdGhhdCBzaG91bGQgZ28gYXdheSB3aGVuIDNkIHRyYW5zZm9ybXMgYXJlIGZpbmFs
aXplZC4KLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbCA9IGZpcnN0VmFsdWUtPmdldERv
dWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHAgPSB2YWwgPj0gMCA/IExlbmd0aChj
bGFtcFRvUG9zaXRpdmVJbnRlZ2VyKHZhbCksIEZpeGVkKSA6IExlbmd0aChVbmRlZmluZWQpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChwLmlzVW5kZWZpbmVkKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKHApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1P
cGVyYXRpb246Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBvdXRPcGVyYXRpb25zID0g
b3BlcmF0aW9uczsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKLXN0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9u
Rm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSB0eXBlKQot
ewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6
UkVGRVJFTkNFOwotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZpbHRl
ck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOwot
ICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVyT3BlcmF0aW9uOgotICAg
ICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTsKLSAgICBjYXNlIFdlYktpdENTU0Zp
bHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVl
Um90YXRlRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpI
VUVfUk9UQVRFOwotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkludmVydEZpbHRlck9w
ZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOwotICAgIGNh
c2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAg
IHJldHVybiBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRl
ck9wZXJhdGlvbjo6QlJJR0hUTkVTUzsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpD
b250cmFzdEZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6
Q09OVFJBU1Q7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Qmx1ckZpbHRlck9wZXJh
dGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QkxVUjsKLSAgICBjYXNlIFdl
YktpdENTU0ZpbHRlclZhbHVlOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOgotICAgICAgICBy
ZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzsKLSNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCi0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q3VzdG9tRmlsdGVyT3BlcmF0aW9u
OgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT007Ci0jZW5kaWYKLSAgICBj
YXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpVbmtub3duRmlsdGVyT3BlcmF0aW9uOgotICAgICAg
ICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpOT05FOwotICAgIH0KLSAgICByZXR1cm4gRmlsdGVy
T3BlcmF0aW9uOjpOT05FOwotfQotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotU3R5bGVTaGFk
ZXIqIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUtPmlzV2ViS2l0Q1NTU2hhZGVyVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hl
ZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKHN0YXRpY19jYXN0PFdlYktpdENTU1NoYWRl
clZhbHVlKj4odmFsdWUpKTsKLSAgICByZXR1cm4gMDsKLX0KLQotU3R5bGVTaGFkZXIqIFN0eWxl
UmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFdlYktpdENTU1No
YWRlclZhbHVlKiB2YWx1ZSkKLXsKLSAgICBTdHlsZVNoYWRlciogc2hhZGVyID0gdmFsdWUtPmNh
Y2hlZE9yUGVuZGluZ1NoYWRlcigpOwotICAgIGlmIChzaGFkZXIgJiYgc2hhZGVyLT5pc1BlbmRp
bmdTaGFkZXIoKSkKLSAgICAgICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IHRydWU7Ci0gICAgcmV0
dXJuIHNoYWRlcjsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMo
KQotewotICAgIGlmICghbV9zdHlsZS0+aGFzRmlsdGVyKCkgfHwgIW1faGFzUGVuZGluZ1NoYWRl
cnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRS
ZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVy
YXRpb25zID0gbV9zdHlsZS0+ZmlsdGVyKCkub3BlcmF0aW9ucygpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMu
YXQoaSk7Ci0gICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9
PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewotICAgICAgICAgICAgQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uKiBjdXN0b21GaWx0ZXIgPSBzdGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJPcGVyYXRpb24q
PihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwotICAgICAgICAgICAgQVNTRVJUKGN1c3RvbUZpbHRl
ci0+cHJvZ3JhbSgpKTsKLSAgICAgICAgICAgIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSogcHJv
Z3JhbSA9IHN0YXRpY19jYXN0PFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSo+KGN1c3RvbUZpbHRl
ci0+cHJvZ3JhbSgpKTsKLSAgICAgICAgICAgIGlmIChwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKSAm
JiBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS0+aXNQZW5kaW5nU2hhZGVyKCkpIHsKLSAgICAgICAg
ICAgICAgICBXZWJLaXRDU1NTaGFkZXJWYWx1ZSogc2hhZGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxT
dHlsZVBlbmRpbmdTaGFkZXIqPihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKSktPmNzc1NoYWRlclZh
bHVlKCk7Ci0gICAgICAgICAgICAgICAgcHJvZ3JhbS0+c2V0VmVydGV4U2hhZGVyKHNoYWRlclZh
bHVlLT5jYWNoZWRTaGFkZXIoY2FjaGVkUmVzb3VyY2VMb2FkZXIpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpICYmIHByb2dyYW0tPmZy
YWdtZW50U2hhZGVyKCktPmlzUGVuZGluZ1NoYWRlcigpKSB7Ci0gICAgICAgICAgICAgICAgV2Vi
S2l0Q1NTU2hhZGVyVmFsdWUqIHNoYWRlclZhbHVlID0gc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
U2hhZGVyKj4ocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKSktPmNzc1NoYWRlclZhbHVlKCk7Ci0g
ICAgICAgICAgICAgICAgcHJvZ3JhbS0+c2V0RnJhZ21lbnRTaGFkZXIoc2hhZGVyVmFsdWUtPmNh
Y2hlZFNoYWRlcihjYWNoZWRSZXNvdXJjZUxvYWRlcikpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIG1faGFzUGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKLX0KLQotc3RhdGlj
IGJvb2wgc29ydFBhcmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKGNvbnN0IFJlZlB0cjxDdXN0b21G
aWx0ZXJQYXJhbWV0ZXI+JiBhLCBjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYg
YikKLXsKLSAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGEtPm5hbWUoKSwgYi0+
bmFtZSgpKTsKLX0KLQotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVz
b2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW10ZXIoY29uc3QgU3RyaW5nJiBuYW1l
LCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykKLXsKLSAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyTnVtYmVy
UGFyYW1ldGVyPiBudW1iZXJQYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI6
OmNyZWF0ZShuYW1lKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLT5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IHZhbHVlcy0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBudW1iZXJQ
YXJhbWV0ZXItPmFkZFZhbHVlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG51bWJlclBhcmFtZXRlci5yZWxlYXNlKCk7Ci19Ci0KLWJvb2wgU3R5
bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiBwYXJh
bWV0ZXJzVmFsdWUsIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlckxpc3QpCi17
Ci0gICAgSGFzaFNldDxTdHJpbmc+IGtub3duUGFyYW1ldGVyTmFtZXM7Ci0gICAgQ1NTVmFsdWVM
aXN0SXRlcmF0b3IgcGFyYW1ldGVySXRlcmF0b3IocGFyYW1ldGVyc1ZhbHVlKTsKLSAgICBmb3Ig
KDsgcGFyYW1ldGVySXRlcmF0b3IuaGFzTW9yZSgpOyBwYXJhbWV0ZXJJdGVyYXRvci5hZHZhbmNl
KCkpIHsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJJdGVyYXRvci52YWx1ZSgpLT5pc1ZhbHVlTGlz
dCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBDU1NWYWx1ZUxpc3RJdGVy
YXRvciBpdGVyYXRvcihwYXJhbWV0ZXJJdGVyYXRvci52YWx1ZSgpKTsKLSAgICAgICAgaWYgKCFp
dGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7Ci0gICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIG5h
bWUgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgLy8gRG8gbm90
IGFsbG93IGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMuCi0gICAgICAgIGlmIChrbm93blBhcmFt
ZXRlck5hbWVzLmNvbnRhaW5zKG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBrbm93blBhcmFtZXRlck5hbWVzLmFkZChuYW1lKTsKLSAgICAgICAgCi0gICAgICAgIGl0
ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXRlcmF0b3IuaGFzTW9y
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCBvdGhlciBwYXJhbWV0ZXJzIHR5cGVzIHBhcnNpbmcuCi0gICAgICAgIC8v
IGJvb2xlYW5zOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0MzgK
LSAgICAgICAgLy8gdGV4dHVyZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MTQ0MgotICAgICAgICAvLyAzZC10cmFuc2Zvcm1zOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0NDMKLSAgICAgICAgLy8gbWF0MiwgbWF0MywgbWF0NDog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDQ0Ci0gICAgICAgIFJl
ZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlcjsKLSAgICAgICAgaWYgKGl0ZXJh
dG9yLnZhbHVlKCktPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCog
dmFsdWVzID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oaXRlcmF0b3IudmFsdWUoKSk7Ci0g
ICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIFdlIGNhbiBoYXZlIG9ubHkgYXJyYXlzIG9mIGJvb2xlYW5zIG9yIG51bWJlcnMsIHNvIHVz
ZSB0aGUgZmlyc3QgdmFsdWUgdG8gY2hvb3NlIGJldHdlZW4gdGhvc2UgdHdvLgotICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3Qgb25lIHZhbHVlLiBXZSBuZWVkIHVwIHRv
IDQgdmFsdWVzIChhbGwgYm9vbGVhbnMgb3IgYWxsIG51bWJlcnMpLgotICAgICAgICAgICAgaWYg
KCF2YWx1ZXMtPmxlbmd0aCgpIHx8IHZhbHVlcy0+bGVuZ3RoKCkgPiA0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCF2YWx1ZXMt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBmaXJzdFByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwotICAgICAgICAgICAg
aWYgKGZpcnN0UHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgPSBwYXJzZUN1c3Rv
bUZpbHRlck51bWJlclBhcmFtdGVyKG5hbWUsIHZhbHVlcyk7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoZSBib29sZWFuIGFycmF5IHBhcmFtZXRlciBoZXJlLgotICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDM4Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghcGFyYW1ldGVyKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgcGFyYW1ldGVyTGlzdC5hcHBlbmQocGFyYW1l
dGVyLnJlbGVhc2UoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIE1ha2Ugc3VyZSB3ZSBzb3J0IHRo
ZSBwYXJhbWV0ZXJzIGJlZm9yZSBwYXNzaW5nIHRoZW0gZG93biB0byB0aGUgQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uLgotICAgIHN0ZDo6c29ydChwYXJhbWV0ZXJMaXN0LmJlZ2luKCksIHBhcmFtZXRl
ckxpc3QuZW5kKCksIHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29tcGFyYXRvcik7Ci0gICAgCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHls
ZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0Q1NTRmlsdGVyVmFs
dWUqIGZpbHRlclZhbHVlKQotewotICAgIEFTU0VSVChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkpOwot
Ci0gICAgQ1NTVmFsdWUqIHNoYWRlcnNWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDApOwotICAgIEFTU0VSVChzaGFkZXJzVmFsdWUtPmlzVmFsdWVMaXN0KCkpOwot
ICAgIENTU1ZhbHVlTGlzdCogc2hhZGVyc0xpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3Qq
PihzaGFkZXJzVmFsdWUpOwotCi0gICAgQVNTRVJUKHNoYWRlcnNMaXN0LT5sZW5ndGgoKSk7Ci0g
ICAgUmVmUHRyPFN0eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNoYWRlcihzaGFkZXJz
TGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7Ci0gICAgUmVmUHRyPFN0eWxlU2hhZGVy
PiBmcmFnbWVudFNoYWRlciA9IChzaGFkZXJzTGlzdC0+bGVuZ3RoKCkgPiAxKSA/IHN0eWxlU2hh
ZGVyKHNoYWRlcnNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKSA6IDA7Ci0gICAgCi0g
ICAgdW5zaWduZWQgbWVzaFJvd3MgPSAxOwotICAgIHVuc2lnbmVkIG1lc2hDb2x1bW5zID0gMTsK
LSAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlIG1lc2hCb3hUeXBlID0gQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uOjpGSUxURVJfQk9YOwotICAgIEN1c3RvbUZpbHRlck9wZXJhdGlv
bjo6TWVzaFR5cGUgbWVzaFR5cGUgPSBDdXN0b21GaWx0ZXJPcGVyYXRpb246OkFUVEFDSEVEOwot
ICAgIAotICAgIENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUgPSAwOwotICAgIAotICAgIGlmIChm
aWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9y
IGl0ZXJhdG9yKGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIFRoZSBzZWNvbmQgdmFsdWUgbWlnaHQgYmUgdGhlIG1lc2ggYm94IG9y
IHRoZSBsaXN0IG9mIHBhcmFtZXRlcnM6Ci0gICAgICAgIC8vIElmIGl0IHN0YXJ0cyB3aXRoIGEg
bnVtYmVyIG9yIGFueSBvZiB0aGUgbWVzaC1ib3ggaWRlbnRpZmllcnMgaXQgaXMgCi0gICAgICAg
IC8vIHRoZSBtZXNoLWJveCBsaXN0LCBpZiBub3QgaXQgbWVhbnMgaXQgaXMgdGhlIHBhcmFtZXRl
cnMgbGlzdC4KLQotICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTW9yZSgpICYmIGl0ZXJhdG9yLmlz
UHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52YWx1
ZSgpKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewotICAg
ICAgICAgICAgICAgIC8vIElmIG9ubHkgb25lIGludGVnZXIgdmFsdWUgaXMgc3BlY2lmaWVkLCBp
dCB3aWxsIHNldCBib3RoCi0gICAgICAgICAgICAgICAgLy8gdGhlIHJvd3MgYW5kIHRoZSBjb2x1
bW5zLgotICAgICAgICAgICAgICAgIG1lc2hSb3dzID0gbWVzaENvbHVtbnMgPSBwcmltaXRpdmVW
YWx1ZS0+Z2V0SW50VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGFub3Ro
ZXIgbnVtYmVyIGZvciB0aGUgY29sdW1ucy4KLSAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3Iu
aGFzTW9yZSgpICYmIGl0ZXJhdG9yLmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1lc2hDb2x1bW5zID0gcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmIChpdGVyYXRvci5oYXNNb3JlKCkgJiYgaXRlcmF0b3IuaXNQcmltaXRpdmVW
YWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOwotICAg
ICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQm9yZGVy
Qm94Ci0gICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVQYWRkaW5nQm94Ci0gICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVDb250ZW50Qm94Ci0gICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWx0ZXJCb3gpIHsKLSAgICAgICAgICAgICAg
ICBtZXNoQm94VHlwZSA9ICpwcmltaXRpdmVWYWx1ZTsKLSAgICAgICAgICAgICAgICBpdGVyYXRv
ci5hZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChpdGVyYXRvci5oYXNNb3JlKCkgJiYgaXRlcmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOwotICAgICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRGV0YWNoZWQpIHsKLSAg
ICAgICAgICAgICAgICBtZXNoVHlwZSA9IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6REVUQUNIRUQ7
Ci0gICAgICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWl0ZXJhdG9yLmluZGV4KCkpIHsKLSAgICAg
ICAgICAgIC8vIElmIG5vIHZhbHVlIHdhcyBjb25zdW1lZCBmcm9tIHRoZSBtZXNoIHZhbHVlLCB0
aGVuIGl0IGlzIGp1c3QgYSBwYXJhbWV0ZXIgbGlzdCwgbWVhbmluZyB0aGF0IHdlIGVuZCB1cAot
ICAgICAgICAgICAgLy8gaGF2aW5nIGp1c3QgdHdvIENTU0xpc3RWYWx1ZXM6IGxpc3Qgb2Ygc2hh
ZGVycyBhbmQgbGlzdCBvZiBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgQVNTRVJUKGZpbHRlclZh
bHVlLT5sZW5ndGgoKSA9PSAyKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnNWYWx1ZSA9IGZpbHRl
clZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpOwotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPiAyICYmICFwYXJhbWV0ZXJzVmFsdWUp
Ci0gICAgICAgIHBhcmFtZXRlcnNWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDIpOwotICAgIAotICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QgcGFyYW1ldGVy
TGlzdDsKLSAgICBpZiAocGFyYW1ldGVyc1ZhbHVlICYmICFwYXJzZUN1c3RvbUZpbHRlclBhcmFt
ZXRlckxpc3QocGFyYW1ldGVyc1ZhbHVlLCBwYXJhbWV0ZXJMaXN0KSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgCi0gICAgUmVmUHRyPFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9
IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHZlcnRleFNoYWRlci5yZWxlYXNlKCks
IGZyYWdtZW50U2hhZGVyLnJlbGVhc2UoKSk7Ci0gICAgcmV0dXJuIEN1c3RvbUZpbHRlck9wZXJh
dGlvbjo6Y3JlYXRlKHByb2dyYW0ucmVsZWFzZSgpLCBwYXJhbWV0ZXJMaXN0LCBtZXNoUm93cywg
bWVzaENvbHVtbnMsIG1lc2hCb3hUeXBlLCBtZXNoVHlwZSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBT
dHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlv
bnMmIG91dE9wZXJhdGlvbnMpCi17Ci0gICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNFbXB0eSgp
KTsKLSAgICAKLSAgICBpZiAoIWluVmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAoaW5WYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4oaW5WYWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKCFpblZhbHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBmbG9hdCB6b29tRmFjdG9yID0gc3R5bGUgPyBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpIDogMTsK
LSAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgZm9yIChDU1NWYWx1ZUxpc3RJ
dGVyYXRvciBpID0gaW5WYWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAg
IENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7Ci0gICAgICAgIGlmICghY3VyclZhbHVl
LT5pc1dlYktpdENTU0ZpbHRlclZhbHVlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJL
aXRDU1NGaWx0ZXJWYWx1ZSo+KGkudmFsdWUoKSk7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShmaWx0
ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAg
ICAgICAgaWYgKG9wZXJhdGlvblR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0
ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihmaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW9w
ZXJhdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIC8vIENoZWNr
IHRoYXQgYWxsIHBhcmFtZXRlcnMgYXJlIHByaW1pdGl2ZSB2YWx1ZXMsIHdpdGggdGhlCi0gICAg
ICAgIC8vIGV4Y2VwdGlvbiBvZiBkcm9wIHNoYWRvdyB3aGljaCBoYXMgYSBTaGFkb3dWYWx1ZSBw
YXJhbWV0ZXIuCi0gICAgICAgIGlmIChvcGVyYXRpb25UeXBlICE9IEZpbHRlck9wZXJhdGlvbjo6
RFJPUF9TSEFET1cpIHsKLSAgICAgICAgICAgIGJvb2wgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0g
ZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgZmlsdGVyVmFsdWUt
Pmxlbmd0aCgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAoIWZpbHRlclZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKGopLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGhhdmVOb25QcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gZmlsdGVy
VmFsdWUtPmxlbmd0aCgpID8gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihmaWx0ZXJW
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSkgOiAwOwotICAgICAgICBzd2l0Y2ggKGZp
bHRlclZhbHVlLT5vcGVyYXRpb25UeXBlKCkpIHsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBpZiAoZmly
c3RWYWx1ZSkKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoZmlyc3RWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVyT3BlcmF0aW9u
OgotICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZpbHRlck9wZXJhdGlv
bjoKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVy
YXRpb246IHsKLSAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOwotICAgICAgICAgICAgaWYg
KGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgYW1vdW50ID0g
Zmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RW
YWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFw
cGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBvcGVy
YXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IFdlYktpdENTU0ZpbHRlclZhbHVlOjpIdWVSb3RhdGVGaWx0ZXJPcGVyYXRpb246IHsKLSAgICAg
ICAgICAgIGRvdWJsZSBhbmdsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxl
bmd0aCgpID09IDEpCi0gICAgICAgICAgICAgICAgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRl
RGVncmVlcygpOwotCi0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlLCBvcGVyYXRpb25U
eXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYktp
dENTU0ZpbHRlclZhbHVlOjpJbnZlcnRGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIGNhc2UgV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIGNh
c2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOgotICAgICAg
ICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVyT3BlcmF0aW9uOiB7Ci0g
ICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gKGZpbHRlclZhbHVlLT5vcGVyYXRpb25UeXBlKCkg
PT0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb24pID8gMCA6
IDE7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09IDEpIHsKLSAgICAg
ICAgICAgICAgICBhbW91bnQgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAg
ICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgICAg
ICAgICAgYW1vdW50IC89IDEwMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3BlcmF0
aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb246OmNyZWF0ZShhbW91bnQsIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJsdXJGaWx0
ZXJPcGVyYXRpb246IHsKLSAgICAgICAgICAgIExlbmd0aCBzdGREZXZpYXRpb24gPSBMZW5ndGgo
MCwgRml4ZWQpOwotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA+PSAxKSB7
Ci0gICAgICAgICAgICAgICAgc3RkRGV2aWF0aW9uID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmly
c3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoc3RkRGV2aWF0aW9uLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5h
cHBlbmQoQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwgb3BlcmF0aW9u
VHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAg
ICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSAhPSAxKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlID0gZmlsdGVyVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7Ci0gICAgICAgICAgICBpZiAoIWNzc1ZhbHVlLT5p
c1NoYWRvd1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihjc3NWYWx1ZSk7
Ci0gICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGlu
dD4oc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvciksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSwgem9v
bUZhY3RvcikpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1
ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpIDogMDsK
LSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQot
ICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29s
b3IuZ2V0KCkpOwotCi0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGxvY2F0aW9uLCBibHVyLCBjb2xvci5p
c1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCwgb3BlcmF0aW9uVHlwZSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6VW5rbm93bkZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBvdXRPcGVyYXRpb25zID0gb3BlcmF0aW9uczsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotI2VuZGlmCi0KLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZl
cjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlKQotewot
ICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLQotICAgIGlmIChwZW5kaW5n
SW1hZ2UtPmNzc0ltYWdlVmFsdWUoKSkgewotICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZh
bHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBpbWFn
ZVZhbHVlLT5jYWNoZWRJbWFnZShjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0gICAgfQotCi0gICAg
aWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7Ci0gICAgICAgIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWUqIGltYWdlR2VuZXJhdG9yVmFsdWUgPSBwZW5kaW5nSW1hZ2Ut
PmNzc0ltYWdlR2VuZXJhdG9yVmFsdWUoKTsKLSAgICAgICAgaW1hZ2VHZW5lcmF0b3JWYWx1ZS0+
bG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0gICAgICAgIHJldHVybiBTdHls
ZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoaW1hZ2VHZW5lcmF0b3JWYWx1ZSk7Ci0gICAgfQotCi0j
aWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgaWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VT
ZXRWYWx1ZSgpKSB7Ci0gICAgICAgIENTU0ltYWdlU2V0VmFsdWUqIGltYWdlU2V0VmFsdWUgPSBw
ZW5kaW5nSW1hZ2UtPmNzc0ltYWdlU2V0VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIGltYWdlU2V0
VmFsdWUtPmNhY2hlZEltYWdlU2V0KGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5n
SW1hZ2VzKCkKLXsKLSAgICBpZiAobV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmVuZCgpOwotICAgIGZvciAoSGFz
aFNldDxDU1NQcm9wZXJ0eUlEPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdJbWFnZVBy
b3BlcnRpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENTU1Byb3BlcnR5
SUQgY3VycmVudFByb3BlcnR5ID0gKml0OwotCi0gICAgICAgIHN3aXRjaCAoY3VycmVudFByb3Bl
cnR5KSB7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOiB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3R5bGUt
PmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5
ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
YmFja2dyb3VuZExheWVyLT5pbWFnZSgpICYmIGJhY2tncm91bmRMYXllci0+aW1hZ2UoKS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXllci0+
c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+
KGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Q29udGVudDogewotICAgICAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnRE
YXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1fc3R5bGUtPmNvbnRlbnREYXRhKCkpOyBj
b250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChjb250ZW50RGF0YS0+aXNJbWFnZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBTdHlsZUltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PEltYWdlQ29udGVudERh
dGEqPihjb250ZW50RGF0YSktPmltYWdlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19j
YXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobG9hZGVkSW1hZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPnNldEltYWdlKGxvYWRl
ZEltYWdlLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0eWxlLT5jdXJzb3Jz
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJzb3JM
aXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQ3Vyc29yRGF0YSYg
Y3VycmVudEN1cnNvciA9IGN1cnNvckxpc3QtPmF0KGkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVudEN1cnNvci5pbWFnZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29yLnNldEltYWdlKGxvYWRQ
ZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAgICAgICAgIGlm
IChtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkt
PmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldExpc3RT
dHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2Uq
PihtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291
cmNlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkg
JiYgbV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJ
bWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRlckltYWdl
U291cmNlKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewotICAgICAgICAgICAg
ICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0eWxlLT5ib3hSZWZsZWN0
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJbWFn
ZSA9IHJlZmxlY3Rpb24tPm1hc2soKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2tJbWFn
ZS5pbWFnZSgpICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2Fk
UGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdlLmlt
YWdlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2soTmlu
ZVBpZWNlSW1hZ2UobG9hZGVkSW1hZ2UucmVsZWFzZSgpLCBtYXNrSW1hZ2UuaW1hZ2VTbGljZXMo
KSwgbWFza0ltYWdlLmZpbGwoKSwgbWFza0ltYWdlLmJvcmRlclNsaWNlcygpLCBtYXNrSW1hZ2Uu
b3V0c2V0KCksIG1hc2tJbWFnZS5ob3Jpem9udGFsUnVsZSgpLCBtYXNrSW1hZ2UudmVydGljYWxS
dWxlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgICAgICBpZiAobV9z
dHlsZS0+bWFza0JveEltYWdlU291cmNlKCkgJiYgbV9zdHlsZS0+bWFza0JveEltYWdlU291cmNl
KCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1h
c2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGlu
Z0ltYWdlKj4obV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza0ltYWdlOiB7Ci0gICAgICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXll
ciA9IG1fc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBt
YXNrTGF5ZXItPm5leHQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobWFza0xheWVyLT5p
bWFnZSgpICYmIG1hc2tMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1hc2tMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0
aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tMYXllci0+aW1hZ2UoKSkpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NDEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgQ1NTU3R5bGVT
ZWxlY3Rvcl9oCi0jZGVmaW5lIENTU1N0eWxlU2VsZWN0b3JfaAotCi0jaW5jbHVkZSAiQ1NTUnVs
ZS5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgotI2luY2x1ZGUgIkxpbmtIYXNoLmgiCi0j
aW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5j
bHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWVudW0gRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHsgRG9Ob3RVc2VT
bWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRNaW5pbXVtRm9yRm9udEZpemUgfTsKLQot
Y2xhc3MgQ1NTRm9udFNlbGVjdG9yOwotY2xhc3MgQ1NTUGFnZVJ1bGU7Ci1jbGFzcyBDU1NQcmlt
aXRpdmVWYWx1ZTsKLWNsYXNzIENTU1Byb3BlcnR5OwotY2xhc3MgQ1NTUnVsZUxpc3Q7Ci1jbGFz
cyBDU1NGb250RmFjZTsKLWNsYXNzIENTU0ZvbnRGYWNlUnVsZTsKLWNsYXNzIENTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWU7Ci1jbGFzcyBDU1NJbWFnZVNldFZhbHVlOwotY2xhc3MgQ1NTSW1hZ2VWYWx1
ZTsKLWNsYXNzIENTU1NlbGVjdG9yOwotY2xhc3MgQ1NTU3R5bGVSdWxlOwotY2xhc3MgQ1NTU3R5
bGVTaGVldDsKLWNsYXNzIENTU1ZhbHVlOwotY2xhc3MgQ29udGFpbmVyTm9kZTsKLWNsYXNzIEN1
c3RvbUZpbHRlck9wZXJhdGlvbjsKLWNsYXNzIEN1c3RvbUZpbHRlclBhcmFtZXRlcjsKLWNsYXNz
IERvY3VtZW50OwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZyYW1lOwotY2xhc3MgRnJhbWVWaWV3
OwotY2xhc3MgS1VSTDsKLWNsYXNzIEtleWZyYW1lTGlzdDsKLWNsYXNzIEtleWZyYW1lVmFsdWU7
Ci1jbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOwotY2xhc3MgTm9kZTsKLWNsYXNzIFJlbmRlclJl
Z2lvbjsKLWNsYXNzIFJ1bGVEYXRhOwotY2xhc3MgUnVsZVNldDsKLWNsYXNzIFNldHRpbmdzOwot
Y2xhc3MgU3RhdGljQ1NTUnVsZUxpc3Q7Ci1jbGFzcyBTdHlsZUJ1aWxkZXI7Ci1jbGFzcyBTdHls
ZUltYWdlOwotY2xhc3MgU3R5bGVLZXlmcmFtZTsKLWNsYXNzIFN0eWxlUGVuZGluZ0ltYWdlOwot
Y2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKLWNsYXNzIFN0eWxlUnVsZTsKLWNsYXNzIFN0eWxlUnVs
ZUtleWZyYW1lczsKLWNsYXNzIFN0eWxlUnVsZVBhZ2U7Ci1jbGFzcyBTdHlsZVJ1bGVSZWdpb247
Ci1jbGFzcyBTdHlsZVNoYWRlcjsKLWNsYXNzIFN0eWxlU2hlZXQ7Ci1jbGFzcyBTdHlsZVNoZWV0
SW50ZXJuYWw7Ci1jbGFzcyBTdHlsZVNoZWV0TGlzdDsKLWNsYXNzIFN0eWxlZEVsZW1lbnQ7Ci1j
bGFzcyBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTsKLWNsYXNzIFdlYktpdENTU1NoYWRlclZhbHVlOwot
Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEN1c3RvbUZp
bHRlclBhcmFtZXRlcj4gPiBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0OwotI2VuZGlmCi0KLWNs
YXNzIE1lZGlhUXVlcnlSZXN1bHQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lZGlhUXVl
cnlSZXN1bHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBNZWRpYVF1
ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAmIGV4cHIsIGJvb2wgcmVzdWx0KQotICAgICAg
ICA6IG1fZXhwcmVzc2lvbihleHByKQotICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKLSAgICB7
Ci0gICAgfQotCi0gICAgTWVkaWFRdWVyeUV4cCBtX2V4cHJlc3Npb247Ci0gICAgYm9vbCBtX3Jl
c3VsdDsKLX07Ci0KLWVudW0gU3R5bGVTaGFyaW5nQmVoYXZpb3IgewotICAgIEFsbG93U3R5bGVT
aGFyaW5nLAotICAgIERpc2FsbG93U3R5bGVTaGFyaW5nLAotfTsKLQotLy8gTWF0Y2hPbmx5VXNl
ckFnZW50UnVsZXMgaXMgdXNlZCBpbiBtZWRpYSBxdWVyaWVzLCB3aGVyZSByZWxhdGl2ZSB1bml0
cwotLy8gYXJlIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnQgcm9vdCBlbGVt
ZW50IHN0eWxlLCBhbmQgc3R5bGVkIG9ubHkKLS8vIGZyb20gdGhlIFVzZXIgQWdlbnQgU3R5bGVz
aGVldCBydWxlcy4KLQotZW51bSBSdWxlTWF0Y2hpbmdCZWhhdmlvciB7Ci0gICAgTWF0Y2hBbGxS
dWxlcywKLSAgICBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcywKLX07Ci0KLS8vIFRoaXMgY2xhc3Mg
c2VsZWN0cyBhIFJlbmRlclN0eWxlIGZvciBhIGdpdmVuIGVsZW1lbnQgYmFzZWQgb24gYSBjb2xs
ZWN0aW9uIG9mIHN0eWxlc2hlZXRzLgotY2xhc3MgU3R5bGVSZXNvbHZlciB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU3R5bGVSZXNvbHZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIFN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqLCBib29sIG1hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcyk7Ci0gICAgflN0eWxlUmVzb2x2ZXIoKTsKLQotICAgIC8vIFVzaW5nIHRoZXNl
IGR1cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0byBvcHRpbWl6ZSBj
aGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgotICAgIHZvaWQgcHVzaFBhcmVu
dEVsZW1lbnQoRWxlbWVudCopOwotICAgIHZvaWQgcG9wUGFyZW50RWxlbWVudChFbGVtZW50Kik7
Ci0gICAgdm9pZCBwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290Kik7Ci0gICAg
dm9pZCBwb3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKLQotICAgIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlID0gMCwgU3R5bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxlU2hhcmlu
ZywKLSAgICAgICAgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBSZW5kZXJS
ZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKLQotICAgIHZvaWQga2V5ZnJhbWVTdHlsZXNG
b3JBbmltYXRpb24oRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgS2V5ZnJhbWVMaXN0Jik7
Ci0KLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNl
dWRvSWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwKTsKLQotICAgIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KTsKLQotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckRvY3VtZW50KERvY3VtZW50
KiwgQ1NTRm9udFNlbGVjdG9yKiA9IDApOwotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KLSAgICBSZW5kZXJTdHlsZSogcm9v
dEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsgfQotICAg
IEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KLSAgICBEb2N1
bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrZXIuZG9jdW1lbnQoKTsgfQot
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gc3R5
bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBh
cmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlw
dGlvbigpOyB9Ci0gICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KLSAgICB2b2lkIHNldFpvb20oZmxvYXQgZikg
eyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRFZmZl
Y3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZl
Wm9vbShmKTsgfQotICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1fZm9udERp
cnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIpOyB9Ci0gICAgYm9vbCBoYXNQYXJl
bnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnROb2RlOyB9Ci0gICAgCi0gICAgdm9pZCBh
cHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJl
ZlB0cjxTdHlsZVNoZWV0PiA+Jik7Ci0gICAgCi0gICAgLy8gRmluZCB0aGUgaWRzIG9yIGNsYXNz
ZXMgdGhlIHNlbGVjdG9ycyBvbiBhIHN0eWxlc2hlZXQgYXJlIHNjb3BlZCB0by4gVGhlIHNlbGVj
dG9ycyBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIGluIHN1YnRyZWVzIHdoZXJlIHRoZSByb290IGVs
ZW1lbnQgbWF0Y2hlcyB0aGUgc2NvcGUuCi0gICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5lU3R5bGVz
aGVldFNlbGVjdG9yU2NvcGVzKFN0eWxlU2hlZXRJbnRlcm5hbCosIEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2Nv
cGVzKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCos
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwotICAg
IHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwotICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKCk7
Ci0gICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7Ci0gICAgYm9vbCBtYXRjaGVz
UnVsZVNldChSdWxlU2V0Kik7Ci0gICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBw
YXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKLSAgICBTdHlsZWRFbGVt
ZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBj
b25zdDsKLSAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50Kikg
Y29uc3Q7Ci0KLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvcktleWZyYW1lKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsK
LQotI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgdm9pZCBwdXNoU2NvcGUoY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KTsKLSAg
ICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsKLSNlbHNlCi0gICAg
dm9pZCBwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IENvbnRhaW5lck5vZGUq
KSB7IH0KLSAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqKSB7IH0KLSNlbmRp
ZgotCi1wdWJsaWM6Ci0gICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxsIGdpdmUgYmFjayB0aGUgc2V0
IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBlbGVtZW50IChvciBhIHBzZXVkby1l
bGVtZW50KS4KLSAgICBlbnVtIENTU1J1bGVGaWx0ZXIgewotICAgICAgICBVQUFuZFVzZXJDU1NS
dWxlcyAgID0gMSA8PCAxLAotICAgICAgICBBdXRob3JDU1NSdWxlcyAgICAgID0gMSA8PCAyLAot
ICAgICAgICBFbXB0eUNTU1J1bGVzICAgICAgID0gMSA8PCAzLAotICAgICAgICBDcm9zc09yaWdp
bkNTU1J1bGVzID0gMSA8PCA0LAotICAgICAgICBBbGxCdXRFbXB0eUNTU1J1bGVzID0gVUFBbmRV
c2VyQ1NTUnVsZXMgfCBBdXRob3JDU1NSdWxlcyB8IENyb3NzT3JpZ2luQ1NTUnVsZXMsCi0gICAg
ICAgIEFsbENTU1J1bGVzICAgICAgICAgPSBBbGxCdXRFbXB0eUNTU1J1bGVzIHwgRW1wdHlDU1NS
dWxlcywKLSAgICB9OwotICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHN0eWxlUnVsZXNGb3JF
bGVtZW50KEVsZW1lbnQqLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NT
UnVsZXMpOwotICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHBzZXVkb1N0eWxlUnVsZXNGb3JF
bGVtZW50KEVsZW1lbnQqLCBQc2V1ZG9JZCwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUgPSBBbGxC
dXRFbXB0eUNTU1J1bGVzKTsKLQotICAgIC8vIEdpdmVuIGEgQ1NTIGtleXdvcmQgaW4gdGhlIHJh
bmdlICh4eC1zbWFsbCB0byAtd2Via2l0LXh4eC1sYXJnZSksIHRoaXMgZnVuY3Rpb24gd2lsbCBy
ZXR1cm4KLSAgICAvLyB0aGUgY29ycmVjdCBmb250IHNpemUgc2NhbGVkIHJlbGF0aXZlIHRvIHRo
ZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVtKS4KLSAgICBzdGF0aWMgZmxvYXQgZm9udFNpemVGb3JL
ZXl3b3JkKERvY3VtZW50KiwgaW50IGtleXdvcmQsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0
U2l6ZSk7Ci0KLSAgICAvLyBHaXZlbiBhIGZvbnQgc2l6ZSBpbiBwaXhlbCwgdGhpcyBmdW5jdGlv
biB3aWxsIHJldHVybiBsZWdhY3kgZm9udCBzaXplIGJldHdlZW4gMSBhbmQgNy4KLSAgICBzdGF0
aWMgaW50IGxlZ2FjeUZvbnRTaXplKERvY3VtZW50KiwgaW50IHBpeGVsRm9udFNpemUsIGJvb2wg
c2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSk7Ci0KLXB1YmxpYzoKLSAgICB2b2lkIHNldFN0eWxl
KFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHMpIHsgbV9zdHlsZSA9IHM7IH0gLy8gVXNlZCBieSB0
aGUgZG9jdW1lbnQgd2hlbiBzZXR0aW5nIHVwIGl0cyByb290IHN0eWxlLgotCi0gICAgdm9pZCBh
cHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFJlbmRlclN0eWxl
Kik7Ci0KLSAgICB2b2lkIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlE
LCBDU1NWYWx1ZSopOwotCi0gICAgdm9pZCB1cGRhdGVGb250KCk7Ci0KLSAgICBzdGF0aWMgZmxv
YXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBmbG9hdCB6b29t
RmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRN
aW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSk7Ci0KLSAgICB2
b2lkIHNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOwotCi1wcml2YXRl
OgotICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1
bWVudCosIFJlbmRlclN0eWxlKiwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVk
U2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpOwotCi1wdWJsaWM6Ci0gICAgYm9vbCB1c2VTVkda
b29tUnVsZXMoKTsKLQotICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1p
dGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25zdDsKLQotICAgIGJv
b2wgaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0K
LSAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dFNlbGVjdG9yLmdldCgpOyB9Ci0KLSAgICB2b2lkIGFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFR
dWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiwgYm9vbCByZXN1bHQpOwotCi0gICAgYm9v
bCBhZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdDsKLQotICAgIHZvaWQgYWxsVmlzaXRl
ZFN0YXRlQ2hhbmdlZCgpIHsgbV9jaGVja2VyLmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsgfQot
ICAgIHZvaWQgdmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCkgeyBtX2No
ZWNrZXIudmlzaXRlZFN0YXRlQ2hhbmdlZCh2aXNpdGVkSGFzaCk7IH0KLQotICAgIHZvaWQgYWRk
S2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4pOwotCi0gICAgYm9v
bCBjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwotCi0gICAgYm9vbCB1
c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmVhdHVyZXMuc2libGluZ1J1bGVz
LmlzRW1wdHkoKTsgfQotICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyByZXR1
cm4gbV9mZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXM7IH0KLSAgICBib29sIHVzZXNCZWZvcmVB
ZnRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzQmVmb3JlQWZ0ZXJSdWxl
czsgfQotICAgIGJvb2wgdXNlc0xpbmtSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMu
dXNlc0xpbmtSdWxlczsgfQotCi0gICAgc3RhdGljIGJvb2wgY3JlYXRlVHJhbnNmb3JtT3BlcmF0
aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwotICAgIAot
ICAgIHZvaWQgaW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKLSAgICAKLSAgICAv
LyBXQVJOSU5HLiBUaGlzIHdpbGwgY29uc3RydWN0IENTU09NIHdyYXBwZXJzIGZvciBhbGwgc3R5
bGUgcnVsZXMgYW5kIGNhY2hlIHRoZW4gaW4gYSBtYXAgZm9yIHNpZ25pZmljYW50IG1lbW9yeSBj
b3N0LgotICAgIC8vIEl0IGlzIGhlcmUgdG8gc3VwcG9ydCBpbnNwZWN0b3IuIERvbid0IHVzZSBm
b3IgYW55IHJlZ3VsYXIgZW5naW5lIGZ1bmN0aW9ucy4KLSAgICBDU1NTdHlsZVJ1bGUqIGVuc3Vy
ZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVSdWxlKik7Ci0KLSNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi0gICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmls
dGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQot
ICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihDU1NWYWx1ZSopOwotICAgIFN0eWxlU2hhZGVy
KiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWYWx1
ZSopOwotICAgIGJvb2wgcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiwg
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
UGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlck51bWJlclBhcmFtdGVyKGNvbnN0IFN0cmluZyYg
bmFtZSwgQ1NTVmFsdWVMaXN0Kik7Ci0gICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRp
b24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOwot
ICAgIHZvaWQgbG9hZFBlbmRpbmdTaGFkZXJzKCk7Ci0jZW5kaWYKLSNlbmRpZiAvLyBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi0KLSAgICBzdHJ1Y3QgUnVsZUZlYXR1cmUgewotICAgICAgICBSdWxlRmVh
dHVyZShTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxlY3RvciwgYm9vbCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luKQotICAgICAgICAgICAgOiBydWxlKHJ1bGUpCi0gICAgICAgICAg
ICAsIHNlbGVjdG9yKHNlbGVjdG9yKQotICAgICAgICAgICAgLCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pIAotICAgICAgICB7IAotICAgICAgICB9
Ci0gICAgICAgIFN0eWxlUnVsZSogcnVsZTsKLSAgICAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
OwotICAgICAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47Ci0gICAgfTsKLSAgICBz
dHJ1Y3QgRmVhdHVyZXMgewotICAgICAgICBGZWF0dXJlcygpOwotICAgICAgICB+RmVhdHVyZXMo
KTsKLSAgICAgICAgdm9pZCBhZGQoY29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmKTsKLSAg
ICAgICAgdm9pZCBjbGVhcigpOwotICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBp
ZHNJblJ1bGVzOwotICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhdHRyc0luUnVs
ZXM7Ci0gICAgICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gc2libGluZ1J1bGVzOwotICAgICAgICBW
ZWN0b3I8UnVsZUZlYXR1cmU+IHVuY29tbW9uQXR0cmlidXRlUnVsZXM7Ci0gICAgICAgIGJvb2wg
dXNlc0ZpcnN0TGluZVJ1bGVzOwotICAgICAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzOwot
ICAgICAgICBib29sIHVzZXNMaW5rUnVsZXM7Ci0gICAgfTsKLQotcHJpdmF0ZToKLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3Rz
IHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAot
ICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJT
dHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgdm9pZCBjaGVja0ZvclRleHRT
aXplQWRqdXN0KCk7Ci0KLSAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBz
dHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKLQotICAg
IHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVs
ZXMuYXBwZW5kKHJ1bGUpOyB9Ci0KLSAgICBzdHJ1Y3QgTWF0Y2hSYW5nZXMgewotICAgICAgICBN
YXRjaFJhbmdlcygpIDogZmlyc3RVQVJ1bGUoLTEpLCBsYXN0VUFSdWxlKC0xKSwgZmlyc3RBdXRo
b3JSdWxlKC0xKSwgbGFzdEF1dGhvclJ1bGUoLTEpLCBmaXJzdFVzZXJSdWxlKC0xKSwgbGFzdFVz
ZXJSdWxlKC0xKSB7IH0KLSAgICAgICAgaW50IGZpcnN0VUFSdWxlOwotICAgICAgICBpbnQgbGFz
dFVBUnVsZTsKLSAgICAgICAgaW50IGZpcnN0QXV0aG9yUnVsZTsKLSAgICAgICAgaW50IGxhc3RB
dXRob3JSdWxlOwotICAgICAgICBpbnQgZmlyc3RVc2VyUnVsZTsKLSAgICAgICAgaW50IGxhc3RV
c2VyUnVsZTsKLSAgICB9OwotCi0gICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzIHsKLSAgICAg
ICAgTWF0Y2hlZFByb3BlcnRpZXMoKSA6IHBvc3NpYmx5UGFkZGVkTWVtYmVyKDApIHsgfQotICAg
ICAgICAKLSAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHByb3BlcnRpZXM7Ci0gICAg
ICAgIHVuaW9uIHsKLSAgICAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGlua01hdGNoVHlwZSA6IDI7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaXNJblJlZ2lv
blJ1bGUgOiAxOwotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIC8vIFVzZWQgdG8gbWFrZSBz
dXJlIGFsbCBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZCBzaW5jZSB3ZSBjb21wdXRlIHRoZSBo
YXNoIG92ZXIgdGhlIGJ5dGVzIG9mIHRoaXMgb2JqZWN0LgotICAgICAgICAgICAgdm9pZCogcG9z
c2libHlQYWRkZWRNZW1iZXI7Ci0gICAgICAgIH07Ci0gICAgfTsKLQotICAgIHN0cnVjdCBNYXRj
aFJlc3VsdCB7Ci0gICAgICAgIE1hdGNoUmVzdWx0KCkgOiBpc0NhY2hlYWJsZSh0cnVlKSB7IH0K
LSAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4gbWF0Y2hlZFByb3BlcnRpZXM7
Ci0gICAgICAgIFZlY3RvcjxTdHlsZVJ1bGUqLCA2ND4gbWF0Y2hlZFJ1bGVzOwotICAgICAgICBN
YXRjaFJhbmdlcyByYW5nZXM7Ci0gICAgICAgIGJvb2wgaXNDYWNoZWFibGU7Ci0gICAgfTsKLQot
ICAgIHN0cnVjdCBNYXRjaE9wdGlvbnMgewotICAgICAgICBNYXRjaE9wdGlvbnMoYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcywgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKSA6IHNjb3BlKHNj
b3BlKSwgaW5jbHVkZUVtcHR5UnVsZXMoaW5jbHVkZUVtcHR5UnVsZXMpIHsgfQotICAgICAgICBj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKLSAgICAgICAgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
czsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hS
ZXN1bHQmLCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0gMCwgdW5z
aWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIGJvb2wgaW5S
ZWdpb25SdWxlID0gZmFsc2UpOwotICAgIHZvaWQgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhN
YXRjaFJlc3VsdCYsIFN0eWxlUHJvcGVydHlTZXQqLCBib29sIGlzQ2FjaGVhYmxlID0gdHJ1ZSk7
Ci0KLSAgICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmKTsKLSAgICB2b2lkIG1hdGNo
VUFSdWxlcyhNYXRjaFJlc3VsdCYpOwotICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0
JiwgUnVsZVNldCopOwotICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1
bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9y
UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIGNv
bGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwotICAgIHZvaWQgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFz
dFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7Ci0gICAgdm9pZCBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5k
ZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7Ci0gICAgYm9vbCBm
YXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKLSAgICB2b2lkIHNvcnRN
YXRjaGVkUnVsZXMoKTsKLSAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRj
aFJlc3VsdCYpOwotCi0gICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwgY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKTsKLSAgICBib29sIGNoZWNrUmVnaW9uU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdpb25FbGVtZW50KTsK
LSAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmKTsKLSAg
ICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+Ci0gICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgYm9vbCBpbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBp
bnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSk7Ci0gICAgdGVtcGxhdGUgPGJvb2wgZmly
c3RQYXNzPgotICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQq
IHByb3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVk
T25seSwgYm9vbCBmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzKTsKLQotICAgIHN0YXRpYyBib29sIGlz
VmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwotCi0gICAgdm9pZCBtYXRj
aFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wg
aXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwotICAgIHZvaWQgbWF0Y2hQYWdl
UnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3Qg
VmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFn
ZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7Ci0gICAgYm9vbCBpc0xlZnRQYWdlKGludCBwYWdl
SW5kZXgpIGNvbnN0OwotICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Qg
eyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQotICAgIGJvb2wgaXNGaXJzdFBhZ2Uo
aW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgp
IGNvbnN0OwotCi0gICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7Ci0gICAgT3duUHRy
PFJ1bGVTZXQ+IG1fdXNlclN0eWxlOwotCi0gICAgRmVhdHVyZXMgbV9mZWF0dXJlczsKLSAgICBP
d25QdHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKLSAgICBPd25QdHI8UnVsZVNldD4gbV91
bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7Ci0KLSAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOwot
ICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOwotICAgIEZpbGxMYXllciBtX2JhY2tncm91bmRE
YXRhOwotICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotCi0gICAgdHlwZWRlZiBIYXNoTWFw
PEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiA+IEtleWZyYW1l
c1J1bGVNYXA7Ci0gICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZyYW1lc1J1bGVNYXA7Ci0KLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyBy
ZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQotCi0gICAgUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0gICAgUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NT
SW1hZ2VWYWx1ZSopOwotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqKTsKLSNp
ZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHNldE9y
UGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7Ci0jZW5k
aWYKLQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0KLSAgICBib29sIGFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGU7IH0KLQotICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvSW50TGVuZ3Ro
KENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxl
LCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwotICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvRmxv
YXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBy
b290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGlj
IFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwotCi0gICAgdm9pZCBhZGRBdXRo
b3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8
U3R5bGVTaGVldEludGVybmFsPiA+KiwgUnVsZVNldCYgdXNlclN0eWxlKTsKLQotICAgIHZvaWQg
Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7Ci0KLSAgICB2b2lkIG1hcEZpbGxBdHRhY2htZW50
KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxs
Q2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFw
RmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAg
IHZvaWQgbWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSop
OwotICAgIHZvaWQgbWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1Zh
bHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIq
LCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwRmlsbFJlcGVhdFkoQ1NTUHJvcGVydHlJRCwgRmls
bExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxTaXplKENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsWFBvc2l0aW9uKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsWVBvc2l0
aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0KLSAgICB2b2lkIG1h
cEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmlt
YXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1h
dGlvbkR1cmF0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRp
b25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9u
SXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1h
dGlvbk5hbWUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvblBs
YXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uUHJv
cGVydHkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvblRpbWlu
Z0Z1bmN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0KLXB1YmxpYzoKLSAgICB2b2lkIG1h
cE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2Um
KTsKLSAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NTVmFsdWUqLCBOaW5lUGllY2VJ
bWFnZSYpOwotICAgIExlbmd0aEJveCBtYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUqKTsK
LSAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlKiwgTmluZVBpZWNlSW1h
Z2UmKTsKLXByaXZhdGU6Ci0gICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVk
RWxlbWVudCopIGNvbnN0OwotCi0gICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQs
IENTU1ZhbHVlKik7Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwotI2VuZGlmCi0KLSAgICBQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqKTsKLSAgICB2b2lk
IGxvYWRQZW5kaW5nSW1hZ2VzKCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZU1hdGNo
ZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyosIHVuc2lnbmVkIHNpemUp
OwotICAgIHN0cnVjdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSB7Ci0gICAgICAgIFZlY3Rv
cjxNYXRjaGVkUHJvcGVydGllcz4gbWF0Y2hlZFByb3BlcnRpZXM7Ci0gICAgICAgIE1hdGNoUmFu
Z2VzIHJhbmdlczsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZW5kZXJTdHlsZTsKLSAg
ICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBwYXJlbnRSZW5kZXJTdHlsZTsKLSAgICB9OwotICAg
IGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBmaW5kRnJvbU1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUodW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQmKTsKLSAgICB2b2lkIGFk
ZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSwgdW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQmKTsK
LQotICAgIC8vIEV2ZXJ5IE4gYWRkaXRpb25zIHRvIHRoZSBtYXRjaGVkIGRlY2xhcmF0aW9uIGNh
Y2hlIHRyaWdnZXIgYSBzd2VlcCB3aGVyZSBlbnRyaWVzIGhvbGRpbmcKLSAgICAvLyB0aGUgbGFz
dCByZWZlcmVuY2UgdG8gYSBzdHlsZSBkZWNsYXJhdGlvbiBhcmUgZ2FyYmFnZSBjb2xsZWN0ZWQu
Ci0gICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKLQotICAgIHVuc2lnbmVk
IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwOwotCi0gICAg
dHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbT4gTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZTsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlIG1fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZTsKLQotICAgIC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0
IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVsZW1lbnQsIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIg
dXNlZCBmb3IKLSAgICAvLyBtZXJnZSBzb3J0aW5nLgotICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0
YSosIDMyPiBtX21hdGNoZWRSdWxlczsKLQotICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4g
bV9ydWxlTGlzdDsKLQotICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gbV9wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzOwotCi0gICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVkaXVtOwot
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwotCi0gICAgUHNldWRv
SWQgbV9keW5hbWljUHNldWRvOwotCi0gICAgU2VsZWN0b3JDaGVja2VyIG1fY2hlY2tlcjsKLQot
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV9wYXJl
bnRTdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOwotICAgIEVsZW1l
bnQqIG1fZWxlbWVudDsKLSAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7Ci0gICAg
UmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7Ci0gICAgRUluc2lkZUxpbmsgbV9lbGVt
ZW50TGlua1N0YXRlOwotICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKLSAgICBDU1NW
YWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7Ci0gICAgYm9vbCBtX2ZvbnREaXJ0eTsKLSAgICBib29s
IG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOwotICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsK
LQotICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwotICAgIFZlY3Rv
cjxPd25QdHI8TWVkaWFRdWVyeVJlc3VsdD4gPiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
eVJlc3VsdHM7Ci0KLSAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOwotICAg
IGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOwotICAgIGNvbnN0IFN0eWxl
QnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7Ci0gICAgCi0gICAgSGFzaE1hcDxTdHlsZVJ1bGUqLCBS
ZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXA7Ci0gICAg
SGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJT
ZXQ7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFk
ZXJzOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIHN0YXRpYyBjb25z
dCBDb250YWluZXJOb2RlKiBkZXRlcm1pbmVTY29wZShjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwq
KTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250YWluZXJOb2RlKiwgT3duUHRyPFJ1
bGVTZXQ+ID4gU2NvcGVkUnVsZVNldE1hcDsKLQotICAgIFJ1bGVTZXQqIHJ1bGVTZXRGb3JTY29w
ZShjb25zdCBDb250YWluZXJOb2RlKikgY29uc3Q7Ci0KLSAgICB2b2lkIHNldHVwU2NvcGVTdGFj
ayhjb25zdCBDb250YWluZXJOb2RlKik7Ci0gICAgYm9vbCBzY29wZVN0YWNrSXNDb25zaXN0ZW50
KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFyZW50ICYmIHBh
cmVudCA9PSBtX3Njb3BlU3RhY2tQYXJlbnQ7IH0KLQotICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9z
Y29wZWRBdXRob3JTdHlsZXM7Ci0gICAgCi0gICAgc3RydWN0IFNjb3BlU3RhY2tGcmFtZSB7Ci0g
ICAgICAgIFNjb3BlU3RhY2tGcmFtZSgpIDogbV9zY29wZSgwKSwgbV9ydWxlU2V0KDApIHsgfQot
ICAgICAgICBTY29wZVN0YWNrRnJhbWUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIFJ1bGVT
ZXQqIHJ1bGVTZXQpIDogbV9zY29wZShzY29wZSksIG1fcnVsZVNldChydWxlU2V0KSB7IH0KLSAg
ICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZTsKLSAgICAgICAgUnVsZVNldCogbV9y
dWxlU2V0OwotICAgIH07Ci0gICAgLy8gVmVjdG9yICh1c2VkIGFzIHN0YWNrKSB0aGF0IGtlZXBz
IHRyYWNrIG9mIHNjb3BpbmcgZWxlbWVudHMgKGkuZS4sIGVsZW1lbnRzIHdpdGggYSA8c3R5bGUg
c2NvcGVkPiBjaGlsZCkKLSAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcgdHJlZSBpdGVyYXRpb24g
Zm9yIHN0eWxlIHJlc29sdXRpb24uCi0gICAgVmVjdG9yPFNjb3BlU3RhY2tGcmFtZT4gbV9zY29w
ZVN0YWNrOwotICAgIC8vIEVsZW1lbnQgbGFzdCBzZWVuIGFzIHBhcmVudCBlbGVtZW50IHdoZW4g
dXBkYXRpbmcgbV9zY29waW5nRWxlbWVudFN0YWNrLgotICAgIC8vIFRoaXMgaXMgdXNlZCB0byBk
ZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50U3RhY2sgaXMgY29uc2lzdGVudCwgc2VwYXJh
dGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9wYXJlbnRTdGFjay4KLSAgICBjb25zdCBDb250
YWluZXJOb2RlKiBtX3Njb3BlU3RhY2tQYXJlbnQ7Ci0jZW5kaWYKLQotICAgIGZyaWVuZCBjbGFz
cyBTdHlsZUJ1aWxkZXI7Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRjaGVk
UHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJik7Ci0gICAgZnJpZW5kIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0
aWVzJik7Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRjaFJhbmdlcyYsIGNv
bnN0IE1hdGNoUmFuZ2VzJik7Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBNYXRj
aFJhbmdlcyYsIGNvbnN0IE1hdGNoUmFuZ2VzJik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBDU1NTdHlsZVNlbGVjdG9yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC00Myw5ICs0MiwxMCBAQAogI2luY2x1ZGUgIk1l
ZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5o
IgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
CiAjaWYgRU5BQkxFKDNEX1JFTkRFUklORykgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCShyZXZpc2lv
biAxMTUyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiTWVkaWFRdWVyeU1hdGNoZXIuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgpAQCAtMjksNiArMjgsNyBAQAogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0
b3IuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5TGlzdC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9y
LmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxl
U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3Iu
aCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKICNpbmNsdWRlICJDU1NQcmltaXRpdmVW
YWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2
IEBACiAjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0N1cnNv
ckltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCi0j
aW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgog
I2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNDAsNiAr
MzksNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
IApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MiArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHlsZU1lZGlhLmgi
CiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIk1l
ZGlhTGlzdC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTE1MjAxKQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6MTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTg2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICog
ICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdv
bGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Vi
a2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHly
aWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVj
dG9yLmgiCisKKyNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDb250ZW50RGF0YS5o
IgorI2luY2x1ZGUgIkNvdW50ZXIuaCIKKyNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgorI2lu
Y2x1ZGUgIkNTU0JvcmRlckltYWdlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5o
IgorI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NGb250RmFj
ZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NJbXBv
cnRSdWxlLmgiCisjaW5jbHVkZSAiQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIgorI2luY2x1ZGUg
IkNTU01lZGlhUnVsZS5oIgorI2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCisjaW5jbHVkZSAiQ1NT
UGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2luY2x1
ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKKyNp
bmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVk
ZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVk
ZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCIK
KyNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCisjaW5j
bHVkZSAiRm9udEZlYXR1cmVWYWx1ZS5oIgorI2luY2x1ZGUgIkZvbnRWYWx1ZS5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKKyNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQcm9ncmVz
c0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TFRleHRBcmVhRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IgorI2luY2x1ZGUgIktleWZyYW1lTGlzdC5oIgorI2luY2x1ZGUgIkxpbmtIYXNoLmgiCisjaW5j
bHVkZSAiTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgiCisjaW5jbHVkZSAiTWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNp
bmNsdWRlICJNZWRpYUxpc3QuaCIKKyNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisj
aW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJQZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKKyNpbmNsdWRlICJS
ZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyU2Nyb2xs
YmFyLmgiCisjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTdHlsZUNvbnN0YW50cy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAi
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgorI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgorI2luY2x1ZGUgIlNW
R0ZvbnRGYWNlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgi
CisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2lu
Y2x1ZGUgIlNoYWRvd0RhdGEuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAi
U2hhZG93VmFsdWUuaCIKKyNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5j
bHVkZSAiU3R5bGVCdWlsZGVyLmgiCisjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2lu
Y2x1ZGUgIlN0eWxlUGVuZGluZ0ltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5j
bHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0Lmgi
CisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisj
aW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiVXNlckFn
ZW50U3R5bGVTaGVldHMuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTUmVn
aW9uUnVsZS5oIgorI2luY2x1ZGUgIldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCisjaW5jbHVkZSAiWE1MTmFtZXMuaCIKKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYg
RU5BQkxFKENTU19GSUxURVJTKQorI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIldlYktpdENTU0ZpbHRlclZhbHVlLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShEQVNIQk9B
UkRfU1VQUE9SVCkKKyNpbmNsdWRlICJEYXNoYm9hcmRSZWdpb24uaCIKKyNlbmRpZgorCisjaWYg
RU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorI2luY2x1ZGUgIkN1c3RvbUZp
bHRlck51bWJlclBhcmFtZXRlci5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlck9wZXJhdGlvbi5o
IgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgorI2luY2x1ZGUgIlN0eWxlQ2Fj
aGVkU2hhZGVyLmgiCisjaW5jbHVkZSAiU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCisjaW5j
bHVkZSAiU3R5bGVQZW5kaW5nU2hhZGVyLmgiCisjaW5jbHVkZSAiU3R5bGVTaGFkZXIuaCIKKyNp
bmNsdWRlICJXZWJLaXRDU1NTaGFkZXJWYWx1ZS5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NT
X0lNQUdFX1NFVCkKKyNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCisjaW5jbHVkZSAiU3R5
bGVDYWNoZWRJbWFnZVNldC5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyNkZWZpbmUg
RklYRURfUE9TSVRJT05fQ1JFQVRFU19TVEFDS0lOR19DT05URVhUIDEKKyNlbmRpZgorCit1c2lu
ZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CisKKyNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAoraWYg
KGlzSW5oZXJpdCkgeyBcCisgICAgbV9zdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5bGUtPnBy
b3AoKSk7IFwKKyAgICByZXR1cm47IFwKK30KKworI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTChwcm9wLCBQcm9wKSBcCitIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCitpZiAo
aXNJbml0aWFsKSB7IFwKKyAgICBtX3N0eWxlLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRp
YWwjI1Byb3AoKSk7IFwKKyAgICByZXR1cm47IFwKK30KKworI2RlZmluZSBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTF9XSVRIX1ZBTFVFKHByb3AsIFByb3AsIFZhbHVlKSBcCitIQU5ETEVfSU5I
RVJJVChwcm9wLCBQcm9wKSBcCitpZiAoaXNJbml0aWFsKSB7IFwKKyAgICBtX3N0eWxlLT5zZXQj
I1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1ZhbHVlKCkpO1wKKyAgICByZXR1cm47XAorfQor
CisjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUocHJvcCwg
UHJvcCkgXAorSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAoraWYgKHBy
aW1pdGl2ZVZhbHVlKSBcCisgICAgbV9zdHlsZS0+c2V0IyNQcm9wKCpwcmltaXRpdmVWYWx1ZSk7
CisKK2NsYXNzIFJ1bGVEYXRhIHsKK3B1YmxpYzoKKyAgICBSdWxlRGF0YShTdHlsZVJ1bGUqLCBD
U1NTZWxlY3RvciosIHVuc2lnbmVkIHBvc2l0aW9uLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKTsK
KworICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQor
ICAgIFN0eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQorICAgIENTU1Nl
bGVjdG9yKiBzZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3I7IH0KKworICAgIGJv
b2wgaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3I7IH0KKyAgICBib29sIGhhc011bHRpcGFydFNlbGVjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNNdWx0aXBhcnRTZWxlY3RvcjsgfQorICAgIGJvb2wgaGFzUmlnaHRtb3N0
U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSBjb25zdCB7IHJldHVybiBtX2hh
c1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoOyB9CisgICAgYm9v
bCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcjsgfQorICAgIHVuc2lnbmVkIHNwZWNpZmlj
aXR5KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY2l0eTsgfQorICAgIHVuc2lnbmVkIGxpbmtN
YXRjaFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xpbmtNYXRjaFR5cGU7IH0KKyAgICBib29sIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW47IH0KKyAgICBib29sIGlzSW5SZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4g
bV9pc0luUmVnaW9uUnVsZTsgfQorCisgICAgLy8gVHJ5IHRvIGJhbGFuY2UgYmV0d2VlbiBtZW1v
cnkgdXNhZ2UgKHRoZXJlIGNhbiBiZSBsb3RzIG9mIFJ1bGVEYXRhIG9iamVjdHMpIGFuZCBnb29k
IGZpbHRlcmluZyBwZXJmb3JtYW5jZS4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11
bUlkZW50aWZpZXJDb3VudCA9IDQ7CisgICAgY29uc3QgdW5zaWduZWQqIGRlc2NlbmRhbnRTZWxl
Y3RvcklkZW50aWZpZXJIYXNoZXMoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NlbmRhbnRTZWxlY3Rv
cklkZW50aWZpZXJIYXNoZXM7IH0KKworcHJpdmF0ZToKKyAgICBTdHlsZVJ1bGUqIG1fcnVsZTsK
KyAgICBDU1NTZWxlY3RvciogbV9zZWxlY3RvcjsKKyAgICB1bnNpZ25lZCBtX3NwZWNpZmljaXR5
OworICAgIC8vIFRoaXMgbnVtYmVyIHdhcyBwaWNrZWQgZmFpcmx5IGFyYml0cmFyaWx5LiBXZSBj
YW4gcHJvYmFibHkgbG93ZXIgaXQgaWYgd2UgbmVlZCB0by4KKyAgICAvLyBTb21lIHNpbXBsZSB0
ZXN0aW5nIHNob3dlZCA8MTAwLDAwMCBSdWxlRGF0YSdzIG9uIGxhcmdlIHNpdGVzLgorICAgIHVu
c2lnbmVkIG1fcG9zaXRpb24gOiAyNDsKKyAgICB1bnNpZ25lZCBtX2hhc0Zhc3RDaGVja2FibGVT
ZWxlY3RvciA6IDE7CisgICAgdW5zaWduZWQgbV9oYXNNdWx0aXBhcnRTZWxlY3RvciA6IDE7Cisg
ICAgdW5zaWduZWQgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxl
SGFzaCA6IDE7CisgICAgdW5zaWduZWQgbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0
b3IgOiAxOworICAgIHVuc2lnbmVkIG1fbGlua01hdGNoVHlwZSA6IDI7IC8vICBTZWxlY3RvckNo
ZWNrZXI6OkxpbmtNYXRjaE1hc2sKKyAgICB1bnNpZ25lZCBtX2hhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4gOiAxOworICAgIHVuc2lnbmVkIG1faXNJblJlZ2lvblJ1bGUgOiAxOworICAgIC8vIFVz
ZSBwbGFpbiBhcnJheSBpbnN0ZWFkIG9mIGEgVmVjdG9yIHRvIG1pbmltaXplIG1lbW9yeSBvdmVy
aGVhZC4KKyAgICB1bnNpZ25lZCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXNb
bWF4aW11bUlkZW50aWZpZXJDb3VudF07Cit9OworICAgIAorc3RydWN0IFNhbWVTaXplQXNSdWxl
RGF0YSB7CisgICAgdm9pZCogYTsKKyAgICB2b2lkKiBiOworICAgIHVuc2lnbmVkIGM7CisgICAg
dW5zaWduZWQgZDsKKyAgICB1bnNpZ25lZCBlWzRdOworfTsKKworQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKFJ1bGVEYXRhKSA9PSBzaXplb2YoU2FtZVNpemVBc1J1bGVEYXRhKSwgUnVsZURhdGFfc2hv
dWxkX3N0YXlfc21hbGwpOworCitjbGFzcyBSdWxlU2V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShSdWxlU2V0KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgUnVsZVNldCk7IH0KKworICAgIHR5cGVkZWYg
SGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiA+IEF0
b21SdWxlTWFwOworCisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0SW50ZXJu
YWwqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciogPSAwLCBjb25z
dCBDb250YWluZXJOb2RlKiA9IDApOworCisgICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxl
KiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1Nl
bGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOworICAgIHZvaWQgYWRkUnVsZShT
dHlsZVJ1bGUqLCBDU1NTZWxlY3RvciosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwg
Ym9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNl
KTsKKyAgICB2b2lkIGFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UqKTsKKyAgICB2b2lkIGFkZFRv
UnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURh
dGEmKTsKKyAgICB2b2lkIGFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiwgYm9vbCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKKyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgdm9p
ZCBkaXNhYmxlQXV0b1Nocmlua1RvRml0KCkgeyBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgPSBm
YWxzZTsgfQorCisgICAgY29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIGZlYXR1cmVzKCkg
Y29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorCisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiogaWRSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1faWRSdWxl
cy5nZXQoa2V5KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGNsYXNzUnVsZXMoQXRv
bWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX2NsYXNzUnVsZXMuZ2V0KGtleSk7
IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiB0YWdSdWxlcyhBdG9taWNTdHJpbmdJbXBs
KiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KKyAgICBjb25zdCBW
ZWN0b3I8UnVsZURhdGE+KiBzaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoQXRvbWljU3RyaW5nSW1w
bCoga2V5KSBjb25zdCB7IHJldHVybiBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcy5nZXQoa2V5
KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGxpbmtQc2V1ZG9DbGFzc1J1bGVzKCkg
Y29uc3QgeyByZXR1cm4gJm1fbGlua1BzZXVkb0NsYXNzUnVsZXM7IH0KKyAgICBjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiBmb2N1c1BzZXVkb0NsYXNzUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV9m
b2N1c1BzZXVkb0NsYXNzUnVsZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiB1bml2
ZXJzYWxSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX3VuaXZlcnNhbFJ1bGVzOyB9CisgICAgY29u
c3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgcGFnZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9w
YWdlUnVsZXM7IH0KKworcHVibGljOgorICAgIFJ1bGVTZXQoKTsKKworICAgIEF0b21SdWxlTWFw
IG1faWRSdWxlczsKKyAgICBBdG9tUnVsZU1hcCBtX2NsYXNzUnVsZXM7CisgICAgQXRvbVJ1bGVN
YXAgbV90YWdSdWxlczsKKyAgICBBdG9tUnVsZU1hcCBtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
czsKKyAgICBWZWN0b3I8UnVsZURhdGE+IG1fbGlua1BzZXVkb0NsYXNzUnVsZXM7CisgICAgVmVj
dG9yPFJ1bGVEYXRhPiBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlczsKKyAgICBWZWN0b3I8UnVsZURh
dGE+IG1fdW5pdmVyc2FsUnVsZXM7CisgICAgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiBtX3BhZ2VS
dWxlczsKKyAgICB1bnNpZ25lZCBtX3J1bGVDb3VudDsKKyAgICBib29sIG1fYXV0b1Nocmlua1Rv
Rml0RW5hYmxlZDsKKyAgICBTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyBtX2ZlYXR1cmVzOworCisg
ICAgc3RydWN0IFJ1bGVTZXRTZWxlY3RvclBhaXIgeworICAgICAgICBSdWxlU2V0U2VsZWN0b3JQ
YWlyKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgUGFzc093blB0cjxSdWxlU2V0PiBydWxlU2V0KSA6
IHNlbGVjdG9yKHNlbGVjdG9yKSwgcnVsZVNldChydWxlU2V0KSB7IH0KKyAgICAgICAgUnVsZVNl
dFNlbGVjdG9yUGFpcihjb25zdCBSdWxlU2V0U2VsZWN0b3JQYWlyJiBycykgOiBzZWxlY3Rvcihy
cy5zZWxlY3RvciksIHJ1bGVTZXQoY29uc3RfY2FzdDxSdWxlU2V0U2VsZWN0b3JQYWlyKj4oJnJz
KS0+cnVsZVNldC5yZWxlYXNlKCkpIHsgfQorICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7
CisgICAgICAgIE93blB0cjxSdWxlU2V0PiBydWxlU2V0OworICAgIH07CisKKyAgICBWZWN0b3I8
UnVsZVNldFNlbGVjdG9yUGFpcj4gbV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0czsKK307CisK
K3N0YXRpYyBSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CitzdGF0aWMgUnVsZVNldCogZGVmYXVsdFF1
aXJrc1N0eWxlOworc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOworc3RhdGljIFJ1
bGVTZXQqIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7CitzdGF0aWMgU3R5bGVTaGVldEludGVybmFs
KiBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIGRl
ZmF1bHRTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogcXVpcmtzU3R5bGVT
aGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHN2Z1N0eWxlU2hlZXQ7CitzdGF0aWMg
U3R5bGVTaGVldEludGVybmFsKiBtYXRoTUxTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRJ
bnRlcm5hbCogbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVldEludGVy
bmFsKiBmdWxsc2NyZWVuU3R5bGVTaGVldDsKKworUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6
OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CisKK3N0YXRpYyB2b2lkIGxvYWRGdWxsRGVmYXVsdFN0
eWxlKCk7CitzdGF0aWMgdm9pZCBsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKCk7Cit0ZW1wbGF0ZSA8
Y2xhc3MgTGlzdFR5cGU+CitzdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFw
PFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4mLCBMaXN0VHlwZSopOworCisvLyBG
SVhNRTogSXQgd291bGQgYmUgbmljZSB0byB1c2Ugc29tZSBtZWNoYW5pc20gdGhhdCBndWFyYW50
ZWVzIHRoaXMgaXMgaW4gc3luYyB3aXRoIHRoZSByZWFsIFVBIHN0eWxlc2hlZXQuCitzdGF0aWMg
Y29uc3QgY2hhciogc2ltcGxlVXNlckFnZW50U3R5bGVTaGVldCA9ICJodG1sLGJvZHksZGl2e2Rp
c3BsYXk6YmxvY2t9aGVhZHtkaXNwbGF5Om5vbmV9Ym9keXttYXJnaW46OHB4fWRpdjpmb2N1cyxz
cGFuOmZvY3Vze291dGxpbmU6YXV0byA1cHggLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yfWE6LXdl
YmtpdC1hbnktbGlua3tjb2xvcjotd2Via2l0LWxpbms7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGlu
ZX1hOi13ZWJraXQtYW55LWxpbms6YWN0aXZle2NvbG9yOi13ZWJraXQtYWN0aXZlbGlua30iOwor
CitzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShFbGVt
ZW50KiBlKQoreworICAgIHJldHVybiBlLT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGUtPmhhc1Rh
Z05hbWUoaGVhZFRhZykgfHwgZS0+aGFzVGFnTmFtZShib2R5VGFnKSB8fCBlLT5oYXNUYWdOYW1l
KGRpdlRhZykgfHwgZS0+aGFzVGFnTmFtZShzcGFuVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGJyVGFn
KSB8fCBlLT5oYXNUYWdOYW1lKGFUYWcpOworfQorCitzdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2
YWx1YXRvciYgc2NyZWVuRXZhbCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yLCBzdGF0aWNTY3JlZW5FdmFsLCAoInNjcmVlbiIpKTsKKyAgICBy
ZXR1cm4gc3RhdGljU2NyZWVuRXZhbDsKK30KKworc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImIHByaW50RXZhbCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLCBzdGF0aWNQcmludEV2YWwsICgicHJpbnQiKSk7CisgICAgcmV0dXJu
IHN0YXRpY1ByaW50RXZhbDsKK30KKworc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIGxlZnRUb1Jp
Z2h0RGVjbGFyYXRpb24oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPFN0eWxl
UHJvcGVydHlTZXQ+LCBsZWZ0VG9SaWdodERlY2wsIChTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUo
KSkpOworICAgIGlmIChsZWZ0VG9SaWdodERlY2wtPmlzRW1wdHkoKSkKKyAgICAgICAgbGVmdFRv
UmlnaHREZWNsLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVMdHIp
OworICAgIHJldHVybiBsZWZ0VG9SaWdodERlY2wuZ2V0KCk7Cit9CisKK3N0YXRpYyBTdHlsZVBy
b3BlcnR5U2V0KiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiwgcmlnaHRUb0xlZnREZWNsLCAoU3R5bGVQ
cm9wZXJ0eVNldDo6Y3JlYXRlKCkpKTsKKyAgICBpZiAocmlnaHRUb0xlZnREZWNsLT5pc0VtcHR5
KCkpCisgICAgICAgIHJpZ2h0VG9MZWZ0RGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJl
Y3Rpb24sIENTU1ZhbHVlUnRsKTsKKyAgICByZXR1cm4gcmlnaHRUb0xlZnREZWNsLmdldCgpOwor
fQorCitTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9v
bCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCisgICAgOiBtX2hhc1VBQXBwZWFyYW5jZShmYWxz
ZSkKKyAgICAsIG1fYmFja2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikKKyAgICAsIG1f
bWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCisgICAgLCBt
X2NoZWNrZXIoZG9jdW1lbnQsICFkb2N1bWVudC0+aW5RdWlya3NNb2RlKCkpCisgICAgLCBtX3Bh
cmVudFN0eWxlKDApCisgICAgLCBtX3Jvb3RFbGVtZW50U3R5bGUoMCkKKyAgICAsIG1fZWxlbWVu
dCgwKQorICAgICwgbV9zdHlsZWRFbGVtZW50KDApCisgICAgLCBtX3JlZ2lvbkZvclN0eWxpbmco
MCkKKyAgICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQorICAgICwgbV9wYXJl
bnROb2RlKDApCisgICAgLCBtX2xpbmVIZWlnaHRWYWx1ZSgwKQorICAgICwgbV9mb250RGlydHko
ZmFsc2UpCisgICAgLCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMpCisgICAgLCBtX3NhbWVPcmlnaW5Pbmx5KGZhbHNlKQorICAgICwgbV9mb250U2Vs
ZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQorICAgICwgbV9hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSkKKyAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZShmYWxzZSkKKyAgICAsIG1fc3R5bGVCdWlsZGVyKFN0eWxlQnVpbGRlcjo6c2hh
cmVkU3R5bGVCdWlsZGVyKCkpCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICwgbV9oYXNQ
ZW5kaW5nU2hhZGVycyhmYWxzZSkKKyNlbmRpZgorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisg
ICAgLCBtX3Njb3BlU3RhY2tQYXJlbnQoMCkKKyNlbmRpZgoreworICAgIEVsZW1lbnQqIHJvb3Qg
PSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisKKyAgICBpZiAoIWRlZmF1bHRTdHlsZSkg
eworICAgICAgICBpZiAoIXJvb3QgfHwgZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShy
b290KSkKKyAgICAgICAgICAgIGxvYWRTaW1wbGVEZWZhdWx0U3R5bGUoKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gY29uc3RydWN0IGRvY3VtZW50IHJvb3QgZWxlbWVudCBkZWZhdWx0IHN0eWxl
LiB0aGlzIGlzIG5lZWRlZAorICAgIC8vIHRvIGV2YWx1YXRlIG1lZGlhIHF1ZXJpZXMgdGhhdCBj
b250YWluIHJlbGF0aXZlIGNvbnN0cmFpbnRzLCBsaWtlICJzY3JlZW4gYW5kIChtYXgtd2lkdGg6
IDEwZW0pIgorICAgIC8vIFRoaXMgaXMgaGVyZSBpbnN0ZWFkIG9mIGNvbnN0cnVjdG9yLCBiZWNh
dXNlIHdoZW4gY29uc3RydWN0b3IgaXMgcnVuLAorICAgIC8vIGRvY3VtZW50IGRvZXNuJ3QgaGF2
ZSBkb2N1bWVudEVsZW1lbnQKKyAgICAvLyBOT1RFOiB0aGlzIGFzc3VtZXMgdGhhdCBlbGVtZW50
IHRoYXQgZ2V0cyBwYXNzZWQgdG8gc3R5bGVGb3JFbGVtZW50IC1jYWxsCisgICAgLy8gaXMgYWx3
YXlzIGZyb20gdGhlIGRvY3VtZW50IHRoYXQgb3ducyB0aGUgc3R5bGUgc2VsZWN0b3IKKyAgICBG
cmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudC0+dmlldygpOworICAgIGlmICh2aWV3KQorICAgICAg
ICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlh
VHlwZSgpKSk7CisgICAgZWxzZQorICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRp
YVF1ZXJ5RXZhbHVhdG9yKCJhbGwiKSk7CisKKyAgICBpZiAocm9vdCkKKyAgICAgICAgbV9yb290
RGVmYXVsdFN0eWxlID0gc3R5bGVGb3JFbGVtZW50KHJvb3QsIDAsIERpc2FsbG93U3R5bGVTaGFy
aW5nLCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyk7CisKKyAgICBpZiAobV9yb290RGVmYXVsdFN0
eWxlICYmIHZpZXcpCisgICAgICAgIG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlF
dmFsdWF0b3Iodmlldy0+bWVkaWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRT
dHlsZS5nZXQoKSkpOworCisgICAgbV9hdXRob3JTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwor
ICAgIC8vIEFkZGluZyBydWxlcyBmcm9tIG11bHRpcGxlIHNoZWV0cywgc2hyaW5rIGF0IHRoZSBl
bmQuCisgICAgLy8gQWRkaW5nIGdsb2JhbCBydWxlcyBmcm9tIG11bHRpcGxlIHNoZWV0cywgc2hy
aW5rIGF0IHRoZSBlbmQuCisgICAgLy8gTm90ZSB0aGF0IHRoZXJlIHVzdWFsbHkgaXMgb25seSAx
IHNoZWV0IGZvciBzY29wZWQgcnVsZXMsIHNvIGF1dG8tc2hyaW5rLXRvLWZpdCBpcyBmaW5lLgor
ICAgIG1fYXV0aG9yU3R5bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIHN1Y2tzISBUaGUgdXNlciBzaGVldCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQor
ICAgIE93blB0cjxSdWxlU2V0PiB0ZW1wVXNlclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Cisg
ICAgaWYgKFN0eWxlU2hlZXRJbnRlcm5hbCogcGFnZVVzZXJTaGVldCA9IGRvY3VtZW50LT5wYWdl
VXNlclNoZWV0KCkpCisgICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBh
Z2VVc2VyU2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgYWRkQXV0aG9yUnVsZXNBbmRDb2xs
ZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhkb2N1bWVudC0+cGFnZUdyb3VwVXNlclNoZWV0cygpLCAq
dGVtcFVzZXJTdHlsZSk7CisgICAgYWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJv
bVNoZWV0cyhkb2N1bWVudC0+ZG9jdW1lbnRVc2VyU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsK
KyAgICBpZiAodGVtcFVzZXJTdHlsZS0+bV9ydWxlQ291bnQgPiAwIHx8IHRlbXBVc2VyU3R5bGUt
Pm1fcGFnZVJ1bGVzLnNpemUoKSA+IDApCisgICAgICAgIG1fdXNlclN0eWxlID0gdGVtcFVzZXJT
dHlsZS5yZWxlYXNlKCk7CisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChkb2N1bWVu
dC0+c3ZnRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRm9udEZhY2VF
bGVtZW50Kj4mIHN2Z0ZvbnRGYWNlRWxlbWVudHMgPSBkb2N1bWVudC0+c3ZnRXh0ZW5zaW9ucygp
LT5zdmdGb250RmFjZUVsZW1lbnRzKCk7CisgICAgICAgIEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVt
ZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN2Z0ZvbnRGYWNlRWxlbWVudHMuZW5kKCk7Cisg
ICAgICAgIGZvciAoSGFzaFNldDxTVkdGb250RmFjZUVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBzdmdGb250RmFjZUVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgICAgIGZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoKCppdCktPmZvbnRGYWNlUnVs
ZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIGFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKDAsIGRv
Y3VtZW50LT5zdHlsZVNoZWV0cygpLT52ZWN0b3IoKSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6YWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiogdXNlclNoZWV0cywgUnVsZVNldCYgdXNl
clN0eWxlKQoreworICAgIGlmICghdXNlclNoZWV0cykKKyAgICAgICAgcmV0dXJuOworCisgICAg
dW5zaWduZWQgbGVuZ3RoID0gdXNlclNoZWV0cy0+c2l6ZSgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBjb25zdCBSZWZQdHI8U3R5bGVTaGVl
dEludGVybmFsPiYgc2hlZXQgPSB1c2VyU2hlZXRzLT5hdChpKTsKKyAgICAgICAgaWYgKHNoZWV0
LT5pc1VzZXJTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICB1c2VyU3R5bGUuYWRkUnVsZXNGcm9t
U2hlZXQoc2hlZXQuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LmdldCgpLCAqbV9t
ZWRpdW0sIHRoaXMpOworICAgIH0KK30KKworc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gbWFr
ZVJ1bGVTZXQoY29uc3QgVmVjdG9yPFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlPiYgcnVsZXMp
Cit7CisgICAgc2l6ZV90IHNpemUgPSBydWxlcy5zaXplKCk7CisgICAgaWYgKCFzaXplKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldCA9IFJ1bGVT
ZXQ6OmNyZWF0ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAg
ICAgICBydWxlU2V0LT5hZGRSdWxlKHJ1bGVzW2ldLnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9yLCBy
dWxlc1tpXS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBmYWxzZSk7CisgICAgcmV0dXJuIHJ1
bGVTZXQucmVsZWFzZSgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJl
cygpCit7CisgICAgbV9mZWF0dXJlcy5jbGVhcigpOworICAgIC8vIENvbGxlY3QgYWxsIGlkcyBh
bmQgcnVsZXMgdXNpbmcgc2libGluZyBzZWxlY3RvcnMgKDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxh
cikKKyAgICAvLyBpbiB0aGUgY3VycmVudCBzZXQgb2Ygc3R5bGVzaGVldHMuIFN0eWxlIHNoYXJp
bmcgY29kZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVqZWN0CisgICAgLy8gc2hhcmluZyBj
YW5kaWRhdGVzLgorICAgIG1fZmVhdHVyZXMuYWRkKGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKSk7
CisgICAgbV9mZWF0dXJlcy5hZGQobV9hdXRob3JTdHlsZS0+ZmVhdHVyZXMoKSk7CisjaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKKyAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9zY29wZWRBdXRob3JTdHls
ZXMuZW5kKCk7ICsraXQpCisgICAgICAgIG1fZmVhdHVyZXMuYWRkKGl0LT5zZWNvbmQtPmZlYXR1
cmVzKCkpOworI2VuZGlmCisgICAgaWYgKG1fdXNlclN0eWxlKQorICAgICAgICBtX2ZlYXR1cmVz
LmFkZChtX3VzZXJTdHlsZS0+ZmVhdHVyZXMoKSk7CisKKyAgICBtX3NpYmxpbmdSdWxlU2V0ID0g
bWFrZVJ1bGVTZXQobV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMpOworICAgIG1fdW5jb21tb25BdHRy
aWJ1dGVSdWxlU2V0ID0gbWFrZVJ1bGVTZXQobV9mZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1
bGVzKTsKK30KKworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCitjb25zdCBDb250YWluZXJOb2Rl
KiBTdHlsZVJlc29sdmVyOjpkZXRlcm1pbmVTY29wZShjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwq
IHNoZWV0KQoreworICAgIEFTU0VSVChzaGVldCk7CisKKyAgICBpZiAoIVJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnN0eWxlU2NvcGVkRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IE5vZGUqIG93bmVyTm9kZSA9IHNoZWV0LT5maW5kU3R5bGVTaGVldE93bmVyTm9kZSgpOworICAg
IGlmICghb3duZXJOb2RlIHx8ICFvd25lck5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAhb3duZXJO
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEhUTUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnQqPihvd25lck5vZGUpOworICAgIGlmICghc3R5bGVFbGVtZW50LT5zY29wZWQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBzdHls
ZUVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gKHBhcmVudC0+aXNFbGVtZW50Tm9kZSgpIHx8IHBhcmVudC0+aXNT
aGFkb3dSb290KCkpID8gcGFyZW50IDogMDsKK30KKworaW5saW5lIFJ1bGVTZXQqIFN0eWxlUmVz
b2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3QK
K3sKKyAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2Nv
cGVkQXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOworICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1
dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKK30KKyNlbmRpZgorCit2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0
TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0eWxlc2hlZXRzKQorewor
ICAgIC8vIFRoaXMgaGFuZGxlcyBzaGVldHMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3R5bGVz
aGVldCBsaXN0IG9ubHkuIEluIG90aGVyIGNhc2VzIHRoZSBzdHlsZSByZXNvbHZlcgorICAgIC8v
IG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhhbmRsZSBpbnNlcnRpb25zIHRvbyB0aGUg
cnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZC4KKyAgICB1bnNpZ25l
ZCBzaXplID0gc3R5bGVzaGVldHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0
TmV3OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmICghc3R5bGVzaGVldHNbaV0tPmlzQ1NT
U3R5bGVTaGVldCgpIHx8IHN0eWxlc2hlZXRzW2ldLT5kaXNhYmxlZCgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIENTU1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0gc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVTaGVldCo+KHN0eWxlc2hlZXRzW2ldLmdldCgpKTsKKyAgICAgICAgU3R5bGVTaGVl
dEludGVybmFsKiBzaGVldCA9IGNzc1NoZWV0LT5pbnRlcm5hbCgpOworI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCisgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gZGV0ZXJtaW5l
U2NvcGUoc2hlZXQpOworICAgICAgICBpZiAoc2NvcGUpIHsKKyAgICAgICAgICAgIFNjb3BlZFJ1
bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5hZGQo
c2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkUnVsZXNG
cm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxl
c0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgaWYgKCFtX3N0eWxl
UnVsZVRvQ1NTT01XcmFwcGVyTWFwLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbGxlY3RDU1NP
TVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIGNzc1NoZWV0KTsKKyAgICB9
CisgICAgbV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsKKyAgICBjb2xsZWN0RmVhdHVyZXMo
KTsKKyAgICAKKyAgICBpZiAoZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSAmJiBkb2N1bWVudCgpLT5y
ZW5kZXJlcigpLT5zdHlsZSgpKQorICAgICAgICBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHls
ZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKK30KKworI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldHVwU2NvcGVTdGFjayhjb25zdCBDb250
YWluZXJOb2RlKiBwYXJlbnQpCit7CisgICAgLy8gVGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBz
aG91bGRuJ3QgYmUgdXNlZCBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgor
ICAgIEFTU0VSVCghbV9zY29wZWRBdXRob3JTdHlsZXMuaXNFbXB0eSgpKTsKKworICAgIG1fc2Nv
cGVTdGFjay5zaHJpbmsoMCk7CisgICAgZm9yICg7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5w
YXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRG
b3JTY29wZShwYXJlbnQpOworICAgICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAgIG1fc2Nv
cGVTdGFjay5hcHBlbmQoU2NvcGVTdGFja0ZyYW1lKHBhcmVudCwgcnVsZVNldCkpOworICAgIH0K
KyAgICBtX3Njb3BlU3RhY2sucmV2ZXJzZSgpOworICAgIG1fc2NvcGVTdGFja1BhcmVudCA9IHBh
cmVudDsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KQoreworICAgIC8v
IFNob3J0Y3V0OiBEb24ndCBib3RoZXIgd2l0aCB0aGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGlm
IDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCisgICAgaWYgKG1fc2NvcGVkQXV0
aG9yU3R5bGVzLmlzRW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoIW1fc2NvcGVTdGFja1BhcmVu
dCk7CisgICAgICAgIEFTU0VSVChtX3Njb3BlU3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAvLyBJbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNv
bHZlIHdlIG1heSBnZXQgaW52b2tlZCBmb3IgcmFuZG9tIGVsZW1lbnRzLgorICAgIC8vIFJlY3Jl
YXRlIHRoZSB3aG9sZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaW4gc3VjaCBjYXNlcy4KKyAgICBp
ZiAoIXNjb3BlU3RhY2tJc0NvbnNpc3RlbnQoc2NvcGVQYXJlbnQpKSB7CisgICAgICAgIHNldHVw
U2NvcGVTdGFjayhzY29wZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gT3RoZXJ3
aXNlIGp1c3QgcHVzaCB0aGUgcGFyZW50IG9udG8gdGhlIHN0YWNrLgorICAgIFJ1bGVTZXQqIHJ1
bGVTZXQgPSBydWxlU2V0Rm9yU2NvcGUoc2NvcGUpOworICAgIGlmIChydWxlU2V0KQorICAgICAg
ICBtX3Njb3BlU3RhY2suYXBwZW5kKFNjb3BlU3RhY2tGcmFtZShzY29wZSwgcnVsZVNldCkpOwor
ICAgIG1fc2NvcGVTdGFja1BhcmVudCA9IHNjb3BlOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6
OnBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoreworICAgIC8vIE9ubHkgYm90
aGVyIHRvIHVwZGF0ZSB0aGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIGlmIGl0IGlzIGNvbnNpc3Rl
bnQuCisgICAgaWYgKHNjb3BlU3RhY2tJc0NvbnNpc3RlbnQoc2NvcGUpKSB7CisgICAgICAgIG1f
c2NvcGVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fc2NvcGVTdGFja1BhcmVudCA9IHNj
b3BlLT5wYXJlbnRPckhvc3ROb2RlKCk7CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6cHVzaFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQoreworICAgIGNvbnN0
IENvbnRhaW5lck5vZGUqIHBhcmVudHNQYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9ySG9zdEVsZW1l
bnQoKTsKKworICAgIC8vIFdlIGFyZSBub3QgYWx3YXlzIGludm9rZWQgY29uc2lzdGVudGx5LiBG
b3IgZXhhbXBsZSwgc2NyaXB0IGV4ZWN1dGlvbiBjYW4gY2F1c2UgdXMgdG8gZW50ZXIKKyAgICAv
LyBzdHlsZSByZWNhbGMgaW4gdGhlIG1pZGRsZSBvZiB0cmVlIGJ1aWxkaW5nLiBXZSBtYXkgYWxz
byBiZSBpbnZva2VkIGZyb20gc29tZXdoZXJlIHdpdGhpbiB0aGUgdHJlZS4KKyAgICAvLyBSZXNl
dCB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLCBvciBpZiB3ZSBzZWUgYSBuZXcgcm9vdCBlbGVtZW50
LgorICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIG5ldyBwYXJlbnQuCisgICAgaWYgKCFw
YXJlbnRzUGFyZW50IHx8IG1fY2hlY2tlci5wYXJlbnRTdGFja0lzRW1wdHkoKSkKKyAgICAgICAg
bV9jaGVja2VyLnNldHVwUGFyZW50U3RhY2socGFyZW50KTsKKyAgICBlbHNlCisgICAgICAgIG1f
Y2hlY2tlci5wdXNoUGFyZW50KHBhcmVudCk7CisKKyAgICAvLyBOb3RlOiBXZSBtdXN0bid0IHNr
aXAgU2hhZG93Um9vdCBub2RlcyBmb3IgdGhlIHNjb3BlIHN0YWNrLgorICAgIHB1c2hTY29wZShw
YXJlbnQsIHBhcmVudC0+cGFyZW50T3JIb3N0Tm9kZSgpKTsKK30KKwordm9pZCBTdHlsZVJlc29s
dmVyOjpwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKK3sKKyAgICAvLyBOb3RlIHRo
YXQgd2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdh
Y2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlLgorICAgIC8vIFBhdXNlIG1haW50YWluaW5n
IHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCisgICAgaWYgKG1fY2hlY2tlci5wYXJlbnRTdGFja0lz
Q29uc2lzdGVudChwYXJlbnQpKQorICAgICAgICBtX2NoZWNrZXIucG9wUGFyZW50KCk7CisgICAg
cG9wU2NvcGUocGFyZW50KTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50U2hh
ZG93Um9vdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQoreworICAgIEFTU0VSVChzaGFk
b3dSb290LT5ob3N0KCkpOworICAgIHB1c2hTY29wZShzaGFkb3dSb290LCBzaGFkb3dSb290LT5o
b3N0KCkpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudFNoYWRvd1Jvb3QoY29u
c3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3sKKyAgICBBU1NFUlQoc2hhZG93Um9vdC0+aG9z
dCgpKTsKKyAgICBwb3BTY29wZShzaGFkb3dSb290KTsKK30KKworLy8gVGhpcyBpcyBhIHNpbXBs
aWZpZWQgc3R5bGUgc2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFkZEtleWZyYW1lU3R5bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVLZXlmcmFt
ZXM+IHJ1bGUpCit7CisgICAgQXRvbWljU3RyaW5nIHMocnVsZS0+bmFtZSgpKTsKKyAgICBtX2tl
eWZyYW1lc1J1bGVNYXAuc2V0KHMuaW1wbCgpLCBydWxlKTsKK30KKworU3R5bGVSZXNvbHZlcjo6
flN0eWxlUmVzb2x2ZXIoKQoreworICAgIG1fZm9udFNlbGVjdG9yLT5jbGVhckRvY3VtZW50KCk7
Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKCkK
K3sKKyAgICAvLyBMb29rIGZvciBjYWNoZSBlbnRyaWVzIGNvbnRhaW5pbmcgYSBzdHlsZSBkZWNs
YXJhdGlvbiB3aXRoIGEgc2luZ2xlIHJlZiBhbmQgcmVtb3ZlIHRoZW0uCisgICAgLy8gVGhpcyBt
YXkgaGFwcGVuIHdoZW4gYW4gZWxlbWVudCBhdHRyaWJ1dGUgbXV0YXRpb24gY2F1c2VzIGl0IHRv
IHN3YXAgb3V0IGl0cyBBdHRyaWJ1dGU6OmRlY2woKQorICAgIC8vIGZvciBhbm90aGVyIENTU01h
cHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLCBwb3RlbnRpYWxseSBsZWF2aW5nIHRoaXMgY2FjaGUg
d2l0aCB0aGUgbGFzdCByZWYuCisgICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gdG9SZW1vdmU7Cisg
ICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUuYmVnaW4oKTsKKyAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBl
bmQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJv
cGVydGllcyA9IGl0LT5zZWNvbmQubWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChtYXRjaGVkUHJvcGVydGllc1tpXS5wcm9wZXJ0aWVzLT5oYXNPbmVSZWYoKSkgewor
ICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fbWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZS5yZW1vdmUodG9SZW1vdmVbaV0pOworfQorCitTdHlsZVJlc29sdmVyOjpG
ZWF0dXJlczo6RmVhdHVyZXMoKQorICAgIDogdXNlc0ZpcnN0TGluZVJ1bGVzKGZhbHNlKQorICAg
ICwgdXNlc0JlZm9yZUFmdGVyUnVsZXMoZmFsc2UpCisgICAgLCB1c2VzTGlua1J1bGVzKGZhbHNl
KQoreworfQorCitTdHlsZVJlc29sdmVyOjpGZWF0dXJlczo6fkZlYXR1cmVzKCkKK3sKK30KKyAg
ICAKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6OmFkZChjb25zdCBTdHlsZVJlc29sdmVy
OjpGZWF0dXJlcyYgb3RoZXIpCit7CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0
ZXJhdG9yIGVuZCA9IG90aGVyLmlkc0luUnVsZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXQgPSBvdGhlci5pZHNJblJ1bGVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaWRzSW5SdWxlcy5hZGQoKml0KTsKKyAgICBlbmQg
PSBvdGhlci5hdHRyc0luUnVsZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPjo6aXRlcmF0b3IgaXQgPSBvdGhlci5hdHRyc0luUnVsZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICBhdHRyc0luUnVsZXMuYWRkKCppdCk7CisgICAgc2libGluZ1J1
bGVzLmFwcGVuZChvdGhlci5zaWJsaW5nUnVsZXMpOworICAgIHVuY29tbW9uQXR0cmlidXRlUnVs
ZXMuYXBwZW5kKG90aGVyLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOworICAgIHVzZXNGaXJzdExp
bmVSdWxlcyA9IHVzZXNGaXJzdExpbmVSdWxlcyB8fCBvdGhlci51c2VzRmlyc3RMaW5lUnVsZXM7
CisgICAgdXNlc0JlZm9yZUFmdGVyUnVsZXMgPSB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyB8fCBvdGhl
ci51c2VzQmVmb3JlQWZ0ZXJSdWxlczsKKyAgICB1c2VzTGlua1J1bGVzID0gdXNlc0xpbmtSdWxl
cyB8fCBvdGhlci51c2VzTGlua1J1bGVzOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1
cmVzOjpjbGVhcigpCit7CisgICAgaWRzSW5SdWxlcy5jbGVhcigpOworICAgIGF0dHJzSW5SdWxl
cy5jbGVhcigpOworICAgIHNpYmxpbmdSdWxlcy5jbGVhcigpOworICAgIHVuY29tbW9uQXR0cmli
dXRlUnVsZXMuY2xlYXIoKTsKKyAgICB1c2VzRmlyc3RMaW5lUnVsZXMgPSBmYWxzZTsKKyAgICB1
c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IGZhbHNlOworICAgIHVzZXNMaW5rUnVsZXMgPSBmYWxzZTsK
K30KKworc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyc2VVQVNoZWV0KGNvbnN0IFN0cmlu
ZyYgc3RyKQoreworICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQgPSBTdHlsZVNoZWV0SW50
ZXJuYWw6OmNyZWF0ZSgpLmxlYWtSZWYoKTsgLy8gbGVhayB0aGUgc2hlZXQgb24gcHVycG9zZQor
ICAgIHNoZWV0LT5wYXJzZVN0cmluZyhzdHIpOworICAgIHJldHVybiBzaGVldDsKK30KKworc3Rh
dGljIFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIHNpemUpCit7CisgICAgcmV0dXJuIHBhcnNlVUFTaGVldChTdHJpbmcoY2hh
cmFjdGVycywgc2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCBsb2FkRnVsbERlZmF1bHRTdHlsZSgp
Cit7CisgICAgaWYgKHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KSB7CisgICAgICAgIEFTU0VSVChk
ZWZhdWx0U3R5bGUpOworICAgICAgICBBU1NFUlQoZGVmYXVsdFByaW50U3R5bGUgPT0gZGVmYXVs
dFN0eWxlKTsKKyAgICAgICAgZGVsZXRlIGRlZmF1bHRTdHlsZTsKKyAgICAgICAgc2ltcGxlRGVm
YXVsdFN0eWxlU2hlZXQtPmRlcmVmKCk7CisgICAgICAgIGRlZmF1bHRTdHlsZSA9IFJ1bGVTZXQ6
OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKyAgICAgICAgZGVmYXVsdFByaW50U3R5bGUgPSBSdWxlU2V0
OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisgICAgICAgIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0ID0g
MDsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIWRlZmF1bHRTdHlsZSk7CisgICAgICAg
IGRlZmF1bHRTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKyAgICAgICAgZGVm
YXVsdFByaW50U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKS5sZWFrUHRyKCk7CisgICAgICAgIGRl
ZmF1bHRRdWlya3NTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKyAgICB9CisK
KyAgICAvLyBTdHJpY3QtbW9kZSBydWxlcy4KKyAgICBTdHJpbmcgZGVmYXVsdFJ1bGVzID0gU3Ry
aW5nKGh0bWxVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YoaHRtbFVzZXJBZ2VudFN0eWxlU2hl
ZXQpKSArIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+ZXh0cmFEZWZhdWx0U3R5bGVTaGVl
dCgpOworICAgIGRlZmF1bHRTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KGRlZmF1bHRSdWxlcyk7
CisgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChkZWZhdWx0U3R5bGVTaGVldCwg
c2NyZWVuRXZhbCgpKTsKKyAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQo
ZGVmYXVsdFN0eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKKworICAgIC8vIFF1aXJrcy1tb2RlIHJ1
bGVzLgorICAgIFN0cmluZyBxdWlya3NSdWxlcyA9IFN0cmluZyhxdWlya3NVc2VyQWdlbnRTdHls
ZVNoZWV0LCBzaXplb2YocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6
OmRlZmF1bHRUaGVtZSgpLT5leHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKKyAgICBxdWlya3NTdHls
ZVNoZWV0ID0gcGFyc2VVQVNoZWV0KHF1aXJrc1J1bGVzKTsKKyAgICBkZWZhdWx0UXVpcmtzU3R5
bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHF1aXJrc1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIGxvYWRTaW1wbGVEZWZhdWx0U3R5bGUoKQoreworICAgIEFTU0VSVCgh
ZGVmYXVsdFN0eWxlKTsKKyAgICBBU1NFUlQoIXNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KTsKKwor
ICAgIGRlZmF1bHRTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKyAgICAvLyBU
aGVyZSBhcmUgbm8gbWVkaWEtc3BlY2lmaWMgcnVsZXMgaW4gdGhlIHNpbXBsZSBkZWZhdWx0IHN0
eWxlLgorICAgIGRlZmF1bHRQcmludFN0eWxlID0gZGVmYXVsdFN0eWxlOworICAgIGRlZmF1bHRR
dWlya3NTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKKworICAgIHNpbXBsZURl
ZmF1bHRTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KHNpbXBsZVVzZXJBZ2VudFN0eWxlU2hlZXQs
IHN0cmxlbihzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CisgICAgZGVmYXVsdFN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsK
KworICAgIC8vIE5vIG5lZWQgdG8gaW5pdGlhbGl6ZSBxdWlya3Mgc2hlZXQgeWV0IGFzIHRoZXJl
IGFyZSBubyBxdWlyayBydWxlcyBmb3IgZWxlbWVudHMgYWxsb3dlZCBpbiBzaW1wbGUgZGVmYXVs
dCBzdHlsZS4KK30KKworc3RhdGljIHZvaWQgbG9hZFZpZXdTb3VyY2VTdHlsZSgpCit7CisgICAg
QVNTRVJUKCFkZWZhdWx0Vmlld1NvdXJjZVN0eWxlKTsKKyAgICBkZWZhdWx0Vmlld1NvdXJjZVN0
eWxlID0gUnVsZVNldDo6Y3JlYXRlKCkubGVha1B0cigpOworICAgIGRlZmF1bHRWaWV3U291cmNl
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhcnNlVUFTaGVldChzb3VyY2VVc2VyQWdlbnRTdHls
ZVNoZWV0LCBzaXplb2Yoc291cmNlVXNlckFnZW50U3R5bGVTaGVldCkpLCBzY3JlZW5FdmFsKCkp
OworfQorCitzdGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaWYgKHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0ICYmICFl
bGVtZW50Q2FuVXNlU2ltcGxlRGVmYXVsdFN0eWxlKGVsZW1lbnQpKQorICAgICAgICBsb2FkRnVs
bERlZmF1bHRTdHlsZSgpOworCisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAoZWxlbWVudC0+aXNT
VkdFbGVtZW50KCkgJiYgIXN2Z1N0eWxlU2hlZXQpIHsKKyAgICAgICAgLy8gU1ZHIHJ1bGVzLgor
ICAgICAgICBzdmdTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KHN2Z1VzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZihzdmdVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CisgICAgICAgIGRlZmF1bHRTdHls
ZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3ZnU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKKyAgICAg
ICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN2Z1N0eWxlU2hlZXQsIHBy
aW50RXZhbCgpKTsKKyAgICB9CisjZW5kaWYKKworI2lmIEVOQUJMRShNQVRITUwpCisgICAgaWYg
KGVsZW1lbnQtPmlzTWF0aE1MRWxlbWVudCgpICYmICFtYXRoTUxTdHlsZVNoZWV0KSB7CisgICAg
ICAgIC8vIE1hdGhNTCBydWxlcy4KKyAgICAgICAgbWF0aE1MU3R5bGVTaGVldCA9IHBhcnNlVUFT
aGVldChtYXRobWxVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWF0aG1sVXNlckFnZW50U3R5
bGVTaGVldCkpOworICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1hdGhN
TFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChtYXRoTUxTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CisgICAgfQor
I2VuZGlmCisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgaWYgKCFtZWRpYUNvbnRyb2xzU3R5bGVT
aGVldCAmJiAoZWxlbWVudC0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShhdWRpb1RhZykpKSB7CisgICAgICAgIFN0cmluZyBtZWRpYVJ1bGVzID0gU3RyaW5nKG1l
ZGlhQ29udHJvbHNVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1VzZXJB
Z2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudC0+ZG9j
dW1lbnQoKS0+cGFnZSgpKS0+ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOworICAgICAg
ICBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChtZWRpYVJ1bGVzKTsKKyAg
ICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU3R5bGVT
aGVldCwgc2NyZWVuRXZhbCgpKTsKKyAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVz
RnJvbVNoZWV0KG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CisgICAgfQor
I2VuZGlmCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKCFmdWxsc2NyZWVu
U3R5bGVTaGVldCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3JlZW4oKSkg
eworICAgICAgICBTdHJpbmcgZnVsbHNjcmVlblJ1bGVzID0gU3RyaW5nKGZ1bGxzY3JlZW5Vc2Vy
QWdlbnRTdHlsZVNoZWV0LCBzaXplb2YoZnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQpKSAr
IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+ZXh0cmFGdWxsU2NyZWVuU3R5bGVTaGVldCgp
OworICAgICAgICBmdWxsc2NyZWVuU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChmdWxsc2NyZWVu
UnVsZXMpOworICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGZ1bGxzY3Jl
ZW5TdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAgICBkZWZhdWx0UXVpcmtzU3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KGZ1bGxzY3JlZW5TdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwor
ICAgIH0KKyNlbmRpZgorCisgICAgQVNTRVJUKGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKS5pZHNJ
blJ1bGVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1hdGhNTFN0eWxlU2hlZXQgfHwgZGVmYXVs
dFN0eWxlLT5mZWF0dXJlcygpLnNpYmxpbmdSdWxlcy5pc0VtcHR5KCkpOworfQorCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFkZE1hdGNoZWRQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCwgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25l
ZCBsaW5rTWF0Y2hUeXBlLCBib29sIGluUmVnaW9uUnVsZSkKK3sKKyAgICBtYXRjaFJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5ncm93KG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSArIDEpOworICAgIE1hdGNoZWRQcm9wZXJ0aWVzJiBuZXdQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMubGFzdCgpOworICAgIG5ld1Byb3BlcnRpZXMucHJvcGVydGll
cyA9IHByb3BlcnRpZXM7CisgICAgbmV3UHJvcGVydGllcy5saW5rTWF0Y2hUeXBlID0gbGlua01h
dGNoVHlwZTsKKyAgICBuZXdQcm9wZXJ0aWVzLmlzSW5SZWdpb25SdWxlID0gaW5SZWdpb25SdWxl
OworICAgIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7Cit9CisKK2lubGlu
ZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIGJvb2wgaXNDYWNoZWFi
bGUpCit7CisgICAgaWYgKCFwcm9wZXJ0eVNldCkKKyAgICAgICAgcmV0dXJuOworICAgIHJlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgp
OworICAgIGlmIChyZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9PSAtMSkKKyAgICAgICAg
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPSByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JS
dWxlOworICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgcHJvcGVydHlTZXQpOworICAg
IGlmICghaXNDYWNoZWFibGUpCisgICAgICAgIHJlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOwor
fQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqIHJ1
bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNo
T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBBU1NFUlQocnVsZXMpOworICAgIEFTU0VSVChtX2Vs
ZW1lbnQpOworCisgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNs
YXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKKyAgICAvLyB0
aGVuIHNvcnQgdGhlIGJ1ZmZlci4KKyAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQorICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPmlkUnVsZXMobV9lbGVtZW50LT5p
ZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUlu
ZGV4LCBvcHRpb25zKTsKKyAgICBpZiAobV9lbGVtZW50LT5oYXNDbGFzcygpKSB7CisgICAgICAg
IEFTU0VSVChtX3N0eWxlZEVsZW1lbnQpOworICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5n
JiBjbGFzc05hbWVzID0gbV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCk7CisgICAgICAgIHNp
emVfdCBzaXplID0gY2xhc3NOYW1lcy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KHJ1bGVzLT5jbGFzc1J1bGVzKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgs
IGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOworICAgIH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHBzZXVkb0lkID0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOworICAgIGlmICghcHNldWRv
SWQuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVChtX3N0eWxlZEVsZW1lbnQpOworICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPnNoYWRvd1BzZXVkb0VsZW1lbnRS
dWxlcyhwc2V1ZG9JZC5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0
aW9ucyk7CisgICAgfQorICAgIGlmIChtX2VsZW1lbnQtPmlzTGluaygpKQorICAgICAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPmxpbmtQc2V1ZG9DbGFzc1J1bGVzKCksIGZp
cnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKKyAgICBpZiAobV9jaGVja2Vy
Lm1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKG1fZWxlbWVudCkpCisgICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdChydWxlcy0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QocnVsZXMtPnRhZ1J1bGVzKG1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwg
Zmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOworICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdChydWxlcy0+dW5pdmVyc2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgs
IGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKK3sK
KyAgICBpZiAoIW1fcmVnaW9uRm9yU3R5bGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgc2l6ZSA9IHJ1bGVzLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1Nl
bGVjdG9yKiByZWdpb25TZWxlY3RvciA9IHJ1bGVzLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVT
ZXRzLmF0KGkpLnNlbGVjdG9yOworICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdp
b25TZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVnaW9uRm9yU3R5bGluZy0+bm9k
ZSgpKSkpIHsKKyAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gcnVsZXMtPm1fcmVn
aW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKTsKKyAgICAgICAgICAg
IEFTU0VSVChyZWdpb25SdWxlcyk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhy
ZWdpb25SdWxlcywgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQoreworICAgIGlmIChtX21hdGNoZWRSdWxl
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsK
KworICAgIGlmIChtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkpIHsKKyAgICAgICAg
aWYgKCFtX3J1bGVMaXN0KQorICAgICAgICAgICAgbV9ydWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVM
aXN0OjpjcmVhdGUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hl
ZFJ1bGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9ydWxlTGlzdC0+cnVsZXMoKS5hcHBl
bmQobV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2YgbWF0
Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xhcmF0aW9ucy4KKyAgICAvLyBGSVhN
RTogVGhpcyBzdWNrcywgdGhlIGluc3BlY3RvciBzaG91bGQgZ2V0IHRoZSBzdHlsZSBmcm9tIHRo
ZSB2aXNpdGVkIHN0eWxlIGl0c2VsZi4KKyAgICBib29sIHN3YXBWaXNpdGVkVW52aXNpdGVkID0g
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKG1fZWxlbWVudCwgQ1NT
U2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAobV9zdHlsZSAmJiBtX21h
dGNoZWRSdWxlc1tpXS0+Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRBZmZlY3RlZEJ5VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcnMo
KTsKKyAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IG1fbWF0Y2hlZFJ1bGVzW2ldLT5s
aW5rTWF0Y2hUeXBlKCk7CisgICAgICAgIGlmIChzd2FwVmlzaXRlZFVudmlzaXRlZCAmJiBsaW5r
TWF0Y2hUeXBlICYmIGxpbmtNYXRjaFR5cGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCkK
KyAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgPSAobGlua01hdGNoVHlwZSA9PSBTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoVmlzaXRlZCkgPyBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayA6IFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOworICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhy
ZXN1bHQsIG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgbV9tYXRjaGVk
UnVsZXNbaV0tPnJ1bGUoKSwgbGlua01hdGNoVHlwZSwgbV9tYXRjaGVkUnVsZXNbaV0tPmlzSW5S
ZWdpb25SdWxlKCkpOworICAgIH0KK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3Bl
ZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
Cit7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICBpZiAobV9zY29wZWRBdXRob3JTdHls
ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNYXRjaE9wdGlvbnMgb3B0aW9u
cyhpbmNsdWRlRW1wdHlSdWxlcyk7CisKKyAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVz
IGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0
IGdvdCBpbmNvbnNpc3RlbnQpLgorICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1f
ZWxlbWVudC0+cGFyZW50T3JIb3N0Tm9kZSgpOworICAgIGlmICghc2NvcGVTdGFja0lzQ29uc2lz
dGVudChwYXJlbnQpKQorICAgICAgICBzZXR1cFNjb3BlU3RhY2socGFyZW50KTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gbV9zY29wZVN0YWNrLnNpemUoKTsgaTsgLS1pKSB7CisgICAgICAgIGNvbnN0
IFNjb3BlU3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlU3RhY2tbaSAtIDFdOworICAgICAgICBv
cHRpb25zLnNjb3BlID0gZnJhbWUubV9zY29wZTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXMoZnJhbWUubV9ydWxlU2V0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisgICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yUmVnaW9uKGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhv
clJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgIH0KKyAg
ICAvLyBBbHNvIGluY2x1ZGUgdGhlIGN1cnJlbnQgZWxlbWVudC4KKyAgICBSdWxlU2V0KiBydWxl
U2V0ID0gcnVsZVNldEZvclNjb3BlKG1fZWxlbWVudCk7CisgICAgaWYgKHJ1bGVTZXQpIHsKKyAg
ICAgICAgb3B0aW9ucy5zY29wZSA9IG1fZWxlbWVudDsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMocnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5n
ZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
c0ZvclJlZ2lvbihydWxlU2V0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0ocmVzdWx0KTsKKyAgICBVTlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOwor
I2VuZGlmCit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworICAgIG1fbWF0Y2hlZFJ1
bGVzLmNsZWFyKCk7CisgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOworCisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMuCisgICAgTWF0
Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxl
LCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZp
cnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisK
KyAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOwor
CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7Cit9CisKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcykKK3sKKyAgICBpZiAoIW1fdXNlclN0eWxlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKworICAgIHJlc3VsdC5yYW5nZXMu
bGFzdFVzZXJSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CisgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmly
c3RVc2VyUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX3VzZXJTdHlsZS5nZXQoKSwg
cmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwg
aW5jbHVkZUVtcHR5UnVsZXMpOworCisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJl
c3VsdCk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0
JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQoreworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7
CisgICAgCisgICAgcmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIDE7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMocnVsZXMsIHJlc3Vs
dC5yYW5nZXMuZmlyc3RVQVJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgZmFsc2UpOwor
CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7Cit9CisKK2NsYXNzIE1h
dGNoaW5nVUFSdWxlc1Njb3BlIHsKK3B1YmxpYzoKKyAgICBNYXRjaGluZ1VBUnVsZXNTY29wZSgp
OworICAgIH5NYXRjaGluZ1VBUnVsZXNTY29wZSgpOworCisgICAgc3RhdGljIGJvb2wgaXNNYXRj
aGluZ1VBUnVsZXMoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBtX21hdGNoaW5nVUFS
dWxlczsKK307CisKK01hdGNoaW5nVUFSdWxlc1Njb3BlOjpNYXRjaGluZ1VBUnVsZXNTY29wZSgp
Cit7CisgICAgQVNTRVJUKCFtX21hdGNoaW5nVUFSdWxlcyk7CisgICAgbV9tYXRjaGluZ1VBUnVs
ZXMgPSB0cnVlOworfQorCitNYXRjaGluZ1VBUnVsZXNTY29wZTo6fk1hdGNoaW5nVUFSdWxlc1Nj
b3BlKCkKK3sKKyAgICBtX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOworfQorCitpbmxpbmUgYm9v
bCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQoreworICAgIHJldHVy
biBtX21hdGNoaW5nVUFSdWxlczsKK30KKworYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9t
YXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKKwordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmly
c3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJiBvcHRp
b25zKQoreworICAgIGlmICghcnVsZXMpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBJbiBzb21l
IGNhc2VzIHdlIG1heSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBmb3IgcmFuZG9tIGVsZW1lbnRz
IGluIHRoZSBtaWRkbGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNvbHZlLgorICAgIC8vIEFuY2Vz
dG9yIGlkZW50aWZpZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRhdGUgaW4gdGhhdCBjYXNlIGFu
ZCB3ZSBjYW4ndCB1c2UgdGhlIGZhc3QgcGF0aC4KKyAgICBib29sIGNhblVzZUZhc3RSZWplY3Qg
PSBtX2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQobV9wYXJlbnROb2RlKTsKKworICAg
IHVuc2lnbmVkIHNpemUgPSBydWxlcy0+c2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVs
ZXMtPmF0KGkpOworICAgICAgICBpZiAoY2FuVXNlRmFzdFJlamVjdCAmJiBtX2NoZWNrZXIuZmFz
dFJlamVjdFNlbGVjdG9yPFJ1bGVEYXRhOjptYXhpbXVtSWRlbnRpZmllckNvdW50PihydWxlRGF0
YS5kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOworICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUpOworI2lmIEVOQUJM
RShTVFlMRV9TQ09QRUQpCisgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhLCBvcHRp
b25zLnNjb3BlKSkgeworI2Vsc2UKKyAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEp
KSB7CisjZW5kaWYKKyAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHJ1bGUgaXMgYXBw
bGljYWJsZSBpbiB0aGUgY3VycmVudCB0cmVlIHNjb3BlLiBDcml0ZXJpYSBmb3IgdGhpczoKKyAg
ICAgICAgICAgIC8vIGEpIGl0J3MgYSBVQSBydWxlCisgICAgICAgICAgICAvLyBiKSB0aGUgdHJl
ZSBzY29wZSBhbGxvd3MgYXV0aG9yIHJ1bGVzCisgICAgICAgICAgICAvLyBjKSB0aGUgcnVsZXMg
Y29tZXMgZnJvbSBhIHNjb3BlZCBzdHlsZSBzaGVldCB3aXRoaW4gdGhlIHNhbWUgdHJlZSBzY29w
ZQorICAgICAgICAgICAgLy8gZCkgdGhlIHJ1bGUgY29udGFpbnMgc2hhZG93LUlEIHBzZXVkbyBl
bGVtZW50cworICAgICAgICAgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBtX2VsZW1lbnQtPnRy
ZWVTY29wZSgpOworICAgICAgICAgICAgaWYgKCFNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRj
aGluZ1VBUnVsZXMoKQorICAgICAgICAgICAgICAgICYmICF0cmVlU2NvcGUtPmFwcGx5QXV0aG9y
U2hlZXRzKCkKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgICAgICAgICAgICAgICYmICgh
b3B0aW9ucy5zY29wZSB8fCBvcHRpb25zLnNjb3BlLT50cmVlU2NvcGUoKSAhPSB0cmVlU2NvcGUp
CisjZW5kaWYKKyAgICAgICAgICAgICAgICAmJiAhbV9jaGVja2VyLmhhc1Vua25vd25Qc2V1ZG9F
bGVtZW50cygpKSB7CisKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0
aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCisgICAg
ICAgICAgICBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygp
OworICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzIHx8IChwcm9wZXJ0aWVzLT5pc0VtcHR5KCkg
JiYgIW9wdGlvbnMuaW5jbHVkZUVtcHR5UnVsZXMpKSB7CisgICAgICAgICAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGSVhNRTog
RXhwb3NpbmcgdGhlIG5vbi1zdGFuZGFyZCBnZXRNYXRjaGVkQ1NTUnVsZXMgQVBJIHRvIHdlYiBp
cyB0aGUgb25seSByZWFzb24gdGhpcyBpcyBuZWVkZWQuCisgICAgICAgICAgICBpZiAobV9zYW1l
T3JpZ2luT25seSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7Cisg
ICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29v
a2llLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVk
byBiaXQgaWYKKyAgICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8t
ZWxlbWVudC4KKyAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYg
bV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgPT0gTk9QU0VVRE8pIHsKKyAgICAgICAgICAgICAgICBp
ZiAobV9jaGVja2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2Up
OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lE
KQorICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShtX2R5bmFt
aWNQc2V1ZG8pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBVcGRh
dGUgb3VyIGZpcnN0L2xhc3QgcnVsZSBpbmRpY2VzIGluIHRoZSBtYXRjaGVkIHJ1bGVzIGFycmF5
LgorICAgICAgICAgICAgICAgICsrbGFzdFJ1bGVJbmRleDsKKyAgICAgICAgICAgICAgICBpZiAo
Zmlyc3RSdWxlSW5kZXggPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGZpcnN0UnVsZUluZGV4
ID0gbGFzdFJ1bGVJbmRleDsKKworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIHJ1bGUgdG8g
b3VyIGxpc3Qgb2YgbWF0Y2hlZCBydWxlcy4KKyAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUnVs
ZSgmcnVsZURhdGEpOworICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgY29tcGFyZVJ1bGVzKGNvbnN0IFJ1bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIy
KQoreworICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5MSA9IHIxLT5zcGVjaWZpY2l0eSgpOworICAg
IHVuc2lnbmVkIHNwZWNpZmljaXR5MiA9IHIyLT5zcGVjaWZpY2l0eSgpOworICAgIHJldHVybiAo
c3BlY2lmaWNpdHkxID09IHNwZWNpZmljaXR5MikgPyByMS0+cG9zaXRpb24oKSA8IHIyLT5wb3Np
dGlvbigpIDogc3BlY2lmaWNpdHkxIDwgc3BlY2lmaWNpdHkyOworfQorCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OnNvcnRNYXRjaGVkUnVsZXMoKQoreworICAgIHN0ZDo6c29ydChtX21hdGNoZWRSdWxl
cy5iZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKK30KKwordm9p
ZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCit7Cisg
ICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCk7CisKKyAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVl
dCBydWxlcy4KKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCisgICAgICAgIG1h
dGNoVXNlclJ1bGVzKHJlc3VsdCwgZmFsc2UpOworICAgICAgICAKKyAgICAvLyBOb3cgY2hlY2sg
YXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1
dGVzIG1hcHBlZCBmcm9tIEhUTUwuCisgICAgaWYgKG1fc3R5bGVkRWxlbWVudCkgeworICAgICAg
ICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdHlsZWRFbGVtZW50LT5hdHRy
aWJ1dGVTdHlsZSgpKTsKKworICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBw
ZWQgZGVjbGFyYXRpb25zLgorICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJl
IGFuIGFkZGl0aW9uYWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKKyAgICAgICAg
Ly8gYWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRz
IG9uIHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KKyAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbEF0dHJp
YnV0ZVN0eWxlKCkpOworCisgICAgICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlzSFRNTEVsZW1l
bnQoKSkgeworICAgICAgICAgICAgYm9vbCBpc0F1dG87CisgICAgICAgICAgICBUZXh0RGlyZWN0
aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KG1fc3R5bGVkRWxlbWVudCktPmRpcmVj
dGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBpZiAo
aXNBdXRvKQorICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4
dERpcmVjdGlvbiA9PSBMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVm
dERlY2xhcmF0aW9uKCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIENoZWNrIHRo
ZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5leHQuCisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzKQorICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOworCisg
ICAgLy8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgorICAgIGlmIChtX21h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHlsZWRFbGVt
ZW50LT5pbmxpbmVTdHlsZSgpKSB7CisgICAgICAgIC8vIElubGluZSBzdHlsZSBpcyBpbW11dGFi
bGUgYXMgbG9uZyBhcyB0aGVyZSBpcyBubyBDU1NPTSB3cmFwcGVyLgorICAgICAgICAvLyBGSVhN
RTogTWVkaWEgY29udHJvbCBzaGFkb3cgdHJlZXMgc2VlbSB0byBoYXZlIHByb2JsZW1zIHdpdGgg
Y2FjaGluZy4KKyAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3R5bGVk
RWxlbWVudC0+aW5saW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIW1fc3R5bGVkRWxlbWVudC0+
aXNJblNoYWRvd1RyZWUoKTsKKyAgICAgICAgLy8gRklYTUU6IENvbnN0aWZ5LgorICAgICAgICBh
ZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5
U2V0Kj4obV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKSwgaXNJbmxpbmVTdHlsZUNhY2hl
YWJsZSk7CisgICAgfQorCisjaWYgRU5BQkxFKFNWRykKKyAgICAvLyBOb3cgY2hlY2sgU01JTCBh
bmltYXRpb24gb3ZlcnJpZGUgc3R5bGUuCisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5
bGVzICYmIG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
KQorICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGll
cygpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQg
U3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKK3sKKyAgICBpZiAobV9lbGVt
ZW50ICE9IGUpIHsKKyAgICAgICAgbV9lbGVtZW50ID0gZTsKKyAgICAgICAgbV9zdHlsZWRFbGVt
ZW50ID0gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNf
Y2FzdDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KSA6IDA7CisgICAgICAgIG1fZWxlbWVudExp
bmtTdGF0ZSA9IG1fY2hlY2tlci5kZXRlcm1pbmVMaW5rU3RhdGUobV9lbGVtZW50KTsKKyAgICAg
ICAgaWYgKGUgJiYgZSA9PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgeworICAg
ICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQo
ZmFsc2UpOworICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRv
Y3VtZW50RWxlbWVudChmYWxzZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2lubGluZSB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlLCBQc2V1ZG9JZCBwc2V1ZG9JRCkKK3sKKyAgICBtX2NoZWNrZXIuc2V0
UHNldWRvU3R5bGUocHNldWRvSUQpOworCisgICAgbV9wYXJlbnROb2RlID0gZSA/IGUtPnBhcmVu
dE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpIDogMDsKKworICAgIGlmIChwYXJlbnRTdHlsZSkK
KyAgICAgICAgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOworICAgIGVsc2UKKyAgICAgICAg
bV9wYXJlbnRTdHlsZSA9IG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUo
KSA6IDA7CisKKyAgICBOb2RlKiBkb2NFbGVtZW50ID0gZSA/IGUtPmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpIDogMDsKKyAgICBSZW5kZXJTdHlsZSogZG9jU3R5bGUgPSBtX2NoZWNrZXIu
ZG9jdW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBkb2NF
bGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBk
b2NTdHlsZTsKKworICAgIG1fc3R5bGUgPSAwOworCisgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0
aWVzLmNsZWFyKCk7CisKKyAgICBtX3J1bGVMaXN0ID0gMDsKKworICAgIG1fZm9udERpcnR5ID0g
ZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQg
PSAxMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCA9
IDEwOworCitOb2RlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBh
cmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0Cit7CisgICAgaWYgKHZpc2l0
ZWROb2RlQ291bnQgPj0gY1N0eWxlU2VhcmNoVGhyZXNob2xkICogY1N0eWxlU2VhcmNoTGV2ZWxU
aHJlc2hvbGQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQt
PmlzU3R5bGVkRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoU1RZTEVf
U0NPUEVEKQorICAgIGlmIChwYXJlbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAg
ICAgIHJldHVybiAwOworI2VuZGlmCisgICAgU3R5bGVkRWxlbWVudCogcCA9IHN0YXRpY19jYXN0
PFN0eWxlZEVsZW1lbnQqPihwYXJlbnQpOworICAgIGlmIChwLT5pbmxpbmVTdHlsZSgpKQorICAg
ICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGlmIChwLT5pc1NWR0VsZW1lbnQo
KSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVy
dGllcygpKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIGlmIChwLT5oYXNJRCgpICYm
IG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhwLT5pZEZvclN0eWxlUmVzb2x1dGlvbigp
LmltcGwoKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gcC0+cmVuZGVyU3R5bGUoKTsKKyAgICB1bnNpZ25lZCBzdWJjb3VudCA9IDA7CisgICAg
Tm9kZSogdGhpc0NvdXNpbiA9IHA7CisgICAgTm9kZSogY3VycmVudE5vZGUgPSBwLT5wcmV2aW91
c1NpYmxpbmcoKTsKKworICAgIC8vIFJlc2VydmUgdGhlIHRyaWVzIGZvciB0aGlzIGxldmVsLiBU
aGlzIGVmZmVjdGl2ZWx5IG1ha2VzIHN1cmUgdGhhdCB0aGUgYWxnb3JpdGhtCisgICAgLy8gd2ls
bCBuZXZlciBnbyBkZWVwZXIgdGhhbiBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCBsZXZlbHMg
aW50byByZWN1cnNpb24uCisgICAgdmlzaXRlZE5vZGVDb3VudCArPSBjU3R5bGVTZWFyY2hUaHJl
c2hvbGQ7CisgICAgd2hpbGUgKHRoaXNDb3VzaW4pIHsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRO
b2RlKSB7CisgICAgICAgICAgICArK3N1YmNvdW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnRO
b2RlLT5yZW5kZXJTdHlsZSgpID09IHBhcmVudFN0eWxlICYmIGN1cnJlbnROb2RlLT5sYXN0Q2hp
bGQoKSkgeworICAgICAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJlc2VydmVkIHRy
aWVzLgorICAgICAgICAgICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxlU2VhcmNoVGhy
ZXNob2xkIC0gc3ViY291bnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlLT5s
YXN0Q2hpbGQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdWJjb3VudCA+PSBj
U3R5bGVTZWFyY2hUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAg
ICAgfQorICAgICAgICBjdXJyZW50Tm9kZSA9IGxvY2F0ZUNvdXNpbkxpc3QodGhpc0NvdXNpbi0+
cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKKyAgICAgICAgdGhpc0NvdXNpbiA9
IGN1cnJlbnROb2RlOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitib29sIFN0eWxlUmVz
b2x2ZXI6Om1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCit7CisgICAgaWYgKCFydWxl
U2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsK
KworICAgIGludCBmaXJzdFJ1bGVJbmRleCA9IC0xLCBsYXN0UnVsZUluZGV4ID0gLTE7CisgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXMocnVsZVNldCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5k
ZXgsIGZhbHNlKTsKKworICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChT
dHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRo
aXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1
dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gbV9lbGVtZW50LT50b0lucHV0RWxlbWVudCgp
OworCisgICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8ICFvdGhlcklucHV0RWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmlzQXV0b2Zp
bGxlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2Vk
KCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUo
KSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+cmVxdWlyZWQoKSAhPSBvdGhlcklu
cHV0RWxlbWVudC0+cmVxdWlyZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkgIT0gbV9lbGVtZW50LT5pc0VuYWJsZWRG
b3JtQ29udHJvbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZWxlbWVudC0+
aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IG1fZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9y
Rm9ybSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9lbGVtZW50LT5kb2N1
bWVudCgpLT5jb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpKSB7CisgICAgICAgIGJvb2wgd2ls
bFZhbGlkYXRlID0gZWxlbWVudC0+d2lsbFZhbGlkYXRlKCk7CisKKyAgICAgICAgaWYgKHdpbGxW
YWxpZGF0ZSAhPSBtX2VsZW1lbnQtPndpbGxWYWxpZGF0ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRG
b3JtQ29udHJvbEVsZW1lbnQoKSAhPSBtX2VsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1l
bnQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGVsZW1lbnQt
PmlzSW5SYW5nZSgpICE9IG1fZWxlbWVudC0+aXNJblJhbmdlKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9IG1fZWxl
bWVudC0+aXNPdXRPZlJhbmdlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gbWFrZXMgc29tZSBhc3N1
bXB0aW9ucyB0aGF0IG9ubHkgbWFrZSBzZW5zZSBmb3IgYXR0cmlidXRlIHN0eWxlcyAod2Ugb25s
eSBjb21wYXJlIENTU1Byb3BlcnR5OjppZCgpIGFuZCBDU1NQcm9wZXJ0eTo6dmFsdWUoKS4pCitz
dGF0aWMgaW5saW5lIGJvb2wgYXR0cmlidXRlU3R5bGVzRXF1YWwoU3R5bGVQcm9wZXJ0eVNldCog
YSwgU3R5bGVQcm9wZXJ0eVNldCogYikKK3sKKyAgICBpZiAoYSA9PSBiKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAoYS0+cHJvcGVydHlDb3VudCgpICE9IGItPnByb3BlcnR5Q291bnQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBh
LT5wcm9wZXJ0eUNvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5
Q291bnQ7ICsraSkgeworICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgYVByb3BlcnR5ID0gYS0+
cHJvcGVydHlBdChpKTsKKyAgICAgICAgdW5zaWduZWQgajsKKyAgICAgICAgZm9yIChqID0gMDsg
aiA8IHByb3BlcnR5Q291bnQ7ICsraikgeworICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkm
IGJQcm9wZXJ0eSA9IGItPnByb3BlcnR5QXQoaik7CisgICAgICAgICAgICBpZiAoYVByb3BlcnR5
LmlkKCkgIT0gYlByb3BlcnR5LmlkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAvLyBXZSBjb3VsZCBnZXQgYSBmZXcgbW9yZSBoaXRzIGJ5IGNvbXBhcmluZyBjc3NU
ZXh0KCkgaGVyZSwgYnV0IHRoYXQgZ2V0cyBleHBlbnNpdmUgcXVpY2tseS4KKyAgICAgICAgICAg
IGlmIChhUHJvcGVydHkudmFsdWUoKSAhPSBiUHJvcGVydHkudmFsdWUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaiA9PSBwcm9wZXJ0eUNvdW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlv
bkF1dG8oRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpICYmIHRvSFRNTEVsZW1lbnQoZWxlbWVudCktPmhhc0RpcmVjdGlvbkF1dG8oKTsKK30K
KworYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxl
bWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50
LT5yZW5kZXJTdHlsZSgpOworCisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChzdHlsZS0+dW5pcXVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoZWxlbWVudC0+dGFnUU5hbWUoKSAhPSBtX2VsZW1lbnQtPnRhZ1FOYW1lKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAhPSBtX2VsZW1lbnQt
Pmhhc0NsYXNzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+aW5s
aW5lU3R5bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2lmIEVOQUJMRShTVkcpCisgICAg
aWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihl
bGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgorICAgIGlmICghIWVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkgIT0gISFt
X3N0eWxlZEVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBTdHlsZVByb3BlcnR5U2V0KiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVBID0gZWxlbWVu
dC0+YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlKCk7CisgICAgU3R5bGVQcm9wZXJ0eVNldCogYWRk
aXRpb25hbEF0dHJpYnV0ZVN0eWxlQiA9IG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbEF0dHJp
YnV0ZVN0eWxlKCk7CisgICAgaWYgKCFhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVBICE9ICFhZGRp
dGlvbmFsQXR0cmlidXRlU3R5bGVCKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVs
ZW1lbnQtPmlzTGluaygpICE9IG1fZWxlbWVudC0+aXNMaW5rKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoc3R5bGUtPmFmZmVjdGVkQnlVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9y
cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAh
PSBtX2VsZW1lbnQtPmhvdmVyZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChl
bGVtZW50LT5hY3RpdmUoKSAhPSBtX2VsZW1lbnQtPmFjdGl2ZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBtX2VsZW1lbnQtPmZvY3VzZWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9J
ZCgpICE9IG1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPmNzc1RhcmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVs
ZW1lbnQtPmdldEF0dHJpYnV0ZSh0eXBlQXR0cikgIT0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUo
dHlwZUF0dHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRy
aWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBtX2VsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVs
ZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSAhPSBtX2VsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGNlbGxwYWRkaW5nQXR0cikgIT0gbV9lbGVtZW50
LT5mYXN0R2V0QXR0cmlidXRlKGNlbGxwYWRkaW5nQXR0cikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5j
b250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYgKGVsZW1l
bnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShwcm9ncmVzc1RhZykpIHsKKyAgICAgICAgaWYgKCFtX2VsZW1lbnQtPmhhc1RhZ05hbWUo
cHJvZ3Jlc3NUYWcpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEhUTUxQ
cm9ncmVzc0VsZW1lbnQqIHRoaXNQcm9ncmVzc0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MUHJv
Z3Jlc3NFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgIEhUTUxQcm9ncmVzc0VsZW1lbnQqIG90
aGVyUHJvZ3Jlc3NFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KG1f
ZWxlbWVudCk7CisgICAgICAgIGlmICh0aGlzUHJvZ3Jlc3NFbGVtZW50LT5pc0RldGVybWluYXRl
KCkgIT0gb3RoZXJQcm9ncmVzc0VsZW1lbnQtPmlzRGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKG9wdGlvblRhZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaXNDb250
cm9sID0gZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKKworICAgIGlmIChpc0NvbnRy
b2wgIT0gbV9lbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wo
ZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdHlsZS0+dHJhbnNp
dGlvbnMoKSB8fCBzdHlsZS0+YW5pbWF0aW9ucygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLy8gVHVybiBvZmYgc3R5bGUg
c2hhcmluZyBmb3IgZWxlbWVudHMgdGhhdCBjYW4gZ2FpbiBsYXllcnMgZm9yIHJlYXNvbnMgb3V0
c2lkZSBvZiB0aGUgc3R5bGUgc3lzdGVtLgorICAgIC8vIFNlZSBjb21tZW50cyBpbiBSZW5kZXJP
YmplY3Q6OnNldFN0eWxlKCkuCisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFn
KSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KGVtYmVkVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC0+
aGFzVGFnTmFtZShhcHBsZXRUYWcpCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8p
CisgICAgICAgIC8vIFdpdGggcHJveHlpbmcsIHRoZSBtZWRpYSBlbGVtZW50cyBhcmUgYmFja2Vk
IGJ5IGEgUmVuZGVyRW1iZWRkZWRPYmplY3QuCisgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05h
bWUodmlkZW9UYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXVkaW9UYWcpCisjZW5kaWYKKyAg
ICAgICAgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChlbGVtZW50
SGFzRGlyZWN0aW9uQXV0byhlbGVtZW50KSB8fCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhtX2Vs
ZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzQ2xh
c3MoKSAmJiBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IGVsZW1lbnQtPmdl
dEF0dHJpYnV0ZShjbGFzc0F0dHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
ZWxlbWVudC0+YXR0cmlidXRlU3R5bGUoKSAmJiAhYXR0cmlidXRlU3R5bGVzRXF1YWwoZWxlbWVu
dC0+YXR0cmlidXRlU3R5bGUoKSwgbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHls
ZUEgJiYgIWF0dHJpYnV0ZVN0eWxlc0VxdWFsKGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZUEsIGFk
ZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZUIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoZWxlbWVudC0+aXNMaW5rKCkgJiYgbV9lbGVtZW50TGlua1N0YXRlICE9IHN0eWxlLT5pbnNp
ZGVMaW5rKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
CitpbmxpbmUgU3R5bGVkRWxlbWVudCogU3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHls
ZVNoYXJpbmcoTm9kZSogbm9kZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAoreworICAgIGZvciAo
OyBub2RlOyBub2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFu
b2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
ZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihu
b2RlKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGNvdW50KysgPT0gY1N0eWxl
U2VhcmNoVGhyZXNob2xkKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpCit7CisgICAgcmV0dXJuIHBhcmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlQb3Np
dGlvbmFsUnVsZXMoKQorICAgICAgICB8fCBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5
Rmlyc3RDaGlsZFJ1bGVzKCkKKyAgICAgICAgfHwgcGFyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0
ZWRCeUxhc3RDaGlsZFJ1bGVzKCkgCisgICAgICAgIHx8IHBhcmVudFN0eWxlLT5jaGlsZHJlbkFm
ZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7Cit9CisKK1JlbmRlclN0eWxlKiBTdHlsZVJl
c29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCit7CisgICAgaWYgKCFtX3N0eWxlZEVsZW1lbnQg
fHwgIW1fcGFyZW50U3R5bGUpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIElmIHRoZSBlbGVt
ZW50IGhhcyBpbmxpbmUgc3R5bGUgaXQgaXMgcHJvYmFibHkgdW5pcXVlLgorICAgIGlmIChtX3N0
eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCisgICAgICAgIHJldHVybiAwOworI2lmIEVOQUJM
RShTVkcpCisgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGlj
X2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJv
cGVydGllcygpKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIC8vIElkcyBzdG9wIHN0
eWxlIHNoYXJpbmcgaWYgdGhleSBzaG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KKyAgICBpZiAo
bV9zdHlsZWRFbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlu
cyhtX3N0eWxlZEVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50
U3R5bGUpKQorICAgICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAg
IGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAg
IHJldHVybiAwOworI2VuZGlmCisKKyAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQg
dGhlaXIgY291c2lucy4KKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgdW5zaWduZWQgdmlz
aXRlZE5vZGVDb3VudCA9IDA7CisgICAgU3R5bGVkRWxlbWVudCogc2hhcmVFbGVtZW50ID0gMDsK
KyAgICBOb2RlKiBjb3VzaW5MaXN0ID0gbV9zdHlsZWRFbGVtZW50LT5wcmV2aW91c1NpYmxpbmco
KTsKKyAgICB3aGlsZSAoY291c2luTGlzdCkgeworICAgICAgICBzaGFyZUVsZW1lbnQgPSBmaW5k
U2libGluZ0ZvclN0eWxlU2hhcmluZyhjb3VzaW5MaXN0LCBjb3VudCk7CisgICAgICAgIGlmIChz
aGFyZUVsZW1lbnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY291c2luTGlzdCA9IGxv
Y2F0ZUNvdXNpbkxpc3QoY291c2luTGlzdC0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNv
dW50KTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIGV4aGF1c3RlZCBhbGwgb3VyIGJ1ZGdl
dCBvciBvdXIgY291c2lucy4KKyAgICBpZiAoIXNoYXJlRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAvLyBDYW4ndCBzaGFyZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiBUaGlzIGlz
IGNoZWNrZWQgYXQgdGhlIGVuZCBhcyBpdCBzaG91bGQgcmFyZWx5IGZhaWwuCisgICAgaWYgKG1h
dGNoZXNSdWxlU2V0KG1fc2libGluZ1J1bGVTZXQuZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCisgICAgaWYgKG1h
dGNoZXNSdWxlU2V0KG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0
eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBt
YXRjaCBhYm92ZS4KKyAgICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRT
dHlsZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzaGFyZUVsZW1lbnQtPnJlbmRl
clN0eWxlKCk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQpCit7CisgICAgTWF0Y2hpbmdVQVJ1bGVzU2NvcGUgc2NvcGU7CisKKyAgICAv
LyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0LgorICAgIGlm
IChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCkKKyAgICAgICAgcmVzdWx0LmlzQ2FjaGVhYmxlID0g
ZmFsc2U7CisgICAgUnVsZVNldCogdXNlckFnZW50U3R5bGVTaGVldCA9IG1fbWVkaXVtLT5tZWRp
YVR5cGVNYXRjaFNwZWNpZmljKCJwcmludCIpCisgICAgICAgID8gZGVmYXVsdFByaW50U3R5bGUg
OiBkZWZhdWx0U3R5bGU7CisgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgdXNlckFnZW50U3R5bGVT
aGVldCk7CisKKyAgICAvLyBJbiBxdWlya3MgbW9kZSwgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUg
cXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCisgICAgaWYgKCFtX2NoZWNrZXIuc3RyaWN0UGFyc2lu
ZygpKQorICAgICAgICBtYXRjaFVBUnVsZXMocmVzdWx0LCBkZWZhdWx0UXVpcmtzU3R5bGUpOwor
CisgICAgLy8gSWYgZG9jdW1lbnQgdXNlcyB2aWV3IHNvdXJjZSBzdHlsZXMgKGluIHZpZXcgc291
cmNlIG1vZGUgb3IgaW4geG1sIHZpZXdlciBtb2RlKSwgdGhlbiB3ZSBtYXRjaCBydWxlcyBmcm9t
IHRoZSB2aWV3IHNvdXJjZSBzdHlsZSBzaGVldC4KKyAgICBpZiAobV9jaGVja2VyLmRvY3VtZW50
KCktPmlzVmlld1NvdXJjZSgpKSB7CisgICAgICAgIGlmICghZGVmYXVsdFZpZXdTb3VyY2VTdHls
ZSkKKyAgICAgICAgICAgIGxvYWRWaWV3U291cmNlU3R5bGUoKTsKKyAgICAgICAgbWF0Y2hVQVJ1
bGVzKHJlc3VsdCwgZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSk7CisgICAgfQorfQorCitQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckRvY3VtZW50KERvY3VtZW50
KiBkb2N1bWVudCwgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCit7CisgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGRv
Y3VtZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgZG9jdW1lbnRTdHlsZS0+
c2V0RGlzcGxheShCTE9DSyk7CisgICAgZG9jdW1lbnRTdHlsZS0+c2V0UlRMT3JkZXJpbmcoZG9j
dW1lbnQtPnZpc3VhbGx5T3JkZXJlZCgpID8gVmlzdWFsT3JkZXIgOiBMb2dpY2FsT3JkZXIpOwor
ICAgIGRvY3VtZW50U3R5bGUtPnNldFpvb20oZnJhbWUgJiYgIWRvY3VtZW50LT5wcmludGluZygp
ID8gZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCkgOiAxKTsKKyAgICBkb2N1bWVudFN0eWxlLT5zZXRQ
YWdlU2NhbGVUcmFuc2Zvcm0oZnJhbWUgPyBmcmFtZS0+ZnJhbWVTY2FsZUZhY3RvcigpIDogMSk7
CisgICAgZG9jdW1lbnRTdHlsZS0+c2V0VXNlck1vZGlmeShkb2N1bWVudC0+aW5EZXNpZ25Nb2Rl
KCkgPyBSRUFEX1dSSVRFIDogUkVBRF9PTkxZKTsKKyAgICBkb2N1bWVudFN0eWxlLT5zZXRMb2Nh
bGUoZG9jdW1lbnQtPmNvbnRlbnRMYW5ndWFnZSgpKTsKKworICAgIEVsZW1lbnQqIGRvY0VsZW1l
bnQgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgUmVuZGVyT2JqZWN0KiBkb2NF
bGVtZW50UmVuZGVyZXIgPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyZXIoKSA6IDA7
CisgICAgaWYgKGRvY0VsZW1lbnRSZW5kZXJlcikgeworICAgICAgICAvLyBVc2UgdGhlIGRpcmVj
dGlvbiBhbmQgd3JpdGluZy1tb2RlIG9mIHRoZSBib2R5IHRvIHNldCB0aGUKKyAgICAgICAgLy8g
dmlld3BvcnQncyBkaXJlY3Rpb24gYW5kIHdyaXRpbmctbW9kZSB1bmxlc3MgdGhlIHByb3BlcnR5
IGlzIHNldCBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KKyAgICAgICAgLy8gSWYgdGhlcmUgaXMg
bm8gYm9keSwgdGhlbiB1c2UgdGhlIGRvY3VtZW50IGVsZW1lbnQuCisgICAgICAgIFJlbmRlck9i
amVjdCogYm9keVJlbmRlcmVyID0gZG9jdW1lbnQtPmJvZHkoKSA/IGRvY3VtZW50LT5ib2R5KCkt
PnJlbmRlcmVyKCkgOiAwOworICAgICAgICBpZiAoYm9keVJlbmRlcmVyICYmICFkb2N1bWVudC0+
d3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnRT
dHlsZS0+c2V0V3JpdGluZ01vZGUoYm9keVJlbmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0V3JpdGluZ01v
ZGUoZG9jRWxlbWVudFJlbmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKKyAgICAgICAg
aWYgKGJvZHlSZW5kZXJlciAmJiAhZG9jdW1lbnQtPmRpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVt
ZW50KCkpCisgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXREaXJlY3Rpb24oYm9keVJlbmRl
cmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRv
Y3VtZW50U3R5bGUtPnNldERpcmVjdGlvbihkb2NFbGVtZW50UmVuZGVyZXItPnN0eWxlKCktPmRp
cmVjdGlvbigpKTsKKyAgICB9CisKKyAgICBpZiAoZnJhbWUpIHsKKyAgICAgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7CisgICAgICAgICAgICBjb25zdCBQYWdlOjpQYWdpbmF0
aW9uJiBwYWdpbmF0aW9uID0gcGFnZS0+cGFnaW5hdGlvbigpOworICAgICAgICAgICAgaWYgKHBh
Z2luYXRpb24ubW9kZSAhPSBQYWdlOjpQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZCkgeworICAgICAg
ICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldENvbHVtbkF4aXMocGFnaW5hdGlvbi5tb2RlID09
IFBhZ2U6OlBhZ2luYXRpb246Okhvcml6b250YWxseVBhZ2luYXRlZCA/IEhvcml6b250YWxDb2x1
bW5BeGlzIDogVmVydGljYWxDb2x1bW5BeGlzKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudFN0
eWxlLT5zZXRDb2x1bW5HYXAocGFnaW5hdGlvbi5nYXApOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBm
b250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQtPnByaW50aW5nKCkpOwor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNl
bGVjdGlvbihkb2N1bWVudFN0eWxlLT5sb2NhbGUoKSkpOworICAgIGlmIChTZXR0aW5ncyogc2V0
dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKSkgeworICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250ID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9u
dEZhbWlseShmb250RGVzY3JpcHRpb24uc2NyaXB0KCkpOworICAgICAgICBpZiAoIXN0YW5kYXJk
Rm9udC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmlj
RmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHkpOworICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KHN0YW5kYXJkRm9udCk7CisgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1pbHkoMCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVl
TWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CisgICAgICAgIGludCBzaXplID0gU3R5bGVS
ZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50LCBDU1NWYWx1ZU1lZGl1bSwgZmFs
c2UpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAg
ICAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMgPSBkb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpOwor
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlUmVzb2x2ZXI6Omdl
dENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50LCBkb2N1bWVudFN0eWxlLmdl
dCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1
bGVzKSk7CisgICAgfQorCisgICAgZG9jdW1lbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CisgICAgZG9jdW1lbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2Vs
ZWN0b3IpOworCisgICAgcmV0dXJuIGRvY3VtZW50U3R5bGUucmVsZWFzZSgpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNBdFNoYWRvd0JvdW5kYXJ5KEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29udGFpbmVyTm9k
ZSogcGFyZW50Tm9kZSA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICByZXR1cm4gcGFyZW50
Tm9kZSAmJiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKK30KKworUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQs
IFJlbmRlclN0eWxlKiBkZWZhdWx0UGFyZW50LAorICAgIFN0eWxlU2hhcmluZ0JlaGF2aW9yIHNo
YXJpbmdCZWhhdmlvciwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwgUmVu
ZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKQoreworICAgIC8vIE9uY2UgYW4gZWxlbWVudCBo
YXMgYSByZW5kZXJlciwgd2UgZG9uJ3QgdHJ5IHRvIGRlc3Ryb3kgaXQsIHNpbmNlIG90aGVyd2lz
ZSB0aGUgcmVuZGVyZXIKKyAgICAvLyB3aWxsIHZhbmlzaCBpZiBhIHN0eWxlIHJlY2FsYyBoYXBw
ZW5zIGR1cmluZyBsb2FkaW5nLgorICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHls
ZVNoYXJpbmcgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgp
ICYmICFlbGVtZW50LT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmICghc19zdHlsZU5vdFlldEF2
YWlsYWJsZSkgeworICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZSA9IFJlbmRlclN0
eWxlOjpjcmVhdGUoKS5sZWFrUmVmKCk7CisgICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxh
YmxlLT5zZXREaXNwbGF5KE5PTkUpOworICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJs
ZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAgICAgIH0KKyAgICAgICAgZWxl
bWVudC0+ZG9jdW1lbnQoKS0+c2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOworICAg
ICAgICByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKKyAgICB9CisKKyAgICBpbml0RWxl
bWVudChlbGVtZW50KTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGVsZW1lbnQsIGRlZmF1bHRQ
YXJlbnQpOworICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7CisgICAg
aWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZykgeworICAgICAgICBSZW5k
ZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOworICAgICAgICBpZiAo
c2hhcmVkU3R5bGUpCisgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7CisgICAgfQorCisg
ICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKworICAgIGlmIChtX3BhcmVudFN0
eWxlKQorICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgbV9wYXJlbnRTdHlsZSA9IHN0eWxlKCk7CisgICAgICAgIC8vIE1ha2Ug
c3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBm
cm9tIG91ciBwYXJlbnQgc3R5bGUuCisgICAgICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7
CisgICAgfQorCisgICAgLy8gRXZlbiBpZiBzdXJyb3VuZGluZyBjb250ZW50IGlzIHVzZXItZWRp
dGFibGUsIHNoYWRvdyBET00gc2hvdWxkIGFjdCBhcyBhIHNpbmdsZSB1bml0LCBhbmQgbm90IG5l
Y2Vzc2FyaWx5IGJlIGVkaXRhYmxlCisgICAgaWYgKGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50
KSkKKyAgICAgICAgbV9zdHlsZS0+c2V0VXNlck1vZGlmeShSZW5kZXJTdHlsZTo6aW5pdGlhbFVz
ZXJNb2RpZnkoKSk7CisKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpIHsKKyAgICAgICAgbV9z
dHlsZS0+c2V0SXNMaW5rKHRydWUpOworICAgICAgICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKG1f
ZWxlbWVudExpbmtTdGF0ZSk7CisgICAgfQorCisgICAgZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRz
Rm9yRWxlbWVudChlbGVtZW50KTsKKworICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OworICAg
IGlmIChtYXRjaGluZ0JlaGF2aW9yID09IE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzKQorICAgICAg
ICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbWF0Y2hBbGxS
dWxlcyhtYXRjaFJlc3VsdCk7CisKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVz
dWx0KTsKKworICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0
ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgorICAgIGFkanVzdFJlbmRlclN0
eWxlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUsIGVsZW1lbnQpOworCisgICAgaW5pdEVsZW1lbnQo
MCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KKworICAgIC8vIE5vdyByZXR1
cm4gdGhlIHN0eWxlLgorICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKK30KKworUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBS
ZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwg
S2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKK3sKKyAgICBNYXRjaFJlc3VsdCByZXN1bHQ7
CisgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCisgICAgICAgIGFkZE1hdGNoZWRQcm9w
ZXJ0aWVzKHJlc3VsdCwga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSk7CisKKyAgICBBU1NFUlQoIW1f
c3R5bGUpOworCisgICAgLy8gQ3JlYXRlIHRoZSBzdHlsZQorICAgIG1fc3R5bGUgPSBSZW5kZXJT
dHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKTsKKworICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsK
KworICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYm90aGVyIHdpdGggIWltcG9ydGFudC4gU2luY2Ug
dGhlcmUgaXMgb25seSBldmVyIG9uZQorICAgIC8vIGRlY2wsIHRoZXJlJ3Mgbm90aGluZyB0byBv
dmVycmlkZS4gU28ganVzdCBhZGQgdGhlIGZpcnN0IHByb3BlcnRpZXMuCisgICAgYm9vbCBpbmhl
cml0ZWRPbmx5ID0gZmFsc2U7CisgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCisgICAg
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8dHJ1ZT4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworCisgICAgLy8g
SWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgorICAg
IHVwZGF0ZUZvbnQoKTsKKworICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBz
dXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZQorICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1
ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhl
aWdodFZhbHVlKTsKKworICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzLgorICAg
IGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQorICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPGZhbHNlPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6
ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisKKyAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGll
ZCBieSBvbmUgb2YgdGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywKKyAgICAvLyBnbyBhaGVh
ZCBhbmQgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUuCisgICAgdXBkYXRlRm9udCgpOworCisgICAg
Ly8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgorICAgIGxv
YWRQZW5kaW5nSW1hZ2VzKCk7CisgICAgCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIC8v
IFN0YXJ0IGxvYWRpbmcgdGhlIHNoYWRlcnMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgorICAg
IGxvYWRQZW5kaW5nU2hhZGVycygpOworI2VuZGlmCisKKyAgICAvLyBBZGQgYWxsIHRoZSBhbmlt
YXRpbmcgcHJvcGVydGllcyB0byB0aGUga2V5ZnJhbWUuCisgICAgaWYgKFN0eWxlUHJvcGVydHlT
ZXQqIHN0eWxlRGVjbGFyYXRpb24gPSBrZXlmcmFtZS0+cHJvcGVydGllcygpKSB7CisgICAgICAg
IHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0eUNvdW50
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kp
IHsKKyAgICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkgPSBzdHlsZURlY2xhcmF0aW9u
LT5wcm9wZXJ0eUF0KGkpLmlkKCk7CisgICAgICAgICAgICAvLyBUaW1pbmctZnVuY3Rpb24gd2l0
aGluIGtleWZyYW1lcyBpcyBzcGVjaWFsLCBiZWNhdXNlIGl0IGlzIG5vdCBhbmltYXRlZDsgaXQg
anVzdAorICAgICAgICAgICAgLy8gZGVzY3JpYmVzIHRoZSB0aW1pbmcgZnVuY3Rpb24gYmV0d2Vl
biB0aGlzIGtleWZyYW1lIGFuZCB0aGUgbmV4dC4KKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAh
PSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKQorICAgICAgICAgICAg
ICAgIGtleWZyYW1lVmFsdWUuYWRkUHJvcGVydHkocHJvcGVydHkpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0
eWxlKiBlbGVtZW50U3R5bGUsIEtleWZyYW1lTGlzdCYgbGlzdCkKK3sKKyAgICBsaXN0LmNsZWFy
KCk7CisKKyAgICAvLyBHZXQgdGhlIGtleWZyYW1lc1J1bGUgZm9yIHRoaXMgbmFtZQorICAgIGlm
ICghZSB8fCBsaXN0LmFuaW1hdGlvbk5hbWUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fa2V5ZnJhbWVzUnVsZU1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBLZXlm
cmFtZXNSdWxlTWFwOjppdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzUnVsZU1hcC5maW5kKGxpc3Qu
YW5pbWF0aW9uTmFtZSgpLmltcGwoKSk7CisgICAgaWYgKGl0ID09IG1fa2V5ZnJhbWVzUnVsZU1h
cC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVz
KiBrZXlmcmFtZXNSdWxlID0gaXQtPnNlY29uZC5nZXQoKTsKKworICAgIC8vIENvbnN0cnVjdCBh
bmQgcG9wdWxhdGUgdGhlIHN0eWxlIGZvciBlYWNoIGtleWZyYW1lCisgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+JiBrZXlmcmFtZXMgPSBrZXlmcmFtZXNSdWxlLT5rZXlm
cmFtZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIC8vIEFwcGx5IHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUuIFRo
aXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxlbWVu
dAorICAgICAgICBpbml0RWxlbWVudChlKTsKKyAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShl
KTsKKworICAgICAgICBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSA9IGtleWZyYW1lc1tp
XS5nZXQoKTsKKworICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMCwgMCk7Cisg
ICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5
bGUsIGtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CisKKyAgICAgICAgLy8gQWRkIHRoaXMga2V5
ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRpbWVzCisgICAgICAgIFZlY3Rv
cjxmbG9hdD4ga2V5czsKKyAgICAgICAga2V5ZnJhbWUtPmdldEtleXMoa2V5cyk7CisgICAgICAg
IGZvciAoc2l6ZV90IGtleUluZGV4ID0gMDsga2V5SW5kZXggPCBrZXlzLnNpemUoKTsgKytrZXlJ
bmRleCkgeworICAgICAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRLZXkoa2V5c1trZXlJbmRleF0p
OworICAgICAgICAgICAgbGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1ZSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBJZiB0aGUgMCUga2V5ZnJhbWUgaXMgbWlzc2luZywgY3JlYXRlIGl0IChi
dXQgb25seSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3RoZXIga2V5ZnJhbWUpCisgICAgaW50
IGluaXRpYWxMaXN0U2l6ZSA9IGxpc3Quc2l6ZSgpOworICAgIGlmIChpbml0aWFsTGlzdFNpemUg
PiAwICYmIGxpc3RbMF0ua2V5KCkgIT0gMCkgeworICAgICAgICBzdGF0aWMgU3R5bGVLZXlmcmFt
ZSogemVyb1BlcmNlbnRLZXlmcmFtZTsKKyAgICAgICAgaWYgKCF6ZXJvUGVyY2VudEtleWZyYW1l
KSB7CisgICAgICAgICAgICB6ZXJvUGVyY2VudEtleWZyYW1lID0gU3R5bGVLZXlmcmFtZTo6Y3Jl
YXRlKCkubGVha1JlZigpOworICAgICAgICAgICAgemVyb1BlcmNlbnRLZXlmcmFtZS0+c2V0S2V5
VGV4dCgiMCUiKTsKKyAgICAgICAgfQorICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFs
dWUoMCwgMCk7CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFt
ZShlbGVtZW50U3R5bGUsIHplcm9QZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAg
ICAgICAgbGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1ZSk7CisgICAgfQorCisgICAgLy8gSWYgdGhl
IDEwMCUga2V5ZnJhbWUgaXMgbWlzc2luZywgY3JlYXRlIGl0IChidXQgb25seSBpZiB0aGVyZSBp
cyBhdCBsZWFzdCBvbmUgb3RoZXIga2V5ZnJhbWUpCisgICAgaWYgKGluaXRpYWxMaXN0U2l6ZSA+
IDAgJiYgKGxpc3RbbGlzdC5zaXplKCkgLSAxXS5rZXkoKSAhPSAxKSkgeworICAgICAgICBzdGF0
aWMgU3R5bGVLZXlmcmFtZSogaHVuZHJlZFBlcmNlbnRLZXlmcmFtZTsKKyAgICAgICAgaWYgKCFo
dW5kcmVkUGVyY2VudEtleWZyYW1lKSB7CisgICAgICAgICAgICBodW5kcmVkUGVyY2VudEtleWZy
YW1lID0gU3R5bGVLZXlmcmFtZTo6Y3JlYXRlKCkubGVha1JlZigpOworICAgICAgICAgICAgaHVu
ZHJlZFBlcmNlbnRLZXlmcmFtZS0+c2V0S2V5VGV4dCgiMTAwJSIpOworICAgICAgICB9CisgICAg
ICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgxLCAwKTsKKyAgICAgICAga2V5ZnJhbWVW
YWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwgaHVuZHJlZFBlcmNl
bnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBsaXN0Lmluc2VydChrZXlmcmFt
ZVZhbHVlKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsZW1lbnQqIGUsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3sKKyAgICBpZiAoIWUpCisgICAgICAgIHJldHVybiAw
OworCisgICAgaW5pdEVsZW1lbnQoZSk7CisKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIHBh
cmVudFN0eWxlLCBwc2V1ZG8pOworICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7
CisKKyAgICBpZiAobV9wYXJlbnRTdHlsZSkKKyAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20o
bV9wYXJlbnRTdHlsZSk7CisKKyAgICAvLyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1l
bnRzIGluIGFueSBvZiBvdXIgcXVpcmsvcHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2Fz
dGUgdGltZSB3YWxraW5nCisgICAgLy8gdGhvc2UgcnVsZXMuCisKKyAgICAvLyBDaGVjayBVQSwg
dXNlciBhbmQgYXV0aG9yIHJ1bGVzLgorICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OworICAg
IG1hdGNoVUFSdWxlcyhtYXRjaFJlc3VsdCk7CisKKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMpIHsKKyAgICAgICAgbWF0Y2hVc2VyUnVsZXMobWF0Y2hSZXN1bHQsIGZhbHNlKTsK
KyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhtYXRjaFJlc3VsdCwgZmFsc2UpOworICAgIH0KKwor
ICAgIGlmIChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgbV9zdHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CisKKyAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0KTsKKworICAgIC8vIENsZWFuIHVwIG91
ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhl
ciBmaXh1cHMpLgorICAgIGFkanVzdFJlbmRlclN0eWxlKHN0eWxlKCksIHBhcmVudFN0eWxlLCAw
KTsKKworICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHls
ZS4KKyAgICBsb2FkUGVuZGluZ0ltYWdlcygpOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQor
ICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIHNoYWRlcnMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxl
LgorICAgIGxvYWRQZW5kaW5nU2hhZGVycygpOworI2VuZGlmCisKKyAgICAvLyBOb3cgcmV0dXJu
IHRoZSBzdHlsZS4KKyAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4
KQoreworICAgIGluaXRGb3JTdHlsZVJlc29sdmUobV9jaGVja2VyLmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBk
b2N1bWVudCBzdHlsZS4KKworICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Cisg
ICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9yb290RWxlbWVudFN0eWxlKTsKKworICAgIGNvbnN0
IGJvb2wgaXNMZWZ0ID0gaXNMZWZ0UGFnZShwYWdlSW5kZXgpOworICAgIGNvbnN0IGJvb2wgaXNG
aXJzdCA9IGlzRmlyc3RQYWdlKHBhZ2VJbmRleCk7CisgICAgY29uc3QgU3RyaW5nIHBhZ2UgPSBw
YWdlTmFtZShwYWdlSW5kZXgpOworICAgIAorICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKKyAgICBt
YXRjaFBhZ2VSdWxlcyhyZXN1bHQsIGRlZmF1bHRQcmludFN0eWxlLCBpc0xlZnQsIGlzRmlyc3Qs
IHBhZ2UpOworICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV91c2VyU3R5bGUuZ2V0KCksIGlz
TGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIGF1
dGhvciBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMgcGVyIHRoZSBIVE1MNSBzcGVjLgorICAg
IG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0Zp
cnN0LCBwYWdlKTsKKyAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgYm9vbCBpbmhlcml0
ZWRPbmx5ID0gZmFsc2U7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczx0cnVlPihyZXN1bHQs
IGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVk
T25seSk7CisKKyAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVw
ZGF0ZSBpdCBub3cuCisgICAgdXBkYXRlRm9udCgpOworCisgICAgLy8gTGluZS1oZWlnaHQgaXMg
c2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgorICAgIGlm
IChtX2xpbmVIZWlnaHRWYWx1ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxp
bmVIZWlnaHQsIG1fbGluZUhlaWdodFZhbHVlKTsKKworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXM8ZmFsc2U+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKworICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2VzIHJl
ZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KKyAgICBsb2FkUGVuZGluZ0ltYWdlcygpOworCisjaWYg
RU5BQkxFKENTU19TSEFERVJTKQorICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIHNoYWRlcnMgcmVm
ZXJlbmNlZCBieSB0aGlzIHN0eWxlLgorICAgIGxvYWRQZW5kaW5nU2hhZGVycygpOworI2VuZGlm
CisKKyAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KKyAgICByZXR1cm4gbV9zdHlsZS5yZWxl
YXNlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUq
IHN0eWxlKQoreworICAgIC8vIEludHJpbnNpYyBtYXJnaW4gdmFsdWUuCisgICAgY29uc3QgaW50
IGludHJpbnNpY01hcmdpbiA9IDIgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgLy8g
RklYTUU6IFVzaW5nIHdpZHRoL2hlaWdodCBhbG9uZSBhbmQgbm90IGFsc28gZGVhbGluZyB3aXRo
IG1pbi13aWR0aC9tYXgtd2lkdGggaXMgZmxhd2VkLgorICAgIC8vIEZJWE1FOiBVc2luZyAicXVp
cmsiIHRvIGRlY2lkZSB0aGUgbWFyZ2luIHdhc24ndCBzZXQgaXMga2luZCBvZiBsYW1lLgorICAg
IGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKSB7CisgICAgICAgIGlmIChz
dHlsZS0+bWFyZ2luTGVmdCgpLnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2lu
TGVmdChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOworICAgICAgICBpZiAoc3R5bGUt
Pm1hcmdpblJpZ2h0KCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5SaWdo
dChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOworICAgIH0KKworICAgIGlmIChzdHls
ZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5Ub3AoKS5x
dWlyaygpKQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblRvcChMZW5ndGgoaW50cmluc2lj
TWFyZ2luLCBGaXhlZCkpOworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkJvdHRvbSgpLnF1aXJr
KCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luQm90dG9tKExlbmd0aChpbnRyaW5zaWNN
YXJnaW4sIEZpeGVkKSk7CisgICAgfQorfQorCitzdGF0aWMgRURpc3BsYXkgZXF1aXZhbGVudEJs
b2NrRGlzcGxheShFRGlzcGxheSBkaXNwbGF5LCBib29sIGlzRmxvYXRpbmcsIGJvb2wgc3RyaWN0
UGFyc2luZykKK3sKKyAgICBzd2l0Y2ggKGRpc3BsYXkpIHsKKyAgICBjYXNlIEJMT0NLOgorICAg
IGNhc2UgVEFCTEU6CisgICAgY2FzZSBCT1g6CisgICAgY2FzZSBGTEVYQk9YOgorI2lmIEVOQUJM
RShDU1NfR1JJRF9MQVlPVVQpCisgICAgY2FzZSBHUklEOgorI2VuZGlmCisgICAgICAgIHJldHVy
biBkaXNwbGF5OworCisgICAgY2FzZSBMSVNUX0lURU06CisgICAgICAgIC8vIEl0IGlzIGEgV2lu
SUUgYnVnIHRoYXQgZmxvYXRlZCBsaXN0IGl0ZW1zIGxvc2UgdGhlaXIgYnVsbGV0cywgc28gd2Un
bGwgZW11bGF0ZSB0aGUgcXVpcmssIGJ1dCBvbmx5IGluIHF1aXJrcyBtb2RlLgorICAgICAgICBp
ZiAoIXN0cmljdFBhcnNpbmcgJiYgaXNGbG9hdGluZykKKyAgICAgICAgICAgIHJldHVybiBCTE9D
SzsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXk7CisgICAgY2FzZSBJTkxJTkVfVEFCTEU6CisgICAg
ICAgIHJldHVybiBUQUJMRTsKKyAgICBjYXNlIElOTElORV9CT1g6CisgICAgICAgIHJldHVybiBC
T1g7CisgICAgY2FzZSBJTkxJTkVfRkxFWEJPWDoKKyAgICAgICAgcmV0dXJuIEZMRVhCT1g7Cisj
aWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKyAgICBjYXNlIElOTElORV9HUklEOgorICAgICAg
ICByZXR1cm4gR1JJRDsKKyNlbmRpZgorCisgICAgY2FzZSBJTkxJTkU6CisgICAgY2FzZSBSVU5f
SU46CisgICAgY2FzZSBDT01QQUNUOgorICAgIGNhc2UgSU5MSU5FX0JMT0NLOgorICAgIGNhc2Ug
VEFCTEVfUk9XX0dST1VQOgorICAgIGNhc2UgVEFCTEVfSEVBREVSX0dST1VQOgorICAgIGNhc2Ug
VEFCTEVfRk9PVEVSX0dST1VQOgorICAgIGNhc2UgVEFCTEVfUk9XOgorICAgIGNhc2UgVEFCTEVf
Q09MVU1OX0dST1VQOgorICAgIGNhc2UgVEFCTEVfQ09MVU1OOgorICAgIGNhc2UgVEFCTEVfQ0VM
TDoKKyAgICBjYXNlIFRBQkxFX0NBUFRJT046CisgICAgICAgIHJldHVybiBCTE9DSzsKKyAgICBj
YXNlIE5PTkU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
Tk9ORTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEJMT0NL
OworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxl
KiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50ICplKQoreworICAgIC8v
IENhY2hlIG91ciBvcmlnaW5hbCBkaXNwbGF5LgorICAgIHN0eWxlLT5zZXRPcmlnaW5hbERpc3Bs
YXkoc3R5bGUtPmRpc3BsYXkoKSk7CisKKyAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSAhPSBOT05F
KSB7CisgICAgICAgIC8vIElmIHdlIGhhdmUgYSA8dGQ+IHRoYXQgc3BlY2lmaWVzIGEgZmxvYXQg
cHJvcGVydHksIGluIHF1aXJrcyBtb2RlIHdlIGp1c3QgZHJvcCB0aGUgZmxvYXQKKyAgICAgICAg
Ly8gcHJvcGVydHkuCisgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6
aW5saW5lL2Jsb2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdlIGZv
cmNlCisgICAgICAgIC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMu
CisgICAgICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSAmJiBlKSB7CisgICAgICAg
ICAgICBpZiAoZS0+aGFzVGFnTmFtZSh0ZFRhZykpIHsKKyAgICAgICAgICAgICAgICBzdHlsZS0+
c2V0RGlzcGxheShUQUJMRV9DRUxMKTsKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RmxvYXRp
bmcoTm9GbG9hdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNU
YWdOYW1lKHRhYmxlVGFnKSkKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShzdHls
ZS0+aXNEaXNwbGF5SW5saW5lVHlwZSgpID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUodGRUYWcpIHx8IGUtPmhhc1Rh
Z05hbWUodGhUYWcpKSkgeworICAgICAgICAgICAgaWYgKHN0eWxlLT53aGl0ZVNwYWNlKCkgPT0g
S0hUTUxfTk9XUkFQKSB7CisgICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBhcmUg
cmVhbGx5IG5vd3JhcHBpbmcgb3IgaWYgd2Ugc2hvdWxkIGp1c3QKKyAgICAgICAgICAgICAgICAv
LyB1c2Ugbm9ybWFsIGluc3RlYWQuICBJZiB0aGUgd2lkdGggb2YgdGhlIGNlbGwgaXMgZml4ZWQs
IHRoZW4KKyAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBhY3R1YWxseSB1c2UgTk9XUkFQLgor
ICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ZpeGVkKCkpCisgICAgICAgICAg
ICAgICAgICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKE5PUk1BTCk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShOT1dSQVApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gVGFibGVzIG5ldmVyIHN1cHBv
cnQgdGhlIC13ZWJraXQtKiB2YWx1ZXMgZm9yIHRleHQtYWxpZ24gYW5kIHdpbGwgcmVzZXQgYmFj
ayB0byB0aGUgZGVmYXVsdC4KKyAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZSh0YWJsZVRh
ZykgJiYgKHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfTEVGVCB8fCBzdHlsZS0+dGV4dEFs
aWduKCkgPT0gV0VCS0lUX0NFTlRFUiB8fCBzdHlsZS0+dGV4dEFsaWduKCkgPT0gV0VCS0lUX1JJ
R0hUKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRUZXh0QWxpZ24oVEFBVVRPKTsKKworICAgICAg
ICAvLyBGcmFtZXMgYW5kIGZyYW1lc2V0cyBuZXZlciBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBv
ciBwb3NpdGlvbjphYnNvbHV0ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvCisgICAgICAgIC8vIGZp
eCBhIGNyYXNoIHdoZXJlIGEgc2l0ZSB0cmllcyB0byBwb3NpdGlvbiB0aGVzZSBvYmplY3RzLiAg
VGhleSBhbHNvIG5ldmVyIGhvbm9yIGRpc3BsYXkuCisgICAgICAgIGlmIChlICYmIChlLT5oYXNU
YWdOYW1lKGZyYW1lVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSkpIHsKKyAgICAg
ICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihTdGF0aWNQb3NpdGlvbik7CisgICAgICAgICAgICBz
dHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSdWJ5IHRl
eHQgZG9lcyBub3Qgc3VwcG9ydCBmbG9hdCBvciBwb3NpdGlvbi4gVGhpcyBtaWdodCBjaGFuZ2Ug
d2l0aCBldm9sdXRpb24gb2YgdGhlIHNwZWNpZmljYXRpb24uCisgICAgICAgIGlmIChlICYmIGUt
Pmhhc1RhZ05hbWUocnRUYWcpKSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU3Rh
dGljUG9zaXRpb24pOworICAgICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gVGFibGUgaGVhZGVycyB3aXRoIGEgdGV4dC1hbGlnbiBv
ZiBhdXRvIHdpbGwgY2hhbmdlIHRoZSB0ZXh0LWFsaWduIHRvIGNlbnRlci4KKyAgICAgICAgaWYg
KGUgJiYgZS0+aGFzVGFnTmFtZSh0aFRhZykgJiYgc3R5bGUtPnRleHRBbGlnbigpID09IFRBQVVU
TykKKyAgICAgICAgICAgIHN0eWxlLT5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsKKworICAgICAgICBp
ZiAoZSAmJiBlLT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykpCisgICAgICAgICAgICBzdHlsZS0+c2V0
RGlzcGxheShCTE9DSyk7CisKKyAgICAgICAgLy8gQWJzb2x1dGUvZml4ZWQgcG9zaXRpb25lZCBl
bGVtZW50cywgZmxvYXRpbmcgZWxlbWVudHMgYW5kIHRoZSBkb2N1bWVudCBlbGVtZW50IG5lZWQg
YmxvY2stbGlrZSBvdXRzaWRlIGRpc3BsYXkuCisgICAgICAgIGlmIChzdHlsZS0+cG9zaXRpb24o
KSA9PSBBYnNvbHV0ZVBvc2l0aW9uIHx8IHN0eWxlLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRp
b24gfHwgc3R5bGUtPmlzRmxvYXRpbmcoKSB8fCAoZSAmJiBlLT5kb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKSA9PSBlKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KGVxdWl2YWxl
bnRCbG9ja0Rpc3BsYXkoc3R5bGUtPmRpc3BsYXkoKSwgc3R5bGUtPmlzRmxvYXRpbmcoKSwgbV9j
aGVja2VyLnN0cmljdFBhcnNpbmcoKSkpOworCisgICAgICAgIC8vIEZJWE1FOiBEb24ndCBzdXBw
b3J0IHRoaXMgbXV0YXRpb24gZm9yIHBzZXVkbyBzdHlsZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3Ig
Zmlyc3QtbGluZSwgc2luY2UgaXQncyBub3QgY29tcGxldGVseQorICAgICAgICAvLyBjbGVhciBo
b3cgdGhhdCBzaG91bGQgd29yay4KKyAgICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5M
SU5FICYmIHN0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETyAmJiBwYXJlbnRTdHlsZSAmJiBz
dHlsZS0+d3JpdGluZ01vZGUoKSAhPSBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSkKKyAgICAg
ICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7CisKKyAgICAgICAgLy8gQWZ0
ZXIgcGVyZm9ybWluZyB0aGUgZGlzcGxheSBtdXRhdGlvbiwgY2hlY2sgdGFibGUgcm93cy4gIFdl
IGRvIG5vdCBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvbgorICAgICAgICAvLyB0YWJsZSByb3dz
IG9yIGNlbGxzLiAgVGhpcyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBpbiBDU1MyLjEgKGFuZCBjYXVz
ZWQgYSBjcmFzaCBpbiBjb250YWluaW5nQmxvY2soKQorICAgICAgICAvLyBvbiBzb21lIHNpdGVz
KS4KKyAgICAgICAgaWYgKChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0hFQURFUl9HUk9VUCB8
fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPV19HUk9VUAorICAgICAgICAgICAgIHx8IHN0
eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfRk9PVEVSX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkg
PT0gVEFCTEVfUk9XKSAmJgorICAgICAgICAgICAgIHN0eWxlLT5wb3NpdGlvbigpID09IFJlbGF0
aXZlUG9zaXRpb24pCisgICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU3RhdGljUG9zaXRp
b24pOworCisgICAgICAgIC8vIHdyaXRpbmctbW9kZSBkb2VzIG5vdCBhcHBseSB0byB0YWJsZSBy
b3cgZ3JvdXBzLCB0YWJsZSBjb2x1bW4gZ3JvdXBzLCB0YWJsZSByb3dzLCBhbmQgdGFibGUgY29s
dW1ucy4KKyAgICAgICAgLy8gRklYTUU6IFRhYmxlIGNlbGxzIHNob3VsZCBiZSBhbGxvd2VkIHRv
IGJlIHBlcnBlbmRpY3VsYXIgb3IgZmxpcHBlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHRhYmxlLCB0
aG91Z2guCisgICAgICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0NPTFVNTiB8fCBz
dHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0NPTFVNTl9HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgp
ID09IFRBQkxFX0ZPT1RFUl9HUk9VUAorICAgICAgICAgICAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9
PSBUQUJMRV9IRUFERVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cgfHwg
c3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1dfR1JPVVAKKyAgICAgICAgICAgIHx8IHN0eWxl
LT5kaXNwbGF5KCkgPT0gVEFCTEVfQ0VMTCkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRXcml0aW5n
TW9kZShwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSk7CisKKyAgICAgICAgLy8gRklYTUU6IFNp
bmNlIHdlIGRvbid0IHN1cHBvcnQgYmxvY2stZmxvdyBvbiBmbGV4aWJsZSBib3hlcyB5ZXQsIGRp
c2FsbG93IHNldHRpbmcKKyAgICAgICAgLy8gb2YgYmxvY2stZmxvdyB0byBhbnl0aGluZyBvdGhl
ciB0aGFuIFRvcFRvQm90dG9tV3JpdGluZ01vZGUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjQxOCAtIEZsZXhpYmxlIGJveCBzdXBwb3J0Lgor
ICAgICAgICBpZiAoc3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gVG9wVG9Cb3R0b21Xcml0aW5nTW9k
ZSAmJiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBCT1ggfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJ
TkVfQk9YKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRXcml0aW5nTW9kZShUb3BUb0JvdHRvbVdy
aXRpbmdNb2RlKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgb3VyIHotaW5kZXggdmFsdWUg
aXMgb25seSBhcHBsaWVkIGlmIHRoZSBvYmplY3QgaXMgcG9zaXRpb25lZC4KKyAgICBpZiAoc3R5
bGUtPnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24pCisgICAgICAgIHN0eWxlLT5zZXRIYXNB
dXRvWkluZGV4KCk7CisKKyAgICAvLyBBdXRvIHotaW5kZXggYmVjb21lcyAwIGZvciB0aGUgcm9v
dCBlbGVtZW50IGFuZCB0cmFuc3BhcmVudCBvYmplY3RzLiAgVGhpcyBwcmV2ZW50cworICAgIC8v
IGNhc2VzIHdoZXJlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgYmxlbmRlZCBhcyBhIHNpbmdsZSB1
bml0IGVuZCB1cCB3aXRoIGEgbm9uLXRyYW5zcGFyZW50CisgICAgLy8gb2JqZWN0IHdlZGdlZCBp
biBiZXR3ZWVuIHRoZW0uICBBdXRvIHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9yIG9iamVjdHMg
dGhhdCBzcGVjaWZ5IHRyYW5zZm9ybXMvbWFza3MvcmVmbGVjdGlvbnMuCisgICAgaWYgKHN0eWxl
LT5oYXNBdXRvWkluZGV4KCkgJiYgKChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpID09IGUpIHx8IHN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmCisgICAgICAgIHx8IHN0eWxlLT5o
YXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSB8fCBzdHlsZS0+aGFzTWFzaygpIHx8IHN0eWxl
LT5ib3hSZWZsZWN0KCkgfHwgc3R5bGUtPmhhc0ZpbHRlcigpCisjaWZkZWYgRklYRURfUE9TSVRJ
T05fQ1JFQVRFU19TVEFDS0lOR19DT05URVhUCisgICAgICAgIHx8IHN0eWxlLT5wb3NpdGlvbigp
ID09IEZpeGVkUG9zaXRpb24KKyNlbmRpZgorI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkcp
CisgICAgICAgIC8vIFRvdWNoIG92ZXJmbG93IHNjcm9sbGluZyBjcmVhdGVzIGEgc3RhY2tpbmcg
Y29udGV4dC4KKyAgICAgICAgfHwgc3R5bGUtPnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKQor
I2VuZGlmCisgICAgICAgICkpCisgICAgICAgIHN0eWxlLT5zZXRaSW5kZXgoMCk7CisKKyAgICAv
LyBUZXh0YXJlYSBjb25zaWRlcnMgb3ZlcmZsb3cgdmlzaWJsZSBhcyBhdXRvLgorICAgIGlmIChl
ICYmIGUtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKSB7CisgICAgICAgIHN0eWxlLT5zZXRPdmVy
Zmxvd1goc3R5bGUtPm92ZXJmbG93WCgpID09IE9WSVNJQkxFID8gT0FVVE8gOiBzdHlsZS0+b3Zl
cmZsb3dYKCkpOworICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKHN0eWxlLT5vdmVyZmxvd1ko
KSA9PSBPVklTSUJMRSA/IE9BVVRPIDogc3R5bGUtPm92ZXJmbG93WSgpKTsKKyAgICB9CisKKyAg
ICAvLyBGaW5hbGx5IHVwZGF0ZSBvdXIgdGV4dCBkZWNvcmF0aW9ucyBpbiBlZmZlY3QsIGJ1dCBk
b24ndCBhbGxvdyB0ZXh0LWRlY29yYXRpb24gdG8gcGVyY29sYXRlIHRocm91Z2gKKyAgICAvLyB0
YWJsZXMsIGlubGluZSBibG9ja3MsIGlubGluZSB0YWJsZXMsIHJ1bi1pbnMsIG9yIHNoYWRvdyBE
T00uCisgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEUgfHwgc3R5bGUtPmRpc3BsYXko
KSA9PSBJTkxJTkVfVEFCTEUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBSVU5fSU4KKyAgICAgICAg
fHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVfQkxPQ0sgfHwgc3R5bGUtPmRpc3BsYXkoKSA9
PSBJTkxJTkVfQk9YIHx8IGlzQXRTaGFkb3dCb3VuZGFyeShlKSkKKyAgICAgICAgc3R5bGUtPnNl
dFRleHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpKTsKKyAgICBl
bHNlCisgICAgICAgIHN0eWxlLT5hZGRUb1RleHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLT50
ZXh0RGVjb3JhdGlvbigpKTsKKworICAgIC8vIElmIGVpdGhlciBvdmVyZmxvdyB2YWx1ZSBpcyBu
b3QgdmlzaWJsZSwgY2hhbmdlIHRvIGF1dG8uCisgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9
PSBPTUFSUVVFRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT01BUlFVRUUpCisgICAgICAgIHN0
eWxlLT5zZXRPdmVyZmxvd1koT01BUlFVRUUpOworICAgIGVsc2UgaWYgKHN0eWxlLT5vdmVyZmxv
d1koKSA9PSBPTUFSUVVFRSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT01BUlFVRUUpCisgICAg
ICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT01BUlFVRUUpOworICAgIGVsc2UgaWYgKHN0eWxlLT5v
dmVyZmxvd1goKSA9PSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUp
CisgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT0FVVE8pOworICAgIGVsc2UgaWYgKHN0eWxl
LT5vdmVyZmxvd1koKSA9PSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lC
TEUpCisgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koT0FVVE8pOworCisgICAgLy8gVGFibGUg
cm93cywgc2VjdGlvbnMgYW5kIHRoZSB0YWJsZSBpdHNlbGYgd2lsbCBzdXBwb3J0IG92ZXJmbG93
OmhpZGRlbiBhbmQgd2lsbCBpZ25vcmUgc2Nyb2xsL2F1dG8uCisgICAgLy8gRklYTUU6IEV2ZW50
dWFsbHkgdGFibGUgc2VjdGlvbnMgd2lsbCBzdXBwb3J0IGF1dG8gYW5kIHNjcm9sbC4KKyAgICBp
ZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElO
RV9UQUJMRSB8fAorICAgICAgICBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPV19HUk9VUCB8
fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVykgeworICAgICAgICBpZiAoc3R5bGUtPm92
ZXJmbG93WCgpICE9IE9WSVNJQkxFICYmIHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPSElEREVOKQor
ICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPVklTSUJMRSk7CisgICAgICAgIGlmIChz
dHlsZS0+b3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9I
SURERU4pCisgICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9WSVNJQkxFKTsKKyAgICB9
CisKKyAgICAvLyBNZW51bGlzdHMgc2hvdWxkIGhhdmUgdmlzaWJsZSBvdmVyZmxvdworICAgIGlm
IChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkgeworICAgICAgICBzdHlsZS0+
c2V0T3ZlcmZsb3dYKE9WSVNJQkxFKTsKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklT
SUJMRSk7CisgICAgfQorCisgICAgLy8gQ3VsbCBvdXQgYW55IHVzZWxlc3MgbGF5ZXJzIGFuZCBh
bHNvIHJlcGVhdCBwYXR0ZXJucyBpbnRvIGFkZGl0aW9uYWwgbGF5ZXJzLgorICAgIHN0eWxlLT5h
ZGp1c3RCYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgc3R5bGUtPmFkanVzdE1hc2tMYXllcnMoKTsK
KworICAgIC8vIERvIHRoZSBzYW1lIGZvciBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucy4KKyAg
ICBzdHlsZS0+YWRqdXN0QW5pbWF0aW9ucygpOworICAgIHN0eWxlLT5hZGp1c3RUcmFuc2l0aW9u
cygpOworCisgICAgLy8gSW1wb3J0YW50OiBJbnRyaW5zaWMgbWFyZ2lucyBnZXQgYWRkZWQgdG8g
Y29udHJvbHMgYmVmb3JlIHRoZSB0aGVtZSBoYXMgYWRqdXN0ZWQgdGhlIHN0eWxlLCBzaW5jZSB0
aGUgdGhlbWUgd2lsbAorICAgIC8vIGFsdGVyIGZvbnRzIGFuZCBoZWlnaHRzL3dpZHRocy4KKyAg
ICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIHN0eWxlLT5mb250U2l6ZSgp
ID49IDExKSB7CisgICAgICAgIC8vIERvbid0IGFwcGx5IGludHJpbnNpYyBtYXJnaW5zIHRvIGlt
YWdlIGJ1dHRvbnMuICBUaGUgZGVzaWduZXIga25vd3MgaG93IGJpZyB0aGUgaW1hZ2VzIGFyZSwK
KyAgICAgICAgLy8gc28gd2UgaGF2ZSB0byB0cmVhdCBhbGwgaW1hZ2UgYnV0dG9ucyBhcyB0aG91
Z2ggdGhleSB3ZXJlIGV4cGxpY2l0bHkgc2l6ZWQuCisgICAgICAgIGlmICghZS0+aGFzVGFnTmFt
ZShpbnB1dFRhZykgfHwgIXN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlKS0+aXNJbWFn
ZUJ1dHRvbigpKQorICAgICAgICAgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7CisgICAg
fQorCisgICAgLy8gTGV0IHRoZSB0aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3Rpbmcg
dGhlIHN0eWxlLgorICAgIGlmIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpKQorICAgICAgICBSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX2hh
c1VBQXBwZWFyYW5jZSwgbV9ib3JkZXJEYXRhLCBtX2JhY2tncm91bmREYXRhLCBtX2JhY2tncm91
bmRDb2xvcik7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUs
IGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgorICAgIGlmIChzdHlsZS0+aGFzUHNldWRvU3R5bGUo
RklSU1RfTEVUVEVSKSkKKyAgICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOworCisgICAgLy8gRklY
TUU6IHdoZW4gZHJvcHBpbmcgdGhlIC13ZWJraXQgcHJlZml4IG9uIHRyYW5zZm9ybS1zdHlsZSwg
d2Ugc2hvdWxkIGFsc28gaGF2ZSBvcGFjaXR5IDwgMSBjYXVzZSBmbGF0dGVuaW5nLgorICAgIGlm
IChzdHlsZS0+cHJlc2VydmVzM0QoKSAmJiAoc3R5bGUtPm92ZXJmbG93WCgpICE9IE9WSVNJQkxF
CisgICAgICAgIHx8IHN0eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJMRQorICAgICAgICB8fCBz
dHlsZS0+aGFzRmlsdGVyKCkpKQorICAgICAgICBzdHlsZS0+c2V0VHJhbnNmb3JtU3R5bGUzRChU
cmFuc2Zvcm1TdHlsZTNERmxhdCk7CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGlmIChlICYmIGUt
PmlzU1ZHRWxlbWVudCgpKSB7CisgICAgICAgIC8vIFNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRy9tYXNraW5nLmh0bWwjT3ZlcmZsb3dQcm9wZXJ0eQorICAgICAgICBpZiAoc3R5bGUtPm92
ZXJmbG93WSgpID09IE9TQ1JPTEwpCisgICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9I
SURERU4pOworICAgICAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT0FVVE8pCisg
ICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9WSVNJQkxFKTsKKworICAgICAgICBpZiAo
c3R5bGUtPm92ZXJmbG93WCgpID09IE9TQ1JPTEwpCisgICAgICAgICAgICBzdHlsZS0+c2V0T3Zl
cmZsb3dYKE9ISURERU4pOworICAgICAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0g
T0FVVE8pCisgICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9WSVNJQkxFKTsKKworICAg
ICAgICAvLyBPbmx5IHRoZSByb290IDxzdmc+IGVsZW1lbnQgaW4gYW4gU1ZHIGRvY3VtZW50IGZy
YWdtZW50IHRyZWUgaG9ub3JzIGNzcyBwb3NpdGlvbgorICAgICAgICBpZiAoIShlLT5oYXNUYWdO
YW1lKFNWR05hbWVzOjpzdmdUYWcpICYmIGUtPnBhcmVudE5vZGUoKSAmJiAhZS0+cGFyZW50Tm9k
ZSgpLT5pc1NWR0VsZW1lbnQoKSkpCisgICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oUmVu
ZGVyU3R5bGU6OmluaXRpYWxQb3NpdGlvbigpKTsKKworICAgICAgICAvLyBSZW5kZXJTVkdSb290
IGhhbmRsZXMgem9vbWluZyBmb3IgdGhlIHdob2xlIFNWRyBzdWJ0cmVlLCBzbyBmb3JlaWduT2Jq
ZWN0IGNvbnRlbnQgc2hvdWxkCisgICAgICAgIC8vIG5vdCBiZSBzY2FsZWQgYWdhaW4uCisgICAg
ICAgIGlmIChlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb3JlaWduT2JqZWN0VGFnKSkKKyAgICAg
ICAgICAgIHN0eWxlLT5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgp
KTsKKyAgICB9CisjZW5kaWYKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblN0
eWxlKEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpCit7CisgICAgLy8gRklYTUUgKEJVRyA3MjQ3Mik6
IFdlIGRvbid0IGFkZCBALXdlYmtpdC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0
cyBmb3IgdGhlIG1vbWVudCwKKyAgICAvLyBzbyBhbGwgcmVnaW9uIHJ1bGVzIGFyZSBnbG9iYWwg
YnkgZGVmYXVsdC4gVmVyaWZ5IHdoZXRoZXIgdGhhdCBjYW4gc3RhbmQgb3IgbmVlZHMgY2hhbmdp
bmcuCisKKyAgICB1bnNpZ25lZCBydWxlc1NpemUgPSBtX2F1dGhvclN0eWxlLT5tX3JlZ2lvblNl
bGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cnVsZXNTaXplOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9u
U2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKSk7CisgICAgICAgIGlmIChj
aGVja1JlZ2lvblNlbGVjdG9yKG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVs
ZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fdXNlclN0eWxlKSB7CisgICAgICAgIHJ1bGVzU2l6
ZSA9IG1fdXNlclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7CisgICAgICAg
ICAgICBBU1NFUlQobV91c2VyU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQo
aSkucnVsZVNldC5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3Rvciht
X3VzZXJTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3Rvciwg
cmVnaW9uRWxlbWVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6dXBk
YXRlRm9udCgpCit7CisgICAgaWYgKCFtX2ZvbnREaXJ0eSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOworICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNo
YW5nZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsKKyAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5
bGUoKSwgbV9wYXJlbnRTdHlsZSk7CisgICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRT
ZWxlY3Rvcik7CisgICAgbV9mb250RGlydHkgPSBmYWxzZTsKK30KKwordm9pZCBTdHlsZVJlc29s
dmVyOjpjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQoreworICAgIG1faGFzVUFBcHBlYXJhbmNl
ID0gbV9zdHlsZS0+aGFzQXBwZWFyYW5jZSgpOworICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkg
eworICAgICAgICBtX2JvcmRlckRhdGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsKKyAgICAgICAgbV9i
YWNrZ3JvdW5kRGF0YSA9ICptX3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgICAgIG1f
YmFja2dyb3VuZENvbG9yID0gbV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgfQorfQor
CitQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxl
bWVudChFbGVtZW50KiBlLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKK3sKKyAgICByZXR1cm4g
cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZSwgTk9QU0VVRE8sIHJ1bGVzVG9JbmNsdWRlKTsK
K30KKworUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVS
dWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHNldWRvSWQgcHNldWRvSWQsIHVuc2lnbmVkIHJ1
bGVzVG9JbmNsdWRlKQoreworICAgIGlmICghZSB8fCAhZS0+ZG9jdW1lbnQoKS0+aGF2ZVN0eWxl
c2hlZXRzTG9hZGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9jaGVja2VyLnNldENv
bGxlY3RpbmdSdWxlc09ubHkodHJ1ZSk7CisKKyAgICBpbml0RWxlbWVudChlKTsKKyAgICBpbml0
Rm9yU3R5bGVSZXNvbHZlKGUsIDAsIHBzZXVkb0lkKTsKKworICAgIE1hdGNoUmVzdWx0IGR1bW15
OworICAgIGlmIChydWxlc1RvSW5jbHVkZSAmIFVBQW5kVXNlckNTU1J1bGVzKSB7CisgICAgICAg
IC8vIEZpcnN0IHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHVzZXIgYWdlbnQgc2hlZXQuCisgICAg
ICAgIG1hdGNoVUFSdWxlcyhkdW1teSk7CisKKyAgICAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIg
c2hlZXQgcnVsZXMuCisgICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAg
ICAgICAgICAgIG1hdGNoVXNlclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NT
UnVsZXMpOworICAgIH0KKworICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiAo
cnVsZXNUb0luY2x1ZGUgJiBBdXRob3JDU1NSdWxlcykpIHsKKyAgICAgICAgbV9zYW1lT3JpZ2lu
T25seSA9ICEocnVsZXNUb0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKTsKKworICAgICAg
ICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KKyAgICAgICAgbWF0Y2hBdXRo
b3JSdWxlcyhkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKworICAgICAg
ICBtX3NhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CisgICAgfQorCisgICAgbV9jaGVja2VyLnNldENv
bGxlY3RpbmdSdWxlc09ubHkoZmFsc2UpOworCisgICAgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFz
ZSgpOworfQorCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1NlbGVjdG9yKGNvbnN0
IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAg
bV9keW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgbV9jaGVja2VyLmNsZWFySGFzVW5rbm93
blBzZXVkb0VsZW1lbnRzKCk7CisKKyAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKCkpIHsKKyAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMgbm90IGlu
Y2x1ZGUgYW55IHBzZXVkbyBlbGVtZW50cy4KKyAgICAgICAgaWYgKG1fY2hlY2tlci5wc2V1ZG9T
dHlsZSgpICE9IE5PUFNFVURPKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAv
LyBXZSBrbm93IGEgc3VmZmljaWVudGx5IHNpbXBsZSBzaW5nbGUgcGFydCBzZWxlY3RvciBtYXRj
aGVzIHNpbXBseSBiZWNhdXNlIHdlIGZvdW5kIGl0IGZyb20gdGhlIHJ1bGUgaGFzaC4KKyAgICAg
ICAgLy8gVGhpcyBpcyBsaW1pdGVkIHRvIEhUTUwgb25seSBzbyB3ZSBkb24ndCBuZWVkIHRvIGNo
ZWNrIHRoZSBuYW1lc3BhY2UuCisgICAgICAgIGlmIChydWxlRGF0YS5oYXNSaWdodG1vc3RTZWxl
Y3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpICYmIG1fZWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpKSB7CisgICAgICAgICAgICBpZiAoIXJ1bGVEYXRhLmhhc011bHRpcGFydFNlbGVjdG9y
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoIVNl
bGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhtX2VsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tl
cjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IobV9lbGVtZW50LCBydWxlRGF0
YS5zZWxlY3RvcigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IG1fY2hlY2tlci5mYXN0Q2hlY2tTZWxlY3RvcihydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1l
bnQpOworICAgIH0KKworICAgIC8vIFNsb3cgcGF0aC4KKyAgICBTZWxlY3RvckNoZWNrZXI6OlNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNvbnRleHQocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVt
ZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOworICAgIGNvbnRleHQu
ZWxlbWVudFN0eWxlID0gc3R5bGUoKTsKKyAgICBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA9
IG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7CisgICAgY29u
dGV4dC5zY29wZSA9IHNjb3BlOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBt
YXRjaCA9IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKGNvbnRleHQsIG1fZHluYW1pY1BzZXVkbyk7
CisgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpICE9IE5P
UFNFVURPICYmIG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpICE9IG1fZHluYW1pY1BzZXVkbykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0eWxlUmVz
b2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBF
bGVtZW50KiByZWdpb25FbGVtZW50KQoreworICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJl
Z2lvbkVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fY2hlY2tlci5jbGVh
ckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpOworICAgIG1fY2hlY2tlci5zZXRQc2V1ZG9TdHls
ZShOT1BTRVVETyk7CisKKyAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7
IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCisgICAgICAgIGlmIChtX2NoZWNrZXIu
Y2hlY2tTZWxlY3RvcihzLCByZWdpb25FbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBTdHlsZVJlc29sdmVyOjpkZXRl
cm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoU3R5bGVTaGVldEludGVybmFsKiBzdHlsZXNo
ZWV0LCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+JiBjbGFzc1Njb3BlcykKK3sKKyAgICBBU1NFUlQoIXN0eWxlc2hlZXQtPmlz
TG9hZGluZygpKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiA+
JiBpbXBvcnRSdWxlcyA9IHN0eWxlc2hlZXQtPmltcG9ydFJ1bGVzKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICgh
aW1wb3J0UnVsZXNbaV0tPnN0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAoIWRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhpbXBvcnRSdWxlc1tp
XS0+c3R5bGVTaGVldCgpLCBpZFNjb3BlcywgY2xhc3NTY29wZXMpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFz
ZT4gPiYgcnVsZXMgPSBzdHlsZXNoZWV0LT5jaGlsZFJ1bGVzKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJ1bGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFN0eWxlUnVsZUJhc2Uq
IHJ1bGUgPSBydWxlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkp
IHsKKyAgICAgICAgICAgIFN0eWxlUnVsZSogc3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVS
dWxlKj4ocnVsZSk7CisgICAgICAgICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5l
U2VsZWN0b3JTY29wZXMoc3R5bGVSdWxlLT5zZWxlY3Rvckxpc3QoKSwgaWRTY29wZXMsIGNsYXNz
U2NvcGVzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfSAKKyAgICAgICAgLy8gRklYTUU6IE1lZGlhIHJ1bGVzIGFuZCBtYXli
ZSBzb21lIG90aGVycyBjb3VsZCBiZSBhbGxvd2VkLgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgaW5saW5l
IGJvb2wgaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChjb25zdCBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IpCit7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3Rvck5hbWVz
cGFjZSA9IHNlbGVjdG9yLT50YWcoKS5uYW1lc3BhY2VVUkkoKTsKKyAgICBpZiAoc2VsZWN0b3JO
YW1lc3BhY2UgIT0gc3RhckF0b20gJiYgc2VsZWN0b3JOYW1lc3BhY2UgIT0geGh0bWxOYW1lc3Bh
Y2VVUkkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6Ok5vbmUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChzZWxl
Y3Rvci0+dGFnKCkgIT0gc3RhckF0b20pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
U2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OklkIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNlbGVjdG9yTGlzdENvbnRhaW5zVW5jb21tb25BdHRy
aWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgQ1NTU2Vs
ZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCk7CisgICAg
aWYgKCFzZWxlY3Rvckxpc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKENTU1Nl
bGVjdG9yKiBzdWJTZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3I7
IHN1YlNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9yKSkgeworICAg
ICAgICBpZiAoc3ViU2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpc0NvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZSkKK3sKKyAgICAvLyBUaGVzZSBhcmUgZXhwbGljaXRseSB0ZXN0ZWQg
Zm9yIGVxdWFsaXR5IGluIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudC4KKyAgICByZXR1cm4gYXR0
cmlidXRlID09IHR5cGVBdHRyIHx8IGF0dHJpYnV0ZSA9PSByZWFkb25seUF0dHI7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0b3Ig
PSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIC8vIEFsbG93IGNlcnRhaW4gY29t
bW9uIGF0dHJpYnV0ZXMgKHVzZWQgaW4gdGhlIGRlZmF1bHQgc3R5bGUpIGluIHRoZSBzZWxlY3Rv
cnMgdGhhdCBtYXRjaCB0aGUgY3VycmVudCBlbGVtZW50LgorICAgICAgICBpZiAoc2VsZWN0b3It
PmlzQXR0cmlidXRlU2VsZWN0b3IoKSAmJiAhaXNDb21tb25BdHRyaWJ1dGVTZWxlY3RvckF0dHJp
YnV0ZShzZWxlY3Rvci0+YXR0cmlidXRlKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Io
c2VsZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChzZWxlY3Rv
ci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKKyAgICAgICAgICAg
IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVj
dG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNl
bGVjdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHNlbGVjdG9y
TGlzdENvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitSdWxlRGF0
YTo6UnVsZURhdGEoU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIHVuc2ln
bmVkIHBvc2l0aW9uLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNl
RmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQorICAgIDogbV9ydWxlKHJ1bGUp
CisgICAgLCBtX3NlbGVjdG9yKHNlbGVjdG9yKQorICAgICwgbV9zcGVjaWZpY2l0eShzZWxlY3Rv
ci0+c3BlY2lmaWNpdHkoKSkKKyAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgLCBtX2hh
c0Zhc3RDaGVja2FibGVTZWxlY3RvcihjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciAmJiBTZWxlY3Rv
ckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAsIG1faGFz
TXVsdGlwYXJ0U2VsZWN0b3IoISFzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKQorICAgICwgbV9oYXNS
aWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChpc1NlbGVjdG9yTWF0
Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKHNlbGVjdG9yKSkKKyAgICAsIG1fY29udGFpbnNVbmNv
bW1vbkF0dHJpYnV0ZVNlbGVjdG9yKFdlYkNvcmU6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVT
ZWxlY3RvcihzZWxlY3RvcikpCisgICAgLCBtX2xpbmtNYXRjaFR5cGUoU2VsZWN0b3JDaGVja2Vy
OjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKHNlbGVjdG9yKSkKKyAgICAsIG1faGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbihoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICwgbV9pc0luUmVn
aW9uUnVsZShpblJlZ2lvblJ1bGUpCit7CisgICAgU2VsZWN0b3JDaGVja2VyOjpjb2xsZWN0SWRl
bnRpZmllckhhc2hlcyhtX3NlbGVjdG9yLCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJI
YXNoZXMsIG1heGltdW1JZGVudGlmaWVyQ291bnQpOworfQorCitSdWxlU2V0OjpSdWxlU2V0KCkK
KyAgICA6IG1fcnVsZUNvdW50KDApCisgICAgLCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQodHJ1
ZSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3Rv
cihTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvcikKK3sKKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6Oklk
KQorICAgICAgICBmZWF0dXJlcy5pZHNJblJ1bGVzLmFkZChzZWxlY3Rvci0+dmFsdWUoKS5pbXBs
KCkpOworICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICBm
ZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUo
KS5pbXBsKCkpOworICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgeworICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0TGluZToKKyAgICAgICAgZmVhdHVyZXMudXNlc0Zp
cnN0TGluZVJ1bGVzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQmVmb3JlOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FmdGVyOgorICAg
ICAgICBmZWF0dXJlcy51c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IHRydWU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6CisgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvVmlzaXRlZDoKKyAgICAgICAgZmVhdHVyZXMudXNlc0xpbmtSdWxlcyA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRhKFN0eWxlUmVzb2x2ZXI6
OkZlYXR1cmVzJiBmZWF0dXJlcywgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQoreworICAgIGJv
b2wgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSBmYWxzZTsKKyAgICBmb3IgKENTU1NlbGVjdG9yKiBz
ZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVj
dG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9y
KGZlYXR1cmVzLCBzZWxlY3Rvcik7CisgICAgICAgIAorICAgICAgICBpZiAoQ1NTU2VsZWN0b3JM
aXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKKyAgICAgICAg
ICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgp
OyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViU2Vs
ZWN0b3IpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFNpYmxpbmdTZWxlY3RvciAmJiBz
ZWxlY3Rvci0+aXNTaWJsaW5nU2VsZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgZm91bmRT
aWJsaW5nU2VsZWN0b3IgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbGxlY3RGZWF0dXJlc0Zy
b21TZWxlY3RvcihmZWF0dXJlcywgc3ViU2VsZWN0b3IpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKCFmb3VuZFNpYmxpbmdTZWxlY3RvciAmJiBzZWxlY3Rvci0+aXNTaWJsaW5n
U2VsZWN0b3IoKSkKKyAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKKyAg
ICB9CisgICAgaWYgKGZvdW5kU2libGluZ1NlbGVjdG9yKQorICAgICAgICBmZWF0dXJlcy5zaWJs
aW5nUnVsZXMuYXBwZW5kKFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlKHJ1bGVEYXRhLnJ1bGUo
KSwgcnVsZURhdGEuc2VsZWN0b3IoKSwgcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bigpKSk7CisgICAgaWYgKHJ1bGVEYXRhLmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rv
cigpKQorICAgICAgICBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChTdHls
ZVJlc29sdmVyOjpSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9y
KCksIHJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkpOworfQorICAgIAordm9p
ZCBSdWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1h
cCYgbWFwLCBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCit7CisgICAgaWYgKCFrZXkpCisgICAg
ICAgIHJldHVybjsKKyAgICBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+JiBydWxlcyA9IG1hcC5h
ZGQoa2V5LCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOworICAgIGlmICghcnVsZXMpCisgICAg
ICAgIHJ1bGVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSdWxlRGF0YT4pOworICAgIHJ1bGVzLT5h
cHBlbmQocnVsZURhdGEpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBy
dWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCit7Cisg
ICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3IsIG1fcnVsZUNvdW50KyssIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpblJlZ2lvblJ1
bGUpOworICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YShtX2ZlYXR1cmVzLCBydWxlRGF0
YSk7CisKKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKSB7Cisg
ICAgICAgIGFkZFRvUnVsZVNldChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCksIG1faWRSdWxlcywg
cnVsZURhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzZWxlY3Rvci0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKKyAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVj
dG9yLT52YWx1ZSgpLmltcGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlRGF0YSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKHNlbGVjdG9yLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCkp
IHsKKyAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9zaGFk
b3dQc2V1ZG9FbGVtZW50UnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2Vs
ZWN0b3IpKSB7CisgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgeworICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgorICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9WaXNpdGVkOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlM
aW5rOgorICAgICAgICAgICAgbV9saW5rUHNldWRvQ2xhc3NSdWxlcy5hcHBlbmQocnVsZURhdGEp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9G
b2N1czoKKyAgICAgICAgICAgIG1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzLmFwcGVuZChydWxlRGF0
YSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPnRhZygpLmxvY2Fs
TmFtZSgpOworICAgIGlmIChsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKKyAgICAgICAgYWRkVG9S
dWxlU2V0KGxvY2FsTmFtZS5pbXBsKCksIG1fdGFnUnVsZXMsIHJ1bGVEYXRhKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChydWxlRGF0YSk7Cit9
CisKK3ZvaWQgUnVsZVNldDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSogcnVsZSkKK3sKKyAg
ICBtX3BhZ2VSdWxlcy5hcHBlbmQocnVsZSk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUmVnaW9u
UnVsZShTdHlsZVJ1bGVSZWdpb24qIHJlZ2lvblJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbikKK3sKKyAgICBPd25QdHI8UnVsZVNldD4gcmVnaW9uUnVsZVNldCA9IFJ1bGVTZXQ6
OmNyZWF0ZSgpOworICAgIC8vIFRoZSByZWdpb24gcnVsZSBzZXQgc2hvdWxkIHRha2UgaW50byBh
Y2NvdW50IHRoZSBwb3NpdGlvbiBpbnNpZGUgdGhlIHBhcmVudCBydWxlIHNldC4KKyAgICAvLyBP
dGhlcndpc2UsIHRoZSBydWxlcyBpbnNpZGUgcmVnaW9uIGJsb2NrIG1pZ2h0IGJlIGluY29ycmVj
dGx5IHBvc2l0aW9uZWQgYmVmb3JlIG90aGVyIHNpbWlsYXIgcnVsZXMgZnJvbQorICAgIC8vIHRo
ZSBzdHlsZXNoZWV0IHRoYXQgY29udGFpbnMgdGhlIHJlZ2lvbiBibG9jay4KKyAgICByZWdpb25S
dWxlU2V0LT5tX3J1bGVDb3VudCA9IG1fcnVsZUNvdW50OworCisgICAgLy8gQ29sbGVjdCB0aGUg
cmVnaW9uIHJ1bGVzIGludG8gYSBydWxlIHNldAorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IHJlZ2lvblJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBTdHlsZVJ1bGVCYXNlKiByZWdpb25TdHlsaW5nUnVsZSA9IGNoaWxkUnVsZXNbaV0uZ2V0
KCk7CisgICAgICAgIGlmIChyZWdpb25TdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAg
ICAgICAgIHJlZ2lvblJ1bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUq
PihyZWdpb25TdHlsaW5nUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHRydWUsIHRy
dWUpOworICAgIH0KKyAgICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUgY291bnQgc28gdGhh
dCBwcm9wZXIgb3JkZXIgaXMgbWFpbnRhaW5lZAorICAgIG1fcnVsZUNvdW50ID0gcmVnaW9uUnVs
ZVNldC0+bV9ydWxlQ291bnQ7CisKKyAgICBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmFw
cGVuZChSdWxlU2V0U2VsZWN0b3JQYWlyKHJlZ2lvblJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0
KCksIHJlZ2lvblJ1bGVTZXQucmVsZWFzZSgpKSk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUnVs
ZXNGcm9tU2hlZXQoU3R5bGVTaGVldEludGVybmFsKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2
YWx1YXRvciYgbWVkaXVtLCBTdHlsZVJlc29sdmVyKiBzdHlsZVNlbGVjdG9yLCBjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZSkKK3sKKyAgICBBU1NFUlQoc2hlZXQpOworCisgICAgLy8gTm8gbWVk
aWEgaW1wbGllcyAiYWxsIiwgYnV0IGlmIGEgbWVkaWEgbGlzdCBleGlzdHMgaXQgbXVzdAorICAg
IC8vIGNvbnRhaW4gb3VyIGN1cnJlbnQgbWVkaXVtCisgICAgaWYgKHNoZWV0LT5tZWRpYVF1ZXJp
ZXMoKSAmJiAhbWVkaXVtLmV2YWwoc2hlZXQtPm1lZGlhUXVlcmllcygpLCBzdHlsZVNlbGVjdG9y
KSkKKyAgICAgICAgcmV0dXJuOyAvLyB0aGUgc3R5bGUgc2hlZXQgZG9lc24ndCBhcHBseQorICAg
IAorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiA+JiBpbXBvcnRSdWxl
cyA9IHNoZWV0LT5pbXBvcnRSdWxlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
bXBvcnRSdWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVJbXBvcnQqIGltcG9y
dFJ1bGUgPSBpbXBvcnRSdWxlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGltcG9ydFJ1bGUtPnN0
eWxlU2hlZXQoKSAmJiAoIWltcG9ydFJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFs
KGltcG9ydFJ1bGUtPm1lZGlhUXVlcmllcygpLCBzdHlsZVNlbGVjdG9yKSkpCisgICAgICAgICAg
ICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgc3R5
bGVTZWxlY3Rvciwgc2NvcGUpOworICAgIH0KKyAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4gPSBzdHlsZVNlbGVjdG9yICYmIHN0eWxlU2VsZWN0b3ItPmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3Qoc2hlZXQtPmJhc2VVUkwoKSk7CisKKyAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIHJ1bGVzID0gc2hlZXQtPmNoaWxkUnVsZXMo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgU3R5bGVSdWxlQmFzZSogcnVsZSA9IHJ1bGVzW2ldLmdldCgpOworCisgICAgICAgIEFT
U0VSVCghcnVsZS0+aXNJbXBvcnRSdWxlKCkpOworICAgICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1
bGUoKSkKKyAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihy
dWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKKyAgICAgICAgZWxzZSBp
ZiAocnVsZS0+aXNQYWdlUnVsZSgpKQorICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nh
c3Q8U3R5bGVSdWxlUGFnZSo+KHJ1bGUpKTsKKyAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNNZWRp
YVJ1bGUoKSkgeworICAgICAgICAgICAgU3R5bGVSdWxlTWVkaWEqIG1lZGlhUnVsZSA9IHN0YXRp
Y19jYXN0PFN0eWxlUnVsZU1lZGlhKj4ocnVsZSk7CisKKyAgICAgICAgICAgIGlmICgoIW1lZGlh
UnVsZS0+bWVkaWFRdWVyaWVzKCkgfHwgbWVkaXVtLmV2YWwobWVkaWFSdWxlLT5tZWRpYVF1ZXJp
ZXMoKSwgc3R5bGVTZWxlY3RvcikpKSB7CisgICAgICAgICAgICAgICAgLy8gVHJhdmVyc2UgY2hp
bGQgZWxlbWVudHMgb2YgdGhlIEBtZWRpYSBydWxlLgorICAgICAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IG1lZGlhUnVsZS0+Y2hp
bGRSdWxlcygpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBjaGls
ZFJ1bGVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIFN0eWxlUnVsZUJhc2Uq
IGNoaWxkUnVsZSA9IGNoaWxkUnVsZXNbal0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjaGlsZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRT
dHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hpbGRSdWxlKSwgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hp
bGRSdWxlLT5pc1BhZ2VSdWxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRQYWdlUnVs
ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4oY2hpbGRSdWxlKSk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVj
dG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8g
b3VyIHNldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2MSk6IFdl
IGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRo
ZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxl
Rm9udEZhY2UqPihjaGlsZFJ1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxl
Y3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFJ1bGUt
PmlzS2V5ZnJhbWVzUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHJ1bGUgdG8gb3VyIHNldC4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FKEJVRyA3MjQ2Mik6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUg
cnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1l
U3R5bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4oY2hpbGRSdWxlKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9ICAgLy8gZm9yIHJ1bGVzCisgICAg
ICAgICAgICB9ICAgLy8gaWYgcnVsZXMKKyAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0ZvbnRG
YWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZv
bnQgZmFjZSB0byBvdXIgc2V0LgorICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYxKTogV2Ug
ZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhl
IG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUgPSBz
dGF0aWNfY2FzdDxTdHlsZVJ1bGVGb250RmFjZSo+KHJ1bGUpOworICAgICAgICAgICAgc3R5bGVT
ZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOwor
ICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUoKTsKKyAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHls
ZVNlbGVjdG9yKSB7CisgICAgICAgICAgICAvLyBGSVhNRSAoQlVHIDcyNDYyKTogV2UgZG9uJ3Qg
YWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50
LgorICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxTdHls
ZVJ1bGVLZXlmcmFtZXMqPihydWxlKSk7CisgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNSZWdp
b25SdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgeworICAgICAgICAgICAgLy8gRklYTUUgKEJVRyA3
MjQ3Mik6IFdlIGRvbid0IGFkZCBALXdlYmtpdC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0eWxl
IHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGFkZFJlZ2lvblJ1bGUoc3RhdGljX2Nhc3Q8
U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOworICAg
ICAgICB9CisgICAgfQorICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCisgICAgICAg
IHNocmlua1RvRml0KCk7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVs
ZSogcnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RD
aGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlKQoreworICAgIGZvciAoQ1NTU2VsZWN0
b3IqIHMgPSBydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpOyBzOyBzID0gQ1NTU2VsZWN0b3JM
aXN0OjpuZXh0KHMpKQorICAgICAgICBhZGRSdWxlKHJ1bGUsIHMsIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpc0luUmVnaW9uUnVsZSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1
bGVNYXAmIG1hcCkKK3sKKyAgICBSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0g
bWFwLmVuZCgpOworICAgIGZvciAoUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+c2hyaW5r
VG9GaXQoKTsKK30KKwordm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCit7CisgICAgc2hyaW5r
TWFwVmVjdG9yc1RvRml0KG1faWRSdWxlcyk7CisgICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1f
Y2xhc3NSdWxlcyk7CisgICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1fdGFnUnVsZXMpOworICAg
IHNocmlua01hcFZlY3RvcnNUb0ZpdChtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyk7CisgICAg
bV9saW5rUHNldWRvQ2xhc3NSdWxlcy5zaHJpbmtUb0ZpdCgpOworICAgIG1fZm9jdXNQc2V1ZG9D
bGFzc1J1bGVzLnNocmlua1RvRml0KCk7CisgICAgbV91bml2ZXJzYWxSdWxlcy5zaHJpbmtUb0Zp
dCgpOworICAgIG1fcGFnZVJ1bGVzLnNocmlua1RvRml0KCk7Cit9CisKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIHRoaXMgaXMgbW9zdGx5IGJvcmluZyBzdHVmZiBvbiBob3cg
dG8gYXBwbHkgYSBjZXJ0YWluIHJ1bGUgdG8gdGhlIHJlbmRlcnN0eWxlLi4uCisKK0xlbmd0aCBT
dHlsZVJlc29sdmVyOjpjb252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRv
dWJsZSBtdWx0aXBsaWVyKQoreworICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZSA/IHByaW1pdGl2
ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRD
b252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVy
c2lvbj4oc3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllcikgOiBMZW5ndGgoVW5kZWZpbmVkKTsK
K30KKworTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHls
ZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4gcHJpbWl0aXZl
VmFsdWUgPyBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkRmxvYXRDb252ZXJz
aW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24gfCBWaWV3cG9ydFBl
cmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBsaWVyKSA6IExlbmd0
aChVbmRlZmluZWQpOworfQorCit0ZW1wbGF0ZSA8Ym9vbCBhcHBseUZpcnN0Pgordm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVy
dGllcywgU3R5bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9u
bHksIGJvb2wgZmlsdGVyUmVnaW9uUHJvcGVydGllcykKK3sKKyAgICBBU1NFUlQoIWZpbHRlclJl
Z2lvblByb3BlcnRpZXMgfHwgbV9yZWdpb25Gb3JTdHlsaW5nKTsKKyAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
UHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgcnVsZSk7CisKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNv
dW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlDb3VudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkm
IGN1cnJlbnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUF0KGkpOworICAgICAgICBpZiAoaXNJbXBv
cnRhbnQgIT0gY3VycmVudC5pc0ltcG9ydGFudCgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChpbmhlcml0ZWRPbmx5ICYmICFjdXJyZW50LmlzSW5oZXJpdGVkKCkpIHsKKyAg
ICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBleHBsaWNpdGx5IGluaGVyaXRl
ZCwgd2UgbmVlZCB0byBhcHBseSBmdXJ0aGVyIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcworICAg
ICAgICAgICAgLy8gYXMgdGhleSBtaWdodCBvdmVycmlkZSB0aGUgdmFsdWUgaW5oZXJpdGVkIGhl
cmUuIEZvciB0aGlzIHJlYXNvbiB3ZSBkb24ndCBhbGxvdyBkZWNsYXJhdGlvbnMgd2l0aAorICAg
ICAgICAgICAgLy8gZXhwbGljaXRseSBpbmhlcml0ZWQgcHJvcGVydGllcyB0byBiZSBjYWNoZWQu
CisgICAgICAgICAgICBBU1NFUlQoIWN1cnJlbnQudmFsdWUoKS0+aXNJbmhlcml0ZWRWYWx1ZSgp
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENTU1Byb3BlcnR5
SUQgcHJvcGVydHkgPSBjdXJyZW50LmlkKCk7CisKKyAgICAgICAgaWYgKGZpbHRlclJlZ2lvblBy
b3BlcnRpZXMgJiYgIVN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KHBy
b3BlcnR5KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChhcHBseUZpcnN0
KSB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChmaXJzdENTU1Byb3BlcnR5ID09IENTU1By
b3BlcnR5Q29sb3IsIENTU19jb2xvcl9pc19maXJzdF9wcm9wZXJ0eSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0eVpvb20gPT0gQ1NTUHJvcGVydHlDb2xvciArIDE4LCBD
U1Nfem9vbV9pc19lbmRfb2ZfZmlyc3RfcHJvcF9yYW5nZSk7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChDU1NQcm9wZXJ0eUxpbmVIZWlnaHQgPT0gQ1NTUHJvcGVydHlab29tICsgMSwgQ1NT
X2xpbmVfaGVpZ2h0X2lzX2FmdGVyX3pvb20pOworICAgICAgICAgICAgLy8gZ2l2ZSBzcGVjaWFs
IHByaW9yaXR5IHRvIGZvbnQteHh4LCBjb2xvciBwcm9wZXJ0aWVzLCBldGMKKyAgICAgICAgICAg
IGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIC8vIHdlIGFwcGx5IGxpbmUtaGVpZ2h0IGxhdGVyCisgICAg
ICAgICAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KSB7CisgICAgICAg
ICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBjdXJyZW50LnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBseVByb3BlcnR5
KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkK
KyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkp
OworICAgIH0KKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFByb2Nlc3NSdWxlKGNv
b2tpZSk7Cit9CisKK3RlbXBsYXRlIDxib29sIGFwcGx5Rmlyc3Q+Cit2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0
LCBib29sIGlzSW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGlu
aGVyaXRlZE9ubHkpCit7CisgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtX3N0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGluaykgewor
ICAgICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7Cisg
ICAgICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBt
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxp
bmtNYXRjaFR5cGUgPSBtYXRjaGVkUHJvcGVydGllcy5saW5rTWF0Y2hUeXBlOworICAgICAgICAg
ICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2VyIHRvIHBhc3MgdGhlc2UgYXMgYXJndW1lbnRz
IGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5nZXMgaW4gbWFueSBwbGFjZXMuCisgICAgICAgICAgICBt
X2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoTGluazsKKyAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsK
KworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPGFwcGx5Rmlyc3Q+KG1hdGNoZWRQcm9wZXJ0
aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBv
cnRhbnQsIGluaGVyaXRlZE9ubHksIG1hdGNoZWRQcm9wZXJ0aWVzLmlzSW5SZWdpb25SdWxlKTsK
KyAgICAgICAgfQorICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRydWU7
CisgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVu
ZEluZGV4OyArK2kpIHsKKyAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQ
cm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07CisgICAgICAgIGFw
cGx5UHJvcGVydGllczxhcHBseUZpcnN0PihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdl
dCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRP
bmx5LCBtYXRjaGVkUHJvcGVydGllcy5pc0luUmVnaW9uUnVsZSk7CisgICAgfQorfQorCit1bnNp
Z25lZCBTdHlsZVJlc29sdmVyOjpjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1h
dGNoZWRQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBzaXplKQoreworICAgIAorICAg
IHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkocHJvcGVydGllcywgc2l6ZW9mKE1hdGNo
ZWRQcm9wZXJ0aWVzKSAqIHNpemUpOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVS
ZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2Vz
JiBiKQoreworICAgIHJldHVybiBhLmZpcnN0VUFSdWxlID09IGIuZmlyc3RVQVJ1bGUKKyAgICAg
ICAgJiYgYS5sYXN0VUFSdWxlID09IGIubGFzdFVBUnVsZQorICAgICAgICAmJiBhLmZpcnN0QXV0
aG9yUnVsZSA9PSBiLmZpcnN0QXV0aG9yUnVsZQorICAgICAgICAmJiBhLmxhc3RBdXRob3JSdWxl
ID09IGIubGFzdEF1dGhvclJ1bGUKKyAgICAgICAgJiYgYS5maXJzdFVzZXJSdWxlID09IGIuZmly
c3RVc2VyUnVsZQorICAgICAgICAmJiBhLmxhc3RVc2VyUnVsZSA9PSBiLmxhc3RVc2VyUnVsZTsK
K30KKworYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBh
LCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJhbmdlcyYgYikKK3sKKyAgICByZXR1cm4gIShh
ID09IGIpOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hl
ZFByb3BlcnRpZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBi
KQoreworICAgIHJldHVybiBhLnByb3BlcnRpZXMgPT0gYi5wcm9wZXJ0aWVzICYmIGEubGlua01h
dGNoVHlwZSA9PSBiLmxpbmtNYXRjaFR5cGU7Cit9CisKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBT
dHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6
TWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworY29u
c3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2
ZXI6OmZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBN
YXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCit7CisgICAgQVNTRVJUKGhhc2gpOworCisgICAgTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUuZmluZChoYXNoKTsKKyAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVu
ZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSYg
Y2FjaGVJdGVtID0gaXQtPnNlY29uZDsKKworICAgIHNpemVfdCBzaXplID0gbWF0Y2hSZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOworICAgIGlmIChzaXplICE9IGNhY2hlSXRlbS5tYXRj
aGVkUHJvcGVydGllcy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChtYXRjaFJlc3VsdC5tYXRjaGVk
UHJvcGVydGllc1tpXSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRpZXNbaV0pCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKGNhY2hlSXRlbS5yYW5nZXMgIT0gbWF0Y2hS
ZXN1bHQucmFuZ2VzKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gJmNhY2hlSXRlbTsK
K30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIHVu
c2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCkKK3sKKyAgICBzdGF0
aWMgdW5zaWduZWQgbWF0Y2hlZERlY2xhcmF0aW9uQ2FjaGVBZGRpdGlvbnNCZXR3ZWVuU3dlZXBz
ID0gMTAwOworICAgIGlmICgrK21fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNl
TGFzdFN3ZWVwID49IG1hdGNoZWREZWNsYXJhdGlvbkNhY2hlQWRkaXRpb25zQmV0d2VlblN3ZWVw
cykgeworICAgICAgICBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKKyAgICAgICAgbV9t
YXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAgPSAwOworICAgIH0K
KworICAgIEFTU0VSVChoYXNoKTsKKyAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSBjYWNo
ZUl0ZW07CisgICAgY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLmFwcGVuZChtYXRjaFJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcyk7CisgICAgY2FjaGVJdGVtLnJhbmdlcyA9IG1hdGNoUmVzdWx0
LnJhbmdlczsKKyAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgY2FjaGUgdGhlIG9yaWdpbmFsIFJl
bmRlclN0eWxlIGluc3RhbmNlLiBJdCBtYXkgYmUgZnVydGhlciBtb2RpZmllZC4KKyAgICAvLyBU
aGUgUmVuZGVyU3R5bGUgaW4gdGhlIGNhY2hlIGlzIHJlYWxseSBqdXN0IGEgaG9sZGVyIGZvciB0
aGUgc3Vic3RydWN0dXJlcyBhbmQgbmV2ZXIgdXNlZCBhcy1pcy4KKyAgICBjYWNoZUl0ZW0ucmVu
ZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3R5bGUpOworICAgIGNhY2hlSXRlbS5wYXJl
bnRSZW5kZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShwYXJlbnRTdHlsZSk7CisgICAgbV9t
YXRjaGVkUHJvcGVydGllc0NhY2hlLmFkZChoYXNoLCBjYWNoZUl0ZW0pOworfQorCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCkKK3sKKyAgICBt
X21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuY2xlYXIoKTsKK30KKworc3RhdGljIGJvb2wgaXNDYWNo
ZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit7
CisgICAgLy8gRklYTUU6IENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGUgbW9kaWZpZXMgc3Rh
dGUgd2hlbiBhcHBseWluZyB0byBkb2N1bWVudCBlbGVtZW50LiBXZSBjYW4ndCBza2lwIHRoZSBh
cHBseWluZyBieSBjYWNoaW5nLgorICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpICYmIGVsZW1lbnQtPmRvY3VtZW50KCktPndyaXRpbmdNb2Rl
U2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChz
dHlsZS0+dW5pcXVlKCkgfHwgKHN0eWxlLT5zdHlsZVR5cGUoKSAhPSBOT1BTRVVETyAmJiBwYXJl
bnRTdHlsZS0+dW5pcXVlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0eWxl
LT5oYXNBcHBlYXJhbmNlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3R5bGUt
Pnpvb20oKSAhPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIC8vIFRoZSBjYWNoZSBhc3N1bWVzIHN0YXRpYyBrbm93bGVkZ2UgYWJvdXQgd2hp
Y2ggcHJvcGVydGllcyBhcmUgaW5oZXJpdGVkLgorICAgIGlmIChwYXJlbnRTdHlsZS0+aGFzRXhw
bGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0KQoreworICAgIHVuc2lnbmVkIGNh
Y2hlSGFzaCA9IG1hdGNoUmVzdWx0LmlzQ2FjaGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0
aWVzSGFzaChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkgOiAwOworICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRP
bmx5ID0gZmFsc2U7CisgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hl
SXRlbSA9IDA7CisgICAgaWYgKGNhY2hlSGFzaCAmJiAoY2FjaGVJdGVtID0gZmluZEZyb21NYXRj
aGVkUHJvcGVydGllc0NhY2hlKGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpKSkgeworICAgICAgICAv
LyBXZSBjYW4gYnVpbGQgdXAgdGhlIHN0eWxlIGJ5IGNvcHlpbmcgbm9uLWluaGVyaXRlZCBwcm9w
ZXJ0aWVzIGZyb20gYW4gZWFybGllciBzdHlsZSBvYmplY3QgYnVpbHQgdXNpbmcgdGhlIHNhbWUg
ZXhhY3QKKyAgICAgICAgLy8gc3R5bGUgZGVjbGFyYXRpb25zLiBXZSB0aGVuIG9ubHkgbmVlZCB0
byBhcHBseSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMsIGlmIGFueSwgYXMgdGhlaXIgdmFsdWVz
IGNhbiBkZXBlbmQgb24gdGhlIAorICAgICAgICAvLyBlbGVtZW50IGNvbnRleHQuIFRoaXMgaXMg
ZmFzdCBhbmQgc2F2ZXMgbWVtb3J5IGJ5IHJldXNpbmcgdGhlIHN0eWxlIGRhdGEgc3RydWN0dXJl
cy4KKyAgICAgICAgbV9zdHlsZS0+Y29weU5vbkluaGVyaXRlZEZyb20oY2FjaGVJdGVtLT5yZW5k
ZXJTdHlsZS5nZXQoKSk7CisgICAgICAgIGlmIChtX3BhcmVudFN0eWxlLT5pbmhlcml0ZWREYXRh
U2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVuZGVyU3R5bGUuZ2V0KCkpKSB7CisgICAgICAgICAg
ICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0gbV9zdHlsZS0+aW5zaWRlTGluaygpOworICAgICAg
ICAgICAgLy8gSWYgdGhlIGNhY2hlIGl0ZW0gcGFyZW50IHN0eWxlIGhhcyBpZGVudGljYWwgaW5o
ZXJpdGVkIHByb3BlcnRpZXMgdG8gdGhlIGN1cnJlbnQgcGFyZW50IHN0eWxlIHRoZW4gdGhlCisg
ICAgICAgICAgICAvLyByZXN1bHRpbmcgc3R5bGUgd2lsbCBiZSBpZGVudGljYWwgdG9vLiBXZSBj
b3B5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcyBvdmVyIGZyb20gdGhlIGNhY2hlIGFuZCBhcmUg
ZG9uZS4KKyAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVy
U3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0
dXMgaXMgdHJlYXRlZCBsaWtlIGFuIGluaGVyaXRlZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBs
aWNpdGx5IHJlc3RvcmUgaXQuCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxp
bmtTdGF0dXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGFwcGx5
SW5oZXJpdGVkT25seSA9IHRydWU7IAorICAgIH0KKyAgICAvLyBOb3cgd2UgaGF2ZSBhbGwgb2Yg
dGhlIG1hdGNoZWQgcnVsZXMgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLiBXYWxrIHRoZSBydWxl
cyBhbmQgYXBwbHkKKyAgICAvLyBoaWdoLXByaW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4s
IHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KKyAgICAv
LyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gt
cHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKKyAgICAvLyBhbmQg
KDQpIG5vcm1hbCBpbXBvcnRhbnQuCisgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8dHJ1ZT4obWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwor
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8dHJ1ZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0
aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PHRydWU+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVs
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
KyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPHRydWU+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRj
aFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxl
LCBhcHBseUluaGVyaXRlZE9ubHkpOworCisgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0t
PnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
KSB7CisgICAgICAgIG1fZm9udERpcnR5ID0gdHJ1ZTsKKyAgICAgICAgYXBwbHlJbmhlcml0ZWRP
bmx5ID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdv
IGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgorICAgIHVwZGF0ZUZvbnQoKTsKKworICAgIC8vIExp
bmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQt
c2l6ZS4KKyAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisKKyAgICAvLyBNYW55
IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBjaGFuZ2VzIHdlIGp1c3QgYXBw
bHkgYWxsIHByb3BlcnRpZXMuCisgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRl
clN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKSkK
KyAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CisKKyAgICAvLyBOb3cgZG8gdGhl
IG5vcm1hbCBwcmlvcml0eSBVQSBwcm9wZXJ0aWVzLgorICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXM8ZmFsc2U+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFS
dWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
KyAgICAKKyAgICAvLyBDYWNoZSBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIHNvIHRoYXQgd2Ug
Y2FuIGV4YW1pbmUgdGhlbSBsYXRlci4KKyAgICBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsK
KyAgICAKKyAgICAvLyBOb3cgZG8gdGhlIGF1dGhvciBhbmQgdXNlciBub3JtYWwgcHJpb3JpdHkg
cHJvcGVydGllcyBhbmQgYWxsIHRoZSAhaW1wb3J0YW50IHByb3BlcnRpZXMuCisgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxmYWxzZT4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5y
YW5nZXMubGFzdFVBUnVsZSArIDEsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxm
YWxzZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1
bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPGZhbHNlPihtYXRjaFJlc3VsdCwgdHJ1ZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxmYWxzZT4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVs
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Cisg
ICAgCisgICAgbG9hZFBlbmRpbmdJbWFnZXMoKTsKKyAgICAKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisjZW5kaWYKKyAgICAKKyAgICBBU1NFUlQo
IW1fZm9udERpcnR5KTsKKyAgICAKKyAgICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0Nh
Y2hlKG1fZWxlbWVudCwgbV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUobV9zdHlsZS5nZXQoKSwgbV9w
YXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25zdCBTdHls
ZVJ1bGVQYWdlKiByMikKK3sKKyAgICByZXR1cm4gcjEtPnNlbGVjdG9yKCktPnNwZWNpZmljaXR5
KCkgPCByMi0+c2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKTsKK30KKwordm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcywg
Ym9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1l
KQoreworICAgIGlmICghcnVsZXMpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxTdHls
ZVJ1bGVQYWdlKj4gbWF0Y2hlZFBhZ2VSdWxlczsKKyAgICBtYXRjaFBhZ2VSdWxlc0Zvckxpc3Qo
bWF0Y2hlZFBhZ2VSdWxlcywgcnVsZXMtPnBhZ2VSdWxlcygpLCBpc0xlZnRQYWdlLCBpc0ZpcnN0
UGFnZSwgcGFnZU5hbWUpOworICAgIGlmIChtYXRjaGVkUGFnZVJ1bGVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc3RkOjpzdGFibGVfc29ydChtYXRjaGVkUGFnZVJ1bGVzLmJl
Z2luKCksIG1hdGNoZWRQYWdlUnVsZXMuZW5kKCksIGNvbXBhcmVQYWdlUnVsZXMpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoZWRQYWdlUnVsZXMuc2l6ZSgpOyBpKyspCisg
ICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgbWF0Y2hlZFBhZ2VSdWxlc1tpXS0+
cHJvcGVydGllcygpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlc0Zv
ckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLCBjb25zdCBWZWN0b3I8
U3R5bGVSdWxlUGFnZSo+JiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdl
LCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQoreworICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy5z
aXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICBTdHlsZVJ1bGVQYWdlKiBydWxlID0gcnVsZXNbaV07CisgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgc2VsZWN0b3JMb2NhbE5hbWUgPSBydWxlLT5zZWxlY3RvcigpLT50YWcoKS5sb2NhbE5h
bWUoKTsKKyAgICAgICAgaWYgKHNlbGVjdG9yTG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIHNlbGVj
dG9yTG9jYWxOYW1lICE9IHBhZ2VOYW1lKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHBzZXVkb1R5cGUgPSBydWxlLT5zZWxlY3RvcigpLT5w
c2V1ZG9UeXBlKCk7CisgICAgICAgIGlmICgocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvTGVmdFBhZ2UgJiYgIWlzTGVmdFBhZ2UpCisgICAgICAgICAgICB8fCAocHNldWRvVHlwZSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvUmlnaHRQYWdlICYmIGlzTGVmdFBhZ2UpCisgICAgICAgICAg
ICB8fCAocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RQYWdlICYmICFpc0Zp
cnN0UGFnZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBJZiB0aGUgcnVs
ZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQuCisgICAgICAgIFN0
eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMgPSBydWxlLT5wcm9wZXJ0aWVzKCk7CisgICAgICAg
IGlmICghcHJvcGVydGllcyB8fCBwcm9wZXJ0aWVzLT5pc0VtcHR5KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1hdGNo
ZWQgcnVsZXMuCisgICAgICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7CisgICAgfQorfQor
Citib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKK3sK
KyAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IGZhbHNlOworICAgIGlmICghbV9yb290RWxlbWVu
dFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAgIGlzRmlyc3RQYWdlTGVm
dCA9IHRydWU7CisKKyAgICByZXR1cm4gKHBhZ2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAx
IDogMCkpICUgMjsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjppc0ZpcnN0UGFnZShpbnQgcGFn
ZUluZGV4KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBJbiBjYXNlIG9mIGZvcmNlZCBsZWZ0L3Jp
Z2h0IHBhZ2UsIHBhZ2UgYXQgaW5kZXggMSAobm90IDApIGNhbiBiZSB0aGUgZmlyc3QgcGFnZS4K
KyAgICByZXR1cm4gKCFwYWdlSW5kZXgpOworfQorCitTdHJpbmcgU3R5bGVSZXNvbHZlcjo6cGFn
ZU5hbWUoaW50IC8qIHBhZ2VJbmRleCAqLykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHBhZ2UgaW5kZXggdG8gcGFnZSBuYW1lIG1hcHBpbmcuCisgICAgcmV0dXJuICIiOworfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgTGlzdFR5cGU+CitzdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFw
cGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdyYXBwZXJN
YXAsIExpc3RUeXBlKiBsaXN0VHlwZSkKK3sKKyAgICBpZiAoIWxpc3RUeXBlKQorICAgICAgICBy
ZXR1cm47CisgICAgdW5zaWduZWQgc2l6ZSA9IGxpc3RUeXBlLT5sZW5ndGgoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1J1bGUqIGNzc1J1
bGUgPSBsaXN0VHlwZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKGNzc1J1bGUtPmlzSW1wb3J0UnVs
ZSgpKQorICAgICAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwgc3RhdGlj
X2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KGNzc1J1bGUpLT5zdHlsZVNoZWV0KCkpOworICAgICAgICBl
bHNlIGlmIChjc3NSdWxlLT5pc01lZGlhUnVsZSgpKQorICAgICAgICAgICAgY29sbGVjdENTU09N
V3JhcHBlcnMod3JhcHBlck1hcCwgc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4oY3NzUnVsZSkp
OworICAgICAgICBlbHNlIGlmIChjc3NSdWxlLT5pc1JlZ2lvblJ1bGUoKSkKKyAgICAgICAgICAg
IGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PFdlYktpdENTU1Jl
Z2lvblJ1bGUqPihjc3NSdWxlKSk7CisgICAgICAgIGVsc2UgaWYgKGNzc1J1bGUtPmlzU3R5bGVS
dWxlKCkpIHsKKyAgICAgICAgICAgIENTU1N0eWxlUnVsZSogY3NzU3R5bGVSdWxlID0gc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY3NzUnVsZSk7CisgICAgICAgICAgICB3cmFwcGVyTWFwLmFk
ZChjc3NTdHlsZVJ1bGUtPnN0eWxlUnVsZSgpLCBjc3NTdHlsZVJ1bGUpOworICAgICAgICB9Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxl
UnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdyYXBwZXJNYXAsIEhhc2hTZXQ8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0V3JhcHBlclNldCwgU3R5bGVTaGVldEludGVybmFsKiBz
dHlsZVNoZWV0KQoreworICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOworICAg
IFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBzdHlsZVNoZWV0V3JhcHBlciA9IENTU1N0eWxlU2hlZXQ6
OmNyZWF0ZShzdHlsZVNoZWV0KTsKKyAgICBzaGVldFdyYXBwZXJTZXQuYWRkKHN0eWxlU2hlZXRX
cmFwcGVyKTsKKyAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzdHlsZVNoZWV0
V3JhcHBlci5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhh
c2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYgd3JhcHBlck1hcCwgSGFz
aFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYgc2hlZXRXcmFwcGVyU2V0LCBEb2N1bWVudCog
ZG9jdW1lbnQpCit7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBzdHls
ZVNoZWV0cyA9IGRvY3VtZW50LT5zdHlsZVNoZWV0cygpLT52ZWN0b3IoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5
bGVTaGVldCogc3R5bGVTaGVldCA9IHN0eWxlU2hlZXRzW2ldLmdldCgpOworICAgICAgICBpZiAo
IXN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PENTU1N0
eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7CisgICAgfQorICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJz
KHdyYXBwZXJNYXAsIHNoZWV0V3JhcHBlclNldCwgZG9jdW1lbnQtPnBhZ2VVc2VyU2hlZXQoKSk7
Cit9CisKK0NTU1N0eWxlUnVsZSogU3R5bGVSZXNvbHZlcjo6ZW5zdXJlRnVsbENTU09NV3JhcHBl
ckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgaWYgKG1fc3R5bGVSdWxlVG9D
U1NPTVdyYXBwZXJNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJz
KG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNl
dCwgc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVy
cyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJT
ZXQsIGRlZmF1bHRTdHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9z
dHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBx
dWlya3NTdHlsZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1
bGVUb0NTU09NV3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBzdmdTdHls
ZVNoZWV0KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09N
V3JhcHBlck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBtYXRoTUxTdHlsZVNoZWV0
KTsKKyAgICAgICAgY29sbGVjdENTU09NV3JhcHBlcnMobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBl
ck1hcCwgbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBtZWRpYUNvbnRyb2xzU3R5bGVTaGVl
dCk7CisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBw
ZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgZnVsbHNjcmVlblN0eWxlU2hlZXQp
OworCisgICAgICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBw
ZXJNYXAsIG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgZG9jdW1lbnQoKSk7CisgICAgfQor
ICAgIHJldHVybiBtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLmdldChydWxlKS5nZXQoKTsK
K30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBpbml0
RWxlbWVudCgwKTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKDAsIHN0eWxlKTsKKyAgICBtX3N0
eWxlID0gc3R5bGU7CisgICAgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCB2YWx1ZSk7
Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUpCisgICAg
ICAgIGFwcGx5UHJvcGVydHkoaWQsIHZhbHVlKTsKK30KKworaW5saW5lIGJvb2wgaXNWYWxpZFZp
c2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKK3sKKyAgICBzd2l0Y2ggKGlkKSB7
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6CisgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJSaWdodENvbG9yOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3I6Cisg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUNvbG9yOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOgor
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgorICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6CisgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VGV4dFN0cm9rZUNvbG9yOgorICAgICAgICAvLyBBbHNvIGFsbG93IHNob3J0aGFuZHMgc28g
dGhhdCBpbmhlcml0L2luaXRpYWwgc3RpbGwgd29yay4KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmQ6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0OgorICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQ6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJUb3A6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206CisgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Q29sdW1uUnVsZToKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rmls
bDoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZToKKyNlbmRpZgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nz
czMtcmVnaW9ucy8jdGhlLWF0LXJlZ2lvbi1zdHlsZS1ydWxlCisvLyBGSVhNRTogYWRkIGluY3Jl
bWVudGFsIHN1cHBvcnQgZm9yIG90aGVyIHJlZ2lvbiBzdHlsaW5nIHByb3BlcnRpZXMuCitpbmxp
bmUgYm9vbCBTdHlsZVJlc29sdmVyOjppc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkKQoreworICAgIHN3aXRjaCAoaWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFNWRyBoYW5kbGVz
IHpvb21pbmcgaW4gYSBkaWZmZXJlbnQgd2F5IGNvbXBhcmVkIHRvIENTUy4gVGhlIHdob2xlIGRv
Y3VtZW50IGlzIHNjYWxlZCBpbnN0ZWFkCisvLyBvZiBlYWNoIGluZGl2aWR1YWwgbGVuZ3RoIHZh
bHVlIGluIHRoZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0
ZUxlbmd0aCooKQorLy8gbXVsdGlwbGllcyBlYWNoIHJlc29sdmVkIGxlbmd0aCB3aXRoIHRoZSB6
b29tIG11bHRpcGxpZXIgLSBzbyBmb3IgU1ZHIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGF0LgorLy8g
VGhvdWdoIGFsbCBDU1MgdmFsdWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb3V0ZXJtb3N0IDxz
dmc+IGVsZW1lbnRzICh3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcuLi4pCisvLyBuZWVkIHRv
IHJlc3BlY3QgdGhlIHNjYWxpbmcuIFJlbmRlckJveCAodGhlIHBhcmVudCBjbGFzcyBvZiBSZW5k
ZXJTVkdSb290KSBncmFicyB2YWx1ZXMgbGlrZQorLy8gd2lkdGgvaGVpZ2h0L2JvcmRlci9wYWRk
aW5nLy4uLiBmcm9tIHRoZSBSZW5kZXJTdHlsZSAtPiBmb3IgU1ZHIHRoZXNlIHZhbHVlcyB3b3Vs
ZCBuZXZlciBzY2FsZSwKKy8vIGlmIHdlJ2QgcGFzcyBhIDEuMCB6b29tIGZhY3RvciBldmVyeWh3
ZXJlLiBTbyB3ZSBvbmx5IHBhc3MgYSB6b29tIGZhY3RvciBvZiAxLjAgZm9yIHNwZWNpZmljCisv
LyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21l
ZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KK2Jvb2wgU3R5
bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKK3sKKyAgICByZXR1cm4gbV9lbGVtZW50ICYm
IG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZ
T1VUKQorCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIExlbmd0aCYgbGVu
Z3RoKQoreworICAgIExlbmd0aCB3b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBW
aWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHNlbGVjdG9yLT5z
dHlsZSgpLCBzZWxlY3Rvci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzZWxlY3Rvci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBpZiAod29ya2luZ0xlbmd0aC5pc1VuZGVmaW5lZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3Ro
KCkpCisgICAgICAgIHdvcmtpbmdMZW5ndGguc2V0UXVpcmsocHJpbWl0aXZlVmFsdWUtPmlzUXVp
cmtWYWx1ZSgpKTsKKworICAgIGxlbmd0aCA9IHdvcmtpbmdMZW5ndGg7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVl
LCBWZWN0b3I8TGVuZ3RoPiYgbGVuZ3RocywgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCit7Cisg
ICAgLy8gSGFuZGxlICdub25lJy4KKyAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkg
eworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgeworICAgICAgICAgICAgbGVuZ3Rocy5hcHBl
bmQoTGVuZ3RoKFVuZGVmaW5lZCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICh2YWx1ZS0+aXNWYWx1
ZUxpc3QoKSkgeworICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsg
aS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZh
bHVlID0gaS52YWx1ZSgpOworICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIExl
bmd0aCBsZW5ndGg7CisgICAgICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihjdXJyVmFsdWUpLCBzZWxlY3RvciwgbGVuZ3Ro
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGxlbmd0aHMu
YXBwZW5kKGxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRQb3NpdGlv
bihDU1NWYWx1ZSogdmFsdWUsIExlbmd0aCYgcG9zaXRpb24pCit7CisgICAgLy8gRm9yIG5vdywg
d2Ugb25seSBhY2NlcHQ6IDxpbnRlZ2VyPiB8ICdhdXRvJworICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0
bykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlz
TnVtYmVyKCkpOworICAgIHBvc2l0aW9uLnNldFZhbHVlKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRW
YWx1ZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQorewor
ICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZh
bHVlKCk7CisgICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAo
IW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKworICAgIEFTU0VS
VCghaXNJbmhlcml0IHx8ICFpc0luaXRpYWwpOyAvLyBpc0luaGVyaXQgLT4gIWlzSW5pdGlhbCAm
JiBpc0luaXRpYWwgLT4gIWlzSW5oZXJpdAorCisgICAgaWYgKCFhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSAmJiAoIWFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNW
YWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgeworICAgICAgICAvLyBMaW1pdCB0aGUgcHJv
cGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBieSA6
dmlzaXRlZC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0luaGVyaXQgJiYg
bV9wYXJlbnRTdHlsZSAmJiAhbV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFBy
b3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQorICAg
ICAgICBtX3BhcmVudFN0eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygp
OworCisgICAgLy8gY2hlY2sgbG9va3VwIHRhYmxlIGZvciBpbXBsZW1lbnRhdGlvbnMgYW5kIHVz
ZSB3aGVuIGF2YWlsYWJsZQorICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IG1f
c3R5bGVCdWlsZGVyLnByb3BlcnR5SGFuZGxlcihpZCk7CisgICAgaWYgKGhhbmRsZXIuaXNWYWxp
ZCgpKSB7CisgICAgICAgIGlmIChpc0luaGVyaXQpCisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5
SW5oZXJpdFZhbHVlKHRoaXMpOworICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCisgICAgICAg
ICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKHRoaXMpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUodGhpcywgdmFsdWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpIDogMDsKKworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29t
KCk7CisKKyAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHBy
b3BlcnRpZXMgaW50byB0aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVuZAorICAgIC8vIFJlbmRl
clN0eWxlIHZhbHVlcy4gIFNob3J0aGFuZHMgKGUuZy4gYm9yZGVyLCBiYWNrZ3JvdW5kKSBvY2N1
ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQKKyAgICAvLyBhcmUgb25seSBoaXQgd2hlbiBtYXBw
aW5nICJpbmhlcml0IiBvciAiaW5pdGlhbCIgaW50byBmcm9udC1lbmQgdmFsdWVzLgorICAgIHN3
aXRjaCAoaWQpIHsKKy8vIGxpc3RzCisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6CisgICAg
ICAgIC8vIGxpc3Qgb2Ygc3RyaW5nLCB1cmksIGNvdW50ZXIsIGF0dHIsIGkKKyAgICB7CisgICAg
ICAgIC8vIEZJWE1FOiBJbiBDU1MzLCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIGluaGVyaXQgY29u
dGVudC4gIEluIENTUzIgaXQgaXMgbm90LiAgVGhpcworICAgICAgICAvLyBub3RlIGlzIGEgcmVt
aW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCisK
KyAgICAgICAgaWYgKGlzSW5pdGlhbCkgeworICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250
ZW50KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZh
bHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJvb2wg
ZGlkU2V0ID0gZmFsc2U7CisgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZh
bHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBp
dGVtID0gaS52YWx1ZSgpOworICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JW
YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVy
YXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0
ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworI2lmIEVOQUJM
RShDU1NfSU1BR0VfU0VUKQorICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0
VmFsdWUoKSkgeworICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoc2V0T3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRW
YWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwor
I2VuZGlmCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlVmFs
dWUoKSkgeworICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY2FjaGVkT3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1
ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CisKKyAgICAgICAgICAgIGlmIChjb250ZW50VmFs
dWUtPmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNv
bnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVl
LT5pc0F0dHIoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1lc3BhY2Ug
YmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZvbyk/CisgICAgICAgICAgICAgICAgaWYgKG1fc3R5
bGUtPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQorICAgICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IG1fcGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgIFF1YWxpZmllZE5h
bWUgYXR0cihudWxsQXRvbSwgY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwg
bnVsbEF0b20pOworICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBt
X2VsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRT
ZXQpOworICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgLy8g
cmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0
eWxlCisgICAgICAgICAgICAgICAgbV9mZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKGF0dHIubG9j
YWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLT5p
c0NvdW50ZXIoKSkgeworICAgICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50ZXJWYWx1ZSA9IGNv
bnRlbnRWYWx1ZS0+Z2V0Q291bnRlclZhbHVlKCk7CisgICAgICAgICAgICAgICAgRUxpc3RTdHls
ZVR5cGUgbGlzdFN0eWxlVHlwZSA9IE5vbmVMaXN0U3R5bGU7CisgICAgICAgICAgICAgICAgaW50
IGxpc3RTdHlsZUlkZW50ID0gY291bnRlclZhbHVlLT5saXN0U3R5bGVJZGVudCgpOworICAgICAg
ICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAg
ICAgICAgICAgIGxpc3RTdHlsZVR5cGUgPSBzdGF0aWNfY2FzdDxFTGlzdFN0eWxlVHlwZT4obGlz
dFN0eWxlSWRlbnQgLSBDU1NWYWx1ZURpc2MpOworICAgICAgICAgICAgICAgIE93blB0cjxDb3Vu
dGVyQ29udGVudD4gY291bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVudChjb3VudGVy
VmFsdWUtPmlkZW50aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBhcmF0
b3IoKSkpOworICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY291bnRlci5yZWxl
YXNlKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldElk
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlT3BlblF1b3RlOgorICAgICAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZVF1b3RlOgorICAgICAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQpOworICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9PcGVuUXVvdGU6CisgICAgICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgLy8g
bm9ybWFsIGFuZCBub25lIGRvIG5vdCBoYXZlIGFueSBlZmZlY3QuCisgICAgICAgICAgICAgICAg
ICAgIHt9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmICghZGlkU2V0KQorICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250ZW50KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKKyAgICAg
ICAgaWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgaWYgKG1fcGFyZW50U3R5bGUpCisgICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKG1fcGFyZW50U3R5bGUtPnF1b3RlcygpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNJbml0aWFsKSB7
CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoMCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CisgICAgICAg
ICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1
ZSk7CisgICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKGxp
c3QtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47IC8vIE91dCBvZiBtZW1vcnkKKyAgICAgICAgICAgIFN0cmluZyogcXVvdGVzID0gZGF0
YS0+ZGF0YSgpOworICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gbGlz
dDsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgICAgICAgICAgQ1NTVmFsdWUq
IGl0ZW0gPSBpLnZhbHVlKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZW0tPmlzUHJpbWl0
aXZlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgICAgIEFTU0VSVChwcmlt
aXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcXVvdGVzW2kuaW5kZXgo
KV0gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhhZG9wdFJlZihkYXRhKSk7CisgICAgICAgIH0g
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUpIHsKKyAgICAgICAgICAgIEFTU0VSVChwcmltaXRpdmVW
YWx1ZS0+aXNJZGVudCgpKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVz
KGFkb3B0UmVmKFF1b3Rlc0RhdGE6OmNyZWF0ZSgwKSkpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseTogeworICAgICAgICAvLyBsaXN0
IG9mIHN0cmluZ3MgYW5kIGlkcworICAgICAgICBpZiAoaXNJbmhlcml0KSB7CisgICAgICAgICAg
ICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9udERlc2NyaXB0aW9uID0gbV9wYXJlbnRTdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShwYXJlbnRGb250RGVzY3JpcHRpb24uZ2VuZXJpY0Zh
bWlseSgpKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkocGFyZW50Rm9u
dERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRGb250RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250
KCkpOworICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CisgICAg
ICAgICAgICBGb250RGVzY3JpcHRpb24gaW5pdGlhbERlc2MgPSBGb250RGVzY3JpcHRpb24oKTsK
KyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5m
b250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBz
aXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5lcmljIGZhbWlseSBjaGFuZ2UgZnJvbSBtb25vc3Bh
Y2UKKyAgICAgICAgICAgIC8vIHRvIG5vbi1tb25vc3BhY2UuCisgICAgICAgICAgICBpZiAoZm9u
dERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVm
YXVsdFNpemUoKSkKKyAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24s
IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxs
ICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOworICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoaW5pdGlhbERlc2MuZ2VuZXJpY0Zh
bWlseSgpKTsKKyAgICAgICAgICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKS5mYW1p
bHlJc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShp
bml0aWFsRGVzYy5maXJzdEZhbWlseSgpKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpOworICAgICAgICBGb250RmFtaWx5JiBmaXJzdEZhbWlseSA9IGZvbnREZXNjcmlw
dGlvbi5maXJzdEZhbWlseSgpOworICAgICAgICBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gMDsK
KworICAgICAgICAvLyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZhbWlseSBwcm9wZXJ0
eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KKyAgICAgICAgYm9vbCBvbGRG
YW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1
bHRTaXplKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnRE
ZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworCisgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0
b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIENT
U1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOworICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihpdGVtKTsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBmYWNlOworICAgICAgICAgICAg
U2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7Cisg
ICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKQorICAgICAgICAgICAgICAg
IGZhY2UgPSBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICBlbHNl
IGlmIChzZXR0aW5ncykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5n
ZXRJZGVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5
OgorICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRG
YW1pbHkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlU2VyaWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0g
c2VyaWZGYW1pbHk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2Fu
c1NlcmlmOgorICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHNhbnNTZXJpZkZhbWlseTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5
KEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ3Vyc2l2ZToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBjdXJzaXZlRmFtaWx5OworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0
aW9uOjpDdXJzaXZlRmFtaWx5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZhY2UgPSBmYW50YXN5RmFtaWx5OworICAgICAgICAgICAgICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpGYW50YXN5RmFt
aWx5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9
IG1vbm9zcGFjZUZhbWlseTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBw
aWN0b2dyYXBoRmFtaWx5OworICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpQaWN0b2dyYXBoRmFtaWx5KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFmYWNlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIGlmICghY3VyckZhbWlseSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGaWxsaW5nIGlu
IHRoZSBmaXJzdCBmYW1pbHkuCisgICAgICAgICAgICAgICAgICAgIGZpcnN0RmFtaWx5LnNldEZh
bWlseShmYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RGYW1pbHkuYXBwZW5kRmFtaWx5
KDApOyAvLyBSZW1vdmUgYW55IGluaGVyaXRlZCBmYW1pbHktZmFsbGJhY2sgbGlzdC4KKyAgICAg
ICAgICAgICAgICAgICAgY3VyckZhbWlseSA9ICZmaXJzdEZhbWlseTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChmb250RGVzY3JpcHRpb24u
Z2VuZXJpY0ZhbWlseSgpID09IEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRGb250RmFt
aWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbmV3RmFtaWx5LT5zZXRGYW1pbHkoZmFjZSk7CisgICAgICAgICAgICAgICAgICAg
IGN1cnJGYW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1pbHkpOworICAgICAgICAgICAgICAgICAg
ICBjdXJyRmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGNhbid0IGNhbGwgdXNlRml4ZWRE
ZWZhdWx0U2l6ZSgpIHVudGlsIGFsbCBuZXcgZm9udCBmYW1pbGllcyBoYXZlIGJlZW4gYWRkZWQK
KyAgICAgICAgLy8gSWYgY3VyckZhbWlseSBpcyBub24temVybyB0aGVuIHdlIHNldCBhdCBsZWFz
dCBvbmUgZmFtaWx5IG9uIHRoaXMgZGVzY3JpcHRpb24uCisgICAgICAgIGlmIChjdXJyRmFtaWx5
KSB7CisgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9u
dERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWRE
ZWZhdWx0U2l6ZSkKKyAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24s
IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxs
ICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVk
RGVmYXVsdFNpemUpKTsKKworICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKy8vIHNob3J0aGFu
ZCBwcm9wZXJ0aWVzCisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6CisgICAgICAgIGlm
IChpc0luaXRpYWwpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQmFja2dyb3VuZExheWVy
cygpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKCkpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgbV9z
dHlsZS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKm1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRM
YXllcnMoKSk7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IobV9wYXJl
bnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKKyAgICAgICAgaWYgKGlzSW5pdGlhbCkK
KyAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyTWFza0xheWVycygpOworICAgICAgICBlbHNlIGlm
IChpc0luaGVyaXQpCisgICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0TWFza0xheWVycygqbV9w
YXJlbnRTdHlsZS0+bWFza0xheWVycygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NT
UHJvcGVydHlGb250OgorICAgICAgICBpZiAoaXNJbmhlcml0KSB7CisgICAgICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCk7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KG1fcGFyZW50U3R5bGUt
PmxpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAg
ICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgfSBl
bHNlIGlmIChpc0luaXRpYWwpIHsKKyAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1f
Y2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgICAgICAgICAgQVNTRVJUKHNldHRp
bmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVudCBz
aG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0aW5ncworICAgICAg
ICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7
CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+
Zm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNl
UHJpbnRlckZvbnQobV9jaGVja2VyLmRvY3VtZW50KCktPnByaW50aW5nKCkpOworICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBtX2NoZWNrZXIuZG9j
dW1lbnQoKS0+c2V0dGluZ3MoKS0+c3RhbmRhcmRGb250RmFtaWx5KCk7CisgICAgICAgICAgICBp
ZiAoIXN0YW5kYXJkRm9udEZhbWlseS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoc3RhbmRhcmRGb250RmFtaWx5KTsK
KyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1p
bHkoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5
d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKKyAgICAgICAg
ICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hl
Y2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKKyAgICAgICAgICAgIG1f
c3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwor
ICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgICAgICAgICAgc2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAw
OworCisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgICAg
ICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24pOworCisgICAgICAgICAgICAvLyBEb3Vi
bGUtY2hlY2sgYW5kIHNlZSBpZiB0aGUgdGhlbWUgZGlkIGFueXRoaW5nLiAgSWYgbm90LCBkb24n
dCBib3RoZXIgdXBkYXRpbmcgdGhlIGZvbnQuCisgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0
aW9uLmlzQWJzb2x1dGVTaXplKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhl
IHJlbmRlcmluZyBtb2RlIGFuZCBwcmludGVyIGZvbnQgc2V0dGluZ3MgYXJlIHVwZGF0ZWQuCisg
ICAgICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCkt
PnNldHRpbmdzKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2Un
cmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJl
IGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0aW5ncworICAgICAgICAgICAgICAgIGlmICgh
c2V0dGluZ3MpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01v
ZGUoKSk7CisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250
KG1fY2hlY2tlci5kb2N1bWVudCgpLT5wcmludGluZygpKTsKKworICAgICAgICAgICAgICAgIC8v
IEhhbmRsZSB0aGUgem9vbSBmYWN0b3IuCisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShtX2NoZWNr
ZXIuZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVT
aXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygp
KSk7CisgICAgICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzRm9udFZhbHVlKCkp
IHsKKyAgICAgICAgICAgIEZvbnRWYWx1ZSAqZm9udCA9IHN0YXRpY19jYXN0PEZvbnRWYWx1ZSo+
KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghZm9udC0+c3R5bGUgfHwgIWZvbnQtPnZhcmlhbnQg
fHwgIWZvbnQtPndlaWdodCB8fAorICAgICAgICAgICAgICAgICAhZm9udC0+c2l6ZSB8fCAhZm9u
dC0+bGluZUhlaWdodCB8fCAhZm9udC0+ZmFtaWx5KQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsIGZvbnQtPnN0
eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFy
aWFudCwgZm9udC0+dmFyaWFudC5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFdlaWdodCwgZm9udC0+d2VpZ2h0LmdldCgpKTsKKyAgICAgICAgICAgIC8v
IFRoZSBwcmV2aW91cyBwcm9wZXJ0aWVzIGNhbiBkaXJ0eSBvdXIgZm9udCBidXQgdGhleSBkb24n
dCB0cnkgdG8gcmVhZCB0aGUgZm9udCdzCisgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIGJhY2ss
IHdoaWNoIGlzIHNhZmUuIEhvd2V2ZXIgaWYgZm9udC1zaXplIGlzIHVzaW5nIHRoZSAnZXgnIHVu
aXQsIGl0IHdpbGwKKyAgICAgICAgICAgIC8vIG5lZWQgcXVlcnkgdGhlIGRpcnRpZWQgZm9udCdz
IHgtaGVpZ2h0IHRvIGdldCB0aGUgY29tcHV0ZWQgc2l6ZS4gVG8gYmUgc2FmZSBpbiB0aGlzCisg
ICAgICAgICAgICAvLyBjYXNlLCBsZXQncyBqdXN0IHVwZGF0ZSB0aGUgZm9udCBub3cuCisgICAg
ICAgICAgICB1cGRhdGVGb250KCk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udFNpemUsIGZvbnQtPnNpemUuZ2V0KCkpOworCisgICAgICAgICAgICBtX2xpbmVIZWln
aHRWYWx1ZSA9IGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCk7CisKKyAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250LT5mYW1pbHkuZ2V0KCkpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKworICAgIC8vIENTUzMgUHJvcGVydGllcworICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0U2hhZG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaGFkb3c6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdzogeworICAgICAgICBpZiAoaXNJbmhl
cml0KSB7CisgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQorICAg
ICAgICAgICAgICAgIHJldHVybiBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KG1fcGFyZW50U3R5bGUt
PnRleHRTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxlLT50
ZXh0U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNl
dEJveFNoYWRvdyhtX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFk
b3dEYXRhKCptX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSkpIDogbnVsbHB0cik7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkgLy8gaW5pdGlhbCB8
IG5vbmUKKyAgICAgICAgICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBt
X3N0eWxlLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpIDogbV9zdHlsZS0+c2V0Qm94U2hhZG93KG51
bGxwdHIpOworCisgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7
IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgQ1NTVmFsdWUqIGN1cnJW
YWx1ZSA9IGkudmFsdWUoKTsKKyAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1Zh
bHVlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBTaGFkb3dWYWx1
ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKKyAgICAgICAg
ICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNv
bXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0
ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAw
OworICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+
Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cikgOiAwOworICAgICAgICAgICAgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBpdGVtLT5zdHls
ZSAmJiBpdGVtLT5zdHlsZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQgOiBO
b3JtYWw7CisgICAgICAgICAgICBDb2xvciBjb2xvcjsKKyAgICAgICAgICAgIGlmIChpdGVtLT5j
b2xvcikKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0
ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fc3R5bGUpCisgICAgICAg
ICAgICAgICAgY29sb3IgPSBtX3N0eWxlLT5jb2xvcigpOworCisgICAgICAgICAgICBPd25QdHI8
U2hhZG93RGF0YT4gc2hhZG93RGF0YSA9IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKEludFBvaW50
KHgsIHkpLCBibHVyLCBzcHJlYWQsIHNoYWRvd1N0eWxlLCBpZCA9PSBDU1NQcm9wZXJ0eVdlYmtp
dEJveFNoYWRvdywgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQp
KTsKKyAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCisgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5p
bmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRy
eQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFNoYWRv
dyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlm
IHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKKyAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoYm94UmVmbGVjdCwgQm94UmVmbGVjdCkKKyAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3hSZWZs
ZWN0KFJlbmRlclN0eWxlOjppbml0aWFsQm94UmVmbGVjdCgpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdmFsdWUtPmlzUmVmbGVjdFZhbHVlKCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ1NTUmVmbGVjdFZhbHVlKiByZWZsZWN0VmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NSZWZsZWN0VmFsdWUqPih2YWx1ZSk7CisgICAgICAgIFJlZlB0
cjxTdHlsZVJlZmxlY3Rpb24+IHJlZmxlY3Rpb24gPSBTdHlsZVJlZmxlY3Rpb246OmNyZWF0ZSgp
OworICAgICAgICByZWZsZWN0aW9uLT5zZXREaXJlY3Rpb24ocmVmbGVjdFZhbHVlLT5kaXJlY3Rp
b24oKSk7CisgICAgICAgIGlmIChyZWZsZWN0VmFsdWUtPm9mZnNldCgpKQorICAgICAgICAgICAg
cmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xl
bmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxh
dGVkQ29udmVyc2lvbj4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7
CisgICAgICAgIE5pbmVQaWVjZUltYWdlIG1hc2s7CisgICAgICAgIG1hc2suc2V0TWFza0RlZmF1
bHRzKCk7CisgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2so
KSwgbWFzayk7CisgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CisKKyAgICAgICAg
bV9zdHlsZS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6CisgICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUob3BhY2l0eSwgT3BhY2l0eSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCBpbiBA
Zm9udC1mYWNlIHJ1bGVzLgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVVu
aWNvZGVSYW5nZTogLy8gT25seSB1c2VkIGluIEBmb250LWZhY2UgcnVsZXMuCisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZToKKyAgICAgICAgaWYg
KGlzSW5oZXJpdCkgeworICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZUNvbG9yKG1f
cGFyZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpLmlzVmFsaWQoKSA/IG1fcGFyZW50U3R5bGUt
PmNvbHVtblJ1bGVDb2xvcigpIDogbV9wYXJlbnRTdHlsZS0+Y29sb3IoKSk7CisgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlU3R5bGUobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVN0
eWxlKCkpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVdpZHRoKG1fcGFyZW50
U3R5bGUtPmNvbHVtblJ1bGVXaWR0aCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChp
c0luaXRpYWwpCisgICAgICAgICAgICBtX3N0eWxlLT5yZXNldENvbHVtblJ1bGUoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlOgorICAgICAgICBp
ZiAoIW1fcGFyZW50Tm9kZSB8fCAhdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZURpcmVjdGlvbihtX3BhcmVu
dFN0eWxlLT5tYXJxdWVlRGlyZWN0aW9uKCkpOworICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVl
SW5jcmVtZW50KG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7CisgICAgICAgIG1f
c3R5bGUtPnNldE1hcnF1ZWVTcGVlZChtX3BhcmVudFN0eWxlLT5tYXJxdWVlU3BlZWQoKSk7Cisg
ICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQobV9wYXJlbnRTdHlsZS0+bWFycXVl
ZUxvb3BDb3VudCgpKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUJlaGF2aW9yKG1fcGFy
ZW50U3R5bGUtPm1hcnF1ZWVCZWhhdmlvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXJxdWVlUmVwZXRpdGlvbjogeworICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChtYXJxdWVlTG9vcENvdW50LCBNYXJxdWVlTG9vcENvdW50KQorICAg
ICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKKyAgICAg
ICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyByZXBl
YXQgZm9yZXZlci4KKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkp
CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KHByaW1pdGl2ZVZhbHVl
LT5nZXRJbnRWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKG1hcnF1ZWVTcGVlZCwgTWFycXVlZVNwZWVkKQorICAgICAgICBpZiAoIXByaW1pdGl2
ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoaW50IGlkZW50ID0gcHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2xvdzoKKyAgICAgICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAg
ICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMu
IFRoZSBXaW5JRSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlRmFzdDoKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBlciBmYXN0LgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+aXNUaW1lKCkpCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQo
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NTUHJpbWl0aXZlVmFsdWU6Ok1pbGxp
c2Vjb25kcz4oKSk7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigp
KSAvLyBGb3Igc2Nyb2xsYW1vdW50IHN1cHBvcnQuCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRN
YXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlSW5jcmVtZW50OiB7
CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVJbmNyZW1lbnQsIE1h
cnF1ZWVJbmNyZW1lbnQpCisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwgRml4ZWQpKTsgLy8gMXB4LgorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgor
ICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCg2
LCBGaXhlZCkpOyAvLyA2cHguIFRoZSBXaW5JRSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6CisgICAgICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDM2LCBGaXhlZCkp
OyAvLyAzNnB4LgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVy
dFRvSW50TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUp
OworICAgICAgICAgICAgaWYgKCFtYXJxdWVlTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCisgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVuZ3RoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRMaW5lQ2xhbXA6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklN
SVRJVkUobGluZUNsYW1wLCBMaW5lQ2xhbXApCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TG9jYWxlOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklU
SUFMKGxvY2FsZSwgTG9jYWxlKTsKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlQXV0bykKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldExvY2FsZShudWxsQXRvbSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldExvY2FsZShwcmltaXRpdmVW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKG1fc3R5
bGUtPmxvY2FsZSgpKSk7CisgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0U2l6ZUFkanVzdDogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0ZXh0
U2l6ZUFkanVzdCwgVGV4dFNpemVBZGp1c3QpCisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUg
fHwgIXByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBzZXRUZXh0U2l6ZUFkanVzdChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZUF1dG8pOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShEQVNIQk9BUkRf
U1VQUE9SVCkKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RGFzaGJvYXJkUmVnaW9uOiB7Cisg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGRhc2hib2FyZFJlZ2lvbnMsIERhc2hi
b2FyZFJlZ2lvbnMpCisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlTm9uZSkgeworICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5k
ZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBEYXNoYm9hcmRSZWdpb24gKnJlZ2lvbiA9IHByaW1pdGl2ZVZh
bHVlLT5nZXREYXNoYm9hcmRSZWdpb25WYWx1ZSgpOworICAgICAgICBpZiAoIXJlZ2lvbikKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBEYXNoYm9hcmRSZWdpb24gKmZpcnN0ID0gcmVn
aW9uOworICAgICAgICB3aGlsZSAocmVnaW9uKSB7CisgICAgICAgICAgICBMZW5ndGggdG9wID0g
Y29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+dG9wKCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRT
dHlsZSk7CisgICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVn
aW9uLT5yaWdodCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAg
TGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdHls
ZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252
ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5sZWZ0KCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHls
ZSk7CisKKyAgICAgICAgICAgIGlmICh0b3AuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAg
ICB0b3AgPSBMZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChyaWdodC5pc1VuZGVmaW5lZCgpKQor
ICAgICAgICAgICAgICAgIHJpZ2h0ID0gTGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoYm90dG9t
LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYm90dG9tID0gTGVuZ3RoKCk7CisgICAg
ICAgICAgICBpZiAobGVmdC5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGxlZnQgPSBM
ZW5ndGgoKTsKKworICAgICAgICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKKyAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246
OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lv
biA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChyZWdpb24t
Pm1faXNSZWN0YW5nbGUpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVn
aW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9w
LCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwor
ICAgICAgICAgICAgcmVnaW9uID0gcmVnaW9uLT5tX25leHQuZ2V0KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Rhc2hib2FyZFJlZ2lvbnModHJ1
ZSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0U3Ryb2tlV2lkdGg6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwodGV4dFN0cm9rZVdpZHRoLCBUZXh0U3Ryb2tlV2lkdGgpCisgICAgICAgIGZsb2F0IHdp
ZHRoID0gMDsKKyAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewor
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVRoaW46CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
TWVkaXVtOgorICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVRoaWNrOiB7CisgICAgICAgICAgICAg
ICAgZG91YmxlIHJlc3VsdCA9IDEuMCAvIDQ4OworICAgICAgICAgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU1lZGl1bSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ICo9IDM7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVUaGljaykKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ICo9IDU7CisgICAgICAgICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHls
ZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIG1fc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0
aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybTogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0s
IFRyYW5zZm9ybSk7CisgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAg
ICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlLCBvcGVyYXRpb25zKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtKG9w
ZXJhdGlvbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRQZXJzcGVjdGl2ZTogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChw
ZXJzcGVjdGl2ZSwgUGVyc3BlY3RpdmUpCisKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVj
dGl2ZSgwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0
IHBlcnNwZWN0aXZlVmFsdWU7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgo
KSkKKyAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsK
KyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKKyAgICAgICAg
ICAgIC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0cmVhdCB2YWx1ZWxlc3MgbnVtYmVy
cyBhcyBweC4KKyAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHBlcnNwZWN0aXZlVmFsdWUgPj0gMC4wZikKKyAgICAgICAgICAgIG1f
c3R5bGUtPnNldFBlcnNwZWN0aXZlKHBlcnNwZWN0aXZlVmFsdWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246CisgICAgICAgIGlm
IChpc0luaXRpYWwpCisgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckFuaW1hdGlvbnMoKTsKKyAg
ICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQorICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEFu
aW1hdGlvbnMobV9wYXJlbnRTdHlsZS0+YW5pbWF0aW9ucygpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOgorICAgICAgICBpZiAoaXNJbml0
aWFsKQorICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJUcmFuc2l0aW9ucygpOworICAgICAgICBl
bHNlIGlmIChpc0luaGVyaXQpCisgICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0VHJhbnNpdGlv
bnMobV9wYXJlbnRTdHlsZS0+dHJhbnNpdGlvbnMoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENTU1Byb3BlcnR5UG9pbnRlckV2ZW50czoKKyAgICB7CisjaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKQorICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNjU2MTA3Nz4gV29yayBhcm91
bmQgdGhlIFN0b2NrcyB3aWRnZXQncyBtaXN1c2Ugb2YgdGhlCisgICAgICAgIC8vIHBvaW50ZXIt
ZXZlbnRzIHByb3BlcnR5IGJ5IG5vdCBhcHBseWluZyBpdCBpbiBEYXNoYm9hcmQuCisgICAgICAg
IFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwor
ICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPnVzZXNEYXNoYm9hcmRCYWNrd2FyZENv
bXBhdGliaWxpdHlNb2RlKCkpCisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShwb2ludGVyRXZlbnRzLCBQ
b2ludGVyRXZlbnRzKQorICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiB7Cisg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRhcEhpZ2hsaWdodENvbG9yLCBUYXBI
aWdobGlnaHRDb2xvcik7CisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBDb2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShw
cmltaXRpdmVWYWx1ZSk7CisgICAgICAgIG1fc3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9yKGNv
bCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoT1ZFUkZMT1df
U0NST0xMSU5HKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRPdmVyZmxvd1Njcm9sbGluZzog
eworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh1c2VUb3VjaE92ZXJmbG93U2Ny
b2xsaW5nLCBVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKTsKKyAgICAgICAgaWYgKCFwcmltaXRp
dmVWYWx1ZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3N0eWxlLT5zZXRVc2VUb3Vj
aE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
VG91Y2gpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUludmFsaWQ6CisgICAgICAgIHJldHVybjsKKyAgICAvLyBEaXJlY3Rpb25hbCBwcm9wZXJ0
aWVzIGFyZSByZXNvbHZlZCBieSByZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eSgpIGJlZm9y
ZSB0aGUgc3dpdGNoLgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmQ6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJFbmRTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
RW5kV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0OgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJTdGFydFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJTdGFydFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZUNvbG9yOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyQmVmb3JlV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFm
dGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlckNvbG9yOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlclN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJBZnRlcldpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJn
aW5FbmQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblN0YXJ0OgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hcmdpbkFmdGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Db2xsYXBzZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlQ29sbGFwc2U6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5Cb3R0b21Db2xsYXBzZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0Vu
ZDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ1N0YXJ0OgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRQYWRkaW5nQmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQ
YWRkaW5nQWZ0ZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxXaWR0aDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbEhlaWdodDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWluTG9naWNhbFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5M
b2dpY2FsSGVpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6CisgICAgeworICAg
ICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25B
d2FyZVByb3BlcnR5KGlkLCBtX3N0eWxlLT5kaXJlY3Rpb24oKSwgbV9zdHlsZS0+d3JpdGluZ01v
ZGUoKSk7CisgICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7CisgICAgICAgIHJldHVybiBhcHBs
eVByb3BlcnR5KG5ld0lkLCB2YWx1ZSk7CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
U3RyZXRjaDoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dExpbmVUaHJvdWdoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hDb2xv
cjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoTW9kZToKKyAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRM
aW5lVGhyb3VnaFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmU6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0T3ZlcmxpbmVNb2RlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVTdHlsZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lV2lkdGg6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRVbmRlcmxpbmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVDb2xv
cjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU1vZGU6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRVbmRlcmxpbmVTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVy
bGluZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250U2l6ZURlbHRhOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dEVtcGhhc2lzOgorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDU1MgVGV4dCBMYXlvdXQg
TW9kdWxlIExldmVsIDM6IFZlcnRpY2FsIHdyaXRpbmcgc3VwcG9ydAorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRXcml0aW5nTW9kZTogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTF9BTkRfUFJJTUlUSVZFKHdyaXRpbmdNb2RlLCBXcml0aW5nTW9kZSkKKyAgICAgICAgLy8g
RklYTUU6IEl0IGlzIG5vdCBvayB0byBtb2RpZnkgZG9jdW1lbnQgc3RhdGUgd2hpbGUgYXBwbHlp
bmcgc3R5bGUuCisgICAgICAgIGlmICghaXNJbmhlcml0ICYmICFpc0luaXRpYWwgJiYgbV9lbGVt
ZW50ICYmIG1fZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpKQorICAgICAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNl
dE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRPcmllbnRhdGlvbihtX3N0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gSG9yaXpvbnRhbCA6IFZlcnRpY2FsKTsKKyAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TGluZUJveENvbnRhaW46IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUwobGluZUJveENvbnRhaW4sIExpbmVCb3hDb250YWluKQorICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25l
KSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFp
bk5vbmUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF2
YWx1ZS0+aXNDU1NMaW5lQm94Q29udGFpblZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgQ1NTTGluZUJveENvbnRhaW5WYWx1ZSogbGluZUJveENvbnRhaW5WYWx1ZSA9IHN0
YXRpY19jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIG1fc3R5
bGUtPnNldExpbmVCb3hDb250YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVlKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5z
aWRlOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh3cmFwU2hhcGVJbnNpZGUs
IFdyYXBTaGFwZUluc2lkZSk7CisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZUF1dG8pCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRXcmFwU2hhcGVJbnNpZGUoMCk7
CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkpCisgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRXcmFwU2hhcGVJbnNpZGUocHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFs
dWUoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFw
ZU91dHNpZGU6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHdyYXBTaGFwZU91
dHNpZGUsIFdyYXBTaGFwZU91dHNpZGUpOworICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0V3JhcFNoYXBlT3V0
c2lkZSgwKTsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU2hhcGUoKSkKKyAg
ICAgICAgICAgIG1fc3R5bGUtPnNldFdyYXBTaGFwZU91dHNpZGUocHJpbWl0aXZlVmFsdWUtPmdl
dFNoYXBlVmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIC8vIENTUyBGb250cyBNb2R1
bGUgTGV2ZWwgMworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250RmVhdHVyZVNldHRpbmdz
OiB7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgeworICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9u
KG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxGZWF0dXJlU2V0dGluZ3MoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhbHVlLT5p
c1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAg
ICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUp
OworICAgICAgICBSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MgPSBGb250RmVh
dHVyZVNldHRpbmdzOjpjcmVhdGUoKTsKKyAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgp
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICBD
U1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAg
ICAgICBpZiAoIWl0ZW0tPmlzRm9udEZlYXR1cmVWYWx1ZSgpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgRm9udEZlYXR1cmVWYWx1ZSogZmVhdHVyZSA9IHN0YXRpY19j
YXN0PEZvbnRGZWF0dXJlVmFsdWUqPihpdGVtKTsKKyAgICAgICAgICAgIHNldHRpbmdzLT5hcHBl
bmQoRm9udEZlYXR1cmUoZmVhdHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVlKCkpKTsKKyAgICAg
ICAgfQorICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmVhdHVyZVNldHRpbmdzKHNldHRpbmdz
LnJlbGVhc2UoKSk7CisgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXI6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwoZmlsdGVyLCBGaWx0ZXIpOworICAgICAgICBGaWx0ZXJPcGVyYXRpb25zIG9w
ZXJhdGlvbnM7CisgICAgICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdHls
ZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpKQorICAgICAgICAgICAgbV9zdHls
ZS0+c2V0RmlsdGVyKG9wZXJhdGlvbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
R3JpZENvbHVtbnM6IHsKKyAgICAgICAgVmVjdG9yPExlbmd0aD4gbGVuZ3RoczsKKyAgICAgICAg
aWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCBsZW5ndGhzLCB0aGlzKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9zdHlsZS0+c2V0R3JpZENvbHVtbnMobGVuZ3Rocyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3dz
OiB7CisgICAgICAgIFZlY3RvcjxMZW5ndGg+IGxlbmd0aHM7CisgICAgICAgIGlmICghY3JlYXRl
R3JpZFRyYWNrTGlzdCh2YWx1ZSwgbGVuZ3RocywgdGhpcykpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG1fc3R5bGUtPnNldEdyaWRSb3dzKGxlbmd0aHMpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW46IHsKKyAgICAg
ICAgTGVuZ3RoIGNvbHVtbjsKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUs
IGNvbHVtbikpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3R5bGUtPnNldEdyaWRJ
dGVtQ29sdW1uKGNvbHVtbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEdyaWRSb3c6IHsKKyAgICAgICAgTGVuZ3RoIHJvdzsKKyAgICAgICAgaWYg
KCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIHJvdykpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1fc3R5bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKKworICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGltcGxlbWVudGVkIGlu
IHRoZSBTdHlsZUJ1aWxkZXIgbG9va3VwIHRhYmxlLgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQXR0YWNobWVudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXA6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZEltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb246CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQ
b3NpdGlvblk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQ6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUmVwZWF0WToKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemU6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9t
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKKyAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1czoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tUmlnaHRSYWRpdXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxl
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aDoKKyAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbG9yOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVySW1hZ2VPdXRzZXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlUmVwZWF0Ogor
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNsaWNlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJJbWFnZVNvdXJjZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0
aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyTGVmdENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyUmFkaXVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyU3BhY2luZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
U3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyVG9wQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRp
dXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFJpZ2h0UmFkaXVzOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9w
V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3R0b206CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJveFNpemluZzoKKyAgICBjYXNlIENT
U1Byb3BlcnR5Q2FwdGlvblNpZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNsZWFyOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlDbGlwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRl
clJlc2V0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlDdXJzb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eURpcmVjdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5RGlzcGxheToKKyAgICBjYXNlIENTU1By
b3BlcnR5RW1wdHlDZWxsczoKKyAgICBjYXNlIENTU1Byb3BlcnR5RmxvYXQ6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUZvbnRTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2Vp
Z2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlIZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUlt
YWdlUmVuZGVyaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlMZWZ0OgorICAgIGNhc2UgQ1NTUHJv
cGVydHlMZXR0ZXJTcGFjaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0OgorICAg
IGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHls
ZUltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVQb3NpdGlvbjoKKyAgICBjYXNl
IENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZToKKyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b206CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1h
cmdpbkxlZnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0OgorICAgIGNhc2UgQ1NT
UHJvcGVydHlNYXJnaW5Ub3A6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1heEhlaWdodDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5TWF4V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1pbkhlaWdodDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5TWluV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU9ycGhh
bnM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91
dGxpbmVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZU9mZnNldDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5T3V0bGluZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lV2lk
dGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlP
dmVyZmxvd1g6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93WToKKyAgICBjYXNlIENTU1By
b3BlcnR5UGFkZGluZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbToKKyAgICBj
YXNlIENTU1Byb3BlcnR5UGFkZGluZ0xlZnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdS
aWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1RvcDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5UGFnZUJyZWFrQWZ0ZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0JlZm9yZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrSW5zaWRlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlQb3NpdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5UmVzaXplOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlSaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5U2l6ZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5U3BlYWs6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRhYmxlTGF5b3V0OgorICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0QWxpZ246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0SW5kZW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
T3ZlcmZsb3c6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmc6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm06CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRvcDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5VW5pY29kZUJpZGk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVZlcnRpY2Fs
QWxpZ246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVZpc2liaWxpdHk6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25EaXJlY3Rpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0
aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25GaWxsTW9kZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvblBsYXlTdGF0ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9u
VGltaW5nRnVuY3Rpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcGVhcmFuY2U6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJh
Y2tncm91bmRDbGlwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9z
aXRlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyRml0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9u
dGFsU3BhY2luZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2U6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1czoKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3hBbGlnbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGlyZWN0aW9uOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3hGbGV4R3JvdXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveExpbmVzOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmRpbmFsR3JvdXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJveE9yaWVudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UGFjazoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sb3JDb3JyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5BeGlzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5C
cmVha0FmdGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtJbnNpZGU6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5HYXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENv
bHVtbnM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblNwYW46CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtbldpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRG
bGV4OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4QWxpZ246CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEZsZXhEaXJlY3Rpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZs
ZXhGbG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4SXRlbUFsaWduOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4TGluZVBhY2s6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEZsZXhPcmRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleFBhY2s6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhXcmFwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRGbG93RnJvbToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxvd0ludG86CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRLZXJuaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRGb250U21vb3RoaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250VmFyaWFudExp
Z2F0dXJlczoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SGlnaGxpZ2h0OgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVDaGFyYWN0ZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QWZ0ZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5
cGhlbmF0ZUxpbWl0QmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVM
aW1pdExpbmVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5zOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRMaW5lQWxpZ246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExp
bmVCcmVhazoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUdyaWQ6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdExpbmVTbmFwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJx
dWVlRGlyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3R5bGU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tBdHRhY2htZW50OgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrQm94SW1hZ2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tC
b3hJbWFnZU91dHNldDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlUmVw
ZWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTbGljZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrQm94SW1hZ2VXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza0NsaXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGU6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza09yaWdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrUG9zaXRpb25ZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNr
UmVwZWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXRjaE5lYXJlc3RNYWlsQmxv
Y2txdW90ZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmlnaW46CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
UGVyc3BlY3RpdmVPcmlnaW5ZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQcmludENvbG9y
QWRqdXN0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0FmdGVyOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0JlZm9yZToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0UmVnaW9uQnJlYWtJbnNpZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFJlZ2lvbk92ZXJmbG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSdGxPcmRlcmluZzoK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dENvbWJpbmU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RW1waGFzaXNQb3NpdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhh
c2lzU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRPcmllbnRhdGlvbjoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dFNlY3VyaXR5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ry
b2tlQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWDoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VHJhbnNmb3JtT3JpZ2luWjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtU3R5
bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb25UaW1pbmdGdW5jdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlckRy
YWc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnk6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3Q6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXA6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBGbG93OgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRXcmFwTWFyZ2luOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwUGFkZGlu
ZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcFRocm91Z2g6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdoaXRlU3BhY2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZG93czoKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRCcmVhazoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V29yZFNwYWNpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRXcmFw
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlaSW5kZXg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVpvb206
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisjaWYgRU5B
QkxFKFNWRykKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBUcnkgdGhlIFNWRyBwcm9wZXJ0aWVz
CisgICAgICAgIGFwcGx5U1ZHUHJvcGVydHkoaWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
I2VuZGlmCisgICAgfQorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxBdHRhY2htZW50
KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldEF0dGFj
aG1lbnQoRmlsbExheWVyOjppbml0aWFsRmlsbEF0dGFjaG1lbnQobGF5ZXItPnR5cGUoKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVG
aXhlZDoKKyAgICAgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KEZpeGVkQmFja2dyb3VuZEF0
dGFjaG1lbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTY3Jv
bGw6CisgICAgICAgICAgICBsYXllci0+c2V0QXR0YWNobWVudChTY3JvbGxCYWNrZ3JvdW5kQXR0
YWNobWVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxvY2Fs
OgorICAgICAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQoTG9jYWxCYWNrZ3JvdW5kQXR0YWNo
bWVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbENsaXAoQ1NT
UHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0Q2xpcChGaWxs
TGF5ZXI6OmluaXRpYWxGaWxsQ2xpcChsYXllci0+dHlwZSgpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5zZXRDbGlwKCpwcmlt
aXRpdmVWYWx1ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbENvbXBvc2l0ZShD
U1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGxheWVyLT5zZXRDb21wb3Np
dGUoRmlsbExheWVyOjppbml0aWFsRmlsbENvbXBvc2l0ZShsYXllci0+dHlwZSgpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5z
ZXRDb21wb3NpdGUoKnByaW1pdGl2ZVZhbHVlKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpt
YXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5
ZXItPnNldE9yaWdpbihGaWxsTGF5ZXI6OmluaXRpYWxGaWxsT3JpZ2luKGxheWVyLT50eXBlKCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAg
bGF5ZXItPnNldE9yaWdpbigqcHJpbWl0aXZlVmFsdWUpOworfQorCitQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
Q1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVlKCkpCisgICAg
ICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0
PENTU0ltYWdlVmFsdWUqPih2YWx1ZSkpOworCisgICAgaWYgKHZhbHVlLT5pc0ltYWdlR2VuZXJh
dG9yVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShw
cm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7CisK
KyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKKyAgICBpZiAodmFsdWUtPmlzSW1hZ2VTZXRWYWx1
ZSgpKQorICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0
aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4odmFsdWUpKTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IDA7Cit9CisKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZh
bHVlKQoreworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBl
bmRpbmdJbWFnZSgpOworICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkK
KyAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7CisgICAgcmV0
dXJuIGltYWdlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJl
c29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc1Bl
bmRpbmcoKSkgeworICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYWRkKHByb3BlcnR5
KTsKKyAgICAgICAgcmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOworICAg
IH0KKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKK30KKwor
I2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJl
c29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NT
SW1hZ2VTZXRWYWx1ZSogdmFsdWUpCit7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0g
dmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOworICAgIGlmIChpbWFn
ZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLmFkZChwcm9wZXJ0eSk7CisgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKK30KKyNl
bmRpZgorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxJbWFnZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGxheWVyLT5zZXRJbWFnZShGaWxsTGF5
ZXI6OmluaXRpYWxGaWxsSW1hZ2UobGF5ZXItPnR5cGUoKSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbGF5ZXItPnNldEltYWdlKHN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVlKSk7
Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJRCwg
RmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJ
bml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0UmVwZWF0WChGaWxsTGF5ZXI6Omlu
aXRpYWxGaWxsUmVwZWF0WChsYXllci0+dHlwZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5zZXRSZXBlYXRYKCpwcmltaXRp
dmVWYWx1ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFJlcGVhdFkoQ1NTUHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0UmVwZWF0WShGaWxs
TGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WShsYXllci0+dHlwZSgpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5zZXRSZXBlYXRZ
KCpwcmltaXRpdmVWYWx1ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFNpemUo
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0U2l6
ZVR5cGUoU2l6ZU5vbmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Q29udGFpbikKKyAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKENvbnRhaW4pOworICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ292ZXIpCisgICAgICAg
IGxheWVyLT5zZXRTaXplVHlwZShDb3Zlcik7CisgICAgZWxzZQorICAgICAgICBsYXllci0+c2V0
U2l6ZVR5cGUoU2l6ZUxlbmd0aCk7CisKKyAgICBMZW5ndGhTaXplIGIgPSBGaWxsTGF5ZXI6Omlu
aXRpYWxGaWxsU2l6ZUxlbmd0aChsYXllci0+dHlwZSgpKTsKKworICAgIGlmICh2YWx1ZS0+aXNJ
bml0aWFsVmFsdWUoKSB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNv
bnRhaW4gfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVDb3Zlcikgewor
ICAgICAgICBsYXllci0+c2V0U2l6ZUxlbmd0aChiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7CisKKyAg
ICBMZW5ndGggZmlyc3RMZW5ndGg7CisgICAgTGVuZ3RoIHNlY29uZExlbmd0aDsKKworICAgIGlm
IChQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpKSB7CisgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4ocGFpci0+Zmlyc3QoKSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKTsKKyAgICAgICAg
Zmlyc3RMZW5ndGggPSBmaXJzdC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgIHNlY29uZExlbmd0
aCA9IHNlY29uZC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxlKCksIG1fcm9v
dEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmlyc3RM
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0
eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgIHNlY29uZExl
bmd0aCA9IExlbmd0aCgpOworICAgIH0KKworICAgIGlmIChmaXJzdExlbmd0aC5pc1VuZGVmaW5l
ZCgpIHx8IHNlY29uZExlbmd0aC5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBiLnNldFdpZHRoKGZpcnN0TGVuZ3RoKTsKKyAgICBiLnNldEhlaWdodChzZWNvbmRMZW5ndGgp
OworICAgIGxheWVyLT5zZXRTaXplTGVuZ3RoKGIpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hcEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFs
dWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAg
ICBsYXllci0+c2V0WFBvc2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxYUG9zaXRpb24obGF5
ZXItPnR5cGUoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB6b29tRmFj
dG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CisgICAgTGVuZ3RoIGw7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQorICAg
ICAgICBsID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCBt
X3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCisgICAgICAgIGwgPSBMZW5ndGgo
cHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKKyAgICAgICAgbCA9IHByaW1pdGl2ZVZh
bHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
bjsKKyAgICBsYXllci0+c2V0WFBvc2l0aW9uKGwpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFs
dWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAg
ICBsYXllci0+c2V0WVBvc2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxZUG9zaXRpb24obGF5
ZXItPnR5cGUoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB6b29tRmFj
dG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CisgICAgTGVuZ3RoIGw7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQorICAg
ICAgICBsID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCBt
X3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCisgICAgICAgIGwgPSBMZW5ndGgo
cHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKKyAgICAgICAgbCA9IHByaW1pdGl2ZVZh
bHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
bjsKKyAgICBsYXllci0+c2V0WVBvc2l0aW9uKGwpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgICAgIGFuaW1hdGlv
bi0+c2V0RGVsYXkoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXkoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGFuaW1hdGlvbi0+
c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGZsb2F0LCBDU1NQcmltaXRpdmVW
YWx1ZTo6U2Vjb25kcz4oKSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9u
RGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAo
dmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihB
bmltYXRpb246OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIHN3aXRjaCAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkpIHsKKyAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAgICBsYXll
ci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uTm9ybWFsKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUFsdGVybmF0ZToKKyAgICAgICAgbGF5ZXIt
PnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVSZXZlcnNlOgorICAgICAgICBsYXllci0+
c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVBbHRlcm5hdGVSZXZlcnNlOgorICAgICAgICBs
YXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRl
UmV2ZXJzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBTdHlsZVJlc29sdmVy
OjptYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBhbmlt
YXRpb24tPnNldER1cmF0aW9uKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9uKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBh
bmltYXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxmbG9hdCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXItPnNl
dEZpbGxNb2RlKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkZpbGxNb2RlKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBzd2l0Y2ggKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgY2FzZSBDU1NWYWx1ZU5vbmU6CisgICAg
ICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZU5vbmUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENTU1ZhbHVlRm9yd2FyZHM6CisgICAgICAgIGxheWVyLT5zZXRGaWxs
TW9kZShBbmltYXRpb25GaWxsTW9kZUZvcndhcmRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDU1NWYWx1ZUJhY2t3YXJkczoKKyAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1hdGlv
bkZpbGxNb2RlQmFja3dhcmRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUJv
dGg6CisgICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZUJvdGgpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0
aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgYW5pbWF0aW9u
LT5zZXRJdGVyYXRpb25Db3VudChBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25JdGVyYXRpb25D
b3VudCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUp
CisgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoLTEpOworICAgIGVsc2UKKyAg
ICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0Rmxv
YXRWYWx1ZSgpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25OYW1lKEFu
aW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW5p
dGlhbFZhbHVlKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldE5hbWUoQW5pbWF0aW9uOjppbml0aWFs
QW5pbWF0aW9uTmFtZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Tm9uZSkKKyAgICAgICAgbGF5ZXItPnNldElzTm9uZUFuaW1hdGlvbih0cnVlKTsKKyAgICBlbHNl
CisgICAgICAgIGxheWVyLT5zZXROYW1lKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
KTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0
aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSkgeworICAgICAgICBsYXllci0+c2V0UGxheVN0YXRlKEFuaW1hdGlvbjo6aW5pdGlh
bEFuaW1hdGlvblBsYXlTdGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7CisgICAgRUFuaW1QbGF5U3RhdGUgcGxheVN0YXRlID0gKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1QbGF5U3RhdGVQYXVz
ZWQgOiBBbmltUGxheVN0YXRlUGxheWluZzsKKyAgICBsYXllci0+c2V0UGxheVN0YXRlKHBsYXlT
dGF0ZSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uUHJvcGVydHkoQW5p
bWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlz
SW5pdGlhbFZhbHVlKCkpIHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFu
aW1hdGlvbjo6QW5pbWF0ZUFsbCk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlJbnZhbGlkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
QWxsKSB7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFu
aW1hdGVBbGwpOworICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SW52
YWxpZCk7CisgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZU5vbmUpIHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlv
bjo6QW5pbWF0ZU5vbmUpOworICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5SW52YWxpZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRp
b25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZVNpbmdsZVByb3BlcnR5KTsKKyAgICAgICAgYW5pbWF0
aW9uLT5zZXRQcm9wZXJ0eShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSkpOworICAgIH0KK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmlt
YXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVl
KQoreworICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgICAgICBhbmltYXRp
b24tPnNldFRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvblRpbWluZ0Z1
bmN0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIHN3
aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVMaW5lYXI6CisgICAgICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlv
bihMaW5lYXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2U6CisgICAgICAgICAgICAgICAgYW5pbWF0
aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRWFz
ZUluOgorICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDAuNDIsIDAuMCwgMS4wLCAxLjApKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlT3V0OgorICAg
ICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbjo6Y3JlYXRlKDAuMCwgMC4wLCAwLjU4LCAxLjApKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlSW5PdXQ6CisgICAgICAgICAg
ICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoMC40MiwgMC4wLCAwLjU4LCAxLjApKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTdGVwU3RhcnQ6CisgICAgICAgICAgICAgICAg
YW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
MSwgdHJ1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZVN0ZXBFbmQ6CisgICAgICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlv
bihTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoMSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZh
bHVlLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7CisgICAgICAgIENTU0N1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSogY3ViaWNUaW1pbmdGdW5jdGlvbiA9IHN0YXRp
Y19jYXN0PENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSo+KHZhbHVlKTsKKyAgICAg
ICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9u
OjpjcmVhdGUoY3ViaWNUaW1pbmdGdW5jdGlvbi0+eDEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+
eTEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+eDIoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+eTIo
KSkpOworICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKCkp
IHsKKyAgICAgICAgQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKiBzdGVwc1RpbWluZ0Z1bmN0
aW9uID0gc3RhdGljX2Nhc3Q8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKj4odmFsdWUpOwor
ICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFN0ZXBzVGltaW5nRnVuY3Rpb246
OmNyZWF0ZShzdGVwc1RpbWluZ0Z1bmN0aW9uLT5udW1iZXJPZlN0ZXBzKCksIHN0ZXBzVGltaW5n
RnVuY3Rpb24tPnN0ZXBBdFN0YXJ0KCkpKTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0xpbmVh
clRpbWluZ0Z1bmN0aW9uVmFsdWUoKSkKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5j
dGlvbihMaW5lYXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworfQorCit2b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVl
KiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQoreworICAgIC8vIElmIHdlJ3JlIG5vdCBh
IHZhbHVlIGxpc3QsIHRoZW4gd2UgYXJlICJub25lIiBhbmQgZG9uJ3QgbmVlZCB0byBhbHRlciB0
aGUgZW1wdHkgaW1hZ2UgYXQgYWxsLgorICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ZhbHVl
TGlzdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYm9yZGVyIGlt
YWdlIHZhbHVlLgorICAgIENTU1ZhbHVlTGlzdCogYm9yZGVySW1hZ2UgPSBzdGF0aWNfY2FzdDxD
U1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisKKyAgICAvLyBTZXQgdGhlIGltYWdlICh0aGlzIGtpY2tz
IG9mZiB0aGUgbG9hZCkuCisgICAgQ1NTUHJvcGVydHlJRCBpbWFnZVByb3BlcnR5OworICAgIGlm
IChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlKQorICAgICAgICBpbWFn
ZVByb3BlcnR5ID0gQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTsKKyAgICBlbHNlIGlmIChw
cm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSkKKyAgICAgICAgaW1hZ2VQ
cm9wZXJ0eSA9IENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOworICAgIGVsc2UK
KyAgICAgICAgaW1hZ2VQcm9wZXJ0eSA9IHByb3BlcnR5OworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMCA7IGkgPCBib3JkZXJJbWFnZS0+bGVuZ3RoKCkgOyArK2kpIHsKKyAgICAgICAgQ1NTVmFs
dWUqIGN1cnJlbnQgPSBib3JkZXJJbWFnZS0+aXRlbShpKTsKKworICAgICAgICBpZiAoY3VycmVu
dC0+aXNJbWFnZVZhbHVlKCkgfHwgY3VycmVudC0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkKKyNp
ZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKKyAgICAgICAgICAgIHx8IGN1cnJlbnQtPmlzSW1hZ2VT
ZXRWYWx1ZSgpCisjZW5kaWYKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIGltYWdlLnNldElt
YWdlKHN0eWxlSW1hZ2UoaW1hZ2VQcm9wZXJ0eSwgY3VycmVudCkpOworICAgICAgICBlbHNlIGlm
IChjdXJyZW50LT5pc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQorICAgICAgICAgICAgbWFwTmlu
ZVBpZWNlSW1hZ2VTbGljZShjdXJyZW50LCBpbWFnZSk7CisgICAgICAgIGVsc2UgaWYgKGN1cnJl
bnQtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogc2xhc2hMaXN0
ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oY3VycmVudCk7CisgICAgICAgICAgICAvLyBN
YXAgaW4gdGhlIGltYWdlIHNsaWNlcy4KKyAgICAgICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0o
MCkgJiYgc2xhc2hMaXN0LT5pdGVtKDApLT5pc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQorICAg
ICAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2Uoc2xhc2hMaXN0LT5pdGVtKDApLCBp
bWFnZSk7CisKKyAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgYm9yZGVyIHNsaWNlcy4KKyAgICAg
ICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0oMSkpCisgICAgICAgICAgICAgICAgaW1hZ2Uuc2V0
Qm9yZGVyU2xpY2VzKG1hcE5pbmVQaWVjZUltYWdlUXVhZChzbGFzaExpc3QtPml0ZW0oMSkpKTsK
KworICAgICAgICAgICAgLy8gTWFwIGluIHRoZSBvdXRzZXQuCisgICAgICAgICAgICBpZiAoc2xh
c2hMaXN0LT5pdGVtKDIpKQorICAgICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5l
UGllY2VJbWFnZVF1YWQoc2xhc2hMaXN0LT5pdGVtKDIpKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
Y3VycmVudC0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIGFw
cHJvcHJpYXRlIHJ1bGVzIGZvciBzdHJldGNoL3JvdW5kL3JlcGVhdCBvZiB0aGUgc2xpY2VzLgor
ICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoY3VycmVudCwgaW1hZ2UpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVySW1hZ2UpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBwcmVzZXJ2ZSB0aGUgbGVnYWN5IGJl
aGF2aW9yIG9mIC13ZWJraXQtYm9yZGVyLWltYWdlIGFuZCBtYWtlIHRoZSBib3JkZXIgc2xpY2Vz
CisgICAgICAgIC8vIGFsc28gc2V0IHRoZSBib3JkZXIgd2lkdGhzLiBXZSBkb24ndCBuZWVkIHRv
IHdvcnJ5IGFib3V0IHBlcmNlbnRhZ2VzLCBzaW5jZSB3ZSBkb24ndCBldmVuIHN1cHBvcnQKKyAg
ICAgICAgLy8gdGhvc2Ugb24gcmVhbCBib3JkZXJzIHlldC4KKyAgICAgICAgaWYgKGltYWdlLmJv
cmRlclNsaWNlcygpLnRvcCgpLmlzRml4ZWQoKSkKKyAgICAgICAgICAgIHN0eWxlKCktPnNldEJv
cmRlclRvcFdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLnRvcCgpLnZhbHVlKCkpOworICAgICAg
ICBpZiAoaW1hZ2UuYm9yZGVyU2xpY2VzKCkucmlnaHQoKS5pc0ZpeGVkKCkpCisgICAgICAgICAg
ICBzdHlsZSgpLT5zZXRCb3JkZXJSaWdodFdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLnJpZ2h0
KCkudmFsdWUoKSk7CisgICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS5ib3R0b20oKS5p
c0ZpeGVkKCkpCisgICAgICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJCb3R0b21XaWR0aChpbWFn
ZS5ib3JkZXJTbGljZXMoKS5ib3R0b20oKS52YWx1ZSgpKTsKKyAgICAgICAgaWYgKGltYWdlLmJv
cmRlclNsaWNlcygpLmxlZnQoKS5pc0ZpeGVkKCkpCisgICAgICAgICAgICBzdHlsZSgpLT5zZXRC
b3JkZXJMZWZ0V2lkdGgoaW1hZ2UuYm9yZGVyU2xpY2VzKCkubGVmdCgpLnZhbHVlKCkpOworICAg
IH0KK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1Zh
bHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQoreworICAgIGlmICghdmFsdWUgfHwg
IXZhbHVlLT5pc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBSZXRyaWV2ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVlLgorICAgIENTU0JvcmRlckltYWdl
U2xpY2VWYWx1ZSogYm9yZGVySW1hZ2VTbGljZSA9IHN0YXRpY19jYXN0PENTU0JvcmRlckltYWdl
U2xpY2VWYWx1ZSo+KHZhbHVlKTsKKworICAgIC8vIFNldCB1cCBhIGxlbmd0aCBib3ggdG8gcmVw
cmVzZW50IG91ciBpbWFnZSBzbGljZXMuCisgICAgTGVuZ3RoQm94IGJveDsKKyAgICBRdWFkKiBz
bGljZXMgPSBib3JkZXJJbWFnZVNsaWNlLT5zbGljZXMoKTsKKyAgICBpZiAoc2xpY2VzLT50b3Ao
KS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgIGJveC5tX3RvcCA9IExlbmd0aChzbGljZXMtPnRv
cCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICBlbHNlCisgICAgICAgIGJveC5t
X3RvcCA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUiksIEZpeGVkKTsKKyAgICBpZiAoc2xpY2VzLT5ib3R0b20oKS0+aXNQZXJj
ZW50YWdlKCkpCisgICAgICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgp
LT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICBlbHNlCisgICAgICAgIGJveC5tX2Jv
dHRvbSA9IExlbmd0aCgoaW50KXNsaWNlcy0+Ym90dG9tKCktPmdldEZsb2F0VmFsdWUoQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7CisgICAgaWYgKHNsaWNlcy0+bGVmdCgp
LT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxl
ZnQoKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgZWxzZQorICAgICAgICBib3gu
bV9sZWZ0ID0gTGVuZ3RoKHNsaWNlcy0+bGVmdCgpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUiksIEZpeGVkKTsKKyAgICBpZiAoc2xpY2VzLT5yaWdodCgpLT5pc1Bl
cmNlbnRhZ2UoKSkKKyAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgp
LT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICBlbHNlCisgICAgICAgIGJveC5tX3Jp
Z2h0ID0gTGVuZ3RoKHNsaWNlcy0+cmlnaHQoKS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7CisgICAgaW1hZ2Uuc2V0SW1hZ2VTbGljZXMoYm94KTsK
KworICAgIC8vIFNldCBvdXIgZmlsbCBtb2RlLgorICAgIGltYWdlLnNldEZpbGwoYm9yZGVySW1h
Z2VTbGljZS0+bV9maWxsKTsKK30KKworTGVuZ3RoQm94IFN0eWxlUmVzb2x2ZXI6Om1hcE5pbmVQ
aWVjZUltYWdlUXVhZChDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSB8fCAhdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIExlbmd0aEJveCgpOworCisg
ICAgLy8gR2V0IG91ciB6b29tIHZhbHVlLgorICAgIGZsb2F0IHpvb20gPSB1c2VTVkdab29tUnVs
ZXMoKSA/IDEuMGYgOiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisKKyAgICAvLyBSZXRyaWV2
ZSB0aGUgcHJpbWl0aXZlIHZhbHVlLgorICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBib3JkZXJXaWR0
aHMgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKworICAgIC8vIFNl
dCB1cCBhIGxlbmd0aCBib3ggdG8gcmVwcmVzZW50IG91ciBpbWFnZSBzbGljZXMuCisgICAgTGVu
Z3RoQm94IGJveDsgLy8gRGVmYXVsdHMgdG8gJ2F1dG8nIHNvIHdlIGRvbid0IGhhdmUgdG8gaGFu
ZGxlIHRoYXQgZXhwbGljaXRseSBiZWxvdy4KKyAgICBRdWFkKiBzbGljZXMgPSBib3JkZXJXaWR0
aHMtPmdldFF1YWRWYWx1ZSgpOworICAgIGlmIChzbGljZXMtPnRvcCgpLT5pc051bWJlcigpKQor
ICAgICAgICBib3gubV90b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0SW50VmFsdWUoKSwg
UmVsYXRpdmUpOworICAgIGVsc2UgaWYgKHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQor
ICAgICAgICBib3gubV90b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUo
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7CisgICAgZWxzZSBp
ZiAoc2xpY2VzLT50b3AoKS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZUF1dG8pCisgICAgICAgIGJv
eC5tX3RvcCA9IHNsaWNlcy0+dG9wKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCBy
b290RWxlbWVudFN0eWxlKCksIHpvb20pOworCisgICAgaWYgKHNsaWNlcy0+cmlnaHQoKS0+aXNO
dW1iZXIoKSkKKyAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5n
ZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CisgICAgZWxzZSBpZiAoc2xpY2VzLT5yaWdodCgpLT5p
c1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdo
dCgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQ
ZXJjZW50KTsKKyAgICBlbHNlIGlmIChzbGljZXMtPnJpZ2h0KCktPmdldElkZW50KCkgIT0gQ1NT
VmFsdWVBdXRvKQorICAgICAgICBib3gubV9yaWdodCA9IHNsaWNlcy0+cmlnaHQoKS0+Y29tcHV0
ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CisKKyAg
ICBpZiAoc2xpY2VzLT5ib3R0b20oKS0+aXNOdW1iZXIoKSkKKyAgICAgICAgYm94Lm1fYm90dG9t
ID0gTGVuZ3RoKHNsaWNlcy0+Ym90dG9tKCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKKyAg
ICBlbHNlIGlmIChzbGljZXMtPmJvdHRvbSgpLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgYm94
Lm1fYm90dG9tID0gTGVuZ3RoKHNsaWNlcy0+Ym90dG9tKCktPmdldERvdWJsZVZhbHVlKENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQpOworICAgIGVsc2UgaWYgKHNs
aWNlcy0+Ym90dG9tKCktPmdldElkZW50KCkgIT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICBib3gu
bV9ib3R0b20gPSBzbGljZXMtPmJvdHRvbSgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUo
KSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKKworICAgIGlmIChzbGljZXMtPmxlZnQoKS0+
aXNOdW1iZXIoKSkKKyAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+
Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOworICAgIGVsc2UgaWYgKHNsaWNlcy0+bGVmdCgpLT5p
c1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQo
KS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVy
Y2VudCk7CisgICAgZWxzZSBpZiAoc2xpY2VzLT5sZWZ0KCktPmdldElkZW50KCkgIT0gQ1NTVmFs
dWVBdXRvKQorICAgICAgICBib3gubV9sZWZ0ID0gc2xpY2VzLT5sZWZ0KCktPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb20pOworCisgICAgcmV0
dXJuIGJveDsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZVJlcGVh
dChDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKK3sKKyAgICBpZiAoIXZh
bHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdl
dFBhaXJWYWx1ZSgpOworICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+
c2Vjb25kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBmaXJzdElkZW50aWZpZXIgPSBw
YWlyLT5maXJzdCgpLT5nZXRJZGVudCgpOworICAgIGludCBzZWNvbmRJZGVudGlmaWVyID0gcGFp
ci0+c2Vjb25kKCktPmdldElkZW50KCk7CisKKyAgICBFTmluZVBpZWNlSW1hZ2VSdWxlIGhvcml6
b250YWxSdWxlOworICAgIHN3aXRjaCAoZmlyc3RJZGVudGlmaWVyKSB7CisgICAgY2FzZSBDU1NW
YWx1ZVN0cmV0Y2g6CisgICAgICAgIGhvcml6b250YWxSdWxlID0gU3RyZXRjaEltYWdlUnVsZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZVJvdW5kOgorICAgICAgICBob3Jpem9u
dGFsUnVsZSA9IFJvdW5kSW1hZ2VSdWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Zh
bHVlU3BhY2U6CisgICAgICAgIGhvcml6b250YWxSdWxlID0gU3BhY2VJbWFnZVJ1bGU7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IC8vIENTU1ZhbHVlUmVwZWF0CisgICAgICAgIGhvcml6
b250YWxSdWxlID0gUmVwZWF0SW1hZ2VSdWxlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
aW1hZ2Uuc2V0SG9yaXpvbnRhbFJ1bGUoaG9yaXpvbnRhbFJ1bGUpOworCisgICAgRU5pbmVQaWVj
ZUltYWdlUnVsZSB2ZXJ0aWNhbFJ1bGU7CisgICAgc3dpdGNoIChzZWNvbmRJZGVudGlmaWVyKSB7
CisgICAgY2FzZSBDU1NWYWx1ZVN0cmV0Y2g6CisgICAgICAgIHZlcnRpY2FsUnVsZSA9IFN0cmV0
Y2hJbWFnZVJ1bGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVSb3VuZDoKKyAg
ICAgICAgdmVydGljYWxSdWxlID0gUm91bmRJbWFnZVJ1bGU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ1NTVmFsdWVTcGFjZToKKyAgICAgICAgdmVydGljYWxSdWxlID0gU3BhY2VJbWFnZVJ1
bGU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IC8vIENTU1ZhbHVlUmVwZWF0CisgICAg
ICAgIHZlcnRpY2FsUnVsZSA9IFJlcGVhdEltYWdlUnVsZTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGltYWdlLnNldFZlcnRpY2FsUnVsZSh2ZXJ0aWNhbFJ1bGUpOworfQorCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQoreworICAgIGlmIChtX3N0eWxl
LT50ZXh0U2l6ZUFkanVzdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGb250RGVzY3JpcHRp
b24gbmV3Rm9udERlc2NyaXB0aW9uKG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICBu
ZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVj
aWZpZWRTaXplKCkpOworICAgIG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVz
Y3JpcHRpb24pOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3sKKyAgICBpZiAo
c3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERl
c2NyaXB0aW9uKGNoaWxkRm9udCk7CisgICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9u
LCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tG
b3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKQoreworICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOworCisgICAgaWYgKGNoaWxkRm9udC5pc0Fic29sdXRlU2l6
ZSgpIHx8ICFwYXJlbnRTdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBwYXJlbnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgIGlmIChjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVudEZvbnQudXNl
Rml4ZWREZWZhdWx0U2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGb3Igbm93LCBs
dW1wIGFsbCBmYW1pbGllcyBidXQgbW9ub3NwYWNlIHRvZ2V0aGVyLgorICAgIGlmIChjaGlsZEZv
bnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5ICYm
CisgICAgICAgIHBhcmVudEZvbnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6
TW9ub3NwYWNlRmFtaWx5KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBrbm93IHRoZSBw
YXJlbnQgaXMgbW9ub3NwYWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3BhY2UsIGFuZCB0aGF0IGZv
bnQKKyAgICAvLyBzaXplIHdhcyB1bnNwZWNpZmllZC4gIFdlIHdhbnQgdG8gc2NhbGUgb3VyIGZv
bnQgc2l6ZSBhcyBhcHByb3ByaWF0ZS4KKyAgICAvLyBJZiB0aGUgZm9udCB1c2VzIGEga2V5d29y
ZCBzaXplLCB0aGVuIHdlIHJlZmV0Y2ggZnJvbSB0aGUgdGFibGUgcmF0aGVyIHRoYW4KKyAgICAv
LyBtdWx0aXBseWluZyBieSBvdXIgc2NhbGUgZmFjdG9yLgorICAgIGZsb2F0IHNpemU7CisgICAg
aWYgKGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgpKQorICAgICAgICBzaXplID0gZm9udFNpemVGb3JL
ZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBjaGlsZEZvbnQu
a2V5d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAg
IGVsc2UgeworICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQo
KS0+c2V0dGluZ3MoKTsKKyAgICAgICAgZmxvYXQgZml4ZWRTY2FsZUZhY3RvciA9IHNldHRpbmdz
CisgICAgICAgICAgICA/IHN0YXRpY19jYXN0PGZsb2F0PihzZXR0aW5ncy0+ZGVmYXVsdEZpeGVk
Rm9udFNpemUoKSkgLyBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCkKKyAgICAgICAgICAgIDog
MTsKKyAgICAgICAgc2l6ZSA9IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID8KKyAg
ICAgICAgICAgICAgICBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpIC8gZml4ZWRTY2FsZUZhY3Rv
ciA6CisgICAgICAgICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSAqIGZpeGVkU2Nh
bGVGYWN0b3I7CisgICAgfQorCisgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlv
bihjaGlsZEZvbnQpOworICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7
CisgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOworfQor
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBmbG9hdCBzaXplKQoreworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZp
ZWRTaXplKHNpemUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29t
cHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUobV9jaGVja2VyLmRvY3VtZW50KCksIG1fc3R5bGUu
Z2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29t
UnVsZXMoKSkpOworfQorCitmbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9t
U3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgYm9v
bCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVs
ZXMpCit7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IDEuMGY7CisgICAgaWYgKCF1c2VTVkdab29t
UnVsZXMpIHsKKyAgICAgICAgem9vbUZhY3RvciA9IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Cisg
ICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgICAg
IHpvb21GYWN0b3IgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CisgICAgfQorCisgICAgcmV0
dXJuIFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3Vt
ZW50LCB6b29tRmFjdG9yLCBpc0Fic29sdXRlU2l6ZSwgc3BlY2lmaWVkU2l6ZSk7Cit9CisKK2Zs
b2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3Vt
ZW50KiBkb2N1bWVudCwgZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxv
YXQgc3BlY2lmaWVkU2l6ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHVzZVNtYXJ0TWluaW11
bUZvckZvbnRTaXplKQoreworICAgIC8vIFRleHQgd2l0aCBhIDBweCBmb250IHNpemUgc2hvdWxk
IG5vdCBiZSB2aXNpYmxlIGFuZCB0aGVyZWZvcmUgbmVlZHMgdG8gYmUKKyAgICAvLyBleGVtcHQg
ZnJvbSBtaW5pbXVtIGZvbnQgc2l6ZSBydWxlcy4gQWNpZDMgcmVsaWVzIG9uIHRoaXMgZm9yIHBp
eGVsLXBlcmZlY3QKKyAgICAvLyByZW5kZXJpbmcuIFRoaXMgaXMgYWxzbyBjb21wYXRpYmxlIHdp
dGggb3RoZXIgYnJvd3NlcnMgdGhhdCBoYXZlIG1pbmltdW0KKyAgICAvLyBmb250IHNpemUgc2V0
dGluZ3MgKGUuZy4gRmlyZWZveCkuCisgICAgaWYgKGZhYnNmKHNwZWNpZmllZFNpemUpIDwgc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46OmVwc2lsb24oKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7
CisKKyAgICAvLyBXZSBzdXBwb3J0IHR3byB0eXBlcyBvZiBtaW5pbXVtIGZvbnQgc2l6ZS4gIFRo
ZSBmaXJzdCBpcyBhIGhhcmQgb3ZlcnJpZGUgdGhhdCBhcHBsaWVzIHRvCisgICAgLy8gYWxsIGZv
bnRzLiAgVGhpcyBpcyAibWluU2l6ZS4iICBUaGUgc2Vjb25kIHR5cGUgb2YgbWluaW11bSBmb250
IHNpemUgaXMgYSAic21hcnQgbWluaW11bSIKKyAgICAvLyB0aGF0IGlzIGFwcGxpZWQgb25seSB3
aGVuIHRoZSBXZWIgcGFnZSBjYW4ndCBrbm93IHdoYXQgc2l6ZSBpdCByZWFsbHkgYXNrZWQgZm9y
LCBlLmcuLAorICAgIC8vIHdoZW4gaXQgdXNlcyBsb2dpY2FsIHNpemVzIGxpa2UgInNtYWxsIiBv
ciBleHByZXNzZXMgdGhlIGZvbnQtc2l6ZSBhcyBhIHBlcmNlbnRhZ2Ugb2YKKyAgICAvLyB0aGUg
dXNlcidzIGRlZmF1bHQgZm9udCBzZXR0aW5nLgorCisgICAgLy8gV2l0aCB0aGUgc21hcnQgbWlu
aW11bSwgd2UgbmV2ZXIgd2FudCB0byBnZXQgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIGZvbnQg
c2l6ZSB0byBrZWVwIGZvbnRzIHJlYWRhYmxlLgorICAgIC8vIEhvd2V2ZXIgd2UgYWx3YXlzIGFs
bG93IHRoZSBwYWdlIHRvIHNldCBhbiBleHBsaWNpdCBwaXhlbCBzaXplIHRoYXQgaXMgc21hbGxl
ciwKKyAgICAvLyBzaW5jZSBzaXRlcyB3aWxsIG1pcy1yZW5kZXIgb3RoZXJ3aXNlIChlLmcuLCBo
dHRwOi8vd3d3LmdhbWVzcG90LmNvbSB3aXRoIGEgOXB4IG1pbmltdW0pLgorCisgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncykK
KyAgICAgICAgcmV0dXJuIDEuMGY7CisKKyAgICBpbnQgbWluU2l6ZSA9IHNldHRpbmdzLT5taW5p
bXVtRm9udFNpemUoKTsKKyAgICBpbnQgbWluTG9naWNhbFNpemUgPSBzZXR0aW5ncy0+bWluaW11
bUxvZ2ljYWxGb250U2l6ZSgpOworICAgIGZsb2F0IHpvb21lZFNpemUgPSBzcGVjaWZpZWRTaXpl
ICogem9vbUZhY3RvcjsKKworICAgIC8vIEFwcGx5IHRoZSBoYXJkIG1pbmltdW0gZmlyc3QuICBX
ZSBvbmx5IGFwcGx5IHRoZSBoYXJkIG1pbmltdW0gaWYgYWZ0ZXIgem9vbWluZyB3ZSdyZSBzdGls
bCB0b28gc21hbGwuCisgICAgaWYgKHpvb21lZFNpemUgPCBtaW5TaXplKQorICAgICAgICB6b29t
ZWRTaXplID0gbWluU2l6ZTsKKworICAgIC8vIE5vdyBhcHBseSB0aGUgInNtYXJ0IG1pbmltdW0u
IiAgVGhpcyBtaW5pbXVtIGlzIGFsc28gb25seSBhcHBsaWVkIGlmIHdlJ3JlIHN0aWxsIHRvbyBz
bWFsbAorICAgIC8vIGFmdGVyIHpvb21pbmcuICBUaGUgZm9udCBzaXplIG11c3QgZWl0aGVyIGJl
IHJlbGF0aXZlIHRvIHRoZSB1c2VyIGRlZmF1bHQgb3IgdGhlIG9yaWdpbmFsIHNpemUKKyAgICAv
LyBtdXN0IGhhdmUgYmVlbiBhY2NlcHRhYmxlLiAgSW4gb3RoZXIgd29yZHMsIHdlIG9ubHkgYXBw
bHkgdGhlIHNtYXJ0IG1pbmltdW0gd2hlbmV2ZXIgd2UncmUgcG9zaXRpdmUKKyAgICAvLyBkb2lu
ZyBzbyB3b24ndCBkaXNydXB0IHRoZSBsYXlvdXQuCisgICAgaWYgKHVzZVNtYXJ0TWluaW11bUZv
ckZvbnRTaXplICYmIHpvb21lZFNpemUgPCBtaW5Mb2dpY2FsU2l6ZSAmJiAoc3BlY2lmaWVkU2l6
ZSA+PSBtaW5Mb2dpY2FsU2l6ZSB8fCAhaXNBYnNvbHV0ZVNpemUpKQorICAgICAgICB6b29tZWRT
aXplID0gbWluTG9naWNhbFNpemU7CisKKyAgICAvLyBBbHNvIGNsYW1wIHRvIGEgcmVhc29uYWJs
ZSBtYXhpbXVtIHRvIHByZXZlbnQgaW5zYW5lIGZvbnQgc2l6ZXMgZnJvbSBjYXVzaW5nIGNyYXNo
ZXMgb24gdmFyaW91cworICAgIC8vIHBsYXRmb3JtcyAoSSdtIGxvb2tpbmcgYXQgeW91LCBXaW5k
b3dzLikKKyAgICByZXR1cm4gbWluKDEwMDAwMDAuMGYsIHpvb21lZFNpemUpOworfQorCitjb25z
dCBpbnQgZm9udFNpemVUYWJsZU1heCA9IDE2OworY29uc3QgaW50IGZvbnRTaXplVGFibGVNaW4g
PSA5OworY29uc3QgaW50IHRvdGFsS2V5d29yZHMgPSA4OworCisvLyBXaW5JRS9OYXY0IHRhYmxl
IGZvciBmb250IHNpemVzLiAgRGVzaWduZWQgdG8gbWF0Y2ggdGhlIGxlZ2FjeSBmb250IG1hcHBp
bmcgc3lzdGVtIG9mIEhUTUwuCitzdGF0aWMgY29uc3QgaW50IHF1aXJrc0ZvbnRTaXplVGFibGVb
Zm9udFNpemVUYWJsZU1heCAtIGZvbnRTaXplVGFibGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9
Cit7CisgICAgICB7IDksICAgIDksICAgICA5LCAgICAgOSwgICAgMTEsICAgIDE0LCAgICAxOCwg
ICAgMjggfSwKKyAgICAgIHsgOSwgICAgOSwgICAgIDksICAgIDEwLCAgICAxMiwgICAgMTUsICAg
IDIwLCAgICAzMSB9LAorICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAgMTEsICAgIDEzLCAgICAx
NywgICAgMjIsICAgIDM0IH0sCisgICAgICB7IDksICAgIDksICAgIDEwLCAgICAxMiwgICAgMTQs
ICAgIDE4LCAgICAyNCwgICAgMzcgfSwKKyAgICAgIHsgOSwgICAgOSwgICAgMTAsICAgIDEzLCAg
ICAxNiwgICAgMjAsICAgIDI2LCAgICA0MCB9LCAvLyBmaXhlZCBmb250IGRlZmF1bHQgKDEzKQor
ICAgICAgeyA5LCAgICA5LCAgICAxMSwgICAgMTQsICAgIDE3LCAgICAyMSwgICAgMjgsICAgIDQy
IH0sCisgICAgICB7IDksICAgMTAsICAgIDEyLCAgICAxNSwgICAgMTcsICAgIDIzLCAgICAzMCwg
ICAgNDUgfSwKKyAgICAgIHsgOSwgICAxMCwgICAgMTMsICAgIDE2LCAgICAxOCwgICAgMjQsICAg
IDMyLCAgICA0OCB9ICAvLyBwcm9wb3J0aW9uYWwgZm9udCBkZWZhdWx0ICgxNikKK307CisvLyBI
VE1MICAgICAgIDEgICAgICAyICAgICAgMyAgICAgIDQgICAgICA1ICAgICAgNiAgICAgIDcKKy8v
IENTUyAgeHhzICAgeHMgICAgIHMgICAgICBtICAgICAgbCAgICAgeGwgICAgIHh4bAorLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAgIHVzZXIgcHJl
ZgorCisvLyBTdHJpY3QgbW9kZSB0YWJsZSBtYXRjaGVzIE1hY0lFIGFuZCBNb3ppbGxhJ3Mgc2V0
dGluZ3MgZXhhY3RseS4KK3N0YXRpYyBjb25zdCBpbnQgc3RyaWN0Rm9udFNpemVUYWJsZVtmb250
U2l6ZVRhYmxlTWF4IC0gZm9udFNpemVUYWJsZU1pbiArIDFdW3RvdGFsS2V5d29yZHNdID0KK3sK
KyAgICAgIHsgOSwgICAgOSwgICAgIDksICAgICA5LCAgICAxMSwgICAgMTQsICAgIDE4LCAgICAy
NyB9LAorICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNSwgICAgMjAs
ICAgIDMwIH0sCisgICAgICB7IDksICAgIDksICAgIDEwLCAgICAxMSwgICAgMTMsICAgIDE3LCAg
ICAyMiwgICAgMzMgfSwKKyAgICAgIHsgOSwgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNCwgICAg
MTgsICAgIDI0LCAgICAzNiB9LAorICAgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE2
LCAgICAyMCwgICAgMjYsICAgIDM5IH0sIC8vIGZpeGVkIGZvbnQgZGVmYXVsdCAoMTMpCisgICAg
ICB7IDksICAgMTAsICAgIDEyLCAgICAxNCwgICAgMTcsICAgIDIxLCAgICAyOCwgICAgNDIgfSwK
KyAgICAgIHsgOSwgICAxMCwgICAgMTMsICAgIDE1LCAgICAxOCwgICAgMjMsICAgIDMwLCAgICA0
NSB9LAorICAgICAgeyA5LCAgIDEwLCAgICAxMywgICAgMTYsICAgIDE4LCAgICAyNCwgICAgMzIs
ICAgIDQ4IH0gIC8vIHByb3BvcnRpb25hbCBmb250IGRlZmF1bHQgKDE2KQorfTsKKy8vIEhUTUwg
ICAgICAgMSAgICAgIDIgICAgICAzICAgICAgNCAgICAgIDUgICAgICA2ICAgICAgNworLy8gQ1NT
ICB4eHMgICB4cyAgICAgcyAgICAgIG0gICAgICBsICAgICB4bCAgICAgeHhsCisvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAgICAgdXNlciBwcmVmCisK
Ky8vIEZvciB2YWx1ZXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIHRhYmxlLCB3ZSB1c2UgVG9k
ZCBGYWhybmVyJ3Mgc3VnZ2VzdGVkIHNjYWxlCisvLyBmYWN0b3JzIGZvciBlYWNoIGtleXdvcmQg
dmFsdWUuCitzdGF0aWMgY29uc3QgZmxvYXQgZm9udFNpemVGYWN0b3JzW3RvdGFsS2V5d29yZHNd
ID0geyAwLjYwZiwgMC43NWYsIDAuODlmLCAxLjBmLCAxLjJmLCAxLjVmLCAyLjBmLCAzLjBmIH07
CisKK2Zsb2F0IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCogZG9j
dW1lbnQsIGludCBrZXl3b3JkLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpCit7Cisg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgaWYgKCFz
ZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIDEuMGY7CisKKyAgICBib29sIHF1aXJrc01vZGUgPSBk
b2N1bWVudC0+aW5RdWlya3NNb2RlKCk7CisgICAgaW50IG1lZGl1bVNpemUgPSBzaG91bGRVc2VG
aXhlZERlZmF1bHRTaXplID8gc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0
aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7CisgICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVU
YWJsZU1pbiAmJiBtZWRpdW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKKyAgICAgICAgLy8g
TG9vayB1cCB0aGUgZW50cnkgaW4gdGhlIHRhYmxlLgorICAgICAgICBpbnQgcm93ID0gbWVkaXVt
U2l6ZSAtIGZvbnRTaXplVGFibGVNaW47CisgICAgICAgIGludCBjb2wgPSAoa2V5d29yZCAtIENT
U1ZhbHVlWHhTbWFsbCk7CisgICAgICAgIHJldHVybiBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNp
emVUYWJsZVtyb3ddW2NvbF0gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd11bY29sXTsKKyAgICB9
CisKKyAgICAvLyBWYWx1ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgdGFibGUuIEFwcGx5
IHRoZSBzY2FsZSBmYWN0b3IgaW5zdGVhZC4KKyAgICBmbG9hdCBtaW5Mb2dpY2FsU2l6ZSA9IG1h
eChzZXR0aW5ncy0+bWluaW11bUxvZ2ljYWxGb250U2l6ZSgpLCAxKTsKKyAgICByZXR1cm4gbWF4
KGZvbnRTaXplRmFjdG9yc1trZXl3b3JkIC0gQ1NTVmFsdWVYeFNtYWxsXSptZWRpdW1TaXplLCBt
aW5Mb2dpY2FsU2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW50IGZp
bmROZWFyZXN0TGVnYWN5Rm9udFNpemUoaW50IHBpeGVsRm9udFNpemUsIGNvbnN0IFQqIHRhYmxl
LCBpbnQgbXVsdGlwbGllcikKK3sKKyAgICAvLyBJZ25vcmUgdGFibGVbMF0gYmVjYXVzZSB4eC1z
bWFsbCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSBsZWdhY3kgZm9udCBzaXplLgorICAgIGZv
ciAoaW50IGkgPSAxOyBpIDwgdG90YWxLZXl3b3JkcyAtIDE7IGkrKykgeworICAgICAgICBpZiAo
cGl4ZWxGb250U2l6ZSAqIDIgPCAodGFibGVbaV0gKyB0YWJsZVtpICsgMV0pICogbXVsdGlwbGll
cikKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gdG90YWxLZXl3b3Jk
cyAtIDE7Cit9CisKK2ludCBTdHlsZVJlc29sdmVyOjpsZWdhY3lGb250U2l6ZShEb2N1bWVudCog
ZG9jdW1lbnQsIGludCBwaXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNp
emUpCit7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7Cisg
ICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBib29sIHF1aXJrc01v
ZGUgPSBkb2N1bWVudC0+aW5RdWlya3NNb2RlKCk7CisgICAgaW50IG1lZGl1bVNpemUgPSBzaG91
bGRVc2VGaXhlZERlZmF1bHRTaXplID8gc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkg
OiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7CisgICAgaWYgKG1lZGl1bVNpemUgPj0gZm9u
dFNpemVUYWJsZU1pbiAmJiBtZWRpdW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKKyAgICAg
ICAgaW50IHJvdyA9IG1lZGl1bVNpemUgLSBmb250U2l6ZVRhYmxlTWluOworICAgICAgICByZXR1
cm4gZmluZE5lYXJlc3RMZWdhY3lGb250U2l6ZTxpbnQ+KHBpeGVsRm9udFNpemUsIHF1aXJrc01v
ZGUgPyBxdWlya3NGb250U2l6ZVRhYmxlW3Jvd10gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd10s
IDEpOworICAgIH0KKworICAgIHJldHVybiBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplPGZsb2F0
PihwaXhlbEZvbnRTaXplLCBmb250U2l6ZUZhY3RvcnMsIG1lZGl1bVNpemUpOworfQorCitzdGF0
aWMgQ29sb3IgY29sb3JGb3JDU1NWYWx1ZShpbnQgY3NzVmFsdWVJZCkKK3sKKyAgICBzdHJ1Y3Qg
Q29sb3JWYWx1ZSB7CisgICAgICAgIGludCBjc3NWYWx1ZUlkOworICAgICAgICBSR0JBMzIgY29s
b3I7CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBDb2xvclZhbHVlIGNvbG9yVmFsdWVzW10g
PSB7CisgICAgICAgIHsgQ1NTVmFsdWVBcXVhLCAweEZGMDBGRkZGIH0sCisgICAgICAgIHsgQ1NT
VmFsdWVCbGFjaywgMHhGRjAwMDAwMCB9LAorICAgICAgICB7IENTU1ZhbHVlQmx1ZSwgMHhGRjAw
MDBGRiB9LAorICAgICAgICB7IENTU1ZhbHVlRnVjaHNpYSwgMHhGRkZGMDBGRiB9LAorICAgICAg
ICB7IENTU1ZhbHVlR3JheSwgMHhGRjgwODA4MCB9LAorICAgICAgICB7IENTU1ZhbHVlR3JlZW4s
IDB4RkYwMDgwMDAgIH0sCisgICAgICAgIHsgQ1NTVmFsdWVHcmV5LCAweEZGODA4MDgwIH0sCisg
ICAgICAgIHsgQ1NTVmFsdWVMaW1lLCAweEZGMDBGRjAwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVN
YXJvb24sIDB4RkY4MDAwMDAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZU5hdnksIDB4RkYwMDAwODAg
fSwKKyAgICAgICAgeyBDU1NWYWx1ZU9saXZlLCAweEZGODA4MDAwICB9LAorICAgICAgICB7IENT
U1ZhbHVlT3JhbmdlLCAweEZGRkZBNTAwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVQdXJwbGUsIDB4
RkY4MDAwODAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZVJlZCwgMHhGRkZGMDAwMCB9LAorICAgICAg
ICB7IENTU1ZhbHVlU2lsdmVyLCAweEZGQzBDMEMwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVUZWFs
LCAweEZGMDA4MDgwICB9LAorICAgICAgICB7IENTU1ZhbHVlVHJhbnNwYXJlbnQsIDB4MDAwMDAw
MDAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZVdoaXRlLCAweEZGRkZGRkZGIH0sCisgICAgICAgIHsg
Q1NTVmFsdWVZZWxsb3csIDB4RkZGRkZGMDAgfSwKKyAgICAgICAgeyAwLCAwIH0KKyAgICB9Owor
CisgICAgZm9yIChjb25zdCBDb2xvclZhbHVlKiBjb2wgPSBjb2xvclZhbHVlczsgY29sLT5jc3NW
YWx1ZUlkOyArK2NvbCkgeworICAgICAgICBpZiAoY29sLT5jc3NWYWx1ZUlkID09IGNzc1ZhbHVl
SWQpCisgICAgICAgICAgICByZXR1cm4gY29sLT5jb2xvcjsKKyAgICB9CisgICAgcmV0dXJuIFJl
bmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7Cit9CisK
K0NvbG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2
ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykgY29uc3QKK3sKKyAgICBpZiAodmFs
dWUtPmlzUkdCQ29sb3IoKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJW
YWx1ZSgpKTsKKworICAgIGludCBpZGVudCA9IHZhbHVlLT5nZXRJZGVudCgpOworICAgIHN3aXRj
aCAoaWRlbnQpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIGNh
c2UgQ1NTVmFsdWVXZWJraXRUZXh0OgorICAgICAgICByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT50ZXh0Q29sb3IoKTsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKKyAgICAgICAg
cmV0dXJuIChtX2VsZW1lbnQtPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IG1fZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5saW5rQ29sb3IoKTsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoKKyAgICAg
ICAgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CisgICAg
Y2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgorICAgICAgICByZXR1cm4gUmVuZGVy
VGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7CisgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoK
KyAgICAgICAgcmV0dXJuIG1fc3R5bGUtPmNvbG9yKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGNvbG9yRm9yQ1NTVmFsdWUoaWRlbnQpOworICAgIH0KK30KKworYm9vbCBTdHlsZVJl
c29sdmVyOjpoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcgJmF0dHJu
YW1lKSBjb25zdAoreworICAgIHJldHVybiBtX2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5jb250YWlu
cyhhdHRybmFtZS5pbXBsKCkpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZFZpZXdwb3J0
RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiBleHByLCBib29s
IHJlc3VsdCkKK3sKKyAgICBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuYXBw
ZW5kKGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5UmVzdWx0KCpleHByLCByZXN1bHQpKSk7Cit9CisK
K2Jvb2wgU3R5bGVSZXNvbHZlcjo6YWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29uc3QKK3sK
KyAgICB1bnNpZ25lZCBzID0gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLnNp
emUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgczsgaSsrKSB7CisgICAgICAgIGlm
IChtX21lZGl1bS0+ZXZhbCgmbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ld
LT5tX2V4cHJlc3Npb24pICE9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tp
XS0+bV9yZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitzdGF0aWMgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdl
dFRyYW5zZm9ybU9wZXJhdGlvblR5cGUoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9y
bU9wZXJhdGlvblR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAg
ICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOworICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0
dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgIHJldHVybiBU
cmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNm
b3JtT3BlcmF0aW9uOjpTQ0FMRV9aOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpTY2FsZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0NBTEVfM0Q7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEU7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRy
YW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWDsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJh
bnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9ZOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFu
c2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1o7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
bGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpU
UkFOU0xBVEVfM0Q7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpS
T1RBVEU7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFu
c2Zvcm1PcGVyYXRpb246ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVf
WDsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9y
bU9wZXJhdGlvbjogICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOwor
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVaVHJhbnNmb3JtT3Bl
cmF0aW9uOiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1o7CisgICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0
aW9uOiAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q7CisgICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246ICAg
ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOworICAgICAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAg
cmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOworICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAgcmV0dXJu
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19ZOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6TUFUUklYOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgcmV0dXJuIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6TUFUUklYXzNEOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjogICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6UEVSU1BFQ1RJVkU7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0
aW9uOjpOT05FOworICAgIH0KKyAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOwor
fQorCitib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFs
dWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwg
VHJhbnNmb3JtT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKK3sKKyAgICBpZiAoIWluVmFsdWUg
fHwgIWluVmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgb3V0T3BlcmF0aW9ucy5jbGVh
cigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZmxvYXQgem9vbUZhY3Rv
ciA9IHN0eWxlID8gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA6IDE7CisgICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zOworICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IGlu
VmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICBDU1NWYWx1ZSogY3Vy
clZhbHVlID0gaS52YWx1ZSgpOworICAgICAgICBpZiAoIWN1cnJWYWx1ZS0+aXNXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWUqIHRyYW5zZm9ybVZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUqPihpLnZhbHVlKCkpOworICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVl
LT5sZW5ndGgoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJvb2wgaGF2ZU5v
blByaW1pdGl2ZVZhbHVlID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCB0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCk7ICsraikgeworICAgICAgICAgICAgaWYgKCF0cmFu
c2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhqKS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7CisgICAgICAgICAgICAgICAgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
aGF2ZU5vblByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKKworICAg
ICAgICBzd2l0Y2ggKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OgorICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNm
b3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAgZG91YmxlIHN4ID0g
MS4wOworICAgICAgICAgICAgICAgIGRvdWJsZSBzeSA9IDEuMDsKKyAgICAgICAgICAgICAgICBp
ZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICBzeSA9
IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeSA9
IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzeDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwg
c3ksIDEuMCwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3Bl
cmF0aW9uOgorICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUz
RFRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsK
KyAgICAgICAgICAgICAgICBkb3VibGUgc3kgPSAxLjA7CisgICAgICAgICAgICAgICAgZG91Ymxl
IHN6ID0gMS4wOworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9u
VHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRp
b24pCisgICAgICAgICAgICAgICAgICAgIHN6ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlw
ZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24p
CisgICAgICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3ggPSBmaXJzdFZh
bHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
VmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVY
VHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPmxlbmd0aCgpID4gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3ogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRy
YW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3kgPSBzeDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIHN6LCBnZXRUcmFuc2Zvcm1PcGVyYXRp
b25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOgor
ICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5z
Zm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAgIExlbmd0aCB0eCA9IExlbmd0aCgwLCBG
aXhlZCk7CisgICAgICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAg
ICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAg
ICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHls
ZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHls
ZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRy
YW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChz
ZWNvbmRWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAodHguaXNVbmRlZmluZWQoKSB8fCB0eS5pc1VuZGVmaW5lZCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBv
cGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUodHgsIHR5LCBMZW5ndGgoMCwgRml4ZWQpLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25U
eXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHsK
KyAgICAgICAgICAgICAgICBMZW5ndGggdHggPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAgICAg
ICAgICAgIExlbmd0aCB0eSA9IExlbmd0aCgwLCBGaXhlZCk7CisgICAgICAgICAgICAgICAgTGVu
Z3RoIHR6ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
VmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNs
YXRlWlRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0
VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9u
KQorICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFs
dWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICB0eCA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFs
dWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgICAgICBp
ZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soMikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgodGhpcmRWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
VmFsdWUtPmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoc2Vjb25kVmFsdWUs
IHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKHR4LmlzVW5kZWZpbmVkKCkgfHwgdHkuaXNVbmRlZmluZWQoKSB8fCB0ei5pc1Vu
ZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUodHgsIHR5LCB0eiwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0
cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAgZG91YmxlIGFu
Z2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgICAgICBvcGVy
YXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoMCwgMCwgMSwgYW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhU
cmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpSb3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAg
ICAgICAgIGRvdWJsZSB4ID0gMDsKKyAgICAgICAgICAgICAgICBkb3VibGUgeSA9IDA7CisgICAg
ICAgICAgICAgICAgZG91YmxlIHogPSAwOworICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9
IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CisKKyAgICAgICAgICAgICAgICBpZiAodHJh
bnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgeCA9IDE7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKKyAg
ICAgICAgICAgICAgICAgICAgeSA9IDE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB6ID0gMTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUs
IGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUo
KSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9u
OiB7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA8IDQpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNm
b3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7CisgICAgICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZvdXJ0aFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygz
KSk7CisgICAgICAgICAgICAgICAgZG91YmxlIHggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1
ZSgpOworICAgICAgICAgICAgICAgIGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZh
bHVlKCk7CisgICAgICAgICAgICAgICAgZG91YmxlIHogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpOworICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZvdXJ0aFZhbHVlLT5jb21w
dXRlRGVncmVlcygpOworICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFw
cGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgZ2V0
VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdYVHJhbnNmb3JtT3BlcmF0
aW9uOgorICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFu
c2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGVYID0gMDsKKyAg
ICAgICAgICAgICAgICBkb3VibGUgYW5nbGVZID0gMDsKKyAgICAgICAgICAgICAgICBkb3VibGUg
YW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygpOworICAgICAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgYW5nbGVZ
ID0gYW5nbGU7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFu
Z2xlWCA9IGFuZ2xlOworICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9w
ZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5s
ZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbmdsZVkgPSBzZWNvbmRWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZLCBnZXRUcmFuc2Zvcm1P
cGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAg
ICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgNikKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZG91YmxlIGEgPSBmaXJzdFZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIGRvdWJsZSBiID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSkt
PmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgZG91YmxlIGMgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBkb3VibGUgZCA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMykpLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIGRvdWJs
ZSBlID0gem9vbUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNm
b3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNCkpLT5nZXREb3VibGVWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgIGRvdWJsZSBmID0gem9vbUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkp
LT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhLCBiLCBjLCBkLCBl
LCBmKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bjogeworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPCAxNikK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3Jt
VmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLT5nZXREb3VibGVWYWx1ZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0RG91
YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygyKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMykpLT5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRy
YW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91YmxlVmFsdWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg1KSkt
PmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soNikpLT5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDcpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg4KSktPmdldERvdWJs
ZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soOSkpLT5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEwKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJh
bnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTEpKS0+Z2V0RG91YmxlVmFsdWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbUZhY3RvciAqIHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMTIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgem9vbUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTMpKS0+Z2V0RG91YmxlVmFs
dWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
NCkpLT5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDE1KSktPmdldERvdWJsZVZhbHVlKCkpOworICAgICAgICAgICAgICAg
IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKG1hdHJpeCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVU
cmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgICAgICBMZW5ndGggcCA9IExlbmd0aCgw
LCBGaXhlZCk7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzTGVuZ3RoKCkpCisg
ICAgICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBz
dHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHF1aXJrIHRoYXQgc2hvdWxkIGdvIGF3YXkg
d2hlbiAzZCB0cmFuc2Zvcm1zIGFyZSBmaW5hbGl6ZWQuCisgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSB2YWwgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAg
ICAgICBwID0gdmFsID49IDAgPyBMZW5ndGgoY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcih2YWwpLCBG
aXhlZCkgOiBMZW5ndGgoVW5kZWZpbmVkKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAocC5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShwKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpVbmtub3duVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgb3V0T3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitzdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpP
cGVyYXRpb25UeXBlIGZpbHRlck9wZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6
OkZpbHRlck9wZXJhdGlvblR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246CisgICAg
ICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRTsKKyAgICBjYXNlIFdlYktpdENT
U0ZpbHRlclZhbHVlOjpHcmF5c2NhbGVGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVybiBG
aWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTsKKyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVl
OjpTZXBpYUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6
U0VQSUE7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVy
YXRpb246CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOworICAgIGNh
c2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlvbjoKKyAgICAg
ICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTsKKyAgICBjYXNlIFdlYktpdENT
U0ZpbHRlclZhbHVlOjpJbnZlcnRGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVybiBGaWx0
ZXJPcGVyYXRpb246OklOVkVSVDsKKyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpPcGFj
aXR5RmlsdGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpPUEFD
SVRZOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVy
YXRpb246CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M7CisgICAg
Y2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb246CisgICAg
ICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOworICAgIGNhc2UgV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6OkJsdXJGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVybiBGaWx0ZXJP
cGVyYXRpb246OkJMVVI7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9T
SEFET1c7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6OkN1c3RvbUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJh
dGlvbjo6Q1VTVE9NOworI2VuZGlmCisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6VW5r
bm93bkZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Tk9O
RTsKKyAgICB9CisgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Tk9ORTsKK30KKworI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYWRl
cihDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc1dlYktpdENTU1NoYWRlclZh
bHVlKCkpCisgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1
ZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NTaGFkZXJWYWx1ZSo+KHZhbHVlKSk7CisgICAgcmV0dXJu
IDA7Cit9CisKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHls
ZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWYWx1ZSogdmFsdWUpCit7CisgICAgU3R5
bGVTaGFkZXIqIHNoYWRlciA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdTaGFkZXIoKTsKKyAgICBp
ZiAoc2hhZGVyICYmIHNoYWRlci0+aXNQZW5kaW5nU2hhZGVyKCkpCisgICAgICAgIG1faGFzUGVu
ZGluZ1NoYWRlcnMgPSB0cnVlOworICAgIHJldHVybiBzaGFkZXI7Cit9CisKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKK3sKKyAgICBpZiAoIW1fc3R5bGUtPmhhc0Zp
bHRlcigpIHx8ICFtX2hhc1BlbmRpbmdTaGFkZXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBD
YWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3R5bGUtPmZpbHRlcigpLm9w
ZXJhdGlvbnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9u
cy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJP
cGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOworICAgICAgICBpZiAoZmlsdGVyT3Bl
cmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsK
KyAgICAgICAgICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbiogY3VzdG9tRmlsdGVyID0gc3RhdGlj
X2Nhc3Q8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uLmdldCgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChjdXN0b21GaWx0ZXItPnByb2dyYW0oKSk7CisgICAgICAgICAgICBT
dHlsZUN1c3RvbUZpbHRlclByb2dyYW0qIHByb2dyYW0gPSBzdGF0aWNfY2FzdDxTdHlsZUN1c3Rv
bUZpbHRlclByb2dyYW0qPihjdXN0b21GaWx0ZXItPnByb2dyYW0oKSk7CisgICAgICAgICAgICBp
ZiAocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkgJiYgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCktPmlz
UGVuZGluZ1NoYWRlcigpKSB7CisgICAgICAgICAgICAgICAgV2ViS2l0Q1NTU2hhZGVyVmFsdWUq
IHNoYWRlclZhbHVlID0gc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nU2hhZGVyKj4ocHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkpLT5jc3NTaGFkZXJWYWx1ZSgpOworICAgICAgICAgICAgICAgIHByb2dy
YW0tPnNldFZlcnRleFNoYWRlcihzaGFkZXJWYWx1ZS0+Y2FjaGVkU2hhZGVyKGNhY2hlZFJlc291
cmNlTG9hZGVyKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKSAmJiBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLT5pc1BlbmRpbmdTaGFk
ZXIoKSkgeworICAgICAgICAgICAgICAgIFdlYktpdENTU1NoYWRlclZhbHVlKiBzaGFkZXJWYWx1
ZSA9IHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ1NoYWRlcio+KHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkpLT5jc3NTaGFkZXJWYWx1ZSgpOworICAgICAgICAgICAgICAgIHByb2dyYW0tPnNldEZy
YWdtZW50U2hhZGVyKHNoYWRlclZhbHVlLT5jYWNoZWRTaGFkZXIoY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtX2hhc1BlbmRpbmdT
aGFkZXJzID0gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29t
cGFyYXRvcihjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYSwgY29uc3QgUmVm
UHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGIpCit7CisgICAgcmV0dXJuIGNvZGVQb2ludENv
bXBhcmVMZXNzVGhhbihhLT5uYW1lKCksIGItPm5hbWUoKSk7Cit9CisKK1Bhc3NSZWZQdHI8Q3Vz
dG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlck51bWJl
clBhcmFtdGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMpCit7Cisg
ICAgUmVmUHRyPEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcj4gbnVtYmVyUGFyYW1ldGVyID0g
Q3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyOjpjcmVhdGUobmFtZSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZhbHVlcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBDU1NWYWx1
ZSogdmFsdWUgPSB2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgbnVtYmVyUGFyYW1ldGVyLT5hZGRWYWx1ZShwcmltaXRpdmVW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBudW1iZXJQYXJhbWV0
ZXIucmVsZWFzZSgpOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdChDU1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVlLCBDdXN0b21GaWx0ZXJQYXJh
bWV0ZXJMaXN0JiBwYXJhbWV0ZXJMaXN0KQoreworICAgIEhhc2hTZXQ8U3RyaW5nPiBrbm93blBh
cmFtZXRlck5hbWVzOworICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHBhcmFtZXRlckl0ZXJhdG9y
KHBhcmFtZXRlcnNWYWx1ZSk7CisgICAgZm9yICg7IHBhcmFtZXRlckl0ZXJhdG9yLmhhc01vcmUo
KTsgcGFyYW1ldGVySXRlcmF0b3IuYWR2YW5jZSgpKSB7CisgICAgICAgIGlmICghcGFyYW1ldGVy
SXRlcmF0b3IudmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXRlcmF0b3IocGFyYW1ldGVySXRlcmF0
b3IudmFsdWUoKSk7CisgICAgICAgIGlmICghaXRlcmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZh
bHVlKCkpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSAhPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCk7CisgICAgICAgIC8vIERvIG5vdCBhbGxvdyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5h
bWVzLgorICAgICAgICBpZiAoa25vd25QYXJhbWV0ZXJOYW1lcy5jb250YWlucyhuYW1lKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAga25vd25QYXJhbWV0ZXJOYW1lcy5hZGQo
bmFtZSk7CisgICAgICAgIAorICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgIAor
ICAgICAgICBpZiAoIWl0ZXJhdG9yLmhhc01vcmUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIgcGFyYW1ldGVy
cyB0eXBlcyBwYXJzaW5nLgorICAgICAgICAvLyBib29sZWFuczogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDM4CisgICAgICAgIC8vIHRleHR1cmVzOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0NDIKKyAgICAgICAgLy8gM2QtdHJh
bnNmb3JtczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDQzCisg
ICAgICAgIC8vIG1hdDIsIG1hdDMsIG1hdDQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MTQ0NAorICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBw
YXJhbWV0ZXI7CisgICAgICAgIGlmIChpdGVyYXRvci52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKSB7
CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlcyA9IHN0YXRpY19jYXN0PENTU1ZhbHVl
TGlzdCo+KGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBjYW4gaGF2ZSBvbmx5IGFycmF5cyBv
ZiBib29sZWFucyBvciBudW1iZXJzLCBzbyB1c2UgdGhlIGZpcnN0IHZhbHVlIHRvIGNob29zZSBi
ZXR3ZWVuIHRob3NlIHR3by4KKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxl
YXN0IG9uZSB2YWx1ZS4gV2UgbmVlZCB1cCB0byA0IHZhbHVlcyAoYWxsIGJvb2xlYW5zIG9yIGFs
bCBudW1iZXJzKS4KKyAgICAgICAgICAgIGlmICghdmFsdWVzLT5sZW5ndGgoKSB8fCB2YWx1ZXMt
Pmxlbmd0aCgpID4gNCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICghdmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RQcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDApKTsKKyAgICAgICAgICAgIGlmIChmaXJzdFByaW1pdGl2ZVZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyID0gcGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbXRlcihuYW1lLCB2
YWx1ZXMpOworICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGUgYm9vbGVhbiBhcnJh
eSBwYXJhbWV0ZXIgaGVyZS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NjQzOAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
IXBhcmFtZXRlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IHBhcmFtZXRlckxpc3QuYXBwZW5kKHBhcmFtZXRlci5yZWxlYXNlKCkpOworICAgIH0KKyAgICAK
KyAgICAvLyBNYWtlIHN1cmUgd2Ugc29ydCB0aGUgcGFyYW1ldGVycyBiZWZvcmUgcGFzc2luZyB0
aGVtIGRvd24gdG8gdGhlIEN1c3RvbUZpbHRlck9wZXJhdGlvbi4KKyAgICBzdGQ6OnNvcnQocGFy
YW1ldGVyTGlzdC5iZWdpbigpLCBwYXJhbWV0ZXJMaXN0LmVuZCgpLCBzb3J0UGFyYW1ldGVyc0J5
TmFtZUNvbXBhcmF0b3IpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uKFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKK3sKKyAgICBBU1NF
UlQoZmlsdGVyVmFsdWUtPmxlbmd0aCgpKTsKKworICAgIENTU1ZhbHVlKiBzaGFkZXJzVmFsdWUg
PSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKKyAgICBBU1NFUlQoc2hh
ZGVyc1ZhbHVlLT5pc1ZhbHVlTGlzdCgpKTsKKyAgICBDU1NWYWx1ZUxpc3QqIHNoYWRlcnNMaXN0
ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oc2hhZGVyc1ZhbHVlKTsKKworICAgIEFTU0VS
VChzaGFkZXJzTGlzdC0+bGVuZ3RoKCkpOworICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gdmVydGV4
U2hhZGVyID0gc3R5bGVTaGFkZXIoc2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MCkpOworICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gZnJhZ21lbnRTaGFkZXIgPSAoc2hhZGVyc0xp
c3QtPmxlbmd0aCgpID4gMSkgPyBzdHlsZVNoYWRlcihzaGFkZXJzTGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxKSkgOiAwOworICAgIAorICAgIHVuc2lnbmVkIG1lc2hSb3dzID0gMTsKKyAg
ICB1bnNpZ25lZCBtZXNoQ29sdW1ucyA9IDE7CisgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpN
ZXNoQm94VHlwZSBtZXNoQm94VHlwZSA9IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6RklMVEVSX0JP
WDsKKyAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hUeXBlIG1lc2hUeXBlID0gQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uOjpBVFRBQ0hFRDsKKyAgICAKKyAgICBDU1NWYWx1ZSogcGFyYW1ldGVy
c1ZhbHVlID0gMDsKKyAgICAKKyAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID4gMSkgewor
ICAgICAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvciBpdGVyYXRvcihmaWx0ZXJWYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgc2Vjb25kIHZh
bHVlIG1pZ2h0IGJlIHRoZSBtZXNoIGJveCBvciB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzOgorICAg
ICAgICAvLyBJZiBpdCBzdGFydHMgd2l0aCBhIG51bWJlciBvciBhbnkgb2YgdGhlIG1lc2gtYm94
IGlkZW50aWZpZXJzIGl0IGlzIAorICAgICAgICAvLyB0aGUgbWVzaC1ib3ggbGlzdCwgaWYgbm90
IGl0IG1lYW5zIGl0IGlzIHRoZSBwYXJhbWV0ZXJzIGxpc3QuCisKKyAgICAgICAgaWYgKGl0ZXJh
dG9yLmhhc01vcmUoKSAmJiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBvbmx5IG9uZSBp
bnRlZ2VyIHZhbHVlIGlzIHNwZWNpZmllZCwgaXQgd2lsbCBzZXQgYm90aAorICAgICAgICAgICAg
ICAgIC8vIHRoZSByb3dzIGFuZCB0aGUgY29sdW1ucy4KKyAgICAgICAgICAgICAgICBtZXNoUm93
cyA9IG1lc2hDb2x1bW5zID0gcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIFRyeSB0byBtYXRjaCBhbm90aGVyIG51bWJlciBmb3IgdGhlIGNvbHVtbnMuCisg
ICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc01vcmUoKSAmJiBpdGVyYXRvci5pc1ByaW1p
dGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJl
cigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNoQ29sdW1ucyA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRJbnRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IuYWR2
YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTW9y
ZSgpICYmIGl0ZXJhdG9yLmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUJvcmRlckJveAorICAgICAgICAgICAgICAgIHx8IHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlUGFkZGluZ0JveAorICAgICAgICAgICAg
ICAgIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ29udGVudEJveAor
ICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
RmlsdGVyQm94KSB7CisgICAgICAgICAgICAgICAgbWVzaEJveFR5cGUgPSAqcHJpbWl0aXZlVmFs
dWU7CisgICAgICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTW9yZSgpICYmIGl0
ZXJhdG9yLmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVy
YXRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZURldGFjaGVkKSB7CisgICAgICAgICAgICAgICAgbWVzaFR5cGUgPSBDdXN0
b21GaWx0ZXJPcGVyYXRpb246OkRFVEFDSEVEOworICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFk
dmFuY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KCFpdGVyYXRvci5pbmRleCgpKSB7CisgICAgICAgICAgICAvLyBJZiBubyB2YWx1ZSB3YXMgY29u
c3VtZWQgZnJvbSB0aGUgbWVzaCB2YWx1ZSwgdGhlbiBpdCBpcyBqdXN0IGEgcGFyYW1ldGVyIGxp
c3QsIG1lYW5pbmcgdGhhdCB3ZSBlbmQgdXAKKyAgICAgICAgICAgIC8vIGhhdmluZyBqdXN0IHR3
byBDU1NMaXN0VmFsdWVzOiBsaXN0IG9mIHNoYWRlcnMgYW5kIGxpc3Qgb2YgcGFyYW1ldGVycy4K
KyAgICAgICAgICAgIEFTU0VSVChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMik7CisgICAgICAg
ICAgICBwYXJhbWV0ZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0
aCgpID4gMiAmJiAhcGFyYW1ldGVyc1ZhbHVlKQorICAgICAgICBwYXJhbWV0ZXJzVmFsdWUgPSBm
aWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKTsKKyAgICAKKyAgICBDdXN0b21G
aWx0ZXJQYXJhbWV0ZXJMaXN0IHBhcmFtZXRlckxpc3Q7CisgICAgaWYgKHBhcmFtZXRlcnNWYWx1
ZSAmJiAhcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KHBhcmFtZXRlcnNWYWx1ZSwgcGFy
YW1ldGVyTGlzdCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFJlZlB0cjxTdHlsZUN1
c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW06OmNy
ZWF0ZSh2ZXJ0ZXhTaGFkZXIucmVsZWFzZSgpLCBmcmFnbWVudFNoYWRlci5yZWxlYXNlKCkpOwor
ICAgIHJldHVybiBDdXN0b21GaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShwcm9ncmFtLnJlbGVhc2Uo
KSwgcGFyYW1ldGVyTGlzdCwgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNoQm94VHlwZSwgbWVz
aFR5cGUpOworfQorI2VuZGlmCisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3Bl
cmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHls
ZSogcm9vdFN0eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQoreworICAgIEFT
U0VSVChvdXRPcGVyYXRpb25zLmlzRW1wdHkoKSk7CisgICAgCisgICAgaWYgKCFpblZhbHVlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGluVmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluVmFsdWUpOworICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmICghaW5WYWx1ZS0+aXNWYWx1ZUxpc3QoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlID8g
c3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA6IDE7CisgICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRp
b25zOworICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IGluVmFsdWU7IGkuaGFzTW9y
ZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1
ZSgpOworICAgICAgICBpZiAoIWN1cnJWYWx1ZS0+aXNXZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZp
bHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWUqPihpLnZhbHVlKCkp
OworICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9
IGZpbHRlck9wZXJhdGlvbkZvclR5cGUoZmlsdGVyVmFsdWUtPm9wZXJhdGlvblR5cGUoKSk7CisK
KyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgIGlmIChvcGVyYXRpb25UeXBlID09IEZp
bHRlck9wZXJhdGlvbjo6Q1VTVE9NKSB7CisgICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVy
T3BlcmF0aW9uPiBvcGVyYXRpb24gPSBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oZmlsdGVy
VmFsdWUpOworICAgICAgICAgICAgaWYgKCFvcGVyYXRpb24pCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlv
bnMoKS5hcHBlbmQob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisjZW5kaWYKKworICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBwYXJhbWV0ZXJzIGFyZSBwcmlt
aXRpdmUgdmFsdWVzLCB3aXRoIHRoZQorICAgICAgICAvLyBleGNlcHRpb24gb2YgZHJvcCBzaGFk
b3cgd2hpY2ggaGFzIGEgU2hhZG93VmFsdWUgcGFyYW1ldGVyLgorICAgICAgICBpZiAob3BlcmF0
aW9uVHlwZSAhPSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XKSB7CisgICAgICAgICAgICBi
b29sIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGZpbHRlclZhbHVlLT5sZW5ndGgoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhqKS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGhhdmVOb25QcmltaXRpdmVWYWx1
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoYXZlTm9uUHJpbWl0aXZlVmFsdWUpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogZmlyc3RWYWx1ZSA9IGZpbHRlclZhbHVlLT5sZW5ndGgoKSA/IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4oZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MCkpIDogMDsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSB7
CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlJlZmVyZW5jZUZpbHRlck9wZXJh
dGlvbjogeworICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUpCisgICAgICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6Y3Jl
YXRlKGZpcnN0VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCksIG9wZXJhdGlvblR5cGUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6OkdyYXlzY2FsZUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmls
dGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBkb3VibGUg
YW1vdW50ID0gMTsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkg
eworICAgICAgICAgICAgICAgIGFtb3VudCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7
CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzUGVyY2VudGFnZSgpKQorICAgICAg
ICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbjo6Y3JlYXRlKGFtb3VudCwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90
YXRlRmlsdGVyT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSAwOworICAg
ICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAxKQorICAgICAgICAgICAgICAg
IGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OmNyZWF0ZShhbmdsZSwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SW52ZXJ0RmlsdGVy
T3BlcmF0aW9uOgorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNz
RmlsdGVyT3BlcmF0aW9uOgorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250
cmFzdEZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6
T3BhY2l0eUZpbHRlck9wZXJhdGlvbjogeworICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IChm
aWx0ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmln
aHRuZXNzRmlsdGVyT3BlcmF0aW9uKSA/IDAgOiAxOworICAgICAgICAgICAgaWYgKGZpbHRlclZh
bHVlLT5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1
ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQ
ZXJjZW50YWdlKCkpCisgICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBvcGVyYXRp
b25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdl
YktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmlsdGVyT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBM
ZW5ndGggc3RkRGV2aWF0aW9uID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAgIGlmIChm
aWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPj0gMSkgeworICAgICAgICAgICAgICAgIHN0ZERldmlhdGlv
biA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpv
b21GYWN0b3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0ZERldmlhdGlvbi5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZShzdGREZXZpYXRpb24sIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb246IHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkg
IT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIENTU1Zh
bHVlKiBjc3NWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOwor
ICAgICAgICAgICAgaWYgKCFjc3NWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19j
YXN0PFNoYWRvd1ZhbHVlKj4oY3NzVmFsdWUpOworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRp
b24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0
b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIGludCBi
bHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwg
cm9vdFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBDb2xvciBjb2xvcjsKKyAg
ICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZShsb2NhdGlvbiwgYmx1ciwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJh
bnNwYXJlbnQsIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRp
b246CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgb3V0T3BlcmF0aW9u
cyA9IG9wZXJhdGlvbnM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZgorCitQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5k
aW5nSW1hZ2UqIHBlbmRpbmdJbWFnZSkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2Fj
aGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNl
TG9hZGVyKCk7CisKKyAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKKyAg
ICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VW
YWx1ZSgpOworICAgICAgICByZXR1cm4gaW1hZ2VWYWx1ZS0+Y2FjaGVkSW1hZ2UoY2FjaGVkUmVz
b3VyY2VMb2FkZXIpOworICAgIH0KKworICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlR2Vu
ZXJhdG9yVmFsdWUoKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiBpbWFnZUdl
bmVyYXRvclZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFnZUdlbmVyYXRvclZhbHVlKCk7Cisg
ICAgICAgIGltYWdlR2VuZXJhdG9yVmFsdWUtPmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VM
b2FkZXIpOworICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGltYWdl
R2VuZXJhdG9yVmFsdWUpOworICAgIH0KKworI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQorICAg
IGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlU2V0VmFsdWUoKSkgeworICAgICAgICBDU1NJbWFn
ZVNldFZhbHVlKiBpbWFnZVNldFZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFnZVNldFZhbHVl
KCk7CisgICAgICAgIHJldHVybiBpbWFnZVNldFZhbHVlLT5jYWNoZWRJbWFnZVNldChjYWNoZWRS
ZXNvdXJjZUxvYWRlcik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCit7CisgICAgaWYgKG1fcGVuZGlu
Z0ltYWdlUHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hT
ZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0ltYWdlUHJv
cGVydGllcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9ICppdDsKKwor
ICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgeworICAgICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRJbWFnZTogeworICAgICAgICAgICAgICAgIGZvciAoRmlsbExheWVy
KiBiYWNrZ3JvdW5kTGF5ZXIgPSBtX3N0eWxlLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJh
Y2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSAmJiBi
YWNrZ3JvdW5kTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3Rh
dGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6IHsKKyAgICAgICAgICAgICAg
ICBmb3IgKENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEq
PihtX3N0eWxlLT5jb250ZW50RGF0YSgpKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29u
dGVudERhdGEtPm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudERhdGEt
PmlzSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2Ug
PSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdl
ID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdl
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRlZEltYWdlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4o
Y29udGVudERhdGEpLT5zZXRJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUN1cnNvcjogeworICAgICAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBj
dXJzb3JMaXN0ID0gbV9zdHlsZS0+Y3Vyc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEN1cnNvckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5h
dChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBpbWFnZSA9IGN1
cnJlbnRDdXJzb3IuaW1hZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudEN1cnNvci5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxl
UGVuZGluZ0ltYWdlKj4oaW1hZ2UpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxl
SW1hZ2U6IHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSAm
JiBtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0
YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTogeworICAgICAgICAgICAgICAgIGlmICht
X3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNl
KCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJv
cmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJveFJlZmxlY3Q6IHsKKyAgICAgICAgICAgICAgICBpZiAoU3R5bGVSZWZsZWN0aW9uKiByZWZs
ZWN0aW9uID0gbV9zdHlsZS0+Ym94UmVmbGVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE5pbmVQaWVjZUltYWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0aW9uLT5tYXNrKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2Uo
KS0+aXNQZW5kaW5nSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0
eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHls
ZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKE5pbmVQaWVjZUltYWdlKGxvYWRlZEltYWdlLnJlbGVh
c2UoKSwgbWFza0ltYWdlLmltYWdlU2xpY2VzKCksIG1hc2tJbWFnZS5maWxsKCksIG1hc2tJbWFn
ZS5ib3JkZXJTbGljZXMoKSwgbWFza0ltYWdlLm91dHNldCgpLCBtYXNrSW1hZ2UuaG9yaXpvbnRh
bFJ1bGUoKSwgbWFza0ltYWdlLnZlcnRpY2FsUnVsZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNl
OiB7CisgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYm
IG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJ
bWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPm1hc2tCb3hJbWFn
ZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogeworICAgICAgICAgICAg
ICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBtX3N0eWxlLT5hY2Nlc3NNYXNrTGF5ZXJz
KCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0gbWFza0xheWVyLT5uZXh0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdlKCkt
PmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNl
dEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPiht
YXNrTGF5ZXItPmltYWdlKCkpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDE0ICsyNiw5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNT
U1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKICNpbmNsdWRl
ICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhbGN1
bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJDb250ZW50RGF0YS5oIgotI2luY2x1ZGUgIkNvdW50
ZXIuaCIKLSNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgogI2luY2x1ZGUgIkNTU0JvcmRlcklt
YWdlLmgiCiAjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0N1
cnNvckltYWdlVmFsdWUuaCIKQEAgLTU0LDYgKzQ5LDExIEBACiAjaW5jbHVkZSAiQ1NTU3R5bGVT
aGVldC5oIgogI2luY2x1ZGUgIkNTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkNhbGN1
bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDb250ZW50RGF0YS5oIgorI2luY2x1ZGUgIkNvdW50
ZXIuaCIKKyNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgogI2luY2x1ZGUgIkN1cnNvckxpc3Qu
aCIKICNpbmNsdWRlICJGb250RmVhdHVyZVZhbHVlLmgiCiAjaW5jbHVkZSAiRm9udFZhbHVlLmgi
CkBAIC0xMDEsOSArMTAxLDkgQEAKICNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgi
CiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5o
IgorI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZVBlbmRp
bmdJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgotI2luY2x1ZGUgIlN0eWxlR2VuZXJh
dGVkSW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRleHQu
aCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgpAQCAtMzcyLDkgKzM3Miw4IEBA
IFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGQKICAgICBpZiAoIWRlZmF1
bHRTdHlsZSkgewogICAgICAgICBpZiAoIXJvb3QgfHwgZWxlbWVudENhblVzZVNpbXBsZURlZmF1
bHRTdHlsZShyb290KSkKICAgICAgICAgICAgIGxvYWRTaW1wbGVEZWZhdWx0U3R5bGUoKTsKLSAg
ICAgICAgZWxzZSB7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvYWRGdWxsRGVmYXVsdFN0
eWxlKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAvLyBjb25zdHJ1Y3QgZG9jdW1lbnQgcm9v
dCBlbGVtZW50IGRlZmF1bHQgc3R5bGUuIHRoaXMgaXMgbmVlZGVkCkBAIC0xNzMzLDcgKzE3MzIs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pCiAKICAgICAvLyBJ
ZiB0aGUgMCUga2V5ZnJhbWUgaXMgbWlzc2luZywgY3JlYXRlIGl0IChidXQgb25seSBpZiB0aGVy
ZSBpcyBhdCBsZWFzdCBvbmUgb3RoZXIga2V5ZnJhbWUpCiAgICAgaW50IGluaXRpYWxMaXN0U2l6
ZSA9IGxpc3Quc2l6ZSgpOwotICAgIGlmIChpbml0aWFsTGlzdFNpemUgPiAwICYmIGxpc3RbMF0u
a2V5KCkgIT0gMCkgeworICAgIGlmIChpbml0aWFsTGlzdFNpemUgPiAwICYmIGxpc3RbMF0ua2V5
KCkpIHsKICAgICAgICAgc3RhdGljIFN0eWxlS2V5ZnJhbWUqIHplcm9QZXJjZW50S2V5ZnJhbWU7
CiAgICAgICAgIGlmICghemVyb1BlcmNlbnRLZXlmcmFtZSkgewogICAgICAgICAgICAgemVyb1Bl
cmNlbnRLZXlmcmFtZSA9IFN0eWxlS2V5ZnJhbWU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKQEAgLTE5
MjQsMjEgKzE5MjMsMjAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShS
ZQogICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpICE9IE5PTkUpIHsKICAgICAgICAgLy8gSWYgd2Ug
aGF2ZSBhIDx0ZD4gdGhhdCBzcGVjaWZpZXMgYSBmbG9hdCBwcm9wZXJ0eSwgaW4gcXVpcmtzIG1v
ZGUgd2UganVzdCBkcm9wIHRoZSBmbG9hdAogICAgICAgICAvLyBwcm9wZXJ0eS4KLSAgICAgICAg
Ly8gU2l0ZXMgYWxzbyBjb21tb25seSB1c2UgZGlzcGxheTppbmxpbmUvYmxvY2sgb24gPHRkPnMg
YW5kIDx0YWJsZT5zLiAgSW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKKyAgICAgICAgLy8gU2l0ZXMg
YWxzbyBjb21tb25seSB1c2UgZGlzcGxheTppbmxpbmUvYmxvY2sgb24gPHRkPnMgYW5kIDx0YWJs
ZT5zLiBJbiBxdWlya3MgbW9kZSB3ZSBmb3JjZQogICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJl
dGFpbiB0aGVpciBkaXNwbGF5IHR5cGVzLgogICAgICAgICBpZiAoIW1fY2hlY2tlci5zdHJpY3RQ
YXJzaW5nKCkgJiYgZSkgewogICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUodGRUYWcpKSB7
CiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7CiAgICAgICAg
ICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAoZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCisgICAgICAgICAgICB9
IGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKQogICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXREaXNwbGF5KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJTkxJTkVfVEFCTEUg
OiBUQUJMRSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZSh0
ZFRhZykgfHwgZS0+aGFzVGFnTmFtZSh0aFRhZykpKSB7CiAgICAgICAgICAgICBpZiAoc3R5bGUt
PndoaXRlU3BhY2UoKSA9PSBLSFRNTF9OT1dSQVApIHsKICAgICAgICAgICAgICAgICAvLyBGaWd1
cmUgb3V0IGlmIHdlIGFyZSByZWFsbHkgbm93cmFwcGluZyBvciBpZiB3ZSBzaG91bGQganVzdAot
ICAgICAgICAgICAgICAgIC8vIHVzZSBub3JtYWwgaW5zdGVhZC4gIElmIHRoZSB3aWR0aCBvZiB0
aGUgY2VsbCBpcyBmaXhlZCwgdGhlbgorICAgICAgICAgICAgICAgIC8vIHVzZSBub3JtYWwgaW5z
dGVhZC4gSWYgdGhlIHdpZHRoIG9mIHRoZSBjZWxsIGlzIGZpeGVkLCB0aGVuCiAgICAgICAgICAg
ICAgICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIE5PV1JBUC4KICAgICAgICAgICAgICAgICBp
ZiAoc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgpKQogICAgICAgICAgICAgICAgICAgICBzdHlsZS0+
c2V0V2hpdGVTcGFjZShOT1JNQUwpOwpAQCAtMTk1MSw4ICsxOTQ5LDggQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZQogICAgICAgICBpZiAoZSAmJiBlLT5oYXNUYWdO
YW1lKHRhYmxlVGFnKSAmJiAoc3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9MRUZUIHx8IHN0
eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfQ0VOVEVSIHx8IHN0eWxlLT50ZXh0QWxpZ24oKSA9
PSBXRUJLSVRfUklHSFQpKQogICAgICAgICAgICAgc3R5bGUtPnNldFRleHRBbGlnbihUQUFVVE8p
OwogCi0gICAgICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVzZXRzIG5ldmVyIGhvbm9yIHBvc2l0aW9u
OnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFic29sdXRlLiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8KLSAg
ICAgICAgLy8gZml4IGEgY3Jhc2ggd2hlcmUgYSBzaXRlIHRyaWVzIHRvIHBvc2l0aW9uIHRoZXNl
IG9iamVjdHMuICBUaGV5IGFsc28gbmV2ZXIgaG9ub3IgZGlzcGxheS4KKyAgICAgICAgLy8gRnJh
bWVzIGFuZCBmcmFtZXNldHMgbmV2ZXIgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9zaXRp
b246YWJzb2x1dGUuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvCisgICAgICAgIC8vIGZpeCBhIGNyYXNo
IHdoZXJlIGEgc2l0ZSB0cmllcyB0byBwb3NpdGlvbiB0aGVzZSBvYmplY3RzLiBUaGV5IGFsc28g
bmV2ZXIgaG9ub3IgZGlzcGxheS4KICAgICAgICAgaWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUoZnJh
bWVUYWcpIHx8IGUtPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpKSkgewogICAgICAgICAgICAgc3R5
bGUtPnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKICAgICAgICAgICAgIHN0eWxlLT5zZXRE
aXNwbGF5KEJMT0NLKTsKQEAgLTE5ODAsMTIgKzE5NzgsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphZGp1c3RSZW5kZXJTdHlsZShSZQogICAgICAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBJ
TkxJTkUgJiYgc3R5bGUtPnN0eWxlVHlwZSgpID09IE5PUFNFVURPICYmIHBhcmVudFN0eWxlICYm
IHN0eWxlLT53cml0aW5nTW9kZSgpICE9IHBhcmVudFN0eWxlLT53cml0aW5nTW9kZSgpKQogICAg
ICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoSU5MSU5FX0JMT0NLKTsKIAotICAgICAgICAvLyBB
ZnRlciBwZXJmb3JtaW5nIHRoZSBkaXNwbGF5IG11dGF0aW9uLCBjaGVjayB0YWJsZSByb3dzLiAg
V2UgZG8gbm90IGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9uCi0gICAgICAgIC8vIHRhYmxlIHJv
d3Mgb3IgY2VsbHMuICBUaGlzIGhhcyBiZWVuIGVzdGFibGlzaGVkIGluIENTUzIuMSAoYW5kIGNh
dXNlZCBhIGNyYXNoIGluIGNvbnRhaW5pbmdCbG9jaygpCisgICAgICAgIC8vIEFmdGVyIHBlcmZv
cm1pbmcgdGhlIGRpc3BsYXkgbXV0YXRpb24sIGNoZWNrIHRhYmxlIHJvd3MuIFdlIGRvIG5vdCBo
b25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvbgorICAgICAgICAvLyB0YWJsZSByb3dzIG9yIGNlbGxz
LiBUaGlzIGhhcyBiZWVuIGVzdGFibGlzaGVkIGluIENTUzIuMSAoYW5kIGNhdXNlZCBhIGNyYXNo
IGluIGNvbnRhaW5pbmdCbG9jaygpCiAgICAgICAgIC8vIG9uIHNvbWUgc2l0ZXMpLgogICAgICAg
ICBpZiAoKHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfSEVBREVSX0dST1VQIHx8IHN0eWxlLT5k
aXNwbGF5KCkgPT0gVEFCTEVfUk9XX0dST1VQCi0gICAgICAgICAgICAgfHwgc3R5bGUtPmRpc3Bs
YXkoKSA9PSBUQUJMRV9GT09URVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9S
T1cpICYmCi0gICAgICAgICAgICAgc3R5bGUtPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlv
bikKKyAgICAgICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0ZPT1RFUl9HUk9V
UCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVykKKyAgICAgICAgICAgICAmJiBzdHls
ZS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKQogICAgICAgICAgICAgc3R5bGUtPnNl
dFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKIAogICAgICAgICAvLyB3cml0aW5nLW1vZGUgZG9l
cyBub3QgYXBwbHkgdG8gdGFibGUgcm93IGdyb3VwcywgdGFibGUgY29sdW1uIGdyb3VwcywgdGFi
bGUgcm93cywgYW5kIHRhYmxlIGNvbHVtbnMuCkBAIC0yMDA2LDkgKzIwMDQsOSBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlCiAgICAgaWYgKHN0eWxlLT5wb3NpdGlv
bigpID09IFN0YXRpY1Bvc2l0aW9uKQogICAgICAgICBzdHlsZS0+c2V0SGFzQXV0b1pJbmRleCgp
OwogCi0gICAgLy8gQXV0byB6LWluZGV4IGJlY29tZXMgMCBmb3IgdGhlIHJvb3QgZWxlbWVudCBh
bmQgdHJhbnNwYXJlbnQgb2JqZWN0cy4gIFRoaXMgcHJldmVudHMKKyAgICAvLyBBdXRvIHotaW5k
ZXggYmVjb21lcyAwIGZvciB0aGUgcm9vdCBlbGVtZW50IGFuZCB0cmFuc3BhcmVudCBvYmplY3Rz
LiBUaGlzIHByZXZlbnRzCiAgICAgLy8gY2FzZXMgd2hlcmUgb2JqZWN0cyB0aGF0IHNob3VsZCBi
ZSBibGVuZGVkIGFzIGEgc2luZ2xlIHVuaXQgZW5kIHVwIHdpdGggYSBub24tdHJhbnNwYXJlbnQK
LSAgICAvLyBvYmplY3Qgd2VkZ2VkIGluIGJldHdlZW4gdGhlbS4gIEF1dG8gei1pbmRleCBhbHNv
IGJlY29tZXMgMCBmb3Igb2JqZWN0cyB0aGF0IHNwZWNpZnkgdHJhbnNmb3Jtcy9tYXNrcy9yZWZs
ZWN0aW9ucy4KKyAgICAvLyBvYmplY3Qgd2VkZ2VkIGluIGJldHdlZW4gdGhlbS4gQXV0byB6LWlu
ZGV4IGFsc28gYmVjb21lcyAwIGZvciBvYmplY3RzIHRoYXQgc3BlY2lmeSB0cmFuc2Zvcm1zL21h
c2tzL3JlZmxlY3Rpb25zLgogICAgIGlmIChzdHlsZS0+aGFzQXV0b1pJbmRleCgpICYmICgoZSAm
JiBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSBlKSB8fCBzdHlsZS0+b3BhY2l0
eSgpIDwgMS4wZgogICAgICAgICB8fCBzdHlsZS0+aGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5
KCkgfHwgc3R5bGUtPmhhc01hc2soKSB8fCBzdHlsZS0+Ym94UmVmbGVjdCgpIHx8IHN0eWxlLT5o
YXNGaWx0ZXIoKQogI2lmZGVmIEZJWEVEX1BPU0lUSU9OX0NSRUFURVNfU1RBQ0tJTkdfQ09OVEVY
VApAQCAtMjA0Nyw4ICsyMDQ1LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJT
dHlsZShSZQogCiAgICAgLy8gVGFibGUgcm93cywgc2VjdGlvbnMgYW5kIHRoZSB0YWJsZSBpdHNl
bGYgd2lsbCBzdXBwb3J0IG92ZXJmbG93OmhpZGRlbiBhbmQgd2lsbCBpZ25vcmUgc2Nyb2xsL2F1
dG8uCiAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgdGFibGUgc2VjdGlvbnMgd2lsbCBzdXBwb3J0
IGF1dG8gYW5kIHNjcm9sbC4KLSAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRSB8fCBz
dHlsZS0+ZGlzcGxheSgpID09IElOTElORV9UQUJMRSB8fAotICAgICAgICBzdHlsZS0+ZGlzcGxh
eSgpID09IFRBQkxFX1JPV19HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVykg
eworICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkg
PT0gSU5MSU5FX1RBQkxFCisgICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9X
X0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XKSB7CiAgICAgICAgIGlmIChz
dHlsZS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WCgpICE9IE9I
SURERU4pCiAgICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9WSVNJQkxFKTsKICAgICAg
ICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dZ
KCkgIT0gT0hJRERFTikKQEAgLTIwNzIsNyArMjA3MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUoUmUKICAgICAvLyBJbXBvcnRhbnQ6IEludHJpbnNpYyBtYXJnaW5z
IGdldCBhZGRlZCB0byBjb250cm9scyBiZWZvcmUgdGhlIHRoZW1lIGhhcyBhZGp1c3RlZCB0aGUg
c3R5bGUsIHNpbmNlIHRoZSB0aGVtZSB3aWxsCiAgICAgLy8gYWx0ZXIgZm9udHMgYW5kIGhlaWdo
dHMvd2lkdGhzLgogICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkgJiYgc3R5
bGUtPmZvbnRTaXplKCkgPj0gMTEpIHsKLSAgICAgICAgLy8gRG9uJ3QgYXBwbHkgaW50cmluc2lj
IG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9ucy4gIFRoZSBkZXNpZ25lciBrbm93cyBob3cgYmlnIHRo
ZSBpbWFnZXMgYXJlLAorICAgICAgICAvLyBEb24ndCBhcHBseSBpbnRyaW5zaWMgbWFyZ2lucyB0
byBpbWFnZSBidXR0b25zLiBUaGUgZGVzaWduZXIga25vd3MgaG93IGJpZyB0aGUgaW1hZ2VzIGFy
ZSwKICAgICAgICAgLy8gc28gd2UgaGF2ZSB0byB0cmVhdCBhbGwgaW1hZ2UgYnV0dG9ucyBhcyB0
aG91Z2ggdGhleSB3ZXJlIGV4cGxpY2l0bHkgc2l6ZWQuCiAgICAgICAgIGlmICghZS0+aGFzVGFn
TmFtZShpbnB1dFRhZykgfHwgIXN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlKS0+aXNJ
bWFnZUJ1dHRvbigpKQogICAgICAgICAgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7CkBA
IC0yNTMwLDggKzI1MjgsOCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxl
U2hlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFN0
eWxlUnVsZUtleWZyYW1lcyo+KGNoaWxkUnVsZSkpOwogICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSAgIC8vIGZvciBydWxlcwotICAgICAgICAgICAgfSAgIC8vIGlmIHJ1
bGVzCisgICAgICAgICAgICAgICAgfSAvLyBmb3IgcnVsZXMKKyAgICAgICAgICAgIH0gLy8gaWYg
cnVsZXMKICAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxl
U2VsZWN0b3IpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0
LgogICAgICAgICAgICAgLy8gRklYTUUoQlVHIDcyNDYxKTogV2UgZG9uJ3QgYWRkIEBmb250LWZh
Y2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KQEAgLTI5NzIs
MzIgKzI5NzAsMzIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZQog
aW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkK
IHsKICAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyVG9wQ29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21D
b2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAgICAgICBjYXNlIENTU1By
b3BlcnR5T3V0bGluZUNvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
UnVsZUNvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29s
b3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yOgotICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgotICAgICAgICAvLyBBbHNv
IGFsbG93IHNob3J0aGFuZHMgc28gdGhhdCBpbmhlcml0L2luaXRpYWwgc3RpbGwgd29yay4KLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0OgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQ6Ci0gICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3A6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b206Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOgotICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlclRvcENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xv
cjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dEZpbGxDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9r
ZUNvbG9yOgorICAgIC8vIEFsc28gYWxsb3cgc2hvcnRoYW5kcyBzbyB0aGF0IGluaGVyaXQvaW5p
dGlhbCBzdGlsbCB3b3JrLgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wOgorICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b206CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmU6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6CiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUZpbGw6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZpbGw6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZToKICNlbmRpZgot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzEyNCwxMDAgKzMxMjIsMTAwIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm8KICAgICBmbG9hdCB6b29tRmFj
dG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlz
IGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9u
ZGluZyBmcm9udC1lbmQKLSAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuICBTaG9ydGhhbmRzIChl
LmcuIGJvcmRlciwgYmFja2dyb3VuZCkgb2NjdXIgaW4gdGhpcyBsaXN0IGFzIHdlbGwgYW5kCisg
ICAgLy8gUmVuZGVyU3R5bGUgdmFsdWVzLiBTaG9ydGhhbmRzIChlLmcuIGJvcmRlciwgYmFja2dy
b3VuZCkgb2NjdXIgaW4gdGhpcyBsaXN0IGFzIHdlbGwgYW5kCiAgICAgLy8gYXJlIG9ubHkgaGl0
IHdoZW4gbWFwcGluZyAiaW5oZXJpdCIgb3IgImluaXRpYWwiIGludG8gZnJvbnQtZW5kIHZhbHVl
cy4KICAgICBzd2l0Y2ggKGlkKSB7Ci0vLyBsaXN0cworICAgIC8vIGxpc3RzCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eUNvbnRlbnQ6CiAgICAgICAgIC8vIGxpc3Qgb2Ygc3RyaW5nLCB1cmksIGNvdW50
ZXIsIGF0dHIsIGkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbiBDU1MzLCBpdCB3aWxsIGJl
IHBvc3NpYmxlIHRvIGluaGVyaXQgY29udGVudC4gIEluIENTUzIgaXQgaXMgbm90LiAgVGhpcwot
ICAgICAgICAvLyBub3RlIGlzIGEgcmVtaW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBu
ZWVkcyB0byBiZSBzdXBwb3J0ZWQuCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJ
biBDU1MzLCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIGluaGVyaXQgY29udGVudC4gSW4gQ1NTMiBp
dCBpcyBub3QuIFRoaXMKKyAgICAgICAgICAgIC8vIG5vdGUgaXMgYSByZW1pbmRlciB0aGF0IGV2
ZW50dWFsbHkgImluaGVyaXQiIG5lZWRzIHRvIGJlIHN1cHBvcnRlZC4KIAotICAgICAgICBpZiAo
aXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewor
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQ29udGVudCgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1
ZUxpc3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYm9vbCBkaWRTZXQg
PSBmYWxzZTsKLSAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGku
aGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBp
LnZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkp
IHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1h
Z2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSkpLCBk
aWRTZXQpOwotICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICBib29s
IGRpZFNldCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBp
ID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgICAgIENT
U1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOworICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0lt
YWdlR2VuZXJhdG9yVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdl
bmVyYXRvclZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgICAgICAgICAgfSBlbHNl
IGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkgewotICAgICAgICAgICAgICAgIG1fc3R5bGUt
PnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3Rh
dGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKLSAgICAgICAgICAg
ICAgICBkaWRTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJ
bWFnZVNldFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVu
dChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxD
U1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogI2VuZGlmCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0
eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7Ci0g
ICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRp
bmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVl
Kj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRl
bSk7CisgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAKLSAgICAgICAgICAgIGlmIChj
b250ZW50VmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7Ci0g
ICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29u
dGVudFZhbHVlLT5pc0F0dHIoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBu
YW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZvbyk/Ci0gICAgICAgICAgICAgICAg
aWYgKG1fc3R5bGUtPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQotICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIG1fcGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgICAgIFF1
YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
LmltcGwoKSwgbnVsbEF0b20pOwotICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUgPSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1w
bCgpLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVj
dHMgdGhlIHN0eWxlCi0gICAgICAgICAgICAgICAgbV9mZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRk
KGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVu
dFZhbHVlLT5pc0NvdW50ZXIoKSkgewotICAgICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50ZXJW
YWx1ZSA9IGNvbnRlbnRWYWx1ZS0+Z2V0Q291bnRlclZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
RUxpc3RTdHlsZVR5cGUgbGlzdFN0eWxlVHlwZSA9IE5vbmVMaXN0U3R5bGU7Ci0gICAgICAgICAg
ICAgICAgaW50IGxpc3RTdHlsZUlkZW50ID0gY291bnRlclZhbHVlLT5saXN0U3R5bGVJZGVudCgp
OwotICAgICAgICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCi0g
ICAgICAgICAgICAgICAgICAgIGxpc3RTdHlsZVR5cGUgPSBzdGF0aWNfY2FzdDxFTGlzdFN0eWxl
VHlwZT4obGlzdFN0eWxlSWRlbnQgLSBDU1NWYWx1ZURpc2MpOwotICAgICAgICAgICAgICAgIE93
blB0cjxDb3VudGVyQ29udGVudD4gY291bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVu
dChjb3VudGVyVmFsdWUtPmlkZW50aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVl
LT5zZXBhcmF0b3IoKSkpOwotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY291
bnRlci5yZWxlYXNlKCksIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFs
dWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlT3BlblF1b3Rl
OgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRp
ZFNldCk7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkgewor
ICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNl
dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVDbG9zZVF1b3RlOgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y29udGVudFZhbHVlLT5pc0F0dHIoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
Q2FuIGEgbmFtZXNwYWNlIGJlIHNwZWNpZmllZCBmb3IgYW4gYXR0cihmb28pPworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9zdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJlbnRTdHlsZS0+c2V0VW5pcXVl
KCk7CisgICAgICAgICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgY29u
dGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgbnVsbEF0b20pOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gbV9lbGVtZW50LT5nZXRBdHRy
aWJ1dGUoYXR0cik7CisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQodmFs
dWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChOT19PUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAg
ICAgICAgICAgICAgICAvLyByZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFs
dWUgYWZmZWN0cyB0aGUgc3R5bGUKKyAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlcy5hdHRy
c0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNDb3VudGVyKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgQ291bnRlciogY291bnRlclZhbHVlID0gY29udGVudFZhbHVlLT5nZXRDb3VudGVyVmFsdWUo
KTsKKyAgICAgICAgICAgICAgICAgICAgRUxpc3RTdHlsZVR5cGUgbGlzdFN0eWxlVHlwZSA9IE5v
bmVMaXN0U3R5bGU7CisgICAgICAgICAgICAgICAgICAgIGludCBsaXN0U3R5bGVJZGVudCA9IGNv
dW50ZXJWYWx1ZS0+bGlzdFN0eWxlSWRlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxp
c3RTdHlsZUlkZW50ICE9IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3RTdHlsZVR5cGUgPSBzdGF0aWNfY2FzdDxFTGlzdFN0eWxlVHlwZT4obGlzdFN0eWxlSWRlbnQg
LSBDU1NWYWx1ZURpc2MpOworICAgICAgICAgICAgICAgICAgICBPd25QdHI8Q291bnRlckNvbnRl
bnQ+IGNvdW50ZXIgPSBhZG9wdFB0cihuZXcgQ291bnRlckNvbnRlbnQoY291bnRlclZhbHVlLT5p
ZGVudGlmaWVyKCksIGxpc3RTdHlsZVR5cGUsIGNvdW50ZXJWYWx1ZS0+c2VwYXJhdG9yKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjb3VudGVyLnJlbGVhc2Uo
KSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VR
dW90ZToKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChOT19DTE9TRV9R
VU9URSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgLy8gbm9ybWFsIGFuZCBub25lIGRvIG5vdCBoYXZlIGFueSBlZmZlY3QuCi0g
ICAgICAgICAgICAgICAgICAgIHt9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5RdW90ZToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldENvbnRlbnQoT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVvdGU6CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9PcGVu
UXVvdGU6CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE5PX09Q
RU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVOb0Nsb3NlUXVvdGU6CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9y
bWFsIGFuZCBub25lIGRvIG5vdCBoYXZlIGFueSBlZmZlY3QuCisgICAgICAgICAgICAgICAgICAg
ICAgICB7IH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZGlkU2V0KQorICAgICAgICAgICAgICAgIG1fc3R5
bGUtPmNsZWFyQ29udGVudCgpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGlmICghZGlkU2V0KQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250ZW50KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKICAgICAg
ICAgaWYgKGlzSW5oZXJpdCkgewogICAgICAgICAgICAgaWYgKG1fcGFyZW50U3R5bGUpCkBAIC0z
MjU4LDcgKzMyNTYsOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZpZWRGb250KHBhcmVudEZv
bnREZXNjcmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSk7CiAgICAgICAgICAgICBzZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fSBlbHNlIGlmIChpc0luaXRpYWwpIHsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0luaXRp
YWwpIHsKICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBpbml0aWFsRGVzYyA9IEZvbnREZXNj
cmlwdGlvbigpOwogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBh
ZGp1c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBm
cm9tIG1vbm9zcGFjZQpAQCAtMzI5MywzMyArMzI5MywzMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvCiAgICAgICAgICAgICAgICAgZmFjZSA9IGNvbnRlbnRWYWx1
ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHNldHRpbmdzKSB7CiAg
ICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEJvZHk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmYWNlID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVT
ZXJpZjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzZXJpZkZhbWlseTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnRE
ZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmYWNlID0gc2Fuc1NlcmlmRmFtaWx5OwotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpT
YW5zU2VyaWZGYW1pbHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgotICAgICAgICAgICAgICAgICAgICAg
ICAgZmFjZSA9IGN1cnNpdmVGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVGYW50YXN5OgotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IGZhbnRh
c3lGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2Vu
ZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OkZhbnRhc3lGYW1pbHkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25v
c3BhY2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gbW9ub3NwYWNlRmFtaWx5Owot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHko
Rm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dy
YXBoOgotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHBpY3RvZ3JhcGhGYW1pbHk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShG
b250RGVzY3JpcHRpb246OlBpY3RvZ3JhcGhGYW1pbHkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEJvZHk6CisgICAg
ICAgICAgICAgICAgICAgIGZhY2UgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVT
ZXJpZjoKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHNlcmlmRmFtaWx5OworICAgICAgICAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRp
b246OlNlcmlmRmFtaWx5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9
IHNhbnNTZXJpZkZhbWlseTsKKyAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ3Vyc2l2
ZToKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IGN1cnNpdmVGYW1pbHk7CisgICAgICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlv
bjo6Q3Vyc2l2ZUZhbWlseSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAgICAgICAgICAgICAgICAgICBmYWNlID0g
ZmFudGFzeUZhbWlseTsKKyAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdl
bmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpGYW50YXN5RmFtaWx5KTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFjZToK
KyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IG1vbm9zcGFjZUZhbWlseTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9u
OjpNb25vc3BhY2VGYW1pbHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKKyAgICAgICAgICAgICAgICAg
ICAgZmFjZSA9IHBpY3RvZ3JhcGhGYW1pbHk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6UGljdG9ncmFwaEZhbWls
eSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIApAQCAtMzM1NCw4ICszMzU0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1BybwogICAgICAgICBpZiAoaXNJbml0aWFsKSB7CiAgICAgICAgICAgICBt
X3N0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChp
c0luaGVyaXQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAg
IG1fc3R5bGUtPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCptX3BhcmVudFN0eWxlLT5iYWNrZ3Jv
dW5kTGF5ZXJzKCkpOwogICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKG1f
cGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKICAgICAgICAgfQpAQCAtMzM5OCw3ICsz
Mzk3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1BybwogICAgICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICAgICAgICAgIFJlbmRl
clRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSwgZm9udERlc2NyaXB0aW9uKTsKIAotICAgICAgICAgICAgLy8gRG91YmxlLWNoZWNrIGFu
ZCBzZWUgaWYgdGhlIHRoZW1lIGRpZCBhbnl0aGluZy4gIElmIG5vdCwgZG9uJ3QgYm90aGVyIHVw
ZGF0aW5nIHRoZSBmb250LgorICAgICAgICAgICAgLy8gRG91YmxlLWNoZWNrIGFuZCBzZWUgaWYg
dGhlIHRoZW1lIGRpZCBhbnl0aGluZy4gSWYgbm90LCBkb24ndCBib3RoZXIgdXBkYXRpbmcgdGhl
IGZvbnQuCiAgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHJlbmRlcmluZyBtb2RlIGFuZCBw
cmludGVyIGZvbnQgc2V0dGluZ3MgYXJlIHVwZGF0ZWQuCiAgICAgICAgICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7CkBAIC0zNDEz
LDkgKzM0MTIsOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvCiAg
ICAgICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzRm9udFZhbHVlKCkpIHsKLSAg
ICAgICAgICAgIEZvbnRWYWx1ZSAqZm9udCA9IHN0YXRpY19jYXN0PEZvbnRWYWx1ZSo+KHZhbHVl
KTsKLSAgICAgICAgICAgIGlmICghZm9udC0+c3R5bGUgfHwgIWZvbnQtPnZhcmlhbnQgfHwgIWZv
bnQtPndlaWdodCB8fAotICAgICAgICAgICAgICAgICAhZm9udC0+c2l6ZSB8fCAhZm9udC0+bGlu
ZUhlaWdodCB8fCAhZm9udC0+ZmFtaWx5KQorICAgICAgICAgICAgRm9udFZhbHVlKiBmb250ID0g
c3RhdGljX2Nhc3Q8Rm9udFZhbHVlKj4odmFsdWUpOworICAgICAgICAgICAgaWYgKCFmb250LT5z
dHlsZSB8fCAhZm9udC0+dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0CisgICAgICAgICAgICAgICAg
fHwgIWZvbnQtPnNpemUgfHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZvbnQtPmZhbWlseSkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7CiAgICAgICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOwpAQCAtMzUw
Nyw4ICszNTA2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Bybwog
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZUNvbG9yKG1fcGFyZW50U3R5bGUtPmNv
bHVtblJ1bGVDb2xvcigpLmlzVmFsaWQoKSA/IG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xv
cigpIDogbV9wYXJlbnRTdHlsZS0+Y29sb3IoKSk7CiAgICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b2x1bW5SdWxlU3R5bGUobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVN0eWxlKCkpOwogICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVdpZHRoKG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1
bGVXaWR0aCgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCisgICAg
ICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKQogICAgICAgICAgICAgbV9zdHlsZS0+cmVzZXRDb2x1
bW5SdWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
cXVlZToKQEAgLTM1MzYsMTUgKzM1MzQsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1BybwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoaW50IGlkZW50
ID0gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaWRl
bnQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2xvdzoKLSAgICAgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFs
OgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4
NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFzdDoKLSAgICAgICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBlciBmYXN0LgotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93OgorICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6
CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVtc2Vj
LiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVGYXN0OgorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVT
cGVlZCgxMCk7IC8vIDEwbXNlYy4gU3VwZXIgZmFzdC4KKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNUaW1l
KCkpCiAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVUaW1lPGludCwgQ1NTUHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CkBA
IC0zNTU4LDE1ICszNTU2LDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsOgotICAgICAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAv
LyAxcHguCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJ
bmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVM
YXJnZToKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChM
ZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsOgorICAgICAgICAgICAgICAgIG1fc3R5bGUt
PnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsg
Ly8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZToKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRN
YXJxdWVlSW5jcmVtZW50KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4KKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVydFRvSW50TGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwpAQCAtMzYwOSwxMSArMzYwNywxMSBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBEYXNoYm9hcmRSZWdpb24gKnJlZ2lvbiA9IHByaW1p
dGl2ZVZhbHVlLT5nZXREYXNoYm9hcmRSZWdpb25WYWx1ZSgpOworICAgICAgICBEYXNoYm9hcmRS
ZWdpb24qIHJlZ2lvbiA9IHByaW1pdGl2ZVZhbHVlLT5nZXREYXNoYm9hcmRSZWdpb25WYWx1ZSgp
OwogICAgICAgICBpZiAoIXJlZ2lvbikKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBE
YXNoYm9hcmRSZWdpb24gKmZpcnN0ID0gcmVnaW9uOworICAgICAgICBEYXNoYm9hcmRSZWdpb24q
IGZpcnN0ID0gcmVnaW9uOwogICAgICAgICB3aGlsZSAocmVnaW9uKSB7CiAgICAgICAgICAgICBM
ZW5ndGggdG9wID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+dG9wKCksIHN0eWxlKCksIG1f
cm9vdEVsZW1lbnRTdHlsZSk7CiAgICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9J
bnRMZW5ndGgocmVnaW9uLT5yaWdodCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwpA
QCAtMzY0NSwyMCArMzY0MywyMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvCiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRTdHJva2VXaWR0
aCwgVGV4dFN0cm9rZVdpZHRoKQogICAgICAgICBmbG9hdCB3aWR0aCA9IDA7CiAgICAgICAgIHN3
aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVUaGluOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1lZGl1bToKLSAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVUaGljazogewotICAgICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSAx
LjAgLyA0ODsKLSAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVNZWRpdW0pCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOwotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlVGhpY2spCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCAqPSA1OwotICAgICAgICAgICAg
ICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZVRoaW46CisgICAgICAgIGNhc2UgQ1NTVmFsdWVNZWRpdW06CisgICAgICAgIGNhc2Ug
Q1NTVmFsdWVUaGljazogeworICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IDEuMCAvIDQ4Owor
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTWVk
aXVtKQorICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUaGljaykKKyAgICAgICAgICAg
ICAgICByZXN1bHQgKj0gNTsKKyAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0
aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB3
aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDE4NCwxNyArNDE4MiwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZp
bGxBdHRhY2htZW50KENTCiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICBzd2l0Y2ggKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVGaXhlZDoK
LSAgICAgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KEZpeGVkQmFja2dyb3VuZEF0dGFjaG1l
bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTY3JvbGw6Ci0g
ICAgICAgICAgICBsYXllci0+c2V0QXR0YWNobWVudChTY3JvbGxCYWNrZ3JvdW5kQXR0YWNobWVu
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxvY2FsOgotICAg
ICAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQoTG9jYWxCYWNrZ3JvdW5kQXR0YWNobWVudCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENTU1ZhbHVlRml4ZWQ6CisgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50
KEZpeGVkQmFja2dyb3VuZEF0dGFjaG1lbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENT
U1ZhbHVlU2Nyb2xsOgorICAgICAgICBsYXllci0+c2V0QXR0YWNobWVudChTY3JvbGxCYWNrZ3Jv
dW5kQXR0YWNobWVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVMb2NhbDoK
KyAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQoTG9jYWxCYWNrZ3JvdW5kQXR0YWNobWVudCk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKICAgICB9CiB9
CiAKQEAgLTQzNzksMTggKzQzNzcsMTggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXBGaWxsWFBv
c2l0aW9uKENTUwogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29t
KCk7CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBMZW5ndGggbDsKKyAgICBMZW5ndGgg
bGVuZ3RoOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgbCA9
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21G
YWN0b3IpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAg
ICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2Vu
dCk7CisgICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRl
ZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFs
dWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgbGVuZ3RoID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKSk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQ
ZXJjZW50YWdlTGVuZ3RoKCkpCi0gICAgICAgIGwgPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQ
ZXJjZW50YWdlTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT52aWV3
cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybjsKLSAgICBs
YXllci0+c2V0WFBvc2l0aW9uKGwpOworICAgIGxheWVyLT5zZXRYUG9zaXRpb24obGVuZ3RoKTsK
IH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjptYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTQ0MDYsMTggKzQ0MDQsMTgg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXBGaWxsWVBvc2l0aW9uKENTUwogICAgIGZsb2F0IHpv
b21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7CiAKICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKLSAgICBMZW5ndGggbDsKKyAgICBMZW5ndGggbGVuZ3RoOwogICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgbCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsK
KyAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwogICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgbCA9IExlbmd0aChwcmltaXRp
dmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgICAgIGxlbmd0aCA9IExl
bmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkp
Ci0gICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0Nh
bGNWYWx1ZShzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAg
ICAgbGVuZ3RoID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxj
VmFsdWUoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7CiAgICAgZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCi0gICAg
ICAgIGwgPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CisgICAg
ICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsK
ICAgICBlbHNlCiAgICAgICAgIHJldHVybjsKLSAgICBsYXllci0+c2V0WVBvc2l0aW9uKGwpOwor
ICAgIGxheWVyLT5zZXRZUG9zaXRpb24obGVuZ3RoKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVy
OjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVl
KQpAQCAtNDU4NSwyNyArNDU4MywyNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlv
blRpbWluZ0Z1CiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMaW5lYXI6Ci0gICAgICAgICAgICAg
ICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihMaW5lYXJUaW1pbmdGdW5jdGlvbjo6Y3Jl
YXRlKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUVhc2U6Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihDdWJp
Y0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlRWFzZUluOgotICAgICAgICAgICAgICAgIGFuaW1h
dGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRl
KDAuNDIsIDAuMCwgMS4wLCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVFYXNlT3V0OgotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0
VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDAuMCwgMC4w
LCAwLjU4LCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVFYXNlSW5PdXQ6Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdG
dW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoMC40MiwgMC4wLCAwLjU4
LCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVTdGVwU3RhcnQ6Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlv
bihTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoMSwgdHJ1ZSkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVN0ZXBFbmQ6Ci0gICAgICAgICAgICAg
ICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVh
dGUoMSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZUxpbmVhcjoKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGlu
ZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENTU1ZhbHVlRWFzZToKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVu
Y3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlSW46CisgICAgICAgICAgICBhbmltYXRp
b24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgw
LjQyLCAwLjAsIDEuMCwgMS4wKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZUVhc2VPdXQ6CisgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9u
KEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgwLjAsIDAuMCwgMC41OCwgMS4wKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbk91dDoKKyAg
ICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKDAuNDIsIDAuMCwgMC41OCwgMS4wKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVN0ZXBTdGFydDoKKyAgICAgICAgICAgIGFuaW1hdGlv
bi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDEsIHRydWUp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlU3RlcEVuZDoKKyAg
ICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKDEsIGZhbHNlKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNDg0MiwxMiArNDg0MCwxMiBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlsCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZv
ciBub3csIGx1bXAgYWxsIGZhbWlsaWVzIGJ1dCBtb25vc3BhY2UgdG9nZXRoZXIuCi0gICAgaWYg
KGNoaWxkRm9udC5nZW5lcmljRmFtaWx5KCkgIT0gRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VG
YW1pbHkgJiYKLSAgICAgICAgcGFyZW50Rm9udC5nZW5lcmljRmFtaWx5KCkgIT0gRm9udERlc2Ny
aXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpCisgICAgaWYgKGNoaWxkRm9udC5nZW5lcmljRmFtaWx5
KCkgIT0gRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkKKyAgICAgICAgJiYgcGFyZW50
Rm9udC5nZW5lcmljRmFtaWx5KCkgIT0gRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGtub3cgdGhlIHBhcmVudCBpcyBtb25vc3Bh
Y2Ugb3IgdGhlIGNoaWxkIGlzIG1vbm9zcGFjZSwgYW5kIHRoYXQgZm9udAotICAgIC8vIHNpemUg
d2FzIHVuc3BlY2lmaWVkLiAgV2Ugd2FudCB0byBzY2FsZSBvdXIgZm9udCBzaXplIGFzIGFwcHJv
cHJpYXRlLgorICAgIC8vIHNpemUgd2FzIHVuc3BlY2lmaWVkLiBXZSB3YW50IHRvIHNjYWxlIG91
ciBmb250IHNpemUgYXMgYXBwcm9wcmlhdGUuCiAgICAgLy8gSWYgdGhlIGZvbnQgdXNlcyBhIGtl
eXdvcmQgc2l6ZSwgdGhlbiB3ZSByZWZldGNoIGZyb20gdGhlIHRhYmxlIHJhdGhlciB0aGFuCiAg
ICAgLy8gbXVsdGlwbHlpbmcgYnkgb3VyIHNjYWxlIGZhY3Rvci4KICAgICBmbG9hdCBzaXplOwpA
QCAtNDg5NSw4ICs0ODkzLDggQEAgZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXpl
RnJvbQogICAgIGlmIChmYWJzZihzcGVjaWZpZWRTaXplKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjplcHNpbG9uKCkpCiAgICAgICAgIHJldHVybiAwLjBmOwogCi0gICAgLy8gV2Ugc3Vw
cG9ydCB0d28gdHlwZXMgb2YgbWluaW11bSBmb250IHNpemUuICBUaGUgZmlyc3QgaXMgYSBoYXJk
IG92ZXJyaWRlIHRoYXQgYXBwbGllcyB0bwotICAgIC8vIGFsbCBmb250cy4gIFRoaXMgaXMgIm1p
blNpemUuIiAgVGhlIHNlY29uZCB0eXBlIG9mIG1pbmltdW0gZm9udCBzaXplIGlzIGEgInNtYXJ0
IG1pbmltdW0iCisgICAgLy8gV2Ugc3VwcG9ydCB0d28gdHlwZXMgb2YgbWluaW11bSBmb250IHNp
emUuIFRoZSBmaXJzdCBpcyBhIGhhcmQgb3ZlcnJpZGUgdGhhdCBhcHBsaWVzIHRvCisgICAgLy8g
YWxsIGZvbnRzLiBUaGlzIGlzICJtaW5TaXplLiIgVGhlIHNlY29uZCB0eXBlIG9mIG1pbmltdW0g
Zm9udCBzaXplIGlzIGEgInNtYXJ0IG1pbmltdW0iCiAgICAgLy8gdGhhdCBpcyBhcHBsaWVkIG9u
bHkgd2hlbiB0aGUgV2ViIHBhZ2UgY2FuJ3Qga25vdyB3aGF0IHNpemUgaXQgcmVhbGx5IGFza2Vk
IGZvciwgZS5nLiwKICAgICAvLyB3aGVuIGl0IHVzZXMgbG9naWNhbCBzaXplcyBsaWtlICJzbWFs
bCIgb3IgZXhwcmVzc2VzIHRoZSBmb250LXNpemUgYXMgYSBwZXJjZW50YWdlIG9mCiAgICAgLy8g
dGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgc2V0dGluZy4KQEAgLTQ5MTMsMTMgKzQ5MTEsMTMgQEAg
ZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbQogICAgIGludCBtaW5Mb2dp
Y2FsU2l6ZSA9IHNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCk7CiAgICAgZmxvYXQg
em9vbWVkU2l6ZSA9IHNwZWNpZmllZFNpemUgKiB6b29tRmFjdG9yOwogCi0gICAgLy8gQXBwbHkg
dGhlIGhhcmQgbWluaW11bSBmaXJzdC4gIFdlIG9ubHkgYXBwbHkgdGhlIGhhcmQgbWluaW11bSBp
ZiBhZnRlciB6b29taW5nIHdlJ3JlIHN0aWxsIHRvbyBzbWFsbC4KKyAgICAvLyBBcHBseSB0aGUg
aGFyZCBtaW5pbXVtIGZpcnN0LiBXZSBvbmx5IGFwcGx5IHRoZSBoYXJkIG1pbmltdW0gaWYgYWZ0
ZXIgem9vbWluZyB3ZSdyZSBzdGlsbCB0b28gc21hbGwuCiAgICAgaWYgKHpvb21lZFNpemUgPCBt
aW5TaXplKQogICAgICAgICB6b29tZWRTaXplID0gbWluU2l6ZTsKIAotICAgIC8vIE5vdyBhcHBs
eSB0aGUgInNtYXJ0IG1pbmltdW0uIiAgVGhpcyBtaW5pbXVtIGlzIGFsc28gb25seSBhcHBsaWVk
IGlmIHdlJ3JlIHN0aWxsIHRvbyBzbWFsbAotICAgIC8vIGFmdGVyIHpvb21pbmcuICBUaGUgZm9u
dCBzaXplIG11c3QgZWl0aGVyIGJlIHJlbGF0aXZlIHRvIHRoZSB1c2VyIGRlZmF1bHQgb3IgdGhl
IG9yaWdpbmFsIHNpemUKLSAgICAvLyBtdXN0IGhhdmUgYmVlbiBhY2NlcHRhYmxlLiAgSW4gb3Ro
ZXIgd29yZHMsIHdlIG9ubHkgYXBwbHkgdGhlIHNtYXJ0IG1pbmltdW0gd2hlbmV2ZXIgd2UncmUg
cG9zaXRpdmUKKyAgICAvLyBOb3cgYXBwbHkgdGhlICJzbWFydCBtaW5pbXVtLiIgVGhpcyBtaW5p
bXVtIGlzIGFsc28gb25seSBhcHBsaWVkIGlmIHdlJ3JlIHN0aWxsIHRvbyBzbWFsbAorICAgIC8v
IGFmdGVyIHpvb21pbmcuIFRoZSBmb250IHNpemUgbXVzdCBlaXRoZXIgYmUgcmVsYXRpdmUgdG8g
dGhlIHVzZXIgZGVmYXVsdCBvciB0aGUgb3JpZ2luYWwgc2l6ZQorICAgIC8vIG11c3QgaGF2ZSBi
ZWVuIGFjY2VwdGFibGUuIEluIG90aGVyIHdvcmRzLCB3ZSBvbmx5IGFwcGx5IHRoZSBzbWFydCBt
aW5pbXVtIHdoZW5ldmVyIHdlJ3JlIHBvc2l0aXZlCiAgICAgLy8gZG9pbmcgc28gd29uJ3QgZGlz
cnVwdCB0aGUgbGF5b3V0LgogICAgIGlmICh1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSAmJiB6
b29tZWRTaXplIDwgbWluTG9naWNhbFNpemUgJiYgKHNwZWNpZmllZFNpemUgPj0gbWluTG9naWNh
bFNpemUgfHwgIWlzQWJzb2x1dGVTaXplKSkKICAgICAgICAgem9vbWVkU2l6ZSA9IG1pbkxvZ2lj
YWxTaXplOwpAQCAtNDkzMyw3ICs0OTMxLDcgQEAgY29uc3QgaW50IGZvbnRTaXplVGFibGVNYXgg
PSAxNjsKIGNvbnN0IGludCBmb250U2l6ZVRhYmxlTWluID0gOTsKIGNvbnN0IGludCB0b3RhbEtl
eXdvcmRzID0gODsKIAotLy8gV2luSUUvTmF2NCB0YWJsZSBmb3IgZm9udCBzaXplcy4gIERlc2ln
bmVkIHRvIG1hdGNoIHRoZSBsZWdhY3kgZm9udCBtYXBwaW5nIHN5c3RlbSBvZiBIVE1MLgorLy8g
V2luSUUvTmF2NCB0YWJsZSBmb3IgZm9udCBzaXplcy4gRGVzaWduZWQgdG8gbWF0Y2ggdGhlIGxl
Z2FjeSBmb250IG1hcHBpbmcgc3lzdGVtIG9mIEhUTUwuCiBzdGF0aWMgY29uc3QgaW50IHF1aXJr
c0ZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1heCAtIGZvbnRTaXplVGFibGVNaW4gKyAxXVt0
b3RhbEtleXdvcmRzXSA9CiB7CiAgICAgICB7IDksICAgIDksICAgICA5LCAgICAgOSwgICAgMTEs
ICAgIDE0LCAgICAxOCwgICAgMjggfSwKQEAgLTQ5NDMsNyArNDk0MSw3IEBAIHN0YXRpYyBjb25z
dCBpbnQgcXVpcmtzRm9udFNpemVUYWJsZVtmb24KICAgICAgIHsgOSwgICAgOSwgICAgMTAsICAg
IDEzLCAgICAxNiwgICAgMjAsICAgIDI2LCAgICA0MCB9LCAvLyBmaXhlZCBmb250IGRlZmF1bHQg
KDEzKQogICAgICAgeyA5LCAgICA5LCAgICAxMSwgICAgMTQsICAgIDE3LCAgICAyMSwgICAgMjgs
ICAgIDQyIH0sCiAgICAgICB7IDksICAgMTAsICAgIDEyLCAgICAxNSwgICAgMTcsICAgIDIzLCAg
ICAzMCwgICAgNDUgfSwKLSAgICAgIHsgOSwgICAxMCwgICAgMTMsICAgIDE2LCAgICAxOCwgICAg
MjQsICAgIDMyLCAgICA0OCB9ICAvLyBwcm9wb3J0aW9uYWwgZm9udCBkZWZhdWx0ICgxNikKKyAg
ICAgIHsgOSwgICAxMCwgICAgMTMsICAgIDE2LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9
IC8vIHByb3BvcnRpb25hbCBmb250IGRlZmF1bHQgKDE2KQogfTsKIC8vIEhUTUwgICAgICAgMSAg
ICAgIDIgICAgICAzICAgICAgNCAgICAgIDUgICAgICA2ICAgICAgNwogLy8gQ1NTICB4eHMgICB4
cyAgICAgcyAgICAgIG0gICAgICBsICAgICB4bCAgICAgeHhsCkBAIC00OTYwLDcgKzQ5NTgsNyBA
QCBzdGF0aWMgY29uc3QgaW50IHN0cmljdEZvbnRTaXplVGFibGVbZm9uCiAgICAgICB7IDksICAg
MTAsICAgIDEyLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwgICAgMzkgfSwgLy8gZml4ZWQg
Zm9udCBkZWZhdWx0ICgxMykKICAgICAgIHsgOSwgICAxMCwgICAgMTIsICAgIDE0LCAgICAxNywg
ICAgMjEsICAgIDI4LCAgICA0MiB9LAogICAgICAgeyA5LCAgIDEwLCAgICAxMywgICAgMTUsICAg
IDE4LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCi0gICAgICB7IDksICAgMTAsICAgIDEzLCAgICAx
NiwgICAgMTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAgLy8gcHJvcG9ydGlvbmFsIGZvbnQgZGVm
YXVsdCAoMTYpCisgICAgICB7IDksICAgMTAsICAgIDEzLCAgICAxNiwgICAgMTgsICAgIDI0LCAg
ICAzMiwgICAgNDggfSAvLyBwcm9wb3J0aW9uYWwgZm9udCBkZWZhdWx0ICgxNikKIH07CiAvLyBI
VE1MICAgICAgIDEgICAgICAyICAgICAgMyAgICAgIDQgICAgICA1ICAgICAgNiAgICAgIDcKIC8v
IENTUyAgeHhzICAgeHMgICAgIHMgICAgICBtICAgICAgbCAgICAgeGwgICAgIHh4bApAQCAtNTEw
MiwyOCArNTEwMCwyOCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmFmZmVjdGVkQnlWaWV3cG9ydENo
CiBzdGF0aWMgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldFRyYW5zZm9ybU9w
ZXJhdGlvblR5cGUoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9wZXJhdGlvblR5
cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgIHJldHVybiBU
cmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0NBTEVfWDsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVy
YXRpb246OlNDQUxFX1k7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNj
YWxlWlRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9u
OjpTQ0FMRV9aOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNE
VHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEVfM0Q7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjogICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEU7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFu
c2Zvcm1PcGVyYXRpb246ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
WDsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5z
Zm9ybU9wZXJhdGlvbjogICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9Z
OwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNm
b3JtT3BlcmF0aW9uOiAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1o7
Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNEVHJhbnNm
b3JtT3BlcmF0aW9uOiAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q7
Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU7Ci0gICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRp
b246ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDsKLSAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjog
ICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOwotICAgICAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAg
ICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1o7Ci0gICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICBy
ZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q7Ci0gICAgICAgIGNhc2UgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgICByZXR1
cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAgcmV0dXJuIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0tFV19YOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0tFV19ZOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpN
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlv
bjo6TUFUUklYOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgz
RFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFU
UklYXzNEOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpQZXJzcGVjdGl2
ZVRyYW5zZm9ybU9wZXJhdGlvbjogICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BF
Q1RJVkU7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFu
c2Zvcm1PcGVyYXRpb246ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOwor
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRTsKKyAgICBjYXNlIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1P
cGVyYXRpb246OlNDQUxFX1g7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2Nh
bGVZVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9Z
OworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJh
dGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWjsKKyAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJh
bnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURTsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xh
dGVYVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEVfWDsKKyAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNm
b3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWTsKKyAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0
aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWjsKKyAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogcmV0
dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOworICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9y
bU9wZXJhdGlvbjo6Uk9UQVRFOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJv
dGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFU
RV9YOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1P
cGVyYXRpb246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOworICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb246IHJldHVy
biBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9aOworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3Bl
cmF0aW9uOjpST1RBVEVfM0Q7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tl
d1RyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzsKKyAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjog
cmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOworICAgIGNhc2UgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3Bl
cmF0aW9uOjpTS0VXX1k7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4
VHJhbnNmb3JtT3BlcmF0aW9uOiByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg7Cisg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRp
b246IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDsKKyAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJu
IFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU7CisgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbjogcmV0dXJuIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Tk9ORTsKICAgICB9CiAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9O
RTsKIH0KQEAgLTUxNTksMjEyICs1MTU3LDIxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZVRyYW5zZm9ybU9wZXJhCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygwKSk7CiAKICAgICAgICAgc3dpdGNoICh0cmFuc2Zvcm1WYWx1ZS0+b3Bl
cmF0aW9uVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAg
ICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKLSAgICAgICAgICAgICAgICBkb3VibGUgc3kg
PSAxLjA7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBl
KCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikK
LSAgICAgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwot
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFs
dWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1W
YWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhU
cmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zv
cm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN5ID0gc3g7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9u
OiB7CisgICAgICAgICAgICBkb3VibGUgc3ggPSAxLjA7CisgICAgICAgICAgICBkb3VibGUgc3kg
PSAxLjA7CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAg
ICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUo
KSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25k
VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgc3kgPSBzeDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoc3gsIHN5LCAxLjAsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJh
bnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNjYWxlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAg
ICBkb3VibGUgc3ggPSAxLjA7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHN5ID0gMS4wOwotICAg
ICAgICAgICAgICAgIGRvdWJsZSBzeiA9IDEuMDsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2Nh
bGVaVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICAgICBzeiA9IGZpcnN0VmFs
dWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3Jt
VmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZ
VHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFsdWUt
PmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gdGhpcmRWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7CisgICAgICAgICAgICBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShz
eCwgc3ksIDEuMCwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3Bl
cmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uOgor
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNEVHJhbnNmb3JtT3Bl
cmF0aW9uOiB7CisgICAgICAgICAgICBkb3VibGUgc3ggPSAxLjA7CisgICAgICAgICAgICBkb3Vi
bGUgc3kgPSAxLjA7CisgICAgICAgICAgICBkb3VibGUgc3ogPSAxLjA7CisgICAgICAgICAgICBp
ZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHN6ID0gZmly
c3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxl
WVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFsdWUtPmdl
dERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzeCA9
IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNj
YWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPmxlbmd0aCgpID4gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN6ID0gdGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxl
bmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1W
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBzeSwgc3osIGdldFRyYW5zZm9ybU9wZXJh
dGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIGNh
c2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246
Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJh
bnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAs
IEZpeGVkKTsKLSAgICAgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwgRml4ZWQpOwot
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAg
ICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0
eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICB0eCA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0
eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHJh
bnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3Ro
KHNlY29uZFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVu
ZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBzeSwgc3osIGdldFRyYW5zZm9y
bU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlv
bjogeworICAgICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAg
ICAgIExlbmd0aCB0eSA9IExlbmd0aCgwLCBGaXhlZCk7CisgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJh
bnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRU
b0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9GbG9hdExl
bmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVu
Z3RoKHNlY29uZFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIGlmICh0eC5pc1VuZGVmaW5lZCgpIHx8IHR5LmlzVW5kZWZpbmVkKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICh0eC5pc1VuZGVm
aW5lZCgpIHx8IHR5LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAsIEZpeGVkKSwg
Z2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
KSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlv
bjoKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNE
VHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3Ro
KDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwgRml4ZWQp
OwotICAgICAgICAgICAgICAgIExlbmd0aCB0eiA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAg
ICAgICAgICAgIHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJv
b3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3Jt
VmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNs
YXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0
VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsK
LSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0
VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkg
IT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkg
PiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRo
aXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKHRoaXJkVmFsdWUsIHN0eWxlLCByb290U3R5bGUs
IHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zs
b2F0TGVuZ3RoKHNlY29uZFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0eCwgdHksIExl
bmd0aCgwLCBGaXhlZCksIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUt
Pm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVy
YXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNE
VHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBMZW5ndGggdHggPSBMZW5ndGgoMCwg
Rml4ZWQpOworICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAg
ICAgICAgIExlbmd0aCB0eiA9IExlbmd0aCgwLCBGaXhlZCk7CisgICAgICAgICAgICBpZiAodHJh
bnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICB0eiA9IGNvbnZl
cnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3Ip
OworICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikK
KyAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0
eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9v
dFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUt
Pm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRy
YW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFs
dWUtPmxlbmd0aCgpID4gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHRoaXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgodGhpcmRWYWx1ZSwgc3R5bGUsIHJvb3RT
dHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MSkpOworICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChz
ZWNvbmRWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBpZiAodHguaXNVbmRlZmluZWQoKSB8fCB0eS5pc1VuZGVmaW5lZCgpIHx8IHR6LmlzVW5k
ZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGlmICh0eC5pc1VuZGVmaW5lZCgpIHx8IHR5LmlzVW5kZWZpbmVkKCkgfHwgdHouaXNVbmRlZmlu
ZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICBv
cGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUodHgsIHR5LCB0eiwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1W
YWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmly
c3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMCwgMCwg
MSwgYW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJh
dGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1P
cGVyYXRpb246Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3Rh
dGVZVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgIGRv
dWJsZSB4ID0gMDsKLSAgICAgICAgICAgICAgICBkb3VibGUgeSA9IDA7Ci0gICAgICAgICAgICAg
ICAgZG91YmxlIHogPSAwOwotICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFs
dWUtPmNvbXB1dGVEZWdyZWVzKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRy
YW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgeCA9IDE7Ci0gICAgICAgICAg
ICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAg
ICAgICAgICAgeSA9IDE7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICB6ID0gMTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUsIGdldFRyYW5z
Zm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA8IDQpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNv
bmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFu
c2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7Ci0gICAgICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIGZvdXJ0aFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSk7Ci0gICAg
ICAgICAgICAgICAgZG91YmxlIHggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAg
ICAgICAgICAgICAgIGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0g
ICAgICAgICAgICAgICAgZG91YmxlIHogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwot
ICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZvdXJ0aFZhbHVlLT5jb21wdXRlRGVncmVl
cygpOwotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgZ2V0VHJhbnNmb3Jt
T3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgdHosIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJh
bnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+
Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFw
cGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgwLCAwLCAxLCBhbmdsZSwgZ2V0
VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlv
bjogeworICAgICAgICAgICAgZG91YmxlIHggPSAwOworICAgICAgICAgICAgZG91YmxlIHkgPSAw
OworICAgICAgICAgICAgZG91YmxlIHogPSAwOworICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0g
Zmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKworICAgICAgICAgICAgaWYgKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0
ZVhUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgeCA9IDE7CisgICAgICAgICAg
ICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpSb3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAg
IHkgPSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHogPSAxOworICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRy
YW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRy
YW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5n
dGgoKSA8IDQpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9u
OgotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFuc2Zv
cm1PcGVyYXRpb246Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpT
a2V3WVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVgg
PSAwOwotICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVkgPSAwOwotICAgICAgICAgICAgICAg
IGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICAg
ICBhbmdsZVkgPSBhbmdsZTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgYW5nbGVYID0gYW5nbGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1W
YWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJh
bnNmb3JtT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
VmFsdWUtPmxlbmd0aCgpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFuZ2xlWSA9IHNlY29uZFZhbHVlLT5jb21wdXRlRGVncmVlcygp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zv
cm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOworICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIGZvdXJ0aFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSk7CisgICAg
ICAgICAgICBkb3VibGUgeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAg
ICAgICBkb3VibGUgeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgZG91YmxlIHogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAg
ZG91YmxlIGFuZ2xlID0gZm91cnRoVmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CisgICAgICAgICAg
ICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1P
cGVyYXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdYVHJh
bnNmb3JtT3BlcmF0aW9uOgorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpT
a2V3WVRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgZG91YmxlIGFuZ2xlWCA9IDA7
CisgICAgICAgICAgICBkb3VibGUgYW5nbGVZID0gMDsKKyAgICAgICAgICAgIGRvdWJsZSBhbmds
ZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CisgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tl
d1lUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgYW5nbGVZID0gYW5nbGU7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhbmdsZVggPSBhbmdsZTsKKyAgICAg
ICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBzZWNvbmRWYWx1ZS0+Y29t
cHV0ZURlZ3JlZXMoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZLCBnZXRUcmFuc2Zvcm1PcGVyYXRp
b25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICBp
ZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgNikKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGEgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1
ZSgpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBiID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSktPmdldERv
dWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGMgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIp
KS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgZCA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMykpLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBlID0g
em9vbUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFs
dWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNCkpLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAg
ICAgICAgICAgIGRvdWJsZSBmID0gem9vbUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLT5nZXRE
b3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFw
cGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhLCBiLCBjLCBkLCBlLCBmKSk7
CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25U
eXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+
bGVuZ3RoKCkgPCA2KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgp
IDwgMTYpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRy
YW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKS0+Z2V0RG91YmxlVmFsdWUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSkt
PmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMikpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSktPmdldERvdWJs
ZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soNSkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDYpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFu
c2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg3KSktPmdldERvdWJsZVZhbHVlKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soOCkpLT5n
ZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDExKSktPmdldERvdWJs
ZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb21GYWN0b3Ig
KiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDEyKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHpvb21GYWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEzKSktPmdldERv
dWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMTQpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNSkpLT5nZXREb3VibGVWYWx1ZSgpKTsKLSAgICAgICAg
ICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShtYXRyaXgpKTsKKyAgICAgICAgICAgIGRvdWJsZSBhID0gZmlyc3RW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRvdWJsZSBiID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygxKSktPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3VibGUgYyA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMikpLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91YmxlIGQgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRvdWJsZSBl
ID0gem9vbUZhY3RvciAqIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3Jt
VmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNCkpLT5nZXREb3VibGVWYWx1ZSgpOworICAg
ICAgICAgICAgZG91YmxlIGYgPSB6b29tRmFjdG9yICogc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg1KSktPmdldERv
dWJsZVZhbHVlKCk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoYSwgYiwgYywgZCwgZSwgZikpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgIGlmICh0
cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPCAxNikKICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKS0+
Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91Ymxl
VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUp
KS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDYpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDcpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDgpKS0+Z2V0RG91YmxlVmFsdWUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS0+Z2V0RG91
YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDEwKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygxMSkpLT5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHpvb21GYWN0b3IgKiBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEyKSktPmdldERvdWJsZVZh
bHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbUZhY3RvciAqIHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMTMpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDE0KSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFu
c2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNSkpLT5nZXREb3VibGVWYWx1ZSgp
KTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3Rp
dmVUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgIExlbmd0aCBwID0gTGVuZ3RoKDAs
IEZpeGVkKTsKKyAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc0xlbmd0aCgpKQorICAgICAg
ICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9v
dFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgYSBxdWlyayB0aGF0IHNob3VsZCBnbyBhd2F5IHdoZW4gM2QgdHJhbnNmb3Jt
cyBhcmUgZmluYWxpemVkLgorICAgICAgICAgICAgICAgIGRvdWJsZSB2YWwgPSBmaXJzdFZhbHVl
LT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIHAgPSB2YWwgPj0gMCA/IExlbmd0
aChjbGFtcFRvUG9zaXRpdmVJbnRlZ2VyKHZhbCksIEZpeGVkKSA6IExlbmd0aChVbmRlZmluZWQp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICBMZW5n
dGggcCA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUt
PmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0
aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHF1aXJrIHRoYXQg
c2hvdWxkIGdvIGF3YXkgd2hlbiAzZCB0cmFuc2Zvcm1zIGFyZSBmaW5hbGl6ZWQuCi0gICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSB2YWwgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwot
ICAgICAgICAgICAgICAgICAgICBwID0gdmFsID49IDAgPyBMZW5ndGgoY2xhbXBUb1Bvc2l0aXZl
SW50ZWdlcih2YWwpLCBGaXhlZCkgOiBMZW5ndGgoVW5kZWZpbmVkKTsKLSAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAocC5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAocC5pc1VuZGVmaW5lZCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgICAgIG9wZXJhdGlv
bnMub3BlcmF0aW9ucygpLmFwcGVuZChQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKHApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRp
b246Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShwKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpVbmtu
b3duVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTcxMiw5ICs1NzEw
LDggQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpbwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJsdXJGaWx0ZXJPcGVyYXRpb246
IHsKICAgICAgICAgICAgIExlbmd0aCBzdGREZXZpYXRpb24gPSBMZW5ndGgoMCwgRml4ZWQpOwot
ICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA+PSAxKSB7CisgICAgICAgICAg
ICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID49IDEpCiAgICAgICAgICAgICAgICAgc3RkRGV2
aWF0aW9uID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHls
ZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RkRGV2aWF0
aW9uLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01
Nzg4LDcyICs1Nzg1LDcyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMo
KQogICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9ICppdDsKIAogICAgICAg
ICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRJbWFnZTogewotICAgICAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNr
Z3JvdW5kTGF5ZXIgPSBtX3N0eWxlLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91
bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSAmJiBiYWNrZ3Jv
dW5kTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nh
c3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZEltYWdlOiB7CisgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFj
a2dyb3VuZExheWVyID0gbV9zdHlsZS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3Jv
dW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSAmJiBiYWNrZ3JvdW5k
TGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIGJh
Y2tncm91bmRMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHls
ZVBlbmRpbmdJbWFnZSo+KGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OiB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRh
Kj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNv
bnRlbnREYXRhLT5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRh
LT5pc0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdl
ID0gc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+aW1hZ2UoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFn
ZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFn
ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkZWRJbWFnZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+
KGNvbnRlbnREYXRhKS0+c2V0SW1hZ2UobG9hZGVkSW1hZ2UucmVsZWFzZSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OiB7CisgICAgICAgICAgICBmb3IgKENvbnRlbnREYXRh
KiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0eWxlLT5jb250ZW50
RGF0YSgpKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVudERhdGEtPm5leHQoKSkg
eworICAgICAgICAgICAgICAgIGlmIChjb250ZW50RGF0YS0+aXNJbWFnZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50
RGF0YSo+KGNvbnRlbnREYXRhKS0+aW1hZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlt
YWdlLT5pc1BlbmRpbmdJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChs
b2FkZWRJbWFnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxJbWFn
ZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5zZXRJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNl
KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUN1cnNvcjogewotICAgICAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0g
bV9zdHlsZS0+Y3Vyc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIEN1cnNvckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBpbWFnZSA9IGN1cnJlbnRDdXJzb3Iu
aW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5k
aW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEN1cnNv
ci5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdl
Kj4oaW1hZ2UpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOiB7CisgICAgICAg
ICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IG1fc3R5bGUtPmN1cnNvcnMoKSkgewor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgQ3Vyc29yRGF0YSYgY3VycmVudEN1cnNvciA9
IGN1cnNvckxpc3QtPmF0KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSog
aW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50Q3Vyc29yLnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAgICAgICAg
IGlmIChtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3R5bGUtPmxpc3RTdHlsZUltYWdl
KCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldExp
c3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdl
U291cmNlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNl
KCkgJiYgbV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAg
ICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRp
bmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRlcklt
YWdlU291cmNlKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewotICAgICAgICAg
ICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0eWxlLT5ib3hSZWZs
ZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJ
bWFnZSA9IHJlZmxlY3Rpb24tPm1hc2soKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2tJ
bWFnZS5pbWFnZSgpICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBs
b2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdl
LmltYWdlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2so
TmluZVBpZWNlSW1hZ2UobG9hZGVkSW1hZ2UucmVsZWFzZSgpLCBtYXNrSW1hZ2UuaW1hZ2VTbGlj
ZXMoKSwgbWFza0ltYWdlLmZpbGwoKSwgbWFza0ltYWdlLmJvcmRlclNsaWNlcygpLCBtYXNrSW1h
Z2Uub3V0c2V0KCksIG1hc2tJbWFnZS5ob3Jpem9udGFsUnVsZSgpLCBtYXNrSW1hZ2UudmVydGlj
YWxSdWxlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiB7CisgICAg
ICAgICAgICBpZiAobV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0eWxlLT5saXN0U3R5
bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlOiB7
CisgICAgICAgICAgICBpZiAobV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0eWxl
LT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nh
c3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJveFJlZmxlY3Q6IHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxl
Y3Rpb24gPSBtX3N0eWxlLT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBO
aW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOworICAgICAgICAg
ICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQZW5k
aW5nSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9h
ZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdl
Kj4obWFza0ltYWdlLmltYWdlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+
c2V0TWFzayhOaW5lUGllY2VJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCksIG1hc2tJbWFnZS5p
bWFnZVNsaWNlcygpLCBtYXNrSW1hZ2UuZmlsbCgpLCBtYXNrSW1hZ2UuYm9yZGVyU2xpY2VzKCks
IG1hc2tJbWFnZS5vdXRzZXQoKSwgbWFza0ltYWdlLmhvcml6b250YWxSdWxlKCksIG1hc2tJbWFn
ZS52ZXJ0aWNhbFJ1bGUoKSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+bWFza0Jv
eEltYWdlU291cmNlKCkgJiYgbV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGlu
Z0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hc2tCb3hJbWFnZVNv
dXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9z
dHlsZS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdl
OiB7Ci0gICAgICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3R5bGUt
PmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5l
eHQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobWFza0xheWVyLT5pbWFnZSgpICYmIG1h
c2tMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1hc2tMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHls
ZVBlbmRpbmdJbWFnZSo+KG1hc2tMYXllci0+aW1hZ2UoKSkpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOiB7CisgICAg
ICAgICAgICBpZiAobV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkgJiYgbV9zdHlsZS0+bWFz
a0JveEltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8
U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrSW1hZ2U6IHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBt
X3N0eWxlLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0gbWFza0xh
eWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobWFza0xheWVyLT5pbWFnZSgpICYm
IG1hc2tMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICAg
ICAgbWFza0xheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxl
UGVuZGluZ0ltYWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCShyZXZpc2lvbiAxMTUyMDEpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmg6MTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgQ1NTU3R5
bGVTZWxlY3Rvcl9oCisjZGVmaW5lIENTU1N0eWxlU2VsZWN0b3JfaAorCisjaW5jbHVkZSAiQ1NT
UnVsZS5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkxpbmtIYXNoLmgi
CisjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisj
aW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2VudW0gRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHsgRG9Ob3RV
c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRNaW5pbXVtRm9yRm9udEZpemUgfTsK
KworY2xhc3MgQ1NTRm9udFNlbGVjdG9yOworY2xhc3MgQ1NTUGFnZVJ1bGU7CitjbGFzcyBDU1NQ
cmltaXRpdmVWYWx1ZTsKK2NsYXNzIENTU1Byb3BlcnR5OworY2xhc3MgQ1NTUnVsZUxpc3Q7Citj
bGFzcyBDU1NGb250RmFjZTsKK2NsYXNzIENTU0ZvbnRGYWNlUnVsZTsKK2NsYXNzIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWU7CitjbGFzcyBDU1NJbWFnZVNldFZhbHVlOworY2xhc3MgQ1NTSW1hZ2VW
YWx1ZTsKK2NsYXNzIENTU1NlbGVjdG9yOworY2xhc3MgQ1NTU3R5bGVSdWxlOworY2xhc3MgQ1NT
U3R5bGVTaGVldDsKK2NsYXNzIENTU1ZhbHVlOworY2xhc3MgQ29udGFpbmVyTm9kZTsKK2NsYXNz
IEN1c3RvbUZpbHRlck9wZXJhdGlvbjsKK2NsYXNzIEN1c3RvbUZpbHRlclBhcmFtZXRlcjsKK2Ns
YXNzIERvY3VtZW50OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVW
aWV3OworY2xhc3MgS1VSTDsKK2NsYXNzIEtleWZyYW1lTGlzdDsKK2NsYXNzIEtleWZyYW1lVmFs
dWU7CitjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOworY2xhc3MgTm9kZTsKK2NsYXNzIFJlbmRl
clJlZ2lvbjsKK2NsYXNzIFJ1bGVEYXRhOworY2xhc3MgUnVsZVNldDsKK2NsYXNzIFNldHRpbmdz
OworY2xhc3MgU3RhdGljQ1NTUnVsZUxpc3Q7CitjbGFzcyBTdHlsZUJ1aWxkZXI7CitjbGFzcyBT
dHlsZUltYWdlOworY2xhc3MgU3R5bGVLZXlmcmFtZTsKK2NsYXNzIFN0eWxlUGVuZGluZ0ltYWdl
OworY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKK2NsYXNzIFN0eWxlUnVsZTsKK2NsYXNzIFN0eWxl
UnVsZUtleWZyYW1lczsKK2NsYXNzIFN0eWxlUnVsZVBhZ2U7CitjbGFzcyBTdHlsZVJ1bGVSZWdp
b247CitjbGFzcyBTdHlsZVNoYWRlcjsKK2NsYXNzIFN0eWxlU2hlZXQ7CitjbGFzcyBTdHlsZVNo
ZWV0SW50ZXJuYWw7CitjbGFzcyBTdHlsZVNoZWV0TGlzdDsKK2NsYXNzIFN0eWxlZEVsZW1lbnQ7
CitjbGFzcyBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTsKK2NsYXNzIFdlYktpdENTU1NoYWRlclZhbHVl
OworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQordHlwZWRlZiBWZWN0b3I8UmVmUHRyPEN1c3Rv
bUZpbHRlclBhcmFtZXRlcj4gPiBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0OworI2VuZGlmCisK
K2NsYXNzIE1lZGlhUXVlcnlSZXN1bHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lZGlh
UXVlcnlSZXN1bHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBNZWRp
YVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAmIGV4cHIsIGJvb2wgcmVzdWx0KQorICAg
ICAgICA6IG1fZXhwcmVzc2lvbihleHByKQorICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKKyAg
ICB7CisgICAgfQorCisgICAgTWVkaWFRdWVyeUV4cCBtX2V4cHJlc3Npb247CisgICAgYm9vbCBt
X3Jlc3VsdDsKK307CisKK2VudW0gU3R5bGVTaGFyaW5nQmVoYXZpb3IgeworICAgIEFsbG93U3R5
bGVTaGFyaW5nLAorICAgIERpc2FsbG93U3R5bGVTaGFyaW5nLAorfTsKKworLy8gTWF0Y2hPbmx5
VXNlckFnZW50UnVsZXMgaXMgdXNlZCBpbiBtZWRpYSBxdWVyaWVzLCB3aGVyZSByZWxhdGl2ZSB1
bml0cworLy8gYXJlIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnQgcm9vdCBl
bGVtZW50IHN0eWxlLCBhbmQgc3R5bGVkIG9ubHkKKy8vIGZyb20gdGhlIFVzZXIgQWdlbnQgU3R5
bGVzaGVldCBydWxlcy4KKworZW51bSBSdWxlTWF0Y2hpbmdCZWhhdmlvciB7CisgICAgTWF0Y2hB
bGxSdWxlcywKKyAgICBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcywKK307CisKKy8vIFRoaXMgY2xh
c3Mgc2VsZWN0cyBhIFJlbmRlclN0eWxlIGZvciBhIGdpdmVuIGVsZW1lbnQgYmFzZWQgb24gYSBj
b2xsZWN0aW9uIG9mIHN0eWxlc2hlZXRzLgorY2xhc3MgU3R5bGVSZXNvbHZlciB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoU3R5bGVSZXNvbHZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIFN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqLCBib29sIG1hdGNoQXV0aG9y
QW5kVXNlclN0eWxlcyk7CisgICAgflN0eWxlUmVzb2x2ZXIoKTsKKworICAgIC8vIFVzaW5nIHRo
ZXNlIGR1cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0byBvcHRpbWl6
ZSBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgorICAgIHZvaWQgcHVzaFBh
cmVudEVsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgcG9wUGFyZW50RWxlbWVudChFbGVtZW50
Kik7CisgICAgdm9pZCBwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290Kik7Cisg
ICAgdm9pZCBwb3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKKworICAgIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gMCwgU3R5bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxlU2hh
cmluZywKKyAgICAgICAgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBSZW5k
ZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKKworICAgIHZvaWQga2V5ZnJhbWVTdHls
ZXNGb3JBbmltYXRpb24oRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgS2V5ZnJhbWVMaXN0
Jik7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQo
UHNldWRvSWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwKTsKKworICAg
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KTsKKwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckRvY3VtZW50KERvY3Vt
ZW50KiwgQ1NTRm9udFNlbGVjdG9yKiA9IDApOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KKyAgICBSZW5kZXJTdHlsZSog
cm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsgfQor
ICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICBE
b2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrZXIuZG9jdW1lbnQoKTsg
fQorICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4g
c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24m
IHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVudFN0eWxlKCktPmZvbnREZXNj
cmlwdGlvbigpOyB9CisgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICB2b2lkIHNldFpvb20oZmxvYXQg
ZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9CisgICAgdm9pZCBzZXRF
ZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0
aXZlWm9vbShmKTsgfQorICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1fZm9u
dERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIpOyB9CisgICAgYm9vbCBoYXNQ
YXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnROb2RlOyB9CisgICAgCisgICAgdm9p
ZCBhcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZVNoZWV0PiA+Jik7CisgICAgCisgICAgLy8gRmluZCB0aGUgaWRzIG9yIGNs
YXNzZXMgdGhlIHNlbGVjdG9ycyBvbiBhIHN0eWxlc2hlZXQgYXJlIHNjb3BlZCB0by4gVGhlIHNl
bGVjdG9ycyBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIGluIHN1YnRyZWVzIHdoZXJlIHRoZSByb290
IGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2NvcGUuCisgICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5lU3R5
bGVzaGVldFNlbGVjdG9yU2NvcGVzKFN0eWxlU2hlZXRJbnRlcm5hbCosIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNz
U2NvcGVzKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVu
dCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwor
ICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgY29sbGVjdEZlYXR1cmVz
KCk7CisgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CisgICAgYm9vbCBtYXRj
aGVzUnVsZVNldChSdWxlU2V0Kik7CisgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50
KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKKyAgICBTdHlsZWRF
bGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50
KSBjb25zdDsKKyAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50
KikgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvcktleWZyYW1l
KGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUm
KTsKKworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgdm9pZCBwdXNoU2NvcGUoY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KTsK
KyAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsKKyNlbHNlCisg
ICAgdm9pZCBwdXNoU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IENvbnRhaW5lck5v
ZGUqKSB7IH0KKyAgICB2b2lkIHBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqKSB7IH0KKyNl
bmRpZgorCitwdWJsaWM6CisgICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxsIGdpdmUgYmFjayB0aGUg
c2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBlbGVtZW50IChvciBhIHBzZXVk
by1lbGVtZW50KS4KKyAgICBlbnVtIENTU1J1bGVGaWx0ZXIgeworICAgICAgICBVQUFuZFVzZXJD
U1NSdWxlcyAgID0gMSA8PCAxLAorICAgICAgICBBdXRob3JDU1NSdWxlcyAgICAgID0gMSA8PCAy
LAorICAgICAgICBFbXB0eUNTU1J1bGVzICAgICAgID0gMSA8PCAzLAorICAgICAgICBDcm9zc09y
aWdpbkNTU1J1bGVzID0gMSA8PCA0LAorICAgICAgICBBbGxCdXRFbXB0eUNTU1J1bGVzID0gVUFB
bmRVc2VyQ1NTUnVsZXMgfCBBdXRob3JDU1NSdWxlcyB8IENyb3NzT3JpZ2luQ1NTUnVsZXMsCisg
ICAgICAgIEFsbENTU1J1bGVzICAgICAgICAgPSBBbGxCdXRFbXB0eUNTU1J1bGVzIHwgRW1wdHlD
U1NSdWxlcywKKyAgICB9OworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHN0eWxlUnVsZXNG
b3JFbGVtZW50KEVsZW1lbnQqLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5
Q1NTUnVsZXMpOworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHBzZXVkb1N0eWxlUnVsZXNG
b3JFbGVtZW50KEVsZW1lbnQqLCBQc2V1ZG9JZCwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUgPSBB
bGxCdXRFbXB0eUNTU1J1bGVzKTsKKworICAgIC8vIEdpdmVuIGEgQ1NTIGtleXdvcmQgaW4gdGhl
IHJhbmdlICh4eC1zbWFsbCB0byAtd2Via2l0LXh4eC1sYXJnZSksIHRoaXMgZnVuY3Rpb24gd2ls
bCByZXR1cm4KKyAgICAvLyB0aGUgY29ycmVjdCBmb250IHNpemUgc2NhbGVkIHJlbGF0aXZlIHRv
IHRoZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVtKS4KKyAgICBzdGF0aWMgZmxvYXQgZm9udFNpemVG
b3JLZXl3b3JkKERvY3VtZW50KiwgaW50IGtleXdvcmQsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZh
dWx0U2l6ZSk7CisKKyAgICAvLyBHaXZlbiBhIGZvbnQgc2l6ZSBpbiBwaXhlbCwgdGhpcyBmdW5j
dGlvbiB3aWxsIHJldHVybiBsZWdhY3kgZm9udCBzaXplIGJldHdlZW4gMSBhbmQgNy4KKyAgICBz
dGF0aWMgaW50IGxlZ2FjeUZvbnRTaXplKERvY3VtZW50KiwgaW50IHBpeGVsRm9udFNpemUsIGJv
b2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSk7CisKK3B1YmxpYzoKKyAgICB2b2lkIHNldFN0
eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHMpIHsgbV9zdHlsZSA9IHM7IH0gLy8gVXNlZCBi
eSB0aGUgZG9jdW1lbnQgd2hlbiBzZXR0aW5nIHVwIGl0cyByb290IHN0eWxlLgorCisgICAgdm9p
ZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFJlbmRlclN0
eWxlKik7CisKKyAgICB2b2lkIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSopOworCisgICAgdm9pZCB1cGRhdGVGb250KCk7CisKKyAgICBzdGF0aWMg
ZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBmbG9hdCB6
b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21h
cnRNaW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSk7CisKKyAg
ICB2b2lkIHNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOworCitwcml2
YXRlOgorICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShE
b2N1bWVudCosIFJlbmRlclN0eWxlKiwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lm
aWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpOworCitwdWJsaWM6CisgICAgYm9vbCB1c2VT
Vkdab29tUnVsZXMoKTsKKworICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1By
aW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25zdDsKKworICAg
IGJvb2wgaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7
CisKKyAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udFNlbGVjdG9yLmdldCgpOyB9CisKKyAgICB2b2lkIGFkZFZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiwgYm9vbCByZXN1bHQpOworCisgICAg
Ym9vbCBhZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdDsKKworICAgIHZvaWQgYWxsVmlz
aXRlZFN0YXRlQ2hhbmdlZCgpIHsgbV9jaGVja2VyLmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsg
fQorICAgIHZvaWQgdmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCkgeyBt
X2NoZWNrZXIudmlzaXRlZFN0YXRlQ2hhbmdlZCh2aXNpdGVkSGFzaCk7IH0KKworICAgIHZvaWQg
YWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4pOworCisgICAg
Ym9vbCBjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOworCisgICAgYm9v
bCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmVhdHVyZXMuc2libGluZ1J1
bGVzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9mZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXM7IH0KKyAgICBib29sIHVzZXNCZWZv
cmVBZnRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzQmVmb3JlQWZ0ZXJS
dWxlczsgfQorICAgIGJvb2wgdXNlc0xpbmtSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVy
ZXMudXNlc0xpbmtSdWxlczsgfQorCisgICAgc3RhdGljIGJvb2wgY3JlYXRlVHJhbnNmb3JtT3Bl
cmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0
eWxlKiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOworICAg
IAorICAgIHZvaWQgaW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKKyAgICAKKyAg
ICAvLyBXQVJOSU5HLiBUaGlzIHdpbGwgY29uc3RydWN0IENTU09NIHdyYXBwZXJzIGZvciBhbGwg
c3R5bGUgcnVsZXMgYW5kIGNhY2hlIHRoZW4gaW4gYSBtYXAgZm9yIHNpZ25pZmljYW50IG1lbW9y
eSBjb3N0LgorICAgIC8vIEl0IGlzIGhlcmUgdG8gc3VwcG9ydCBpbnNwZWN0b3IuIERvbid0IHVz
ZSBmb3IgYW55IHJlZ3VsYXIgZW5naW5lIGZ1bmN0aW9ucy4KKyAgICBDU1NTdHlsZVJ1bGUqIGVu
c3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVSdWxlKik7CisKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVl
KiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwg
RmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CisjaWYgRU5BQkxFKENTU19TSEFERVJT
KQorICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihDU1NWYWx1ZSopOworICAgIFN0eWxlU2hh
ZGVyKiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJW
YWx1ZSopOworICAgIGJvb2wgcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVl
KiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlck51bWJlclBhcmFtdGVyKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVy
YXRpb24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSop
OworICAgIHZvaWQgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisjZW5kaWYKKyNlbmRpZiAvLyBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisKKyAgICBzdHJ1Y3QgUnVsZUZlYXR1cmUgeworICAgICAgICBSdWxl
RmVhdHVyZShTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxlY3RvciwgYm9vbCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICAgICAgICAgOiBydWxlKHJ1bGUpCisgICAgICAg
ICAgICAsIHNlbGVjdG9yKHNlbGVjdG9yKQorICAgICAgICAgICAgLCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pIAorICAgICAgICB7IAorICAgICAg
ICB9CisgICAgICAgIFN0eWxlUnVsZSogcnVsZTsKKyAgICAgICAgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yOworICAgICAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47CisgICAgfTsKKyAg
ICBzdHJ1Y3QgRmVhdHVyZXMgeworICAgICAgICBGZWF0dXJlcygpOworICAgICAgICB+RmVhdHVy
ZXMoKTsKKyAgICAgICAgdm9pZCBhZGQoY29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmKTsK
KyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
PiBpZHNJblJ1bGVzOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhdHRyc0lu
UnVsZXM7CisgICAgICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gc2libGluZ1J1bGVzOworICAgICAg
ICBWZWN0b3I8UnVsZUZlYXR1cmU+IHVuY29tbW9uQXR0cmlidXRlUnVsZXM7CisgICAgICAgIGJv
b2wgdXNlc0ZpcnN0TGluZVJ1bGVzOworICAgICAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVz
OworICAgICAgICBib29sIHVzZXNMaW5rUnVsZXM7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICAv
LyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRl
Y3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3
aAorICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5k
ZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0ZvclRl
eHRTaXplQWRqdXN0KCk7CisKKyAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxl
KiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKKwor
ICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVk
UnVsZXMuYXBwZW5kKHJ1bGUpOyB9CisKKyAgICBzdHJ1Y3QgTWF0Y2hSYW5nZXMgeworICAgICAg
ICBNYXRjaFJhbmdlcygpIDogZmlyc3RVQVJ1bGUoLTEpLCBsYXN0VUFSdWxlKC0xKSwgZmlyc3RB
dXRob3JSdWxlKC0xKSwgbGFzdEF1dGhvclJ1bGUoLTEpLCBmaXJzdFVzZXJSdWxlKC0xKSwgbGFz
dFVzZXJSdWxlKC0xKSB7IH0KKyAgICAgICAgaW50IGZpcnN0VUFSdWxlOworICAgICAgICBpbnQg
bGFzdFVBUnVsZTsKKyAgICAgICAgaW50IGZpcnN0QXV0aG9yUnVsZTsKKyAgICAgICAgaW50IGxh
c3RBdXRob3JSdWxlOworICAgICAgICBpbnQgZmlyc3RVc2VyUnVsZTsKKyAgICAgICAgaW50IGxh
c3RVc2VyUnVsZTsKKyAgICB9OworCisgICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzIHsKKyAg
ICAgICAgTWF0Y2hlZFByb3BlcnRpZXMoKSA6IHBvc3NpYmx5UGFkZGVkTWVtYmVyKDApIHsgfQor
ICAgICAgICAKKyAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHByb3BlcnRpZXM7Cisg
ICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgbGlua01hdGNoVHlwZSA6IDI7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaXNJblJl
Z2lvblJ1bGUgOiAxOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIC8vIFVzZWQgdG8gbWFr
ZSBzdXJlIGFsbCBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZCBzaW5jZSB3ZSBjb21wdXRlIHRo
ZSBoYXNoIG92ZXIgdGhlIGJ5dGVzIG9mIHRoaXMgb2JqZWN0LgorICAgICAgICAgICAgdm9pZCog
cG9zc2libHlQYWRkZWRNZW1iZXI7CisgICAgICAgIH07CisgICAgfTsKKworICAgIHN0cnVjdCBN
YXRjaFJlc3VsdCB7CisgICAgICAgIE1hdGNoUmVzdWx0KCkgOiBpc0NhY2hlYWJsZSh0cnVlKSB7
IH0KKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4gbWF0Y2hlZFByb3BlcnRp
ZXM7CisgICAgICAgIFZlY3RvcjxTdHlsZVJ1bGUqLCA2ND4gbWF0Y2hlZFJ1bGVzOworICAgICAg
ICBNYXRjaFJhbmdlcyByYW5nZXM7CisgICAgICAgIGJvb2wgaXNDYWNoZWFibGU7CisgICAgfTsK
KworICAgIHN0cnVjdCBNYXRjaE9wdGlvbnMgeworICAgICAgICBNYXRjaE9wdGlvbnMoYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcywgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKSA6IHNjb3Bl
KHNjb3BlKSwgaW5jbHVkZUVtcHR5UnVsZXMoaW5jbHVkZUVtcHR5UnVsZXMpIHsgfQorICAgICAg
ICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKKyAgICAgICAgYm9vbCBpbmNsdWRlRW1wdHlS
dWxlczsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0
Y2hSZXN1bHQmLCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0gMCwg
dW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIGJvb2wg
aW5SZWdpb25SdWxlID0gZmFsc2UpOworICAgIHZvaWQgYWRkRWxlbWVudFN0eWxlUHJvcGVydGll
cyhNYXRjaFJlc3VsdCYsIFN0eWxlUHJvcGVydHlTZXQqLCBib29sIGlzQ2FjaGVhYmxlID0gdHJ1
ZSk7CisKKyAgICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1h
dGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYpOworICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVz
dWx0JiwgUnVsZVNldCopOworICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0Y2hS
ZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoU2NvcGVkQXV0
aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lk
IGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQm
IGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOworICAgIHZvaWQgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CisgICAgdm9pZCBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CisgICAgYm9v
bCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKKyAgICB2b2lkIHNv
cnRNYXRjaGVkUnVsZXMoKTsKKyAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhN
YXRjaFJlc3VsdCYpOworCisgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwg
Y29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKTsKKyAgICBib29sIGNoZWNrUmVnaW9uU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdpb25FbGVtZW50
KTsKKyAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmKTsK
KyAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+CisgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgYm9vbCBpbXBvcnRhbnQsIGludCBzdGFydEluZGV4
LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSk7CisgICAgdGVtcGxhdGUgPGJvb2wg
Zmlyc3RQYXNzPgorICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJp
dGVkT25seSwgYm9vbCBmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzKTsKKworICAgIHN0YXRpYyBib29s
IGlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQpOworCisgICAgdm9pZCBt
YXRjaFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqLCBib29sIGlzTGVmdFBhZ2UsIGJv
b2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOworICAgIHZvaWQgbWF0Y2hQ
YWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29u
c3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0
UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CisgICAgYm9vbCBpc0xlZnRQYWdlKGludCBw
YWdlSW5kZXgpIGNvbnN0OworICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29u
c3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQorICAgIGJvb2wgaXNGaXJzdFBh
Z2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CisgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5k
ZXgpIGNvbnN0OworCisgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CisgICAgT3du
UHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxlOworCisgICAgRmVhdHVyZXMgbV9mZWF0dXJlczsKKyAg
ICBPd25QdHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKKyAgICBPd25QdHI8UnVsZVNldD4g
bV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7CisKKyAgICBib29sIG1faGFzVUFBcHBlYXJhbmNl
OworICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOworICAgIEZpbGxMYXllciBtX2JhY2tncm91
bmREYXRhOworICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworCisgICAgdHlwZWRlZiBIYXNo
TWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiA+IEtleWZy
YW1lc1J1bGVNYXA7CisgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZyYW1lc1J1bGVNYXA7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkg
eyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQorCisgICAgUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAgUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwg
Q1NTSW1hZ2VWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqKTsK
KyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHNl
dE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7Cisj
ZW5kaWYKKworICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0KKyAgICBib29sIGFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKworICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvSW50TGVu
Z3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOworICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRv
RmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7CisKK3ByaXZhdGU6CisgICAgc3Rh
dGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOworCisgICAgdm9pZCBhZGRB
dXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3R5bGVTaGVldEludGVybmFsPiA+KiwgUnVsZVNldCYgdXNlclN0eWxlKTsKKworICAgIHZv
aWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CisKKyAgICB2b2lkIG1hcEZpbGxBdHRhY2ht
ZW50KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBG
aWxsQ2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQg
bWFwRmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwor
ICAgIHZvaWQgbWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1
ZSopOworICAgIHZvaWQgbWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENT
U1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5
ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmlsbFJlcGVhdFkoQ1NTUHJvcGVydHlJRCwg
RmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxTaXplKENTU1Byb3BlcnR5
SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsWFBvc2l0aW9uKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsWVBv
c2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisKKyAgICB2b2lk
IG1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBB
bmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEFu
aW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBBbmlt
YXRpb25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5pbWF0
aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEFu
aW1hdGlvbk5hbWUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlv
blBsYXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5pbWF0aW9u
UHJvcGVydHkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvblRp
bWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisKK3B1YmxpYzoKKyAgICB2b2lk
IG1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgTmluZVBpZWNlSW1h
Z2UmKTsKKyAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NTVmFsdWUqLCBOaW5lUGll
Y2VJbWFnZSYpOworICAgIExlbmd0aEJveCBtYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUq
KTsKKyAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlKiwgTmluZVBpZWNl
SW1hZ2UmKTsKK3ByaXZhdGU6CisgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5
bGVkRWxlbWVudCopIGNvbnN0OworCisgICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQsIENTU1ZhbHVlKik7CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIHZvaWQgYXBwbHlTVkdQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworI2VuZGlmCisKKyAgICBQYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqKTsKKyAgICB2
b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZU1h
dGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyosIHVuc2lnbmVkIHNp
emUpOworICAgIHN0cnVjdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSB7CisgICAgICAgIFZl
Y3RvcjxNYXRjaGVkUHJvcGVydGllcz4gbWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAgIE1hdGNo
UmFuZ2VzIHJhbmdlczsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZW5kZXJTdHlsZTsK
KyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBwYXJlbnRSZW5kZXJTdHlsZTsKKyAgICB9Owor
ICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBmaW5kRnJvbU1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUodW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lk
IGFkZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgdW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQm
KTsKKworICAgIC8vIEV2ZXJ5IE4gYWRkaXRpb25zIHRvIHRoZSBtYXRjaGVkIGRlY2xhcmF0aW9u
IGNhY2hlIHRyaWdnZXIgYSBzd2VlcCB3aGVyZSBlbnRyaWVzIGhvbGRpbmcKKyAgICAvLyB0aGUg
bGFzdCByZWZlcmVuY2UgdG8gYSBzdHlsZSBkZWNsYXJhdGlvbiBhcmUgZ2FyYmFnZSBjb2xsZWN0
ZWQuCisgICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKKworICAgIHVuc2ln
bmVkIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwOworCisg
ICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbT4g
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZTsKKyAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlIG1fbWF0
Y2hlZFByb3BlcnRpZXNDYWNoZTsKKworICAgIC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUg
c2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVsZW1lbnQsIGFuZCBhIHRlbXBvcmFyeSBidWZm
ZXIgdXNlZCBmb3IKKyAgICAvLyBtZXJnZSBzb3J0aW5nLgorICAgIFZlY3Rvcjxjb25zdCBSdWxl
RGF0YSosIDMyPiBtX21hdGNoZWRSdWxlczsKKworICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlz
dD4gbV9ydWxlTGlzdDsKKworICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gbV9wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzOworCisgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVkaXVt
OworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOworCisgICAgUHNl
dWRvSWQgbV9keW5hbWljUHNldWRvOworCisgICAgU2VsZWN0b3JDaGVja2VyIG1fY2hlY2tlcjsK
KworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogbV9w
YXJlbnRTdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOworICAgIEVs
ZW1lbnQqIG1fZWxlbWVudDsKKyAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7Cisg
ICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7CisgICAgRUluc2lkZUxpbmsgbV9l
bGVtZW50TGlua1N0YXRlOworICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKKyAgICBD
U1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7CisgICAgYm9vbCBtX2ZvbnREaXJ0eTsKKyAgICBi
b29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOworICAgIGJvb2wgbV9zYW1lT3JpZ2luT25s
eTsKKworICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOworICAgIFZl
Y3RvcjxPd25QdHI8TWVkaWFRdWVyeVJlc3VsdD4gPiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFR
dWVyeVJlc3VsdHM7CisKKyAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOwor
ICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOworICAgIGNvbnN0IFN0
eWxlQnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7CisgICAgCisgICAgSGFzaE1hcDxTdHlsZVJ1bGUq
LCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXA7Cisg
ICAgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBtX3N0eWxlU2hlZXRDU1NPTVdyYXBw
ZXJTZXQ7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgYm9vbCBtX2hhc1BlbmRpbmdT
aGFkZXJzOworI2VuZGlmCisKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIHN0YXRpYyBj
b25zdCBDb250YWluZXJOb2RlKiBkZXRlcm1pbmVTY29wZShjb25zdCBTdHlsZVNoZWV0SW50ZXJu
YWwqKTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250YWluZXJOb2RlKiwgT3duUHRy
PFJ1bGVTZXQ+ID4gU2NvcGVkUnVsZVNldE1hcDsKKworICAgIFJ1bGVTZXQqIHJ1bGVTZXRGb3JT
Y29wZShjb25zdCBDb250YWluZXJOb2RlKikgY29uc3Q7CisKKyAgICB2b2lkIHNldHVwU2NvcGVT
dGFjayhjb25zdCBDb250YWluZXJOb2RlKik7CisgICAgYm9vbCBzY29wZVN0YWNrSXNDb25zaXN0
ZW50KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFyZW50ICYm
IHBhcmVudCA9PSBtX3Njb3BlU3RhY2tQYXJlbnQ7IH0KKworICAgIFNjb3BlZFJ1bGVTZXRNYXAg
bV9zY29wZWRBdXRob3JTdHlsZXM7CisgICAgCisgICAgc3RydWN0IFNjb3BlU3RhY2tGcmFtZSB7
CisgICAgICAgIFNjb3BlU3RhY2tGcmFtZSgpIDogbV9zY29wZSgwKSwgbV9ydWxlU2V0KDApIHsg
fQorICAgICAgICBTY29wZVN0YWNrRnJhbWUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIFJ1
bGVTZXQqIHJ1bGVTZXQpIDogbV9zY29wZShzY29wZSksIG1fcnVsZVNldChydWxlU2V0KSB7IH0K
KyAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZTsKKyAgICAgICAgUnVsZVNldCog
bV9ydWxlU2V0OworICAgIH07CisgICAgLy8gVmVjdG9yICh1c2VkIGFzIHN0YWNrKSB0aGF0IGtl
ZXBzIHRyYWNrIG9mIHNjb3BpbmcgZWxlbWVudHMgKGkuZS4sIGVsZW1lbnRzIHdpdGggYSA8c3R5
bGUgc2NvcGVkPiBjaGlsZCkKKyAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcgdHJlZSBpdGVyYXRp
b24gZm9yIHN0eWxlIHJlc29sdXRpb24uCisgICAgVmVjdG9yPFNjb3BlU3RhY2tGcmFtZT4gbV9z
Y29wZVN0YWNrOworICAgIC8vIEVsZW1lbnQgbGFzdCBzZWVuIGFzIHBhcmVudCBlbGVtZW50IHdo
ZW4gdXBkYXRpbmcgbV9zY29waW5nRWxlbWVudFN0YWNrLgorICAgIC8vIFRoaXMgaXMgdXNlZCB0
byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50U3RhY2sgaXMgY29uc2lzdGVudCwgc2Vw
YXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9wYXJlbnRTdGFjay4KKyAgICBjb25zdCBD
b250YWluZXJOb2RlKiBtX3Njb3BlU3RhY2tQYXJlbnQ7CisjZW5kaWYKKworICAgIGZyaWVuZCBj
bGFzcyBTdHlsZUJ1aWxkZXI7CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRj
aGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJik7CisgICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9w
ZXJ0aWVzJik7CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRjaFJhbmdlcyYs
IGNvbnN0IE1hdGNoUmFuZ2VzJik7CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBN
YXRjaFJhbmdlcyYsIGNvbnN0IE1hdGNoUmFuZ2VzJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBDU1NTdHlsZVNlbGVjdG9yX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTksOCArMTksOCBAQAogICoKICAqLwog
Ci0jaWZuZGVmIENTU1N0eWxlU2VsZWN0b3JfaAotI2RlZmluZSBDU1NTdHlsZVNlbGVjdG9yX2gK
KyNpZm5kZWYgU3R5bGVSZXNvbHZlcl9oCisjZGVmaW5lIFN0eWxlUmVzb2x2ZXJfaAogCiAjaW5j
bHVkZSAiQ1NTUnVsZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgpAQCAtNTM4LDQgKzUz
OCw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIENT
U1N0eWxlU2VsZWN0b3JfaAorI2VuZGlmIC8vIFN0eWxlUmVzb2x2ZXJfaApJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
MSArMjcsMTEgQEAKICNpbmNsdWRlICJXZWJLaXRDU1NNYXRyaXguaCIKIAogI2luY2x1ZGUgIkNT
U1BhcnNlci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVk
ZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTE1
MjAxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgogI2luY2x1ZGUgIkNT
U1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJD
U1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUg
IkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCkBA
IC0xNDMsNiArMTQyLDcgQEAKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU2hh
ZG93VHJlZS5oIgogI2luY2x1ZGUgIlN0YXRpY0hhc2hTZXROb2RlTGlzdC5oIgorI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUg
IlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQXR0
ci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5o
IgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDbGFzc0xpc3QuaCIK
ICNpbmNsdWRlICJDbGllbnRSZWN0LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdExpc3QuaCIKQEAg
LTY0LDYgKzYzLDcgQEAKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCShyZXZpc2lvbiAxMTUyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgog
I2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgot
I2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0Lmgi
CiAjaW5jbHVkZSAiQ2hpbGROb2RlTGlzdC5oIgogI2luY2x1ZGUgIkNsYXNzTm9kZUxpc3QuaCIK
QEAgLTg5LDYgKzg4LDcgQEAKICNpbmNsdWRlICJTaGFkb3dUcmVlLmgiCiAjaW5jbHVkZSAiU3Rh
dGljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdG9yYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJTdHls
ZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIKICNpbmNsdWRlICJUZXh0Lmgi
CiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93
Um9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3Bw
CShyZXZpc2lvbiAxMTUyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTaGFkb3dSb290LmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAj
aW5jbHVkZSAiRE9NU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJOb2RlUmFyZURhdGEu
aCIKICNpbmNsdWRlICJTaGFkb3dUcmVlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dUcmVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93VHJlZS5jcHAJKHJldmlzaW9uIDExNTIw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dUcmVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNoYWRvd1Ry
ZWUuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDb250YWlu
ZXJOb2RlQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxl
bWVudC5oIgpAQCAtMzUsNiArMzQsNyBAQAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJT
aGFkb3dSb290LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxl
ZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQXR0
cmlidXRlLmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NT
U3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZVBvb2wuaCIKQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNl
dC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJv
cGVydHkuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTU3R5
bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNDUsNiArNDQsNyBAQAog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNs
dWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJodG1s
ZWRpdGluZy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAko
cmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2Vy
LmgiCiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
LSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jk
cy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC00
NSw2ICs0NCw3IEBACiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkNTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRFdmVudC5oIgpAQCAtODAsNiArNzksNyBAQAog
I2luY2x1ZGUgIlNwZWxsQ2hlY2tlci5oIgogI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNv
bW1hbmQuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVu
dC5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZ0hlbHBlci5oIgpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAi
Q1NTUnVsZS5oIgogI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVS
dWxlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNoaWxkTGlzdE11
dGF0aW9uU2NvcGUuaCIKQEAgLTU1LDYgKzU0LDcgQEAKICNpbmNsdWRlICJSYW5nZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlhNTE5TTmFtZXMuaCIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysg
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhY2hlZFBhZ2Uu
aCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKQEAg
LTM0LDYgKzMzLDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJOb2RlLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTERvY3VtZW50LmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw2IEBACiAjaW5j
bHVkZSAiSFRNTERvY3VtZW50LmgiCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0j
aW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCkBAIC03
NCw2ICs3Myw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNiBAQAogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0
cmlidXRlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNhY2hl
ZENTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCkBAIC00NSw2ICs0NCw3IEBACiAjaW5jbHVkZSAiU2Ny
aXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDEzICsyNSwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhU
TUxPcHRHcm91cEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhU
TUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRl
ICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgor
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTUyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
I2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIK
LSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0zOSw2
ICszOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1ZhbGlk
YXRpb25NZXNzYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1ZhbGlk
YXRpb25NZXNzYWdlLmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAK
ICNpbmNsdWRlICJWYWxpZGF0aW9uTWVzc2FnZS5oIgogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlO
YW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1
ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW5j
bHVkZSAiRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCkBAIC00NSw2ICs0NCw3IEBACiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU2hhZG93
VHJlZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lv
biAxMTUyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAi
Q1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NT
UHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAi
Q2FudmFzUGF0dGVybi5oIgpAQCAtNTksNiArNTgsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0
eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0TWV0cmlj
cy5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAkocmV2aXNpb24gMTE1MjAx
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAKICNpbmNsdWRlICJNZWRpYUNvbnRy
b2xFbGVtZW50cy5oIgogCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUg
IkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJET01Ub2tlbkxpc3QuaCIKICNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCkBAIC01Myw2ICs1Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBA
QAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1
ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5Lmgi
CiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC00OSw2ICs0OCw3IEBACiAjaW5jbHVkZSAiTm9k
ZS5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5o
IgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNp
bmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUnVs
ZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNoYXJhY3Rl
ckRhdGEuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCkBAIC04NSw2ICs4NCw3IEBACiAj
aW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNoYWRvd1RyZWUuaCIKICNpbmNsdWRl
ICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1
ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlhQYXRo
UmVzdWx0LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMTUyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2
LDYgQEAKICNpbmNsdWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNp
bmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAj
aW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGlj
eS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC00OSw2ICs0OCw3IEBACiAjaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgog
I2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9hZGVyLmNwcAkocmV2aXNpb24g
MTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
TGlua0xvYWRlci5oIgogCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKQEAgLTQzLDYgKzQyLDcgQEAKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJMaW5rUmVsQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gMTE1MjAx
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiQmVmb3JlVW5sb2FkRXZlbnQuaCIKICNpbmNsdWRl
ICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5o
IgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNp
bmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiQ3J5cHRvLmgiCkBAIC05MSw2ICs5MCw3IEBA
CiAjaW5jbHVkZSAiU3RvcmFnZUluZm8uaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgi
CiAjaW5jbHVkZSAiU3R5bGVNZWRpYS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJTdWRkZW5UZXJtaW5hdGlvbi5oIgogI2luY2x1ZGUgIldlYktpdFBvaW50LmgiCiAj
aW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiQVhPYmplY3RD
YWNoZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNT
U1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgpAQCAtNjYsNiArNjUs
NyBAQAogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAKICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMTE1MjAxKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyAr
MjMsNiBAQAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkJh
Y2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgIkJhc2U2NC5oIgotI2luY2x1ZGUgIkNTU1N0eWxl
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQu
aCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudC5oIgpAQCAtNjcsNiArNjYsNyBAQAogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVk
ZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNs
dWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiV2lkZ2V0LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9L
ZXlmcmFtZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAxMTUyMDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDExICszMSwxMSBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGUuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NT
U3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgogI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKHJldmlzaW9uIDEx
NTIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGhlbWVRdC5oIgogCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgog
I2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKQEAgLTU3LDYgKzU2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lUXRNb2JpbGUuaCIKICNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUaW1l
UmFuZ2VzLmgiCiAjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZVF0TW9iaWxlLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
CiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpZiBFTkFCTEUoUFJPR1JFU1Nf
VEFHKQogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJTdHls
ZVJlc29sdmVyLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDYgQEAKIAogI2luY2x1ZGUgIkNvbHVtbkluZm8uaCIKICNpbmNsdWRlICJD
U1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRF
dmVudFF1ZXVlLmgiCkBAIC05Miw2ICs5MSw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgor
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAxMTUyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNiBAQAogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2lu
Y2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTUyLDYgKzUxLDcgQEAK
ICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZGVv
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9u
IDExNTIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNo
ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2Vs
ZWN0b3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RXZlbnRR
dWV1ZS5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgpAQCAtNTgsNiArNTcsNyBAQAogI2lu
Y2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVk
ZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5j
bHVkZSA8bWF0aC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiAxMTUyMDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlNZW51TGlzdC5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgot
I2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNs
dWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNDQsNiArNDMsNyBAQAog
I2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPG1hdGguaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAKICNpbmNsdWRlICJBWE9iamVj
dENhY2hlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNocm9t
ZS5oIgogI2luY2x1ZGUgIkNvbnRlbnREYXRhLmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgpA
QCAtNjQsNiArNjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKIAotI2luY2x1
ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtMzgsNiAr
MzcsNyBAQAogI2luY2x1ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8uaCIKICNpbmNsdWRlICJSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAi
U3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShyZXZpc2lvbiAxMTUyMDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgogCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5k
bGVyLmgiCkBAIC00MCw2ICszOSw3IEBACiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1
ZGUgIlNsaWRlclRodW1iRWxlbWVudC5oIgogI2luY2x1ZGUgIlN0ZXBSYW5nZS5oIgorI2luY2x1
ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1c2lu
ZyBzdGQ6Om1pbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiAxMTUyMDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oIgogCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNp
bmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNDMsNiArNDIsNyBAQAog
I2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5j
bHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZp
c2lvbiAxMTUyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2ltcG9ydCAiQml0bWFwSW1h
Z2UuaCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCi0jaW1wb3J0ICJDU1NTdHlsZVNlbGVjdG9yLmgi
CiAjaW1wb3J0ICJDU1NWYWx1ZUxpc3QuaCIKICNpbXBvcnQgIkNTU1ZhbHVlS2V5d29yZHMuaCIK
ICNpbXBvcnQgIkRvY3VtZW50LmgiCkBAIC00NSw2ICs0NCw3IEBACiAjaW1wb3J0ICJSZW5kZXJW
aWV3LmgiCiAjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIlN0cmluZ1RydW5jYXRv
ci5oIgorI2ltcG9ydCAiU3R5bGVSZXNvbHZlci5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgog
I2ltcG9ydCAiVGhlbWVNYWMuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNw
cAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lU2FmYXJpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUg
IlJlbmRlclNsaWRlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTb2Z0
TGlua2luZy5oIgotI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIKKyNpbmNsdWRlICJTdHls
ZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkNvbnRlbnREYXRhLmgiCiAjaW5jbHVkZSAiQ3Vy
c29yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NT
dHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTV3JhcFNoYXBlcy5oIgogI2luY2x1ZGUgIkZv
bnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKQEAgLTM1LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlNoYWRvd0Rh
dGEuaCIKICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5o
IgogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVk
SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUdlbmVyYXRlZEltYWdlLmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgogCiAj
aW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2Vs
ZWN0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YS5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
NyArMjIsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlUmFyZU5vbklu
aGVyaXRlZERhdGEuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJDb250ZW50RGF0YS5oIgogI2luY2x1ZGUgIlJlbmRlckNvdW50ZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJTdHlsZS5oIgpAQCAtMzAsNiArMjksNyBAQAogI2luY2x1ZGUgIlN0eWxlRmlsdGVyRGF0
YS5oIgogI2luY2x1ZGUgIlN0eWxlVHJhbnNmb3JtRGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlSW1h
Z2UuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZVRleHQuY3BwCShyZXZpc2lvbiAxMTUyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgogCiAjaW5jbHVkZSAi
Q1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUg
IlJlbmRlckJsb2NrLmgiCkBAIC0zNyw2ICszNiw3IEBACiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4
dEJveC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJTVkdS
b290SW5saW5lQm94LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlZp
c2libGVQb3NpdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDEyICsyNSwxMiBAQAogI2luY2x1ZGUgIlNWR0NsaXBQYXRoRWxlbWVudC5oIgogCiAjaW5j
bHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAj
aW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2Vs
ZWN0b3IuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKQEAgLTUxLDYgKzUwLDcgQEAKICNpbmNsdWRlICJT
VkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U2NyaXB0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNs
dWRlICJYTUxOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTE1MjAxKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9w
ZXJ0eS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKQEAgLTQwLDYgKzM5LDcg
QEAKICNpbmNsdWRlICJTVkdGb250RmFjZVNyY0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdHbHlw
aEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTUy
MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5o
IgogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1BhdGguaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Lmgi
CkBAIC0zNSw2ICszNCw3IEBACiAjaW5jbHVkZSAiU1ZHU3RvcEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5oIgorI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDExNTIwMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDEyICsyNywxMiBAQAogI2luY2x1ZGUgIlNWR01hc2tFbGVtZW50LmgiCiAKICNpbmNsdWRlICJB
dHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNp
bmNsdWRlICJTVkdVbml0VHlwZXMuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNw
cAkocmV2aXNpb24gMTE1MjAxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1
dGUuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNTU1N0
eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgpAQCAtNDksNiArNDgsNyBAQAogI2luY2x1ZGUg
IlNWR1NNSUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR1N5bWJvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVk
ZSAiWE1MU2VyaWFsaXplci5oIgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDExNTIwMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDQtMjUgIEFsZXhpcyBNZW5hcmQgIDxhbGV4
aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIENTU1N0eWxlU2VsZWN0
b3IgZmlsZXMgdG8gU3R5bGVSZXNvbHZlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg0ODE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuYW1lIENTU1N0eWxlU2VsZWN0b3IgZmlsZXMgdG8gbWF0Y2gg
dGhlIG5ldyBjbGFzcyBuYW1lIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIFVwZGF0ZSB0aGUgaW5j
bHVkZXMgYWxsIG92ZXIgdGhlIGNvZGUgYmFzZSB0byB0aGUgbmV3IG5hbWUuCisKKyAgICAgICAg
KiBzcmMvQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5jcHA6CisKIDIwMTItMDQtMjUgIEdhdmluIFBldGVycyAgPGdhdmlucEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgTW92ZSBXZWJSZWZlcnJlclBvbGljeS5oIGZyb20gV2ViS2l0IHRvIFBs
YXRmb3JtCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvZmlsbFBvcHVwTWVu
dUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0
b2ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiAxMTUyMDEpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJBdXRvZmlsbFBvcHVwTWVudUNsaWVudC5o
IgogCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNDAsNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxJ
bnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV2ViQXV0b2ZpbGxDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJOb2RlLmgiCiAjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNp
b24gMTE1MjAxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiQXV0b2ZpbGxQb3B1
cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIkJhdHRlcnlDbGllbnRJbXBsLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNp
bmNsdWRlICJDb2xvci5oIgpAQCAtMTEyLDYgKzExMSw3IEBACiAjaW5jbHVkZSAiU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTcGVlY2hJbnB1dENsaWVudEltcGwuaCIKICNp
bmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmgiCisjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHRGaWVsZERlY29yYXRvckltcGwuaCIKICNpbmNsdWRl
ICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJUaW1lci5oIgpJbmRleDogU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDExNTIwMSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDQtMjUgIEFsZXhpcyBNZW5hcmQgIDxhbGV4
aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmVuYW1lIENTU1N0eWxlU2VsZWN0
b3IgZmlsZXMgdG8gU3R5bGVSZXNvbHZlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg0ODE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuYW1lIENTU1N0eWxlU2VsZWN0b3IgZmlsZXMgdG8gbWF0Y2gg
dGhlIG5ldyBjbGFzcyBuYW1lIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIFVwZGF0ZSB0aGUgaW5j
bHVkZXMgYWxsIG92ZXIgdGhlIGNvZGUgYmFzZSB0byB0aGUgbmV3IG5hbWUuCisKKyAgICAgICAg
KiBBcGkvcXdlYmVsZW1lbnQuY3BwOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1JlbmRlclRo
ZW1lUVN0eWxlLmNwcDoKKwogMjAxMi0wNC0yNCAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5h
cmRAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZXBsYWNlIG9jY3VyZW5jZXMgb2Ygc3R5bGUg
c2VsZWN0b3IgZnJvbSB2YXJpYWJsZXMgYW5kIG1ldGhvZHMgbmFtZXMgYnkgc3R5bGUgcmVzb2x2
ZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTUy
MDEpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiQ1NT
UnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZy
YWdtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01MSw2ICs1MCw3IEBACiAjaW5j
bHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUg
IlN0YXRpY05vZGVMaXN0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
InF3ZWJmcmFtZS5oIgogI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCiAjaWYgVVNFKEpTQykKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhl
bWVRU3R5bGUuY3BwCShyZXZpc2lvbiAxMTUyMDEpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCiAKICNpbmNsdWRlICJDU1NG
b250U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
Q1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9t
ZUNsaWVudC5oIgpAQCAtNTQsNiArNTMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgog
I2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCiAjaW5jbHVkZSAiU2xpZGVyVGh1bWJF
bGVtZW50LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlVzZXJBZ2Vu
dFN0eWxlU2hlZXRzLmgiCiAKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>