<?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>38854</bug_id>
          
          <creation_ts>2010-05-10 09:56:46 -0700</creation_ts>
          <short_desc>[chromium] Add WebKitScrollbar interface to allow Chromium code to reuse the scrollbar code.</short_desc>
          <delta_ts>2010-05-11 10:12:20 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="John Abd-El-Malek">jam</reporter>
          <assigned_to name="John Abd-El-Malek">jam</assigned_to>
          <cc>fishd</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>223366</commentid>
    <comment_count>0</comment_count>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2010-05-10 09:56:46 -0700</bug_when>
    <thetext>This allows us to reuse the scrollbar logic and theming from Pepper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223368</commentid>
    <comment_count>1</comment_count>
      <attachid>55563</attachid>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2010-05-10 09:58:15 -0700</bug_when>
    <thetext>Created attachment 55563
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223369</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-10 10:00:37 -0700</bug_when>
    <thetext>Attachment 55563 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebScrollbarImpl.cpp:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/WebScrollbarImpl.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebScrollbarImpl.cpp:50:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
WebKit/chromium/src/WebScrollbarImpl.cpp:54:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/src/WebScrollbarImpl.cpp:55:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/WebScrollbarImpl.cpp:88:  old_rect is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/chromium/src/WebScrollbarImpl.cpp:111:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/chromium/src/WebScrollbarImpl.cpp:154:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebKit/chromium/src/WebScrollbarImpl.cpp:154:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebKit/chromium/src/WebScrollbarImpl.cpp:167:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/chromium/src/WebScrollbarImpl.cpp:174:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebKit/chromium/src/WebScrollbarImpl.cpp:195:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 237 in 8 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>223383</commentid>
    <comment_count>3</comment_count>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2010-05-10 10:21:54 -0700</bug_when>
    <thetext>I&apos;ve fixed all the style issues except the &quot;Alphabetical sorting problem.&quot; one.  That seems like a bug in check-webkit-style.  I filed a bug https://bugs.webkit.org/show_bug.cgi?id=38855</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223385</commentid>
    <comment_count>4</comment_count>
      <attachid>55566</attachid>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2010-05-10 10:24:29 -0700</bug_when>
    <thetext>Created attachment 55566
Updated per check-webkit-style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223386</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-10 10:28:00 -0700</bug_when>
    <thetext>Attachment 55566 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebScrollbarImpl.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 8 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>223390</commentid>
    <comment_count>6</comment_count>
      <attachid>55566</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-05-10 10:40:49 -0700</bug_when>
    <thetext>Comment on attachment 55566
Updated per check-webkit-style

WebKit/chromium/public/WebScrollbar.h:54
 +      WEBKIT_API static WebScrollbar* create(WebScrollbarClient*, bool vertical);
nit: please create an enum for the orientation.  that way at the
call site, there won&apos;t just be a mysterious true or false.

class WebScrollbar {
public:
    enum Orientation {
        Vertical,
        Horizontal
    };

WebKit/chromium/public/WebScrollbarClient.h:44
 +      virtual void getTickmarks(WebVector&lt;WebRect&gt;*) const = 0;
nit: add a WebScrollbar pointer as the first argument for consistency?

WebKit/chromium/public/WebScrollbar.h:74
 +      virtual void scroll(bool forward, WebScrollGranularity, float multiplier) = 0;
replace &quot;forward&quot; with a WebScrollbar::ScrollDirection enum:

