<?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>40608</bug_id>
          
          <creation_ts>2010-06-14 20:19:40 -0700</creation_ts>
          <short_desc>[chromium]Refactor input method related APIs.</short_desc>
          <delta_ts>2010-06-19 06:32:51 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="James Su">suzhe</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>hbono</cc>
    
    <cc>jshin</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>238218</commentid>
    <comment_count>0</comment_count>
    <who name="James Su">suzhe</who>
    <bug_when>2010-06-14 20:19:40 -0700</bug_when>
    <thetext>In order to fix following chromium issues and for future input method feature enhancements, some refactory should be done for input method related APIs.
http://crbug.com/23219
http://crbug.com/41876
http://crbug.com/44529
http://crbug.com/46326

New API contains:
1. Full support of WebKit&apos;s CompositionUnderline feature
2. Ability to get text input type of focused node, rather than just true and false.
3. Split handleCompositionEvent() and queryInputMethodStatus() methods into multiple independent methods to make them clearer and simpler.
4. Move all input method related things into WebWidget/WebWidgetClient

I&apos;ll upload the patch shortly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238230</commentid>
    <comment_count>1</comment_count>
      <attachid>58749</attachid>
    <who name="James Su">suzhe</who>
    <bug_when>2010-06-14 20:41:15 -0700</bug_when>
    <thetext>Created attachment 58749
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238233</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-14 21:28:17 -0700</bug_when>
    <thetext>Attachment 58749 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3334147</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238236</commentid>
    <comment_count>3</comment_count>
      <attachid>58749</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-06-14 21:44:57 -0700</bug_when>
    <thetext>Comment on attachment 58749
Proposed patch.

WebCore/page/FocusController.cpp:599
 +      // input method can still have chance to finish the ongoing composition
nit: &quot;can still have _a_ chance to...&quot;

WebCore/page/FocusController.cpp: 
 +          m_page-&gt;editorClient()-&gt;setInputMethodState(false);
can you please explain why you are removing these calls to setInputMethodState?
it is not obvious from the context here.

WebKit/chromium/public/WebCompositionCommand.h:36
 +  // DEPRECIATED. It&apos;s not used anymore.