  enum ScrollDirection {
      ScrollUp,
      ScrollDown,
      ...

WebKit/chromium/public/WebScrollbar.h:44
 +  enum WebScrollGranularity {
move this into the WebScrollbar class as:

  enum ScrollGranularity {
      ScrollByLine,
      ...

WebKit/chromium/public/WebScrollbar.h:59
 +      virtual int getThickness() const = 0;
nit: webkit style has attribute getters named without the &quot;get&quot; prefix,
so this should just be &quot;thickness()&quot;

however, perhaps thickness should really just be a static function
named defaultThickness().  you can implement that by using
ScrollbarTheme::nativeTheme()-&gt;scrollbarThickness().

WebKit/chromium/public/WebScrollbar.h:62
 +      virtual int getPosition() const = 0;
nit: getPosition -&gt; position

WebKit/chromium/public/WebScrollbar.h:68
 +      virtual void setLocation(const WebRect&amp;) = 0;
nit: i would group this with thickness since they are both about geometry.

WebKit/chromium/public/WebScrollbar.h:65
 +      virtual void setPosition(int position) = 0;
position and location sound so similar.  how about using the term
&quot;value&quot; instead of position?  then you can have the following:

  int value() const;
  setValue(int);

  int maxValue() const;
  setMaxValue(int);

where setMaxValue replaces setTotalSize.

WebKit/chromium/src/WebScrollbarImpl.cpp:136
 +      case WebInputEvent::MouseDown: {
nit: a helper function per case would be nice here.

implementation looks good otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223418</commentid>
    <comment_count>7</comment_count>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2010-05-10 11:22:49 -0700</bug_when>
    <thetext>Thanks, all done except:

(In reply to comment #6)
&gt; (From update of attachment 55566 [details])
&gt; WebKit/chromium/public/WebScrollbar.h:54
&gt;  +      WEBKIT_API static WebScrollbar* create(WebScrollbarClient*, bool vertical);
&gt; nit: please create an enum for the orientation.  that way at the
&gt; call site, there won&apos;t just be a mysterious true or false.
&gt; 
&gt; class WebScrollbar {
&gt; public:
&gt;     enum Orientation {
&gt;         Vertical,
&gt;         Horizontal
&gt;     };
&gt; 
&gt; WebKit/chromium/public/WebScrollbarClient.h:44
&gt;  +      virtual void getTickmarks(WebVector&lt;WebRect&gt;*) const = 0;
&gt; nit: add a WebScrollbar pointer as the first argument for consistency?
&gt; 
&gt; WebKit/chromium/public/WebScrollbar.h:74
&gt;  +      virtual void scroll(bool forward, WebScrollGranularity, float multiplier) = 0;
&gt; replace &quot;forward&quot; with a WebScrollbar::ScrollDirection enum:
&gt; 
&gt;   enum ScrollDirection {
&gt;       ScrollUp,
&gt;       ScrollDown,
&gt;       ...
&gt; 

I made it have an enum for forward/backward.  This makes the Chromium implementation easier since pepper_scrollbar_widget doesn&apos;t know if it&apos;s vertical/horizontal scrollbar after construction.

&gt; WebKit/chromium/public/WebScrollbar.h:44
&gt;  +  enum WebScrollGranularity {
&gt; move this into the WebScrollbar class as:
&gt; 
&gt;   enum ScrollGranularity {
&gt;       ScrollByLine,
&gt;       ...
&gt; 
&gt; WebKit/chromium/public/WebScrollbar.h:59
&gt;  +      virtual int getThickness() const = 0;
&gt; nit: webkit style has attribute getters named without the &quot;get&quot; prefix,
&gt; so this should just be &quot;thickness()&quot;
&gt; 
&gt; however, perhaps thickness should really just be a static function
&gt; named defaultThickness().  you can implement that by using
&gt; ScrollbarTheme::nativeTheme()-&gt;scrollbarThickness().
&gt; 
&gt; WebKit/chromium/public/WebScrollbar.h:62
&gt;  +      virtual int getPosition() const = 0;
&gt; nit: getPosition -&gt; position
&gt; 
&gt; WebKit/chromium/public/WebScrollbar.h:68
&gt;  +      virtual void setLocation(const WebRect&amp;) = 0;
&gt; nit: i would group this with thickness since they are both about geometry.
&gt; 
&gt; WebKit/chromium/public/WebScrollbar.h:65
&gt;  +      virtual void setPosition(int position) = 0;
&gt; position and location sound so similar.  how about using the term
&gt; &quot;value&quot; instead of position?  then you can have the following:
&gt; 
&gt;   int value() const;
&gt;   setValue(int);
&gt; 
&gt;   int maxValue() const;
&gt;   setMaxValue(int);
&gt; 
&gt; where setMaxValue replaces setTotalSize.


maxValue is different from totalSize.  i.e. total size is the length of the document, while maxValue is the highest integer that value() could be (which is totalSize - scrollbar_length).

&gt; 
&gt; WebKit/chromium/src/WebScrollbarImpl.cpp:136
&gt;  +      case WebInputEvent::MouseDown: {
&gt; nit: a helper function per case would be nice here.
&gt; 
&gt; implementation looks good otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223437</commentid>
    <comment_count>8</comment_count>
      <attachid>55587</attachid>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2010-05-10 12:09:05 -0700</bug_when>
    <thetext>Created attachment 55587
updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223439</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-10 12:12:00 -0700</bug_when>
    <thetext>Attachment 55587 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebScrollbarImpl.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebScrollbarImpl.cpp:107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 8 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>223465</commentid>
    <comment_count>10</comment_count>
      <attachid>55593</attachid>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2010-05-10 12:51:17 -0700</bug_when>
    <thetext>Created attachment 55593
fix spacing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223471</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-10 12:56:46 -0700</bug_when>
    <thetext>Attachment 55593 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebScrollbarImpl.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 8 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>223571</commentid>
    <comment_count>12</comment_count>
      <attachid>55593</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-05-10 16:20:10 -0700</bug_when>
    <thetext>Comment on attachment 55593
fix spacing

WebKit/chromium/ChangeLog:16
 +          (WebKit::WebScrollbarImpl::getThickness):
nit: please re-create this ChangeLog given the API changes

WebKit/chromium/public/WebScrollbar.h:56
 +  // These values must match WebCore::ScrollGranularity values
nit: indentation

WebKit/chromium/public/WebScrollbar.h:62
 +  };
nit: indentation

WebKit/chromium/public/WebScrollbar.h:45
 +      // These values must match WebCore::ScrollbarOrientation values
nit: this comment could become stale.  if the WebCore enum changes,
we might end up writing a translation layer for the enums instead of
changing our API.  in general, i just avoid mentioning WebCore
implementation details in the WebKit API headers.

WebKit/chromium/public/WebScrollbar.h:70
 +      static int defaultThickness();
nit: add WEBKIT_API

WebKit/chromium/public/WebScrollbar.h:82
 +      virtual void setTotalSize(int size) = 0;
it would be helpful to explain what this means.  it is not so obvious
from reading these comments how the range of values and the total size
fit together.  ascii art might help.

WebKit/chromium/public/WebScrollbarClient.h:42
 +      virtual void positionChanged(WebScrollbar*) = 0;
nit: valueChanged

WebKit/chromium/src/AssertMatchingEnums.cpp:293
 +  #endif
nit: add a set for orientation?

WebKit/chromium/src/WebScrollbarImpl.cpp:81
 +        m_scrollbar-&gt;invalidate();
nit: indentation

WebKit/chromium/src/WebScrollbarImpl.cpp:153
 +          WebMouseEvent mousedown = *static_cast&lt;const WebMouseEvent*&gt;(&amp;event);
indentation

WebKit/chromium/src/WebScrollbarImpl.cpp:169
 +      }
indentation

WebKit/chromium/src/WebScrollbarImpl.cpp:184
 +      }
indentation

WebKit/chromium/src/WebScrollbarImpl.cpp:191
 +              return m_scrollbar-&gt;mouseExited();
lots of indentation issues in this file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223594</commentid>
    <comment_count>13</comment_count>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2010-05-10 16:56:21 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 55593 [details])
&gt; WebKit/chromium/ChangeLog:16
&gt;  +          (WebKit::WebScrollbarImpl::getThickness):
&gt; nit: please re-create this ChangeLog given the API changes
&gt; 
&gt; WebKit/chromium/public/WebScrollbar.h:56
&gt;  +  // These values must match WebCore::ScrollGranularity values
&gt; nit: indentation
&gt; 
&gt; WebKit/chromium/public/WebScrollbar.h:62
&gt;  +  };
&gt; nit: indentation
&gt; 
&gt; WebKit/chromium/public/WebScrollbar.h:45
&gt;  +      // These values must match WebCore::ScrollbarOrientation values
&gt; nit: this comment could become stale.  if the WebCore enum changes,
&gt; we might end up writing a translation layer for the enums instead of
&gt; changing our API.  in general, i just avoid mentioning WebCore
&gt; implementation details in the WebKit API headers.

ah I see, sure done.  I was just copying other examples.

&gt; 
&gt; WebKit/chromium/public/WebScrollbar.h:70
&gt;  +      static int defaultThickness();
&gt; nit: add WEBKIT_API
&gt; 
&gt; WebKit/chromium/public/WebScrollbar.h:82
&gt;  +      virtual void setTotalSize(int size) = 0;
&gt; it would be helpful to explain what this means.  it is not so obvious
&gt; from reading these comments how the range of values and the total size
&gt; fit together.  ascii art might help.

added an example and expanded the comment

&gt; 
&gt; WebKit/chromium/public/WebScrollbarClient.h:42
&gt;  +      virtual void positionChanged(WebScrollbar*) = 0;
&gt; nit: valueChanged
&gt; 
&gt; WebKit/chromium/src/AssertMatchingEnums.cpp:293
&gt;  +  #endif
&gt; nit: add a set for orientation?

I already did?

I&apos;m not sure we need to do that.  The WebCore object API only sets it on construction.

&gt; 
&gt; WebKit/chromium/src/WebScrollbarImpl.cpp:81
&gt;  +        m_scrollbar-&gt;invalidate();
&gt; nit: indentation
&gt; 
&gt; WebKit/chromium/src/WebScrollbarImpl.cpp:153
&gt;  +          WebMouseEvent mousedown = *static_cast&lt;const WebMouseEvent*&gt;(&amp;event);
&gt; indentation
&gt; 
&gt; WebKit/chromium/src/WebScrollbarImpl.cpp:169
&gt;  +      }
&gt; indentation
&gt; 
&gt; WebKit/chromium/src/WebScrollbarImpl.cpp:184
&gt;  +      }
&gt; indentation
&gt; 
&gt; WebKit/chromium/src/WebScrollbarImpl.cpp:191
&gt;  +              return m_scrollbar-&gt;mouseExited();
&gt; lots of indentation issues in this file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223603</commentid>
    <comment_count>14</comment_count>
      <attachid>55624</attachid>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2010-05-10 17:02:01 -0700</bug_when>
    <thetext>Created attachment 55624
update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223604</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-10 17:04:34 -0700</bug_when>
    <thetext>Attachment 55624 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebScrollbarImpl.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 8 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>223605</commentid>
    <comment_count>16</comment_count>
      <attachid>55624</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-05-10 17:07:05 -0700</bug_when>
    <thetext>Comment on attachment 55624
update

r=me w/ the setTotalSize -&gt; setDocumentSize change that we discussed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223608</commentid>
    <comment_count>17</comment_count>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2010-05-10 17:10:50 -0700</bug_when>
    <thetext>Committed r59110</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223989</commentid>
    <comment_count>18</comment_count>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2010-05-11 10:12:20 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Committed r59110

Looks like the gyp changes didn&apos;t get checked in with this. I committed them in rr59156</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55563</attachid>
            <date>2010-05-10 09:58:15 -0700</date>
            <delta_ts>2010-05-10 10:24:29 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>theme3.txt</filename>
            <type>text/plain</type>
            <size>26800</size>
            <attacher name="John Abd-El-Malek">jam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTkwODIpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTAtMDUtMTAgIEpvaG4g
QWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBXZWJLaXRTY3JvbGxiYXIg
aW50ZXJmYWNlIHRvIGFsbG93IENocm9taXVtIGNvZGUgdG8gcmV1c2UgdGhlIHNjcm9sbGJhciBj
b2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg4
NTQKKworICAgICAgICAqIHB1YmxpYy9XZWJTY3JvbGxiYXIuaDogQWRkZWQuCisgICAgICAgICog
cHVibGljL1dlYlNjcm9sbGJhckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2Vi
VGhlbWVFbmdpbmUuaDoKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHA6Cisg
ICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViU2Nyb2xsYmFyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJ
bXBsOjpXZWJTY3JvbGxiYXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1w
bDo6fldlYlNjcm9sbGJhckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBs
OjpnZXRUaGlja25lc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpnZXRQ
b3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0TG9jYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRUb3RhbFNpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
Y3JvbGxiYXJJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6
OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjp2
YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Omlz
QWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsYmFyQ29y
bmVyUHJlc2VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OmdldFRpY2tt
YXJrcyk6CisgICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNj
cm9sbFZpZXdXaXRoS2V5Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bWFw
S2V5Q29kZUZvclNjcm9sbCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAt
MDUtMTAgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNj
cm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xs
YmFyLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJh
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTY3JvbGxiYXJfaAor
I2RlZmluZSBXZWJTY3JvbGxiYXJfaAorCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisjaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnB1dEV2
ZW50OworY2xhc3MgV2ViU2Nyb2xsYmFyQ2xpZW50Oworc3RydWN0IFdlYlJlY3Q7CisKKy8vIFRo
ZXNlIHZhbHVlcyBtdXN0IG1hdGNoIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5IHZhbHVlcwor
ZW51bSBXZWJTY3JvbGxHcmFudWxhcml0eSB7CisgICAgV2ViU2Nyb2xsR3JhbnVsYXJpdHlTY3Jv
bGxCeUxpbmUsCisgICAgV2ViU2Nyb2xsR3JhbnVsYXJpdHlTY3JvbGxCeVBhZ2UsCisgICAgV2Vi
U2Nyb2xsR3JhbnVsYXJpdHlTY3JvbGxCeURvY3VtZW50LAorICAgIFdlYlNjcm9sbEdyYW51bGFy
aXR5U2Nyb2xsQnlQaXhlbCwKK307CisKK2NsYXNzIFdlYlNjcm9sbGJhciB7CitwdWJsaWM6Cisg
ICAgLy8gQ3JlYXRlcyBhIFdlYlNjcm9sbGJhci4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJT
Y3JvbGxiYXIqIGNyZWF0ZShXZWJTY3JvbGxiYXJDbGllbnQqLCBib29sIHZlcnRpY2FsKTsKKwor
ICAgIHZpcnR1YWwgfldlYlNjcm9sbGJhcigpIHt9CisKKyAgICAvLyBHZXRzIHRoZSB0aGlja25l
c3Mgb2YgdGhlIHNjcm9sbGJhciBpbiBwaXhlbHMuCisgICAgdmlydHVhbCBpbnQgZ2V0VGhpY2tu
ZXNzKCkgY29uc3QgPSAwOworCisgICAgLy8gR2V0cyB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAg
ICB2aXJ0dWFsIGludCBnZXRQb3NpdGlvbigpIGNvbnN0ID0gMDsKKworICAgIC8vIFNldHMgdGhl
IGN1cnJlbnQgcG9zaXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGludCBwb3Np
dGlvbikgPSAwOworCisgICAgLy8gU2V0cyB0aGUgcmVjdGFuZ2xlIG9mIHRoZSBzY3JvbGxiYXIu
CisgICAgdmlydHVhbCB2b2lkIHNldExvY2F0aW9uKGNvbnN0IFdlYlJlY3QmKSA9IDA7CisKKyAg
ICAvLyBTZXRzIHRoZSBzaXplIG9mIHRoZSBzY3JvbGxiYXIgcmVnaW9uLgorICAgIHZpcnR1YWwg
dm9pZCBzZXRUb3RhbFNpemUoaW50IHNpemUpID0gMDsKKworICAgIC8vIFNjcm9sbCBiYWNrIG9y
IGZvcndhcmQgd2l0aCB0aGUgZ2l2ZW4gZ3JhbnVsYXJpdHkuCisgICAgdmlydHVhbCB2b2lkIHNj
cm9sbChib29sIGZvcndhcmQsIFdlYlNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
KSA9IDA7CisKKyAgICAvLyBQYWludCB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLgorICAgIHZpcnR1YWwg
dm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgPSAwOworCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmZiB0aGUgZ2l2ZW4gZXZlbnQgd2FzIHVzZWQuCisgICAgdmlydHVhbCBib29s
IGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViU2Nyb2xsYmFyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJTY3JvbGxiYXJDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYlNjcm9sbGJhckNsaWVudF9oCisjZGVmaW5lIFdlYlNjcm9sbGJhckNsaWVudF9o
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTY3JvbGxiYXI7CitzdHJ1Y3QgV2Vi
UmVjdDsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKK2NsYXNzIFdl
YlNjcm9sbGJhckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uQ2hh
bmdlZChXZWJTY3JvbGxiYXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFdlYlNjcm9sbGJhciosIGNvbnN0IFdlYlJlY3QmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGdldFRpY2ttYXJrcyhXZWJWZWN0b3I8V2ViUmVjdD4qKSBjb25zdCA9IDA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhckNsaWVudC5oCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlRoZW1lRW5naW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJUaGVtZUVuZ2luZS5oCShyZXZpc2lvbiA1OTA4MSkKKysrIFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzYs
NDQgKzc2LDYgQEAgcHVibGljOgogICAgICAgICBXZWJDYW52YXMqLCBpbnQgcGFydCwgaW50IHN0
YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAogICAgICAgICBjb25zdCBXZWJSZWN0JikgPSAwOwogI2Vu
ZGlmCi0KLSAgICAvLyBXZWJUaGVtZUVuZ2luZSB3YXMgb3JpZ2luYWxseSB1c2VkIG9ubHkgb24g
V2luZG93cywgaGVuY2UgaXRzIHBsYXRmb3JtLQotICAgIC8vIHNwZWNpZmljIHBhcmFtZXRlcnMu
ICBUaGlzIGlzIG5ldyBjcm9zcy1wbGF0Zm9ybSB0aGVtaW5nIEFQSSwgYW5kIHdlJ2xsCi0gICAg
Ly8gc3dpdGNoIHRoZSBjb2RlIHRvIHVzaW5nIHRoZXNlIEFQSXMgb24gYWxsIHBsYXRmb3JtcyBp
bnN0ZWFkLgotICAgIGVudW0gUGFydCB7Ci0gICAgICAgIFBhcnRTY3JvbGxiYXJEb3duQXJyb3cs
Ci0gICAgICAgIFBhcnRTY3JvbGxiYXJMZWZ0QXJyb3csCi0gICAgICAgIFBhcnRTY3JvbGxiYXJS
aWdodEFycm93LAotICAgICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJvdywKLSAgICAgICAgUGFydFNj
cm9sbGJhckhvcml6b250YWxUaHVtYiwKLSAgICAgICAgUGFydFNjcm9sbGJhclZlcnRpY2FsVGh1
bWIsCi0gICAgICAgIFBhcnRTY3JvbGxiYXJIb3JpenRvbmFsVHJhY2ssCi0gICAgICAgIFBhcnRT
Y3JvbGxiYXJWZXJ0aWNhbFRyYWNrLAotICAgIH07Ci0KLSAgICBlbnVtIFN0YXRlIHsKLSAgICAg
ICAgU3RhdGVEaXNhYmxlZCwKLSAgICAgICAgU3RhdGVIb3QsCi0gICAgICAgIFN0YXRlSG92ZXIs
Ci0gICAgICAgIFN0YXRlTm9ybWFsLAotICAgICAgICBTdGF0ZVByZXNzZWQsCi0gICAgfTsKLQot
ICAgIHN0cnVjdCBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHsKLSAgICAgICAgaW50IGFsaWdu
WDsKLSAgICAgICAgaW50IGFsaWduWTsKLSAgICB9OwotCi0gICAgdW5pb24gRXh0cmFQYXJhbXMg
ewotICAgICAgICBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHNjcm9sbGJhclRyYWNrOwotICAg
IH07Ci0KLSAgICAvLyBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiB0aGVtZSBjb21wb25lbnQu
ICBGb3IgdmFyaWFibGUgc2l6ZWQgaXRlbXMKLSAgICAvLyBsaWtlIHZlcnRpY2FsIHNjcm9sbGJh
ciB0cmFja3MsIHRoZSB3aWR0aCB3aWxsIGJlIHRoZSByZXF1aXJlZCB3aWR0aCBvZgotICAgIC8v
IHRoZSB0cmFjayB3aGlsZSB0aGUgaGVpZ2h0IHdpbGwgYmUgdGhlIG1pbmltdW0gaGVpZ2h0Lgot
ICAgIHZpcnR1YWwgdm9pZCBnZXRTaXplKFBhcnQsIFdlYlNpemUqKSB7fQotICAgIHZpcnR1YWwg
dm9pZCBwYWludCgKLSAgICAgICAgV2ViQ2FudmFzKiwgUGFydCwgU3RhdGUsIGNvbnN0IFdlYlJl
Y3QmLCBjb25zdCBFeHRyYVBhcmFtcyYpIHt9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAkocmV2
aXNpb24gNTkwODEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiV2ViSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJXZWJOb3Rp
ZmljYXRpb25QcmVzZW50ZXIuaCIKKyNpbmNsdWRlICJXZWJTY3JvbGxiYXIuaCIKICNpbmNsdWRl
ICJXZWJUZXh0QWZmaW5pdHkuaCIKICNpbmNsdWRlICJXZWJUZXh0Q2FzZVNlbnNpdGl2aXR5Lmgi
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTI5MSw2ICsyOTIsMTEgQEAgQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb3RpZmljYQogQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25EZW5pZWQsIE5vdGlm
aWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbkRlbmllZCk7CiAjZW5kaWYKIAorQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxHcmFudWxhcml0eVNjcm9sbEJ5TGluZSwgU2Ny
b2xsQnlMaW5lKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViU2Nyb2xsR3JhbnVs
YXJpdHlTY3JvbGxCeVBhZ2UsIFNjcm9sbEJ5UGFnZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYlNjcm9sbEdyYW51bGFyaXR5U2Nyb2xsQnlEb2N1bWVudCwgU2Nyb2xsQnlEb2N1
bWVudCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNjcm9sbEdyYW51bGFyaXR5
U2Nyb2xsQnlQaXhlbCwgU2Nyb2xsQnlQaXhlbCk7CisKIENPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViVGV4dEFmZmluaXR5VXBzdHJlYW0sIFVQU1RSRUFNKTsKIENPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViVGV4dEFmZmluaXR5RG93bnN0cmVhbSwgRE9XTlNUUkVBTSk7CiAK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjU5IEBACisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQ0KKyAqIG1ldDoNCisgKg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUNCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyDQorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAqIGRpc3RyaWJ1dGlvbi4NCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
DQorICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20NCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
DQorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SDQorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQorDQorI2luY2x1
ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRlICJXZWJTY3JvbGxiYXJJbXBsLmgiDQorDQorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIg0KKyNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiDQorI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCINCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiDQor
I2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiDQorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiDQor
I2luY2x1ZGUgIldlYkNhbnZhcy5oIg0KKyNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiDQorI2lu
Y2x1ZGUgIldlYklucHV0RXZlbnRDb252ZXJzaW9uLmgiDQorI2luY2x1ZGUgIldlYlJlY3QuaCIN
CisjaW5jbHVkZSAiV2ViU2Nyb2xsYmFyQ2xpZW50LmgiDQorI2luY2x1ZGUgIldlYlZlY3Rvci5o
Ig0KKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIg0KKw0KK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
Ow0KKw0KK3VzaW5nIHN0ZDo6bWF4Ow0KKw0KK25hbWVzcGFjZSBXZWJLaXQgew0KKw0KK1dlYlNj
cm9sbGJhciogV2ViU2Nyb2xsYmFyOjpjcmVhdGUoV2ViU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQs
IGJvb2wgdmVydGljYWwpIHsNCisgIHJldHVybiBuZXcgV2ViU2Nyb2xsYmFySW1wbChjbGllbnQs
IHZlcnRpY2FsKTsNCit9DQorDQorV2ViU2Nyb2xsYmFySW1wbDo6V2ViU2Nyb2xsYmFySW1wbChX
ZWJTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgYm9vbCB2ZXJ0aWNhbCkNCisgICAgOiBtX2NsaWVu
dChjbGllbnQpDQorew0KKyAgICBtX3Njcm9sbGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZl
U2Nyb2xsYmFyKA0KKyAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyQ2xpZW50Kj4odGhpcyks
DQorICAgICAgICB2ZXJ0aWNhbCA/IFZlcnRpY2FsU2Nyb2xsYmFyIDogSG9yaXpvbnRhbFNjcm9s
bGJhciwNCisgICAgICAgIFJlZ3VsYXJTY3JvbGxiYXIpOw0KK30NCisNCitXZWJTY3JvbGxiYXJJ
bXBsOjp+V2ViU2Nyb2xsYmFySW1wbCgpDQorew0KK30NCisNCitpbnQgV2ViU2Nyb2xsYmFySW1w
bDo6Z2V0VGhpY2tuZXNzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtX3Njcm9sbGJhci0+dGhl
bWUoKS0+c2Nyb2xsYmFyVGhpY2tuZXNzKCk7DQorfQ0KKw0KK2ludCBXZWJTY3JvbGxiYXJJbXBs
OjpnZXRQb3NpdGlvbigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbV9zY3JvbGxiYXItPnZhbHVl
KCk7DQorfQ0KKw0KK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0UG9zaXRpb24oaW50IHBvc2l0
aW9uKQ0KK3sNCisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBvc2l0aW9uKTsNCit9DQorDQor
dm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRMb2NhdGlvbihjb25zdCBXZWJSZWN0JiByZWN0KQ0K
K3sNCisgICAgV2ViQ29yZTo6SW50UmVjdCBvbGRfcmVjdCA9IG1fc2Nyb2xsYmFyLT5mcmFtZVJl
Y3QoKTsNCisgICAgbV9zY3JvbGxiYXItPnNldEZyYW1lUmVjdChyZWN0KTsNCisgICAgaWYgKFdl
YlJlY3Qob2xkX3JlY3QpICE9IHJlY3QpDQorICAgICAgbV9zY3JvbGxiYXItPmludmFsaWRhdGUo
KTsNCisNCisgICAgaW50IGxlbmd0aCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIgPyBtX3Njcm9sbGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xsYmFyLT5o
ZWlnaHQoKTsNCisgICAgaW50IHBhZ2VTdGVwID0gbWF4KG1heDxpbnQ+KGxlbmd0aCAqIFNjcm9s
bGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGxlbmd0aCAtIFNjcm9sbGJhcjo6
bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwgMSk7DQorICAgIG1fc2Nyb2xsYmFyLT5zZXRTdGVw
cyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsNCisgICAgbV9zY3Jv
bGxiYXItPnNldFByb3BvcnRpb24obGVuZ3RoLCBtX3Njcm9sbGJhci0+dG90YWxTaXplKCkpOw0K
K30NCisNCit2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFRvdGFsU2l6ZShpbnQgc2l6ZSkNCit7
DQorICAgIGludCBsZW5ndGggPSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gbV9zY3JvbGxiYXItPndpZHRoKCkgOiBtX3Njcm9sbGJhci0+aGVpZ2h0
KCk7DQorICAgIG1fc2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGxlbmd0aCwgc2l6ZSk7DQorfQ0K
Kw0KK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKGJvb2wgZm9yd2FyZCwgV2ViU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpDQorew0KKyAgICBTY3Jv
bGxEaXJlY3Rpb24gZGlyOworICAgIGJvb2wgaG9yaXpvbnRhbCA9IG1fc2Nyb2xsYmFyLT5vcmll
bnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7CisgICAgaWYgKGZvcndhcmQpIHsKKyAg
ICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93bjsKKyAgICB9
IGVsc2UgeworICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVw
OworICAgIH0NCisgICAgbV9zY3JvbGxiYXItPnNjcm9sbChkaXIsIHN0YXRpY19jYXN0PFNjcm9s
bEdyYW51bGFyaXR5PihncmFudWxhcml0eSksIG11bHRpcGxpZXIpOw0KK30NCisNCit2b2lkIFdl
YlNjcm9sbGJhckltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiBy
ZWN0KQ0KK3sNCisjaWYgV0VCS0lUX1VTSU5HX0NHDQorICAgIEdyYXBoaWNzQ29udGV4dCBnYyhj
YW52YXMpOw0KKyNlbGlmIFdFQktJVF9VU0lOR19TS0lBDQorICAgIFBsYXRmb3JtQ29udGV4dFNr
aWEgY29udGV4dChjYW52YXMpOw0KKw0KKyAgICAvLyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBp
cyBhY3R1YWxseSBhIHBvaW50ZXIgdG8gUGxhdGZvcm1Db250ZXh0U2tpYQ0KKyAgICBHcmFwaGlj
c0NvbnRleHQgZ2MocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KCZj
b250ZXh0KSk7DQorI2Vsc2UNCisgICAgbm90SW1wbGVtZW50ZWQoKTsNCisjZW5kaWYNCisNCisg
ICAgbV9zY3JvbGxiYXItPnBhaW50KCZnYywgcmVjdCk7DQorfQ0KKw0KK2Jvb2wgV2ViU2Nyb2xs
YmFySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkNCit7
DQorICAgIHN3aXRjaCAoZXZlbnQudHlwZSkgew0KKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1v
dXNlRG93bjogew0KKyAgICAgICAgV2ViTW91c2VFdmVudCBtb3VzZWRvd24gPSAqc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZldmVudCk7DQorICAgICAgICBpZiAobV9zY3JvbGxi
YXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1vdXNlZG93bi54LCBtb3VzZWRvd24ueSkpIHsNCisg
ICAgICAgICAgICBtb3VzZWRvd24ueCAtPSBtX3Njcm9sbGJhci0+eCgpOw0KKyAgICAgICAgICAg
IG1vdXNlZG93bi55IC09IG1fc2Nyb2xsYmFyLT55KCk7DQorICAgICAgICAgICAgbV9zY3JvbGxi
YXItPm1vdXNlRG93bihQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1fc2Nyb2xsYmFyLmdldCgp
LCBtb3VzZWRvd24pKTsNCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisg
ICAgICAgIGJyZWFrOw0KKyAgICB9DQorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VVcDoN
CisgICAgICAgIGlmIChtX3Njcm9sbGJhci0+cHJlc3NlZFBhcnQoKSAhPSBOb1BhcnQpIHsNCisg
ICAgICAgICAgICBtX3Njcm9sbGJhci0+bW91c2VVcCgpOw0KKyAgICAgICAgICAgIHJldHVybiB0
cnVlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgV2ViSW5wdXRFdmVu
dDo6TW91c2VNb3ZlOiB7DQorICAgICAgICBXZWJNb3VzZUV2ZW50IG1vdXNlbW92ZSA9ICpzdGF0
aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmV2ZW50KTsNCisgICAgICAgIGlmIChtX3Nj
cm9sbGJhci0+ZnJhbWVSZWN0KCkuY29udGFpbnMobW91c2Vtb3ZlLngsIG1vdXNlbW92ZS55KSB8
fA0KKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpICE9IE5vUGFydCkgew0K
KyAgICAgICAgICAgIG1vdXNlbW92ZS54IC09IG1fc2Nyb2xsYmFyLT54KCk7DQorICAgICAgICAg
ICAgbW91c2Vtb3ZlLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsNCisgICAgICAgICAgICByZXR1cm4g
bV9zY3JvbGxiYXItPm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihtX3Njcm9s
bGJhci5nZXQoKSwgbW91c2Vtb3ZlKSk7DQorICAgICAgICB9IGVsc2UgaWYgKG1fc2Nyb2xsYmFy
LT5ob3ZlcmVkUGFydCgpICE9IE5vUGFydCkgew0KKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5t
b3VzZUV4aXRlZCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisgICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZUxlYXZlOg0KKyAgICAgICAgaWYgKG1fc2Nyb2xsYmFy
LT5ob3ZlcmVkUGFydCgpICE9IE5vUGFydCkgew0KKyAgICAgICAgICAgIHJldHVybiBtX3Njcm9s
bGJhci0+bW91c2VFeGl0ZWQoKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICBj
YXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hlZWw6IHsNCisgICAgICAgIC8vIFNhbWUgbG9naWMg
YXMgaW4gU2Nyb2xsdmlldy5jcHAuICBJZiB3ZSBjYW4gbW92ZSBhdCBhbGwsIHdlJ2xsIGFjY2Vw
dCB0aGUgZXZlbnQuDQorICAgICAgICBXZWJNb3VzZVdoZWVsRXZlbnQgbW91c2V3aGVlbCA9ICpz
dGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZVdoZWVsRXZlbnQqPigmZXZlbnQpOw0KKyAgICAgICAg
aW50IG1heFNjcm9sbERlbHRhID0gbV9zY3JvbGxiYXItPm1heGltdW0oKSAtIG1fc2Nyb2xsYmFy
LT52YWx1ZSgpOw0KKyAgICAgICAgZmxvYXQgZGVsdGEgPSBtX3Njcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbW91c2V3aGVlbC5kZWx0YVggOiBtb3VzZXdo
ZWVsLmRlbHRhWTsNCisgICAgICAgIGlmIChkZWx0YSA8IDAgJiYgbWF4U2Nyb2xsRGVsdGEgPiAw
IHx8DQorICAgICAgICAgICAgZGVsdGEgPiAwICYmIG1fc2Nyb2xsYmFyLT52YWx1ZSgpID4gMCkg
ew0KKyAgICAgICAgICAgIGlmIChtb3VzZXdoZWVsLnNjcm9sbEJ5UGFnZSkgew0KKyAgICAgICAg
ICAgICAgICBBU1NFUlQobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3Jv
bGxiYXIpOw0KKyAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGEgPCAwOw0KKyAg
ICAgICAgICAgICAgICBkZWx0YSA9IG1heChtYXg8aW50PihtX3Njcm9sbGJhci0+dmlzaWJsZVNp
emUoKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIG1fc2Nyb2xs
YmFyLT52aXNpYmxlU2l6ZSgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkp
LCAxKTsKKyAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAg
IGRlbHRhICo9IC0xOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBtX3Njcm9sbGJhci0+
c2V0VmFsdWUobV9zY3JvbGxiYXItPnZhbHVlKCkgLSBkZWx0YSk7DQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKyAgICBjYXNl
IFdlYklucHV0RXZlbnQ6OktleURvd246IHsNCisgICAgICAgIFdlYktleWJvYXJkRXZlbnQga2V5
Ym9hcmQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2V5Ym9hcmRFdmVudCo+KCZldmVudCk7DQor
ICAgICAgICBpbnQga2V5Q29kZTsNCisgICAgICAgIC8vIFdlIGhhdmUgdG8gZHVwbGljYXRlIHRo
aXMgbG9naWMgZnJvbSBXZWJWaWV3SW1wbCBiZWNhdXNlIHRoZXJlIGl0IHVzZXMNCisgICAgICAg
IC8vIENoYXIgYW5kIFJhd0tleURvd24gZXZlbnRzLCB3aGljaCBkb24ndCBleGlzdCBhdCB0aGlz
IHBvaW50Lg0KKyAgICAgICAgaWYgKGtleWJvYXJkLndpbmRvd3NLZXlDb2RlID09IFZLRVlfU1BB
Q0UpIHsKKyAgICAgICAgICAgIGtleUNvZGUgPSAoKGtleWJvYXJkLm1vZGlmaWVycyAmIFdlYklu
cHV0RXZlbnQ6OlNoaWZ0S2V5KSA/IFZLRVlfUFJJT1IgOiBWS0VZX05FWFQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKGtleWJvYXJkLm1vZGlmaWVycyA9PSBXZWJJbnB1dEV2
ZW50OjpDb250cm9sS2V5KSB7CisgICAgICAgICAgICAgICAgLy8gTWF0Y2ggRkYgYmVoYXZpb3Ig
aW4gdGhlIHNlbnNlIHRoYXQgQ3RybCtob21lL2VuZCBhcmUgdGhlIG9ubHkgQ3RybAorICAgICAg
ICAgICAgICAgIC8vIGtleSBjb21iaW5hdGlvbnMgd2hpY2ggYWZmZWN0IHNjcm9sbGluZy4gU2Fm
YXJpIGlzIGJ1Z2d5IGluIHRoZQorICAgICAgICAgICAgICAgIC8vIHNlbnNlIHRoYXQgaXQgc2Ny
b2xscyB0aGUgcGFnZSBmb3IgYWxsIEN0cmwrc2Nyb2xsaW5nIGtleQorICAgICAgICAgICAgICAg
IC8vIGNvbWJpbmF0aW9ucy4gRm9yIGUuZy4gQ3RybCtwZ3VwL3BnZG4vdXAvZG93biwgZXRjLgor
ICAgICAgICAgICAgICAgIHN3aXRjaCAoa2V5Ym9hcmQud2luZG93c0tleUNvZGUpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIFZLRVlfSE9NRToKKyAgICAgICAgICAgICAgICBjYXNlIFZLRVlfRU5E
OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQuaXNTeXN0ZW1LZXkgfHwgKGtl
eWJvYXJkLm1vZGlmaWVycyAmIFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGtleUNvZGUgPSBrZXlib2FyZC53aW5k
b3dzS2V5Q29kZTsKKyAgICAgICAgfQ0KKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9u
IHNjcm9sbERpcmVjdGlvbjsKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkgc2Ny
b2xsR3JhbnVsYXJpdHk7CisgICAgICAgIGlmIChXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZvclNj
cm9sbChrZXlDb2RlLCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3JhbnVsYXJpdHkpKSB7Cisg
ICAgICAgICAgICAvLyBXaWxsIHJldHVybiBmYWxzZSBpZiBzY3JvbGwgZGlyZWN0aW9uIHdhc24n
dCBjb21wYXRpYmxlIHdpdGggdGhpcyBzY3JvbGxiYXIuCisgICAgICAgICAgICByZXR1cm4gbV9z
Y3JvbGxiYXItPnNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsNCisg
ICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorICAgIH0NCisgICAgcmV0dXJuIGZh
bHNlOw0KK30NCisNCit2b2lkIFdlYlNjcm9sbGJhckltcGw6OnZhbHVlQ2hhbmdlZChXZWJDb3Jl
OjpTY3JvbGxiYXIqKQ0KK3sNCisgICAgbV9jbGllbnQtPnBvc2l0aW9uQ2hhbmdlZCh0aGlzKTsN
Cit9DQorDQordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChX
ZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQ0KK3sNCisg
ICAgV2ViUmVjdCB3ZWJyZWN0KHJlY3QpOw0KKyAgICB3ZWJyZWN0LnggKz0gbV9zY3JvbGxiYXIt
PngoKTsNCisgICAgd2VicmVjdC55ICs9IG1fc2Nyb2xsYmFyLT55KCk7DQorICAgIG1fY2xpZW50
LT5pbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCh0aGlzLCB3ZWJyZWN0KTsNCit9DQorDQorYm9vbCBX
ZWJTY3JvbGxiYXJJbXBsOjppc0FjdGl2ZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gdHJ1ZTsN
Cit9DQorDQorYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBmYWxzZTsNCit9DQorDQordm9pZCBXZWJTY3JvbGxiYXJJ
bXBsOjpnZXRUaWNrbWFya3MoVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiB0aWNrbWFya3MpIGNv
bnN0DQorew0KKyAgICBXZWJWZWN0b3I8V2ViUmVjdD4gdGlja3M7DQorICAgIG1fY2xpZW50LT5n
ZXRUaWNrbWFya3MoJnRpY2tzKTsNCisgICAgdGlja21hcmtzLnJlc2l6ZSh0aWNrcy5zaXplKCkp
Ow0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpY2tzLnNpemUoKTsgKytpKQ0KKyAgICAg
ICAgdGlja21hcmtzW2ldID0gdGlja3NbaV07DQorfQ0KKw0KK30gLy8gbmFtZXNwYWNlIFdlYktp
dA0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNjcm9sbGJhckltcGxfaAorI2RlZmluZSBXZWJT
Y3JvbGxiYXJJbXBsX2gKKworI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUg
IldlYlNjcm9sbGJhci5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBTY3JvbGxiYXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJTY3JvbGxiYXJJbXBsIDogcHVibGljIFdlYlNjcm9sbGJhciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICBXZWJTY3JvbGxiYXJJbXBsKFdlYlNjcm9sbGJhckNsaWVudCosIGJvb2wgdmVydGljYWwp
OworICAgIH5XZWJTY3JvbGxiYXJJbXBsKCk7CisKKyAgICAvLyBXZWJLaXQ6OldlYlNjcm9sbGJh
ciBtZXRob2RzCisgICAgdmlydHVhbCBpbnQgZ2V0VGhpY2tuZXNzKCkgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgZ2V0UG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRp
b24oaW50IHBvc2l0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgV2Vi
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRUb3RhbFNpemUoaW50IHNpemUpOworICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGwoYm9vbCBmb3J3YXJkLCBXZWJTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllcik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0
IFdlYlJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJ
bnB1dEV2ZW50Jik7CisKKyAgICAvLyBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQgbWV0aG9kcwor
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKik7CisgICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhcios
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+Jikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgV2ViU2Nyb2xsYmFyQ2xpZW50KiBtX2NsaWVudDsKKwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAJKHJldmlzaW9uIDU5MDgxKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4MCw0NSArNzgwLDUzIEBAIGJvb2wgV2ViVmlld0lt
cGw6OnNjcm9sbFZpZXdXaXRoS2V5Ym9hcmQKIHsKICAgICBTY3JvbGxEaXJlY3Rpb24gc2Nyb2xs
RGlyZWN0aW9uOwogICAgIFNjcm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5OworICAg
IGlmICghbWFwS2V5Q29kZUZvclNjcm9sbChrZXlDb2RlLCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Ny
b2xsR3JhbnVsYXJpdHkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHByb3Bh
Z2F0ZVNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKK30KIAorYm9v
bCBXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZvclNjcm9sbChpbnQga2V5Q29kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uKiBz
Y3JvbGxEaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KiBzY3JvbGxHcmFudWxhcml0eSkKK3sKICAgICBzd2l0
Y2ggKGtleUNvZGUpIHsKICAgICBjYXNlIFZLRVlfTEVGVDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0
aW9uID0gU2Nyb2xsTGVmdDsKLSAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxp
bmU7CisgICAgICAgICpzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxMZWZ0OworICAgICAgICAqc2Ny
b2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
VktFWV9SSUdIVDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsUmlnaHQ7Ci0gICAg
ICAgIHNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlMaW5lOworICAgICAgICAqc2Nyb2xsRGly
ZWN0aW9uID0gU2Nyb2xsUmlnaHQ7CisgICAgICAgICpzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9s
bEJ5TGluZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS0VZX1VQOgotICAgICAgICBzY3Jv
bGxEaXJlY3Rpb24gPSBTY3JvbGxVcDsKLSAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3Jv
bGxCeUxpbmU7CisgICAgICAgICpzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxVcDsKKyAgICAgICAg
KnNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlMaW5lOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIFZLRVlfRE9XTjoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRG93bjsKLSAg
ICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmU7CisgICAgICAgICpzY3JvbGxE
aXJlY3Rpb24gPSBTY3JvbGxEb3duOworICAgICAgICAqc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3Jv
bGxCeUxpbmU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVktFWV9IT01FOgotICAgICAgICBz
Y3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxVcDsKLSAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkgPSBT
Y3JvbGxCeURvY3VtZW50OworICAgICAgICAqc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsVXA7Cisg
ICAgICAgICpzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5RG9jdW1lbnQ7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgVktFWV9FTkQ6Ci0gICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9s
bERvd247Ci0gICAgICAgIHNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlEb2N1bWVudDsKKyAg
ICAgICAgKnNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERvd247CisgICAgICAgICpzY3JvbGxHcmFu
dWxhcml0eSA9IFNjcm9sbEJ5RG9jdW1lbnQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVktF
WV9QUklPUjogIC8vIHBhZ2UgdXAKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsVXA7
Ci0gICAgICAgIHNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlQYWdlOworICAgICAgICAqc2Ny
b2xsRGlyZWN0aW9uID0gU2Nyb2xsVXA7CisgICAgICAgICpzY3JvbGxHcmFudWxhcml0eSA9IFNj
cm9sbEJ5UGFnZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS0VZX05FWFQ6ICAvLyBwYWdl
IGRvd24KLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRG93bjsKLSAgICAgICAgc2Ny
b2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBhZ2U7CisgICAgICAgICpzY3JvbGxEaXJlY3Rpb24g
PSBTY3JvbGxEb3duOworICAgICAgICAqc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBhZ2U7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICByZXR1cm4gcHJvcGFnYXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xs
R3JhbnVsYXJpdHkpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpo
aWRlU2VsZWN0UG9wdXAoKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAkocmV2aXNp
b24gNTkwODEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxMiw2ICszMTIsMTEgQEAgcHVibGljOgogCiAgICAgV2ViQ29yZTo6UG9wdXBD
b250YWluZXIqIHNlbGVjdFBvcHVwKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RQb3B1cC5nZXQo
KTsgfQogCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBsZWFkcyB0byBzY3JvbGxp
bmcuCisgICAgc3RhdGljIGJvb2wgbWFwS2V5Q29kZUZvclNjcm9sbChpbnQga2V5Q29kZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9u
KiBzY3JvbGxEaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KiBzY3JvbGxHcmFudWxhcml0eSk7CisKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIFdlYlZpZXc7ICAvLyBTbyBXZWJWaWV3OjpDcmVhdGUgY2FuIGNh
bGwgb3VyIGNvbnN0cnVjdG9yCiAgICAgZnJpZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxXZWJW
aWV3SW1wbD47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55566</attachid>
            <date>2010-05-10 10:24:29 -0700</date>
            <delta_ts>2010-05-10 12:09:05 -0700</delta_ts>
            <desc>Updated per check-webkit-style</desc>
            <filename>theme4.txt</filename>
            <type>text/plain</type>
            <size>26466</size>
            <attacher name="John Abd-El-Malek">jam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTkwODIpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTAtMDUtMTAgIEpvaG4g
QWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBXZWJLaXRTY3JvbGxiYXIg
aW50ZXJmYWNlIHRvIGFsbG93IENocm9taXVtIGNvZGUgdG8gcmV1c2UgdGhlIHNjcm9sbGJhciBj
b2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg4
NTQKKworICAgICAgICAqIHB1YmxpYy9XZWJTY3JvbGxiYXIuaDogQWRkZWQuCisgICAgICAgICog
cHVibGljL1dlYlNjcm9sbGJhckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2Vi
VGhlbWVFbmdpbmUuaDoKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHA6Cisg
ICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViU2Nyb2xsYmFyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJ
bXBsOjpXZWJTY3JvbGxiYXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1w
bDo6fldlYlNjcm9sbGJhckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBs
OjpnZXRUaGlja25lc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpnZXRQ
b3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0TG9jYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRUb3RhbFNpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
Y3JvbGxiYXJJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6
OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjp2
YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Omlz
QWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsYmFyQ29y
bmVyUHJlc2VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OmdldFRpY2tt
YXJrcyk6CisgICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNj
cm9sbFZpZXdXaXRoS2V5Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bWFw
S2V5Q29kZUZvclNjcm9sbCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAt
MDUtMTAgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNj
cm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xs
YmFyLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJh
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTY3JvbGxiYXJfaAor
I2RlZmluZSBXZWJTY3JvbGxiYXJfaAorCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisjaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnB1dEV2
ZW50OworY2xhc3MgV2ViU2Nyb2xsYmFyQ2xpZW50Oworc3RydWN0IFdlYlJlY3Q7CisKKy8vIFRo
ZXNlIHZhbHVlcyBtdXN0IG1hdGNoIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5IHZhbHVlcwor
ZW51bSBXZWJTY3JvbGxHcmFudWxhcml0eSB7CisgICAgV2ViU2Nyb2xsR3JhbnVsYXJpdHlTY3Jv
bGxCeUxpbmUsCisgICAgV2ViU2Nyb2xsR3JhbnVsYXJpdHlTY3JvbGxCeVBhZ2UsCisgICAgV2Vi
U2Nyb2xsR3JhbnVsYXJpdHlTY3JvbGxCeURvY3VtZW50LAorICAgIFdlYlNjcm9sbEdyYW51bGFy
aXR5U2Nyb2xsQnlQaXhlbCwKK307CisKK2NsYXNzIFdlYlNjcm9sbGJhciB7CitwdWJsaWM6Cisg
ICAgLy8gQ3JlYXRlcyBhIFdlYlNjcm9sbGJhci4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJT
Y3JvbGxiYXIqIGNyZWF0ZShXZWJTY3JvbGxiYXJDbGllbnQqLCBib29sIHZlcnRpY2FsKTsKKwor
ICAgIHZpcnR1YWwgfldlYlNjcm9sbGJhcigpIHt9CisKKyAgICAvLyBHZXRzIHRoZSB0aGlja25l
c3Mgb2YgdGhlIHNjcm9sbGJhciBpbiBwaXhlbHMuCisgICAgdmlydHVhbCBpbnQgZ2V0VGhpY2tu
ZXNzKCkgY29uc3QgPSAwOworCisgICAgLy8gR2V0cyB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAg
ICB2aXJ0dWFsIGludCBnZXRQb3NpdGlvbigpIGNvbnN0ID0gMDsKKworICAgIC8vIFNldHMgdGhl
IGN1cnJlbnQgcG9zaXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGludCBwb3Np
dGlvbikgPSAwOworCisgICAgLy8gU2V0cyB0aGUgcmVjdGFuZ2xlIG9mIHRoZSBzY3JvbGxiYXIu
CisgICAgdmlydHVhbCB2b2lkIHNldExvY2F0aW9uKGNvbnN0IFdlYlJlY3QmKSA9IDA7CisKKyAg
ICAvLyBTZXRzIHRoZSBzaXplIG9mIHRoZSBzY3JvbGxiYXIgcmVnaW9uLgorICAgIHZpcnR1YWwg
dm9pZCBzZXRUb3RhbFNpemUoaW50IHNpemUpID0gMDsKKworICAgIC8vIFNjcm9sbCBiYWNrIG9y
IGZvcndhcmQgd2l0aCB0aGUgZ2l2ZW4gZ3JhbnVsYXJpdHkuCisgICAgdmlydHVhbCB2b2lkIHNj
cm9sbChib29sIGZvcndhcmQsIFdlYlNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
KSA9IDA7CisKKyAgICAvLyBQYWludCB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLgorICAgIHZpcnR1YWwg
dm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgPSAwOworCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmZiB0aGUgZ2l2ZW4gZXZlbnQgd2FzIHVzZWQuCisgICAgdmlydHVhbCBib29s
IGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViU2Nyb2xsYmFyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJTY3JvbGxiYXJDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYlNjcm9sbGJhckNsaWVudF9oCisjZGVmaW5lIFdlYlNjcm9sbGJhckNsaWVudF9o
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTY3JvbGxiYXI7CitzdHJ1Y3QgV2Vi
UmVjdDsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKK2NsYXNzIFdl
YlNjcm9sbGJhckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uQ2hh
bmdlZChXZWJTY3JvbGxiYXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFdlYlNjcm9sbGJhciosIGNvbnN0IFdlYlJlY3QmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGdldFRpY2ttYXJrcyhXZWJWZWN0b3I8V2ViUmVjdD4qKSBjb25zdCA9IDA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlRoZW1lRW5naW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJUaGVtZUVuZ2luZS5oCShyZXZpc2lvbiA1OTA4MSkKKysrIFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNDQgKzc2LDYg
QEAgcHVibGljOgogICAgICAgICBXZWJDYW52YXMqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQg
Y2xhc3NpY1N0YXRlLAogICAgICAgICBjb25zdCBXZWJSZWN0JikgPSAwOwogI2VuZGlmCi0KLSAg
ICAvLyBXZWJUaGVtZUVuZ2luZSB3YXMgb3JpZ2luYWxseSB1c2VkIG9ubHkgb24gV2luZG93cywg
aGVuY2UgaXRzIHBsYXRmb3JtLQotICAgIC8vIHNwZWNpZmljIHBhcmFtZXRlcnMuICBUaGlzIGlz
IG5ldyBjcm9zcy1wbGF0Zm9ybSB0aGVtaW5nIEFQSSwgYW5kIHdlJ2xsCi0gICAgLy8gc3dpdGNo
IHRoZSBjb2RlIHRvIHVzaW5nIHRoZXNlIEFQSXMgb24gYWxsIHBsYXRmb3JtcyBpbnN0ZWFkLgot
ICAgIGVudW0gUGFydCB7Ci0gICAgICAgIFBhcnRTY3JvbGxiYXJEb3duQXJyb3csCi0gICAgICAg
IFBhcnRTY3JvbGxiYXJMZWZ0QXJyb3csCi0gICAgICAgIFBhcnRTY3JvbGxiYXJSaWdodEFycm93
LAotICAgICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJvdywKLSAgICAgICAgUGFydFNjcm9sbGJhckhv
cml6b250YWxUaHVtYiwKLSAgICAgICAgUGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWIsCi0gICAg
ICAgIFBhcnRTY3JvbGxiYXJIb3JpenRvbmFsVHJhY2ssCi0gICAgICAgIFBhcnRTY3JvbGxiYXJW
ZXJ0aWNhbFRyYWNrLAotICAgIH07Ci0KLSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgU3RhdGVE
aXNhYmxlZCwKLSAgICAgICAgU3RhdGVIb3QsCi0gICAgICAgIFN0YXRlSG92ZXIsCi0gICAgICAg
IFN0YXRlTm9ybWFsLAotICAgICAgICBTdGF0ZVByZXNzZWQsCi0gICAgfTsKLQotICAgIHN0cnVj
dCBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHsKLSAgICAgICAgaW50IGFsaWduWDsKLSAgICAg
ICAgaW50IGFsaWduWTsKLSAgICB9OwotCi0gICAgdW5pb24gRXh0cmFQYXJhbXMgewotICAgICAg
ICBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHNjcm9sbGJhclRyYWNrOwotICAgIH07Ci0KLSAg
ICAvLyBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiB0aGVtZSBjb21wb25lbnQuICBGb3IgdmFy
aWFibGUgc2l6ZWQgaXRlbXMKLSAgICAvLyBsaWtlIHZlcnRpY2FsIHNjcm9sbGJhciB0cmFja3Ms
IHRoZSB3aWR0aCB3aWxsIGJlIHRoZSByZXF1aXJlZCB3aWR0aCBvZgotICAgIC8vIHRoZSB0cmFj
ayB3aGlsZSB0aGUgaGVpZ2h0IHdpbGwgYmUgdGhlIG1pbmltdW0gaGVpZ2h0LgotICAgIHZpcnR1
YWwgdm9pZCBnZXRTaXplKFBhcnQsIFdlYlNpemUqKSB7fQotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dCgKLSAgICAgICAgV2ViQ2FudmFzKiwgUGFydCwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBjb25z
dCBFeHRyYVBhcmFtcyYpIHt9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAkocmV2aXNpb24gNTkw
ODEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiV2ViSW5wdXRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25Q
cmVzZW50ZXIuaCIKKyNpbmNsdWRlICJXZWJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJXZWJUZXh0
QWZmaW5pdHkuaCIKICNpbmNsdWRlICJXZWJUZXh0Q2FzZVNlbnNpdGl2aXR5LmgiCiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTI5MSw2ICsyOTIsMTEgQEAgQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJOb3RpZmljYQogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25EZW5pZWQsIE5vdGlmaWNhdGlvblBy
ZXNlbnRlcjo6UGVybWlzc2lvbkRlbmllZCk7CiAjZW5kaWYKIAorQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJTY3JvbGxHcmFudWxhcml0eVNjcm9sbEJ5TGluZSwgU2Nyb2xsQnlMaW5l
KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViU2Nyb2xsR3JhbnVsYXJpdHlTY3Jv
bGxCeVBhZ2UsIFNjcm9sbEJ5UGFnZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdl
YlNjcm9sbEdyYW51bGFyaXR5U2Nyb2xsQnlEb2N1bWVudCwgU2Nyb2xsQnlEb2N1bWVudCk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNjcm9sbEdyYW51bGFyaXR5U2Nyb2xsQnlQ
aXhlbCwgU2Nyb2xsQnlQaXhlbCk7CisKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2Vi
VGV4dEFmZmluaXR5VXBzdHJlYW0sIFVQU1RSRUFNKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViVGV4dEFmZmluaXR5RG93bnN0cmVhbSwgRE9XTlNUUkVBTSk7CiAKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNjcm9sbGJhcklt
cGwuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIktleWJvYXJk
Q29kZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTY3JvbGxU
eXBlcy5oIgorI2luY2x1ZGUgIldlYkNhbnZhcy5oIgorI2luY2x1ZGUgIldlYklucHV0RXZlbnQu
aCIKKyNpbmNsdWRlICJXZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIldlYlJl
Y3QuaCIKKyNpbmNsdWRlICJXZWJTY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWZWN0
b3IuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJTY3Jv
bGxiYXIqIFdlYlNjcm9sbGJhcjo6Y3JlYXRlKFdlYlNjcm9sbGJhckNsaWVudCogY2xpZW50LCBi
b29sIHZlcnRpY2FsKQoreworICAgIHJldHVybiBuZXcgV2ViU2Nyb2xsYmFySW1wbChjbGllbnQs
IHZlcnRpY2FsKTsKK30KKworV2ViU2Nyb2xsYmFySW1wbDo6V2ViU2Nyb2xsYmFySW1wbChXZWJT
Y3JvbGxiYXJDbGllbnQqIGNsaWVudCwgYm9vbCB2ZXJ0aWNhbCkKKyAgICA6IG1fY2xpZW50KGNs
aWVudCkKK3sKKyAgICBtX3Njcm9sbGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xs
YmFyKAorICAgICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJDbGllbnQqPih0aGlzKSwKKyAgICAg
ICAgdmVydGljYWwgPyBWZXJ0aWNhbFNjcm9sbGJhciA6IEhvcml6b250YWxTY3JvbGxiYXIsCisg
ICAgICAgIFJlZ3VsYXJTY3JvbGxiYXIpOworfQorCitXZWJTY3JvbGxiYXJJbXBsOjp+V2ViU2Ny
b2xsYmFySW1wbCgpCit7Cit9CisKK2ludCBXZWJTY3JvbGxiYXJJbXBsOjpnZXRUaGlja25lc3Mo
KSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGJhci0+dGhlbWUoKS0+c2Nyb2xsYmFyVGhp
Y2tuZXNzKCk7Cit9CisKK2ludCBXZWJTY3JvbGxiYXJJbXBsOjpnZXRQb3NpdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT52YWx1ZSgpOworfQorCit2b2lkIFdlYlNjcm9s
bGJhckltcGw6OnNldFBvc2l0aW9uKGludCBwb3NpdGlvbikKK3sKKyAgICBtX3Njcm9sbGJhci0+
c2V0VmFsdWUocG9zaXRpb24pOworfQorCit2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldExvY2F0
aW9uKGNvbnN0IFdlYlJlY3QmIHJlY3QpCit7CisgICAgV2ViQ29yZTo6SW50UmVjdCBvbGRSZWN0
ID0gbV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpOworICAgIG1fc2Nyb2xsYmFyLT5zZXRGcmFtZVJl
Y3QocmVjdCk7CisgICAgaWYgKFdlYlJlY3Qob2xkUmVjdCkgIT0gcmVjdCkKKyAgICAgIG1fc2Ny
b2xsYmFyLT5pbnZhbGlkYXRlKCk7CisKKyAgICBpbnQgbGVuZ3RoID0gbV9zY3JvbGxiYXItPm9y
aWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1fc2Nyb2xsYmFyLT53aWR0aCgp
IDogbV9zY3JvbGxiYXItPmhlaWdodCgpOworICAgIGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50
PihsZW5ndGggKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBsZW5n
dGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOworICAgIG1fc2Ny
b2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVw
KTsKKyAgICBtX3Njcm9sbGJhci0+c2V0UHJvcG9ydGlvbihsZW5ndGgsIG1fc2Nyb2xsYmFyLT50
b3RhbFNpemUoKSk7Cit9CisKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0VG90YWxTaXplKGlu
dCBzaXplKQoreworICAgIGludCBsZW5ndGggPSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9zY3JvbGxiYXItPndpZHRoKCkgOiBtX3Njcm9sbGJh
ci0+aGVpZ2h0KCk7CisgICAgbV9zY3JvbGxiYXItPnNldFByb3BvcnRpb24obGVuZ3RoLCBzaXpl
KTsKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwoYm9vbCBmb3J3YXJkLCBXZWJT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBT
Y3JvbGxEaXJlY3Rpb24gZGlyOworICAgIGJvb2wgaG9yaXpvbnRhbCA9IG1fc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7CisgICAgaWYgKGZvcndhcmQpCisg
ICAgICAgIGRpciA9IGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd247CisgICAg
ZWxzZQorICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwOwor
ICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGwoZGlyLCBzdGF0aWNfY2FzdDxTY3JvbGxHcmFudWxhcml0
eT4oZ3JhbnVsYXJpdHkpLCBtdWx0aXBsaWVyKTsKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJbXBs
OjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKK3sKKyNpZiBX
RUJLSVRfVVNJTkdfQ0cKKyAgICBHcmFwaGljc0NvbnRleHQgZ2MoY2FudmFzKTsKKyNlbGlmIFdF
QktJVF9VU0lOR19TS0lBCisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBjb250ZXh0KGNhbnZhcyk7
CisKKyAgICAvLyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBpcyBhY3R1YWxseSBhIHBvaW50ZXIg
dG8gUGxhdGZvcm1Db250ZXh0U2tpYQorICAgIEdyYXBoaWNzQ29udGV4dCBnYyhyZWludGVycHJl
dF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4oJmNvbnRleHQpKTsKKyNlbHNlCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyNlbmRpZgorCisgICAgbV9zY3JvbGxiYXItPnBhaW50KCZnYywg
cmVjdCk7Cit9CisKK2Jvb2wgV2ViU2Nyb2xsYmFySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25z
dCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKKyAg
ICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlRG93bjogeworICAgICAgICBXZWJNb3VzZUV2ZW50
IG1vdXNlZG93biA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmV2ZW50KTsK
KyAgICAgICAgaWYgKG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyhtb3VzZWRvd24u
eCwgbW91c2Vkb3duLnkpKSB7CisgICAgICAgICAgICBtb3VzZWRvd24ueCAtPSBtX3Njcm9sbGJh
ci0+eCgpOworICAgICAgICAgICAgbW91c2Vkb3duLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKKyAg
ICAgICAgICAgIG1fc2Nyb2xsYmFyLT5tb3VzZURvd24oUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRl
cihtX3Njcm9sbGJhci5nZXQoKSwgbW91c2Vkb3duKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJJbnB1dEV2
ZW50OjpNb3VzZVVwOgorICAgICAgICBpZiAobV9zY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgIT0g
Tm9QYXJ0KSB7CisgICAgICAgICAgICBtX3Njcm9sbGJhci0+bW91c2VVcCgpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJJ
bnB1dEV2ZW50OjpNb3VzZU1vdmU6IHsKKyAgICAgICAgV2ViTW91c2VFdmVudCBtb3VzZW1vdmUg
PSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZldmVudCk7CisgICAgICAgIGlm
IChtX3Njcm9sbGJhci0+ZnJhbWVSZWN0KCkuY29udGFpbnMobW91c2Vtb3ZlLngsIG1vdXNlbW92
ZS55KQorICAgICAgICAgICAgfHwgbV9zY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgIT0gTm9QYXJ0
KSB7CisgICAgICAgICAgICBtb3VzZW1vdmUueCAtPSBtX3Njcm9sbGJhci0+eCgpOworICAgICAg
ICAgICAgbW91c2Vtb3ZlLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKKyAgICAgICAgICAgIHJldHVy
biBtX3Njcm9sbGJhci0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1fc2Ny
b2xsYmFyLmdldCgpLCBtb3VzZW1vdmUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3Nj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBOb1BhcnQpCisgICAgICAgICAgICBtX3Njcm9sbGJh
ci0+bW91c2VFeGl0ZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2ViSW5w
dXRFdmVudDo6TW91c2VMZWF2ZToKKyAgICAgICAgaWYgKG1fc2Nyb2xsYmFyLT5ob3ZlcmVkUGFy
dCgpICE9IE5vUGFydCkKKyAgICAgICAgICAgIHJldHVybiBtX3Njcm9sbGJhci0+bW91c2VFeGl0
ZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZVdoZWVs
OiB7CisgICAgICAgIC8vIFNhbWUgbG9naWMgYXMgaW4gU2Nyb2xsdmlldy5jcHAuICBJZiB3ZSBj
YW4gbW92ZSBhdCBhbGwsIHdlJ2xsIGFjY2VwdCB0aGUgZXZlbnQuCisgICAgICAgIFdlYk1vdXNl
V2hlZWxFdmVudCBtb3VzZXdoZWVsID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlV2hlZWxF
dmVudCo+KCZldmVudCk7CisgICAgICAgIGludCBtYXhTY3JvbGxEZWx0YSA9IG1fc2Nyb2xsYmFy
LT5tYXhpbXVtKCkgLSBtX3Njcm9sbGJhci0+dmFsdWUoKTsKKyAgICAgICAgZmxvYXQgZGVsdGEg
PSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbW91
c2V3aGVlbC5kZWx0YVggOiBtb3VzZXdoZWVsLmRlbHRhWTsKKyAgICAgICAgaWYgKChkZWx0YSA8
IDAgJiYgbWF4U2Nyb2xsRGVsdGEgPiAwKSB8fCAoZGVsdGEgPiAwICYmIG1fc2Nyb2xsYmFyLT52
YWx1ZSgpID4gMCkpIHsKKyAgICAgICAgICAgIGlmIChtb3VzZXdoZWVsLnNjcm9sbEJ5UGFnZSkg
eworICAgICAgICAgICAgICAgIEFTU0VSVChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IGRlbHRh
IDwgMDsKKyAgICAgICAgICAgICAgICBkZWx0YSA9IG1heChtYXg8aW50PihtX3Njcm9sbGJhci0+
dmlzaWJsZVNpemUoKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCks
IG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2Vl
blBhZ2VzKCkpLCAxKTsKKyAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAg
ICAgICAgICAgIGRlbHRhICo9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zY3Jv
bGxiYXItPnNldFZhbHVlKG1fc2Nyb2xsYmFyLT52YWx1ZSgpIC0gZGVsdGEpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgV2ViSW5wdXRFdmVudDo6S2V5RG93bjogeworICAgICAgICBXZWJLZXlib2FyZEV2ZW50IGtl
eWJvYXJkID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYktleWJvYXJkRXZlbnQqPigmZXZlbnQpOwor
ICAgICAgICBpbnQga2V5Q29kZTsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBkdXBsaWNhdGUgdGhp
cyBsb2dpYyBmcm9tIFdlYlZpZXdJbXBsIGJlY2F1c2UgdGhlcmUgaXQgdXNlcworICAgICAgICAv
LyBDaGFyIGFuZCBSYXdLZXlEb3duIGV2ZW50cywgd2hpY2ggZG9uJ3QgZXhpc3QgYXQgdGhpcyBw
b2ludC4KKyAgICAgICAgaWYgKGtleWJvYXJkLndpbmRvd3NLZXlDb2RlID09IFZLRVlfU1BBQ0Up
CisgICAgICAgICAgICBrZXlDb2RlID0gKChrZXlib2FyZC5tb2RpZmllcnMgJiBXZWJJbnB1dEV2
ZW50OjpTaGlmdEtleSkgPyBWS0VZX1BSSU9SIDogVktFWV9ORVhUKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQubW9kaWZpZXJzID09IFdlYklucHV0RXZlbnQ6OkNv
bnRyb2xLZXkpIHsKKyAgICAgICAgICAgICAgICAvLyBNYXRjaCBGRiBiZWhhdmlvciBpbiB0aGUg
c2Vuc2UgdGhhdCBDdHJsK2hvbWUvZW5kIGFyZSB0aGUgb25seSBDdHJsCisgICAgICAgICAgICAg
ICAgLy8ga2V5IGNvbWJpbmF0aW9ucyB3aGljaCBhZmZlY3Qgc2Nyb2xsaW5nLiBTYWZhcmkgaXMg
YnVnZ3kgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gc2Vuc2UgdGhhdCBpdCBzY3JvbGxzIHRo
ZSBwYWdlIGZvciBhbGwgQ3RybCtzY3JvbGxpbmcga2V5CisgICAgICAgICAgICAgICAgLy8gY29t
YmluYXRpb25zLiBGb3IgZS5nLiBDdHJsK3BndXAvcGdkbi91cC9kb3duLCBldGMuCisgICAgICAg
ICAgICAgICAgc3dpdGNoIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgVktFWV9IT01FOgorICAgICAgICAgICAgICAgIGNhc2UgVktFWV9FTkQ6CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChrZXlib2FyZC5pc1N5c3RlbUtleSB8fCAoa2V5Ym9hcmQu
bW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAga2V5Q29kZSA9IGtleWJvYXJkLndpbmRvd3NLZXlD
b2RlOworICAgICAgICB9CisgICAgICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiBzY3JvbGxE
aXJlY3Rpb247CisgICAgICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51
bGFyaXR5OworICAgICAgICBpZiAoV2ViVmlld0ltcGw6Om1hcEtleUNvZGVGb3JTY3JvbGwoa2V5
Q29kZSwgJnNjcm9sbERpcmVjdGlvbiwgJnNjcm9sbEdyYW51bGFyaXR5KSkgeworICAgICAgICAg
ICAgLy8gV2lsbCByZXR1cm4gZmFsc2UgaWYgc2Nyb2xsIGRpcmVjdGlvbiB3YXNuJ3QgY29tcGF0
aWJsZSB3aXRoIHRoaXMgc2Nyb2xsYmFyLgorICAgICAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYmFy
LT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgV2ViU2Nyb2xsYmFySW1wbDo6dmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopCit7
CisgICAgbV9jbGllbnQtPnBvc2l0aW9uQ2hhbmdlZCh0aGlzKTsKK30KKwordm9pZCBXZWJTY3Jv
bGxiYXJJbXBsOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIqLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIFdlYlJlY3Qgd2VicmVjdChyZWN0
KTsKKyAgICB3ZWJyZWN0LnggKz0gbV9zY3JvbGxiYXItPngoKTsKKyAgICB3ZWJyZWN0LnkgKz0g
bV9zY3JvbGxiYXItPnkoKTsKKyAgICBtX2NsaWVudC0+aW52YWxpZGF0ZVNjcm9sbGJhclJlY3Qo
dGhpcywgd2VicmVjdCk7Cit9CisKK2Jvb2wgV2ViU2Nyb2xsYmFySW1wbDo6aXNBY3RpdmUoKSBj
b25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlNjcm9sbGJhckltcGw6OnNj
cm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpnZXRUaWNrbWFya3MoVmVjdG9yPFdlYkNvcmU6OkludFJl
Y3Q+JiB0aWNrbWFya3MpIGNvbnN0Cit7CisgICAgV2ViVmVjdG9yPFdlYlJlY3Q+IHRpY2tzOwor
ICAgIG1fY2xpZW50LT5nZXRUaWNrbWFya3MoJnRpY2tzKTsKKyAgICB0aWNrbWFya3MucmVzaXpl
KHRpY2tzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWNrcy5zaXplKCk7
ICsraSkKKyAgICAgICAgdGlja21hcmtzW2ldID0gdGlja3NbaV07Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU2Nyb2xsYmFySW1wbF9oCisjZGVm
aW5lIFdlYlNjcm9sbGJhckltcGxfaAorCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisj
aW5jbHVkZSAiV2ViU2Nyb2xsYmFyLmgiCisKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNjcm9sbGJhcjsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlNjcm9sbGJhckltcGwgOiBwdWJsaWMgV2ViU2Nyb2xsYmFyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQgewor
cHVibGljOgorICAgIFdlYlNjcm9sbGJhckltcGwoV2ViU2Nyb2xsYmFyQ2xpZW50KiwgYm9vbCB2
ZXJ0aWNhbCk7CisgICAgfldlYlNjcm9sbGJhckltcGwoKTsKKworICAgIC8vIFdlYktpdDo6V2Vi
U2Nyb2xsYmFyIG1ldGhvZHMKKyAgICB2aXJ0dWFsIGludCBnZXRUaGlja25lc3MoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGludCBnZXRQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBz
ZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhdGlvbihj
b25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFRvdGFsU2l6ZShpbnQgc2l6ZSk7
CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbChib29sIGZvcndhcmQsIFdlYlNjcm9sbEdyYW51bGFy
aXR5LCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFz
KiwgY29uc3QgV2ViUmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNv
bnN0IFdlYklucHV0RXZlbnQmKTsKKworICAgIC8vIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudCBt
ZXRob2RzCisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChXZWJDb3JlOjpTY3JvbGxiYXIq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6U2Ny
b2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8V2ViQ29yZTo6SW50
UmVjdD4mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBXZWJTY3JvbGxiYXJDbGllbnQqIG1fY2xp
ZW50OworCisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAkocmV2aXNpb24gNTkwODEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgwLDQ1ICs3ODAsNTMgQEAgYm9vbCBX
ZWJWaWV3SW1wbDo6c2Nyb2xsVmlld1dpdGhLZXlib2FyZAogewogICAgIFNjcm9sbERpcmVjdGlv
biBzY3JvbGxEaXJlY3Rpb247CiAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJp
dHk7CisgICAgaWYgKCFtYXBLZXlDb2RlRm9yU2Nyb2xsKGtleUNvZGUsICZzY3JvbGxEaXJlY3Rp
b24sICZzY3JvbGxHcmFudWxhcml0eSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gcHJvcGFnYXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHkpOwor
fQogCitib29sIFdlYlZpZXdJbXBsOjptYXBLZXlDb2RlRm9yU2Nyb2xsKGludCBrZXlDb2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpTY3JvbGxEaXJl
Y3Rpb24qIHNjcm9sbERpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkqIHNjcm9sbEdyYW51bGFyaXR5KQorewog
ICAgIHN3aXRjaCAoa2V5Q29kZSkgewogICAgIGNhc2UgVktFWV9MRUZUOgotICAgICAgICBzY3Jv
bGxEaXJlY3Rpb24gPSBTY3JvbGxMZWZ0OwotICAgICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNj
cm9sbEJ5TGluZTsKKyAgICAgICAgKnNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbExlZnQ7CisgICAg
ICAgICpzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5TGluZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBWS0VZX1JJR0hUOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxSaWdo
dDsKLSAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmU7CisgICAgICAgICpz
Y3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxSaWdodDsKKyAgICAgICAgKnNjcm9sbEdyYW51bGFyaXR5
ID0gU2Nyb2xsQnlMaW5lOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZLRVlfVVA6Ci0gICAg
ICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFVwOwotICAgICAgICBzY3JvbGxHcmFudWxhcml0
eSA9IFNjcm9sbEJ5TGluZTsKKyAgICAgICAgKnNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFVwOwor
ICAgICAgICAqc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmU7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgVktFWV9ET1dOOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxE
b3duOwotICAgICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5TGluZTsKKyAgICAgICAg
KnNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERvd247CisgICAgICAgICpzY3JvbGxHcmFudWxhcml0
eSA9IFNjcm9sbEJ5TGluZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS0VZX0hPTUU6Ci0g
ICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFVwOwotICAgICAgICBzY3JvbGxHcmFudWxh
cml0eSA9IFNjcm9sbEJ5RG9jdW1lbnQ7CisgICAgICAgICpzY3JvbGxEaXJlY3Rpb24gPSBTY3Jv
bGxVcDsKKyAgICAgICAgKnNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlEb2N1bWVudDsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS0VZX0VORDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9u
ID0gU2Nyb2xsRG93bjsKLSAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeURvY3Vt
ZW50OworICAgICAgICAqc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRG93bjsKKyAgICAgICAgKnNj
cm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlEb2N1bWVudDsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBWS0VZX1BSSU9SOiAgLy8gcGFnZSB1cAotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBT
Y3JvbGxVcDsKLSAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBhZ2U7CisgICAg
ICAgICpzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxVcDsKKyAgICAgICAgKnNjcm9sbEdyYW51bGFy
aXR5ID0gU2Nyb2xsQnlQYWdlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZLRVlfTkVYVDog
IC8vIHBhZ2UgZG93bgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEb3duOwotICAg
ICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5UGFnZTsKKyAgICAgICAgKnNjcm9sbERp
cmVjdGlvbiA9IFNjcm9sbERvd247CisgICAgICAgICpzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9s
bEJ5UGFnZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIHJldHVybiBwcm9wYWdhdGVTY3JvbGwoc2Nyb2xsRGlyZWN0aW9u
LCBzY3JvbGxHcmFudWxhcml0eSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgV2ViVmll
d0ltcGw6OmhpZGVTZWxlY3RQb3B1cCgpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
CShyZXZpc2lvbiA1OTA4MSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiwxMSBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3Jl
OjpQb3B1cENvbnRhaW5lciogc2VsZWN0UG9wdXAoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdFBv
cHVwLmdldCgpOyB9CiAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV2ZW50IGxlYWRzIHRv
IHNjcm9sbGluZy4KKyAgICBzdGF0aWMgYm9vbCBtYXBLZXlDb2RlRm9yU2Nyb2xsKGludCBrZXlD
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpTY3JvbGxE
aXJlY3Rpb24qIHNjcm9sbERpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkqIHNjcm9sbEdyYW51bGFyaXR5KTsKKwog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV2ViVmlldzsgIC8vIFNvIFdlYlZpZXc6OkNyZWF0
ZSBjYW4gY2FsbCBvdXIgY29uc3RydWN0b3IKICAgICBmcmllbmQgY2xhc3MgV1RGOjpSZWZDb3Vu
dGVkPFdlYlZpZXdJbXBsPjsK
</data>
<flag name="review"
          id="39785"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55587</attachid>
            <date>2010-05-10 12:09:05 -0700</date>
            <delta_ts>2010-05-10 12:51:17 -0700</delta_ts>
            <desc>updated</desc>
            <filename>theme6.txt</filename>
            <type>text/plain</type>
            <size>27749</size>
            <attacher name="John Abd-El-Malek">jam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTkwODIpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTAtMDUtMTAgIEpvaG4g
QWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBXZWJLaXRTY3JvbGxiYXIg
aW50ZXJmYWNlIHRvIGFsbG93IENocm9taXVtIGNvZGUgdG8gcmV1c2UgdGhlIHNjcm9sbGJhciBj
b2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg4
NTQKKworICAgICAgICAqIHB1YmxpYy9XZWJTY3JvbGxiYXIuaDogQWRkZWQuCisgICAgICAgICog
cHVibGljL1dlYlNjcm9sbGJhckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2Vi
VGhlbWVFbmdpbmUuaDoKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHA6Cisg
ICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViU2Nyb2xsYmFyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJ
bXBsOjpXZWJTY3JvbGxiYXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1w
bDo6fldlYlNjcm9sbGJhckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBs
OjpnZXRUaGlja25lc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpnZXRQ
b3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0TG9jYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRUb3RhbFNpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
Y3JvbGxiYXJJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6
OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjp2
YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Omlz
QWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsYmFyQ29y
bmVyUHJlc2VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OmdldFRpY2tt
YXJrcyk6CisgICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNj
cm9sbFZpZXdXaXRoS2V5Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bWFw
S2V5Q29kZUZvclNjcm9sbCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAt
MDUtMTAgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNj
cm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xs
YmFyLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJh
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTY3JvbGxiYXJfaAor
I2RlZmluZSBXZWJTY3JvbGxiYXJfaAorCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisjaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnB1dEV2
ZW50OworY2xhc3MgV2ViU2Nyb2xsYmFyQ2xpZW50Oworc3RydWN0IFdlYlJlY3Q7CisKK2NsYXNz
IFdlYlNjcm9sbGJhciB7CitwdWJsaWM6CisgICAgLy8gVGhlc2UgdmFsdWVzIG11c3QgbWF0Y2gg
V2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24gdmFsdWVzCisgICAgZW51bSBPcmllbnRhdGlv
biB7CisgICAgICAgIEhvcml6b250YWwsCisgICAgICAgIFZlcnRpY2FsCisgICAgfTsKKworICAg
IGVudW0gU2Nyb2xsRGlyZWN0aW9uIHsKKyAgICAgICAgU2Nyb2xsQmFja3dhcmQsCisgICAgICAg
IFNjcm9sbEZvcndhcmQKKyAgICB9OworCisvLyBUaGVzZSB2YWx1ZXMgbXVzdCBtYXRjaCBXZWJD
b3JlOjpTY3JvbGxHcmFudWxhcml0eSB2YWx1ZXMKKyAgICBlbnVtIFNjcm9sbEdyYW51bGFyaXR5
IHsKKyAgICAgICAgU2Nyb2xsQnlMaW5lLAorICAgICAgICBTY3JvbGxCeVBhZ2UsCisgICAgICAg
IFNjcm9sbEJ5RG9jdW1lbnQsCisgICAgICAgIFNjcm9sbEJ5UGl4ZWwKK307CisKKyAgICAvLyBD
cmVhdGVzIGEgV2ViU2Nyb2xsYmFyLgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlNjcm9sbGJh
ciogY3JlYXRlKFdlYlNjcm9sbGJhckNsaWVudCosIE9yaWVudGF0aW9uKTsKKworICAgIHZpcnR1
YWwgfldlYlNjcm9sbGJhcigpIHt9CisKKyAgICAvLyBHZXRzIHRoZSB0aGlja25lc3Mgb2YgdGhl
IHNjcm9sbGJhciBpbiBwaXhlbHMuCisgICAgc3RhdGljIGludCBkZWZhdWx0VGhpY2tuZXNzKCk7
CisKKyAgICAvLyBTZXRzIHRoZSByZWN0YW5nbGUgb2YgdGhlIHNjcm9sbGJhci4KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgV2ViUmVjdCYpID0gMDsKKworICAgIC8vIEdldHMg
dGhlIGN1cnJlbnQgdmFsdWUgKGkuZS4gcG9zaXRpb24gaW5zaWRlIHRoZSByZWdpb24pLgorICAg
IHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3QgPSAwOworCisgICAgLy8gU2V0cyB0aGUgY3VycmVu
dCB2YWx1ZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoaW50IHBvc2l0aW9uKSA9IDA7CisK
KyAgICAvLyBTZXRzIHRoZSBzaXplIG9mIHRoZSBzY3JvbGxiYXIgcmVnaW9uLgorICAgIHZpcnR1
YWwgdm9pZCBzZXRUb3RhbFNpemUoaW50IHNpemUpID0gMDsKKworICAgIC8vIFNjcm9sbCBiYWNr
IG9yIGZvcndhcmQgd2l0aCB0aGUgZ2l2ZW4gZ3JhbnVsYXJpdHkuCisgICAgdmlydHVhbCB2b2lk
IHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyKSA9IDA7CisKKyAgICAvLyBQYWludCB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLgorICAgIHZpcnR1
YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgPSAwOworCisgICAgLy8g
UmV0dXJucyB0cnVlIGlmZiB0aGUgZ2l2ZW4gZXZlbnQgd2FzIHVzZWQuCisgICAgdmlydHVhbCBi
b29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpID0gMDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViU2Nyb2xsYmFyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJTY3JvbGxiYXJDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlNjcm9sbGJhckNsaWVudF9oCisjZGVmaW5lIFdlYlNjcm9sbGJhckNsaWVu
dF9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTY3JvbGxiYXI7CitzdHJ1Y3Qg
V2ViUmVjdDsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKK2NsYXNz
IFdlYlNjcm9sbGJhckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9u
Q2hhbmdlZChXZWJTY3JvbGxiYXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFdlYlNjcm9sbGJhciosIGNvbnN0IFdlYlJlY3QmKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGdldFRpY2ttYXJrcyhXZWJTY3JvbGxiYXIqLCBXZWJWZWN0b3I8V2ViUmVjdD4q
KSBjb25zdCA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlRoZW1lRW5naW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJUaGVtZUVuZ2luZS5oCShyZXZpc2lvbiA1OTA4MSkK
KysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNDQgKzc2LDYgQEAgcHVibGljOgogICAgICAgICBXZWJDYW52YXMqLCBpbnQgcGFy
dCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAogICAgICAgICBjb25zdCBXZWJSZWN0Jikg
PSAwOwogI2VuZGlmCi0KLSAgICAvLyBXZWJUaGVtZUVuZ2luZSB3YXMgb3JpZ2luYWxseSB1c2Vk
IG9ubHkgb24gV2luZG93cywgaGVuY2UgaXRzIHBsYXRmb3JtLQotICAgIC8vIHNwZWNpZmljIHBh
cmFtZXRlcnMuICBUaGlzIGlzIG5ldyBjcm9zcy1wbGF0Zm9ybSB0aGVtaW5nIEFQSSwgYW5kIHdl
J2xsCi0gICAgLy8gc3dpdGNoIHRoZSBjb2RlIHRvIHVzaW5nIHRoZXNlIEFQSXMgb24gYWxsIHBs
YXRmb3JtcyBpbnN0ZWFkLgotICAgIGVudW0gUGFydCB7Ci0gICAgICAgIFBhcnRTY3JvbGxiYXJE
b3duQXJyb3csCi0gICAgICAgIFBhcnRTY3JvbGxiYXJMZWZ0QXJyb3csCi0gICAgICAgIFBhcnRT
Y3JvbGxiYXJSaWdodEFycm93LAotICAgICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJvdywKLSAgICAg
ICAgUGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYiwKLSAgICAgICAgUGFydFNjcm9sbGJhclZl
cnRpY2FsVGh1bWIsCi0gICAgICAgIFBhcnRTY3JvbGxiYXJIb3JpenRvbmFsVHJhY2ssCi0gICAg
ICAgIFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrLAotICAgIH07Ci0KLSAgICBlbnVtIFN0YXRl
IHsKLSAgICAgICAgU3RhdGVEaXNhYmxlZCwKLSAgICAgICAgU3RhdGVIb3QsCi0gICAgICAgIFN0
YXRlSG92ZXIsCi0gICAgICAgIFN0YXRlTm9ybWFsLAotICAgICAgICBTdGF0ZVByZXNzZWQsCi0g
ICAgfTsKLQotICAgIHN0cnVjdCBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHsKLSAgICAgICAg
aW50IGFsaWduWDsKLSAgICAgICAgaW50IGFsaWduWTsKLSAgICB9OwotCi0gICAgdW5pb24gRXh0
cmFQYXJhbXMgewotICAgICAgICBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHNjcm9sbGJhclRy
YWNrOwotICAgIH07Ci0KLSAgICAvLyBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiB0aGVtZSBj
b21wb25lbnQuICBGb3IgdmFyaWFibGUgc2l6ZWQgaXRlbXMKLSAgICAvLyBsaWtlIHZlcnRpY2Fs
IHNjcm9sbGJhciB0cmFja3MsIHRoZSB3aWR0aCB3aWxsIGJlIHRoZSByZXF1aXJlZCB3aWR0aCBv
ZgotICAgIC8vIHRoZSB0cmFjayB3aGlsZSB0aGUgaGVpZ2h0IHdpbGwgYmUgdGhlIG1pbmltdW0g
aGVpZ2h0LgotICAgIHZpcnR1YWwgdm9pZCBnZXRTaXplKFBhcnQsIFdlYlNpemUqKSB7fQotICAg
IHZpcnR1YWwgdm9pZCBwYWludCgKLSAgICAgICAgV2ViQ2FudmFzKiwgUGFydCwgU3RhdGUsIGNv
bnN0IFdlYlJlY3QmLCBjb25zdCBFeHRyYVBhcmFtcyYpIHt9CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1z
LmNwcAkocmV2aXNpb24gNTkwODEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNo
aW5nRW51bXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAi
V2ViSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRl
ICJXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKKyNpbmNsdWRlICJXZWJTY3JvbGxiYXIuaCIK
ICNpbmNsdWRlICJXZWJUZXh0QWZmaW5pdHkuaCIKICNpbmNsdWRlICJXZWJUZXh0Q2FzZVNlbnNp
dGl2aXR5LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTI5MSw2ICsyOTIsMTQg
QEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb3RpZmljYQogQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25EZW5p
ZWQsIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbkRlbmllZCk7CiAjZW5kaWYKIAor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6Okhvcml6b250YWwsIEhv
cml6b250YWxTY3JvbGxiYXIpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3Jv
bGxiYXI6OlZlcnRpY2FsLCBWZXJ0aWNhbFNjcm9sbGJhcik7CisKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViU2Nyb2xsYmFyOjpTY3JvbGxCeUxpbmUsIFNjcm9sbEJ5TGluZSk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNjcm9sbGJhcjo6U2Nyb2xsQnlQYWdlLCBT
Y3JvbGxCeVBhZ2UpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6
OlNjcm9sbEJ5RG9jdW1lbnQsIFNjcm9sbEJ5RG9jdW1lbnQpOworQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6OlNjcm9sbEJ5UGl4ZWwsIFNjcm9sbEJ5UGl4ZWwpOwor
CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRleHRBZmZpbml0eVVwc3RyZWFtLCBV
UFNUUkVBTSk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRleHRBZmZpbml0eURv
d25zdHJlYW0sIERPV05TVFJFQU0pOwogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNj
cm9sbGJhckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Ny
b2xsYmFySW1wbC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNj
cm9sbGJhckltcGwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJTY3JvbGxiYXJJbXBsLmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJXZWJD
YW52YXMuaCIKKyNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCisjaW5jbHVkZSAiV2ViSW5wdXRF
dmVudENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJXZWJSZWN0LmgiCisjaW5jbHVkZSAiV2ViU2Ny
b2xsYmFyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViVmll
d0ltcGwuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViU2Nyb2xsYmFyKiBXZWJTY3JvbGxiYXI6OmNy
ZWF0ZShXZWJTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgT3JpZW50YXRpb24gb3JpZW50YXRpb24p
Cit7CisgICAgcmV0dXJuIG5ldyBXZWJTY3JvbGxiYXJJbXBsKGNsaWVudCwgb3JpZW50YXRpb24p
OworfQorCitpbnQgV2ViU2Nyb2xsYmFyOjpkZWZhdWx0VGhpY2tuZXNzKCkKK3sKKyAgICByZXR1
cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOwor
fQorCitXZWJTY3JvbGxiYXJJbXBsOjpXZWJTY3JvbGxiYXJJbXBsKFdlYlNjcm9sbGJhckNsaWVu
dCogY2xpZW50LCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKKyAgICA6IG1fY2xpZW50KGNsaWVu
dCkKK3sKKyAgICBtX3Njcm9sbGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFy
KAorICAgICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJDbGllbnQqPih0aGlzKSwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8U2Nyb2xsYmFyT3JpZW50YXRpb24+KG9yaWVudGF0aW9uKSwKKyAgICAgICAg
UmVndWxhclNjcm9sbGJhcik7Cit9CisKK1dlYlNjcm9sbGJhckltcGw6On5XZWJTY3JvbGxiYXJJ
bXBsKCkKK3sKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRMb2NhdGlvbihjb25zdCBX
ZWJSZWN0JiByZWN0KQoreworICAgIFdlYkNvcmU6OkludFJlY3Qgb2xkUmVjdCA9IG1fc2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0RnJhbWVSZWN0KHJlY3QpOwor
ICAgIGlmIChXZWJSZWN0KG9sZFJlY3QpICE9IHJlY3QpCisgICAgICBtX3Njcm9sbGJhci0+aW52
YWxpZGF0ZSgpOworCisgICAgaW50IGxlbmd0aCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX3Njcm9sbGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xs
YmFyLT5oZWlnaHQoKTsKKyAgICBpbnQgcGFnZVN0ZXAgPSBtYXgobWF4PGludD4obGVuZ3RoICog
U2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgbGVuZ3RoIC0gU2Nyb2xs
YmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0
U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgbV9z
Y3JvbGxiYXItPnNldFByb3BvcnRpb24obGVuZ3RoLCBtX3Njcm9sbGJhci0+dG90YWxTaXplKCkp
OworfQorCitpbnQgV2ViU2Nyb2xsYmFySW1wbDo6dmFsdWUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3Njcm9sbGJhci0+dmFsdWUoKTsKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRW
YWx1ZShpbnQgcG9zaXRpb24pCit7CisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBvc2l0aW9u
KTsKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRUb3RhbFNpemUoaW50IHNpemUpCit7
CisgICAgaW50IGxlbmd0aCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250
YWxTY3JvbGxiYXIgPyBtX3Njcm9sbGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xsYmFyLT5oZWlnaHQo
KTsKKyAgICBtX3Njcm9sbGJhci0+c2V0UHJvcG9ydGlvbihsZW5ndGgsIHNpemUpOworfQorCit2
b2lkIFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgV2Vi
Q29yZTo6U2Nyb2xsRGlyZWN0aW9uIGRpcjsKKyAgICBib29sIGhvcml6b250YWwgPSBtX3Njcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgIGlmIChkaXJl
Y3Rpb24gPT0gU2Nyb2xsRm9yd2FyZCkKKyAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFNjcm9s
bFJpZ2h0IDogU2Nyb2xsRG93bjsKKyAgICBlbHNlCisgICAgICAgIGRpciA9IGhvcml6b250YWwg
PyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXA7CisgICAgbV9zY3JvbGxiYXItPnNjcm9sbChkaXIsIHN0
YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5PihncmFudWxhcml0eSksIG11bHRp
cGxpZXIpOworfQorCit2b2lkIFdlYlNjcm9sbGJhckltcGw6OnBhaW50KFdlYkNhbnZhcyogY2Fu
dmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQoreworI2lmIFdFQktJVF9VU0lOR19DRworICAgIEdy
YXBoaWNzQ29udGV4dCBnYyhjYW52YXMpOworI2VsaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyAgICBQ
bGF0Zm9ybUNvbnRleHRTa2lhIGNvbnRleHQoY2FudmFzKTsKKworICAgIC8vIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0IGlzIGFjdHVhbGx5IGEgcG9pbnRlciB0byBQbGF0Zm9ybUNvbnRleHRTa2lh
CisgICAgR3JhcGhpY3NDb250ZXh0IGdjKHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqPigmY29udGV4dCkpOworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vu
ZGlmCisKKyAgICBtX3Njcm9sbGJhci0+cGFpbnQoJmdjLCByZWN0KTsKK30KKworYm9vbCBXZWJT
Y3JvbGxiYXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50
KQoreworICAgIHN3aXRjaCAoZXZlbnQudHlwZSkgeworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6
TW91c2VEb3duOgorICAgICAgICByZXR1cm4gb25Nb3VzZURvd24oZXZlbnQpOworICAgIGNhc2Ug
V2ViSW5wdXRFdmVudDo6TW91c2VVcDoKKyAgICAgICAgcmV0dXJuIG9uTW91c2VVcChldmVudCk7
CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZU1vdmU6CisgICAgICAgIHJldHVybiBvbk1v
dXNlTW92ZShldmVudCk7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZUxlYXZlOgorICAg
ICAgICByZXR1cm4gb25Nb3VzZUxlYXZlKGV2ZW50KTsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6
Ok1vdXNlV2hlZWw6CisgICAgICAgIHJldHVybiBvbk1vdXNlV2hlZWwoZXZlbnQpOworICAgIGNh
c2UgV2ViSW5wdXRFdmVudDo6S2V5RG93bjoKKyAgICAgICAgcmV0dXJuIG9uS2V5RG93bihldmVu
dCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJTY3JvbGxiYXJJbXBs
Ojpvbk1vdXNlRG93bihjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sKKyAgICAgICAgV2Vi
TW91c2VFdmVudCBtb3VzZWRvd24gPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+
KCZldmVudCk7CisgICAgaWYgKCFtX3Njcm9sbGJhci0+ZnJhbWVSZWN0KCkuY29udGFpbnMobW91
c2Vkb3duLngsIG1vdXNlZG93bi55KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICAgICBtb3VzZWRvd24ueCAtPSBtX3Njcm9sbGJhci0+eCgpOworICAgICAgICAgICAgbW91c2Vk
b3duLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5tb3Vz
ZURvd24oUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihtX3Njcm9sbGJhci5nZXQoKSwgbW91c2Vk
b3duKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCitib29sIFdlYlNj
cm9sbGJhckltcGw6Om9uTW91c2VVcChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sKKyAg
ICBpZiAobV9zY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gTm9QYXJ0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9zY3JvbGxiYXItPm1vdXNlVXAoKTsKKyAgICB9CisK
K2Jvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZU1vdmUoY29uc3QgV2ViSW5wdXRFdmVudCYg
ZXZlbnQpCit7CisgICAgICAgIFdlYk1vdXNlRXZlbnQgbW91c2Vtb3ZlID0gKnN0YXRpY19jYXN0
PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmZXZlbnQpOworICAgICAgICBpZiAobV9zY3JvbGxiYXIt
PmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1vdXNlbW92ZS54LCBtb3VzZW1vdmUueSkKKyAgICAgICAg
ICAgIHx8IG1fc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpICE9IE5vUGFydCkgeworICAgICAgICAg
ICAgbW91c2Vtb3ZlLnggLT0gbV9zY3JvbGxiYXItPngoKTsKKyAgICAgICAgICAgIG1vdXNlbW92
ZS55IC09IG1fc2Nyb2xsYmFyLT55KCk7CisgICAgICAgICAgICByZXR1cm4gbV9zY3JvbGxiYXIt
Pm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihtX3Njcm9sbGJhci5nZXQoKSwg
bW91c2Vtb3ZlKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9zY3JvbGxiYXItPmhvdmVy
ZWRQYXJ0KCkgIT0gTm9QYXJ0KQorICAgICAgICAgICAgbV9zY3JvbGxiYXItPm1vdXNlRXhpdGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpv
bk1vdXNlTGVhdmUoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKG1fc2Ny
b2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICByZXR1cm4gbV9zY3JvbGxiYXItPm1vdXNlRXhpdGVkKCk7Cit9CisKK2Jv
b2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVsKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2
ZW50KQoreworICAgICAgICAvLyBTYW1lIGxvZ2ljIGFzIGluIFNjcm9sbHZpZXcuY3BwLiAgSWYg
d2UgY2FuIG1vdmUgYXQgYWxsLCB3ZSdsbCBhY2NlcHQgdGhlIGV2ZW50LgorICAgICAgICBXZWJN
b3VzZVdoZWVsRXZlbnQgbW91c2V3aGVlbCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZVdo
ZWVsRXZlbnQqPigmZXZlbnQpOworICAgICAgICBpbnQgbWF4U2Nyb2xsRGVsdGEgPSBtX3Njcm9s
bGJhci0+bWF4aW11bSgpIC0gbV9zY3JvbGxiYXItPnZhbHVlKCk7CisgICAgICAgIGZsb2F0IGRl
bHRhID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/
IG1vdXNld2hlZWwuZGVsdGFYIDogbW91c2V3aGVlbC5kZWx0YVk7CisgICAgICAgIGlmICgoZGVs
dGEgPCAwICYmIG1heFNjcm9sbERlbHRhID4gMCkgfHwgKGRlbHRhID4gMCAmJiBtX3Njcm9sbGJh
ci0+dmFsdWUoKSA+IDApKSB7CisgICAgICAgICAgICBpZiAobW91c2V3aGVlbC5zY3JvbGxCeVBh
Z2UpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWxTY3JvbGxiYXIpOworICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBk
ZWx0YSA8IDA7CisgICAgICAgICAgICAgICAgZGVsdGEgPSBtYXgobWF4PGludD4obV9zY3JvbGxi
YXItPnZpc2libGVTaXplKCkgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2lu
ZygpLCBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJl
dHdlZW5QYWdlcygpKSwgMSk7CisgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAg
ICAgICAgICAgICAgICBkZWx0YSAqPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
c2Nyb2xsYmFyLT5zZXRWYWx1ZShtX3Njcm9sbGJhci0+dmFsdWUoKSAtIGRlbHRhKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCitib29sIFdlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bihjb25zdCBXZWJJbnB1dEV2ZW50
JiBldmVudCkKK3sKKyAgICAgICAgV2ViS2V5Ym9hcmRFdmVudCBrZXlib2FyZCA9ICpzdGF0aWNf
Y2FzdDxjb25zdCBXZWJLZXlib2FyZEV2ZW50Kj4oJmV2ZW50KTsKKyAgICAgICAgaW50IGtleUNv
ZGU7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gZHVwbGljYXRlIHRoaXMgbG9naWMgZnJvbSBXZWJW
aWV3SW1wbCBiZWNhdXNlIHRoZXJlIGl0IHVzZXMKKyAgICAgICAgLy8gQ2hhciBhbmQgUmF3S2V5
RG93biBldmVudHMsIHdoaWNoIGRvbid0IGV4aXN0IGF0IHRoaXMgcG9pbnQuCisgICAgICAgIGlm
IChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZX1NQQUNFKQorICAgICAgICAgICAga2V5
Q29kZSA9ICgoa2V5Ym9hcmQubW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpID8g
VktFWV9QUklPUiA6IFZLRVlfTkVYVCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYg
KGtleWJvYXJkLm1vZGlmaWVycyA9PSBXZWJJbnB1dEV2ZW50OjpDb250cm9sS2V5KSB7CisgICAg
ICAgICAgICAgICAgLy8gTWF0Y2ggRkYgYmVoYXZpb3IgaW4gdGhlIHNlbnNlIHRoYXQgQ3RybCto
b21lL2VuZCBhcmUgdGhlIG9ubHkgQ3RybAorICAgICAgICAgICAgICAgIC8vIGtleSBjb21iaW5h
dGlvbnMgd2hpY2ggYWZmZWN0IHNjcm9sbGluZy4gU2FmYXJpIGlzIGJ1Z2d5IGluIHRoZQorICAg
ICAgICAgICAgICAgIC8vIHNlbnNlIHRoYXQgaXQgc2Nyb2xscyB0aGUgcGFnZSBmb3IgYWxsIEN0
cmwrc2Nyb2xsaW5nIGtleQorICAgICAgICAgICAgICAgIC8vIGNvbWJpbmF0aW9ucy4gRm9yIGUu
Zy4gQ3RybCtwZ3VwL3BnZG4vdXAvZG93biwgZXRjLgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
a2V5Ym9hcmQud2luZG93c0tleUNvZGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZLRVlfSE9N
RToKKyAgICAgICAgICAgICAgICBjYXNlIFZLRVlfRU5EOgorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoa2V5Ym9hcmQuaXNTeXN0ZW1LZXkgfHwgKGtleWJvYXJkLm1vZGlmaWVycyAmIFdlYklu
cHV0RXZlbnQ6OlNoaWZ0S2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgICAgIGtleUNvZGUgPSBrZXlib2FyZC53aW5kb3dzS2V5Q29kZTsKKyAgICAgICAgfQor
ICAgICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24gc2Nyb2xsRGlyZWN0aW9uOworICAgICAg
ICBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eTsKKyAgICAgICAg
aWYgKFdlYlZpZXdJbXBsOjptYXBLZXlDb2RlRm9yU2Nyb2xsKGtleUNvZGUsICZzY3JvbGxEaXJl
Y3Rpb24sICZzY3JvbGxHcmFudWxhcml0eSkpIHsKKyAgICAgICAgICAgIC8vIFdpbGwgcmV0dXJu
IGZhbHNlIGlmIHNjcm9sbCBkaXJlY3Rpb24gd2Fzbid0IGNvbXBhdGlibGUgd2l0aCB0aGlzIHNj
cm9sbGJhci4KKyAgICAgICAgICAgIHJldHVybiBtX3Njcm9sbGJhci0+c2Nyb2xsKHNjcm9sbERp
cmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHkpOworICAgICAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFdlYlNjcm9sbGJhckltcGw6OnZhbHVlQ2hhbmdlZChXZWJDb3JlOjpTY3Jv
bGxiYXIqKQoreworICAgIG1fY2xpZW50LT5wb3NpdGlvbkNoYW5nZWQodGhpcyk7Cit9CisKK3Zv
aWQgV2ViU2Nyb2xsYmFySW1wbDo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6U2Ny
b2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBXZWJSZWN0IHdl
YnJlY3QocmVjdCk7CisgICAgd2VicmVjdC54ICs9IG1fc2Nyb2xsYmFyLT54KCk7CisgICAgd2Vi
cmVjdC55ICs9IG1fc2Nyb2xsYmFyLT55KCk7CisgICAgbV9jbGllbnQtPmludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KHRoaXMsIHdlYnJlY3QpOworfQorCitib29sIFdlYlNjcm9sbGJhckltcGw6Omlz
QWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJTY3JvbGxi
YXJJbXBsOjpzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6Z2V0VGlja21hcmtzKFZlY3RvcjxXZWJD
b3JlOjpJbnRSZWN0PiYgdGlja21hcmtzKSBjb25zdAoreworICAgIFdlYlZlY3RvcjxXZWJSZWN0
PiB0aWNrczsKKyAgICBtX2NsaWVudC0+Z2V0VGlja21hcmtzKGNvbnN0X2Nhc3Q8V2ViU2Nyb2xs
YmFySW1wbCo+KHRoaXMpLCAmdGlja3MpOworICAgIHRpY2ttYXJrcy5yZXNpemUodGlja3Muc2l6
ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpY2tzLnNpemUoKTsgKytpKQorICAg
ICAgICB0aWNrbWFya3NbaV0gPSB0aWNrc1tpXTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaAkocmV2aXNpb24gMCkK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTY3JvbGxiYXJJbXBsX2gKKyNkZWZpbmUgV2ViU2Ny
b2xsYmFySW1wbF9oCisKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJX
ZWJTY3JvbGxiYXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgU2Nyb2xsYmFyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViU2Nyb2xsYmFySW1wbCA6IHB1YmxpYyBXZWJTY3JvbGxiYXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgV2ViU2Nyb2xsYmFySW1wbChXZWJTY3JvbGxiYXJDbGllbnQqLCBPcmllbnRhdGlvbiBvcmll
bnRhdGlvbik7CisgICAgfldlYlNjcm9sbGJhckltcGwoKTsKKworICAgIC8vIFdlYktpdDo6V2Vi
U2Nyb2xsYmFyIG1ldGhvZHMKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgV2Vi
UmVjdCYpOworICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldFZhbHVlKGludCBwb3NpdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHNldFRvdGFsU2l6ZShp
bnQgc2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
V2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1
dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKKworICAgIC8vIFdlYkNvcmU6OlNjcm9sbGJh
ckNsaWVudCBtZXRob2RzCisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChXZWJDb3JlOjpT
Y3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2Vi
Q29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQ
cmVzZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8V2Vi
Q29yZTo6SW50UmVjdD4mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIG9uTW91c2VEb3du
KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KTsKKyAgICBib29sIG9uTW91c2VVcChjb25zdCBX
ZWJJbnB1dEV2ZW50JiBldmVudCk7CisgICAgYm9vbCBvbk1vdXNlTW92ZShjb25zdCBXZWJJbnB1
dEV2ZW50JiBldmVudCk7CisgICAgYm9vbCBvbk1vdXNlTGVhdmUoY29uc3QgV2ViSW5wdXRFdmVu
dCYgZXZlbnQpOworICAgIGJvb2wgb25Nb3VzZVdoZWVsKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2
ZW50KTsKKyAgICBib29sIG9uS2V5RG93bihjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCk7CisK
KyAgICBXZWJTY3JvbGxiYXJDbGllbnQqIG1fY2xpZW50OworCisgICAgUmVmUHRyPFdlYkNvcmU6
OlNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gNTkw
ODEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgwLDQ1ICs3ODAsNTMgQEAgYm9vbCBXZWJWaWV3SW1wbDo6c2Nyb2xsVmlld1dpdGhL
ZXlib2FyZAogewogICAgIFNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJlY3Rpb247CiAgICAgU2Ny
b2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHk7CisgICAgaWYgKCFtYXBLZXlDb2RlRm9y
U2Nyb2xsKGtleUNvZGUsICZzY3JvbGxEaXJlY3Rpb24sICZzY3JvbGxHcmFudWxhcml0eSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcHJvcGFnYXRlU2Nyb2xsKHNjcm9sbERp
cmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHkpOworfQogCitib29sIFdlYlZpZXdJbXBsOjptYXBL
ZXlDb2RlRm9yU2Nyb2xsKGludCBrZXlDb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24qIHNjcm9sbERpcmVjdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVs
YXJpdHkqIHNjcm9sbEdyYW51bGFyaXR5KQorewogICAgIHN3aXRjaCAoa2V5Q29kZSkgewogICAg
IGNhc2UgVktFWV9MRUZUOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxMZWZ0Owot
ICAgICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5TGluZTsKKyAgICAgICAgKnNjcm9s
bERpcmVjdGlvbiA9IFNjcm9sbExlZnQ7CisgICAgICAgICpzY3JvbGxHcmFudWxhcml0eSA9IFNj
cm9sbEJ5TGluZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS0VZX1JJR0hUOgotICAgICAg
ICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxSaWdodDsKLSAgICAgICAgc2Nyb2xsR3JhbnVsYXJp
dHkgPSBTY3JvbGxCeUxpbmU7CisgICAgICAgICpzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxSaWdo
dDsKKyAgICAgICAgKnNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlMaW5lOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFZLRVlfVVA6Ci0gICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9s
bFVwOwotICAgICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5TGluZTsKKyAgICAgICAg
KnNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFVwOworICAgICAgICAqc2Nyb2xsR3JhbnVsYXJpdHkg
PSBTY3JvbGxCeUxpbmU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVktFWV9ET1dOOgotICAg
ICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEb3duOwotICAgICAgICBzY3JvbGxHcmFudWxh
cml0eSA9IFNjcm9sbEJ5TGluZTsKKyAgICAgICAgKnNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERv
d247CisgICAgICAgICpzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5TGluZTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBWS0VZX0hPTUU6Ci0gICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNj
cm9sbFVwOwotICAgICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5RG9jdW1lbnQ7Cisg
ICAgICAgICpzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxVcDsKKyAgICAgICAgKnNjcm9sbEdyYW51
bGFyaXR5ID0gU2Nyb2xsQnlEb2N1bWVudDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS0VZ
X0VORDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRG93bjsKLSAgICAgICAgc2Ny
b2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeURvY3VtZW50OworICAgICAgICAqc2Nyb2xsRGlyZWN0
aW9uID0gU2Nyb2xsRG93bjsKKyAgICAgICAgKnNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlE
b2N1bWVudDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS0VZX1BSSU9SOiAgLy8gcGFnZSB1
cAotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxVcDsKLSAgICAgICAgc2Nyb2xsR3Jh
bnVsYXJpdHkgPSBTY3JvbGxCeVBhZ2U7CisgICAgICAgICpzY3JvbGxEaXJlY3Rpb24gPSBTY3Jv
bGxVcDsKKyAgICAgICAgKnNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlQYWdlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFZLRVlfTkVYVDogIC8vIHBhZ2UgZG93bgotICAgICAgICBzY3Jv
bGxEaXJlY3Rpb24gPSBTY3JvbGxEb3duOwotICAgICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNj
cm9sbEJ5UGFnZTsKKyAgICAgICAgKnNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERvd247CisgICAg
ICAgICpzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5UGFnZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBw
cm9wYWdhdGVTY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSk7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmhpZGVTZWxlY3RQb3B1cCgpCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiA1OTA4MSkKKysrIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMx
MiwxMSBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpQb3B1cENvbnRhaW5lciogc2VsZWN0UG9w
dXAoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdFBvcHVwLmdldCgpOyB9CiAKKyAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGV2ZW50IGxlYWRzIHRvIHNjcm9sbGluZy4KKyAgICBzdGF0aWMgYm9v
bCBtYXBLZXlDb2RlRm9yU2Nyb2xsKGludCBrZXlDb2RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24qIHNjcm9sbERpcmVjdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVs
YXJpdHkqIHNjcm9sbEdyYW51bGFyaXR5KTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
V2ViVmlldzsgIC8vIFNvIFdlYlZpZXc6OkNyZWF0ZSBjYW4gY2FsbCBvdXIgY29uc3RydWN0b3IK
ICAgICBmcmllbmQgY2xhc3MgV1RGOjpSZWZDb3VudGVkPFdlYlZpZXdJbXBsPjs=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55593</attachid>
            <date>2010-05-10 12:51:17 -0700</date>
            <delta_ts>2010-05-10 17:02:01 -0700</delta_ts>
            <desc>fix spacing</desc>
            <filename>theme7.txt</filename>
            <type>text/plain</type>
            <size>27752</size>
            <attacher name="John Abd-El-Malek">jam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTkwODIpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTAtMDUtMTAgIEpvaG4g
QWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBXZWJLaXRTY3JvbGxiYXIg
aW50ZXJmYWNlIHRvIGFsbG93IENocm9taXVtIGNvZGUgdG8gcmV1c2UgdGhlIHNjcm9sbGJhciBj
b2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg4
NTQKKworICAgICAgICAqIHB1YmxpYy9XZWJTY3JvbGxiYXIuaDogQWRkZWQuCisgICAgICAgICog
cHVibGljL1dlYlNjcm9sbGJhckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2Vi
VGhlbWVFbmdpbmUuaDoKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHA6Cisg
ICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViU2Nyb2xsYmFyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJ
bXBsOjpXZWJTY3JvbGxiYXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1w
bDo6fldlYlNjcm9sbGJhckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBs
OjpnZXRUaGlja25lc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpnZXRQ
b3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0TG9jYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRUb3RhbFNpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
Y3JvbGxiYXJJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6
OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjp2
YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Omlz
QWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsYmFyQ29y
bmVyUHJlc2VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OmdldFRpY2tt
YXJrcyk6CisgICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNj
cm9sbFZpZXdXaXRoS2V5Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bWFw
S2V5Q29kZUZvclNjcm9sbCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAt
MDUtMTAgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNj
cm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xs
YmFyLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJh
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTY3JvbGxiYXJfaAor
I2RlZmluZSBXZWJTY3JvbGxiYXJfaAorCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisjaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnB1dEV2
ZW50OworY2xhc3MgV2ViU2Nyb2xsYmFyQ2xpZW50Oworc3RydWN0IFdlYlJlY3Q7CisKK2NsYXNz
IFdlYlNjcm9sbGJhciB7CitwdWJsaWM6CisgICAgLy8gVGhlc2UgdmFsdWVzIG11c3QgbWF0Y2gg
V2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24gdmFsdWVzCisgICAgZW51bSBPcmllbnRhdGlv
biB7CisgICAgICAgIEhvcml6b250YWwsCisgICAgICAgIFZlcnRpY2FsCisgICAgfTsKKworICAg
IGVudW0gU2Nyb2xsRGlyZWN0aW9uIHsKKyAgICAgICAgU2Nyb2xsQmFja3dhcmQsCisgICAgICAg
IFNjcm9sbEZvcndhcmQKKyAgICB9OworCisvLyBUaGVzZSB2YWx1ZXMgbXVzdCBtYXRjaCBXZWJD
b3JlOjpTY3JvbGxHcmFudWxhcml0eSB2YWx1ZXMKKyAgICBlbnVtIFNjcm9sbEdyYW51bGFyaXR5
IHsKKyAgICAgICAgU2Nyb2xsQnlMaW5lLAorICAgICAgICBTY3JvbGxCeVBhZ2UsCisgICAgICAg
IFNjcm9sbEJ5RG9jdW1lbnQsCisgICAgICAgIFNjcm9sbEJ5UGl4ZWwKK307CisKKyAgICAvLyBD
cmVhdGVzIGEgV2ViU2Nyb2xsYmFyLgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlNjcm9sbGJh
ciogY3JlYXRlKFdlYlNjcm9sbGJhckNsaWVudCosIE9yaWVudGF0aW9uKTsKKworICAgIHZpcnR1
YWwgfldlYlNjcm9sbGJhcigpIHt9CisKKyAgICAvLyBHZXRzIHRoZSB0aGlja25lc3Mgb2YgdGhl
IHNjcm9sbGJhciBpbiBwaXhlbHMuCisgICAgc3RhdGljIGludCBkZWZhdWx0VGhpY2tuZXNzKCk7
CisKKyAgICAvLyBTZXRzIHRoZSByZWN0YW5nbGUgb2YgdGhlIHNjcm9sbGJhci4KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgV2ViUmVjdCYpID0gMDsKKworICAgIC8vIEdldHMg
dGhlIGN1cnJlbnQgdmFsdWUgKGkuZS4gcG9zaXRpb24gaW5zaWRlIHRoZSByZWdpb24pLgorICAg
IHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3QgPSAwOworCisgICAgLy8gU2V0cyB0aGUgY3VycmVu
dCB2YWx1ZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoaW50IHBvc2l0aW9uKSA9IDA7CisK
KyAgICAvLyBTZXRzIHRoZSBzaXplIG9mIHRoZSBzY3JvbGxiYXIgcmVnaW9uLgorICAgIHZpcnR1
YWwgdm9pZCBzZXRUb3RhbFNpemUoaW50IHNpemUpID0gMDsKKworICAgIC8vIFNjcm9sbCBiYWNr
IG9yIGZvcndhcmQgd2l0aCB0aGUgZ2l2ZW4gZ3JhbnVsYXJpdHkuCisgICAgdmlydHVhbCB2b2lk
IHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyKSA9IDA7CisKKyAgICAvLyBQYWludCB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLgorICAgIHZpcnR1
YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgPSAwOworCisgICAgLy8g
UmV0dXJucyB0cnVlIGlmZiB0aGUgZ2l2ZW4gZXZlbnQgd2FzIHVzZWQuCisgICAgdmlydHVhbCBi
b29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpID0gMDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViU2Nyb2xsYmFyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJTY3JvbGxiYXJDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlNjcm9sbGJhckNsaWVudF9oCisjZGVmaW5lIFdlYlNjcm9sbGJhckNsaWVu
dF9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTY3JvbGxiYXI7CitzdHJ1Y3Qg
V2ViUmVjdDsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKK2NsYXNz
IFdlYlNjcm9sbGJhckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9u
Q2hhbmdlZChXZWJTY3JvbGxiYXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFdlYlNjcm9sbGJhciosIGNvbnN0IFdlYlJlY3QmKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGdldFRpY2ttYXJrcyhXZWJTY3JvbGxiYXIqLCBXZWJWZWN0b3I8V2ViUmVjdD4q
KSBjb25zdCA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlRoZW1lRW5naW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJUaGVtZUVuZ2luZS5oCShyZXZpc2lvbiA1OTA4MSkK
KysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNDQgKzc2LDYgQEAgcHVibGljOgogICAgICAgICBXZWJDYW52YXMqLCBpbnQgcGFy
dCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAogICAgICAgICBjb25zdCBXZWJSZWN0Jikg
PSAwOwogI2VuZGlmCi0KLSAgICAvLyBXZWJUaGVtZUVuZ2luZSB3YXMgb3JpZ2luYWxseSB1c2Vk
IG9ubHkgb24gV2luZG93cywgaGVuY2UgaXRzIHBsYXRmb3JtLQotICAgIC8vIHNwZWNpZmljIHBh
cmFtZXRlcnMuICBUaGlzIGlzIG5ldyBjcm9zcy1wbGF0Zm9ybSB0aGVtaW5nIEFQSSwgYW5kIHdl
J2xsCi0gICAgLy8gc3dpdGNoIHRoZSBjb2RlIHRvIHVzaW5nIHRoZXNlIEFQSXMgb24gYWxsIHBs
YXRmb3JtcyBpbnN0ZWFkLgotICAgIGVudW0gUGFydCB7Ci0gICAgICAgIFBhcnRTY3JvbGxiYXJE
b3duQXJyb3csCi0gICAgICAgIFBhcnRTY3JvbGxiYXJMZWZ0QXJyb3csCi0gICAgICAgIFBhcnRT
Y3JvbGxiYXJSaWdodEFycm93LAotICAgICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJvdywKLSAgICAg
ICAgUGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYiwKLSAgICAgICAgUGFydFNjcm9sbGJhclZl
cnRpY2FsVGh1bWIsCi0gICAgICAgIFBhcnRTY3JvbGxiYXJIb3JpenRvbmFsVHJhY2ssCi0gICAg
ICAgIFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrLAotICAgIH07Ci0KLSAgICBlbnVtIFN0YXRl
IHsKLSAgICAgICAgU3RhdGVEaXNhYmxlZCwKLSAgICAgICAgU3RhdGVIb3QsCi0gICAgICAgIFN0
YXRlSG92ZXIsCi0gICAgICAgIFN0YXRlTm9ybWFsLAotICAgICAgICBTdGF0ZVByZXNzZWQsCi0g
ICAgfTsKLQotICAgIHN0cnVjdCBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHsKLSAgICAgICAg
aW50IGFsaWduWDsKLSAgICAgICAgaW50IGFsaWduWTsKLSAgICB9OwotCi0gICAgdW5pb24gRXh0
cmFQYXJhbXMgewotICAgICAgICBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHNjcm9sbGJhclRy
YWNrOwotICAgIH07Ci0KLSAgICAvLyBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiB0aGVtZSBj
b21wb25lbnQuICBGb3IgdmFyaWFibGUgc2l6ZWQgaXRlbXMKLSAgICAvLyBsaWtlIHZlcnRpY2Fs
IHNjcm9sbGJhciB0cmFja3MsIHRoZSB3aWR0aCB3aWxsIGJlIHRoZSByZXF1aXJlZCB3aWR0aCBv
ZgotICAgIC8vIHRoZSB0cmFjayB3aGlsZSB0aGUgaGVpZ2h0IHdpbGwgYmUgdGhlIG1pbmltdW0g
aGVpZ2h0LgotICAgIHZpcnR1YWwgdm9pZCBnZXRTaXplKFBhcnQsIFdlYlNpemUqKSB7fQotICAg
IHZpcnR1YWwgdm9pZCBwYWludCgKLSAgICAgICAgV2ViQ2FudmFzKiwgUGFydCwgU3RhdGUsIGNv
bnN0IFdlYlJlY3QmLCBjb25zdCBFeHRyYVBhcmFtcyYpIHt9CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1z
LmNwcAkocmV2aXNpb24gNTkwODEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNo
aW5nRW51bXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAi
V2ViSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRl
ICJXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKKyNpbmNsdWRlICJXZWJTY3JvbGxiYXIuaCIK
ICNpbmNsdWRlICJXZWJUZXh0QWZmaW5pdHkuaCIKICNpbmNsdWRlICJXZWJUZXh0Q2FzZVNlbnNp
dGl2aXR5LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTI5MSw2ICsyOTIsMTQg
QEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb3RpZmljYQogQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25EZW5p
ZWQsIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbkRlbmllZCk7CiAjZW5kaWYKIAor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6Okhvcml6b250YWwsIEhv
cml6b250YWxTY3JvbGxiYXIpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3Jv
bGxiYXI6OlZlcnRpY2FsLCBWZXJ0aWNhbFNjcm9sbGJhcik7CisKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViU2Nyb2xsYmFyOjpTY3JvbGxCeUxpbmUsIFNjcm9sbEJ5TGluZSk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNjcm9sbGJhcjo6U2Nyb2xsQnlQYWdlLCBT
Y3JvbGxCeVBhZ2UpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6
OlNjcm9sbEJ5RG9jdW1lbnQsIFNjcm9sbEJ5RG9jdW1lbnQpOworQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6OlNjcm9sbEJ5UGl4ZWwsIFNjcm9sbEJ5UGl4ZWwpOwor
CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRleHRBZmZpbml0eVVwc3RyZWFtLCBV
UFNUUkVBTSk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRleHRBZmZpbml0eURv
d25zdHJlYW0sIERPV05TVFJFQU0pOwogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNj
cm9sbGJhckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Ny
b2xsYmFySW1wbC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNj
cm9sbGJhckltcGwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJTY3JvbGxiYXJJbXBsLmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJXZWJD
YW52YXMuaCIKKyNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCisjaW5jbHVkZSAiV2ViSW5wdXRF
dmVudENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJXZWJSZWN0LmgiCisjaW5jbHVkZSAiV2ViU2Ny
b2xsYmFyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViVmll
d0ltcGwuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViU2Nyb2xsYmFyKiBXZWJTY3JvbGxiYXI6OmNy
ZWF0ZShXZWJTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgT3JpZW50YXRpb24gb3JpZW50YXRpb24p
Cit7CisgICAgcmV0dXJuIG5ldyBXZWJTY3JvbGxiYXJJbXBsKGNsaWVudCwgb3JpZW50YXRpb24p
OworfQorCitpbnQgV2ViU2Nyb2xsYmFyOjpkZWZhdWx0VGhpY2tuZXNzKCkKK3sKKyAgICByZXR1
cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOwor
fQorCitXZWJTY3JvbGxiYXJJbXBsOjpXZWJTY3JvbGxiYXJJbXBsKFdlYlNjcm9sbGJhckNsaWVu
dCogY2xpZW50LCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKKyAgICA6IG1fY2xpZW50KGNsaWVu
dCkKK3sKKyAgICBtX3Njcm9sbGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFy
KAorICAgICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJDbGllbnQqPih0aGlzKSwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8U2Nyb2xsYmFyT3JpZW50YXRpb24+KG9yaWVudGF0aW9uKSwKKyAgICAgICAg
UmVndWxhclNjcm9sbGJhcik7Cit9CisKK1dlYlNjcm9sbGJhckltcGw6On5XZWJTY3JvbGxiYXJJ
bXBsKCkKK3sKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRMb2NhdGlvbihjb25zdCBX
ZWJSZWN0JiByZWN0KQoreworICAgIFdlYkNvcmU6OkludFJlY3Qgb2xkUmVjdCA9IG1fc2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0RnJhbWVSZWN0KHJlY3QpOwor
ICAgIGlmIChXZWJSZWN0KG9sZFJlY3QpICE9IHJlY3QpCisgICAgICBtX3Njcm9sbGJhci0+aW52
YWxpZGF0ZSgpOworCisgICAgaW50IGxlbmd0aCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX3Njcm9sbGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xs
YmFyLT5oZWlnaHQoKTsKKyAgICBpbnQgcGFnZVN0ZXAgPSBtYXgobWF4PGludD4obGVuZ3RoICog
U2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgbGVuZ3RoIC0gU2Nyb2xs
YmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0
U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgbV9z
Y3JvbGxiYXItPnNldFByb3BvcnRpb24obGVuZ3RoLCBtX3Njcm9sbGJhci0+dG90YWxTaXplKCkp
OworfQorCitpbnQgV2ViU2Nyb2xsYmFySW1wbDo6dmFsdWUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3Njcm9sbGJhci0+dmFsdWUoKTsKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRW
YWx1ZShpbnQgcG9zaXRpb24pCit7CisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBvc2l0aW9u
KTsKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRUb3RhbFNpemUoaW50IHNpemUpCit7
CisgICAgaW50IGxlbmd0aCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250
YWxTY3JvbGxiYXIgPyBtX3Njcm9sbGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xsYmFyLT5oZWlnaHQo
KTsKKyAgICBtX3Njcm9sbGJhci0+c2V0UHJvcG9ydGlvbihsZW5ndGgsIHNpemUpOworfQorCit2
b2lkIFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBX
ZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24gZGlyOworICAgIGJvb2wgaG9yaXpvbnRhbCA9IG1fc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7CisgICAgaWYgKGRp
cmVjdGlvbiA9PSBTY3JvbGxGb3J3YXJkKQorICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Ny
b2xsUmlnaHQgOiBTY3JvbGxEb3duOworICAgIGVsc2UKKyAgICAgICAgZGlyID0gaG9yaXpvbnRh
bCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcDsKKyAgICBtX3Njcm9sbGJhci0+c2Nyb2xsKGRpciwg
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgbXVs
dGlwbGllcik7Cit9CisKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBj
YW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCit7CisjaWYgV0VCS0lUX1VTSU5HX0NHCisgICAg
R3JhcGhpY3NDb250ZXh0IGdjKGNhbnZhcyk7CisjZWxpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAg
IFBsYXRmb3JtQ29udGV4dFNraWEgY29udGV4dChjYW52YXMpOworCisgICAgLy8gUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQgaXMgYWN0dWFsbHkgYSBwb2ludGVyIHRvIFBsYXRmb3JtQ29udGV4dFNr
aWEKKyAgICBHcmFwaGljc0NvbnRleHQgZ2MocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCo+KCZjb250ZXh0KSk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
ZW5kaWYKKworICAgIG1fc2Nyb2xsYmFyLT5wYWludCgmZ2MsIHJlY3QpOworfQorCitib29sIFdl
YlNjcm9sbGJhckltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZl
bnQpCit7CisgICAgc3dpdGNoIChldmVudC50eXBlKSB7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50
OjpNb3VzZURvd246CisgICAgICAgIHJldHVybiBvbk1vdXNlRG93bihldmVudCk7CisgICAgY2Fz
ZSBXZWJJbnB1dEV2ZW50OjpNb3VzZVVwOgorICAgICAgICByZXR1cm4gb25Nb3VzZVVwKGV2ZW50
KTsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgcmV0dXJuIG9u
TW91c2VNb3ZlKGV2ZW50KTsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlTGVhdmU6Cisg
ICAgICAgIHJldHVybiBvbk1vdXNlTGVhdmUoZXZlbnQpOworICAgIGNhc2UgV2ViSW5wdXRFdmVu
dDo6TW91c2VXaGVlbDoKKyAgICAgICAgcmV0dXJuIG9uTW91c2VXaGVlbChldmVudCk7CisgICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpLZXlEb3duOgorICAgICAgICByZXR1cm4gb25LZXlEb3duKGV2
ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYlNjcm9sbGJhcklt
cGw6Om9uTW91c2VEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQoreworICAgICAgICBX
ZWJNb3VzZUV2ZW50IG1vdXNlZG93biA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50
Kj4oJmV2ZW50KTsKKyAgICBpZiAoIW1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyht
b3VzZWRvd24ueCwgbW91c2Vkb3duLnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgICAgIG1vdXNlZG93bi54IC09IG1fc2Nyb2xsYmFyLT54KCk7CisgICAgICAgICAgICBtb3Vz
ZWRvd24ueSAtPSBtX3Njcm9sbGJhci0+eSgpOworICAgICAgICAgICAgbV9zY3JvbGxiYXItPm1v
dXNlRG93bihQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1fc2Nyb2xsYmFyLmdldCgpLCBtb3Vz
ZWRvd24pKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKK2Jvb2wgV2Vi
U2Nyb2xsYmFySW1wbDo6b25Nb3VzZVVwKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQorewor
ICAgIGlmIChtX3Njcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBOb1BhcnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX3Njcm9sbGJhci0+bW91c2VVcCgpOworICAgIH0K
KworYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlTW92ZShjb25zdCBXZWJJbnB1dEV2ZW50
JiBldmVudCkKK3sKKyAgICAgICAgV2ViTW91c2VFdmVudCBtb3VzZW1vdmUgPSAqc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZldmVudCk7CisgICAgICAgIGlmIChtX3Njcm9sbGJh
ci0+ZnJhbWVSZWN0KCkuY29udGFpbnMobW91c2Vtb3ZlLngsIG1vdXNlbW92ZS55KQorICAgICAg
ICAgICAgfHwgbV9zY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgIT0gTm9QYXJ0KSB7CisgICAgICAg
ICAgICBtb3VzZW1vdmUueCAtPSBtX3Njcm9sbGJhci0+eCgpOworICAgICAgICAgICAgbW91c2Vt
b3ZlLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Njcm9sbGJh
ci0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1fc2Nyb2xsYmFyLmdldCgp
LCBtb3VzZW1vdmUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3Njcm9sbGJhci0+aG92
ZXJlZFBhcnQoKSAhPSBOb1BhcnQpCisgICAgICAgICAgICBtX3Njcm9sbGJhci0+bW91c2VFeGl0
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCitib29sIFdlYlNjcm9sbGJhckltcGw6
Om9uTW91c2VMZWF2ZShjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAobV9z
Y3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgIHJldHVybiBtX3Njcm9sbGJhci0+bW91c2VFeGl0ZWQoKTsKK30KKwor
Ym9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hlZWwoY29uc3QgV2ViSW5wdXRFdmVudCYg
ZXZlbnQpCit7CisgICAgICAgIC8vIFNhbWUgbG9naWMgYXMgaW4gU2Nyb2xsdmlldy5jcHAuICBJ
ZiB3ZSBjYW4gbW92ZSBhdCBhbGwsIHdlJ2xsIGFjY2VwdCB0aGUgZXZlbnQuCisgICAgICAgIFdl
Yk1vdXNlV2hlZWxFdmVudCBtb3VzZXdoZWVsID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNl
V2hlZWxFdmVudCo+KCZldmVudCk7CisgICAgICAgIGludCBtYXhTY3JvbGxEZWx0YSA9IG1fc2Ny
b2xsYmFyLT5tYXhpbXVtKCkgLSBtX3Njcm9sbGJhci0+dmFsdWUoKTsKKyAgICAgICAgZmxvYXQg
ZGVsdGEgPSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
ID8gbW91c2V3aGVlbC5kZWx0YVggOiBtb3VzZXdoZWVsLmRlbHRhWTsKKyAgICAgICAgaWYgKChk
ZWx0YSA8IDAgJiYgbWF4U2Nyb2xsRGVsdGEgPiAwKSB8fCAoZGVsdGEgPiAwICYmIG1fc2Nyb2xs
YmFyLT52YWx1ZSgpID4gMCkpIHsKKyAgICAgICAgICAgIGlmIChtb3VzZXdoZWVsLnNjcm9sbEJ5
UGFnZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9
IGRlbHRhIDwgMDsKKyAgICAgICAgICAgICAgICBkZWx0YSA9IG1heChtYXg8aW50PihtX3Njcm9s
bGJhci0+dmlzaWJsZVNpemUoKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFn
aW5nKCksIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFw
QmV0d2VlblBhZ2VzKCkpLCAxKTsKKyAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAg
ICAgICAgICAgICAgICAgIGRlbHRhICo9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9zY3JvbGxiYXItPnNldFZhbHVlKG1fc2Nyb2xsYmFyLT52YWx1ZSgpIC0gZGVsdGEpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKK2Jvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25LZXlEb3duKGNvbnN0IFdlYklucHV0RXZl
bnQmIGV2ZW50KQoreworICAgICAgICBXZWJLZXlib2FyZEV2ZW50IGtleWJvYXJkID0gKnN0YXRp
Y19jYXN0PGNvbnN0IFdlYktleWJvYXJkRXZlbnQqPigmZXZlbnQpOworICAgICAgICBpbnQga2V5
Q29kZTsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBkdXBsaWNhdGUgdGhpcyBsb2dpYyBmcm9tIFdl
YlZpZXdJbXBsIGJlY2F1c2UgdGhlcmUgaXQgdXNlcworICAgICAgICAvLyBDaGFyIGFuZCBSYXdL
ZXlEb3duIGV2ZW50cywgd2hpY2ggZG9uJ3QgZXhpc3QgYXQgdGhpcyBwb2ludC4KKyAgICAgICAg
aWYgKGtleWJvYXJkLndpbmRvd3NLZXlDb2RlID09IFZLRVlfU1BBQ0UpCisgICAgICAgICAgICBr
ZXlDb2RlID0gKChrZXlib2FyZC5tb2RpZmllcnMgJiBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleSkg
PyBWS0VZX1BSSU9SIDogVktFWV9ORVhUKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
ZiAoa2V5Ym9hcmQubW9kaWZpZXJzID09IFdlYklucHV0RXZlbnQ6OkNvbnRyb2xLZXkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBNYXRjaCBGRiBiZWhhdmlvciBpbiB0aGUgc2Vuc2UgdGhhdCBDdHJs
K2hvbWUvZW5kIGFyZSB0aGUgb25seSBDdHJsCisgICAgICAgICAgICAgICAgLy8ga2V5IGNvbWJp
bmF0aW9ucyB3aGljaCBhZmZlY3Qgc2Nyb2xsaW5nLiBTYWZhcmkgaXMgYnVnZ3kgaW4gdGhlCisg
ICAgICAgICAgICAgICAgLy8gc2Vuc2UgdGhhdCBpdCBzY3JvbGxzIHRoZSBwYWdlIGZvciBhbGwg
Q3RybCtzY3JvbGxpbmcga2V5CisgICAgICAgICAgICAgICAgLy8gY29tYmluYXRpb25zLiBGb3Ig
ZS5nLiBDdHJsK3BndXAvcGdkbi91cC9kb3duLCBldGMuCisgICAgICAgICAgICAgICAgc3dpdGNo
IChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSkgeworICAgICAgICAgICAgICAgIGNhc2UgVktFWV9I
T01FOgorICAgICAgICAgICAgICAgIGNhc2UgVktFWV9FTkQ6CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChrZXlib2FyZC5pc1N5c3RlbUtleSB8fCAoa2V5Ym9hcmQubW9kaWZpZXJzICYgV2Vi
SW5wdXRFdmVudDo6U2hpZnRLZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAga2V5Q29kZSA9IGtleWJvYXJkLndpbmRvd3NLZXlDb2RlOworICAgICAgICB9
CisgICAgICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJlY3Rpb247CisgICAg
ICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5OworICAgICAg
ICBpZiAoV2ViVmlld0ltcGw6Om1hcEtleUNvZGVGb3JTY3JvbGwoa2V5Q29kZSwgJnNjcm9sbERp
cmVjdGlvbiwgJnNjcm9sbEdyYW51bGFyaXR5KSkgeworICAgICAgICAgICAgLy8gV2lsbCByZXR1
cm4gZmFsc2UgaWYgc2Nyb2xsIGRpcmVjdGlvbiB3YXNuJ3QgY29tcGF0aWJsZSB3aXRoIHRoaXMg
c2Nyb2xsYmFyLgorICAgICAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5zY3JvbGwoc2Nyb2xs
RGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSk7CisgICAgICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6dmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNj
cm9sbGJhciopCit7CisgICAgbV9jbGllbnQtPnBvc2l0aW9uQ2hhbmdlZCh0aGlzKTsKK30KKwor
dm9pZCBXZWJTY3JvbGxiYXJJbXBsOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpT
Y3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIFdlYlJlY3Qg
d2VicmVjdChyZWN0KTsKKyAgICB3ZWJyZWN0LnggKz0gbV9zY3JvbGxiYXItPngoKTsKKyAgICB3
ZWJyZWN0LnkgKz0gbV9zY3JvbGxiYXItPnkoKTsKKyAgICBtX2NsaWVudC0+aW52YWxpZGF0ZVNj
cm9sbGJhclJlY3QodGhpcywgd2VicmVjdCk7Cit9CisKK2Jvb2wgV2ViU2Nyb2xsYmFySW1wbDo6
aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlNjcm9s
bGJhckltcGw6OnNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpnZXRUaWNrbWFya3MoVmVjdG9yPFdl
YkNvcmU6OkludFJlY3Q+JiB0aWNrbWFya3MpIGNvbnN0Cit7CisgICAgV2ViVmVjdG9yPFdlYlJl
Y3Q+IHRpY2tzOworICAgIG1fY2xpZW50LT5nZXRUaWNrbWFya3MoY29uc3RfY2FzdDxXZWJTY3Jv
bGxiYXJJbXBsKj4odGhpcyksICZ0aWNrcyk7CisgICAgdGlja21hcmtzLnJlc2l6ZSh0aWNrcy5z
aXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlja3Muc2l6ZSgpOyArK2kpCisg
ICAgICAgIHRpY2ttYXJrc1tpXSA9IHRpY2tzW2ldOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNjcm9sbGJhckltcGxfaAorI2RlZmluZSBXZWJT
Y3JvbGxiYXJJbXBsX2gKKworI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUg
IldlYlNjcm9sbGJhci5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBTY3JvbGxiYXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJTY3JvbGxiYXJJbXBsIDogcHVibGljIFdlYlNjcm9sbGJhciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICBXZWJTY3JvbGxiYXJJbXBsKFdlYlNjcm9sbGJhckNsaWVudCosIE9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKTsKKyAgICB+V2ViU2Nyb2xsYmFySW1wbCgpOworCisgICAgLy8gV2ViS2l0OjpX
ZWJTY3JvbGxiYXIgbWV0aG9kcworICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBX
ZWJSZWN0Jik7CisgICAgdmlydHVhbCBpbnQgdmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWUoaW50IHBvc2l0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG90YWxTaXpl
KGludCBzaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUlu
cHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOworCisgICAgLy8gV2ViQ29yZTo6U2Nyb2xs
YmFyQ2xpZW50IG1ldGhvZHMKKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFdlYkNvcmU6
OlNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChX
ZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVh
bCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5l
clByZXNlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxX
ZWJDb3JlOjpJbnRSZWN0PiYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgb25Nb3VzZURv
d24oY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpOworICAgIGJvb2wgb25Nb3VzZVVwKGNvbnN0
IFdlYklucHV0RXZlbnQmIGV2ZW50KTsKKyAgICBib29sIG9uTW91c2VNb3ZlKGNvbnN0IFdlYklu
cHV0RXZlbnQmIGV2ZW50KTsKKyAgICBib29sIG9uTW91c2VMZWF2ZShjb25zdCBXZWJJbnB1dEV2
ZW50JiBldmVudCk7CisgICAgYm9vbCBvbk1vdXNlV2hlZWwoY29uc3QgV2ViSW5wdXRFdmVudCYg
ZXZlbnQpOworICAgIGJvb2wgb25LZXlEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KTsK
KworICAgIFdlYlNjcm9sbGJhckNsaWVudCogbV9jbGllbnQ7CisKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6U2Nyb2xsYmFyPiBtX3Njcm9sbGJhcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA1
OTA4MSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03ODAsNDUgKzc4MCw1MyBAQCBib29sIFdlYlZpZXdJbXBsOjpzY3JvbGxWaWV3V2l0
aEtleWJvYXJkCiB7CiAgICAgU2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbjsKICAgICBT
Y3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eTsKKyAgICBpZiAoIW1hcEtleUNvZGVG
b3JTY3JvbGwoa2V5Q29kZSwgJnNjcm9sbERpcmVjdGlvbiwgJnNjcm9sbEdyYW51bGFyaXR5KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBwcm9wYWdhdGVTY3JvbGwoc2Nyb2xs
RGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSk7Cit9CiAKK2Jvb2wgV2ViVmlld0ltcGw6Om1h
cEtleUNvZGVGb3JTY3JvbGwoaW50IGtleUNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiogc2Nyb2xsRGlyZWN0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpTY3JvbGxHcmFu
dWxhcml0eSogc2Nyb2xsR3JhbnVsYXJpdHkpCit7CiAgICAgc3dpdGNoIChrZXlDb2RlKSB7CiAg
ICAgY2FzZSBWS0VZX0xFRlQ6Ci0gICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbExlZnQ7
Ci0gICAgICAgIHNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlMaW5lOworICAgICAgICAqc2Ny
b2xsRGlyZWN0aW9uID0gU2Nyb2xsTGVmdDsKKyAgICAgICAgKnNjcm9sbEdyYW51bGFyaXR5ID0g
U2Nyb2xsQnlMaW5lOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZLRVlfUklHSFQ6Ci0gICAg
ICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFJpZ2h0OwotICAgICAgICBzY3JvbGxHcmFudWxh
cml0eSA9IFNjcm9sbEJ5TGluZTsKKyAgICAgICAgKnNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFJp
Z2h0OworICAgICAgICAqc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmU7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgVktFWV9VUDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Ny
b2xsVXA7Ci0gICAgICAgIHNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlMaW5lOworICAgICAg
ICAqc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsVXA7CisgICAgICAgICpzY3JvbGxHcmFudWxhcml0
eSA9IFNjcm9sbEJ5TGluZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS0VZX0RPV046Ci0g
ICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERvd247Ci0gICAgICAgIHNjcm9sbEdyYW51
bGFyaXR5ID0gU2Nyb2xsQnlMaW5lOworICAgICAgICAqc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xs
RG93bjsKKyAgICAgICAgKnNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlMaW5lOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFZLRVlfSE9NRToKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0g
U2Nyb2xsVXA7Ci0gICAgICAgIHNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlEb2N1bWVudDsK
KyAgICAgICAgKnNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFVwOworICAgICAgICAqc2Nyb2xsR3Jh
bnVsYXJpdHkgPSBTY3JvbGxCeURvY3VtZW50OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZL
RVlfRU5EOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEb3duOwotICAgICAgICBz
Y3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5RG9jdW1lbnQ7CisgICAgICAgICpzY3JvbGxEaXJl
Y3Rpb24gPSBTY3JvbGxEb3duOworICAgICAgICAqc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxC
eURvY3VtZW50OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZLRVlfUFJJT1I6ICAvLyBwYWdl
IHVwCi0gICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFVwOwotICAgICAgICBzY3JvbGxH
cmFudWxhcml0eSA9IFNjcm9sbEJ5UGFnZTsKKyAgICAgICAgKnNjcm9sbERpcmVjdGlvbiA9IFNj
cm9sbFVwOworICAgICAgICAqc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBhZ2U7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgVktFWV9ORVhUOiAgLy8gcGFnZSBkb3duCi0gICAgICAgIHNj
cm9sbERpcmVjdGlvbiA9IFNjcm9sbERvd247Ci0gICAgICAgIHNjcm9sbEdyYW51bGFyaXR5ID0g
U2Nyb2xsQnlQYWdlOworICAgICAgICAqc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRG93bjsKKyAg
ICAgICAgKnNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlQYWdlOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJu
IHByb3BhZ2F0ZVNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6aGlkZVNlbGVjdFBvcHVwKCkK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJKHJldmlzaW9uIDU5MDgxKQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNiAr
MzEyLDExIEBAIHB1YmxpYzoKIAogICAgIFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBzZWxlY3RQ
b3B1cCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0UG9wdXAuZ2V0KCk7IH0KIAorICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgZXZlbnQgbGVhZHMgdG8gc2Nyb2xsaW5nLgorICAgIHN0YXRpYyBi
b29sIG1hcEtleUNvZGVGb3JTY3JvbGwoaW50IGtleUNvZGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiogc2Nyb2xsRGlyZWN0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpTY3JvbGxHcmFu
dWxhcml0eSogc2Nyb2xsR3JhbnVsYXJpdHkpOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBXZWJWaWV3OyAgLy8gU28gV2ViVmlldzo6Q3JlYXRlIGNhbiBjYWxsIG91ciBjb25zdHJ1Y3Rv
cgogICAgIGZyaWVuZCBjbGFzcyBXVEY6OlJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+Owo=
</data>
<flag name="review"
          id="39820"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55624</attachid>
            <date>2010-05-10 17:02:01 -0700</date>
            <delta_ts>2010-05-10 17:07:05 -0700</delta_ts>
            <desc>update</desc>
            <filename>theme8.txt</filename>
            <type>text/plain</type>
            <size>28278</size>
            <attacher name="John Abd-El-Malek">jam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTkxMDcpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTAtMDUtMTAgIEpvaG4g
QWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBGaXNoZXIuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgV2ViS2l0U2Nyb2xsYmFyIGlu
dGVyZmFjZSB0byBhbGxvdyBDaHJvbWl1bSBjb2RlIHRvIHJldXNlIHRoZSBzY3JvbGxiYXIgY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg4NTQK
KworICAgICAgICAqIHB1YmxpYy9XZWJTY3JvbGxiYXIuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlNjcm9sbGJhcjo6KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFyOjp+V2Vi
U2Nyb2xsYmFyKToKKyAgICAgICAgKiBwdWJsaWMvV2ViU2Nyb2xsYmFyQ2xpZW50Lmg6IEFkZGVk
LgorICAgICAgICAqIHB1YmxpYy9XZWJUaGVtZUVuZ2luZS5oOgorICAgICAgICAqIHNyYy9Bc3Nl
cnRNYXRjaGluZ0VudW1zLmNwcDoKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNjcm9sbGJhcjo6ZGVmYXVsdFRoaWNrbmVzcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNjcm9sbGJhckltcGw6OldlYlNjcm9sbGJhckltcGwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTY3JvbGxiYXJJbXBsOjp+V2ViU2Nyb2xsYmFySW1wbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNjcm9sbGJhckltcGw6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Ny
b2xsYmFySW1wbDo6dmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpz
ZXRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFRvdGFsU2l6
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNjcm9sbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2Nyb2xsYmFySW1wbDo6aGFuZGxlSW5wdXRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNj
cm9sbGJhckltcGw6Om9uTW91c2VEb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFy
SW1wbDo6b25Nb3VzZVVwKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6b25N
b3VzZU1vdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlTGVh
dmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hlZWwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpvbktleURvd24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTY3JvbGxiYXJJbXBsOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2Nyb2xsYmFySW1wbDo6c2Nyb2xsYmFyQ29ybmVyUHJlc2VudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNjcm9sbGJhckltcGw6OmdldFRpY2ttYXJrcyk6CisgICAgICAgICogc3JjL1dlYlNjcm9s
bGJhckltcGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFZpZXdXaXRoS2V5Ym9hcmQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZvclNjcm9sbCk6CisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAtMDUtMTAgIFRvbnkgR2VudGlsY29yZSAgPHRvbnln
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV2ViU2Nyb2xsYmFyX2gKKyNkZWZpbmUgV2ViU2Nyb2xsYmFyX2gKKworI2lu
Y2x1ZGUgIldlYkNhbnZhcy5oIgorI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViSW5wdXRFdmVudDsKK2NsYXNzIFdlYlNjcm9sbGJhckNsaWVu
dDsKK3N0cnVjdCBXZWJSZWN0OworCitjbGFzcyBXZWJTY3JvbGxiYXIgeworcHVibGljOgorICAg
IGVudW0gT3JpZW50YXRpb24geworICAgICAgICBIb3Jpem9udGFsLAorICAgICAgICBWZXJ0aWNh
bAorICAgIH07CisKKyAgICBlbnVtIFNjcm9sbERpcmVjdGlvbiB7CisgICAgICAgIFNjcm9sbEJh
Y2t3YXJkLAorICAgICAgICBTY3JvbGxGb3J3YXJkCisgICAgfTsKKworICAgIGVudW0gU2Nyb2xs
R3JhbnVsYXJpdHkgeworICAgICAgICBTY3JvbGxCeUxpbmUsCisgICAgICAgIFNjcm9sbEJ5UGFn
ZSwKKyAgICAgICAgU2Nyb2xsQnlEb2N1bWVudCwKKyAgICAgICAgU2Nyb2xsQnlQaXhlbAorICAg
IH07CisKKyAgICAvLyBDcmVhdGVzIGEgV2ViU2Nyb2xsYmFyLgorICAgIFdFQktJVF9BUEkgc3Rh
dGljIFdlYlNjcm9sbGJhciogY3JlYXRlKFdlYlNjcm9sbGJhckNsaWVudCosIE9yaWVudGF0aW9u
KTsKKworICAgIHZpcnR1YWwgfldlYlNjcm9sbGJhcigpIHt9CisKKyAgICAvLyBHZXRzIHRoZSB0
aGlja25lc3Mgb2YgdGhlIHNjcm9sbGJhciBpbiBwaXhlbHMuCisgICAgV0VCS0lUX0FQSSBzdGF0
aWMgaW50IGRlZmF1bHRUaGlja25lc3MoKTsKKworICAgIC8vIFNldHMgdGhlIHJlY3RhbmdsZSBv
ZiB0aGUgc2Nyb2xsYmFyLgorICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBXZWJS
ZWN0JikgPSAwOworCisgICAgLy8gR2V0cyB0aGUgY3VycmVudCB2YWx1ZSAoaS5lLiBwb3NpdGlv
biBpbnNpZGUgdGhlIHJlZ2lvbikuCisgICAgdmlydHVhbCBpbnQgdmFsdWUoKSBjb25zdCA9IDA7
CisKKyAgICAvLyBTZXRzIHRoZSBjdXJyZW50IHZhbHVlLgorICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZShpbnQgcG9zaXRpb24pID0gMDsKKworICAgIC8vIFNldHMgdGhlIHNpemUgb2YgdGhlIHNj
cm9sbGFibGUgcmVnaW9uIGluIHBpeGVscy4gIGkuZS4gaWYgYSBkb2N1bWVudCBpcworICAgIC8v
IDgwMHgxMDAwMCBwaXhlbHMgYW5kIHRoZSB2aWV3cG9ydCBpcyAxMDAweDEwMDAgcGl4ZWxzLCB0
aGVuIHNldExvY2F0aW9uCisgICAgLy8gZm9yIHRoZSB2ZXJ0aWNhbCBzY3JvbGxiYXIgd291bGQg
aGF2ZSBwYXNzZWQgaW4gYSByZWN0YW5nbGUgbGlrZToKKyAgICAvLyAgICAgICAgICAgICg4MDAg
LSBkZWZhdWx0VGhpY2tuZXNzKCksIDApIChkZWZhdWx0VGhpY2tuZXNzKCkgeCAxMDAwMCkKKyAg
ICAvLyBhbmQgc2V0VG90YWxTaXplKDEwMDAwKQorICAgIHZpcnR1YWwgdm9pZCBzZXRUb3RhbFNp
emUoaW50IHNpemUpID0gMDsKKworICAgIC8vIFNjcm9sbCBiYWNrIG9yIGZvcndhcmQgd2l0aCB0
aGUgZ2l2ZW4gZ3JhbnVsYXJpdHkuCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKSA9IDA7CisKKyAgICAv
LyBQYWludCB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLgorICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJD
YW52YXMqLCBjb25zdCBXZWJSZWN0JikgPSAwOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmZiB0
aGUgZ2l2ZW4gZXZlbnQgd2FzIHVzZWQuCisgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZl
bnQoY29uc3QgV2ViSW5wdXRFdmVudCYpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXJD
bGllbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xs
YmFyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNjcm9s
bGJhckNsaWVudF9oCisjZGVmaW5lIFdlYlNjcm9sbGJhckNsaWVudF9oCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJTY3JvbGxiYXI7CitzdHJ1Y3QgV2ViUmVjdDsKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKK2NsYXNzIFdlYlNjcm9sbGJhckNsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChXZWJTY3JvbGxiYXIq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYlNjcm9s
bGJhciosIGNvbnN0IFdlYlJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJr
cyhXZWJTY3JvbGxiYXIqLCBXZWJWZWN0b3I8V2ViUmVjdD4qKSBjb25zdCA9IDA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlRoZW1lRW5naW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJUaGVtZUVuZ2luZS5oCShyZXZpc2lvbiA1OTA4MSkKKysrIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViVGhlbWVFbmdpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNDQgKzc2LDYgQEAg
cHVibGljOgogICAgICAgICBXZWJDYW52YXMqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xh
c3NpY1N0YXRlLAogICAgICAgICBjb25zdCBXZWJSZWN0JikgPSAwOwogI2VuZGlmCi0KLSAgICAv
LyBXZWJUaGVtZUVuZ2luZSB3YXMgb3JpZ2luYWxseSB1c2VkIG9ubHkgb24gV2luZG93cywgaGVu
Y2UgaXRzIHBsYXRmb3JtLQotICAgIC8vIHNwZWNpZmljIHBhcmFtZXRlcnMuICBUaGlzIGlzIG5l
dyBjcm9zcy1wbGF0Zm9ybSB0aGVtaW5nIEFQSSwgYW5kIHdlJ2xsCi0gICAgLy8gc3dpdGNoIHRo
ZSBjb2RlIHRvIHVzaW5nIHRoZXNlIEFQSXMgb24gYWxsIHBsYXRmb3JtcyBpbnN0ZWFkLgotICAg
IGVudW0gUGFydCB7Ci0gICAgICAgIFBhcnRTY3JvbGxiYXJEb3duQXJyb3csCi0gICAgICAgIFBh
cnRTY3JvbGxiYXJMZWZ0QXJyb3csCi0gICAgICAgIFBhcnRTY3JvbGxiYXJSaWdodEFycm93LAot
ICAgICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJvdywKLSAgICAgICAgUGFydFNjcm9sbGJhckhvcml6
b250YWxUaHVtYiwKLSAgICAgICAgUGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWIsCi0gICAgICAg
IFBhcnRTY3JvbGxiYXJIb3JpenRvbmFsVHJhY2ssCi0gICAgICAgIFBhcnRTY3JvbGxiYXJWZXJ0
aWNhbFRyYWNrLAotICAgIH07Ci0KLSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgU3RhdGVEaXNh
YmxlZCwKLSAgICAgICAgU3RhdGVIb3QsCi0gICAgICAgIFN0YXRlSG92ZXIsCi0gICAgICAgIFN0
YXRlTm9ybWFsLAotICAgICAgICBTdGF0ZVByZXNzZWQsCi0gICAgfTsKLQotICAgIHN0cnVjdCBT
Y3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHsKLSAgICAgICAgaW50IGFsaWduWDsKLSAgICAgICAg
aW50IGFsaWduWTsKLSAgICB9OwotCi0gICAgdW5pb24gRXh0cmFQYXJhbXMgewotICAgICAgICBT
Y3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHNjcm9sbGJhclRyYWNrOwotICAgIH07Ci0KLSAgICAv
LyBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiB0aGVtZSBjb21wb25lbnQuICBGb3IgdmFyaWFi
bGUgc2l6ZWQgaXRlbXMKLSAgICAvLyBsaWtlIHZlcnRpY2FsIHNjcm9sbGJhciB0cmFja3MsIHRo
ZSB3aWR0aCB3aWxsIGJlIHRoZSByZXF1aXJlZCB3aWR0aCBvZgotICAgIC8vIHRoZSB0cmFjayB3
aGlsZSB0aGUgaGVpZ2h0IHdpbGwgYmUgdGhlIG1pbmltdW0gaGVpZ2h0LgotICAgIHZpcnR1YWwg
dm9pZCBnZXRTaXplKFBhcnQsIFdlYlNpemUqKSB7fQotICAgIHZpcnR1YWwgdm9pZCBwYWludCgK
LSAgICAgICAgV2ViQ2FudmFzKiwgUGFydCwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBjb25zdCBF
eHRyYVBhcmFtcyYpIHt9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAkocmV2aXNpb24gNTkwODEp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiV2ViSW5wdXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25QcmVz
ZW50ZXIuaCIKKyNpbmNsdWRlICJXZWJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJXZWJUZXh0QWZm
aW5pdHkuaCIKICNpbmNsdWRlICJXZWJUZXh0Q2FzZVNlbnNpdGl2aXR5LmgiCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTI5MSw2ICsyOTIsMTQgQEAgQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJOb3RpZmljYQogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJO
b3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25EZW5pZWQsIE5vdGlmaWNhdGlvblByZXNl
bnRlcjo6UGVybWlzc2lvbkRlbmllZCk7CiAjZW5kaWYKIAorQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXZWJTY3JvbGxiYXI6Okhvcml6b250YWwsIEhvcml6b250YWxTY3JvbGxiYXIpOwor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6OlZlcnRpY2FsLCBWZXJ0
aWNhbFNjcm9sbGJhcik7CisKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViU2Nyb2xs
YmFyOjpTY3JvbGxCeUxpbmUsIFNjcm9sbEJ5TGluZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYlNjcm9sbGJhcjo6U2Nyb2xsQnlQYWdlLCBTY3JvbGxCeVBhZ2UpOworQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6OlNjcm9sbEJ5RG9jdW1lbnQsIFNj
cm9sbEJ5RG9jdW1lbnQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxi
YXI6OlNjcm9sbEJ5UGl4ZWwsIFNjcm9sbEJ5UGl4ZWwpOworCiBDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYlRleHRBZmZpbml0eVVwc3RyZWFtLCBVUFNUUkVBTSk7CiBDT01QSUxFX0FT
U0VSVF9NQVRDSElOR19FTlVNKFdlYlRleHRBZmZpbml0eURvd25zdHJlYW0sIERPV05TVFJFQU0p
OwogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJTY3JvbGxiYXJJbXBsLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgor
I2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5j
bHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJXZWJDYW52YXMuaCIKKyNpbmNsdWRlICJX
ZWJJbnB1dEV2ZW50LmgiCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCIKKyNp
bmNsdWRlICJXZWJSZWN0LmgiCisjaW5jbHVkZSAiV2ViU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5j
bHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViU2Nyb2xsYmFyKiBXZWJTY3JvbGxiYXI6OmNyZWF0ZShXZWJTY3JvbGxiYXJDbGll
bnQqIGNsaWVudCwgT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgcmV0dXJuIG5ldyBX
ZWJTY3JvbGxiYXJJbXBsKGNsaWVudCwgb3JpZW50YXRpb24pOworfQorCitpbnQgV2ViU2Nyb2xs
YmFyOjpkZWZhdWx0VGhpY2tuZXNzKCkKK3sKKyAgICByZXR1cm4gU2Nyb2xsYmFyVGhlbWU6Om5h
dGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOworfQorCitXZWJTY3JvbGxiYXJJbXBs
OjpXZWJTY3JvbGxiYXJJbXBsKFdlYlNjcm9sbGJhckNsaWVudCogY2xpZW50LCBPcmllbnRhdGlv
biBvcmllbnRhdGlvbikKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBtX3Njcm9sbGJh
ciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKAorICAgICAgICBzdGF0aWNfY2Fz
dDxTY3JvbGxiYXJDbGllbnQqPih0aGlzKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFy
T3JpZW50YXRpb24+KG9yaWVudGF0aW9uKSwKKyAgICAgICAgUmVndWxhclNjcm9sbGJhcik7Cit9
CisKK1dlYlNjcm9sbGJhckltcGw6On5XZWJTY3JvbGxiYXJJbXBsKCkKK3sKK30KKwordm9pZCBX
ZWJTY3JvbGxiYXJJbXBsOjpzZXRMb2NhdGlvbihjb25zdCBXZWJSZWN0JiByZWN0KQoreworICAg
IFdlYkNvcmU6OkludFJlY3Qgb2xkUmVjdCA9IG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKKyAg
ICBtX3Njcm9sbGJhci0+c2V0RnJhbWVSZWN0KHJlY3QpOworICAgIGlmIChXZWJSZWN0KG9sZFJl
Y3QpICE9IHJlY3QpCisgICAgICBtX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOworCisgICAgaW50
IGxlbmd0aCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxi
YXIgPyBtX3Njcm9sbGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xsYmFyLT5oZWlnaHQoKTsKKyAgICBp
bnQgcGFnZVN0ZXAgPSBtYXgobWF4PGludD4obGVuZ3RoICogU2Nyb2xsYmFyOjptaW5GcmFjdGlv
blRvU3RlcFdoZW5QYWdpbmcoKSwgbGVuZ3RoIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2Vl
blBhZ2VzKCkpLCAxKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhl
bHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgbV9zY3JvbGxiYXItPnNldFByb3BvcnRp
b24obGVuZ3RoLCBtX3Njcm9sbGJhci0+dG90YWxTaXplKCkpOworfQorCitpbnQgV2ViU2Nyb2xs
YmFySW1wbDo6dmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGJhci0+dmFsdWUo
KTsKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9zaXRpb24pCit7
CisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBvc2l0aW9uKTsKK30KKwordm9pZCBXZWJTY3Jv
bGxiYXJJbXBsOjpzZXRUb3RhbFNpemUoaW50IHNpemUpCit7CisgICAgaW50IGxlbmd0aCA9IG1f
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX3Njcm9s
bGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xsYmFyLT5oZWlnaHQoKTsKKyAgICBtX3Njcm9sbGJhci0+
c2V0UHJvcG9ydGlvbihsZW5ndGgsIHNpemUpOworfQorCit2b2lkIFdlYlNjcm9sbGJhckltcGw6
OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rp
b24gZGlyOworICAgIGJvb2wgaG9yaXpvbnRhbCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXI7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxGb3J3
YXJkKQorICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3du
OworICAgIGVsc2UKKyAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3Jv
bGxVcDsKKyAgICBtX3Njcm9sbGJhci0+c2Nyb2xsKGRpciwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgbXVsdGlwbGllcik7Cit9CisKK3ZvaWQg
V2ViU2Nyb2xsYmFySW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3Qm
IHJlY3QpCit7CisjaWYgV0VCS0lUX1VTSU5HX0NHCisgICAgR3JhcGhpY3NDb250ZXh0IGdjKGNh
bnZhcyk7CisjZWxpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIFBsYXRmb3JtQ29udGV4dFNraWEg
Y29udGV4dChjYW52YXMpOworCisgICAgLy8gUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgaXMgYWN0
dWFsbHkgYSBwb2ludGVyIHRvIFBsYXRmb3JtQ29udGV4dFNraWEKKyAgICBHcmFwaGljc0NvbnRl
eHQgZ2MocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KCZjb250ZXh0
KSk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7CisjZW5kaWYKKworICAgIG1fc2Nyb2xs
YmFyLT5wYWludCgmZ2MsIHJlY3QpOworfQorCitib29sIFdlYlNjcm9sbGJhckltcGw6OmhhbmRs
ZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCit7CisgICAgc3dpdGNoIChl
dmVudC50eXBlKSB7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZURvd246CisgICAgICAg
IHJldHVybiBvbk1vdXNlRG93bihldmVudCk7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3Vz
ZVVwOgorICAgICAgICByZXR1cm4gb25Nb3VzZVVwKGV2ZW50KTsKKyAgICBjYXNlIFdlYklucHV0
RXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgcmV0dXJuIG9uTW91c2VNb3ZlKGV2ZW50KTsKKyAg
ICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlTGVhdmU6CisgICAgICAgIHJldHVybiBvbk1vdXNl
TGVhdmUoZXZlbnQpOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VXaGVlbDoKKyAgICAg
ICAgcmV0dXJuIG9uTW91c2VXaGVlbChldmVudCk7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpL
ZXlEb3duOgorICAgICAgICByZXR1cm4gb25LZXlEb3duKGV2ZW50KTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VEb3duKGNvbnN0
IFdlYklucHV0RXZlbnQmIGV2ZW50KQoreworICAgIFdlYk1vdXNlRXZlbnQgbW91c2Vkb3duID0g
KnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmZXZlbnQpOworICAgIGlmICghbV9z
Y3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1vdXNlZG93bi54LCBtb3VzZWRvd24ueSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgbW91c2Vkb3duLnggLT0gbV9z
Y3JvbGxiYXItPngoKTsKKyAgICAgICAgICAgIG1vdXNlZG93bi55IC09IG1fc2Nyb2xsYmFyLT55
KCk7CisgICAgICAgICAgICBtX3Njcm9sbGJhci0+bW91c2VEb3duKFBsYXRmb3JtTW91c2VFdmVu
dEJ1aWxkZXIobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNlZG93bikpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKworYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlVXAo
Y29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5wcmVz
c2VkUGFydCgpID09IE5vUGFydCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IG1fc2Nyb2xsYmFyLT5tb3VzZVVwKCk7Cit9CisKK2Jvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25N
b3VzZU1vdmUoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCit7CisgICAgICAgIFdlYk1vdXNl
RXZlbnQgbW91c2Vtb3ZlID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmZXZl
bnQpOworICAgICAgICBpZiAobV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1vdXNl
bW92ZS54LCBtb3VzZW1vdmUueSkKKyAgICAgICAgICAgIHx8IG1fc2Nyb2xsYmFyLT5wcmVzc2Vk
UGFydCgpICE9IE5vUGFydCkgeworICAgICAgICAgICAgbW91c2Vtb3ZlLnggLT0gbV9zY3JvbGxi
YXItPngoKTsKKyAgICAgICAgICAgIG1vdXNlbW92ZS55IC09IG1fc2Nyb2xsYmFyLT55KCk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9zY3JvbGxiYXItPm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2
ZW50QnVpbGRlcihtX3Njcm9sbGJhci5nZXQoKSwgbW91c2Vtb3ZlKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobV9zY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gTm9QYXJ0KQorICAgICAg
ICAgICAgbV9zY3JvbGxiYXItPm1vdXNlRXhpdGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VMZWF2ZShjb25zdCBXZWJJbnB1dEV2ZW50
JiBldmVudCkKK3sKKyAgICBpZiAobV9zY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9zY3JvbGxiYXItPm1vdXNl
RXhpdGVkKCk7Cit9CisKK2Jvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVsKGNvbnN0
IFdlYklucHV0RXZlbnQmIGV2ZW50KQoreworICAgICAgICAvLyBTYW1lIGxvZ2ljIGFzIGluIFNj
cm9sbHZpZXcuY3BwLiAgSWYgd2UgY2FuIG1vdmUgYXQgYWxsLCB3ZSdsbCBhY2NlcHQgdGhlIGV2
ZW50LgorICAgICAgICBXZWJNb3VzZVdoZWVsRXZlbnQgbW91c2V3aGVlbCA9ICpzdGF0aWNfY2Fz
dDxjb25zdCBXZWJNb3VzZVdoZWVsRXZlbnQqPigmZXZlbnQpOworICAgICAgICBpbnQgbWF4U2Ny
b2xsRGVsdGEgPSBtX3Njcm9sbGJhci0+bWF4aW11bSgpIC0gbV9zY3JvbGxiYXItPnZhbHVlKCk7
CisgICAgICAgIGZsb2F0IGRlbHRhID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IG1vdXNld2hlZWwuZGVsdGFYIDogbW91c2V3aGVlbC5kZWx0YVk7
CisgICAgICAgIGlmICgoZGVsdGEgPCAwICYmIG1heFNjcm9sbERlbHRhID4gMCkgfHwgKGRlbHRh
ID4gMCAmJiBtX3Njcm9sbGJhci0+dmFsdWUoKSA+IDApKSB7CisgICAgICAgICAgICBpZiAobW91
c2V3aGVlbC5zY3JvbGxCeVBhZ2UpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9zY3JvbGxi
YXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpOworICAgICAgICAgICAgICAg
IGJvb2wgbmVnYXRpdmUgPSBkZWx0YSA8IDA7CisgICAgICAgICAgICAgICAgZGVsdGEgPSBtYXgo
bWF4PGludD4obV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkgKiBTY3JvbGxiYXI6Om1pbkZyYWN0
aW9uVG9TdGVwV2hlblBhZ2luZygpLCBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSAtIFNjcm9s
bGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwgMSk7CisgICAgICAgICAgICAgICAgaWYg
KG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAgICBkZWx0YSAqPSAtMTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShtX3Njcm9sbGJhci0+dmFsdWUo
KSAtIGRlbHRhKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCitib29sIFdlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bihj
b25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sKKyAgICAgICAgV2ViS2V5Ym9hcmRFdmVudCBr
ZXlib2FyZCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJLZXlib2FyZEV2ZW50Kj4oJmV2ZW50KTsK
KyAgICAgICAgaW50IGtleUNvZGU7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gZHVwbGljYXRlIHRo
aXMgbG9naWMgZnJvbSBXZWJWaWV3SW1wbCBiZWNhdXNlIHRoZXJlIGl0IHVzZXMKKyAgICAgICAg
Ly8gQ2hhciBhbmQgUmF3S2V5RG93biBldmVudHMsIHdoaWNoIGRvbid0IGV4aXN0IGF0IHRoaXMg
cG9pbnQuCisgICAgICAgIGlmIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZX1NQQUNF
KQorICAgICAgICAgICAga2V5Q29kZSA9ICgoa2V5Ym9hcmQubW9kaWZpZXJzICYgV2ViSW5wdXRF
dmVudDo6U2hpZnRLZXkpID8gVktFWV9QUklPUiA6IFZLRVlfTkVYVCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKGtleWJvYXJkLm1vZGlmaWVycyA9PSBXZWJJbnB1dEV2ZW50OjpD
b250cm9sS2V5KSB7CisgICAgICAgICAgICAgICAgLy8gTWF0Y2ggRkYgYmVoYXZpb3IgaW4gdGhl
IHNlbnNlIHRoYXQgQ3RybCtob21lL2VuZCBhcmUgdGhlIG9ubHkgQ3RybAorICAgICAgICAgICAg
ICAgIC8vIGtleSBjb21iaW5hdGlvbnMgd2hpY2ggYWZmZWN0IHNjcm9sbGluZy4gU2FmYXJpIGlz
IGJ1Z2d5IGluIHRoZQorICAgICAgICAgICAgICAgIC8vIHNlbnNlIHRoYXQgaXQgc2Nyb2xscyB0
aGUgcGFnZSBmb3IgYWxsIEN0cmwrc2Nyb2xsaW5nIGtleQorICAgICAgICAgICAgICAgIC8vIGNv
bWJpbmF0aW9ucy4gRm9yIGUuZy4gQ3RybCtwZ3VwL3BnZG4vdXAvZG93biwgZXRjLgorICAgICAg
ICAgICAgICAgIHN3aXRjaCAoa2V5Ym9hcmQud2luZG93c0tleUNvZGUpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIFZLRVlfSE9NRToKKyAgICAgICAgICAgICAgICBjYXNlIFZLRVlfRU5EOgorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQuaXNTeXN0ZW1LZXkgfHwgKGtleWJvYXJk
Lm1vZGlmaWVycyAmIFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGtleUNvZGUgPSBrZXlib2FyZC53aW5kb3dzS2V5
Q29kZTsKKyAgICAgICAgfQorICAgICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24gc2Nyb2xs
RGlyZWN0aW9uOworICAgICAgICBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFu
dWxhcml0eTsKKyAgICAgICAgaWYgKFdlYlZpZXdJbXBsOjptYXBLZXlDb2RlRm9yU2Nyb2xsKGtl
eUNvZGUsICZzY3JvbGxEaXJlY3Rpb24sICZzY3JvbGxHcmFudWxhcml0eSkpIHsKKyAgICAgICAg
ICAgIC8vIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHNjcm9sbCBkaXJlY3Rpb24gd2Fzbid0IGNvbXBh
dGlibGUgd2l0aCB0aGlzIHNjcm9sbGJhci4KKyAgICAgICAgICAgIHJldHVybiBtX3Njcm9sbGJh
ci0+c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHkpOworICAgICAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYlNjcm9sbGJhckltcGw6OnZhbHVlQ2hh
bmdlZChXZWJDb3JlOjpTY3JvbGxiYXIqKQoreworICAgIG1fY2xpZW50LT52YWx1ZUNoYW5nZWQo
dGhpcyk7Cit9CisKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6aW52YWxpZGF0ZVNjcm9sbGJhclJl
Y3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sK
KyAgICBXZWJSZWN0IHdlYnJlY3QocmVjdCk7CisgICAgd2VicmVjdC54ICs9IG1fc2Nyb2xsYmFy
LT54KCk7CisgICAgd2VicmVjdC55ICs9IG1fc2Nyb2xsYmFyLT55KCk7CisgICAgbV9jbGllbnQt
PmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KHRoaXMsIHdlYnJlY3QpOworfQorCitib29sIFdlYlNj
cm9sbGJhckltcGw6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6Z2V0VGlja21h
cmtzKFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgdGlja21hcmtzKSBjb25zdAoreworICAgIFdl
YlZlY3RvcjxXZWJSZWN0PiB0aWNrczsKKyAgICBtX2NsaWVudC0+Z2V0VGlja21hcmtzKGNvbnN0
X2Nhc3Q8V2ViU2Nyb2xsYmFySW1wbCo+KHRoaXMpLCAmdGlja3MpOworICAgIHRpY2ttYXJrcy5y
ZXNpemUodGlja3Muc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpY2tzLnNp
emUoKTsgKytpKQorICAgICAgICB0aWNrbWFya3NbaV0gPSB0aWNrc1tpXTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhcklt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwu
aAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTY3JvbGxiYXJJbXBsX2gK
KyNkZWZpbmUgV2ViU2Nyb2xsYmFySW1wbF9oCisKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQu
aCIKKyNpbmNsdWRlICJXZWJTY3JvbGxiYXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2Nyb2xsYmFyOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViU2Nyb2xsYmFySW1wbCA6IHB1YmxpYyBXZWJTY3JvbGxiYXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVu
dCB7CitwdWJsaWM6CisgICAgV2ViU2Nyb2xsYmFySW1wbChXZWJTY3JvbGxiYXJDbGllbnQqLCBP
cmllbnRhdGlvbiBvcmllbnRhdGlvbik7CisgICAgfldlYlNjcm9sbGJhckltcGwoKTsKKworICAg
IC8vIFdlYktpdDo6V2ViU2Nyb2xsYmFyIG1ldGhvZHMKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TG9j
YXRpb24oY29uc3QgV2ViUmVjdCYpOworICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGludCBwb3NpdGlvbik7CisgICAgdmlydHVhbCB2b2lk
IHNldFRvdGFsU2l6ZShpbnQgc2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbChTY3JvbGxE
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKKworICAgIC8vIFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudCBtZXRob2RzCisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hh
bmdlZChXZWJDb3JlOjpTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNj
cm9sbGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldFRpY2tt
YXJrcyhWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBi
b29sIG9uTW91c2VEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KTsKKyAgICBib29sIG9u
TW91c2VVcChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCk7CisgICAgYm9vbCBvbk1vdXNlTW92
ZShjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCk7CisgICAgYm9vbCBvbk1vdXNlTGVhdmUoY29u
c3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpOworICAgIGJvb2wgb25Nb3VzZVdoZWVsKGNvbnN0IFdl
YklucHV0RXZlbnQmIGV2ZW50KTsKKyAgICBib29sIG9uS2V5RG93bihjb25zdCBXZWJJbnB1dEV2
ZW50JiBldmVudCk7CisKKyAgICBXZWJTY3JvbGxiYXJDbGllbnQqIG1fY2xpZW50OworCisgICAg
UmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAkocmV2aXNpb24gNTkwODEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgwLDQ1ICs3ODAsNTMgQEAgYm9vbCBXZWJWaWV3SW1wbDo6
c2Nyb2xsVmlld1dpdGhLZXlib2FyZAogewogICAgIFNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJl
Y3Rpb247CiAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHk7CisgICAgaWYg
KCFtYXBLZXlDb2RlRm9yU2Nyb2xsKGtleUNvZGUsICZzY3JvbGxEaXJlY3Rpb24sICZzY3JvbGxH
cmFudWxhcml0eSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcHJvcGFnYXRl
U2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHkpOworfQogCitib29sIFdl
YlZpZXdJbXBsOjptYXBLZXlDb2RlRm9yU2Nyb2xsKGludCBrZXlDb2RlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24qIHNjcm9s
bERpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6U2Nyb2xsR3JhbnVsYXJpdHkqIHNjcm9sbEdyYW51bGFyaXR5KQorewogICAgIHN3aXRjaCAo
a2V5Q29kZSkgewogICAgIGNhc2UgVktFWV9MRUZUOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24g
PSBTY3JvbGxMZWZ0OwotICAgICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5TGluZTsK
KyAgICAgICAgKnNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbExlZnQ7CisgICAgICAgICpzY3JvbGxH
cmFudWxhcml0eSA9IFNjcm9sbEJ5TGluZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS0VZ
X1JJR0hUOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxSaWdodDsKLSAgICAgICAg
c2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmU7CisgICAgICAgICpzY3JvbGxEaXJlY3Rp
b24gPSBTY3JvbGxSaWdodDsKKyAgICAgICAgKnNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlM
aW5lOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZLRVlfVVA6Ci0gICAgICAgIHNjcm9sbERp
cmVjdGlvbiA9IFNjcm9sbFVwOwotICAgICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5
TGluZTsKKyAgICAgICAgKnNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFVwOworICAgICAgICAqc2Ny
b2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
VktFWV9ET1dOOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEb3duOwotICAgICAg
ICBzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5TGluZTsKKyAgICAgICAgKnNjcm9sbERpcmVj
dGlvbiA9IFNjcm9sbERvd247CisgICAgICAgICpzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5
TGluZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS0VZX0hPTUU6Ci0gICAgICAgIHNjcm9s
bERpcmVjdGlvbiA9IFNjcm9sbFVwOwotICAgICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9s
bEJ5RG9jdW1lbnQ7CisgICAgICAgICpzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxVcDsKKyAgICAg
ICAgKnNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlEb2N1bWVudDsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBWS0VZX0VORDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRG93
bjsKLSAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeURvY3VtZW50OworICAgICAg
ICAqc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRG93bjsKKyAgICAgICAgKnNjcm9sbEdyYW51bGFy
aXR5ID0gU2Nyb2xsQnlEb2N1bWVudDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS0VZX1BS
SU9SOiAgLy8gcGFnZSB1cAotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxVcDsKLSAg
ICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBhZ2U7CisgICAgICAgICpzY3JvbGxE
aXJlY3Rpb24gPSBTY3JvbGxVcDsKKyAgICAgICAgKnNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xs
QnlQYWdlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZLRVlfTkVYVDogIC8vIHBhZ2UgZG93
bgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEb3duOwotICAgICAgICBzY3JvbGxH
cmFudWxhcml0eSA9IFNjcm9sbEJ5UGFnZTsKKyAgICAgICAgKnNjcm9sbERpcmVjdGlvbiA9IFNj
cm9sbERvd247CisgICAgICAgICpzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5UGFnZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIHJldHVybiBwcm9wYWdhdGVTY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFu
dWxhcml0eSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmhpZGVT
ZWxlY3RQb3B1cCgpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiA1
OTA4MSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEyLDYgKzMxMiwxMSBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpQb3B1cENvbnRh
aW5lciogc2VsZWN0UG9wdXAoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdFBvcHVwLmdldCgpOyB9
CiAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV2ZW50IGxlYWRzIHRvIHNjcm9sbGluZy4K
KyAgICBzdGF0aWMgYm9vbCBtYXBLZXlDb2RlRm9yU2Nyb2xsKGludCBrZXlDb2RlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24qIHNj
cm9sbERpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6U2Nyb2xsR3JhbnVsYXJpdHkqIHNjcm9sbEdyYW51bGFyaXR5KTsKKwogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgV2ViVmlldzsgIC8vIFNvIFdlYlZpZXc6OkNyZWF0ZSBjYW4gY2FsbCBv
dXIgY29uc3RydWN0b3IKICAgICBmcmllbmQgY2xhc3MgV1RGOjpSZWZDb3VudGVkPFdlYlZpZXdJ
bXBsPjsK
</data>
<flag name="review"
          id="39858"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>