nit: DEPRECIATED -&gt; DEPRECATED, and &quot;It&apos;s not used anymore&quot; is redundant
with that, so you can just leave the comment as &quot;// DEPRECATED&quot;
WebKit/chromium/public/WebCompositionUnderline.h:41
 +  class WebCompositionUnderline {
this should be a struct since all of its member variables are public

WebKit/chromium/public/WebCompositionUnderline.h:40
 +  // CompositionUnderline struct.
we generally avoid mentioning WebCore in API comments since the point
of the WebKit API is to make it unnecessary to know anything about
WebCore.

WebKit/chromium/public/WebCompositionUnderline.h:47
 +          , thick(0) { }
thick is a bool type, so please use false instead of 0.

WebKit/chromium/public/WebCompositionUnderline.h:68
 +    + LF
webkit files should not have svn:eol-style

WebKit/chromium/public/WebTextInputType.h:58
 +    + LF
no svn:eol-style

WebKit/chromium/public/WebViewClient.h:128
 +      // DEPRECIATED: replaced by WebWidgetClient::resetInputMethod().
nit: DEPRECIATED -&gt; DEPRECATED

WebKit/chromium/public/WebWidget.h:82
 +      // DEPRECIATED. It&apos;s replaced by setComposition() and confirmComposition().
DEPRECIATED -&gt; DEPRECATED

WebKit/chromium/public/WebWidget.h:100
 +      // Called to inform the WebWidget to Confirm an ongoing composition.
nit: Confirm -&gt; confirm

WebKit/chromium/public/WebWidget.h:104
 +      // DEPRECIATED. It&apos;s replaced by textInputType() and caretBounds().
DEPRECIATED -&gt; DEPRECATED

WebKit/chromium/public/WebWidget.h:112
 +      virtual WebRect caretBounds() = 0;
should this be named caretOrSelectionBounds?

WebKit/chromium/src/WebCompositionUnderlineConversion.h:44
 +  class CompositionUnderlineBuilder : public WebCore::CompositionUnderline {
this file should be named after this class, and you should create a separate file for each class.

WebKit/chromium/src/WebPopupMenuImpl.cpp:233
 +  // DEPRECIATED, will be removed later.
nit: DEPRECIATED -&gt; DEPRECATED

WebKit/chromium/src/WebPopupMenuImpl.cpp:253
 +  // DEPRECIATED, will be removed later.
ditto

WebKit/chromium/src/WebPopupMenuImpl.h:70
 +      // DEPRECIATED, will be removed later.
ditto

WebKit/chromium/src/WebPopupMenuImpl.h:80
 +      // DEPRECIATED, will be removed later.
ditto

WebKit/chromium/src/WebViewImpl.cpp:1195
 +  // DEPRECIATED, will be removed later.
ditto

WebKit/chromium/src/WebViewImpl.cpp:1211
 +          WebVector&lt;WebCompositionUnderline&gt; underlines(static_cast&lt;size_t&gt;(3));
can you also do 3U instead of static_cast&lt;size_t&gt;(3) ?

WebKit/chromium/src/WebViewImpl.cpp:1227
 +      if (command == WebKit::WebCompositionCommandDiscard) {
nit: webkit style is to not use {}&apos;s around single line statements

WebKit/chromium/src/WebViewImpl.cpp:1268
 +      if (!text.length() || m_suppressNextKeypressEvent) {
can you instead write text.isEmpty()?

WebKit/chromium/src/WebViewImpl.cpp:1314
 +  // DEPRECIATED, will be removed later.
ditto

WebKit/chromium/src/WebViewImpl.cpp:1290
 +  bool WebViewImpl::confirmComposition()
perhaps it would be helpful if confirmComposition took a WebNode corresponding
to the node being edited?  that way you could confirm that the same node is
still being edited when this method is called?  that might be superior to
having to guess.

WebKit/chromium/src/WebViewImpl.cpp:1370
 +      if (controller-&gt;isInPasswordField()) {
same nit about excluding {}s around single line statements

WebKit/chromium/src/WebViewImpl.cpp:1372
 +      } else if (node-&gt;shouldUseInputMethod()) {
ditto

WebKit/chromium/src/WebViewImpl.cpp:1393
 +      if (controller-&gt;isCaret()) {
same nit about {}s

WebKit/chromium/src/WebViewImpl.h:94
 +      // DEPRECIATED, will be removed later.
ditto

WebKit/chromium/src/WebViewImpl.h:107
 +      // DEPRECIATED, will be removed later.
ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238251</commentid>
    <comment_count>4</comment_count>
      <attachid>58756</attachid>
    <who name="James Su">suzhe</who>
    <bug_when>2010-06-14 23:29:36 -0700</bug_when>
    <thetext>Created attachment 58756
Updated patch according to review feedbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238252</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-14 23:31:33 -0700</bug_when>
    <thetext>Attachment 58756 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/CompositionUnderlineVectorBuilder.cpp:32:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/src/CompositionUnderlineVectorBuilder.cpp:33:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 18 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>238254</commentid>
    <comment_count>6</comment_count>
      <attachid>58757</attachid>
    <who name="James Su">suzhe</who>
    <bug_when>2010-06-14 23:35:52 -0700</bug_when>
    <thetext>Created attachment 58757
Fix code style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238257</commentid>
    <comment_count>7</comment_count>
    <who name="James Su">suzhe</who>
    <bug_when>2010-06-14 23:44:31 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 58749 [details])
&gt; WebCore/page/FocusController.cpp:599
&gt;  +      // input method can still have chance to finish the ongoing composition
&gt; nit: &quot;can still have _a_ chance to...&quot;
Done

&gt; 
&gt; WebCore/page/FocusController.cpp: 
&gt;  +          m_page-&gt;editorClient()-&gt;setInputMethodState(false);
&gt; can you please explain why you are removing these calls to setInputMethodState?
&gt; it is not obvious from the context here.
It&apos;s only necessary to call this method once in FocusController::setFocusedNode(). As it&apos;s already called above, this call is redundant.

&gt; 
&gt; WebKit/chromium/public/WebCompositionCommand.h:36
&gt;  +  // DEPRECIATED. It&apos;s not used anymore.
&gt; nit: DEPRECIATED -&gt; DEPRECATED, and &quot;It&apos;s not used anymore&quot; is redundant
&gt; with that, so you can just leave the comment as &quot;// DEPRECATED&quot;
Done

&gt; WebKit/chromium/public/WebCompositionUnderline.h:41
&gt;  +  class WebCompositionUnderline {
&gt; this should be a struct since all of its member variables are public
Done

&gt; 
&gt; WebKit/chromium/public/WebCompositionUnderline.h:40
&gt;  +  // CompositionUnderline struct.
&gt; we generally avoid mentioning WebCore in API comments since the point
&gt; of the WebKit API is to make it unnecessary to know anything about
&gt; WebCore.
Done

&gt; 
&gt; WebKit/chromium/public/WebCompositionUnderline.h:47
&gt;  +          , thick(0) { }
&gt; thick is a bool type, so please use false instead of 0.
Done

&gt; 
&gt; WebKit/chromium/public/WebCompositionUnderline.h:68
&gt;  +    + LF
&gt; webkit files should not have svn:eol-style
Done

&gt; 
&gt; WebKit/chromium/public/WebTextInputType.h:58
&gt;  +    + LF
&gt; no svn:eol-style
Done

&gt; 
&gt; WebKit/chromium/public/WebViewClient.h:128
&gt;  +      // DEPRECIATED: replaced by WebWidgetClient::resetInputMethod().
&gt; nit: DEPRECIATED -&gt; DEPRECATED
&gt; 
Done

&gt; WebKit/chromium/public/WebWidget.h:82
&gt;  +      // DEPRECIATED. It&apos;s replaced by setComposition() and confirmComposition().
&gt; DEPRECIATED -&gt; DEPRECATED
&gt; 
Done

&gt; WebKit/chromium/public/WebWidget.h:100
&gt;  +      // Called to inform the WebWidget to Confirm an ongoing composition.
&gt; nit: Confirm -&gt; confirm
&gt; 
Done

&gt; WebKit/chromium/public/WebWidget.h:104
&gt;  +      // DEPRECIATED. It&apos;s replaced by textInputType() and caretBounds().
&gt; DEPRECIATED -&gt; DEPRECATED
&gt; 
Done

&gt; WebKit/chromium/public/WebWidget.h:112
&gt;  +      virtual WebRect caretBounds() = 0;
&gt; should this be named caretOrSelectionBounds?
&gt; 
Done

&gt; WebKit/chromium/src/WebCompositionUnderlineConversion.h:44
&gt;  +  class CompositionUnderlineBuilder : public WebCore::CompositionUnderline {
&gt; this file should be named after this class, and you should create a separate file for each class.
Done

&gt; 
&gt; WebKit/chromium/src/WebPopupMenuImpl.cpp:233
&gt;  +  // DEPRECIATED, will be removed later.
&gt; nit: DEPRECIATED -&gt; DEPRECATED
Done

&gt; 
&gt; WebKit/chromium/src/WebPopupMenuImpl.cpp:253
&gt;  +  // DEPRECIATED, will be removed later.
&gt; ditto
Done

&gt; 
&gt; WebKit/chromium/src/WebPopupMenuImpl.h:70
&gt;  +      // DEPRECIATED, will be removed later.
&gt; ditto
Done

&gt; 
&gt; WebKit/chromium/src/WebPopupMenuImpl.h:80
&gt;  +      // DEPRECIATED, will be removed later.
&gt; ditto
Done

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.cpp:1195
&gt;  +  // DEPRECIATED, will be removed later.
&gt; ditto
Done

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.cpp:1211
&gt;  +          WebVector&lt;WebCompositionUnderline&gt; underlines(static_cast&lt;size_t&gt;(3));
&gt; can you also do 3U instead of static_cast&lt;size_t&gt;(3) ?
gcc doesn&apos;t like 3U here :(

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.cpp:1227
&gt;  +      if (command == WebKit::WebCompositionCommandDiscard) {
&gt; nit: webkit style is to not use {}&apos;s around single line statements
Done

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.cpp:1268
&gt;  +      if (!text.length() || m_suppressNextKeypressEvent) {
&gt; can you instead write text.isEmpty()?
Done

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.cpp:1314
&gt;  +  // DEPRECIATED, will be removed later.
&gt; ditto
Done

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.cpp:1290
&gt;  +  bool WebViewImpl::confirmComposition()
&gt; perhaps it would be helpful if confirmComposition took a WebNode corresponding
&gt; to the node being edited?  that way you could confirm that the same node is
&gt; still being edited when this method is called?  that might be superior to
&gt; having to guess.
Adding WebNode here would make chromium&apos;s code more complicated and make WebWidget depend on WebNode.

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.cpp:1370
&gt;  +      if (controller-&gt;isInPasswordField()) {
&gt; same nit about excluding {}s around single line statements
Done

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.cpp:1372
&gt;  +      } else if (node-&gt;shouldUseInputMethod()) {
&gt; ditto
Done

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.cpp:1393
&gt;  +      if (controller-&gt;isCaret()) {
&gt; same nit about {}s
Done

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.h:94
&gt;  +      // DEPRECIATED, will be removed later.
&gt; ditto
Done

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.h:107
&gt;  +      // DEPRECIATED, will be removed later.
&gt; ditto
Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238275</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-15 00:33:58 -0700</bug_when>
    <thetext>Attachment 58757 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3277173</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238276</commentid>
    <comment_count>9</comment_count>
      <attachid>58757</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-06-15 00:36:46 -0700</bug_when>
    <thetext>Comment on attachment 58757
Fix code style.

WebCore/page/FocusController.cpp:600
 +      // session.
FWIW, this sounds like a functional change, even though the ChangeLog says this isn&apos;t a functional change.

WebKit/chromium/src/WebViewImpl.h:100
 +      virtual bool setComposition(
Should this return more than just a bool?  For example, I think the cancel composition work would be easier if this returned an enum (COMPOSITION_SET, COMPOSITION_CANCELED, or KEYPRESS_CANCELED) or something.  A bool is probably fine if there&apos;s a way to query what the current composition text is (e.g., if a keydown is prevented, setComposition can return false and the render view can query the webview to see what the current composition text should be set to in the browser process).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238470</commentid>
    <comment_count>10</comment_count>
    <who name="James Su">suzhe</who>
    <bug_when>2010-06-15 10:57:25 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 58757 [details])
&gt; WebCore/page/FocusController.cpp:600
&gt;  +      // session.
&gt; FWIW, this sounds like a functional change, even though the ChangeLog says this isn&apos;t a functional change.
Or maybe I should say there is no new functionality?

&gt; 
&gt; WebKit/chromium/src/WebViewImpl.h:100
&gt;  +      virtual bool setComposition(
&gt; Should this return more than just a bool?  For example, I think the cancel composition work would be easier if this returned an enum (COMPOSITION_SET, COMPOSITION_CANCELED, or KEYPRESS_CANCELED) or something.  A bool is probably fine if there&apos;s a way to query what the current composition text is (e.g., if a keydown is prevented, setComposition can return false and the render view can query the webview to see what the current composition text should be set to in the browser process).
Returning boolean should be enough. This method should only return false when the input method has some composition text but the webkit can&apos;t accept it by any reason, then the only thing can be done is to cancel the input method&apos;s composition text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238611</commentid>
    <comment_count>11</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-06-15 16:48:04 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Returning boolean should be enough. This method should only return false when the input method has some composition text but the webkit can&apos;t accept it by any reason, then the only thing can be done is to cancel the input method&apos;s composition text.

Oh, I remembered why I wanted to return an enum.  Ojan suggested that we try to cancel each letter, rather than the whole composition if the site calls preventDefault().  I&apos;m not sure this is going to work on all platforms, so maybe there should be different return types for canceling the whole composition vs canceling a single character (in which case on OSX, we&apos;ll need to reset the composition state in the browser)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238612</commentid>
    <comment_count>12</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-06-15 16:48:27 -0700</bug_when>
    <thetext>Also, I think a bool is fine for now, we can refactor this later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238621</commentid>
    <comment_count>13</comment_count>
    <who name="James Su">suzhe</who>
    <bug_when>2010-06-15 17:04:17 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Returning boolean should be enough. This method should only return false when the input method has some composition text but the webkit can&apos;t accept it by any reason, then the only thing can be done is to cancel the input method&apos;s composition text.
&gt; 
&gt; Oh, I remembered why I wanted to return an enum.  Ojan suggested that we try to cancel each letter, rather than the whole composition if the site calls preventDefault().  I&apos;m not sure this is going to work on all platforms, so maybe there should be different return types for canceling the whole composition vs canceling a single character (in which case on OSX, we&apos;ll need to reset the composition state in the browser)?

I don&apos;t think it&apos;s possible to cancel individual letter of a composition session, because you can&apos;t know if the internal state of the input method will be changed by a key event, even the composition text stays unchanged. In another word, there is no way for us to let the input method revert to a previous middle state. The only thing we can do is to cancel the ongoing composition session in whole which will reset the input method to its initial state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238623</commentid>
    <comment_count>14</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-06-15 17:13:21 -0700</bug_when>
    <thetext>(In reply to comment #13)

&gt; I don&apos;t think it&apos;s possible to cancel individual letter of a composition session, because you can&apos;t know if the internal state of the input method will be changed by a key event, even the composition text stays unchanged. In another word, there is no way for us to let the input method revert to a previous middle state. The only thing we can do is to cancel the ongoing composition session in whole which will reset the input method to its initial state.

Ok, I&apos;m going to use that argument to close out http://crbug.com/9883 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239452</commentid>
    <comment_count>15</comment_count>
      <attachid>58757</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-06-17 10:20:32 -0700</bug_when>
    <thetext>Comment on attachment 58757
Fix code style.

WebKit/chromium/public/WebTextInputType.h:47
 +      // TODO(suzhe): Add more text input types when necessary, eg. Number,
nit: In WebKit style, use FIXME: instead of TODO(suzhe):

WebKit/chromium/src/WebViewImpl.cpp:1369
 +      // TODO(suzhe): Support more text input types when necessary, eg. Number,
same nit about FIXME: instead of TODO(suzhe):</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239454</commentid>
    <comment_count>16</comment_count>
      <attachid>59008</attachid>
    <who name="James Su">suzhe</who>
    <bug_when>2010-06-17 10:30:55 -0700</bug_when>
    <thetext>Created attachment 59008
Updated patch according to review feedbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239605</commentid>
    <comment_count>17</comment_count>
      <attachid>58757</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-17 15:29:03 -0700</bug_when>
    <thetext>Comment on attachment 58757
Fix code style.

Cleared Darin Fisher&apos;s review+ from obsolete attachment 58757 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239620</commentid>
    <comment_count>18</comment_count>
    <who name="James Su">suzhe</who>
    <bug_when>2010-06-17 16:13:23 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 58757 [details])
&gt; Cleared Darin Fisher&apos;s review+ from obsolete attachment 58757 [details] so that this bug does not appear in http://webkit.org/pending-commit.

What else should I do in order to commit the patch? Seems this bug is still in the list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240329</commentid>
    <comment_count>19</comment_count>
      <attachid>59008</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-19 06:32:45 -0700</bug_when>
    <thetext>Comment on attachment 59008
Updated patch according to review feedbacks.

Clearing flags on attachment: 59008

Committed r61484: &lt;http://trac.webkit.org/changeset/61484&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240330</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-19 06:32:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58749</attachid>
            <date>2010-06-14 20:41:15 -0700</date>
            <delta_ts>2010-06-14 23:29:36 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>refactor-chromium-input-method-apis.patch</filename>
            <type>text/plain</type>
            <size>34626</size>
            <attacher name="James Su">suzhe</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMTQgIFpoZSBTdSAgPHN1emhlQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21p
dW1dUmVmYWN0b3IgaW5wdXQgbWV0aG9kIHJlbGF0ZWQgQVBJcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNjA4CisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBCZWNhdXNlIGl0J3MgYSBzbWFsbCBvcHRpbWl6YXRpb24gYW5kIHRoZXJlIGlzIG5vIGZ1
bmN0aW9uYWwgY2hhbmdlLgorCisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkTm9kZSk6CisKIDIw
MTAtMDYtMTQgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBXZWJDb3JlL3BhZ2UvRm9jdXNDb250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTk0LDIwICs1OTQsMjMgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6
OnNldEZvY3VzZWROb2RlKE5vZAogICAgIC8vIEZJWE1FOiBNaWdodCB3YW50IHRvIGRpc2FibGUg
dGhpcyBjaGVjayBmb3IgY2FyZXRCcm93c2luZwogICAgIGlmIChvbGRGb2N1c2VkTm9kZSAmJiBv
bGRGb2N1c2VkTm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IG9sZEZvY3VzZWROb2RlICYm
ICFyZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMob2xkRm9jdXNlZE5vZGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAorCisgICAgLy8gU2V0IGlucHV0IG1ldGhvZCBzdGF0ZSBiZWZv
cmUgY2hhbmdpbmcgdGhlIGZvY3VzZWQgbm9kZSwgc28gdGhhdCB0aGUKKyAgICAvLyBpbnB1dCBt
ZXRob2QgY2FuIHN0aWxsIGhhdmUgY2hhbmNlIHRvIGZpbmlzaCB0aGUgb25nb2luZyBjb21wb3Np
dGlvbgorICAgIC8vIHNlc3Npb24uCisgICAgbV9wYWdlLT5lZGl0b3JDbGllbnQoKS0+c2V0SW5w
dXRNZXRob2RTdGF0ZShub2RlID8gbm9kZS0+c2hvdWxkVXNlSW5wdXRNZXRob2QoKSA6IGZhbHNl
KTsKKwogICAgIGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQob2xkRm9jdXNlZEZyYW1lLmdldCgpLCBu
ZXdGb2N1c2VkRnJhbWUuZ2V0KCksIG5vZGUpOwotICAgIAorCiAgICAgaWYgKCFub2RlKSB7CiAg
ICAgICAgIGlmIChvbGREb2N1bWVudCkKICAgICAgICAgICAgIG9sZERvY3VtZW50LT5zZXRGb2N1
c2VkTm9kZSgwKTsKLSAgICAgICAgbV9wYWdlLT5lZGl0b3JDbGllbnQoKS0+c2V0SW5wdXRNZXRo
b2RTdGF0ZShmYWxzZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIFJlZlB0
cjxEb2N1bWVudD4gbmV3RG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwogCiAgICAgaWYgKG5l
d0RvY3VtZW50ICYmIG5ld0RvY3VtZW50LT5mb2N1c2VkTm9kZSgpID09IG5vZGUpIHsKLSAgICAg
ICAgbV9wYWdlLT5lZGl0b3JDbGllbnQoKS0+c2V0SW5wdXRNZXRob2RTdGF0ZShub2RlLT5zaG91
bGRVc2VJbnB1dE1ldGhvZCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApA
QCAtNjE5LDggKzYyMiw2IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkTm9kZShO
b2QKICAgICBpZiAobmV3RG9jdW1lbnQpCiAgICAgICAgIG5ld0RvY3VtZW50LT5zZXRGb2N1c2Vk
Tm9kZShub2RlKTsKICAgICAKLSAgICBtX3BhZ2UtPmVkaXRvckNsaWVudCgpLT5zZXRJbnB1dE1l
dGhvZFN0YXRlKG5vZGUtPnNob3VsZFVzZUlucHV0TWV0aG9kKCkpOwotCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjExNzMpCisrKyBXZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTAtMDYt
MTQgIFpoZSBTdSAgPHN1emhlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dUmVmYWN0b3IgaW5wdXQgbWV0aG9k
IHJlbGF0ZWQgQVBJcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQwNjA4CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9X
ZWJDb21wb3NpdGlvbkNvbW1hbmQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29tcG9zaXRpb25V
bmRlcmxpbmUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0aW9uVW5kZXJs
aW5lOjpXZWJDb21wb3NpdGlvblVuZGVybGluZSk6CisgICAgICAgICogcHVibGljL1dlYlRleHRJ
bnB1dFR5cGUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oik6CisgICAgICAgICogcHVibGlj
L1dlYlZpZXdDbGllbnQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAg
ICogcHVibGljL1dlYldpZGdldENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXRD
bGllbnQ6OnJlc2V0SW5wdXRNZXRob2QpOgorICAgICAgICAqIHNyYy9FZGl0b3JDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6c2V0SW5wdXRNZXRob2RT
dGF0ZSk6CisgICAgICAgICogc3JjL1dlYkNvbXBvc2l0aW9uVW5kZXJsaW5lQ29udmVyc2lvbi5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1
aWxkZXI6OkNvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlcik6CisgICAgICAgICogc3Jj
L1dlYkNvbXBvc2l0aW9uVW5kZXJsaW5lQ29udmVyc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6Q29tcG9zaXRpb25VbmRlcmxpbmVCdWlsZGVyOjpDb21wb3NpdGlvblVuZGVybGluZUJ1
aWxkZXIpOgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUG9wdXBNZW51SW1wbDo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJQb3B1cE1lbnVJbXBsOjpjb25maXJtQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJQb3B1cE1lbnVJbXBsOjp0ZXh0SW5wdXRUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UG9wdXBNZW51SW1wbDo6Y2FyZXRCb3VuZHMpOgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJ
bXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmhhbmRsZUNvbXBvc2l0aW9uRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRl
eHRJbnB1dFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y2FyZXRCb3VuZHMp
OgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorCiAyMDEwLTA2LTE0ICBBbmRlcnMgQ2Fy
bHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IENocm9taXVtIGJ1aWxk
LgpJbmRleDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDYxMTczKQorKysgV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkNvbW1vbi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNv
bW1vbldvcmtlckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbXBvc2l0
aW9uQ29tbWFuZC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbXBvc2l0aW9uVW5k
ZXJsaW5lLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29uc29sZU1lc3NhZ2UuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJDb29raWUuaCcsCkBAIC0yMDUsNiArMjA2LDcgQEAKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYlRleHRBZmZpbml0eS5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYlRleHRDYXNlU2Vuc2l0aXZpdHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJUZXh0RGlyZWN0aW9uLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVGV4dElu
cHV0VHlwZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlRoZW1lRW5naW5lLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVVJMLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViVVJMRXJyb3IuaCcsCkBAIC0zMTcsNiArMzE5LDggQEAKICAgICAgICAgICAgICAgICAn
c3JjL1dlYkNhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb2xvci5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViQ29tbW9uLmNwcCcsCisgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJDb21wb3NpdGlvblVuZGVybGluZUNvbnZlcnNpb24uY3BwJywKKyAgICAgICAgICAgICAg
ICAnc3JjL1dlYkNvbXBvc2l0aW9uVW5kZXJsaW5lQ29udmVyc2lvbi5oJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkNTdHJpbmcuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkN1cnNvckluZm8uY3BwJywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9z
aXRpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJD
b21wb3NpdGlvbkNvbW1hbmQuaAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkNvbXBvc2l0aW9uQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCisvLyBERVBSRUNJQVRFRC4gSXQncyBub3Qg
dXNlZCBhbnltb3JlLgogZW51bSBXZWJDb21wb3NpdGlvbkNvbW1hbmQgewogICAgIFdlYkNvbXBv
c2l0aW9uQ29tbWFuZERpc2NhcmQsCiAgICAgV2ViQ29tcG9zaXRpb25Db21tYW5kU2V0LApJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdGlvblVuZGVybGluZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUu
aAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRpb25V
bmRlcmxpbmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29tcG9z
aXRpb25VbmRlcmxpbmVfaAorI2RlZmluZSBXZWJDb21wb3NpdGlvblVuZGVybGluZV9oCisKKyNp
bmNsdWRlICJXZWJDb2xvci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gQ2xhc3MgV2Vi
Q29tcG9zaXRpb25VbmRlcmxpbmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIFdlYldpZGdl
dCdzCisvLyBzZXRDb21wb3NpdGlvbigpIG1ldGhvZC4gSXQgY29ycmVzcG9uZHMgdG8gV2ViQ29y
ZSdzCisvLyBDb21wb3NpdGlvblVuZGVybGluZSBzdHJ1Y3QuCitjbGFzcyBXZWJDb21wb3NpdGlv
blVuZGVybGluZSB7CitwdWJsaWM6CisgICAgV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUoKQorICAg
ICAgICA6IHN0YXJ0T2Zmc2V0KDApCisgICAgICAgICwgZW5kT2Zmc2V0KDApCisgICAgICAgICwg
Y29sb3IoMCkKKyAgICAgICAgLCB0aGljaygwKSB7IH0KKworICAgIFdlYkNvbXBvc2l0aW9uVW5k
ZXJsaW5lKHVuc2lnbmVkIHMsIHVuc2lnbmVkIGUsIFdlYkNvbG9yIGMsIGJvb2wgdCkKKyAgICAg
ICAgOiBzdGFydE9mZnNldChzKQorICAgICAgICAsIGVuZE9mZnNldChlKQorICAgICAgICAsIGNv
bG9yKGMpCisgICAgICAgICwgdGhpY2sodCkgeyB9CisKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNl
dDsKKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQ7CisgICAgV2ViQ29sb3IgY29sb3I7CisgICAgYm9v
bCB0aGljazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKClByb3BlcnR5
IGNoYW5nZXMgb246IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRpb25VbmRlcmxp
bmUuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlRleHRJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlRleHRJbnB1dFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGV4dElucHV0VHlwZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
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
R0UuCisgKi8KKworI2lmbmRlZiBXZWJUZXh0SW5wdXRUeXBlX2gKKyNkZWZpbmUgV2ViVGV4dElu
cHV0VHlwZV9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFdlYlRleHRJbnB1dFR5cGUg
eworICAgIC8vIElucHV0IGNhcmV0IGlzIG5vdCBpbiBhbiBlZGl0YWJsZSBub2RlLCBubyBpbnB1
dCBtZXRob2Qgc2hhbGwgYmUgdXNlZC4KKyAgICBXZWJUZXh0SW5wdXRUeXBlTm9uZSwKKworICAg
IC8vIElucHV0IGNhcmV0IGlzIGluIGEgbm9ybWFsIGVkaXRhYmxlIG5vZGUsIGFueSBpbnB1dCBt
ZXRob2QgY2FuIGJlIHVzZWQuCisgICAgV2ViVGV4dElucHV0VHlwZVRleHQsCisKKyAgICAvLyBJ
bnB1dCBjYXJldCBpcyBpbiBhIHBhc3N3b3JkIGJveCwgYW4gaW5wdXQgbWV0aG9kIG1heSBiZSB1
c2VkIG9ubHkgaWYKKyAgICAvLyBpdCdzIHN1aXRhYmxlIGZvciBwYXNzd29yZCBpbnB1dC4KKyAg
ICBXZWJUZXh0SW5wdXRUeXBlUGFzc3dvcmQsCisKKyAgICAvLyBUT0RPKHN1emhlKTogQWRkIG1v
cmUgdGV4dCBpbnB1dCB0eXBlcyB3aGVuIG5lY2Vzc2FyeSwgZWcuIE51bWJlciwKKyAgICAvLyBE
YXRlLCBFbWFpbCwgVVJMLCBldGMuCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlRleHRJ
bnB1dFR5cGUuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaAkocmV2aXNpb24gNjExNzMpCisr
KyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTI0LDYgKzEyNCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1NtYXJ0SW5z
ZXJ0RGVsZXRlRW5hYmxlZCgpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNT
ZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
Ly8gREVQUkVDSUFURUQ6IHJlcGxhY2VkIGJ5IFdlYldpZGdldENsaWVudDo6cmVzZXRJbnB1dE1l
dGhvZCgpLgogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZEVuYWJsZWQoYm9vbCBlbmFi
bGVkKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKSB7IH0KSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4
IEBACiAjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCiAjaW5j
bHVkZSAiV2ViQ29tcG9zaXRpb25Db21tYW5kLmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRpb25V
bmRlcmxpbmUuaCIKKyNpbmNsdWRlICJXZWJUZXh0SW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiV2Vi
VGV4dERpcmVjdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQyLDYgKzQ0LDcgQEAg
Y2xhc3MgV2ViSW5wdXRFdmVudDsKIGNsYXNzIFdlYlN0cmluZzsKIHN0cnVjdCBXZWJSZWN0Owog
c3RydWN0IFdlYlNpemU7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwog
CiBjbGFzcyBXZWJXaWRnZXQgewogcHVibGljOgpAQCAtNzYsMTcgKzc5LDM4IEBAIHB1YmxpYzoK
ICAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgdGhhdCBpdCBoYXMgZ2FpbmVk
IG9yIGxvc3Qga2V5Ym9hcmQgZm9jdXMuCiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wp
ID0gMDsKIAotICAgIC8vIENhbGxlZCB0byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhIGNvbXBv
c2l0aW9uIGV2ZW50LgorICAgIC8vIERFUFJFQ0lBVEVELiBJdCdzIHJlcGxhY2VkIGJ5IHNldENv
bXBvc2l0aW9uKCkgYW5kIGNvbmZpcm1Db21wb3NpdGlvbigpLgogICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVDb21wb3NpdGlvbkV2ZW50KFdlYkNvbXBvc2l0aW9uQ29tbWFuZCBjb21tYW5kLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJzb3JQb3NpdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0U3RhcnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcmdldEVuZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcm
IHRleHQpID0gMDsKIAotICAgIC8vIFJldHJpZXZlIHRoZSBzdGF0dXMgb2YgdGhpcyBXZWJXaWRn
ZXQgcmVxdWlyZWQgYnkgSU1FIEFQSXMuICBVcG9uCi0gICAgLy8gc3VjY2VzcyBlbmFibGVkIGFu
ZCBjYXJldEJvdW5kcyBhcmUgc2V0LgorICAgIC8vIENhbGxlZCB0byBpbmZvcm0gdGhlIFdlYldp
ZGdldCBvZiBhIG5ldyBjb21wb3NpdGlvbiB0ZXh0LgorICAgIC8vIElmIHNlbGVjdGlvblN0YXJ0
IGFuZCBzZWxlY3Rpb25FbmQgaGFzIHRoZSBzYW1lIHZhbHVlLCB0aGVuIGl0IGluZGljYXRlcwor
ICAgIC8vIHRoZSBpbnB1dCBjYXJldCBwb3NpdGlvbi4gSWYgdGhlIHRleHQgaXMgZW1wdHksIHRo
ZW4gdGhlIGV4aXN0aW5nCisgICAgLy8gY29tcG9zaXRpb24gdGV4dCB3aWxsIGJlIGNhbmNlbGxl
ZC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBvc2l0aW9uIHRleHQgd2FzIHNldCBz
dWNjZXNzZnVsbHkuCisgICAgdmlydHVhbCBib29sIHNldENvbXBvc2l0aW9uKAorICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIHRleHQsCisgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJDb21wb3Np
dGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsCisgICAgICAgIGludCBzZWxlY3Rpb25TdGFydCwK
KyAgICAgICAgaW50IHNlbGVjdGlvbkVuZCkgPSAwOworCisgICAgLy8gQ2FsbGVkIHRvIGluZm9y
bSB0aGUgV2ViV2lkZ2V0IHRvIENvbmZpcm0gYW4gb25nb2luZyBjb21wb3NpdGlvbi4KKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gb25nb2luZyBjb21wb3NpdGlvbi4KKyAgICB2
aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKCkgPSAwOworCisgICAgLy8gREVQUkVDSUFU
RUQuIEl0J3MgcmVwbGFjZWQgYnkgdGV4dElucHV0VHlwZSgpIGFuZCBjYXJldEJvdW5kcygpLgog
ICAgIHZpcnR1YWwgYm9vbCBxdWVyeUNvbXBvc2l0aW9uU3RhdHVzKGJvb2wqIGVuYWJsZWQsIFdl
YlJlY3QqIGNhcmV0Qm91bmRzKSA9IDA7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHRl
eHQgaW5wdXQgdHlwZSBvZiB0aGlzIFdlYldpZGdldC4KKyAgICB2aXJ0dWFsIFdlYlRleHRJbnB1
dFR5cGUgdGV4dElucHV0VHlwZSgpID0gMDsKKworICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQg
Y2FyZXQgYm91bmRzIG9mIHRoaXMgV2ViV2lkZ2V0LiBUaGUgc2VsZWN0aW9uIGJvdW5kcworICAg
IC8vIHdpbGwgYmUgcmV0dXJuZWQgaWYgYSBzZWxlY3Rpb24gcmFuZ2UgaXMgYXZhaWxhYmxlLgor
ICAgIHZpcnR1YWwgV2ViUmVjdCBjYXJldEJvdW5kcygpID0gMDsKKwogICAgIC8vIENoYW5nZXMg
dGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBzZWxlY3RlZCBpbnB1dCBub2RlLgogICAgIHZpcnR1
YWwgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24pID0gMDsKIApJbmRleDog
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCShyZXZpc2lvbiA2MTE3MykK
KysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDYgKzgzLDEwIEBAIHB1YmxpYzoKICAgICAvLyBkaXNwbGF5ZWQuCiAgICAgdmly
dHVhbCBXZWJTY3JlZW5JbmZvIHNjcmVlbkluZm8oKSB7IHJldHVybiBXZWJTY3JlZW5JbmZvKCk7
IH0KIAorICAgIC8vIFdoZW4gdGhpcyBtZXRob2QgZ2V0cyBjYWxsZWQsIFdlYldpZGdldENsaWVu
dCBpbXBsZW1lbnRhdGlvbiBzaG91bGQKKyAgICAvLyByZXNldCB0aGUgaW5wdXQgbWV0aG9kIGJ5
IGNhbmNlbGxpbmcgYW55IG9uZ29pbmcgY29tcG9zaXRpb24uCisgICAgdmlydHVhbCB2b2lkIHJl
c2V0SW5wdXRNZXRob2QoKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIH5XZWJXaWRnZXRDbGllbnQo
KSB7IH0KIH07CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0VkaXRvckNsaWVudEltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHAJ
KHJldmlzaW9uIDYxMTczKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9FZGl0b3JDbGllbnRJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIxLDggKzkyMSwxMyBAQCB2b2lkIEVkaXRvckNsaWVu
dEltcGw6OmdldEd1ZXNzZXNGb3JXb3JkCiAKIHZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6c2V0SW5w
dXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpCiB7Ci0gICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50
KCkpCisgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsKKyAgICAgICAgbV93ZWJWaWV3LT5j
bGllbnQoKS0+cmVzZXRJbnB1dE1ldGhvZCgpOworCisgICAgICAgIC8vIFJlbW92ZSB0aGlzIGxp
bmUgd2hlbiBXZWJWaWV3Q2xpZW50OjpzZXRJbnB1dE1ldGhvZEVuYWJsZWQoKSBnZXRzCisgICAg
ICAgIC8vIHJlbW92ZWQuCiAgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPnNldElucHV0TWV0
aG9kRW5hYmxlZChlbmFibGVkKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0aW9uVW5kZXJsaW5lQ29udmVyc2lv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdGlvblVu
ZGVybGluZUNvbnZlcnNpb24uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJDb21wb3NpdGlvblVuZGVybGluZUNvbnZlcnNpb24uY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
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
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0aW9u
VW5kZXJsaW5lQ29udmVyc2lvbi5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK0NvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlcjo6Q29t
cG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyKAorICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJD
b21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMpCit7CisgICAgc2l6ZV90IHNpemUgPSB1
bmRlcmxpbmVzLnNpemUoKTsKKyAgICByZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGFwcGVuZChDb21wb3NpdGlvblVu
ZGVybGluZUJ1aWxkZXIodW5kZXJsaW5lc1tpXSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRp
b25VbmRlcmxpbmVDb252ZXJzaW9uLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxl
CiAgICsgTEYKCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0aW9uVW5kZXJs
aW5lQ29udmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29t
cG9zaXRpb25VbmRlcmxpbmVDb252ZXJzaW9uLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbXBvc2l0aW9uVW5kZXJsaW5lQ29udmVyc2lvbi5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJDb21wb3NpdGlvblVuZGVybGluZUNvbnZlcnNp
b25faAorI2RlZmluZSBXZWJDb21wb3NpdGlvblVuZGVybGluZUNvbnZlcnNpb25faAorCisjaW5j
bHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQ29tcG9z
aXRpb25VbmRlcmxpbmUuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKKy8vIFRoZXNlIGNsYXNzZXMgYXJlIHVzZWQgdG8gY29udmVydCBmcm9tIFdlYkNv
bXBvc2l0aW9uVW5kZXJsaW5lIHRvCisvLyBXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZS4K
KworY2xhc3MgQ29tcG9zaXRpb25VbmRlcmxpbmVCdWlsZGVyIDogcHVibGljIFdlYkNvcmU6OkNv
bXBvc2l0aW9uVW5kZXJsaW5lIHsKK3B1YmxpYzoKKyAgICBDb21wb3NpdGlvblVuZGVybGluZUJ1
aWxkZXIoY29uc3QgV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUmIHUpCisgICAgICAgIDogV2ViQ29y
ZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUodS5zdGFydE9mZnNldCwgdS5lbmRPZmZzZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6Q29sb3IodS5jb2xv
ciksIHUudGhpY2spIHsgfQorfTsKKworY2xhc3MgQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JC
dWlsZGVyIDoKKyAgICBwdWJsaWMgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5l
PiB7CitwdWJsaWM6CisgICAgQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyKAorICAg
ICAgICBjb25zdCBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+Jik7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0aW9uVW5kZXJsaW5lQ29udmVyc2lvbi5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNiAr
MjMwLDcgQEAgdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpzZXRGb2N1cyhib29sIGVuYQogewogfQog
CisvLyBERVBSRUNJQVRFRCwgd2lsbCBiZSByZW1vdmVkIGxhdGVyLgogYm9vbCBXZWJQb3B1cE1l
bnVJbXBsOjpoYW5kbGVDb21wb3NpdGlvbkV2ZW50KAogICAgIFdlYkNvbXBvc2l0aW9uQ29tbWFu
ZCBjb21tYW5kLCBpbnQgY3Vyc29yUG9zaXRpb24sIGludCB0YXJnZXRTdGFydCwKICAgICBpbnQg
dGFyZ2V0RW5kLCBjb25zdCBXZWJTdHJpbmcmIGltZVN0cmluZykKQEAgLTIzNywxMSArMjM4LDM0
IEBAIGJvb2wgV2ViUG9wdXBNZW51SW1wbDo6aGFuZGxlQ29tcG9zaXRpb24KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK2Jvb2wgV2ViUG9wdXBNZW51SW1wbDo6c2V0Q29tcG9zaXRpb24oCisgICAg
Y29uc3QgV2ViU3RyaW5nJiB0ZXh0LCBjb25zdCBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRl
cmxpbmU+JiB1bmRlcmxpbmVzLAorICAgIGludCBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlv
bkVuZCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViUG9wdXBNZW51SW1wbDo6
Y29uZmlybUNvbXBvc2l0aW9uKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERFUFJF
Q0lBVEVELCB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIuCiBib29sIFdlYlBvcHVwTWVudUltcGw6OnF1
ZXJ5Q29tcG9zaXRpb25TdGF0dXMoYm9vbCogZW5hYmxlZCwgV2ViUmVjdCogY2FyZXRSZWN0KQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KIAorV2ViVGV4dElucHV0VHlwZSBXZWJQb3B1cE1lbnVJ
bXBsOjp0ZXh0SW5wdXRUeXBlKCkKK3sKKyAgICByZXR1cm4gV2ViVGV4dElucHV0VHlwZU5vbmU7
Cit9CisKK1dlYlJlY3QgV2ViUG9wdXBNZW51SW1wbDo6Y2FyZXRCb3VuZHMoKQoreworICAgIHJl
dHVybiBXZWJSZWN0KCk7Cit9CisKIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6c2V0VGV4dERpcmVj
dGlvbihXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKIH0KSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCShyZXZpc2lvbiA2MTE3MykKKysrIFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMCArNjYs
MjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdl
YklucHV0RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CisKKyAgICAvLyBERVBSRUNJQVRF
RCwgd2lsbCBiZSByZW1vdmVkIGxhdGVyLgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDb21wb3Np
dGlvbkV2ZW50KAogICAgICAgICBXZWJDb21wb3NpdGlvbkNvbW1hbmQgY29tbWFuZCwgaW50IGN1
cnNvclBvc2l0aW9uLAogICAgICAgICBpbnQgdGFyZ2V0U3RhcnQsIGludCB0YXJnZXRFbmQsIGNv
bnN0IFdlYlN0cmluZyYgdGV4dCk7CisgICAgdmlydHVhbCBib29sIHNldENvbXBvc2l0aW9uKAor
ICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHRleHQsCisgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxX
ZWJDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsCisgICAgICAgIGludCBzZWxlY3Rp
b25TdGFydCwgaW50IHNlbGVjdGlvbkVuZCk7CisgICAgdmlydHVhbCBib29sIGNvbmZpcm1Db21w
b3NpdGlvbigpOworCisgICAgLy8gREVQUkVDSUFURUQsIHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4K
ICAgICB2aXJ0dWFsIGJvb2wgcXVlcnlDb21wb3NpdGlvblN0YXR1cyhib29sKiBlbmFibGVkLCBX
ZWJSZWN0KiBjYXJldFJlY3QpOworICAgIHZpcnR1YWwgV2ViVGV4dElucHV0VHlwZSB0ZXh0SW5w
dXRUeXBlKCk7CisgICAgdmlydHVhbCBXZWJSZWN0IGNhcmV0Qm91bmRzKCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pOwogICAg
IHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2
aXNpb24gNjExNzMpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3Qu
aCIKKyNpbmNsdWRlICJXZWJDb21wb3NpdGlvblVuZGVybGluZUNvbnZlcnNpb24uaCIKICNpbmNs
dWRlICJXZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYkRyYWdEYXRhLmgi
CiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCkBAIC0xMTkxLDI1ICsxMTkyLDY1IEBAIHZvaWQg
V2ViVmlld0ltcGw6OnNldEZvY3VzKGJvb2wgZW5hYmxlKQogICAgIH0KIH0KIAorLy8gREVQUkVD
SUFURUQsIHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KIGJvb2wgV2ViVmlld0ltcGw6OmhhbmRsZUNv
bXBvc2l0aW9uRXZlbnQoV2ViQ29tcG9zaXRpb25Db21tYW5kIGNvbW1hbmQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJzb3JQb3NpdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcmdldFN0YXJ0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0RW5kLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGlt
ZVN0cmluZykKIHsKKyAgICBpZiAoY29tbWFuZCA9PSBXZWJLaXQ6OldlYkNvbXBvc2l0aW9uQ29t
bWFuZFNldCkgeworICAgICAgICBpZiAodGFyZ2V0U3RhcnQgPCAwKQorICAgICAgICAgICAgdGFy
Z2V0U3RhcnQgPSAwOworICAgICAgICBpZiAodGFyZ2V0RW5kIDwgMCkKKyAgICAgICAgICAgIHRh
cmdldEVuZCA9IHN0YXRpY19jYXN0PGludD4oaW1lU3RyaW5nLmxlbmd0aCgpKTsKKworICAgICAg
ICAvLyBDcmVhdGUgY3VzdG9tIHVuZGVybGluZXMuCisgICAgICAgIC8vIFRvIGVtcGhhc2l6ZSB0
aGUgc2VsZWN0aW9uLCB0aGUgc2VsZWN0ZWQgcmVnaW9uIHVzZXMgYSBzb2xpZCBibGFjaworICAg
ICAgICAvLyBmb3IgaXRzIHVuZGVybGluZSB3aGlsZSBvdGhlciByZWdpb25zIHVzZXMgYSBwYWxl
IGdyYXkgZm9yIHRoZWlycy4KKyAgICAgICAgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJs
aW5lPiB1bmRlcmxpbmVzKHN0YXRpY19jYXN0PHNpemVfdD4oMykpOworICAgICAgICB1bmRlcmxp
bmVzWzBdLnN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgdW5kZXJsaW5lc1swXS5lbmRPZmZzZXQg
PSB0YXJnZXRTdGFydDsKKyAgICAgICAgdW5kZXJsaW5lc1swXS50aGljayA9IHRydWU7CisgICAg
ICAgIHVuZGVybGluZXNbMF0uY29sb3IgPSAweGZmZDNkM2QzOworICAgICAgICB1bmRlcmxpbmVz
WzFdLnN0YXJ0T2Zmc2V0ID0gdGFyZ2V0U3RhcnQ7CisgICAgICAgIHVuZGVybGluZXNbMV0uZW5k
T2Zmc2V0ID0gdGFyZ2V0RW5kOworICAgICAgICB1bmRlcmxpbmVzWzFdLnRoaWNrID0gdHJ1ZTsK
KyAgICAgICAgdW5kZXJsaW5lc1sxXS5jb2xvciA9IDB4ZmYwMDAwMDA7CisgICAgICAgIHVuZGVy
bGluZXNbMl0uc3RhcnRPZmZzZXQgPSB0YXJnZXRFbmQ7CisgICAgICAgIHVuZGVybGluZXNbMl0u
ZW5kT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGltZVN0cmluZy5sZW5ndGgoKSk7Cisg
ICAgICAgIHVuZGVybGluZXNbMl0udGhpY2sgPSB0cnVlOworICAgICAgICB1bmRlcmxpbmVzWzJd
LmNvbG9yID0gMHhmZmQzZDNkMzsKKyAgICAgICAgcmV0dXJuIHNldENvbXBvc2l0aW9uKGltZVN0
cmluZywgdW5kZXJsaW5lcywgY3Vyc29yUG9zaXRpb24sIGN1cnNvclBvc2l0aW9uKTsKKyAgICB9
CisKKyAgICBpZiAoY29tbWFuZCA9PSBXZWJLaXQ6OldlYkNvbXBvc2l0aW9uQ29tbWFuZERpc2Nh
cmQpIHsKKyAgICAgICAgc2V0Q29tcG9zaXRpb24oV2ViU3RyaW5nKCksIFdlYlZlY3RvcjxXZWJD
b21wb3NpdGlvblVuZGVybGluZT4oKSwgMCwgMCk7CisgICAgfSBlbHNlIGlmIChjb21tYW5kID09
IFdlYktpdDo6V2ViQ29tcG9zaXRpb25Db21tYW5kQ29uZmlybSkgeworICAgICAgICBzZXRDb21w
b3NpdGlvbihpbWVTdHJpbmcsIFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4oKSwg
MCwgMCk7CisgICAgICAgIGNvbmZpcm1Db21wb3NpdGlvbigpOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6c2V0Q29tcG9zaXRpb24oCisgICAgY29uc3Qg
V2ViU3RyaW5nJiB0ZXh0LAorICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVy
bGluZT4mIHVuZGVybGluZXMsCisgICAgaW50IHNlbGVjdGlvblN0YXJ0LAorICAgIGludCBzZWxl
Y3Rpb25FbmQpCit7CiAgICAgRnJhbWUqIGZvY3VzZWQgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7
CiAgICAgaWYgKCFmb2N1c2VkIHx8ICFtX2ltZUFjY2VwdEV2ZW50cykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7CiAgICAgaWYg
KCFlZGl0b3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWVkaXRvci0+Y2FuRWRp
dCgpKSB7Ci0gICAgICAgIC8vIFRoZSBpbnB1dCBmb2N1cyBoYXMgYmVlbiBtb3ZlZCB0byBhbm90
aGVyIFdlYldpZGdldCBvYmplY3QuCi0gICAgICAgIC8vIFdlIHNob3VsZCB1c2UgdGhpcyB8ZWRp
dG9yfCBvYmplY3Qgb25seSB0byBjb21wbGV0ZSB0aGUgb25nb2luZwotICAgICAgICAvLyBjb21w
b3NpdGlvbi4KLSAgICAgICAgaWYgKCFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorCisgICAgLy8gVGhlIGlucHV0IGZvY3VzIGhhcyBi
ZWVuIG1vdmVkIHRvIGFub3RoZXIgV2ViV2lkZ2V0IG9iamVjdC4KKyAgICAvLyBXZSBzaG91bGQg
dXNlIHRoaXMgfGVkaXRvcnwgb2JqZWN0IG9ubHkgdG8gY29tcGxldGUgdGhlIG9uZ29pbmcKKyAg
ICAvLyBjb21wb3NpdGlvbi4KKyAgICBpZiAoIWVkaXRvci0+Y2FuRWRpdCgpICYmICFlZGl0b3It
Pmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFdlIHNo
b3VsZCB2ZXJpZnkgdGhlIHBhcmVudCBub2RlIG9mIHRoaXMgSU1FIGNvbXBvc2l0aW9uIG5vZGUg
YXJlCiAgICAgLy8gZWRpdGFibGUgYmVjYXVzZSBKYXZhU2NyaXB0IG1heSBkZWxldGUgYSBwYXJl
bnQgbm9kZSBvZiB0aGUgY29tcG9zaXRpb24KQEAgLTEyMjQsOSArMTI2NSw3IEBAIGJvb2wgV2Vi
Vmlld0ltcGw6OmhhbmRsZUNvbXBvc2l0aW9uRXZlbnQKIAogICAgIC8vIElmIHdlJ3JlIG5vdCBn
b2luZyB0byBmaXJlIGEga2V5cHJlc3MgZXZlbnQsIHRoZW4gdGhlIGtleWRvd24gZXZlbnQgd2Fz
CiAgICAgLy8gY2FuY2VsZWQuICBJbiB0aGF0IGNhc2UsIGNhbmNlbCBhbnkgZXhpc3RpbmcgY29t
cG9zaXRpb24uCi0gICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHdvdWxkIG9ubHkgY2FuY2VsIGEg
c2luZ2xlIGtleXByZXNzLCByYXRoZXIgdGhhbiB0aGUKLSAgICAvLyB3aG9sZSBjb21wb3NpdGlv
bi4KLSAgICBpZiAoKGNvbW1hbmQgPT0gV2ViQ29tcG9zaXRpb25Db21tYW5kRGlzY2FyZCkgfHwg
bV9zdXBwcmVzc05leHRLZXlwcmVzc0V2ZW50KSB7CisgICAgaWYgKCF0ZXh0Lmxlbmd0aCgpIHx8
IG1fc3VwcHJlc3NOZXh0S2V5cHJlc3NFdmVudCkgewogICAgICAgICAvLyBBIGJyb3dzZXIgcHJv
Y2VzcyBzZW50IGFuIElQQyBtZXNzYWdlIHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZAog
ICAgICAgICAvLyBzdHJpbmcsIHdoaWNoIG1lYW5zIGFuIG9uZ29pbmcgY29tcG9zaXRpb24gaGFz
IGJlZW4gY2FuY2VsZWQuCiAgICAgICAgIC8vIElmIHRoZSBvbmdvaW5nIGNvbXBvc2l0aW9uIGhh
cyBiZWVuIGNhbmNlbGVkLCByZXBsYWNlIHRoZSBvbmdvaW5nCkBAIC0xMjM0LDQ5ICsxMjczLDQ1
IEBAIGJvb2wgV2ViVmlld0ltcGw6OmhhbmRsZUNvbXBvc2l0aW9uRXZlbnQKICAgICAgICAgU3Ry
aW5nIGVtcHR5U3RyaW5nOwogICAgICAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IGVt
cHR5VW5kZXJsaW5lczsKICAgICAgICAgZWRpdG9yLT5zZXRDb21wb3NpdGlvbihlbXB0eVN0cmlu
ZywgZW1wdHlVbmRlcmxpbmVzLCAwLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBBIGJy
b3dzZXIgcHJvY2VzcyBzZW50IGFuIElQQyBtZXNzYWdlIHdoaWNoIGNvbnRhaW5zIGEgc3RyaW5n
IHRvIGJlCi0gICAgICAgIC8vIGRpc3BsYXllZCBpbiB0aGlzIEVkaXRvciBvYmplY3QuCi0gICAg
ICAgIC8vIFRvIGRpc3BsYXkgdGhlIGdpdmVuIHN0cmluZywgc2V0IHRoZSBnaXZlbiBzdHJpbmcg
dG8gdGhlCi0gICAgICAgIC8vIG1fY29tcG9zaXRpb25Ob2RlIG1lbWJlciBvZiB0aGlzIEVkaXRv
ciBvYmplY3QgYW5kIGRpc3BsYXkgaXQuCi0gICAgICAgIGlmICh0YXJnZXRTdGFydCA8IDApCi0g
ICAgICAgICAgICB0YXJnZXRTdGFydCA9IDA7Ci0gICAgICAgIGlmICh0YXJnZXRFbmQgPCAwKQot
ICAgICAgICAgICAgdGFyZ2V0RW5kID0gc3RhdGljX2Nhc3Q8aW50PihpbWVTdHJpbmcubGVuZ3Ro
KCkpOwotICAgICAgICBTdHJpbmcgY29tcG9zaXRpb25TdHJpbmcoaW1lU3RyaW5nKTsKLSAgICAg
ICAgLy8gQ3JlYXRlIGN1c3RvbSB1bmRlcmxpbmVzLgotICAgICAgICAvLyBUbyBlbXBoYXNpemUg
dGhlIHNlbGVjdGlvbiwgdGhlIHNlbGVjdGVkIHJlZ2lvbiB1c2VzIGEgc29saWQgYmxhY2sKLSAg
ICAgICAgLy8gZm9yIGl0cyB1bmRlcmxpbmUgd2hpbGUgb3RoZXIgcmVnaW9ucyB1c2VzIGEgcGFs
ZSBncmF5IGZvciB0aGVpcnMuCi0gICAgICAgIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4g
dW5kZXJsaW5lcygzKTsKLSAgICAgICAgdW5kZXJsaW5lc1swXS5zdGFydE9mZnNldCA9IDA7Ci0g
ICAgICAgIHVuZGVybGluZXNbMF0uZW5kT2Zmc2V0ID0gdGFyZ2V0U3RhcnQ7Ci0gICAgICAgIHVu
ZGVybGluZXNbMF0udGhpY2sgPSB0cnVlOwotICAgICAgICB1bmRlcmxpbmVzWzBdLmNvbG9yLnNl
dFJHQigweGQzLCAweGQzLCAweGQzKTsKLSAgICAgICAgdW5kZXJsaW5lc1sxXS5zdGFydE9mZnNl
dCA9IHRhcmdldFN0YXJ0OwotICAgICAgICB1bmRlcmxpbmVzWzFdLmVuZE9mZnNldCA9IHRhcmdl
dEVuZDsKLSAgICAgICAgdW5kZXJsaW5lc1sxXS50aGljayA9IHRydWU7Ci0gICAgICAgIHVuZGVy
bGluZXNbMV0uY29sb3Iuc2V0UkdCKDB4MDAsIDB4MDAsIDB4MDApOwotICAgICAgICB1bmRlcmxp
bmVzWzJdLnN0YXJ0T2Zmc2V0ID0gdGFyZ2V0RW5kOwotICAgICAgICB1bmRlcmxpbmVzWzJdLmVu
ZE9mZnNldCA9IHN0YXRpY19jYXN0PGludD4oaW1lU3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAg
dW5kZXJsaW5lc1syXS50aGljayA9IHRydWU7Ci0gICAgICAgIHVuZGVybGluZXNbMl0uY29sb3Iu
c2V0UkdCKDB4ZDMsIDB4ZDMsIDB4ZDMpOwotICAgICAgICAvLyBXaGVuIHdlIHVzZSBjdXN0b20g
dW5kZXJsaW5lcywgV2ViS2l0ICgiSW5saW5lVGV4dEJveC5jcHAiIExpbmUgMjgyKQotICAgICAg
ICAvLyBwcmV2ZW50cyBmcm9tIHdyaXRpbmcgYSB0ZXh0IGluIGJldHdlZW4gJ3NlbGVjdGlvblN0
YXJ0JyBhbmQKLSAgICAgICAgLy8gJ3NlbGVjdGlvbkVuZCcgc29tZWhvdy4KLSAgICAgICAgLy8g
VGhlcmVmb3JlLCB3ZSB1c2UgdGhlICdjdXJzb3JQb3NpdGlvbicgZm9yIHRoZXNlIGFyZ3VtZW50
cyBzbyB0aGF0Ci0gICAgICAgIC8vIHRoZXJlIGFyZSBub3QgYW55IGNoYXJhY3RlcnMgaW4gdGhl
IGFib3ZlIHJlZ2lvbi4KLSAgICAgICAgZWRpdG9yLT5zZXRDb21wb3NpdGlvbihjb21wb3NpdGlv
blN0cmluZywgdW5kZXJsaW5lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJz
b3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pOwotICAgICAgICAvLyBUaGUgZ2l2ZW4gc3RyaW5n
IGlzIGEgcmVzdWx0IHN0cmluZywgd2hpY2ggbWVhbnMgdGhlIG9uZ29pbmcKLSAgICAgICAgLy8g
Y29tcG9zaXRpb24gaGFzIGJlZW4gY29tcGxldGVkLiBJIGhhdmUgdG8gY2FsbCB0aGUKLSAgICAg
ICAgLy8gRWRpdG9yOjpjb25maXJtQ29tcGxldGlvbigpIGFuZCBjb21wbGV0ZSB0aGlzIGNvbXBv
c2l0aW9uLgotICAgICAgICBpZiAoY29tbWFuZCA9PSBXZWJDb21wb3NpdGlvbkNvbW1hbmRDb25m
aXJtKQotICAgICAgICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICAgICAg
cmV0dXJuICF0ZXh0Lmxlbmd0aCgpOwogICAgIH0KIAorICAgIC8vIFdoZW4gdGhlIHJhbmdlIG9m
IGNvbXBvc2l0aW9uIHVuZGVybGluZXMgb3ZlcmxhcCB3aXRoIHRoZSByYW5nZSBiZXR3ZWVuCisg
ICAgLy8gc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZCwgV2ViS2l0IHNvbWVob3cgd29u
J3QgcGFpbnQgdGhlIHNlbGVjdGlvbgorICAgIC8vIGF0IGFsbCAoc2VlIElubGluZVRleHRCb3g6
OnBhaW50KCkgZnVuY3Rpb24gaW4gSW5saW5lVGV4dEJveC5jcHApLgorICAgIC8vIEJ1dCB0aGUg
c2VsZWN0aW9uIHJhbmdlIGFjdHVhbGx5IHRha2VzIGVmZmVjdC4KKyAgICBlZGl0b3ItPnNldENv
bXBvc2l0aW9uKFN0cmluZyh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBv
c2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlcih1bmRlcmxpbmVzKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOworCiAgICAgcmV0dXJu
IGVkaXRvci0+aGFzQ29tcG9zaXRpb24oKTsKIH0KIAorYm9vbCBXZWJWaWV3SW1wbDo6Y29uZmly
bUNvbXBvc2l0aW9uKCkKK3sKKyAgICBGcmFtZSogZm9jdXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJh
bWUoKTsKKyAgICBpZiAoIWZvY3VzZWQgfHwgIW1faW1lQWNjZXB0RXZlbnRzKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgRWRpdG9yKiBlZGl0b3IgPSBmb2N1c2VkLT5lZGl0b3IoKTsKKyAg
ICBpZiAoIWVkaXRvciB8fCAhZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBXZSBzaG91bGQgdmVyaWZ5IHRoZSBwYXJlbnQgbm9kZSBvZiB0
aGlzIElNRSBjb21wb3NpdGlvbiBub2RlIGFyZQorICAgIC8vIGVkaXRhYmxlIGJlY2F1c2UgSmF2
YVNjcmlwdCBtYXkgZGVsZXRlIGEgcGFyZW50IG5vZGUgb2YgdGhlIGNvbXBvc2l0aW9uCisgICAg
Ly8gbm9kZS4gSW4gdGhpcyBjYXNlLCBXZWJLaXQgY3Jhc2hlcyB3aGlsZSBkZWxldGluZyB0ZXh0
cyBmcm9tIHRoZSBwYXJlbnQKKyAgICAvLyBub2RlLCB3aGljaCBkb2Vzbid0IGV4aXN0IGFueSBs
b25nZXIuCisgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNvbXBvc2l0aW9u
UmFuZ2UoKTsKKyAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgY29uc3QgTm9kZSogbm9kZSA9IHJh
bmdlLT5zdGFydFBvc2l0aW9uKCkubm9kZSgpOworICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworLy8gREVQUkVDSUFURUQsIHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KIGJvb2wgV2ViVmlld0lt
cGw6OnF1ZXJ5Q29tcG9zaXRpb25TdGF0dXMoYm9vbCogZW5hYmxlSU1FLCBXZWJSZWN0KiBjYXJl
dFJlY3QpCiB7CiAgICAgLy8gU3RvcmUgd2hldGhlciB0aGUgc2VsZWN0ZWQgbm9kZSBuZWVkcyBJ
TUUgYW5kIHRoZSBjYXJldCByZWN0YW5nbGUuCkBAIC0xMzExLDYgKzEzNDYsNTkgQEAgYm9vbCBX
ZWJWaWV3SW1wbDo6cXVlcnlDb21wb3NpdGlvblN0YXR1cwogICAgIHJldHVybiB0cnVlOwogfQog
CitXZWJUZXh0SW5wdXRUeXBlIFdlYlZpZXdJbXBsOjp0ZXh0SW5wdXRUeXBlKCkKK3sKKyAgICBX
ZWJUZXh0SW5wdXRUeXBlIHR5cGUgPSBXZWJUZXh0SW5wdXRUeXBlTm9uZTsKKyAgICBjb25zdCBG
cmFtZSogZm9jdXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZvY3VzZWQp
CisgICAgICAgIHJldHVybiB0eXBlOworCisgICAgY29uc3QgRWRpdG9yKiBlZGl0b3IgPSBmb2N1
c2VkLT5lZGl0b3IoKTsKKyAgICBpZiAoIWVkaXRvciB8fCAhZWRpdG9yLT5jYW5FZGl0KCkpCisg
ICAgICAgIHJldHVybiB0eXBlOworCisgICAgU2VsZWN0aW9uQ29udHJvbGxlciogY29udHJvbGxl
ciA9IGZvY3VzZWQtPnNlbGVjdGlvbigpOworICAgIGlmICghY29udHJvbGxlcikKKyAgICAgICAg
cmV0dXJuIHR5cGU7CisKKyAgICBjb25zdCBOb2RlKiBub2RlID0gY29udHJvbGxlci0+c3RhcnQo
KS5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gdHlwZTsKKworICAgIC8v
IFRPRE8oc3V6aGUpOiBTdXBwb3J0IG1vcmUgdGV4dCBpbnB1dCB0eXBlcyB3aGVuIG5lY2Vzc2Fy
eSwgZWcuIE51bWJlciwKKyAgICAvLyBEYXRlLCBFbWFpbCwgVVJMLCBldGMuCisgICAgaWYgKGNv
bnRyb2xsZXItPmlzSW5QYXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAgdHlwZSA9IFdlYlRleHRJ
bnB1dFR5cGVQYXNzd29yZDsKKyAgICB9IGVsc2UgaWYgKG5vZGUtPnNob3VsZFVzZUlucHV0TWV0
aG9kKCkpIHsKKyAgICAgICAgdHlwZSA9IFdlYlRleHRJbnB1dFR5cGVUZXh0OworICAgIH0KKyAg
ICByZXR1cm4gdHlwZTsKK30KKworV2ViUmVjdCBXZWJWaWV3SW1wbDo6Y2FyZXRCb3VuZHMoKQor
eworICAgIFdlYlJlY3QgcmVjdDsKKyAgICBjb25zdCBGcmFtZSogZm9jdXNlZCA9IGZvY3VzZWRX
ZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZvY3VzZWQpCisgICAgICAgIHJldHVybiByZWN0Owor
CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9IGZvY3VzZWQtPnNlbGVjdGlv
bigpOworICAgIGlmICghY29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisKKyAgICBj
b25zdCBGcmFtZVZpZXcqIHZpZXcgPSBmb2N1c2VkLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQor
ICAgICAgICByZXR1cm4gcmVjdDsKKworICAgIGlmIChjb250cm9sbGVyLT5pc0NhcmV0KCkpIHsK
KyAgICAgICAgcmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udHJvbGxlci0+YWJzb2x1
dGVDYXJldEJvdW5kcygpKTsKKyAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZXItPmlzUmFuZ2UoKSkg
eworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY29udHJvbGxlci0+dG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICAgICAgcmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coZm9jdXNlZC0+
Zmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlY3Q7
Cit9CisKIHZvaWQgV2ViVmlld0ltcGw6OnNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24pCiB7CiAgICAgLy8gVGhlIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rp
b24oKSBmdW5jdGlvbiBjaGVja3MgaWYgd2UgY2FuIGNoYW5nZQpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuaAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDEzICs5MCwyNCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwog
ICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dEZvY3VzKGJvb2wgZW5hYmxlKTsKKworICAgIC8vIERFUFJFQ0lBVEVELCB3aWxsIGJlIHJlbW92
ZWQgbGF0ZXIuCiAgICAgdmlydHVhbCBib29sIGhhbmRsZUNvbXBvc2l0aW9uRXZlbnQoV2ViQ29t
cG9zaXRpb25Db21tYW5kIGNvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGN1cnNvclBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCB0YXJnZXRTdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdGFyZ2V0RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdGV4dCk7Ci0gICAgdmlydHVhbCBib29sIHF1
ZXJ5Q29tcG9zaXRpb25TdGF0dXMoYm9vbCogZW5hYmxlZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJSZWN0KiBjYXJldFJlY3QpOworICAgIHZpcnR1YWwgYm9v
bCBzZXRDb21wb3NpdGlvbigKKyAgICAgICAgY29uc3QgV2ViU3RyaW5nJiB0ZXh0LAorICAgICAg
ICBjb25zdCBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLAor
ICAgICAgICBpbnQgc2VsZWN0aW9uU3RhcnQsCisgICAgICAgIGludCBzZWxlY3Rpb25FbmQpOwor
ICAgIHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRpb24oKTsKKworICAgIC8vIERFUFJFQ0lB
VEVELCB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIuCisgICAgdmlydHVhbCBib29sIHF1ZXJ5Q29tcG9z
aXRpb25TdGF0dXMoYm9vbCogZW5hYmxlZCwgV2ViUmVjdCogY2FyZXRSZWN0KTsKKyAgICB2aXJ0
dWFsIFdlYlRleHRJbnB1dFR5cGUgdGV4dElucHV0VHlwZSgpOworICAgIHZpcnR1YWwgV2ViUmVj
dCBjYXJldEJvdW5kcygpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKFdlYlRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlKCkgY29uc3Q7CiAK
</data>
<flag name="review"
          id="45183"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58756</attachid>
            <date>2010-06-14 23:29:36 -0700</date>
            <delta_ts>2010-06-14 23:35:52 -0700</delta_ts>
            <desc>Updated patch according to review feedbacks.</desc>
            <filename>refactor-chromium-input-method-apis.patch</filename>
            <type>text/plain</type>
            <size>36341</size>
            <attacher name="James Su">suzhe</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMTQgIFpoZSBTdSAgPHN1emhlQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21p
dW1dUmVmYWN0b3IgaW5wdXQgbWV0aG9kIHJlbGF0ZWQgQVBJcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNjA4CisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBCZWNhdXNlIGl0J3MgYSBzbWFsbCBvcHRpbWl6YXRpb24gYW5kIHRoZXJlIGlzIG5vIGZ1
bmN0aW9uYWwgY2hhbmdlLgorCisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkTm9kZSk6CisKIDIw
MTAtMDYtMTQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBObyByZXZpZXcuIEdUSyBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL3BhZ2UvRm9jdXNDb250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gNjExNzUpCisrKyBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTk0LDIwICs1OTQsMjMgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6
OnNldEZvY3VzZWROb2RlKE5vZAogICAgIC8vIEZJWE1FOiBNaWdodCB3YW50IHRvIGRpc2FibGUg
dGhpcyBjaGVjayBmb3IgY2FyZXRCcm93c2luZwogICAgIGlmIChvbGRGb2N1c2VkTm9kZSAmJiBv
bGRGb2N1c2VkTm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IG9sZEZvY3VzZWROb2RlICYm
ICFyZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMob2xkRm9jdXNlZE5vZGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAorCisgICAgLy8gU2V0IGlucHV0IG1ldGhvZCBzdGF0ZSBiZWZv
cmUgY2hhbmdpbmcgdGhlIGZvY3VzZWQgbm9kZSwgc28gdGhhdCB0aGUKKyAgICAvLyBpbnB1dCBt
ZXRob2QgY2FuIHN0aWxsIGhhdmUgYSBjaGFuY2UgdG8gZmluaXNoIHRoZSBvbmdvaW5nIGNvbXBv
c2l0aW9uCisgICAgLy8gc2Vzc2lvbi4KKyAgICBtX3BhZ2UtPmVkaXRvckNsaWVudCgpLT5zZXRJ
bnB1dE1ldGhvZFN0YXRlKG5vZGUgPyBub2RlLT5zaG91bGRVc2VJbnB1dE1ldGhvZCgpIDogZmFs
c2UpOworCiAgICAgY2xlYXJTZWxlY3Rpb25JZk5lZWRlZChvbGRGb2N1c2VkRnJhbWUuZ2V0KCks
IG5ld0ZvY3VzZWRGcmFtZS5nZXQoKSwgbm9kZSk7Ci0gICAgCisKICAgICBpZiAoIW5vZGUpIHsK
ICAgICAgICAgaWYgKG9sZERvY3VtZW50KQogICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnNldEZv
Y3VzZWROb2RlKDApOwotICAgICAgICBtX3BhZ2UtPmVkaXRvckNsaWVudCgpLT5zZXRJbnB1dE1l
dGhvZFN0YXRlKGZhbHNlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgUmVm
UHRyPERvY3VtZW50PiBuZXdEb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7CiAKICAgICBpZiAo
bmV3RG9jdW1lbnQgJiYgbmV3RG9jdW1lbnQtPmZvY3VzZWROb2RlKCkgPT0gbm9kZSkgewotICAg
ICAgICBtX3BhZ2UtPmVkaXRvckNsaWVudCgpLT5zZXRJbnB1dE1ldGhvZFN0YXRlKG5vZGUtPnNo
b3VsZFVzZUlucHV0TWV0aG9kKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CkBAIC02MTksOCArNjIyLDYgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWROb2Rl
KE5vZAogICAgIGlmIChuZXdEb2N1bWVudCkKICAgICAgICAgbmV3RG9jdW1lbnQtPnNldEZvY3Vz
ZWROb2RlKG5vZGUpOwogICAgIAotICAgIG1fcGFnZS0+ZWRpdG9yQ2xpZW50KCktPnNldElucHV0
TWV0aG9kU3RhdGUobm9kZS0+c2hvdWxkVXNlSW5wdXRNZXRob2QoKSk7Ci0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2MTE3NikKKysrIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0w
Ni0xNCAgWmhlIFN1ICA8c3V6aGVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV1SZWZhY3RvciBpbnB1dCBtZXRo
b2QgcmVsYXRlZCBBUElzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDA2MDgKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGlj
L1dlYkNvbXBvc2l0aW9uQ29tbWFuZC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJDb21wb3NpdGlv
blVuZGVybGluZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpb25VbmRl
cmxpbmU6OldlYkNvbXBvc2l0aW9uVW5kZXJsaW5lKToKKyAgICAgICAgKiBwdWJsaWMvV2ViVGV4
dElucHV0VHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6KToKKyAgICAgICAgKiBwdWJs
aWMvV2ViVmlld0NsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViV2lkZ2V0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdl
dENsaWVudDo6cmVzZXRJbnB1dE1ldGhvZCk6CisgICAgICAgICogc3JjL0NvbXBvc2l0aW9uVW5k
ZXJsaW5lQnVpbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpb25VbmRl
cmxpbmVCdWlsZGVyOjpDb21wb3NpdGlvblVuZGVybGluZUJ1aWxkZXIpOgorICAgICAgICAqIHNy
Yy9Db21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6Q29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyOjpDb21wb3NpdGlvblVu
ZGVybGluZVZlY3RvckJ1aWxkZXIpOgorICAgICAgICAqIHNyYy9Db21wb3NpdGlvblVuZGVybGlu
ZVZlY3RvckJ1aWxkZXIuaDogQWRkZWQuCisgICAgICAgICogc3JjL0VkaXRvckNsaWVudEltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpzZXRJbnB1dE1ldGhvZFN0
YXRlKToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBvcHVwTWVudUltcGw6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUG9wdXBNZW51SW1wbDo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUG9wdXBNZW51SW1wbDo6dGV4dElucHV0VHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBv
cHVwTWVudUltcGw6OmNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMpOgorICAgICAgICAqIHNyYy9XZWJQ
b3B1cE1lbnVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmhhbmRsZUNvbXBvc2l0aW9uRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnRleHRJbnB1dFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y2Fy
ZXRPclNlbGVjdGlvbkJvdW5kcyk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIw
MTAtMDYtMTQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggQ2hyb21pdW0gYnVpbGQuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNjExNzUp
CisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiAr
OTMsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29tbW9uLmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViQ29tcG9zaXRpb25Db21tYW5kLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJDb25zb2xlTWVzc2FnZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbnRleHRN
ZW51RGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvb2tpZS5oJywKQEAgLTIw
NSw2ICsyMDYsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVGV4dEFmZmluaXR5Lmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVGV4dENhc2VTZW5zaXRpdml0eS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlRleHREaXJlY3Rpb24uaCcsCisgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViVGhlbWVFbmdpbmUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJVUkwuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJVUkxFcnJvci5oJywKQEAgLTI0MCw2ICsyNDIsOSBA
QAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21pdW1CcmlkZ2UuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL0Nocm9taXVtQ3VycmVudFRpbWUuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L0Nocm9taXVtVGhyZWFkaW5nLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9Db21wb3NpdGlv
blVuZGVybGluZUJ1aWxkZXIuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9Db21wb3NpdGlvblVu
ZGVybGluZVZlY3RvckJ1aWxkZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL0NvbXBvc2l0
aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlci5oJywKICAgICAgICAgICAgICAgICAnc3JjL0NvbnRl
eHRNZW51Q2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAn
LApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdGlvbkNvbW1hbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0aW9uQ29tbWFu
ZC5oCShyZXZpc2lvbiA2MTE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9z
aXRpb25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKKy8vIERFUFJFQ0FURUQuCiBlbnVtIFdlYkNvbXBvc2l0aW9uQ29tbWFu
ZCB7CiAgICAgV2ViQ29tcG9zaXRpb25Db21tYW5kRGlzY2FyZCwKICAgICBXZWJDb21wb3NpdGlv
bkNvbW1hbmRTZXQsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0aW9u
VW5kZXJsaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21w
b3NpdGlvblVuZGVybGluZS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJDb21wb3NpdGlvblVuZGVybGluZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJDb21wb3NpdGlvblVuZGVybGluZV9oCisjZGVmaW5lIFdlYkNvbXBvc2l0aW9u
VW5kZXJsaW5lX2gKKworI2luY2x1ZGUgIldlYkNvbG9yLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisvLyBDbGFzcyBXZWJDb21wb3NpdGlvblVuZGVybGluZSBpcyBpbnRlbmRlZCB0byBiZSB1
c2VkIHdpdGggV2ViV2lkZ2V0J3MKKy8vIHNldENvbXBvc2l0aW9uKCkgbWV0aG9kLgorc3RydWN0
IFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lIHsKKyAgICBXZWJDb21wb3NpdGlvblVuZGVybGluZSgp
CisgICAgICAgIDogc3RhcnRPZmZzZXQoMCkKKyAgICAgICAgLCBlbmRPZmZzZXQoMCkKKyAgICAg
ICAgLCBjb2xvcigwKQorICAgICAgICAsIHRoaWNrKGZhbHNlKSB7IH0KKworICAgIFdlYkNvbXBv
c2l0aW9uVW5kZXJsaW5lKHVuc2lnbmVkIHMsIHVuc2lnbmVkIGUsIFdlYkNvbG9yIGMsIGJvb2wg
dCkKKyAgICAgICAgOiBzdGFydE9mZnNldChzKQorICAgICAgICAsIGVuZE9mZnNldChlKQorICAg
ICAgICAsIGNvbG9yKGMpCisgICAgICAgICwgdGhpY2sodCkgeyB9CisKKyAgICB1bnNpZ25lZCBz
dGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQ7CisgICAgV2ViQ29sb3IgY29sb3I7
CisgICAgYm9vbCB0aGljazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGV4dElucHV0VHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGV4dElucHV0VHlwZS5oCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRleHRJbnB1dFR5cGVfaAorI2RlZmlu
ZSBXZWJUZXh0SW5wdXRUeXBlX2gKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gV2ViVGV4
dElucHV0VHlwZSB7CisgICAgLy8gSW5wdXQgY2FyZXQgaXMgbm90IGluIGFuIGVkaXRhYmxlIG5v
ZGUsIG5vIGlucHV0IG1ldGhvZCBzaGFsbCBiZSB1c2VkLgorICAgIFdlYlRleHRJbnB1dFR5cGVO
b25lLAorCisgICAgLy8gSW5wdXQgY2FyZXQgaXMgaW4gYSBub3JtYWwgZWRpdGFibGUgbm9kZSwg
YW55IGlucHV0IG1ldGhvZCBjYW4gYmUgdXNlZC4KKyAgICBXZWJUZXh0SW5wdXRUeXBlVGV4dCwK
KworICAgIC8vIElucHV0IGNhcmV0IGlzIGluIGEgcGFzc3dvcmQgYm94LCBhbiBpbnB1dCBtZXRo
b2QgbWF5IGJlIHVzZWQgb25seSBpZgorICAgIC8vIGl0J3Mgc3VpdGFibGUgZm9yIHBhc3N3b3Jk
IGlucHV0LgorICAgIFdlYlRleHRJbnB1dFR5cGVQYXNzd29yZCwKKworICAgIC8vIFRPRE8oc3V6
aGUpOiBBZGQgbW9yZSB0ZXh0IGlucHV0IHR5cGVzIHdoZW4gbmVjZXNzYXJ5LCBlZy4gTnVtYmVy
LAorICAgIC8vIERhdGUsIEVtYWlsLCBVUkwsIGV0Yy4KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5o
CShyZXZpc2lvbiA2MTE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBib29sIGlzU21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICAvLyBERVBSRUNBVEVEOiByZXBsYWNlZCBieSBXZWJXaWRnZXRD
bGllbnQ6OnJlc2V0SW5wdXRNZXRob2QoKS4KICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRo
b2RFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5F
ZGl0aW5nKCkgeyB9CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgJKHJldmlzaW9u
IDYxMTc1KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIldlYkNhbnZhcy5oIgogI2luY2x1ZGUg
IldlYkNvbW1vbi5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0aW9uQ29tbWFuZC5oIgorI2luY2x1
ZGUgIldlYkNvbXBvc2l0aW9uVW5kZXJsaW5lLmgiCisjaW5jbHVkZSAiV2ViVGV4dElucHV0VHlw
ZS5oIgogI2luY2x1ZGUgIldlYlRleHREaXJlY3Rpb24uaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7
CkBAIC00Miw2ICs0NCw3IEBAIGNsYXNzIFdlYklucHV0RXZlbnQ7CiBjbGFzcyBXZWJTdHJpbmc7
CiBzdHJ1Y3QgV2ViUmVjdDsKIHN0cnVjdCBXZWJTaXplOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGNsYXNzIFdlYlZlY3RvcjsKIAogY2xhc3MgV2ViV2lkZ2V0IHsKIHB1YmxpYzoKQEAgLTc2LDE3
ICs3OSwzOSBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0
IHRoYXQgaXQgaGFzIGdhaW5lZCBvciBsb3N0IGtleWJvYXJkIGZvY3VzLgogICAgIHZpcnR1YWwg
dm9pZCBzZXRGb2N1cyhib29sKSA9IDA7CiAKLSAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBX
ZWJXaWRnZXQgb2YgYSBjb21wb3NpdGlvbiBldmVudC4KKyAgICAvLyBERVBSRUNBVEVELiBJdCdz
IHJlcGxhY2VkIGJ5IHNldENvbXBvc2l0aW9uKCkgYW5kIGNvbmZpcm1Db21wb3NpdGlvbigpLgog
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDb21wb3NpdGlvbkV2ZW50KFdlYkNvbXBvc2l0aW9uQ29t
bWFuZCBjb21tYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBjdXJzb3JQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgdGFyZ2V0U3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHRhcmdldEVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBXZWJTdHJpbmcmIHRleHQpID0gMDsKIAotICAgIC8vIFJldHJpZXZlIHRoZSBzdGF0
dXMgb2YgdGhpcyBXZWJXaWRnZXQgcmVxdWlyZWQgYnkgSU1FIEFQSXMuICBVcG9uCi0gICAgLy8g
c3VjY2VzcyBlbmFibGVkIGFuZCBjYXJldEJvdW5kcyBhcmUgc2V0LgorICAgIC8vIENhbGxlZCB0
byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhIG5ldyBjb21wb3NpdGlvbiB0ZXh0LgorICAgIC8v
IElmIHNlbGVjdGlvblN0YXJ0IGFuZCBzZWxlY3Rpb25FbmQgaGFzIHRoZSBzYW1lIHZhbHVlLCB0
aGVuIGl0IGluZGljYXRlcworICAgIC8vIHRoZSBpbnB1dCBjYXJldCBwb3NpdGlvbi4gSWYgdGhl
IHRleHQgaXMgZW1wdHksIHRoZW4gdGhlIGV4aXN0aW5nCisgICAgLy8gY29tcG9zaXRpb24gdGV4
dCB3aWxsIGJlIGNhbmNlbGxlZC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBvc2l0
aW9uIHRleHQgd2FzIHNldCBzdWNjZXNzZnVsbHkuCisgICAgdmlydHVhbCBib29sIHNldENvbXBv
c2l0aW9uKAorICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHRleHQsCisgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsCisgICAgICAgIGlu
dCBzZWxlY3Rpb25TdGFydCwKKyAgICAgICAgaW50IHNlbGVjdGlvbkVuZCkgPSAwOworCisgICAg
Ly8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0IHRvIGNvbmZpcm0gYW4gb25nb2luZyBj
b21wb3NpdGlvbi4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gb25nb2luZyBj
b21wb3NpdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKCkgPSAwOwor
CisgICAgLy8gREVQUkVDQVRFRC4gSXQncyByZXBsYWNlZCBieSB0ZXh0SW5wdXRUeXBlKCkgYW5k
CisgICAgLy8gY2FyZXRPclNlbGVjdGlvbkJvdW5kcygpLgogICAgIHZpcnR1YWwgYm9vbCBxdWVy
eUNvbXBvc2l0aW9uU3RhdHVzKGJvb2wqIGVuYWJsZWQsIFdlYlJlY3QqIGNhcmV0Qm91bmRzKSA9
IDA7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHRleHQgaW5wdXQgdHlwZSBvZiB0aGlz
IFdlYldpZGdldC4KKyAgICB2aXJ0dWFsIFdlYlRleHRJbnB1dFR5cGUgdGV4dElucHV0VHlwZSgp
ID0gMDsKKworICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgY2FyZXQgYm91bmRzIG9mIHRoaXMg
V2ViV2lkZ2V0LiBUaGUgc2VsZWN0aW9uIGJvdW5kcworICAgIC8vIHdpbGwgYmUgcmV0dXJuZWQg
aWYgYSBzZWxlY3Rpb24gcmFuZ2UgaXMgYXZhaWxhYmxlLgorICAgIHZpcnR1YWwgV2ViUmVjdCBj
YXJldE9yU2VsZWN0aW9uQm91bmRzKCkgPSAwOworCiAgICAgLy8gQ2hhbmdlcyB0aGUgdGV4dCBk
aXJlY3Rpb24gb2YgdGhlIHNlbGVjdGVkIGlucHV0IG5vZGUuCiAgICAgdmlydHVhbCB2b2lkIHNl
dFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbikgPSAwOwogCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgJKHJldmlzaW9uIDYxMTc1KQorKysgV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODMs
NiArODMsMTAgQEAgcHVibGljOgogICAgIC8vIGRpc3BsYXllZC4KICAgICB2aXJ0dWFsIFdlYlNj
cmVlbkluZm8gc2NyZWVuSW5mbygpIHsgcmV0dXJuIFdlYlNjcmVlbkluZm8oKTsgfQogCisgICAg
Ly8gV2hlbiB0aGlzIG1ldGhvZCBnZXRzIGNhbGxlZCwgV2ViV2lkZ2V0Q2xpZW50IGltcGxlbWVu
dGF0aW9uIHNob3VsZAorICAgIC8vIHJlc2V0IHRoZSBpbnB1dCBtZXRob2QgYnkgY2FuY2VsbGlu
ZyBhbnkgb25nb2luZyBjb21wb3NpdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRJbnB1dE1l
dGhvZCgpIHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgfldlYldpZGdldENsaWVudCgpIHsgfQogfTsK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQ29tcG9zaXRpb25VbmRlcmxpbmVCdWlsZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db21wb3NpdGlvblVuZGVybGluZUJ1
aWxkZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29tcG9zaXRpb25V
bmRlcmxpbmVCdWlsZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENv
bXBvc2l0aW9uVW5kZXJsaW5lQnVpbGRlcl9oCisjZGVmaW5lIENvbXBvc2l0aW9uVW5kZXJsaW5l
QnVpbGRlcl9oCisKKyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNp
bmNsdWRlICJXZWJDb21wb3NpdGlvblVuZGVybGluZS5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGZvciBjb252
ZXJ0aW5nIGZyb20gV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUgdG8KKy8vIFdlYkNvcmU6OkNvbXBv
c2l0aW9uVW5kZXJsaW5lLgorCitjbGFzcyBDb21wb3NpdGlvblVuZGVybGluZUJ1aWxkZXIgOiBw
dWJsaWMgV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUgeworcHVibGljOgorICAgIENvbXBv
c2l0aW9uVW5kZXJsaW5lQnVpbGRlcihjb25zdCBXZWJDb21wb3NpdGlvblVuZGVybGluZSYgdSkK
KyAgICAgICAgOiBXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZSh1LnN0YXJ0T2Zmc2V0LCB1
LmVuZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJD
b3JlOjpDb2xvcih1LmNvbG9yKSwgdS50aGljaykgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbXBvc2l0aW9uVW5k
ZXJsaW5lVmVjdG9yQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Db21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9Db21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
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
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNvbXBvc2l0aW9uVW5kZXJsaW5lQnVpbGRlci5oIgorI2luY2x1ZGUgIkNvbXBvc2l0aW9u
VW5kZXJsaW5lVmVjdG9yQnVpbGRlci5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK0NvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlcjo6
Q29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyKAorICAgIGNvbnN0IFdlYlZlY3RvcjxX
ZWJDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMpCit7CisgICAgc2l6ZV90IHNpemUg
PSB1bmRlcmxpbmVzLnNpemUoKTsKKyAgICByZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGFwcGVuZChDb21wb3NpdGlv
blVuZGVybGluZUJ1aWxkZXIodW5kZXJsaW5lc1tpXSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0
b3JCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db21wb3NpdGlv
blVuZGVybGluZVZlY3RvckJ1aWxkZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1
bS9zcmMvQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlcl9o
CisjZGVmaW5lIENvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlcl9oCisKKyNpbmNsdWRl
ICJFZGl0b3IuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJDb21wb3NpdGlv
blVuZGVybGluZS5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworLy8gVGhpcyBjbGFzc2VzIGFyZSB1c2VkIGZvciBjb252ZXJ0aW5nIGZyb20gc3RkOjp2
ZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+CisvLyB0byBWZWN0b3I8V2ViQ29yZTo6Q29t
cG9zaXRpb25VbmRlcmxpbmU+LgorCitjbGFzcyBDb21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1
aWxkZXIgOgorICAgIHB1YmxpYyBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+
IHsKK3B1YmxpYzoKKyAgICBDb21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIoCisgICAg
ICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4mKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
RWRpdG9yQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9F
ZGl0b3JDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gNjExNzUpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL0VkaXRvckNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjEsOCArOTIxLDEz
IEBAIHZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6Z2V0R3Vlc3Nlc0ZvcldvcmQKIAogdm9pZCBFZGl0
b3JDbGllbnRJbXBsOjpzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBp
ZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKKyAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkgewor
ICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5yZXNldElucHV0TWV0aG9kKCk7CisKKyAgICAg
ICAgLy8gUmVtb3ZlIHRoaXMgbGluZSB3aGVuIFdlYlZpZXdDbGllbnQ6OnNldElucHV0TWV0aG9k
RW5hYmxlZCgpIGdldHMKKyAgICAgICAgLy8gcmVtb3ZlZC4KICAgICAgICAgbV93ZWJWaWV3LT5j
bGllbnQoKS0+c2V0SW5wdXRNZXRob2RFbmFibGVkKGVuYWJsZWQpOworICAgIH0KIH0KIAogfSAv
LyBuYW1lc2FjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJ
bXBsLmNwcAkocmV2aXNpb24gNjExNzUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVw
TWVudUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNiArMjMwLDcgQEAgdm9pZCBXZWJQ
b3B1cE1lbnVJbXBsOjpzZXRGb2N1cyhib29sIGVuYQogewogfQogCisvLyBERVBSRUNBVEVELCB3
aWxsIGJlIHJlbW92ZWQgbGF0ZXIuCiBib29sIFdlYlBvcHVwTWVudUltcGw6OmhhbmRsZUNvbXBv
c2l0aW9uRXZlbnQoCiAgICAgV2ViQ29tcG9zaXRpb25Db21tYW5kIGNvbW1hbmQsIGludCBjdXJz
b3JQb3NpdGlvbiwgaW50IHRhcmdldFN0YXJ0LAogICAgIGludCB0YXJnZXRFbmQsIGNvbnN0IFdl
YlN0cmluZyYgaW1lU3RyaW5nKQpAQCAtMjM3LDExICsyMzgsMzQgQEAgYm9vbCBXZWJQb3B1cE1l
bnVJbXBsOjpoYW5kbGVDb21wb3NpdGlvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBX
ZWJQb3B1cE1lbnVJbXBsOjpzZXRDb21wb3NpdGlvbigKKyAgICBjb25zdCBXZWJTdHJpbmcmIHRl
eHQsIGNvbnN0IFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMs
CisgICAgaW50IHNlbGVjdGlvblN0YXJ0LCBpbnQgc2VsZWN0aW9uRW5kKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpjb25maXJtQ29tcG9zaXRpb24o
KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gREVQUkVDQVRFRCwgd2lsbCBiZSByZW1v
dmVkIGxhdGVyLgogYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpxdWVyeUNvbXBvc2l0aW9uU3RhdHVz
KGJvb2wqIGVuYWJsZWQsIFdlYlJlY3QqIGNhcmV0UmVjdCkKIHsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK1dlYlRleHRJbnB1dFR5cGUgV2ViUG9wdXBNZW51SW1wbDo6dGV4dElucHV0VHlwZSgp
Cit7CisgICAgcmV0dXJuIFdlYlRleHRJbnB1dFR5cGVOb25lOworfQorCitXZWJSZWN0IFdlYlBv
cHVwTWVudUltcGw6OmNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMoKQoreworICAgIHJldHVybiBXZWJS
ZWN0KCk7Cit9CisKIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6c2V0VGV4dERpcmVjdGlvbihXZWJU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKIH0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUG9wdXBNZW51SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UG9wdXBNZW51SW1wbC5oCShyZXZpc2lvbiA2MTE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUG9wdXBNZW51SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMCArNjYsMjEgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZl
bnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CisKKyAgICAvLyBERVBSRUNBVEVELCB3aWxsIGJl
IHJlbW92ZWQgbGF0ZXIuCiAgICAgdmlydHVhbCBib29sIGhhbmRsZUNvbXBvc2l0aW9uRXZlbnQo
CiAgICAgICAgIFdlYkNvbXBvc2l0aW9uQ29tbWFuZCBjb21tYW5kLCBpbnQgY3Vyc29yUG9zaXRp
b24sCiAgICAgICAgIGludCB0YXJnZXRTdGFydCwgaW50IHRhcmdldEVuZCwgY29uc3QgV2ViU3Ry
aW5nJiB0ZXh0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0Q29tcG9zaXRpb24oCisgICAgICAgIGNv
bnN0IFdlYlN0cmluZyYgdGV4dCwKKyAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYkNvbXBvc2l0
aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywKKyAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0LCBp
bnQgc2VsZWN0aW9uRW5kKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKCk7
CisKKyAgICAvLyBERVBSRUNBVEVELCB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIuCiAgICAgdmlydHVh
bCBib29sIHF1ZXJ5Q29tcG9zaXRpb25TdGF0dXMoYm9vbCogZW5hYmxlZCwgV2ViUmVjdCogY2Fy
ZXRSZWN0KTsKKyAgICB2aXJ0dWFsIFdlYlRleHRJbnB1dFR5cGUgdGV4dElucHV0VHlwZSgpOwor
ICAgIHZpcnR1YWwgV2ViUmVjdCBjYXJldE9yU2VsZWN0aW9uQm91bmRzKCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pOwogICAg
IHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2
aXNpb24gNjExNzUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkF1dG9jb21wbGV0ZVBvcHVw
TWVudUNsaWVudC5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJDaHJv
bWUuaCIKKyNpbmNsdWRlICJDb21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIuaCIKICNp
bmNsdWRlICJDb250ZXh0TWVudS5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5o
IgogI2luY2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgpAQCAtMTE5MSwyNSArMTE5Miw2NiBAQCB2
b2lkIFdlYlZpZXdJbXBsOjpzZXRGb2N1cyhib29sIGVuYWJsZSkKICAgICB9CiB9CiAKKy8vIERF
UFJFQ0FURUQsIHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KIGJvb2wgV2ViVmlld0ltcGw6OmhhbmRs
ZUNvbXBvc2l0aW9uRXZlbnQoV2ViQ29tcG9zaXRpb25Db21tYW5kIGNvbW1hbmQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJzb3JQb3NpdGlvbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcmdldFN0YXJ0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0RW5kLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcm
IGltZVN0cmluZykKIHsKKyAgICBpZiAoY29tbWFuZCA9PSBXZWJLaXQ6OldlYkNvbXBvc2l0aW9u
Q29tbWFuZFNldCkgeworICAgICAgICBpZiAodGFyZ2V0U3RhcnQgPCAwKQorICAgICAgICAgICAg
dGFyZ2V0U3RhcnQgPSAwOworICAgICAgICBpZiAodGFyZ2V0RW5kIDwgMCkKKyAgICAgICAgICAg
IHRhcmdldEVuZCA9IHN0YXRpY19jYXN0PGludD4oaW1lU3RyaW5nLmxlbmd0aCgpKTsKKworICAg
ICAgICAvLyBDcmVhdGUgY3VzdG9tIHVuZGVybGluZXMuCisgICAgICAgIC8vIFRvIGVtcGhhc2l6
ZSB0aGUgc2VsZWN0aW9uLCB0aGUgc2VsZWN0ZWQgcmVnaW9uIHVzZXMgYSBzb2xpZCBibGFjawor
ICAgICAgICAvLyBmb3IgaXRzIHVuZGVybGluZSB3aGlsZSBvdGhlciByZWdpb25zIHVzZXMgYSBw
YWxlIGdyYXkgZm9yIHRoZWlycy4KKyAgICAgICAgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5k
ZXJsaW5lPiB1bmRlcmxpbmVzKHN0YXRpY19jYXN0PHNpemVfdD4oMykpOworICAgICAgICB1bmRl
cmxpbmVzWzBdLnN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgdW5kZXJsaW5lc1swXS5lbmRPZmZz
ZXQgPSB0YXJnZXRTdGFydDsKKyAgICAgICAgdW5kZXJsaW5lc1swXS50aGljayA9IHRydWU7Cisg
ICAgICAgIHVuZGVybGluZXNbMF0uY29sb3IgPSAweGZmZDNkM2QzOworICAgICAgICB1bmRlcmxp
bmVzWzFdLnN0YXJ0T2Zmc2V0ID0gdGFyZ2V0U3RhcnQ7CisgICAgICAgIHVuZGVybGluZXNbMV0u
ZW5kT2Zmc2V0ID0gdGFyZ2V0RW5kOworICAgICAgICB1bmRlcmxpbmVzWzFdLnRoaWNrID0gdHJ1
ZTsKKyAgICAgICAgdW5kZXJsaW5lc1sxXS5jb2xvciA9IDB4ZmYwMDAwMDA7CisgICAgICAgIHVu
ZGVybGluZXNbMl0uc3RhcnRPZmZzZXQgPSB0YXJnZXRFbmQ7CisgICAgICAgIHVuZGVybGluZXNb
Ml0uZW5kT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGltZVN0cmluZy5sZW5ndGgoKSk7
CisgICAgICAgIHVuZGVybGluZXNbMl0udGhpY2sgPSB0cnVlOworICAgICAgICB1bmRlcmxpbmVz
WzJdLmNvbG9yID0gMHhmZmQzZDNkMzsKKyAgICAgICAgcmV0dXJuIHNldENvbXBvc2l0aW9uKGlt
ZVN0cmluZywgdW5kZXJsaW5lcywgY3Vyc29yUG9zaXRpb24sIGN1cnNvclBvc2l0aW9uKTsKKyAg
ICB9CisKKyAgICBpZiAoY29tbWFuZCA9PSBXZWJLaXQ6OldlYkNvbXBvc2l0aW9uQ29tbWFuZERp
c2NhcmQpCisgICAgICAgIHNldENvbXBvc2l0aW9uKFdlYlN0cmluZygpLCBXZWJWZWN0b3I8V2Vi
Q29tcG9zaXRpb25VbmRlcmxpbmU+KCksIDAsIDApOworICAgIGVsc2UgaWYgKGNvbW1hbmQgPT0g
V2ViS2l0OjpXZWJDb21wb3NpdGlvbkNvbW1hbmRDb25maXJtKSB7CisgICAgICAgIHNldENvbXBv
c2l0aW9uKGltZVN0cmluZywgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPigpLCAw
LCAwKTsKKyAgICAgICAgY29uZmlybUNvbXBvc2l0aW9uKCk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViVmlld0ltcGw6OnNldENvbXBvc2l0aW9uKAorICAgIGNvbnN0
IFdlYlN0cmluZyYgdGV4dCwKKyAgICBjb25zdCBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRl
cmxpbmU+JiB1bmRlcmxpbmVzLAorICAgIGludCBzZWxlY3Rpb25TdGFydCwKKyAgICBpbnQgc2Vs
ZWN0aW9uRW5kKQorewogICAgIEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgp
OwogICAgIGlmICghZm9jdXNlZCB8fCAhbV9pbWVBY2NlcHRFdmVudHMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBFZGl0b3IqIGVkaXRvciA9IGZvY3VzZWQtPmVkaXRvcigpOwogICAgIGlm
ICghZWRpdG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFlZGl0b3ItPmNhbkVk
aXQoKSkgewotICAgICAgICAvLyBUaGUgaW5wdXQgZm9jdXMgaGFzIGJlZW4gbW92ZWQgdG8gYW5v
dGhlciBXZWJXaWRnZXQgb2JqZWN0LgotICAgICAgICAvLyBXZSBzaG91bGQgdXNlIHRoaXMgfGVk
aXRvcnwgb2JqZWN0IG9ubHkgdG8gY29tcGxldGUgdGhlIG9uZ29pbmcKLSAgICAgICAgLy8gY29t
cG9zaXRpb24uCi0gICAgICAgIGlmICghZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKworICAgIC8vIFRoZSBpbnB1dCBmb2N1cyBoYXMg
YmVlbiBtb3ZlZCB0byBhbm90aGVyIFdlYldpZGdldCBvYmplY3QuCisgICAgLy8gV2Ugc2hvdWxk
IHVzZSB0aGlzIHxlZGl0b3J8IG9iamVjdCBvbmx5IHRvIGNvbXBsZXRlIHRoZSBvbmdvaW5nCisg
ICAgLy8gY29tcG9zaXRpb24uCisgICAgaWYgKCFlZGl0b3ItPmNhbkVkaXQoKSAmJiAhZWRpdG9y
LT5oYXNDb21wb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBXZSBz
aG91bGQgdmVyaWZ5IHRoZSBwYXJlbnQgbm9kZSBvZiB0aGlzIElNRSBjb21wb3NpdGlvbiBub2Rl
IGFyZQogICAgIC8vIGVkaXRhYmxlIGJlY2F1c2UgSmF2YVNjcmlwdCBtYXkgZGVsZXRlIGEgcGFy
ZW50IG5vZGUgb2YgdGhlIGNvbXBvc2l0aW9uCkBAIC0xMjI0LDkgKzEyNjYsNyBAQCBib29sIFdl
YlZpZXdJbXBsOjpoYW5kbGVDb21wb3NpdGlvbkV2ZW50CiAKICAgICAvLyBJZiB3ZSdyZSBub3Qg
Z29pbmcgdG8gZmlyZSBhIGtleXByZXNzIGV2ZW50LCB0aGVuIHRoZSBrZXlkb3duIGV2ZW50IHdh
cwogICAgIC8vIGNhbmNlbGVkLiAgSW4gdGhhdCBjYXNlLCBjYW5jZWwgYW55IGV4aXN0aW5nIGNv
bXBvc2l0aW9uLgotICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSB3b3VsZCBvbmx5IGNhbmNlbCBh
IHNpbmdsZSBrZXlwcmVzcywgcmF0aGVyIHRoYW4gdGhlCi0gICAgLy8gd2hvbGUgY29tcG9zaXRp
b24uCi0gICAgaWYgKChjb21tYW5kID09IFdlYkNvbXBvc2l0aW9uQ29tbWFuZERpc2NhcmQpIHx8
IG1fc3VwcHJlc3NOZXh0S2V5cHJlc3NFdmVudCkgeworICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8
fCBtX3N1cHByZXNzTmV4dEtleXByZXNzRXZlbnQpIHsKICAgICAgICAgLy8gQSBicm93c2VyIHBy
b2Nlc3Mgc2VudCBhbiBJUEMgbWVzc2FnZSB3aGljaCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQK
ICAgICAgICAgLy8gc3RyaW5nLCB3aGljaCBtZWFucyBhbiBvbmdvaW5nIGNvbXBvc2l0aW9uIGhh
cyBiZWVuIGNhbmNlbGVkLgogICAgICAgICAvLyBJZiB0aGUgb25nb2luZyBjb21wb3NpdGlvbiBo
YXMgYmVlbiBjYW5jZWxlZCwgcmVwbGFjZSB0aGUgb25nb2luZwpAQCAtMTIzNCw0OSArMTI3NCw0
NSBAQCBib29sIFdlYlZpZXdJbXBsOjpoYW5kbGVDb21wb3NpdGlvbkV2ZW50CiAgICAgICAgIFN0
cmluZyBlbXB0eVN0cmluZzsKICAgICAgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiBl
bXB0eVVuZGVybGluZXM7CiAgICAgICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24oZW1wdHlTdHJp
bmcsIGVtcHR5VW5kZXJsaW5lcywgMCwgMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQSBi
cm93c2VyIHByb2Nlc3Mgc2VudCBhbiBJUEMgbWVzc2FnZSB3aGljaCBjb250YWlucyBhIHN0cmlu
ZyB0byBiZQotICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhpcyBFZGl0b3Igb2JqZWN0LgotICAg
ICAgICAvLyBUbyBkaXNwbGF5IHRoZSBnaXZlbiBzdHJpbmcsIHNldCB0aGUgZ2l2ZW4gc3RyaW5n
IHRvIHRoZQotICAgICAgICAvLyBtX2NvbXBvc2l0aW9uTm9kZSBtZW1iZXIgb2YgdGhpcyBFZGl0
b3Igb2JqZWN0IGFuZCBkaXNwbGF5IGl0LgotICAgICAgICBpZiAodGFyZ2V0U3RhcnQgPCAwKQot
ICAgICAgICAgICAgdGFyZ2V0U3RhcnQgPSAwOwotICAgICAgICBpZiAodGFyZ2V0RW5kIDwgMCkK
LSAgICAgICAgICAgIHRhcmdldEVuZCA9IHN0YXRpY19jYXN0PGludD4oaW1lU3RyaW5nLmxlbmd0
aCgpKTsKLSAgICAgICAgU3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5nKGltZVN0cmluZyk7Ci0gICAg
ICAgIC8vIENyZWF0ZSBjdXN0b20gdW5kZXJsaW5lcy4KLSAgICAgICAgLy8gVG8gZW1waGFzaXpl
IHRoZSBzZWxlY3Rpb24sIHRoZSBzZWxlY3RlZCByZWdpb24gdXNlcyBhIHNvbGlkIGJsYWNrCi0g
ICAgICAgIC8vIGZvciBpdHMgdW5kZXJsaW5lIHdoaWxlIG90aGVyIHJlZ2lvbnMgdXNlcyBhIHBh
bGUgZ3JheSBmb3IgdGhlaXJzLgotICAgICAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+
IHVuZGVybGluZXMoMyk7Ci0gICAgICAgIHVuZGVybGluZXNbMF0uc3RhcnRPZmZzZXQgPSAwOwot
ICAgICAgICB1bmRlcmxpbmVzWzBdLmVuZE9mZnNldCA9IHRhcmdldFN0YXJ0OwotICAgICAgICB1
bmRlcmxpbmVzWzBdLnRoaWNrID0gdHJ1ZTsKLSAgICAgICAgdW5kZXJsaW5lc1swXS5jb2xvci5z
ZXRSR0IoMHhkMywgMHhkMywgMHhkMyk7Ci0gICAgICAgIHVuZGVybGluZXNbMV0uc3RhcnRPZmZz
ZXQgPSB0YXJnZXRTdGFydDsKLSAgICAgICAgdW5kZXJsaW5lc1sxXS5lbmRPZmZzZXQgPSB0YXJn
ZXRFbmQ7Ci0gICAgICAgIHVuZGVybGluZXNbMV0udGhpY2sgPSB0cnVlOwotICAgICAgICB1bmRl
cmxpbmVzWzFdLmNvbG9yLnNldFJHQigweDAwLCAweDAwLCAweDAwKTsKLSAgICAgICAgdW5kZXJs
aW5lc1syXS5zdGFydE9mZnNldCA9IHRhcmdldEVuZDsKLSAgICAgICAgdW5kZXJsaW5lc1syXS5l
bmRPZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGltZVN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAg
IHVuZGVybGluZXNbMl0udGhpY2sgPSB0cnVlOwotICAgICAgICB1bmRlcmxpbmVzWzJdLmNvbG9y
LnNldFJHQigweGQzLCAweGQzLCAweGQzKTsKLSAgICAgICAgLy8gV2hlbiB3ZSB1c2UgY3VzdG9t
IHVuZGVybGluZXMsIFdlYktpdCAoIklubGluZVRleHRCb3guY3BwIiBMaW5lIDI4MikKLSAgICAg
ICAgLy8gcHJldmVudHMgZnJvbSB3cml0aW5nIGEgdGV4dCBpbiBiZXR3ZWVuICdzZWxlY3Rpb25T
dGFydCcgYW5kCi0gICAgICAgIC8vICdzZWxlY3Rpb25FbmQnIHNvbWVob3cuCi0gICAgICAgIC8v
IFRoZXJlZm9yZSwgd2UgdXNlIHRoZSAnY3Vyc29yUG9zaXRpb24nIGZvciB0aGVzZSBhcmd1bWVu
dHMgc28gdGhhdAotICAgICAgICAvLyB0aGVyZSBhcmUgbm90IGFueSBjaGFyYWN0ZXJzIGluIHRo
ZSBhYm92ZSByZWdpb24uCi0gICAgICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24oY29tcG9zaXRp
b25TdHJpbmcsIHVuZGVybGluZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
c29yUG9zaXRpb24sIGN1cnNvclBvc2l0aW9uKTsKLSAgICAgICAgLy8gVGhlIGdpdmVuIHN0cmlu
ZyBpcyBhIHJlc3VsdCBzdHJpbmcsIHdoaWNoIG1lYW5zIHRoZSBvbmdvaW5nCi0gICAgICAgIC8v
IGNvbXBvc2l0aW9uIGhhcyBiZWVuIGNvbXBsZXRlZC4gSSBoYXZlIHRvIGNhbGwgdGhlCi0gICAg
ICAgIC8vIEVkaXRvcjo6Y29uZmlybUNvbXBsZXRpb24oKSBhbmQgY29tcGxldGUgdGhpcyBjb21w
b3NpdGlvbi4KLSAgICAgICAgaWYgKGNvbW1hbmQgPT0gV2ViQ29tcG9zaXRpb25Db21tYW5kQ29u
ZmlybSkKLSAgICAgICAgICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9uKCk7CisgICAgICAg
IHJldHVybiB0ZXh0LmlzRW1wdHkoKTsKICAgICB9CiAKKyAgICAvLyBXaGVuIHRoZSByYW5nZSBv
ZiBjb21wb3NpdGlvbiB1bmRlcmxpbmVzIG92ZXJsYXAgd2l0aCB0aGUgcmFuZ2UgYmV0d2Vlbgor
ICAgIC8vIHNlbGVjdGlvblN0YXJ0IGFuZCBzZWxlY3Rpb25FbmQsIFdlYktpdCBzb21laG93IHdv
bid0IHBhaW50IHRoZSBzZWxlY3Rpb24KKyAgICAvLyBhdCBhbGwgKHNlZSBJbmxpbmVUZXh0Qm94
OjpwYWludCgpIGZ1bmN0aW9uIGluIElubGluZVRleHRCb3guY3BwKS4KKyAgICAvLyBCdXQgdGhl
IHNlbGVjdGlvbiByYW5nZSBhY3R1YWxseSB0YWtlcyBlZmZlY3QuCisgICAgZWRpdG9yLT5zZXRD
b21wb3NpdGlvbihTdHJpbmcodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21w
b3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIodW5kZXJsaW5lcyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKKwogICAgIHJldHVy
biBlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCk7CiB9CiAKK2Jvb2wgV2ViVmlld0ltcGw6OmNvbmZp
cm1Db21wb3NpdGlvbigpCit7CisgICAgRnJhbWUqIGZvY3VzZWQgPSBmb2N1c2VkV2ViQ29yZUZy
YW1lKCk7CisgICAgaWYgKCFmb2N1c2VkIHx8ICFtX2ltZUFjY2VwdEV2ZW50cykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7Cisg
ICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRvci0+aGFzQ29tcG9zaXRpb24oKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gV2Ugc2hvdWxkIHZlcmlmeSB0aGUgcGFyZW50IG5vZGUgb2Yg
dGhpcyBJTUUgY29tcG9zaXRpb24gbm9kZSBhcmUKKyAgICAvLyBlZGl0YWJsZSBiZWNhdXNlIEph
dmFTY3JpcHQgbWF5IGRlbGV0ZSBhIHBhcmVudCBub2RlIG9mIHRoZSBjb21wb3NpdGlvbgorICAg
IC8vIG5vZGUuIEluIHRoaXMgY2FzZSwgV2ViS2l0IGNyYXNoZXMgd2hpbGUgZGVsZXRpbmcgdGV4
dHMgZnJvbSB0aGUgcGFyZW50CisgICAgLy8gbm9kZSwgd2hpY2ggZG9lc24ndCBleGlzdCBhbnkg
bG9uZ2VyLgorICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3NpdGlv
blJhbmdlKCk7CisgICAgaWYgKHJhbmdlKSB7CisgICAgICAgIGNvbnN0IE5vZGUqIG5vZGUgPSBy
YW5nZS0+c3RhcnRQb3NpdGlvbigpLm5vZGUoKTsKKyAgICAgICAgaWYgKCFub2RlIHx8ICFub2Rl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9uKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKKy8vIERFUFJFQ0FURUQsIHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KIGJvb2wgV2ViVmlld0lt
cGw6OnF1ZXJ5Q29tcG9zaXRpb25TdGF0dXMoYm9vbCogZW5hYmxlSU1FLCBXZWJSZWN0KiBjYXJl
dFJlY3QpCiB7CiAgICAgLy8gU3RvcmUgd2hldGhlciB0aGUgc2VsZWN0ZWQgbm9kZSBuZWVkcyBJ
TUUgYW5kIHRoZSBjYXJldCByZWN0YW5nbGUuCkBAIC0xMzExLDYgKzEzNDcsNTkgQEAgYm9vbCBX
ZWJWaWV3SW1wbDo6cXVlcnlDb21wb3NpdGlvblN0YXR1cwogICAgIHJldHVybiB0cnVlOwogfQog
CitXZWJUZXh0SW5wdXRUeXBlIFdlYlZpZXdJbXBsOjp0ZXh0SW5wdXRUeXBlKCkKK3sKKyAgICBX
ZWJUZXh0SW5wdXRUeXBlIHR5cGUgPSBXZWJUZXh0SW5wdXRUeXBlTm9uZTsKKyAgICBjb25zdCBG
cmFtZSogZm9jdXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZvY3VzZWQp
CisgICAgICAgIHJldHVybiB0eXBlOworCisgICAgY29uc3QgRWRpdG9yKiBlZGl0b3IgPSBmb2N1
c2VkLT5lZGl0b3IoKTsKKyAgICBpZiAoIWVkaXRvciB8fCAhZWRpdG9yLT5jYW5FZGl0KCkpCisg
ICAgICAgIHJldHVybiB0eXBlOworCisgICAgU2VsZWN0aW9uQ29udHJvbGxlciogY29udHJvbGxl
ciA9IGZvY3VzZWQtPnNlbGVjdGlvbigpOworICAgIGlmICghY29udHJvbGxlcikKKyAgICAgICAg
cmV0dXJuIHR5cGU7CisKKyAgICBjb25zdCBOb2RlKiBub2RlID0gY29udHJvbGxlci0+c3RhcnQo
KS5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gdHlwZTsKKworICAgIC8v
IFRPRE8oc3V6aGUpOiBTdXBwb3J0IG1vcmUgdGV4dCBpbnB1dCB0eXBlcyB3aGVuIG5lY2Vzc2Fy
eSwgZWcuIE51bWJlciwKKyAgICAvLyBEYXRlLCBFbWFpbCwgVVJMLCBldGMuCisgICAgaWYgKGNv
bnRyb2xsZXItPmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgICAgIHR5cGUgPSBXZWJUZXh0SW5w
dXRUeXBlUGFzc3dvcmQ7CisgICAgZWxzZSBpZiAobm9kZS0+c2hvdWxkVXNlSW5wdXRNZXRob2Qo
KSkKKyAgICAgICAgdHlwZSA9IFdlYlRleHRJbnB1dFR5cGVUZXh0OworCisgICAgcmV0dXJuIHR5
cGU7Cit9CisKK1dlYlJlY3QgV2ViVmlld0ltcGw6OmNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMoKQor
eworICAgIFdlYlJlY3QgcmVjdDsKKyAgICBjb25zdCBGcmFtZSogZm9jdXNlZCA9IGZvY3VzZWRX
ZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZvY3VzZWQpCisgICAgICAgIHJldHVybiByZWN0Owor
CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9IGZvY3VzZWQtPnNlbGVjdGlv
bigpOworICAgIGlmICghY29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisKKyAgICBj
b25zdCBGcmFtZVZpZXcqIHZpZXcgPSBmb2N1c2VkLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQor
ICAgICAgICByZXR1cm4gcmVjdDsKKworICAgIGlmIChjb250cm9sbGVyLT5pc0NhcmV0KCkpCisg
ICAgICAgIHJlY3QgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRyb2xsZXItPmFic29sdXRl
Q2FyZXRCb3VuZHMoKSk7CisgICAgZWxzZSBpZiAoY29udHJvbGxlci0+aXNSYW5nZSgpKSB7Cisg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb250cm9sbGVyLT50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgICAgICByZWN0ID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhmb2N1c2VkLT5maXJz
dFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSkpOworICAgIH0KKyAgICByZXR1cm4gcmVjdDsKK30K
Kwogdm9pZCBXZWJWaWV3SW1wbDo6c2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICAgICAvLyBUaGUgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbigp
IGZ1bmN0aW9uIGNoZWNrcyBpZiB3ZSBjYW4gY2hhbmdlCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCShyZXZpc2lvbiA2MTE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTMgKzkwLDI0IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAgICAg
dmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9j
dXMoYm9vbCBlbmFibGUpOworCisgICAgLy8gREVQUkVDQVRFRCwgd2lsbCBiZSByZW1vdmVkIGxh
dGVyLgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDb21wb3NpdGlvbkV2ZW50KFdlYkNvbXBvc2l0
aW9uQ29tbWFuZCBjb21tYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjdXJzb3JQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgdGFyZ2V0U3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHRhcmdldEVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHRleHQpOwotICAgIHZpcnR1YWwgYm9vbCBxdWVyeUNv
bXBvc2l0aW9uU3RhdHVzKGJvb2wqIGVuYWJsZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViUmVjdCogY2FyZXRSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0
Q29tcG9zaXRpb24oCisgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdGV4dCwKKyAgICAgICAgY29u
c3QgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywKKyAgICAg
ICAgaW50IHNlbGVjdGlvblN0YXJ0LAorICAgICAgICBpbnQgc2VsZWN0aW9uRW5kKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKCk7CisKKyAgICAvLyBERVBSRUNBVEVELCB3
aWxsIGJlIHJlbW92ZWQgbGF0ZXIuCisgICAgdmlydHVhbCBib29sIHF1ZXJ5Q29tcG9zaXRpb25T
dGF0dXMoYm9vbCogZW5hYmxlZCwgV2ViUmVjdCogY2FyZXRSZWN0KTsKKyAgICB2aXJ0dWFsIFdl
YlRleHRJbnB1dFR5cGUgdGV4dElucHV0VHlwZSgpOworICAgIHZpcnR1YWwgV2ViUmVjdCBjYXJl
dE9yU2VsZWN0aW9uQm91bmRzKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHREaXJlY3Rpb24o
V2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUoKSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58757</attachid>
            <date>2010-06-14 23:35:52 -0700</date>
            <delta_ts>2010-06-17 15:29:03 -0700</delta_ts>
            <desc>Fix code style.</desc>
            <filename>refactor-chromium-input-method-apis.patch</filename>
            <type>text/plain</type>
            <size>36343</size>
            <attacher name="James Su">suzhe</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMTQgIFpoZSBTdSAgPHN1emhlQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21p
dW1dUmVmYWN0b3IgaW5wdXQgbWV0aG9kIHJlbGF0ZWQgQVBJcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNjA4CisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBCZWNhdXNlIGl0J3MgYSBzbWFsbCBvcHRpbWl6YXRpb24gYW5kIHRoZXJlIGlzIG5vIGZ1
bmN0aW9uYWwgY2hhbmdlLgorCisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkTm9kZSk6CisKIDIw
MTAtMDYtMTQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBObyByZXZpZXcuIEdUSyBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL3BhZ2UvRm9jdXNDb250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gNjExNzUpCisrKyBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTk0LDIwICs1OTQsMjMgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6
OnNldEZvY3VzZWROb2RlKE5vZAogICAgIC8vIEZJWE1FOiBNaWdodCB3YW50IHRvIGRpc2FibGUg
dGhpcyBjaGVjayBmb3IgY2FyZXRCcm93c2luZwogICAgIGlmIChvbGRGb2N1c2VkTm9kZSAmJiBv
bGRGb2N1c2VkTm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IG9sZEZvY3VzZWROb2RlICYm
ICFyZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMob2xkRm9jdXNlZE5vZGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAorCisgICAgLy8gU2V0IGlucHV0IG1ldGhvZCBzdGF0ZSBiZWZv
cmUgY2hhbmdpbmcgdGhlIGZvY3VzZWQgbm9kZSwgc28gdGhhdCB0aGUKKyAgICAvLyBpbnB1dCBt
ZXRob2QgY2FuIHN0aWxsIGhhdmUgYSBjaGFuY2UgdG8gZmluaXNoIHRoZSBvbmdvaW5nIGNvbXBv
c2l0aW9uCisgICAgLy8gc2Vzc2lvbi4KKyAgICBtX3BhZ2UtPmVkaXRvckNsaWVudCgpLT5zZXRJ
bnB1dE1ldGhvZFN0YXRlKG5vZGUgPyBub2RlLT5zaG91bGRVc2VJbnB1dE1ldGhvZCgpIDogZmFs
c2UpOworCiAgICAgY2xlYXJTZWxlY3Rpb25JZk5lZWRlZChvbGRGb2N1c2VkRnJhbWUuZ2V0KCks
IG5ld0ZvY3VzZWRGcmFtZS5nZXQoKSwgbm9kZSk7Ci0gICAgCisKICAgICBpZiAoIW5vZGUpIHsK
ICAgICAgICAgaWYgKG9sZERvY3VtZW50KQogICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnNldEZv
Y3VzZWROb2RlKDApOwotICAgICAgICBtX3BhZ2UtPmVkaXRvckNsaWVudCgpLT5zZXRJbnB1dE1l
dGhvZFN0YXRlKGZhbHNlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgUmVm
UHRyPERvY3VtZW50PiBuZXdEb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7CiAKICAgICBpZiAo
bmV3RG9jdW1lbnQgJiYgbmV3RG9jdW1lbnQtPmZvY3VzZWROb2RlKCkgPT0gbm9kZSkgewotICAg
ICAgICBtX3BhZ2UtPmVkaXRvckNsaWVudCgpLT5zZXRJbnB1dE1ldGhvZFN0YXRlKG5vZGUtPnNo
b3VsZFVzZUlucHV0TWV0aG9kKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CkBAIC02MTksOCArNjIyLDYgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWROb2Rl
KE5vZAogICAgIGlmIChuZXdEb2N1bWVudCkKICAgICAgICAgbmV3RG9jdW1lbnQtPnNldEZvY3Vz
ZWROb2RlKG5vZGUpOwogICAgIAotICAgIG1fcGFnZS0+ZWRpdG9yQ2xpZW50KCktPnNldElucHV0
TWV0aG9kU3RhdGUobm9kZS0+c2hvdWxkVXNlSW5wdXRNZXRob2QoKSk7Ci0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2MTE3NikKKysrIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0w
Ni0xNCAgWmhlIFN1ICA8c3V6aGVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV1SZWZhY3RvciBpbnB1dCBtZXRo
b2QgcmVsYXRlZCBBUElzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDA2MDgKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGlj
L1dlYkNvbXBvc2l0aW9uQ29tbWFuZC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJDb21wb3NpdGlv
blVuZGVybGluZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRpb25VbmRl
cmxpbmU6OldlYkNvbXBvc2l0aW9uVW5kZXJsaW5lKToKKyAgICAgICAgKiBwdWJsaWMvV2ViVGV4
dElucHV0VHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6KToKKyAgICAgICAgKiBwdWJs
aWMvV2ViVmlld0NsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViV2lkZ2V0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdl
dENsaWVudDo6cmVzZXRJbnB1dE1ldGhvZCk6CisgICAgICAgICogc3JjL0NvbXBvc2l0aW9uVW5k
ZXJsaW5lQnVpbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpb25VbmRl
cmxpbmVCdWlsZGVyOjpDb21wb3NpdGlvblVuZGVybGluZUJ1aWxkZXIpOgorICAgICAgICAqIHNy
Yy9Db21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6Q29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyOjpDb21wb3NpdGlvblVu
ZGVybGluZVZlY3RvckJ1aWxkZXIpOgorICAgICAgICAqIHNyYy9Db21wb3NpdGlvblVuZGVybGlu
ZVZlY3RvckJ1aWxkZXIuaDogQWRkZWQuCisgICAgICAgICogc3JjL0VkaXRvckNsaWVudEltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpzZXRJbnB1dE1ldGhvZFN0
YXRlKToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBvcHVwTWVudUltcGw6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUG9wdXBNZW51SW1wbDo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUG9wdXBNZW51SW1wbDo6dGV4dElucHV0VHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBv
cHVwTWVudUltcGw6OmNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMpOgorICAgICAgICAqIHNyYy9XZWJQ
b3B1cE1lbnVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmhhbmRsZUNvbXBvc2l0aW9uRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnRleHRJbnB1dFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y2Fy
ZXRPclNlbGVjdGlvbkJvdW5kcyk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIw
MTAtMDYtMTQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggQ2hyb21pdW0gYnVpbGQuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNjExNzUp
CisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiAr
OTMsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29tbW9uLmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViQ29tcG9zaXRpb25Db21tYW5kLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJDb25zb2xlTWVzc2FnZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbnRleHRN
ZW51RGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvb2tpZS5oJywKQEAgLTIw
NSw2ICsyMDYsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVGV4dEFmZmluaXR5Lmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVGV4dENhc2VTZW5zaXRpdml0eS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlRleHREaXJlY3Rpb24uaCcsCisgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViVGhlbWVFbmdpbmUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJVUkwuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJVUkxFcnJvci5oJywKQEAgLTI0MCw2ICsyNDIsOSBA
QAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21pdW1CcmlkZ2UuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL0Nocm9taXVtQ3VycmVudFRpbWUuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L0Nocm9taXVtVGhyZWFkaW5nLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9Db21wb3NpdGlv
blVuZGVybGluZUJ1aWxkZXIuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9Db21wb3NpdGlvblVu
ZGVybGluZVZlY3RvckJ1aWxkZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL0NvbXBvc2l0
aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlci5oJywKICAgICAgICAgICAgICAgICAnc3JjL0NvbnRl
eHRNZW51Q2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAn
LApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdGlvbkNvbW1hbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0aW9uQ29tbWFu
ZC5oCShyZXZpc2lvbiA2MTE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9z
aXRpb25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKKy8vIERFUFJFQ0FURUQuCiBlbnVtIFdlYkNvbXBvc2l0aW9uQ29tbWFu
ZCB7CiAgICAgV2ViQ29tcG9zaXRpb25Db21tYW5kRGlzY2FyZCwKICAgICBXZWJDb21wb3NpdGlv
bkNvbW1hbmRTZXQsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0aW9u
VW5kZXJsaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21w
b3NpdGlvblVuZGVybGluZS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJDb21wb3NpdGlvblVuZGVybGluZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJDb21wb3NpdGlvblVuZGVybGluZV9oCisjZGVmaW5lIFdlYkNvbXBvc2l0aW9u
VW5kZXJsaW5lX2gKKworI2luY2x1ZGUgIldlYkNvbG9yLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisvLyBDbGFzcyBXZWJDb21wb3NpdGlvblVuZGVybGluZSBpcyBpbnRlbmRlZCB0byBiZSB1
c2VkIHdpdGggV2ViV2lkZ2V0J3MKKy8vIHNldENvbXBvc2l0aW9uKCkgbWV0aG9kLgorc3RydWN0
IFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lIHsKKyAgICBXZWJDb21wb3NpdGlvblVuZGVybGluZSgp
CisgICAgICAgIDogc3RhcnRPZmZzZXQoMCkKKyAgICAgICAgLCBlbmRPZmZzZXQoMCkKKyAgICAg
ICAgLCBjb2xvcigwKQorICAgICAgICAsIHRoaWNrKGZhbHNlKSB7IH0KKworICAgIFdlYkNvbXBv
c2l0aW9uVW5kZXJsaW5lKHVuc2lnbmVkIHMsIHVuc2lnbmVkIGUsIFdlYkNvbG9yIGMsIGJvb2wg
dCkKKyAgICAgICAgOiBzdGFydE9mZnNldChzKQorICAgICAgICAsIGVuZE9mZnNldChlKQorICAg
ICAgICAsIGNvbG9yKGMpCisgICAgICAgICwgdGhpY2sodCkgeyB9CisKKyAgICB1bnNpZ25lZCBz
dGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQ7CisgICAgV2ViQ29sb3IgY29sb3I7
CisgICAgYm9vbCB0aGljazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGV4dElucHV0VHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGV4dElucHV0VHlwZS5oCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRleHRJbnB1dFR5cGVfaAorI2RlZmlu
ZSBXZWJUZXh0SW5wdXRUeXBlX2gKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gV2ViVGV4
dElucHV0VHlwZSB7CisgICAgLy8gSW5wdXQgY2FyZXQgaXMgbm90IGluIGFuIGVkaXRhYmxlIG5v
ZGUsIG5vIGlucHV0IG1ldGhvZCBzaGFsbCBiZSB1c2VkLgorICAgIFdlYlRleHRJbnB1dFR5cGVO
b25lLAorCisgICAgLy8gSW5wdXQgY2FyZXQgaXMgaW4gYSBub3JtYWwgZWRpdGFibGUgbm9kZSwg
YW55IGlucHV0IG1ldGhvZCBjYW4gYmUgdXNlZC4KKyAgICBXZWJUZXh0SW5wdXRUeXBlVGV4dCwK
KworICAgIC8vIElucHV0IGNhcmV0IGlzIGluIGEgcGFzc3dvcmQgYm94LCBhbiBpbnB1dCBtZXRo
b2QgbWF5IGJlIHVzZWQgb25seSBpZgorICAgIC8vIGl0J3Mgc3VpdGFibGUgZm9yIHBhc3N3b3Jk
IGlucHV0LgorICAgIFdlYlRleHRJbnB1dFR5cGVQYXNzd29yZCwKKworICAgIC8vIFRPRE8oc3V6
aGUpOiBBZGQgbW9yZSB0ZXh0IGlucHV0IHR5cGVzIHdoZW4gbmVjZXNzYXJ5LCBlZy4gTnVtYmVy
LAorICAgIC8vIERhdGUsIEVtYWlsLCBVUkwsIGV0Yy4KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5o
CShyZXZpc2lvbiA2MTE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBib29sIGlzU21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICAvLyBERVBSRUNBVEVEOiByZXBsYWNlZCBieSBXZWJXaWRnZXRD
bGllbnQ6OnJlc2V0SW5wdXRNZXRob2QoKS4KICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRo
b2RFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5F
ZGl0aW5nKCkgeyB9CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgJKHJldmlzaW9u
IDYxMTc1KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIldlYkNhbnZhcy5oIgogI2luY2x1ZGUg
IldlYkNvbW1vbi5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0aW9uQ29tbWFuZC5oIgorI2luY2x1
ZGUgIldlYkNvbXBvc2l0aW9uVW5kZXJsaW5lLmgiCisjaW5jbHVkZSAiV2ViVGV4dElucHV0VHlw
ZS5oIgogI2luY2x1ZGUgIldlYlRleHREaXJlY3Rpb24uaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7
CkBAIC00Miw2ICs0NCw3IEBAIGNsYXNzIFdlYklucHV0RXZlbnQ7CiBjbGFzcyBXZWJTdHJpbmc7
CiBzdHJ1Y3QgV2ViUmVjdDsKIHN0cnVjdCBXZWJTaXplOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGNsYXNzIFdlYlZlY3RvcjsKIAogY2xhc3MgV2ViV2lkZ2V0IHsKIHB1YmxpYzoKQEAgLTc2LDE3
ICs3OSwzOSBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0
IHRoYXQgaXQgaGFzIGdhaW5lZCBvciBsb3N0IGtleWJvYXJkIGZvY3VzLgogICAgIHZpcnR1YWwg
dm9pZCBzZXRGb2N1cyhib29sKSA9IDA7CiAKLSAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBX
ZWJXaWRnZXQgb2YgYSBjb21wb3NpdGlvbiBldmVudC4KKyAgICAvLyBERVBSRUNBVEVELiBJdCdz
IHJlcGxhY2VkIGJ5IHNldENvbXBvc2l0aW9uKCkgYW5kIGNvbmZpcm1Db21wb3NpdGlvbigpLgog
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDb21wb3NpdGlvbkV2ZW50KFdlYkNvbXBvc2l0aW9uQ29t
bWFuZCBjb21tYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBjdXJzb3JQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgdGFyZ2V0U3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHRhcmdldEVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBXZWJTdHJpbmcmIHRleHQpID0gMDsKIAotICAgIC8vIFJldHJpZXZlIHRoZSBzdGF0
dXMgb2YgdGhpcyBXZWJXaWRnZXQgcmVxdWlyZWQgYnkgSU1FIEFQSXMuICBVcG9uCi0gICAgLy8g
c3VjY2VzcyBlbmFibGVkIGFuZCBjYXJldEJvdW5kcyBhcmUgc2V0LgorICAgIC8vIENhbGxlZCB0
byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhIG5ldyBjb21wb3NpdGlvbiB0ZXh0LgorICAgIC8v
IElmIHNlbGVjdGlvblN0YXJ0IGFuZCBzZWxlY3Rpb25FbmQgaGFzIHRoZSBzYW1lIHZhbHVlLCB0
aGVuIGl0IGluZGljYXRlcworICAgIC8vIHRoZSBpbnB1dCBjYXJldCBwb3NpdGlvbi4gSWYgdGhl
IHRleHQgaXMgZW1wdHksIHRoZW4gdGhlIGV4aXN0aW5nCisgICAgLy8gY29tcG9zaXRpb24gdGV4
dCB3aWxsIGJlIGNhbmNlbGxlZC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBvc2l0
aW9uIHRleHQgd2FzIHNldCBzdWNjZXNzZnVsbHkuCisgICAgdmlydHVhbCBib29sIHNldENvbXBv
c2l0aW9uKAorICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHRleHQsCisgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsCisgICAgICAgIGlu
dCBzZWxlY3Rpb25TdGFydCwKKyAgICAgICAgaW50IHNlbGVjdGlvbkVuZCkgPSAwOworCisgICAg
Ly8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0IHRvIGNvbmZpcm0gYW4gb25nb2luZyBj
b21wb3NpdGlvbi4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gb25nb2luZyBj
b21wb3NpdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKCkgPSAwOwor
CisgICAgLy8gREVQUkVDQVRFRC4gSXQncyByZXBsYWNlZCBieSB0ZXh0SW5wdXRUeXBlKCkgYW5k
CisgICAgLy8gY2FyZXRPclNlbGVjdGlvbkJvdW5kcygpLgogICAgIHZpcnR1YWwgYm9vbCBxdWVy
eUNvbXBvc2l0aW9uU3RhdHVzKGJvb2wqIGVuYWJsZWQsIFdlYlJlY3QqIGNhcmV0Qm91bmRzKSA9
IDA7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHRleHQgaW5wdXQgdHlwZSBvZiB0aGlz
IFdlYldpZGdldC4KKyAgICB2aXJ0dWFsIFdlYlRleHRJbnB1dFR5cGUgdGV4dElucHV0VHlwZSgp
ID0gMDsKKworICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgY2FyZXQgYm91bmRzIG9mIHRoaXMg
V2ViV2lkZ2V0LiBUaGUgc2VsZWN0aW9uIGJvdW5kcworICAgIC8vIHdpbGwgYmUgcmV0dXJuZWQg
aWYgYSBzZWxlY3Rpb24gcmFuZ2UgaXMgYXZhaWxhYmxlLgorICAgIHZpcnR1YWwgV2ViUmVjdCBj
YXJldE9yU2VsZWN0aW9uQm91bmRzKCkgPSAwOworCiAgICAgLy8gQ2hhbmdlcyB0aGUgdGV4dCBk
aXJlY3Rpb24gb2YgdGhlIHNlbGVjdGVkIGlucHV0IG5vZGUuCiAgICAgdmlydHVhbCB2b2lkIHNl
dFRleHREaXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbikgPSAwOwogCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgJKHJldmlzaW9uIDYxMTc1KQorKysgV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODMs
NiArODMsMTAgQEAgcHVibGljOgogICAgIC8vIGRpc3BsYXllZC4KICAgICB2aXJ0dWFsIFdlYlNj
cmVlbkluZm8gc2NyZWVuSW5mbygpIHsgcmV0dXJuIFdlYlNjcmVlbkluZm8oKTsgfQogCisgICAg
Ly8gV2hlbiB0aGlzIG1ldGhvZCBnZXRzIGNhbGxlZCwgV2ViV2lkZ2V0Q2xpZW50IGltcGxlbWVu
dGF0aW9uIHNob3VsZAorICAgIC8vIHJlc2V0IHRoZSBpbnB1dCBtZXRob2QgYnkgY2FuY2VsbGlu
ZyBhbnkgb25nb2luZyBjb21wb3NpdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRJbnB1dE1l
dGhvZCgpIHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgfldlYldpZGdldENsaWVudCgpIHsgfQogfTsK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQ29tcG9zaXRpb25VbmRlcmxpbmVCdWlsZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db21wb3NpdGlvblVuZGVybGluZUJ1
aWxkZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29tcG9zaXRpb25V
bmRlcmxpbmVCdWlsZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENv
bXBvc2l0aW9uVW5kZXJsaW5lQnVpbGRlcl9oCisjZGVmaW5lIENvbXBvc2l0aW9uVW5kZXJsaW5l
QnVpbGRlcl9oCisKKyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNp
bmNsdWRlICJXZWJDb21wb3NpdGlvblVuZGVybGluZS5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGZvciBjb252
ZXJ0aW5nIGZyb20gV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUgdG8KKy8vIFdlYkNvcmU6OkNvbXBv
c2l0aW9uVW5kZXJsaW5lLgorCitjbGFzcyBDb21wb3NpdGlvblVuZGVybGluZUJ1aWxkZXIgOiBw
dWJsaWMgV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUgeworcHVibGljOgorICAgIENvbXBv
c2l0aW9uVW5kZXJsaW5lQnVpbGRlcihjb25zdCBXZWJDb21wb3NpdGlvblVuZGVybGluZSYgdSkK
KyAgICAgICAgOiBXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZSh1LnN0YXJ0T2Zmc2V0LCB1
LmVuZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJD
b3JlOjpDb2xvcih1LmNvbG9yKSwgdS50aGljaykgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbXBvc2l0aW9uVW5k
ZXJsaW5lVmVjdG9yQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Db21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9Db21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
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
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlci5oIgorCisjaW5jbHVkZSAiQ29t
cG9zaXRpb25VbmRlcmxpbmVCdWlsZGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVy
OjpDb21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIoCisgICAgY29uc3QgV2ViVmVjdG9y
PFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcykKK3sKKyAgICBzaXplX3Qgc2l6
ZSA9IHVuZGVybGluZXMuc2l6ZSgpOworICAgIHJlc2VydmVDYXBhY2l0eShzaXplKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgYXBwZW5kKENvbXBvc2l0
aW9uVW5kZXJsaW5lQnVpbGRlcih1bmRlcmxpbmVzW2ldKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9Db21wb3NpdGlvblVuZGVybGluZVZl
Y3RvckJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbXBvc2l0
aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9t
aXVtL3NyYy9Db21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVy
X2gKKyNkZWZpbmUgQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyX2gKKworI2luY2x1
ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0
aW9uVW5kZXJsaW5lLmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCisvLyBUaGlzIGNsYXNzZXMgYXJlIHVzZWQgZm9yIGNvbnZlcnRpbmcgZnJvbSBzdGQ6
OnZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4KKy8vIHRvIFZlY3RvcjxXZWJDb3JlOjpD
b21wb3NpdGlvblVuZGVybGluZT4uCisKK2NsYXNzIENvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9y
QnVpbGRlciA6CisgICAgcHVibGljIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGlu
ZT4geworcHVibGljOgorICAgIENvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlcigKKyAg
ICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYpOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9FZGl0b3JDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L0VkaXRvckNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA2MTE3NSkKKysrIFdlYktpdC9jaHJvbWl1
bS9zcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyMSw4ICs5MjEs
MTMgQEAgdm9pZCBFZGl0b3JDbGllbnRJbXBsOjpnZXRHdWVzc2VzRm9yV29yZAogCiB2b2lkIEVk
aXRvckNsaWVudEltcGw6OnNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKQogewotICAg
IGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQorICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKSB7
CisgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPnJlc2V0SW5wdXRNZXRob2QoKTsKKworICAg
ICAgICAvLyBSZW1vdmUgdGhpcyBsaW5lIHdoZW4gV2ViVmlld0NsaWVudDo6c2V0SW5wdXRNZXRo
b2RFbmFibGVkKCkgZ2V0cworICAgICAgICAvLyByZW1vdmVkLgogICAgICAgICBtX3dlYlZpZXct
PmNsaWVudCgpLT5zZXRJbnB1dE1ldGhvZEVuYWJsZWQoZW5hYmxlZCk7CisgICAgfQogfQogCiB9
IC8vIG5hbWVzYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1l
bnVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVu
dUltcGwuY3BwCShyZXZpc2lvbiA2MTE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9w
dXBNZW51SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAsNyBAQCB2b2lkIFdl
YlBvcHVwTWVudUltcGw6OnNldEZvY3VzKGJvb2wgZW5hCiB7CiB9CiAKKy8vIERFUFJFQ0FURUQs
IHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KIGJvb2wgV2ViUG9wdXBNZW51SW1wbDo6aGFuZGxlQ29t
cG9zaXRpb25FdmVudCgKICAgICBXZWJDb21wb3NpdGlvbkNvbW1hbmQgY29tbWFuZCwgaW50IGN1
cnNvclBvc2l0aW9uLCBpbnQgdGFyZ2V0U3RhcnQsCiAgICAgaW50IHRhcmdldEVuZCwgY29uc3Qg
V2ViU3RyaW5nJiBpbWVTdHJpbmcpCkBAIC0yMzcsMTEgKzIzOCwzNCBAQCBib29sIFdlYlBvcHVw
TWVudUltcGw6OmhhbmRsZUNvbXBvc2l0aW9uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29s
IFdlYlBvcHVwTWVudUltcGw6OnNldENvbXBvc2l0aW9uKAorICAgIGNvbnN0IFdlYlN0cmluZyYg
dGV4dCwgY29uc3QgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5l
cywKKyAgICBpbnQgc2VsZWN0aW9uU3RhcnQsIGludCBzZWxlY3Rpb25FbmQpCit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFdlYlBvcHVwTWVudUltcGw6OmNvbmZpcm1Db21wb3NpdGlv
bigpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBERVBSRUNBVEVELCB3aWxsIGJlIHJl
bW92ZWQgbGF0ZXIuCiBib29sIFdlYlBvcHVwTWVudUltcGw6OnF1ZXJ5Q29tcG9zaXRpb25TdGF0
dXMoYm9vbCogZW5hYmxlZCwgV2ViUmVjdCogY2FyZXRSZWN0KQogewogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAorV2ViVGV4dElucHV0VHlwZSBXZWJQb3B1cE1lbnVJbXBsOjp0ZXh0SW5wdXRUeXBl
KCkKK3sKKyAgICByZXR1cm4gV2ViVGV4dElucHV0VHlwZU5vbmU7Cit9CisKK1dlYlJlY3QgV2Vi
UG9wdXBNZW51SW1wbDo6Y2FyZXRPclNlbGVjdGlvbkJvdW5kcygpCit7CisgICAgcmV0dXJuIFdl
YlJlY3QoKTsKK30KKwogdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpzZXRUZXh0RGlyZWN0aW9uKFdl
YlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQogewogfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQb3B1cE1lbnVJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQb3B1cE1lbnVJbXBsLmgJKHJldmlzaW9uIDYxMTc1KQorKysgV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQb3B1cE1lbnVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEwICs2NiwyMSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRF
dmVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKKworICAgIC8vIERFUFJFQ0FURUQsIHdpbGwg
YmUgcmVtb3ZlZCBsYXRlci4KICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlQ29tcG9zaXRpb25FdmVu
dCgKICAgICAgICAgV2ViQ29tcG9zaXRpb25Db21tYW5kIGNvbW1hbmQsIGludCBjdXJzb3JQb3Np
dGlvbiwKICAgICAgICAgaW50IHRhcmdldFN0YXJ0LCBpbnQgdGFyZ2V0RW5kLCBjb25zdCBXZWJT
dHJpbmcmIHRleHQpOworICAgIHZpcnR1YWwgYm9vbCBzZXRDb21wb3NpdGlvbigKKyAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiB0ZXh0LAorICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViQ29tcG9z
aXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLAorICAgICAgICBpbnQgc2VsZWN0aW9uU3RhcnQs
IGludCBzZWxlY3Rpb25FbmQpOworICAgIHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRpb24o
KTsKKworICAgIC8vIERFUFJFQ0FURUQsIHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KICAgICB2aXJ0
dWFsIGJvb2wgcXVlcnlDb21wb3NpdGlvblN0YXR1cyhib29sKiBlbmFibGVkLCBXZWJSZWN0KiBj
YXJldFJlY3QpOworICAgIHZpcnR1YWwgV2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRUeXBlKCk7
CisgICAgdmlydHVhbCBXZWJSZWN0IGNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMoKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbik7CiAg
ICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShy
ZXZpc2lvbiA2MTE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQXV0b2NvbXBsZXRlUG9w
dXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkNo
cm9tZS5oIgorI2luY2x1ZGUgIkNvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlci5oIgog
I2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCkBAIC0xMTkxLDI1ICsxMTkyLDY2IEBA
IHZvaWQgV2ViVmlld0ltcGw6OnNldEZvY3VzKGJvb2wgZW5hYmxlKQogICAgIH0KIH0KIAorLy8g
REVQUkVDQVRFRCwgd2lsbCBiZSByZW1vdmVkIGxhdGVyLgogYm9vbCBXZWJWaWV3SW1wbDo6aGFu
ZGxlQ29tcG9zaXRpb25FdmVudChXZWJDb21wb3NpdGlvbkNvbW1hbmQgY29tbWFuZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGN1cnNvclBvc2l0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0U3RhcnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXJnZXRFbmQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmlu
ZyYgaW1lU3RyaW5nKQogeworICAgIGlmIChjb21tYW5kID09IFdlYktpdDo6V2ViQ29tcG9zaXRp
b25Db21tYW5kU2V0KSB7CisgICAgICAgIGlmICh0YXJnZXRTdGFydCA8IDApCisgICAgICAgICAg
ICB0YXJnZXRTdGFydCA9IDA7CisgICAgICAgIGlmICh0YXJnZXRFbmQgPCAwKQorICAgICAgICAg
ICAgdGFyZ2V0RW5kID0gc3RhdGljX2Nhc3Q8aW50PihpbWVTdHJpbmcubGVuZ3RoKCkpOworCisg
ICAgICAgIC8vIENyZWF0ZSBjdXN0b20gdW5kZXJsaW5lcy4KKyAgICAgICAgLy8gVG8gZW1waGFz
aXplIHRoZSBzZWxlY3Rpb24sIHRoZSBzZWxlY3RlZCByZWdpb24gdXNlcyBhIHNvbGlkIGJsYWNr
CisgICAgICAgIC8vIGZvciBpdHMgdW5kZXJsaW5lIHdoaWxlIG90aGVyIHJlZ2lvbnMgdXNlcyBh
IHBhbGUgZ3JheSBmb3IgdGhlaXJzLgorICAgICAgICBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25V
bmRlcmxpbmU+IHVuZGVybGluZXMoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSk7CisgICAgICAgIHVu
ZGVybGluZXNbMF0uc3RhcnRPZmZzZXQgPSAwOworICAgICAgICB1bmRlcmxpbmVzWzBdLmVuZE9m
ZnNldCA9IHRhcmdldFN0YXJ0OworICAgICAgICB1bmRlcmxpbmVzWzBdLnRoaWNrID0gdHJ1ZTsK
KyAgICAgICAgdW5kZXJsaW5lc1swXS5jb2xvciA9IDB4ZmZkM2QzZDM7CisgICAgICAgIHVuZGVy
bGluZXNbMV0uc3RhcnRPZmZzZXQgPSB0YXJnZXRTdGFydDsKKyAgICAgICAgdW5kZXJsaW5lc1sx
XS5lbmRPZmZzZXQgPSB0YXJnZXRFbmQ7CisgICAgICAgIHVuZGVybGluZXNbMV0udGhpY2sgPSB0
cnVlOworICAgICAgICB1bmRlcmxpbmVzWzFdLmNvbG9yID0gMHhmZjAwMDAwMDsKKyAgICAgICAg
dW5kZXJsaW5lc1syXS5zdGFydE9mZnNldCA9IHRhcmdldEVuZDsKKyAgICAgICAgdW5kZXJsaW5l
c1syXS5lbmRPZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW1lU3RyaW5nLmxlbmd0aCgp
KTsKKyAgICAgICAgdW5kZXJsaW5lc1syXS50aGljayA9IHRydWU7CisgICAgICAgIHVuZGVybGlu
ZXNbMl0uY29sb3IgPSAweGZmZDNkM2QzOworICAgICAgICByZXR1cm4gc2V0Q29tcG9zaXRpb24o
aW1lU3RyaW5nLCB1bmRlcmxpbmVzLCBjdXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pOwor
ICAgIH0KKworICAgIGlmIChjb21tYW5kID09IFdlYktpdDo6V2ViQ29tcG9zaXRpb25Db21tYW5k
RGlzY2FyZCkKKyAgICAgICAgc2V0Q29tcG9zaXRpb24oV2ViU3RyaW5nKCksIFdlYlZlY3RvcjxX
ZWJDb21wb3NpdGlvblVuZGVybGluZT4oKSwgMCwgMCk7CisgICAgZWxzZSBpZiAoY29tbWFuZCA9
PSBXZWJLaXQ6OldlYkNvbXBvc2l0aW9uQ29tbWFuZENvbmZpcm0pIHsKKyAgICAgICAgc2V0Q29t
cG9zaXRpb24oaW1lU3RyaW5nLCBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+KCks
IDAsIDApOworICAgICAgICBjb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6c2V0Q29tcG9zaXRpb24oCisgICAgY29u
c3QgV2ViU3RyaW5nJiB0ZXh0LAorICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVu
ZGVybGluZT4mIHVuZGVybGluZXMsCisgICAgaW50IHNlbGVjdGlvblN0YXJ0LAorICAgIGludCBz
ZWxlY3Rpb25FbmQpCit7CiAgICAgRnJhbWUqIGZvY3VzZWQgPSBmb2N1c2VkV2ViQ29yZUZyYW1l
KCk7CiAgICAgaWYgKCFmb2N1c2VkIHx8ICFtX2ltZUFjY2VwdEV2ZW50cykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7CiAgICAg
aWYgKCFlZGl0b3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWVkaXRvci0+Y2Fu
RWRpdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBpbnB1dCBmb2N1cyBoYXMgYmVlbiBtb3ZlZCB0byBh
bm90aGVyIFdlYldpZGdldCBvYmplY3QuCi0gICAgICAgIC8vIFdlIHNob3VsZCB1c2UgdGhpcyB8
ZWRpdG9yfCBvYmplY3Qgb25seSB0byBjb21wbGV0ZSB0aGUgb25nb2luZwotICAgICAgICAvLyBj
b21wb3NpdGlvbi4KLSAgICAgICAgaWYgKCFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorCisgICAgLy8gVGhlIGlucHV0IGZvY3VzIGhh
cyBiZWVuIG1vdmVkIHRvIGFub3RoZXIgV2ViV2lkZ2V0IG9iamVjdC4KKyAgICAvLyBXZSBzaG91
bGQgdXNlIHRoaXMgfGVkaXRvcnwgb2JqZWN0IG9ubHkgdG8gY29tcGxldGUgdGhlIG9uZ29pbmcK
KyAgICAvLyBjb21wb3NpdGlvbi4KKyAgICBpZiAoIWVkaXRvci0+Y2FuRWRpdCgpICYmICFlZGl0
b3ItPmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFdl
IHNob3VsZCB2ZXJpZnkgdGhlIHBhcmVudCBub2RlIG9mIHRoaXMgSU1FIGNvbXBvc2l0aW9uIG5v
ZGUgYXJlCiAgICAgLy8gZWRpdGFibGUgYmVjYXVzZSBKYXZhU2NyaXB0IG1heSBkZWxldGUgYSBw
YXJlbnQgbm9kZSBvZiB0aGUgY29tcG9zaXRpb24KQEAgLTEyMjQsOSArMTI2Niw3IEBAIGJvb2wg
V2ViVmlld0ltcGw6OmhhbmRsZUNvbXBvc2l0aW9uRXZlbnQKIAogICAgIC8vIElmIHdlJ3JlIG5v
dCBnb2luZyB0byBmaXJlIGEga2V5cHJlc3MgZXZlbnQsIHRoZW4gdGhlIGtleWRvd24gZXZlbnQg
d2FzCiAgICAgLy8gY2FuY2VsZWQuICBJbiB0aGF0IGNhc2UsIGNhbmNlbCBhbnkgZXhpc3Rpbmcg
Y29tcG9zaXRpb24uCi0gICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHdvdWxkIG9ubHkgY2FuY2Vs
IGEgc2luZ2xlIGtleXByZXNzLCByYXRoZXIgdGhhbiB0aGUKLSAgICAvLyB3aG9sZSBjb21wb3Np
dGlvbi4KLSAgICBpZiAoKGNvbW1hbmQgPT0gV2ViQ29tcG9zaXRpb25Db21tYW5kRGlzY2FyZCkg
fHwgbV9zdXBwcmVzc05leHRLZXlwcmVzc0V2ZW50KSB7CisgICAgaWYgKHRleHQuaXNFbXB0eSgp
IHx8IG1fc3VwcHJlc3NOZXh0S2V5cHJlc3NFdmVudCkgewogICAgICAgICAvLyBBIGJyb3dzZXIg
cHJvY2VzcyBzZW50IGFuIElQQyBtZXNzYWdlIHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxp
ZAogICAgICAgICAvLyBzdHJpbmcsIHdoaWNoIG1lYW5zIGFuIG9uZ29pbmcgY29tcG9zaXRpb24g
aGFzIGJlZW4gY2FuY2VsZWQuCiAgICAgICAgIC8vIElmIHRoZSBvbmdvaW5nIGNvbXBvc2l0aW9u
IGhhcyBiZWVuIGNhbmNlbGVkLCByZXBsYWNlIHRoZSBvbmdvaW5nCkBAIC0xMjM0LDQ5ICsxMjc0
LDQ1IEBAIGJvb2wgV2ViVmlld0ltcGw6OmhhbmRsZUNvbXBvc2l0aW9uRXZlbnQKICAgICAgICAg
U3RyaW5nIGVtcHR5U3RyaW5nOwogICAgICAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+
IGVtcHR5VW5kZXJsaW5lczsKICAgICAgICAgZWRpdG9yLT5zZXRDb21wb3NpdGlvbihlbXB0eVN0
cmluZywgZW1wdHlVbmRlcmxpbmVzLCAwLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBB
IGJyb3dzZXIgcHJvY2VzcyBzZW50IGFuIElQQyBtZXNzYWdlIHdoaWNoIGNvbnRhaW5zIGEgc3Ry
aW5nIHRvIGJlCi0gICAgICAgIC8vIGRpc3BsYXllZCBpbiB0aGlzIEVkaXRvciBvYmplY3QuCi0g
ICAgICAgIC8vIFRvIGRpc3BsYXkgdGhlIGdpdmVuIHN0cmluZywgc2V0IHRoZSBnaXZlbiBzdHJp
bmcgdG8gdGhlCi0gICAgICAgIC8vIG1fY29tcG9zaXRpb25Ob2RlIG1lbWJlciBvZiB0aGlzIEVk
aXRvciBvYmplY3QgYW5kIGRpc3BsYXkgaXQuCi0gICAgICAgIGlmICh0YXJnZXRTdGFydCA8IDAp
Ci0gICAgICAgICAgICB0YXJnZXRTdGFydCA9IDA7Ci0gICAgICAgIGlmICh0YXJnZXRFbmQgPCAw
KQotICAgICAgICAgICAgdGFyZ2V0RW5kID0gc3RhdGljX2Nhc3Q8aW50PihpbWVTdHJpbmcubGVu
Z3RoKCkpOwotICAgICAgICBTdHJpbmcgY29tcG9zaXRpb25TdHJpbmcoaW1lU3RyaW5nKTsKLSAg
ICAgICAgLy8gQ3JlYXRlIGN1c3RvbSB1bmRlcmxpbmVzLgotICAgICAgICAvLyBUbyBlbXBoYXNp
emUgdGhlIHNlbGVjdGlvbiwgdGhlIHNlbGVjdGVkIHJlZ2lvbiB1c2VzIGEgc29saWQgYmxhY2sK
LSAgICAgICAgLy8gZm9yIGl0cyB1bmRlcmxpbmUgd2hpbGUgb3RoZXIgcmVnaW9ucyB1c2VzIGEg
cGFsZSBncmF5IGZvciB0aGVpcnMuCi0gICAgICAgIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGlu
ZT4gdW5kZXJsaW5lcygzKTsKLSAgICAgICAgdW5kZXJsaW5lc1swXS5zdGFydE9mZnNldCA9IDA7
Ci0gICAgICAgIHVuZGVybGluZXNbMF0uZW5kT2Zmc2V0ID0gdGFyZ2V0U3RhcnQ7Ci0gICAgICAg
IHVuZGVybGluZXNbMF0udGhpY2sgPSB0cnVlOwotICAgICAgICB1bmRlcmxpbmVzWzBdLmNvbG9y
LnNldFJHQigweGQzLCAweGQzLCAweGQzKTsKLSAgICAgICAgdW5kZXJsaW5lc1sxXS5zdGFydE9m
ZnNldCA9IHRhcmdldFN0YXJ0OwotICAgICAgICB1bmRlcmxpbmVzWzFdLmVuZE9mZnNldCA9IHRh
cmdldEVuZDsKLSAgICAgICAgdW5kZXJsaW5lc1sxXS50aGljayA9IHRydWU7Ci0gICAgICAgIHVu
ZGVybGluZXNbMV0uY29sb3Iuc2V0UkdCKDB4MDAsIDB4MDAsIDB4MDApOwotICAgICAgICB1bmRl
cmxpbmVzWzJdLnN0YXJ0T2Zmc2V0ID0gdGFyZ2V0RW5kOwotICAgICAgICB1bmRlcmxpbmVzWzJd
LmVuZE9mZnNldCA9IHN0YXRpY19jYXN0PGludD4oaW1lU3RyaW5nLmxlbmd0aCgpKTsKLSAgICAg
ICAgdW5kZXJsaW5lc1syXS50aGljayA9IHRydWU7Ci0gICAgICAgIHVuZGVybGluZXNbMl0uY29s
b3Iuc2V0UkdCKDB4ZDMsIDB4ZDMsIDB4ZDMpOwotICAgICAgICAvLyBXaGVuIHdlIHVzZSBjdXN0
b20gdW5kZXJsaW5lcywgV2ViS2l0ICgiSW5saW5lVGV4dEJveC5jcHAiIExpbmUgMjgyKQotICAg
ICAgICAvLyBwcmV2ZW50cyBmcm9tIHdyaXRpbmcgYSB0ZXh0IGluIGJldHdlZW4gJ3NlbGVjdGlv
blN0YXJ0JyBhbmQKLSAgICAgICAgLy8gJ3NlbGVjdGlvbkVuZCcgc29tZWhvdy4KLSAgICAgICAg
Ly8gVGhlcmVmb3JlLCB3ZSB1c2UgdGhlICdjdXJzb3JQb3NpdGlvbicgZm9yIHRoZXNlIGFyZ3Vt
ZW50cyBzbyB0aGF0Ci0gICAgICAgIC8vIHRoZXJlIGFyZSBub3QgYW55IGNoYXJhY3RlcnMgaW4g
dGhlIGFib3ZlIHJlZ2lvbi4KLSAgICAgICAgZWRpdG9yLT5zZXRDb21wb3NpdGlvbihjb21wb3Np
dGlvblN0cmluZywgdW5kZXJsaW5lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
dXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pOwotICAgICAgICAvLyBUaGUgZ2l2ZW4gc3Ry
aW5nIGlzIGEgcmVzdWx0IHN0cmluZywgd2hpY2ggbWVhbnMgdGhlIG9uZ29pbmcKLSAgICAgICAg
Ly8gY29tcG9zaXRpb24gaGFzIGJlZW4gY29tcGxldGVkLiBJIGhhdmUgdG8gY2FsbCB0aGUKLSAg
ICAgICAgLy8gRWRpdG9yOjpjb25maXJtQ29tcGxldGlvbigpIGFuZCBjb21wbGV0ZSB0aGlzIGNv
bXBvc2l0aW9uLgotICAgICAgICBpZiAoY29tbWFuZCA9PSBXZWJDb21wb3NpdGlvbkNvbW1hbmRD
b25maXJtKQotICAgICAgICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIHRleHQuaXNFbXB0eSgpOwogICAgIH0KIAorICAgIC8vIFdoZW4gdGhlIHJhbmdl
IG9mIGNvbXBvc2l0aW9uIHVuZGVybGluZXMgb3ZlcmxhcCB3aXRoIHRoZSByYW5nZSBiZXR3ZWVu
CisgICAgLy8gc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZCwgV2ViS2l0IHNvbWVob3cg
d29uJ3QgcGFpbnQgdGhlIHNlbGVjdGlvbgorICAgIC8vIGF0IGFsbCAoc2VlIElubGluZVRleHRC
b3g6OnBhaW50KCkgZnVuY3Rpb24gaW4gSW5saW5lVGV4dEJveC5jcHApLgorICAgIC8vIEJ1dCB0
aGUgc2VsZWN0aW9uIHJhbmdlIGFjdHVhbGx5IHRha2VzIGVmZmVjdC4KKyAgICBlZGl0b3ItPnNl
dENvbXBvc2l0aW9uKFN0cmluZyh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlcih1bmRlcmxpbmVzKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOworCiAgICAgcmV0
dXJuIGVkaXRvci0+aGFzQ29tcG9zaXRpb24oKTsKIH0KIAorYm9vbCBXZWJWaWV3SW1wbDo6Y29u
ZmlybUNvbXBvc2l0aW9uKCkKK3sKKyAgICBGcmFtZSogZm9jdXNlZCA9IGZvY3VzZWRXZWJDb3Jl
RnJhbWUoKTsKKyAgICBpZiAoIWZvY3VzZWQgfHwgIW1faW1lQWNjZXB0RXZlbnRzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgRWRpdG9yKiBlZGl0b3IgPSBmb2N1c2VkLT5lZGl0b3IoKTsK
KyAgICBpZiAoIWVkaXRvciB8fCAhZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBzaG91bGQgdmVyaWZ5IHRoZSBwYXJlbnQgbm9kZSBv
ZiB0aGlzIElNRSBjb21wb3NpdGlvbiBub2RlIGFyZQorICAgIC8vIGVkaXRhYmxlIGJlY2F1c2Ug
SmF2YVNjcmlwdCBtYXkgZGVsZXRlIGEgcGFyZW50IG5vZGUgb2YgdGhlIGNvbXBvc2l0aW9uCisg
ICAgLy8gbm9kZS4gSW4gdGhpcyBjYXNlLCBXZWJLaXQgY3Jhc2hlcyB3aGlsZSBkZWxldGluZyB0
ZXh0cyBmcm9tIHRoZSBwYXJlbnQKKyAgICAvLyBub2RlLCB3aGljaCBkb2Vzbid0IGV4aXN0IGFu
eSBsb25nZXIuCisgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNvbXBvc2l0
aW9uUmFuZ2UoKTsKKyAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgY29uc3QgTm9kZSogbm9kZSA9
IHJhbmdlLT5zdGFydFBvc2l0aW9uKCkubm9kZSgpOworICAgICAgICBpZiAoIW5vZGUgfHwgIW5v
ZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworLy8gREVQUkVDQVRFRCwgd2lsbCBiZSByZW1vdmVkIGxhdGVyLgogYm9vbCBXZWJWaWV3
SW1wbDo6cXVlcnlDb21wb3NpdGlvblN0YXR1cyhib29sKiBlbmFibGVJTUUsIFdlYlJlY3QqIGNh
cmV0UmVjdCkKIHsKICAgICAvLyBTdG9yZSB3aGV0aGVyIHRoZSBzZWxlY3RlZCBub2RlIG5lZWRz
IElNRSBhbmQgdGhlIGNhcmV0IHJlY3RhbmdsZS4KQEAgLTEzMTEsNiArMTM0Nyw1OSBAQCBib29s
IFdlYlZpZXdJbXBsOjpxdWVyeUNvbXBvc2l0aW9uU3RhdHVzCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK1dlYlRleHRJbnB1dFR5cGUgV2ViVmlld0ltcGw6OnRleHRJbnB1dFR5cGUoKQoreworICAg
IFdlYlRleHRJbnB1dFR5cGUgdHlwZSA9IFdlYlRleHRJbnB1dFR5cGVOb25lOworICAgIGNvbnN0
IEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOworICAgIGlmICghZm9jdXNl
ZCkKKyAgICAgICAgcmV0dXJuIHR5cGU7CisKKyAgICBjb25zdCBFZGl0b3IqIGVkaXRvciA9IGZv
Y3VzZWQtPmVkaXRvcigpOworICAgIGlmICghZWRpdG9yIHx8ICFlZGl0b3ItPmNhbkVkaXQoKSkK
KyAgICAgICAgcmV0dXJuIHR5cGU7CisKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBjb250cm9s
bGVyID0gZm9jdXNlZC0+c2VsZWN0aW9uKCk7CisgICAgaWYgKCFjb250cm9sbGVyKQorICAgICAg
ICByZXR1cm4gdHlwZTsKKworICAgIGNvbnN0IE5vZGUqIG5vZGUgPSBjb250cm9sbGVyLT5zdGFy
dCgpLm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiB0eXBlOworCisgICAg
Ly8gVE9ETyhzdXpoZSk6IFN1cHBvcnQgbW9yZSB0ZXh0IGlucHV0IHR5cGVzIHdoZW4gbmVjZXNz
YXJ5LCBlZy4gTnVtYmVyLAorICAgIC8vIERhdGUsIEVtYWlsLCBVUkwsIGV0Yy4KKyAgICBpZiAo
Y29udHJvbGxlci0+aXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICAgICAgdHlwZSA9IFdlYlRleHRJ
bnB1dFR5cGVQYXNzd29yZDsKKyAgICBlbHNlIGlmIChub2RlLT5zaG91bGRVc2VJbnB1dE1ldGhv
ZCgpKQorICAgICAgICB0eXBlID0gV2ViVGV4dElucHV0VHlwZVRleHQ7CisKKyAgICByZXR1cm4g
dHlwZTsKK30KKworV2ViUmVjdCBXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvbkJvdW5kcygp
Cit7CisgICAgV2ViUmVjdCByZWN0OworICAgIGNvbnN0IEZyYW1lKiBmb2N1c2VkID0gZm9jdXNl
ZFdlYkNvcmVGcmFtZSgpOworICAgIGlmICghZm9jdXNlZCkKKyAgICAgICAgcmV0dXJuIHJlY3Q7
CisKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBjb250cm9sbGVyID0gZm9jdXNlZC0+c2VsZWN0
aW9uKCk7CisgICAgaWYgKCFjb250cm9sbGVyKQorICAgICAgICByZXR1cm4gcmVjdDsKKworICAg
IGNvbnN0IEZyYW1lVmlldyogdmlldyA9IGZvY3VzZWQtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcp
CisgICAgICAgIHJldHVybiByZWN0OworCisgICAgaWYgKGNvbnRyb2xsZXItPmlzQ2FyZXQoKSkK
KyAgICAgICAgcmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udHJvbGxlci0+YWJzb2x1
dGVDYXJldEJvdW5kcygpKTsKKyAgICBlbHNlIGlmIChjb250cm9sbGVyLT5pc1JhbmdlKCkpIHsK
KyAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvbnRyb2xsZXItPnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgICAgIHJlY3QgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGZvY3VzZWQtPmZp
cnN0UmVjdEZvclJhbmdlKHJhbmdlLmdldCgpKSk7CisgICAgfQorICAgIHJldHVybiByZWN0Owor
fQorCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uKQogewogICAgIC8vIFRoZSBFZGl0b3I6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9u
KCkgZnVuY3Rpb24gY2hlY2tzIGlmIHdlIGNhbiBjaGFuZ2UKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgJKHJldmlzaW9uIDYxMTc1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMyArOTAsMjQgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRG
b2N1cyhib29sIGVuYWJsZSk7CisKKyAgICAvLyBERVBSRUNBVEVELCB3aWxsIGJlIHJlbW92ZWQg
bGF0ZXIuCiAgICAgdmlydHVhbCBib29sIGhhbmRsZUNvbXBvc2l0aW9uRXZlbnQoV2ViQ29tcG9z
aXRpb25Db21tYW5kIGNvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGN1cnNvclBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCB0YXJnZXRTdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgdGFyZ2V0RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdGV4dCk7Ci0gICAgdmlydHVhbCBib29sIHF1ZXJ5
Q29tcG9zaXRpb25TdGF0dXMoYm9vbCogZW5hYmxlZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJSZWN0KiBjYXJldFJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBz
ZXRDb21wb3NpdGlvbigKKyAgICAgICAgY29uc3QgV2ViU3RyaW5nJiB0ZXh0LAorICAgICAgICBj
b25zdCBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLAorICAg
ICAgICBpbnQgc2VsZWN0aW9uU3RhcnQsCisgICAgICAgIGludCBzZWxlY3Rpb25FbmQpOworICAg
IHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRpb24oKTsKKworICAgIC8vIERFUFJFQ0FURUQs
IHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KKyAgICB2aXJ0dWFsIGJvb2wgcXVlcnlDb21wb3NpdGlv
blN0YXR1cyhib29sKiBlbmFibGVkLCBXZWJSZWN0KiBjYXJldFJlY3QpOworICAgIHZpcnR1YWwg
V2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRUeXBlKCk7CisgICAgdmlydHVhbCBXZWJSZWN0IGNh
cmV0T3JTZWxlY3Rpb25Cb3VuZHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dERpcmVjdGlv
bihXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbik7CiAgICAgdmlydHVhbCBib29sIGlzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpIGNvbnN0OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59008</attachid>
            <date>2010-06-17 10:30:55 -0700</date>
            <delta_ts>2010-06-19 06:32:45 -0700</delta_ts>
            <desc>Updated patch according to review feedbacks.</desc>
            <filename>refactor-chromium-input-method-apis.patch</filename>
            <type>text/plain</type>
            <size>36382</size>
            <attacher name="James Su">suzhe</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTMzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMTcgIFpoZSBTdSAgPHN1emhlQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21p
dW1dUmVmYWN0b3IgaW5wdXQgbWV0aG9kIHJlbGF0ZWQgQVBJcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNjA4CisKKyAgICAgICAgTm8gbmV3IHRl
c3RzIGFyZSBuZWVkZWQsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisK
KyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWROb2RlKToKKwogMjAxMC0wNi0xNyAgRGFyaW4gRmlz
aGVyICA8ZGFyaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVp
ZHNvbi4KSW5kZXg6IFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2MTMzNCkKKysr
IFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTQs
MjAgKzU5NCwyMyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZE5vZGUoTm9kCiAg
ICAgLy8gRklYTUU6IE1pZ2h0IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGNoZWNrIGZvciBjYXJldEJy
b3dzaW5nCiAgICAgaWYgKG9sZEZvY3VzZWROb2RlICYmIG9sZEZvY3VzZWROb2RlLT5yb290RWRp
dGFibGVFbGVtZW50KCkgPT0gb2xkRm9jdXNlZE5vZGUgJiYgIXJlbGlucXVpc2hlc0VkaXRpbmdG
b2N1cyhvbGRGb2N1c2VkTm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisK
KyAgICAvLyBTZXQgaW5wdXQgbWV0aG9kIHN0YXRlIGJlZm9yZSBjaGFuZ2luZyB0aGUgZm9jdXNl
ZCBub2RlLCBzbyB0aGF0IHRoZQorICAgIC8vIGlucHV0IG1ldGhvZCBjYW4gc3RpbGwgaGF2ZSBh
IGNoYW5jZSB0byBmaW5pc2ggdGhlIG9uZ29pbmcgY29tcG9zaXRpb24KKyAgICAvLyBzZXNzaW9u
LgorICAgIG1fcGFnZS0+ZWRpdG9yQ2xpZW50KCktPnNldElucHV0TWV0aG9kU3RhdGUobm9kZSA/
IG5vZGUtPnNob3VsZFVzZUlucHV0TWV0aG9kKCkgOiBmYWxzZSk7CisKICAgICBjbGVhclNlbGVj
dGlvbklmTmVlZGVkKG9sZEZvY3VzZWRGcmFtZS5nZXQoKSwgbmV3Rm9jdXNlZEZyYW1lLmdldCgp
LCBub2RlKTsKLSAgICAKKwogICAgIGlmICghbm9kZSkgewogICAgICAgICBpZiAob2xkRG9jdW1l
bnQpCiAgICAgICAgICAgICBvbGREb2N1bWVudC0+c2V0Rm9jdXNlZE5vZGUoMCk7Ci0gICAgICAg
IG1fcGFnZS0+ZWRpdG9yQ2xpZW50KCktPnNldElucHV0TWV0aG9kU3RhdGUoZmFsc2UpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG5ld0RvY3Vt
ZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKIAogICAgIGlmIChuZXdEb2N1bWVudCAmJiBuZXdEb2N1
bWVudC0+Zm9jdXNlZE5vZGUoKSA9PSBub2RlKSB7Ci0gICAgICAgIG1fcGFnZS0+ZWRpdG9yQ2xp
ZW50KCktPnNldElucHV0TWV0aG9kU3RhdGUobm9kZS0+c2hvdWxkVXNlSW5wdXRNZXRob2QoKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTYxOSw4ICs2MjIsNiBAQCBi
b29sIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZE5vZGUoTm9kCiAgICAgaWYgKG5ld0RvY3Vt
ZW50KQogICAgICAgICBuZXdEb2N1bWVudC0+c2V0Rm9jdXNlZE5vZGUobm9kZSk7CiAgICAgCi0g
ICAgbV9wYWdlLT5lZGl0b3JDbGllbnQoKS0+c2V0SW5wdXRNZXRob2RTdGF0ZShub2RlLT5zaG91
bGRVc2VJbnB1dE1ldGhvZCgpKTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDYxMzM2KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEwLTA2LTE3ICBaaGUgU3UgIDxzdXpoZUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW2Nocm9taXVtXVJlZmFjdG9yIGlucHV0IG1ldGhvZCByZWxhdGVkIEFQSXMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwOAorCisgICAg
ICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29tcG9zaXRpb25Db21tYW5k
Lmg6CisgICAgICAgICogcHVibGljL1dlYkNvbXBvc2l0aW9uVW5kZXJsaW5lLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdGlvblVuZGVybGluZTo6V2ViQ29tcG9zaXRpb25V
bmRlcmxpbmUpOgorICAgICAgICAqIHB1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjopOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6Cisg
ICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXRD
bGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2lkZ2V0Q2xpZW50OjpyZXNldElucHV0TWV0
aG9kKToKKyAgICAgICAgKiBzcmMvQ29tcG9zaXRpb25VbmRlcmxpbmVCdWlsZGVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGlvblVuZGVybGluZUJ1aWxkZXI6OkNvbXBvc2l0
aW9uVW5kZXJsaW5lQnVpbGRlcik6CisgICAgICAgICogc3JjL0NvbXBvc2l0aW9uVW5kZXJsaW5l
VmVjdG9yQnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGlvblVu
ZGVybGluZVZlY3RvckJ1aWxkZXI6OkNvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlcik6
CisgICAgICAgICogc3JjL0NvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBzcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudEltcGw6OnNldElucHV0TWV0aG9kU3RhdGUpOgorICAgICAgICAqIHNyYy9X
ZWJQb3B1cE1lbnVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6
c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpjb25m
aXJtQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjp0ZXh0
SW5wdXRUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6Y2FyZXRPclNl
bGVjdGlvbkJvdW5kcyk6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuaDoKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
aGFuZGxlQ29tcG9zaXRpb25FdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
ZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb25maXJtQ29t
cG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dGV4dElucHV0VHlwZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9uQm91bmRzKToK
KyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMC0wNi0xNyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkOiBjaHJvbWl1
bSB0ZXN0cyBmaXguIEFkZGVkIEluc3BlY3RvckJhY2tlbmQgZGVsZWdhdGVzIGZvciBuZXcgaW5z
cGVjdG9yIG1ldGhvZHMuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNjEzMzQpCisrKyBX
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBA
QAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29tbW9uLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQ29tcG9zaXRpb25Db21tYW5kLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
Q29tcG9zaXRpb25VbmRlcmxpbmUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb25z
b2xlTWVzc2FnZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbnRleHRNZW51RGF0
YS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvb2tpZS5oJywKQEAgLTIwNSw2ICsy
MDYsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVGV4dEFmZmluaXR5LmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViVGV4dENhc2VTZW5zaXRpdml0eS5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlRleHREaXJlY3Rpb24uaCcsCisgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVGhl
bWVFbmdpbmUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJVUkwuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJVUkxFcnJvci5oJywKQEAgLTI0MCw2ICsyNDIsOSBAQAogICAg
ICAgICAgICAgICAgICdzcmMvQ2hyb21pdW1CcmlkZ2UuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL0Nocm9taXVtQ3VycmVudFRpbWUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0Nocm9t
aXVtVGhyZWFkaW5nLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9Db21wb3NpdGlvblVuZGVy
bGluZUJ1aWxkZXIuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9Db21wb3NpdGlvblVuZGVybGlu
ZVZlY3RvckJ1aWxkZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL0NvbXBvc2l0aW9uVW5k
ZXJsaW5lVmVjdG9yQnVpbGRlci5oJywKICAgICAgICAgICAgICAgICAnc3JjL0NvbnRleHRNZW51
Q2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvQ29udGV4dE1lbnVDbGllbnRJ
bXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAnLApJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdGlvbkNvbW1hbmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0aW9uQ29tbWFuZC5oCShy
ZXZpc2lvbiA2MTMzNCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRpb25D
b21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKKy8vIERFUFJFQ0FURUQuCiBlbnVtIFdlYkNvbXBvc2l0aW9uQ29tbWFuZCB7CiAg
ICAgV2ViQ29tcG9zaXRpb25Db21tYW5kRGlzY2FyZCwKICAgICBXZWJDb21wb3NpdGlvbkNvbW1h
bmRTZXQsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0aW9uVW5kZXJs
aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdGlv
blVuZGVybGluZS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJD
b21wb3NpdGlvblVuZGVybGluZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJDb21wb3NpdGlvblVuZGVybGluZV9oCisjZGVmaW5lIFdlYkNvbXBvc2l0aW9uVW5kZXJs
aW5lX2gKKworI2luY2x1ZGUgIldlYkNvbG9yLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisv
LyBDbGFzcyBXZWJDb21wb3NpdGlvblVuZGVybGluZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdp
dGggV2ViV2lkZ2V0J3MKKy8vIHNldENvbXBvc2l0aW9uKCkgbWV0aG9kLgorc3RydWN0IFdlYkNv
bXBvc2l0aW9uVW5kZXJsaW5lIHsKKyAgICBXZWJDb21wb3NpdGlvblVuZGVybGluZSgpCisgICAg
ICAgIDogc3RhcnRPZmZzZXQoMCkKKyAgICAgICAgLCBlbmRPZmZzZXQoMCkKKyAgICAgICAgLCBj
b2xvcigwKQorICAgICAgICAsIHRoaWNrKGZhbHNlKSB7IH0KKworICAgIFdlYkNvbXBvc2l0aW9u
VW5kZXJsaW5lKHVuc2lnbmVkIHMsIHVuc2lnbmVkIGUsIFdlYkNvbG9yIGMsIGJvb2wgdCkKKyAg
ICAgICAgOiBzdGFydE9mZnNldChzKQorICAgICAgICAsIGVuZE9mZnNldChlKQorICAgICAgICAs
IGNvbG9yKGMpCisgICAgICAgICwgdGhpY2sodCkgeyB9CisKKyAgICB1bnNpZ25lZCBzdGFydE9m
ZnNldDsKKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQ7CisgICAgV2ViQ29sb3IgY29sb3I7CisgICAg
Ym9vbCB0aGljazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGV4dElucHV0VHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGV4dElucHV0VHlwZS5oCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
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
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRleHRJbnB1dFR5cGVfaAorI2RlZmluZSBXZWJU
ZXh0SW5wdXRUeXBlX2gKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gV2ViVGV4dElucHV0
VHlwZSB7CisgICAgLy8gSW5wdXQgY2FyZXQgaXMgbm90IGluIGFuIGVkaXRhYmxlIG5vZGUsIG5v
IGlucHV0IG1ldGhvZCBzaGFsbCBiZSB1c2VkLgorICAgIFdlYlRleHRJbnB1dFR5cGVOb25lLAor
CisgICAgLy8gSW5wdXQgY2FyZXQgaXMgaW4gYSBub3JtYWwgZWRpdGFibGUgbm9kZSwgYW55IGlu
cHV0IG1ldGhvZCBjYW4gYmUgdXNlZC4KKyAgICBXZWJUZXh0SW5wdXRUeXBlVGV4dCwKKworICAg
IC8vIElucHV0IGNhcmV0IGlzIGluIGEgcGFzc3dvcmQgYm94LCBhbiBpbnB1dCBtZXRob2QgbWF5
IGJlIHVzZWQgb25seSBpZgorICAgIC8vIGl0J3Mgc3VpdGFibGUgZm9yIHBhc3N3b3JkIGlucHV0
LgorICAgIFdlYlRleHRJbnB1dFR5cGVQYXNzd29yZCwKKworICAgIC8vIEZJWE1FOiBBZGQgbW9y
ZSB0ZXh0IGlucHV0IHR5cGVzIHdoZW4gbmVjZXNzYXJ5LCBlZy4gTnVtYmVyLAorICAgIC8vIERh
dGUsIEVtYWlsLCBVUkwsIGV0Yy4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5oCShyZXZpc2lvbiA2
MTMzNCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjUsNiArMTI1LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlz
U21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSB7IHJldHVybiB0cnVlOyB9
CisKKyAgICAvLyBERVBSRUNBVEVEOiByZXBsYWNlZCBieSBXZWJXaWRnZXRDbGllbnQ6OnJlc2V0
SW5wdXRNZXRob2QoKS4KICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RFbmFibGVkKGJv
b2wgZW5hYmxlZCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgeyB9
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgJKHJldmlzaW9uIDYxMzM0KQorKysg
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsOCBAQAogI2luY2x1ZGUgIldlYkNhbnZhcy5oIgogI2luY2x1ZGUgIldlYkNvbW1vbi5o
IgogI2luY2x1ZGUgIldlYkNvbXBvc2l0aW9uQ29tbWFuZC5oIgorI2luY2x1ZGUgIldlYkNvbXBv
c2l0aW9uVW5kZXJsaW5lLmgiCisjaW5jbHVkZSAiV2ViVGV4dElucHV0VHlwZS5oIgogI2luY2x1
ZGUgIldlYlRleHREaXJlY3Rpb24uaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00Miw2ICs0
NCw3IEBAIGNsYXNzIFdlYklucHV0RXZlbnQ7CiBjbGFzcyBXZWJTdHJpbmc7CiBzdHJ1Y3QgV2Vi
UmVjdDsKIHN0cnVjdCBXZWJTaXplOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZl
Y3RvcjsKIAogY2xhc3MgV2ViV2lkZ2V0IHsKIHB1YmxpYzoKQEAgLTc2LDE3ICs3OSwzOSBAQCBw
dWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0IHRoYXQgaXQgaGFz
IGdhaW5lZCBvciBsb3N0IGtleWJvYXJkIGZvY3VzLgogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1
cyhib29sKSA9IDA7CiAKLSAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2Yg
YSBjb21wb3NpdGlvbiBldmVudC4KKyAgICAvLyBERVBSRUNBVEVELiBJdCdzIHJlcGxhY2VkIGJ5
IHNldENvbXBvc2l0aW9uKCkgYW5kIGNvbmZpcm1Db21wb3NpdGlvbigpLgogICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVDb21wb3NpdGlvbkV2ZW50KFdlYkNvbXBvc2l0aW9uQ29tbWFuZCBjb21tYW5k
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJzb3JQb3Np
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0
U3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcmdl
dEVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJT
dHJpbmcmIHRleHQpID0gMDsKIAotICAgIC8vIFJldHJpZXZlIHRoZSBzdGF0dXMgb2YgdGhpcyBX
ZWJXaWRnZXQgcmVxdWlyZWQgYnkgSU1FIEFQSXMuICBVcG9uCi0gICAgLy8gc3VjY2VzcyBlbmFi
bGVkIGFuZCBjYXJldEJvdW5kcyBhcmUgc2V0LgorICAgIC8vIENhbGxlZCB0byBpbmZvcm0gdGhl
IFdlYldpZGdldCBvZiBhIG5ldyBjb21wb3NpdGlvbiB0ZXh0LgorICAgIC8vIElmIHNlbGVjdGlv
blN0YXJ0IGFuZCBzZWxlY3Rpb25FbmQgaGFzIHRoZSBzYW1lIHZhbHVlLCB0aGVuIGl0IGluZGlj
YXRlcworICAgIC8vIHRoZSBpbnB1dCBjYXJldCBwb3NpdGlvbi4gSWYgdGhlIHRleHQgaXMgZW1w
dHksIHRoZW4gdGhlIGV4aXN0aW5nCisgICAgLy8gY29tcG9zaXRpb24gdGV4dCB3aWxsIGJlIGNh
bmNlbGxlZC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBvc2l0aW9uIHRleHQgd2Fz
IHNldCBzdWNjZXNzZnVsbHkuCisgICAgdmlydHVhbCBib29sIHNldENvbXBvc2l0aW9uKAorICAg
ICAgICBjb25zdCBXZWJTdHJpbmcmIHRleHQsCisgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJD
b21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsCisgICAgICAgIGludCBzZWxlY3Rpb25T
dGFydCwKKyAgICAgICAgaW50IHNlbGVjdGlvbkVuZCkgPSAwOworCisgICAgLy8gQ2FsbGVkIHRv
IGluZm9ybSB0aGUgV2ViV2lkZ2V0IHRvIGNvbmZpcm0gYW4gb25nb2luZyBjb21wb3NpdGlvbi4K
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gb25nb2luZyBjb21wb3NpdGlvbi4K
KyAgICB2aXJ0dWFsIGJvb2wgY29uZmlybUNvbXBvc2l0aW9uKCkgPSAwOworCisgICAgLy8gREVQ
UkVDQVRFRC4gSXQncyByZXBsYWNlZCBieSB0ZXh0SW5wdXRUeXBlKCkgYW5kCisgICAgLy8gY2Fy
ZXRPclNlbGVjdGlvbkJvdW5kcygpLgogICAgIHZpcnR1YWwgYm9vbCBxdWVyeUNvbXBvc2l0aW9u
U3RhdHVzKGJvb2wqIGVuYWJsZWQsIFdlYlJlY3QqIGNhcmV0Qm91bmRzKSA9IDA7CiAKKyAgICAv
LyBSZXR1cm5zIHRoZSBjdXJyZW50IHRleHQgaW5wdXQgdHlwZSBvZiB0aGlzIFdlYldpZGdldC4K
KyAgICB2aXJ0dWFsIFdlYlRleHRJbnB1dFR5cGUgdGV4dElucHV0VHlwZSgpID0gMDsKKworICAg
IC8vIFJldHVybnMgdGhlIGN1cnJlbnQgY2FyZXQgYm91bmRzIG9mIHRoaXMgV2ViV2lkZ2V0LiBU
aGUgc2VsZWN0aW9uIGJvdW5kcworICAgIC8vIHdpbGwgYmUgcmV0dXJuZWQgaWYgYSBzZWxlY3Rp
b24gcmFuZ2UgaXMgYXZhaWxhYmxlLgorICAgIHZpcnR1YWwgV2ViUmVjdCBjYXJldE9yU2VsZWN0
aW9uQm91bmRzKCkgPSAwOworCiAgICAgLy8gQ2hhbmdlcyB0aGUgdGV4dCBkaXJlY3Rpb24gb2Yg
dGhlIHNlbGVjdGVkIGlucHV0IG5vZGUuCiAgICAgdmlydHVhbCB2b2lkIHNldFRleHREaXJlY3Rp
b24oV2ViVGV4dERpcmVjdGlvbikgPSAwOwogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYldpZGdldENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViV2lkZ2V0Q2xpZW50LmgJKHJldmlzaW9uIDYxMzM0KQorKysgV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJXaWRnZXRDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsMTAgQEAg
cHVibGljOgogICAgIC8vIGRpc3BsYXllZC4KICAgICB2aXJ0dWFsIFdlYlNjcmVlbkluZm8gc2Ny
ZWVuSW5mbygpIHsgcmV0dXJuIFdlYlNjcmVlbkluZm8oKTsgfQogCisgICAgLy8gV2hlbiB0aGlz
IG1ldGhvZCBnZXRzIGNhbGxlZCwgV2ViV2lkZ2V0Q2xpZW50IGltcGxlbWVudGF0aW9uIHNob3Vs
ZAorICAgIC8vIHJlc2V0IHRoZSBpbnB1dCBtZXRob2QgYnkgY2FuY2VsbGluZyBhbnkgb25nb2lu
ZyBjb21wb3NpdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRJbnB1dE1ldGhvZCgpIHsgfQor
CiBwcm90ZWN0ZWQ6CiAgICAgfldlYldpZGdldENsaWVudCgpIHsgfQogfTsKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvQ29tcG9zaXRpb25VbmRlcmxpbmVCdWlsZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db21wb3NpdGlvblVuZGVybGluZUJ1aWxkZXIuaAkocmV2
aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29tcG9zaXRpb25VbmRlcmxpbmVCdWls
ZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBvc2l0aW9uVW5k
ZXJsaW5lQnVpbGRlcl9oCisjZGVmaW5lIENvbXBvc2l0aW9uVW5kZXJsaW5lQnVpbGRlcl9oCisK
KyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJD
b21wb3NpdGlvblVuZGVybGluZS5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGZvciBjb252ZXJ0aW5nIGZyb20g
V2ViQ29tcG9zaXRpb25VbmRlcmxpbmUgdG8KKy8vIFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJs
aW5lLgorCitjbGFzcyBDb21wb3NpdGlvblVuZGVybGluZUJ1aWxkZXIgOiBwdWJsaWMgV2ViQ29y
ZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUgeworcHVibGljOgorICAgIENvbXBvc2l0aW9uVW5kZXJs
aW5lQnVpbGRlcihjb25zdCBXZWJDb21wb3NpdGlvblVuZGVybGluZSYgdSkKKyAgICAgICAgOiBX
ZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZSh1LnN0YXJ0T2Zmc2V0LCB1LmVuZE9mZnNldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpDb2xvcih1
LmNvbG9yKSwgdS50aGljaykgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9y
QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db21wb3NpdGlv
blVuZGVybGluZVZlY3RvckJ1aWxkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9t
aXVtL3NyYy9Db21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbXBvc2l0
aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlci5oIgorCisjaW5jbHVkZSAiQ29tcG9zaXRpb25VbmRl
cmxpbmVCdWlsZGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyOjpDb21wb3NpdGlv
blVuZGVybGluZVZlY3RvckJ1aWxkZXIoCisgICAgY29uc3QgV2ViVmVjdG9yPFdlYkNvbXBvc2l0
aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcykKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IHVuZGVybGlu
ZXMuc2l6ZSgpOworICAgIHJlc2VydmVDYXBhY2l0eShzaXplKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgYXBwZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5l
QnVpbGRlcih1bmRlcmxpbmVzW2ldKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9Db21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbXBvc2l0aW9uVW5kZXJsaW5l
VmVjdG9yQnVpbGRlci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9Db21w
b3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
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
CisKKyNpZm5kZWYgQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyX2gKKyNkZWZpbmUg
Q29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyX2gKKworI2luY2x1ZGUgIkVkaXRvci5o
IgorI2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0aW9uVW5kZXJsaW5l
LmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBU
aGlzIGNsYXNzZXMgYXJlIHVzZWQgZm9yIGNvbnZlcnRpbmcgZnJvbSBzdGQ6OnZlY3RvcjxXZWJD
b21wb3NpdGlvblVuZGVybGluZT4KKy8vIHRvIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVu
ZGVybGluZT4uCisKK2NsYXNzIENvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlciA6Cisg
ICAgcHVibGljIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4geworcHVibGlj
OgorICAgIENvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlcigKKyAgICAgICAgY29uc3Qg
V2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYpOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9FZGl0b3JDbGll
bnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0VkaXRvckNsaWVu
dEltcGwuY3BwCShyZXZpc2lvbiA2MTMzNCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRWRpdG9y
Q2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyMSw4ICs5MjEsMTMgQEAgdm9pZCBF
ZGl0b3JDbGllbnRJbXBsOjpnZXRHdWVzc2VzRm9yV29yZAogCiB2b2lkIEVkaXRvckNsaWVudElt
cGw6OnNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKQogewotICAgIGlmIChtX3dlYlZp
ZXctPmNsaWVudCgpKQorICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKSB7CisgICAgICAgIG1f
d2ViVmlldy0+Y2xpZW50KCktPnJlc2V0SW5wdXRNZXRob2QoKTsKKworICAgICAgICAvLyBSZW1v
dmUgdGhpcyBsaW5lIHdoZW4gV2ViVmlld0NsaWVudDo6c2V0SW5wdXRNZXRob2RFbmFibGVkKCkg
Z2V0cworICAgICAgICAvLyByZW1vdmVkLgogICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5z
ZXRJbnB1dE1ldGhvZEVuYWJsZWQoZW5hYmxlZCk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzYWNl
IFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCShy
ZXZpc2lvbiA2MTMzNCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAsNyBAQCB2b2lkIFdlYlBvcHVwTWVudUlt
cGw6OnNldEZvY3VzKGJvb2wgZW5hCiB7CiB9CiAKKy8vIERFUFJFQ0FURUQsIHdpbGwgYmUgcmVt
b3ZlZCBsYXRlci4KIGJvb2wgV2ViUG9wdXBNZW51SW1wbDo6aGFuZGxlQ29tcG9zaXRpb25FdmVu
dCgKICAgICBXZWJDb21wb3NpdGlvbkNvbW1hbmQgY29tbWFuZCwgaW50IGN1cnNvclBvc2l0aW9u
LCBpbnQgdGFyZ2V0U3RhcnQsCiAgICAgaW50IHRhcmdldEVuZCwgY29uc3QgV2ViU3RyaW5nJiBp
bWVTdHJpbmcpCkBAIC0yMzcsMTEgKzIzOCwzNCBAQCBib29sIFdlYlBvcHVwTWVudUltcGw6Omhh
bmRsZUNvbXBvc2l0aW9uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFdlYlBvcHVwTWVu
dUltcGw6OnNldENvbXBvc2l0aW9uKAorICAgIGNvbnN0IFdlYlN0cmluZyYgdGV4dCwgY29uc3Qg
V2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywKKyAgICBpbnQg
c2VsZWN0aW9uU3RhcnQsIGludCBzZWxlY3Rpb25FbmQpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFdlYlBvcHVwTWVudUltcGw6OmNvbmZpcm1Db21wb3NpdGlvbigpCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCisvLyBERVBSRUNBVEVELCB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIu
CiBib29sIFdlYlBvcHVwTWVudUltcGw6OnF1ZXJ5Q29tcG9zaXRpb25TdGF0dXMoYm9vbCogZW5h
YmxlZCwgV2ViUmVjdCogY2FyZXRSZWN0KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAorV2Vi
VGV4dElucHV0VHlwZSBXZWJQb3B1cE1lbnVJbXBsOjp0ZXh0SW5wdXRUeXBlKCkKK3sKKyAgICBy
ZXR1cm4gV2ViVGV4dElucHV0VHlwZU5vbmU7Cit9CisKK1dlYlJlY3QgV2ViUG9wdXBNZW51SW1w
bDo6Y2FyZXRPclNlbGVjdGlvbkJvdW5kcygpCit7CisgICAgcmV0dXJuIFdlYlJlY3QoKTsKK30K
Kwogdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rp
b24gZGlyZWN0aW9uKQogewogfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1l
bnVJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJ
bXBsLmgJKHJldmlzaW9uIDYxMzM0KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1l
bnVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEwICs2NiwyMSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAg
IHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZv
Y3VzKGJvb2wgZW5hYmxlKTsKKworICAgIC8vIERFUFJFQ0FURUQsIHdpbGwgYmUgcmVtb3ZlZCBs
YXRlci4KICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlQ29tcG9zaXRpb25FdmVudCgKICAgICAgICAg
V2ViQ29tcG9zaXRpb25Db21tYW5kIGNvbW1hbmQsIGludCBjdXJzb3JQb3NpdGlvbiwKICAgICAg
ICAgaW50IHRhcmdldFN0YXJ0LCBpbnQgdGFyZ2V0RW5kLCBjb25zdCBXZWJTdHJpbmcmIHRleHQp
OworICAgIHZpcnR1YWwgYm9vbCBzZXRDb21wb3NpdGlvbigKKyAgICAgICAgY29uc3QgV2ViU3Ry
aW5nJiB0ZXh0LAorICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxp
bmU+JiB1bmRlcmxpbmVzLAorICAgICAgICBpbnQgc2VsZWN0aW9uU3RhcnQsIGludCBzZWxlY3Rp
b25FbmQpOworICAgIHZpcnR1YWwgYm9vbCBjb25maXJtQ29tcG9zaXRpb24oKTsKKworICAgIC8v
IERFUFJFQ0FURUQsIHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KICAgICB2aXJ0dWFsIGJvb2wgcXVl
cnlDb21wb3NpdGlvblN0YXR1cyhib29sKiBlbmFibGVkLCBXZWJSZWN0KiBjYXJldFJlY3QpOwor
ICAgIHZpcnR1YWwgV2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRUeXBlKCk7CisgICAgdmlydHVh
bCBXZWJSZWN0IGNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbik7CiAgICAgdmlydHVhbCBi
b29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA2MTMz
NCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50
LmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgorI2lu
Y2x1ZGUgIkNvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlci5oIgogI2luY2x1ZGUgIkNv
bnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiQ29udGV4dE1lbnVJdGVtLmgiCkBAIC0xMTkxLDI1ICsxMTkyLDY2IEBAIHZvaWQgV2ViVmll
d0ltcGw6OnNldEZvY3VzKGJvb2wgZW5hYmxlKQogICAgIH0KIH0KIAorLy8gREVQUkVDQVRFRCwg
d2lsbCBiZSByZW1vdmVkIGxhdGVyLgogYm9vbCBXZWJWaWV3SW1wbDo6aGFuZGxlQ29tcG9zaXRp
b25FdmVudChXZWJDb21wb3NpdGlvbkNvbW1hbmQgY29tbWFuZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGN1cnNvclBvc2l0aW9uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0U3RhcnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXJnZXRFbmQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgaW1lU3RyaW5n
KQogeworICAgIGlmIChjb21tYW5kID09IFdlYktpdDo6V2ViQ29tcG9zaXRpb25Db21tYW5kU2V0
KSB7CisgICAgICAgIGlmICh0YXJnZXRTdGFydCA8IDApCisgICAgICAgICAgICB0YXJnZXRTdGFy
dCA9IDA7CisgICAgICAgIGlmICh0YXJnZXRFbmQgPCAwKQorICAgICAgICAgICAgdGFyZ2V0RW5k
ID0gc3RhdGljX2Nhc3Q8aW50PihpbWVTdHJpbmcubGVuZ3RoKCkpOworCisgICAgICAgIC8vIENy
ZWF0ZSBjdXN0b20gdW5kZXJsaW5lcy4KKyAgICAgICAgLy8gVG8gZW1waGFzaXplIHRoZSBzZWxl
Y3Rpb24sIHRoZSBzZWxlY3RlZCByZWdpb24gdXNlcyBhIHNvbGlkIGJsYWNrCisgICAgICAgIC8v
IGZvciBpdHMgdW5kZXJsaW5lIHdoaWxlIG90aGVyIHJlZ2lvbnMgdXNlcyBhIHBhbGUgZ3JheSBm
b3IgdGhlaXJzLgorICAgICAgICBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+IHVu
ZGVybGluZXMoc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSk7CisgICAgICAgIHVuZGVybGluZXNbMF0u
c3RhcnRPZmZzZXQgPSAwOworICAgICAgICB1bmRlcmxpbmVzWzBdLmVuZE9mZnNldCA9IHRhcmdl
dFN0YXJ0OworICAgICAgICB1bmRlcmxpbmVzWzBdLnRoaWNrID0gdHJ1ZTsKKyAgICAgICAgdW5k
ZXJsaW5lc1swXS5jb2xvciA9IDB4ZmZkM2QzZDM7CisgICAgICAgIHVuZGVybGluZXNbMV0uc3Rh
cnRPZmZzZXQgPSB0YXJnZXRTdGFydDsKKyAgICAgICAgdW5kZXJsaW5lc1sxXS5lbmRPZmZzZXQg
PSB0YXJnZXRFbmQ7CisgICAgICAgIHVuZGVybGluZXNbMV0udGhpY2sgPSB0cnVlOworICAgICAg
ICB1bmRlcmxpbmVzWzFdLmNvbG9yID0gMHhmZjAwMDAwMDsKKyAgICAgICAgdW5kZXJsaW5lc1sy
XS5zdGFydE9mZnNldCA9IHRhcmdldEVuZDsKKyAgICAgICAgdW5kZXJsaW5lc1syXS5lbmRPZmZz
ZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW1lU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAg
dW5kZXJsaW5lc1syXS50aGljayA9IHRydWU7CisgICAgICAgIHVuZGVybGluZXNbMl0uY29sb3Ig
PSAweGZmZDNkM2QzOworICAgICAgICByZXR1cm4gc2V0Q29tcG9zaXRpb24oaW1lU3RyaW5nLCB1
bmRlcmxpbmVzLCBjdXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pOworICAgIH0KKworICAg
IGlmIChjb21tYW5kID09IFdlYktpdDo6V2ViQ29tcG9zaXRpb25Db21tYW5kRGlzY2FyZCkKKyAg
ICAgICAgc2V0Q29tcG9zaXRpb24oV2ViU3RyaW5nKCksIFdlYlZlY3RvcjxXZWJDb21wb3NpdGlv
blVuZGVybGluZT4oKSwgMCwgMCk7CisgICAgZWxzZSBpZiAoY29tbWFuZCA9PSBXZWJLaXQ6Oldl
YkNvbXBvc2l0aW9uQ29tbWFuZENvbmZpcm0pIHsKKyAgICAgICAgc2V0Q29tcG9zaXRpb24oaW1l
U3RyaW5nLCBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+KCksIDAsIDApOworICAg
ICAgICBjb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBXZWJWaWV3SW1wbDo6c2V0Q29tcG9zaXRpb24oCisgICAgY29uc3QgV2ViU3RyaW5n
JiB0ZXh0LAorICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4mIHVu
ZGVybGluZXMsCisgICAgaW50IHNlbGVjdGlvblN0YXJ0LAorICAgIGludCBzZWxlY3Rpb25FbmQp
Cit7CiAgICAgRnJhbWUqIGZvY3VzZWQgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7CiAgICAgaWYg
KCFmb2N1c2VkIHx8ICFtX2ltZUFjY2VwdEV2ZW50cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7CiAgICAgaWYgKCFlZGl0b3Ip
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWVkaXRvci0+Y2FuRWRpdCgpKSB7Ci0g
ICAgICAgIC8vIFRoZSBpbnB1dCBmb2N1cyBoYXMgYmVlbiBtb3ZlZCB0byBhbm90aGVyIFdlYldp
ZGdldCBvYmplY3QuCi0gICAgICAgIC8vIFdlIHNob3VsZCB1c2UgdGhpcyB8ZWRpdG9yfCBvYmpl
Y3Qgb25seSB0byBjb21wbGV0ZSB0aGUgb25nb2luZwotICAgICAgICAvLyBjb21wb3NpdGlvbi4K
LSAgICAgICAgaWYgKCFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQorCisgICAgLy8gVGhlIGlucHV0IGZvY3VzIGhhcyBiZWVuIG1vdmVk
IHRvIGFub3RoZXIgV2ViV2lkZ2V0IG9iamVjdC4KKyAgICAvLyBXZSBzaG91bGQgdXNlIHRoaXMg
fGVkaXRvcnwgb2JqZWN0IG9ubHkgdG8gY29tcGxldGUgdGhlIG9uZ29pbmcKKyAgICAvLyBjb21w
b3NpdGlvbi4KKyAgICBpZiAoIWVkaXRvci0+Y2FuRWRpdCgpICYmICFlZGl0b3ItPmhhc0NvbXBv
c2l0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFdlIHNob3VsZCB2ZXJp
ZnkgdGhlIHBhcmVudCBub2RlIG9mIHRoaXMgSU1FIGNvbXBvc2l0aW9uIG5vZGUgYXJlCiAgICAg
Ly8gZWRpdGFibGUgYmVjYXVzZSBKYXZhU2NyaXB0IG1heSBkZWxldGUgYSBwYXJlbnQgbm9kZSBv
ZiB0aGUgY29tcG9zaXRpb24KQEAgLTEyMjQsOSArMTI2Niw3IEBAIGJvb2wgV2ViVmlld0ltcGw6
OmhhbmRsZUNvbXBvc2l0aW9uRXZlbnQKIAogICAgIC8vIElmIHdlJ3JlIG5vdCBnb2luZyB0byBm
aXJlIGEga2V5cHJlc3MgZXZlbnQsIHRoZW4gdGhlIGtleWRvd24gZXZlbnQgd2FzCiAgICAgLy8g
Y2FuY2VsZWQuICBJbiB0aGF0IGNhc2UsIGNhbmNlbCBhbnkgZXhpc3RpbmcgY29tcG9zaXRpb24u
Ci0gICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHdvdWxkIG9ubHkgY2FuY2VsIGEgc2luZ2xlIGtl
eXByZXNzLCByYXRoZXIgdGhhbiB0aGUKLSAgICAvLyB3aG9sZSBjb21wb3NpdGlvbi4KLSAgICBp
ZiAoKGNvbW1hbmQgPT0gV2ViQ29tcG9zaXRpb25Db21tYW5kRGlzY2FyZCkgfHwgbV9zdXBwcmVz
c05leHRLZXlwcmVzc0V2ZW50KSB7CisgICAgaWYgKHRleHQuaXNFbXB0eSgpIHx8IG1fc3VwcHJl
c3NOZXh0S2V5cHJlc3NFdmVudCkgewogICAgICAgICAvLyBBIGJyb3dzZXIgcHJvY2VzcyBzZW50
IGFuIElQQyBtZXNzYWdlIHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZAogICAgICAgICAv
LyBzdHJpbmcsIHdoaWNoIG1lYW5zIGFuIG9uZ29pbmcgY29tcG9zaXRpb24gaGFzIGJlZW4gY2Fu
Y2VsZWQuCiAgICAgICAgIC8vIElmIHRoZSBvbmdvaW5nIGNvbXBvc2l0aW9uIGhhcyBiZWVuIGNh
bmNlbGVkLCByZXBsYWNlIHRoZSBvbmdvaW5nCkBAIC0xMjM0LDQ5ICsxMjc0LDQ1IEBAIGJvb2wg
V2ViVmlld0ltcGw6OmhhbmRsZUNvbXBvc2l0aW9uRXZlbnQKICAgICAgICAgU3RyaW5nIGVtcHR5
U3RyaW5nOwogICAgICAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IGVtcHR5VW5kZXJs
aW5lczsKICAgICAgICAgZWRpdG9yLT5zZXRDb21wb3NpdGlvbihlbXB0eVN0cmluZywgZW1wdHlV
bmRlcmxpbmVzLCAwLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBBIGJyb3dzZXIgcHJv
Y2VzcyBzZW50IGFuIElQQyBtZXNzYWdlIHdoaWNoIGNvbnRhaW5zIGEgc3RyaW5nIHRvIGJlCi0g
ICAgICAgIC8vIGRpc3BsYXllZCBpbiB0aGlzIEVkaXRvciBvYmplY3QuCi0gICAgICAgIC8vIFRv
IGRpc3BsYXkgdGhlIGdpdmVuIHN0cmluZywgc2V0IHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlCi0g
ICAgICAgIC8vIG1fY29tcG9zaXRpb25Ob2RlIG1lbWJlciBvZiB0aGlzIEVkaXRvciBvYmplY3Qg
YW5kIGRpc3BsYXkgaXQuCi0gICAgICAgIGlmICh0YXJnZXRTdGFydCA8IDApCi0gICAgICAgICAg
ICB0YXJnZXRTdGFydCA9IDA7Ci0gICAgICAgIGlmICh0YXJnZXRFbmQgPCAwKQotICAgICAgICAg
ICAgdGFyZ2V0RW5kID0gc3RhdGljX2Nhc3Q8aW50PihpbWVTdHJpbmcubGVuZ3RoKCkpOwotICAg
ICAgICBTdHJpbmcgY29tcG9zaXRpb25TdHJpbmcoaW1lU3RyaW5nKTsKLSAgICAgICAgLy8gQ3Jl
YXRlIGN1c3RvbSB1bmRlcmxpbmVzLgotICAgICAgICAvLyBUbyBlbXBoYXNpemUgdGhlIHNlbGVj
dGlvbiwgdGhlIHNlbGVjdGVkIHJlZ2lvbiB1c2VzIGEgc29saWQgYmxhY2sKLSAgICAgICAgLy8g
Zm9yIGl0cyB1bmRlcmxpbmUgd2hpbGUgb3RoZXIgcmVnaW9ucyB1c2VzIGEgcGFsZSBncmF5IGZv
ciB0aGVpcnMuCi0gICAgICAgIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5l
cygzKTsKLSAgICAgICAgdW5kZXJsaW5lc1swXS5zdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIHVu
ZGVybGluZXNbMF0uZW5kT2Zmc2V0ID0gdGFyZ2V0U3RhcnQ7Ci0gICAgICAgIHVuZGVybGluZXNb
MF0udGhpY2sgPSB0cnVlOwotICAgICAgICB1bmRlcmxpbmVzWzBdLmNvbG9yLnNldFJHQigweGQz
LCAweGQzLCAweGQzKTsKLSAgICAgICAgdW5kZXJsaW5lc1sxXS5zdGFydE9mZnNldCA9IHRhcmdl
dFN0YXJ0OwotICAgICAgICB1bmRlcmxpbmVzWzFdLmVuZE9mZnNldCA9IHRhcmdldEVuZDsKLSAg
ICAgICAgdW5kZXJsaW5lc1sxXS50aGljayA9IHRydWU7Ci0gICAgICAgIHVuZGVybGluZXNbMV0u
Y29sb3Iuc2V0UkdCKDB4MDAsIDB4MDAsIDB4MDApOwotICAgICAgICB1bmRlcmxpbmVzWzJdLnN0
YXJ0T2Zmc2V0ID0gdGFyZ2V0RW5kOwotICAgICAgICB1bmRlcmxpbmVzWzJdLmVuZE9mZnNldCA9
IHN0YXRpY19jYXN0PGludD4oaW1lU3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgdW5kZXJsaW5l
c1syXS50aGljayA9IHRydWU7Ci0gICAgICAgIHVuZGVybGluZXNbMl0uY29sb3Iuc2V0UkdCKDB4
ZDMsIDB4ZDMsIDB4ZDMpOwotICAgICAgICAvLyBXaGVuIHdlIHVzZSBjdXN0b20gdW5kZXJsaW5l
cywgV2ViS2l0ICgiSW5saW5lVGV4dEJveC5jcHAiIExpbmUgMjgyKQotICAgICAgICAvLyBwcmV2
ZW50cyBmcm9tIHdyaXRpbmcgYSB0ZXh0IGluIGJldHdlZW4gJ3NlbGVjdGlvblN0YXJ0JyBhbmQK
LSAgICAgICAgLy8gJ3NlbGVjdGlvbkVuZCcgc29tZWhvdy4KLSAgICAgICAgLy8gVGhlcmVmb3Jl
LCB3ZSB1c2UgdGhlICdjdXJzb3JQb3NpdGlvbicgZm9yIHRoZXNlIGFyZ3VtZW50cyBzbyB0aGF0
Ci0gICAgICAgIC8vIHRoZXJlIGFyZSBub3QgYW55IGNoYXJhY3RlcnMgaW4gdGhlIGFib3ZlIHJl
Z2lvbi4KLSAgICAgICAgZWRpdG9yLT5zZXRDb21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZywg
dW5kZXJsaW5lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlv
biwgY3Vyc29yUG9zaXRpb24pOwotICAgICAgICAvLyBUaGUgZ2l2ZW4gc3RyaW5nIGlzIGEgcmVz
dWx0IHN0cmluZywgd2hpY2ggbWVhbnMgdGhlIG9uZ29pbmcKLSAgICAgICAgLy8gY29tcG9zaXRp
b24gaGFzIGJlZW4gY29tcGxldGVkLiBJIGhhdmUgdG8gY2FsbCB0aGUKLSAgICAgICAgLy8gRWRp
dG9yOjpjb25maXJtQ29tcGxldGlvbigpIGFuZCBjb21wbGV0ZSB0aGlzIGNvbXBvc2l0aW9uLgot
ICAgICAgICBpZiAoY29tbWFuZCA9PSBXZWJDb21wb3NpdGlvbkNvbW1hbmRDb25maXJtKQotICAg
ICAgICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHRl
eHQuaXNFbXB0eSgpOwogICAgIH0KIAorICAgIC8vIFdoZW4gdGhlIHJhbmdlIG9mIGNvbXBvc2l0
aW9uIHVuZGVybGluZXMgb3ZlcmxhcCB3aXRoIHRoZSByYW5nZSBiZXR3ZWVuCisgICAgLy8gc2Vs
ZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZCwgV2ViS2l0IHNvbWVob3cgd29uJ3QgcGFpbnQg
dGhlIHNlbGVjdGlvbgorICAgIC8vIGF0IGFsbCAoc2VlIElubGluZVRleHRCb3g6OnBhaW50KCkg
ZnVuY3Rpb24gaW4gSW5saW5lVGV4dEJveC5jcHApLgorICAgIC8vIEJ1dCB0aGUgc2VsZWN0aW9u
IHJhbmdlIGFjdHVhbGx5IHRha2VzIGVmZmVjdC4KKyAgICBlZGl0b3ItPnNldENvbXBvc2l0aW9u
KFN0cmluZyh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0aW9uVW5k
ZXJsaW5lVmVjdG9yQnVpbGRlcih1bmRlcmxpbmVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOworCiAgICAgcmV0dXJuIGVkaXRvci0+
aGFzQ29tcG9zaXRpb24oKTsKIH0KIAorYm9vbCBXZWJWaWV3SW1wbDo6Y29uZmlybUNvbXBvc2l0
aW9uKCkKK3sKKyAgICBGcmFtZSogZm9jdXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAg
ICBpZiAoIWZvY3VzZWQgfHwgIW1faW1lQWNjZXB0RXZlbnRzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgRWRpdG9yKiBlZGl0b3IgPSBmb2N1c2VkLT5lZGl0b3IoKTsKKyAgICBpZiAoIWVk
aXRvciB8fCAhZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBXZSBzaG91bGQgdmVyaWZ5IHRoZSBwYXJlbnQgbm9kZSBvZiB0aGlzIElNRSBj
b21wb3NpdGlvbiBub2RlIGFyZQorICAgIC8vIGVkaXRhYmxlIGJlY2F1c2UgSmF2YVNjcmlwdCBt
YXkgZGVsZXRlIGEgcGFyZW50IG5vZGUgb2YgdGhlIGNvbXBvc2l0aW9uCisgICAgLy8gbm9kZS4g
SW4gdGhpcyBjYXNlLCBXZWJLaXQgY3Jhc2hlcyB3aGlsZSBkZWxldGluZyB0ZXh0cyBmcm9tIHRo
ZSBwYXJlbnQKKyAgICAvLyBub2RlLCB3aGljaCBkb2Vzbid0IGV4aXN0IGFueSBsb25nZXIuCisg
ICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNvbXBvc2l0aW9uUmFuZ2UoKTsK
KyAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgY29uc3QgTm9kZSogbm9kZSA9IHJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkubm9kZSgpOworICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZWRp
dG9yLT5jb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gREVQ
UkVDQVRFRCwgd2lsbCBiZSByZW1vdmVkIGxhdGVyLgogYm9vbCBXZWJWaWV3SW1wbDo6cXVlcnlD
b21wb3NpdGlvblN0YXR1cyhib29sKiBlbmFibGVJTUUsIFdlYlJlY3QqIGNhcmV0UmVjdCkKIHsK
ICAgICAvLyBTdG9yZSB3aGV0aGVyIHRoZSBzZWxlY3RlZCBub2RlIG5lZWRzIElNRSBhbmQgdGhl
IGNhcmV0IHJlY3RhbmdsZS4KQEAgLTEzMTEsNiArMTM0Nyw1OSBAQCBib29sIFdlYlZpZXdJbXBs
OjpxdWVyeUNvbXBvc2l0aW9uU3RhdHVzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1dlYlRleHRJ
bnB1dFR5cGUgV2ViVmlld0ltcGw6OnRleHRJbnB1dFR5cGUoKQoreworICAgIFdlYlRleHRJbnB1
dFR5cGUgdHlwZSA9IFdlYlRleHRJbnB1dFR5cGVOb25lOworICAgIGNvbnN0IEZyYW1lKiBmb2N1
c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOworICAgIGlmICghZm9jdXNlZCkKKyAgICAgICAg
cmV0dXJuIHR5cGU7CisKKyAgICBjb25zdCBFZGl0b3IqIGVkaXRvciA9IGZvY3VzZWQtPmVkaXRv
cigpOworICAgIGlmICghZWRpdG9yIHx8ICFlZGl0b3ItPmNhbkVkaXQoKSkKKyAgICAgICAgcmV0
dXJuIHR5cGU7CisKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBjb250cm9sbGVyID0gZm9jdXNl
ZC0+c2VsZWN0aW9uKCk7CisgICAgaWYgKCFjb250cm9sbGVyKQorICAgICAgICByZXR1cm4gdHlw
ZTsKKworICAgIGNvbnN0IE5vZGUqIG5vZGUgPSBjb250cm9sbGVyLT5zdGFydCgpLm5vZGUoKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiB0eXBlOworCisgICAgLy8gRklYTUU6IFN1
cHBvcnQgbW9yZSB0ZXh0IGlucHV0IHR5cGVzIHdoZW4gbmVjZXNzYXJ5LCBlZy4gTnVtYmVyLAor
ICAgIC8vIERhdGUsIEVtYWlsLCBVUkwsIGV0Yy4KKyAgICBpZiAoY29udHJvbGxlci0+aXNJblBh
c3N3b3JkRmllbGQoKSkKKyAgICAgICAgdHlwZSA9IFdlYlRleHRJbnB1dFR5cGVQYXNzd29yZDsK
KyAgICBlbHNlIGlmIChub2RlLT5zaG91bGRVc2VJbnB1dE1ldGhvZCgpKQorICAgICAgICB0eXBl
ID0gV2ViVGV4dElucHV0VHlwZVRleHQ7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKworV2ViUmVj
dCBXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvbkJvdW5kcygpCit7CisgICAgV2ViUmVjdCBy
ZWN0OworICAgIGNvbnN0IEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOwor
ICAgIGlmICghZm9jdXNlZCkKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisKKyAgICBTZWxlY3Rpb25D
b250cm9sbGVyKiBjb250cm9sbGVyID0gZm9jdXNlZC0+c2VsZWN0aW9uKCk7CisgICAgaWYgKCFj
b250cm9sbGVyKQorICAgICAgICByZXR1cm4gcmVjdDsKKworICAgIGNvbnN0IEZyYW1lVmlldyog
dmlldyA9IGZvY3VzZWQtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBy
ZWN0OworCisgICAgaWYgKGNvbnRyb2xsZXItPmlzQ2FyZXQoKSkKKyAgICAgICAgcmVjdCA9IHZp
ZXctPmNvbnRlbnRzVG9XaW5kb3coY29udHJvbGxlci0+YWJzb2x1dGVDYXJldEJvdW5kcygpKTsK
KyAgICBlbHNlIGlmIChjb250cm9sbGVyLT5pc1JhbmdlKCkpIHsKKyAgICAgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IGNvbnRyb2xsZXItPnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIHJl
Y3QgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGZvY3VzZWQtPmZpcnN0UmVjdEZvclJhbmdlKHJh
bmdlLmdldCgpKSk7CisgICAgfQorICAgIHJldHVybiByZWN0OworfQorCiB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAg
IC8vIFRoZSBFZGl0b3I6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKCkgZnVuY3Rpb24gY2hlY2tz
IGlmIHdlIGNhbiBjaGFuZ2UKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJKHJldmlz
aW9uIDYxMzM0KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MCwxMyArOTAsMjQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91
c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7
CisKKyAgICAvLyBERVBSRUNBVEVELCB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIuCiAgICAgdmlydHVh
bCBib29sIGhhbmRsZUNvbXBvc2l0aW9uRXZlbnQoV2ViQ29tcG9zaXRpb25Db21tYW5kIGNvbW1h
bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGN1cnNvclBv
c2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXJn
ZXRTdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFy
Z2V0RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlN0cmluZyYgdGV4dCk7Ci0gICAgdmlydHVhbCBib29sIHF1ZXJ5Q29tcG9zaXRpb25TdGF0dXMo
Ym9vbCogZW5hYmxlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJSZWN0KiBjYXJldFJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBzZXRDb21wb3NpdGlvbigKKyAg
ICAgICAgY29uc3QgV2ViU3RyaW5nJiB0ZXh0LAorICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2Vi
Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLAorICAgICAgICBpbnQgc2VsZWN0aW9u
U3RhcnQsCisgICAgICAgIGludCBzZWxlY3Rpb25FbmQpOworICAgIHZpcnR1YWwgYm9vbCBjb25m
aXJtQ29tcG9zaXRpb24oKTsKKworICAgIC8vIERFUFJFQ0FURUQsIHdpbGwgYmUgcmVtb3ZlZCBs
YXRlci4KKyAgICB2aXJ0dWFsIGJvb2wgcXVlcnlDb21wb3NpdGlvblN0YXR1cyhib29sKiBlbmFi
bGVkLCBXZWJSZWN0KiBjYXJldFJlY3QpOworICAgIHZpcnR1YWwgV2ViVGV4dElucHV0VHlwZSB0
ZXh0SW5wdXRUeXBlKCk7CisgICAgdmlydHVhbCBXZWJSZWN0IGNhcmV0T3JTZWxlY3Rpb25Cb3Vu
ZHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbik7CiAgICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZSgpIGNvbnN0OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>