<?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>141704</bug_id>
          
          <creation_ts>2015-02-17 07:28:31 -0800</creation_ts>
          <short_desc>[Win] Popup menu is not accessible.</short_desc>
          <delta_ts>2015-04-24 04:47:26 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>peavo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1069833</commentid>
    <comment_count>0</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-02-17 07:28:31 -0800</bug_when>
    <thetext>It is not currently possible to get accessibility information for items in a popup menu.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069834</commentid>
    <comment_count>1</comment_count>
      <attachid>246740</attachid>
    <who name="">peavo</who>
    <bug_when>2015-02-17 07:50:45 -0800</bug_when>
    <thetext>Created attachment 246740
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069835</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-17 07:52:25 -0800</bug_when>
    <thetext>Attachment 246740 did not pass style-queue:


ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1149:  AccessiblePopupMenu::get_accParent is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1154:  AccessiblePopupMenu::get_accChildCount is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1160:  AccessiblePopupMenu::get_accChild is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1170:  AccessiblePopupMenu::get_accName is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1175:  AccessiblePopupMenu::get_accValue is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1191:  AccessiblePopupMenu::get_accDescription is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1196:  AccessiblePopupMenu::get_accRole is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1213:  AccessiblePopupMenu::get_accState is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1224:  AccessiblePopupMenu::get_accHelp is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1229:  AccessiblePopupMenu::get_accKeyboardShortcut is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1234:  AccessiblePopupMenu::get_accFocus is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1239:  AccessiblePopupMenu::get_accSelection is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1244:  AccessiblePopupMenu::get_accDefaultAction is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1368:  AccessiblePopupMenu::put_accName is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1373:  AccessiblePopupMenu::put_accValue is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1378:  AccessiblePopupMenu::get_accHelpTopic is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 16 in 4 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>1069836</commentid>
    <comment_count>3</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-02-17 07:55:00 -0800</bug_when>
    <thetext>I&apos;m not sure the style issues can be fixed, since we are implementing methods in a Windows interface (IAccessible).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087898</commentid>
    <comment_count>4</comment_count>
      <attachid>251459</attachid>
    <who name="">peavo</who>
    <bug_when>2015-04-23 11:45:13 -0700</bug_when>
    <thetext>Created attachment 251459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087901</commentid>
    <comment_count>5</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-04-23 11:46:11 -0700</bug_when>
    <thetext>Rebased patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087903</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-23 11:47:39 -0700</bug_when>
    <thetext>Attachment 251459 did not pass style-queue:


ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1149:  AccessiblePopupMenu::get_accParent is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1154:  AccessiblePopupMenu::get_accChildCount is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1160:  AccessiblePopupMenu::get_accChild is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1170:  AccessiblePopupMenu::get_accName is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1175:  AccessiblePopupMenu::get_accValue is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1191:  AccessiblePopupMenu::get_accDescription is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1196:  AccessiblePopupMenu::get_accRole is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1213:  AccessiblePopupMenu::get_accState is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1224:  AccessiblePopupMenu::get_accHelp is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1229:  AccessiblePopupMenu::get_accKeyboardShortcut is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1234:  AccessiblePopupMenu::get_accFocus is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1239:  AccessiblePopupMenu::get_accSelection is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1244:  AccessiblePopupMenu::get_accDefaultAction is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1368:  AccessiblePopupMenu::put_accName is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1373:  AccessiblePopupMenu::put_accValue is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1378:  AccessiblePopupMenu::get_accHelpTopic is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 16 in 4 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>1087919</commentid>
    <comment_count>7</comment_count>
      <attachid>251459</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-23 12:10:57 -0700</bug_when>
    <thetext>Comment on attachment 251459
Patch

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

Fantastic! I&apos;m so excited you have this working (as I&apos;m sure James Craig will be, too). I don&apos;t think it&apos;s quite ready to land, but it&apos;s almost there.

Are there any tests we can unskip with this fix in place?

&gt; Source/WebCore/platform/win/PopupMenuWin.cpp:756
&gt; +    if (lParam != OBJID_CLIENT)

This should be written as &quot;if (static_cast&lt;LONG&gt;(lParam) != OBJID_CLIENT)&quot;

See &lt;https://bugs.webkit.org/show_bug.cgi?id=141391&gt;

&gt; Source/WebCore/platform/win/PopupMenuWin.cpp:1155
&gt; +{

I like to check for null, and return E_POINTER if it&apos;s not valid.

&gt; Source/WebCore/platform/win/PopupMenuWin.cpp:1161
&gt; +{

Ditto E_POINTER.

&gt; Source/WebCore/platform/win/PopupMenuWin.cpp:1176
&gt; +{

E_POINTER if value is NULL.

&gt; Source/WebCore/platform/win/PopupMenuWin.cpp:1186
&gt; +    *value = SysAllocString(itemText.characters16());

You might see if the BString class provides this functionality in a single function call.

BString itemText(m_popupMenu.client()-&gt;itemText(index));
*value = itemText.release();

&gt; Source/WebCore/platform/win/PopupMenuWin.cpp:1197
&gt; +{

E_POINTER

&gt; Source/WebCore/platform/win/PopupMenuWin.cpp:1214
&gt; +{

E_POINTER

&gt; Source/WebCore/platform/win/PopupMenuWin.cpp:1255
&gt; +{

E_POINTER for null &apos;left&apos;, &apos;top&apos;, etc.

&gt; Source/WebCore/platform/win/PopupMenuWin.cpp:1324
&gt; +        return E_POINTER;

Yay! :-)

&gt; Source/WebCore/platform/win/ScrollbarThemeWin.h:38
&gt; +    virtual int scrollbarThickness(ScrollbarControlSize = RegularScrollbar) override;

We have been removing the &apos;virtual&apos; when we use &apos;override&apos;.

&gt; Source/WebCore/platform/win/ScrollbarThemeWin.h:40
&gt; +    virtual void themeChanged() override;

Ditto.

&gt; Source/WebCore/platform/win/ScrollbarThemeWin.h:46
&gt; +    virtual IntRect trackRect(ScrollbarThemeClient*, bool painting = false) override;

Ditto.

&gt; Source/WebCore/platform/win/ScrollbarThemeWin.h:53
&gt; +    virtual bool shouldSnapBackToDragOrigin(ScrollbarThemeClient*, const PlatformMouseEvent&amp;) override;

Ditto.

&gt; Source/WebCore/platform/win/ScrollbarThemeWin.h:58
&gt; +    virtual void paintThumb(GraphicsContext*, ScrollbarThemeClient*, const IntRect&amp;) override;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087969</commentid>
    <comment_count>8</comment_count>
      <attachid>251480</attachid>
    <who name="">peavo</who>
    <bug_when>2015-04-23 13:32:23 -0700</bug_when>
    <thetext>Created attachment 251480
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087973</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-23 13:34:40 -0700</bug_when>
    <thetext>Attachment 251480 did not pass style-queue:


ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1150:  AccessiblePopupMenu::get_accParent is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1155:  AccessiblePopupMenu::get_accChildCount is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1164:  AccessiblePopupMenu::get_accChild is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1177:  AccessiblePopupMenu::get_accName is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1182:  AccessiblePopupMenu::get_accValue is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1201:  AccessiblePopupMenu::get_accDescription is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1206:  AccessiblePopupMenu::get_accRole is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1226:  AccessiblePopupMenu::get_accState is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1240:  AccessiblePopupMenu::get_accHelp is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1245:  AccessiblePopupMenu::get_accKeyboardShortcut is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1250:  AccessiblePopupMenu::get_accFocus is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1255:  AccessiblePopupMenu::get_accSelection is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1260:  AccessiblePopupMenu::get_accDefaultAction is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1387:  AccessiblePopupMenu::put_accName is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1392:  AccessiblePopupMenu::put_accValue is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PopupMenuWin.cpp:1397:  AccessiblePopupMenu::get_accHelpTopic is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 16 in 4 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>1087975</commentid>
    <comment_count>10</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-04-23 13:36:30 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 251459 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251459&amp;action=review
&gt; 
&gt; Fantastic! I&apos;m so excited you have this working (as I&apos;m sure James Craig
&gt; will be, too). I don&apos;t think it&apos;s quite ready to land, but it&apos;s almost there.
&gt; 

Thanks alot for reviewing :)

&gt; Are there any tests we can unskip with this fix in place?
&gt; 

To be honest, I don&apos;t know which tests cover this, but I can have a look :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088081</commentid>
    <comment_count>11</comment_count>
      <attachid>251480</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-23 16:08:59 -0700</bug_when>
    <thetext>Comment on attachment 251480
Patch

r=me! Thanks for working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088213</commentid>
    <comment_count>12</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-04-24 04:47:26 -0700</bug_when>
    <thetext>Committed r183262: &lt;http://trac.webkit.org/changeset/183262&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246740</attachid>
            <date>2015-02-17 07:50:45 -0800</date>
            <delta_ts>2015-04-23 11:45:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141704-20150217165030.patch</filename>
            <type>text/plain</type>
            <size>18796</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDIxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE1LTAyLTE3ICBwZWF2b0Bv
dXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtXaW5dIFBvcHVwIG1l
bnUgaXMgbm90IGFjY2Vzc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDE3MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJdCBpcyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIGdldCBhY2Nlc3Np
YmlsaXR5IGluZm9ybWF0aW9uIGZvciBpdGVtcyBpbiBhIHBvcHVwIG1lbnUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVw
TWVudVdpbjo6b25HZXRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjp3
bmRQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OkFjY2Vzc2li
bGVQb3B1cE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6fkFj
Y2Vzc2libGVQb3B1cE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVu
dTo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVu
dTo6QWRkUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OlJlbGVh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6R2V0VHlwZUluZm9D
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpHZXRUeXBlSW5m
byk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpHZXRJRHNPZk5hbWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6Okludm9rZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjUGFyZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NDaGlsZENvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2FjY0Rlc2NyaXB0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NSb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjSGVscCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjS2V5Ym9hcmRTaG9ydGN1dCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjRm9jdXMpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2FjY1NlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjRGVmYXVsdEFjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjphY2NTZWxlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6YWNjTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6YWNjTmF2aWdhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6YWNjSGl0VGVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjphY2NEb0RlZmF1bHRBY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6cHV0X2FjY05hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6cHV0X2FjY1ZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NIZWxwVG9waWMpOgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xs
YmFyVGhlbWVXaW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpoYXNC
dXR0b25zKTogRGVsZXRlZC4KKwogMjAxNS0wMi0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVXNlIEhhc2hNYXA6OmFkZCBpbnN0ZWFkIG9m
IGdldC9jb250YWlucyArIHNldCBpbiBET01PYmplY3RDYWNoZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDE4MDIxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUg
IlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWVXaW4uaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZUluc3RhbmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KQEAgLTc0
OCw2ICs3NDksMzIgQEAgSW50UmVjdCBQb3B1cE1lbnVXaW46OnNjcm9sbGFibGVBcmVhQm91bgog
ICAgIHJldHVybiBtX3dpbmRvd1JlY3Q7CiB9CiAKK2Jvb2wgUG9wdXBNZW51V2luOjpvbkdldE9i
amVjdChXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBMUkVTVUxUJiBsUmVzdWx0KQorewor
ICAgIGxSZXN1bHQgPSAwOworCisgICAgaWYgKGxQYXJhbSAhPSBPQkpJRF9DTElFTlQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9hY2Nlc3NpYmxlUG9wdXBNZW51KQorICAg
ICAgICBtX2FjY2Vzc2libGVQb3B1cE1lbnUgPSBuZXcgQWNjZXNzaWJsZVBvcHVwTWVudSgqdGhp
cyk7CisKKyAgICBzdGF0aWMgSE1PRFVMRSBhY2Nlc3NpYmlsaXR5TGliID0gbnVsbHB0cjsKKyAg
ICBpZiAoIWFjY2Vzc2liaWxpdHlMaWIpIHsKKyAgICAgICAgaWYgKCEoYWNjZXNzaWJpbGl0eUxp
YiA9IDo6TG9hZExpYnJhcnlXKEwib2xlYWNjLmRsbCIpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgTFBGTkxSRVNVTFRGUk9NT0JKRUNUIHByb2NQdHIg
PSByZWludGVycHJldF9jYXN0PExQRk5MUkVTVUxURlJPTU9CSkVDVD4oOjpHZXRQcm9jQWRkcmVz
cyhhY2Nlc3NpYmlsaXR5TGliLCAiTHJlc3VsdEZyb21PYmplY3QiKSk7CisgICAgaWYgKCFwcm9j
UHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBMcmVzdWx0RnJvbU9iamVjdCBy
ZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBhY2Nlc3NpYmxlIG9iamVjdCwgc3RvcmVkCisgICAg
Ly8gaW4gYW4gTFJFU1VMVC4gSWYgdGhpcyBjYWxsIGlzIG5vdCBzdWNjZXNzZnVsLCBXaW5kb3dz
IHdpbGwgaGFuZGxlIHRoZQorICAgIC8vIHJlcXVlc3QgdGhyb3VnaCBEZWZXaW5kb3dQcm9jLgor
ICAgIHJldHVybiBTVUNDRUVERUQobFJlc3VsdCA9IHByb2NQdHIoX191dWlkb2YoSUFjY2Vzc2li
bGUpLCB3UGFyYW0sIG1fYWNjZXNzaWJsZVBvcHVwTWVudS5nZXQoKSkpOworfQorCiB2b2lkIFBv
cHVwTWVudVdpbjo6cmVnaXN0ZXJDbGFzcygpCiB7CiAgICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lz
dGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOwpAQCAtMTA1MCw2ICsxMDc3LDkgQEAgTFJFU1VMVCBQ
b3B1cE1lbnVXaW46OnduZFByb2MoSFdORCBoV25kLAogICAgICAgICBjYXNlIFdNX1BSSU5UQ0xJ
RU5UOgogICAgICAgICAgICAgcGFpbnQoY2xpZW50UmVjdCgpLCAoSERDKXdQYXJhbSk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTV9HRVRPQkpFQ1Q6CisgICAgICAgICAgICBv
bkdldE9iamVjdCh3UGFyYW0sIGxQYXJhbSwgbFJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGxSZXN1bHQgPSBEZWZXaW5kb3dQcm9jKGhX
bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKICAgICB9CkBAIC0xMDU3LDQgKzEwODcsMjk3
IEBAIExSRVNVTFQgUG9wdXBNZW51V2luOjp3bmRQcm9jKEhXTkQgaFduZCwKICAgICByZXR1cm4g
bFJlc3VsdDsKIH0KIAorQWNjZXNzaWJsZVBvcHVwTWVudTo6QWNjZXNzaWJsZVBvcHVwTWVudShj
b25zdCBQb3B1cE1lbnVXaW4mIHBvcHVwTWVudSkKKyAgICA6IG1fcmVmQ291bnQoMCkKKyAgICAs
IG1fcG9wdXBNZW51KHBvcHVwTWVudSkKK3sKK30KKworQWNjZXNzaWJsZVBvcHVwTWVudTo6fkFj
Y2Vzc2libGVQb3B1cE1lbnUoKQoreworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6
OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCBfX1JQQ19fZGVyZWZfb3V0IHZvaWQgX19SUENf
RkFSICpfX1JQQ19GQVIgKnBwdk9iamVjdCkKK3sKKyAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwg
X191dWlkb2YoSUFjY2Vzc2libGUpKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0
PElBY2Nlc3NpYmxlKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191
dWlkb2YoSURpc3BhdGNoKSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJQWNj
ZXNzaWJsZSo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9m
KElVbmtub3duKSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJQWNjZXNzaWJs
ZSo+KHRoaXMpOworICAgIGVsc2UgeworICAgICAgICAqcHB2T2JqZWN0ID0gMDsKKyAgICAgICAg
cmV0dXJuIEVfTk9JTlRFUkZBQ0U7CisgICAgfQorICAgIEFkZFJlZigpOworICAgIHJldHVybiBT
X09LOworfQorCitVTE9ORyBBY2Nlc3NpYmxlUG9wdXBNZW51OjpBZGRSZWYoKQoreworICAgIHJl
dHVybiArK21fcmVmQ291bnQ7Cit9CisKK1VMT05HIEFjY2Vzc2libGVQb3B1cE1lbnU6OlJlbGVh
c2UoKQoreworICAgIGludCByZWZDb3VudCA9IC0tbV9yZWZDb3VudDsKKyAgICBpZiAoIXJlZkNv
dW50KQorICAgICAgICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gcmVmQ291bnQ7Cit9CisKK0hS
RVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6R2V0VHlwZUluZm9Db3VudChVSU5UKiBjb3VudCkK
K3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1l
bnU6OkdldFR5cGVJbmZvKFVJTlQsIExDSUQsIElUeXBlSW5mbyoqIHBwVEluZm8pCit7CisgICAg
cmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpHZXRJ
RHNPZk5hbWVzKFJFRklJRCwgTFBPTEVTVFIqLCBVSU5ULCBMQ0lELCBESVNQSUQqKQoreworICAg
IHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6SW52
b2tlKERJU1BJRCwgUkVGSUlELCBMQ0lELCBXT1JELCBESVNQUEFSQU1TKiwgVkFSSUFOVCosIEVY
Q0VQSU5GTyosIFVJTlQqKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQg
QWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2FjY1BhcmVudChJRGlzcGF0Y2gqKikKK3sKKyAgICBy
ZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9h
Y2NDaGlsZENvdW50KGxvbmcqIGNvdW50KQoreworICAgICpjb3VudCA9IG1fcG9wdXBNZW51LnZp
c2libGVJdGVtcygpOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQ
b3B1cE1lbnU6OmdldF9hY2NDaGlsZChWQVJJQU5UIHZDaGlsZCwgSURpc3BhdGNoKiogcHBDaGls
ZCkKK3sKKyAgICBpZiAodkNoaWxkLnZ0ICE9IFZUX0k0KSB7CisgICAgICAgICpwcENoaWxkID0g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisgICAgKnBwQ2hp
bGQgPSBudWxscHRyOworICAgIHJldHVybiBTX0ZBTFNFOworfQorCitIUkVTVUxUIEFjY2Vzc2li
bGVQb3B1cE1lbnU6OmdldF9hY2NOYW1lKFZBUklBTlQgdkNoaWxkLCBCU1RSKiBuYW1lKQorewor
ICAgIHJldHVybiBnZXRfYWNjVmFsdWUodkNoaWxkLCBuYW1lKTsKK30KKworSFJFU1VMVCBBY2Nl
c3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjVmFsdWUoVkFSSUFOVCB2Q2hpbGQsIEJTVFIqIHZhbHVl
KQoreworICAgIGlmICh2Q2hpbGQudnQgIT0gVlRfSTQpCisgICAgICAgIHJldHVybiBFX0lOVkFM
SURBUkc7CisKKyAgICBpbnQgaW5kZXggPSB2Q2hpbGQubFZhbCAtIDE7CisKKyAgICBpZiAoaW5k
ZXggPCAwKQorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAgU3RyaW5nIGl0ZW1U
ZXh0ID0gbV9wb3B1cE1lbnUuY2xpZW50KCktPml0ZW1UZXh0KGluZGV4KTsKKyAgICAqdmFsdWUg
PSBTeXNBbGxvY1N0cmluZyhpdGVtVGV4dC5jaGFyYWN0ZXJzMTYoKSk7CisKKyAgICByZXR1cm4g
U19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjRGVzY3JpcHRp
b24oVkFSSUFOVCwgQlNUUiopCit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VM
VCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjUm9sZShWQVJJQU5UIHZDaGlsZCwgVkFSSUFO
VCogcHZSb2xlKQoreworICAgIGlmICh2Q2hpbGQudnQgIT0gVlRfSTQpCisgICAgICAgIHJldHVy
biBFX0lOVkFMSURBUkc7CisKKyAgICAvLyBTY3JvbGxiYXIgcGFydHMgYXJlIGVuY29kZWQgYXMg
bmVnYXRpdmUgdmFsdWVzLgorICAgIGlmICh2Q2hpbGQubFZhbCA8IDApIHsKKyAgICAgICAgVl9W
VChwdlJvbGUpID0gVlRfSTQ7CisgICAgICAgIFZfSTQocHZSb2xlKSA9IFJPTEVfU1lTVEVNX1ND
Uk9MTEJBUjsKKyAgICB9IGVsc2UgeworICAgICAgICBWX1ZUKHB2Um9sZSkgPSBWVF9JNDsKKyAg
ICAgICAgVl9JNChwdlJvbGUpID0gUk9MRV9TWVNURU1fTElTVElURU07CisgICAgfQorCisgICAg
cmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2FjY1N0
YXRlKFZBUklBTlQgdkNoaWxkLCBWQVJJQU5UKiBwdlN0YXRlKQoreworICAgIGlmICh2Q2hpbGQu
dnQgIT0gVlRfSTQpCisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisKKyAgICBWX1ZUKHB2
U3RhdGUpID0gVlRfSTQ7CisgICAgVl9JNChwdlN0YXRlKSA9IDA7IC8vIFNUQVRFX1NZU1RFTV9O
T1JNQUwKKyAgICAKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9w
dXBNZW51OjpnZXRfYWNjSGVscChWQVJJQU5UIHZDaGlsZCwgQlNUUiogaGVscFRleHQpCit7Cisg
ICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51Ojpn
ZXRfYWNjS2V5Ym9hcmRTaG9ydGN1dChWQVJJQU5UIHZDaGlsZCwgQlNUUiopCit7CisgICAgcmV0
dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNj
Rm9jdXMoVkFSSUFOVCogcHZGb2N1c2VkQ2hpbGQpCit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsK
K30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjU2VsZWN0aW9uKFZBUklB
TlQqIHB2U2VsZWN0ZWRDaGlsZCkKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVT
VUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NEZWZhdWx0QWN0aW9uKFZBUklBTlQgdkNo
aWxkLCBCU1RSKiBhY3Rpb25EZXNjcmlwdGlvbikKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOwor
fQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmFjY1NlbGVjdChsb25nIHNlbGVjdGlv
bkZsYWdzLCBWQVJJQU5UIHZDaGlsZCkKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitI
UkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmFjY0xvY2F0aW9uKGxvbmcqIGxlZnQsIGxvbmcq
IHRvcCwgbG9uZyogd2lkdGgsIGxvbmcqIGhlaWdodCwgVkFSSUFOVCB2Q2hpbGQpCit7CisgICAg
aWYgKHZDaGlsZC52dCAhPSBWVF9JNCkKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKwor
ICAgIGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3QgPSBtX3BvcHVwTWVudS53aW5kb3dSZWN0KCk7
CisKKyAgICAvLyBTY3JvbGxiYXIgcGFydHMgYXJlIGVuY29kZWQgYXMgbmVnYXRpdmUgdmFsdWVz
LgorICAgIGlmICh2Q2hpbGQubFZhbCA8IDApIHsKKyAgICAgICAgaWYgKCFtX3BvcHVwTWVudS5z
Y3JvbGxiYXIoKSkKKyAgICAgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICAgICAgV2ViQ29y
ZTo6U2Nyb2xsYmFyUGFydCBwYXJ0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsYmFyUGFy
dD4oLXZDaGlsZC5sVmFsKTsKKworICAgICAgICBTY3JvbGxiYXJUaGVtZVdpbiogdGhlbWUgPSBz
dGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZVdpbio+KG1fcG9wdXBNZW51LnNjcm9sbGJhcigpLT50
aGVtZSgpKTsKKyAgICAgICAgaWYgKCF0aGVtZSkKKyAgICAgICAgICAgIHJldHVybiBFX0ZBSUw7
CisKKyAgICAgICAgSW50UmVjdCBwYXJ0UmVjdDsKKworICAgICAgICBzd2l0Y2ggKHBhcnQpIHsK
KyAgICAgICAgY2FzZSBCYWNrVHJhY2tQYXJ0OgorICAgICAgICBjYXNlIEJhY2tCdXR0b25TdGFy
dFBhcnQ6CisgICAgICAgICAgICBwYXJ0UmVjdCA9IHRoZW1lLT5iYWNrQnV0dG9uUmVjdChtX3Bv
cHVwTWVudS5zY3JvbGxiYXIoKSwgV2ViQ29yZTo6QmFja1RyYWNrUGFydCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUaHVtYlBhcnQ6CisgICAgICAgICAgICBwYXJ0UmVjdCA9
IHRoZW1lLT50aHVtYlJlY3QobV9wb3B1cE1lbnUuc2Nyb2xsYmFyKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRm9yd2FyZFRyYWNrUGFydDoKKyAgICAgICAgY2FzZSBGb3J3
YXJkQnV0dG9uRW5kUGFydDoKKyAgICAgICAgICAgIHBhcnRSZWN0ID0gdGhlbWUtPmZvcndhcmRC
dXR0b25SZWN0KG1fcG9wdXBNZW51LnNjcm9sbGJhcigpLCBXZWJDb3JlOjpGb3J3YXJkVHJhY2tQ
YXJ0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNjcm9sbGJhckJHUGFydDoK
KyAgICAgICAgICAgIHBhcnRSZWN0ID0gdGhlbWUtPnRyYWNrUmVjdChtX3BvcHVwTWVudS5zY3Jv
bGxiYXIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBFX0ZBSUw7CisgICAgICAgIH0KKworICAgICAgICBwYXJ0UmVjdC5tb3ZlKHdp
bmRvd1JlY3QueCgpLCB3aW5kb3dSZWN0LnkoKSk7CisKKyAgICAgICAgKmxlZnQgPSBwYXJ0UmVj
dC54KCk7CisgICAgICAgICp0b3AgPSBwYXJ0UmVjdC55KCk7CisgICAgICAgICp3aWR0aCA9IHBh
cnRSZWN0LndpZHRoKCk7CisgICAgICAgICpoZWlnaHQgPSBwYXJ0UmVjdC5oZWlnaHQoKTsKKwor
ICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBpbnQgaW5kZXggPSB2Q2hpbGQubFZh
bCAtIDE7CisKKyAgICBpZiAoaW5kZXggPCAwKQorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJH
OworCisgICAgKmxlZnQgPSB3aW5kb3dSZWN0LngoKTsKKyAgICAqdG9wID0gd2luZG93UmVjdC55
KCkgKyAoaW5kZXggLSBtX3BvcHVwTWVudS5tX3Njcm9sbE9mZnNldCkgKiBtX3BvcHVwTWVudS5p
dGVtSGVpZ2h0KCk7CisgICAgKndpZHRoID0gd2luZG93UmVjdC53aWR0aCgpOworICAgICpoZWln
aHQgPSBtX3BvcHVwTWVudS5pdGVtSGVpZ2h0KCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKwor
SFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjphY2NOYXZpZ2F0ZShsb25nIGRpcmVjdGlvbiwg
VkFSSUFOVCB2RnJvbUNoaWxkLCBWQVJJQU5UKiBwdk5hdmlnYXRlZFRvKQoreworICAgIHJldHVy
biBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6YWNjSGl0VGVz
dChsb25nIHgsIGxvbmcgeSwgVkFSSUFOVCogcHZDaGlsZEF0UG9pbnQpCit7CisgICAgaWYgKCFw
dkNoaWxkQXRQb2ludCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIDo6VmFyaWFu
dEluaXQocHZDaGlsZEF0UG9pbnQpOworCisgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gbV9wb3B1
cE1lbnUud2luZG93UmVjdCgpOworCisgICAgSW50UG9pbnQgcHQoeCAtIHdpbmRvd1JlY3QueCgp
LCB5IC0gd2luZG93UmVjdC55KCkpOworCisgICAgSW50UmVjdCBzY3JvbGxSZWN0OworCisgICAg
aWYgKG1fcG9wdXBNZW51LnNjcm9sbGJhcigpKQorICAgICAgICBzY3JvbGxSZWN0ID0gbV9wb3B1
cE1lbnUuc2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOworCisgICAgaWYgKG1fcG9wdXBNZW51LnNj
cm9sbGJhcigpICYmIHNjcm9sbFJlY3QuY29udGFpbnMocHQpKSB7CisgICAgICAgIGlmICghbV9w
b3B1cE1lbnUuc2Nyb2xsYmFyKCktPnRoZW1lKCkpCisgICAgICAgICAgICByZXR1cm4gRV9GQUlM
OworCisgICAgICAgIHB0Lm1vdmUoLXNjcm9sbFJlY3QueCgpLCAtc2Nyb2xsUmVjdC55KCkpOwor
CisgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhclBhcnQgcGFydCA9IG1fcG9wdXBNZW51LnNjcm9s
bGJhcigpLT50aGVtZSgpLT5oaXRUZXN0KG1fcG9wdXBNZW51LnNjcm9sbGJhcigpLCBwdCk7CisK
KyAgICAgICAgVl9WVChwdkNoaWxkQXRQb2ludCkgPSBWVF9JNDsKKyAgICAgICAgVl9JNChwdkNo
aWxkQXRQb2ludCkgPSAtcGFydDsgLy8gU2Nyb2xsYmFyIHBhcnRzIGFyZSBlbmNvZGVkIGFzIG5l
Z2F0aXZlLCB0byBhdm9pZCBtaXh1cCB3aXRoIGl0ZW0gaW5kZXhlcy4KKyAgICAgICAgcmV0dXJu
IFNfT0s7CisgICAgfQorCisgICAgaW50IGluZGV4ID0gbV9wb3B1cE1lbnUubGlzdEluZGV4QXRQ
b2ludChwdCk7CisKKyAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgIFZfVlQocHZDaGlsZEF0
UG9pbnQpID0gVlRfRU1QVFk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgIFZf
VlQocHZDaGlsZEF0UG9pbnQpID0gVlRfSTQ7CisgICAgVl9JNChwdkNoaWxkQXRQb2ludCkgPSBp
bmRleCArIDE7IC8vIENISUxESURfU0VMRiBpcyAwLCBuZWVkIHRvIGFkZCAxLgorCisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6YWNjRG9EZWZhdWx0
QWN0aW9uKFZBUklBTlQgdkNoaWxkKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hS
RVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6cHV0X2FjY05hbWUoVkFSSUFOVCwgQlNUUikKK3sK
KyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6
OnB1dF9hY2NWYWx1ZShWQVJJQU5ULCBCU1RSKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9
CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2FjY0hlbHBUb3BpYyhCU1RSKiBo
ZWxwRmlsZSwgVkFSSUFOVCwgbG9uZyogdG9waWNJRCkKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBM
OworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5oCShyZXZpc2lvbiAxODAyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9w
dXBNZW51V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSwxMyBAQAogI2lmbmRlZiBQ
b3B1cE1lbnVXaW5faAogI2RlZmluZSBQb3B1cE1lbnVXaW5faAogCisjaW5jbHVkZSAiQ09NUHRy
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBvcHVwTWVudS5oIgogI2luY2x1
ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSA8T2xlQWNjLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KQEAgLTM1LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
cmFtZVZpZXc7CiBjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBBY2Nlc3NpYmxlUG9wdXBNZW51Owog
CiBjbGFzcyBQb3B1cE1lbnVXaW4gOiBwdWJsaWMgUG9wdXBNZW51LCBwcml2YXRlIFNjcm9sbGFi
bGVBcmVhIHsKIHB1YmxpYzoKQEAgLTExMiw2ICsxMTUsOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y2FsY3VsYXRlUG9zaXRpb25BbmRTaXplKGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqKTsKICAg
ICB2b2lkIGludmFsaWRhdGVJdGVtKGludCBpbmRleCk7CiAKKyAgICBib29sIG9uR2V0T2JqZWN0
KFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIExSRVNVTFQmIGxSZXN1bHQpOworCiAgICAg
c3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgUG9wdXBNZW51V25kUHJvYyhIV05ELCBVSU5ULCBXUEFS
QU0sIExQQVJBTSk7CiAgICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdl
LCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ckNsYXNzKCk7CkBAIC0xMzAsNiArMTM1LDUzIEBAIHByaXZhdGU6CiAgICAgaW50IG1faG92ZXJl
ZEluZGV4OwogICAgIGJvb2wgbV9zY3JvbGxiYXJDYXB0dXJpbmdNb3VzZTsKICAgICBib29sIG1f
c2hvd1BvcHVwOworICAgIENPTVB0cjxJQWNjZXNzaWJsZT4gbV9hY2Nlc3NpYmxlUG9wdXBNZW51
OworCisgICAgZnJpZW5kIGNsYXNzIEFjY2Vzc2libGVQb3B1cE1lbnU7Cit9OworCitjbGFzcyBB
Y2Nlc3NpYmxlUG9wdXBNZW51IDogcHVibGljIElBY2Nlc3NpYmxlIHsKK3B1YmxpYzoKKyAgICBB
Y2Nlc3NpYmxlUG9wdXBNZW51KGNvbnN0IFBvcHVwTWVudVdpbiYpOworICAgIH5BY2Nlc3NpYmxl
UG9wdXBNZW51KCk7CisKKyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgX19SUENfX2RlcmVmX291
dCB2b2lkIF9fUlBDX0ZBUiAqX19SUENfRkFSICpwcHZPYmplY3QpOworICAgIHZpcnR1YWwgVUxP
TkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRI
T0RDQUxMVFlQRSBSZWxlYXNlKCk7CisKKyAgICAvLyBJRGlzcGF0Y2ggLSBOb3QgdG8gYmUgaW1w
bGVtZW50ZWQuCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFR5cGVJ
bmZvQ291bnQoVUlOVCogY291bnQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBHZXRUeXBlSW5mbyhVSU5ULCBMQ0lELCBJVHlwZUluZm8qKiBwcFRJbmZvKTsKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0SURzT2ZOYW1lcyhSRUZJSUQsIExQ
T0xFU1RSKiwgVUlOVCwgTENJRCwgRElTUElEKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIEludm9rZShESVNQSUQsIFJFRklJRCwgTENJRCwgV09SRCwgRElTUFBBUkFN
UyosIFZBUklBTlQqLCBFWENFUElORk8qLCBVSU5UKik7CisKKyAgICAvLyBJQWNjZXNzaWJsZQor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfYWNjUGFyZW50KElEaXNw
YXRjaCoqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2FjY0No
aWxkQ291bnQobG9uZyopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBn
ZXRfYWNjQ2hpbGQoVkFSSUFOVCB2Q2hpbGQsIElEaXNwYXRjaCoqIHBwQ2hpbGQpOworICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfYWNjTmFtZShWQVJJQU5UIHZDaGls
ZCwgQlNUUiopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfYWNj
VmFsdWUoVkFSSUFOVCB2Q2hpbGQsIEJTVFIqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgZ2V0X2FjY0Rlc2NyaXB0aW9uKFZBUklBTlQsIEJTVFIqKTsKKyAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2FjY1JvbGUoVkFSSUFOVCB2Q2hpbGQs
IFZBUklBTlQqIHB2Um9sZSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IGdldF9hY2NTdGF0ZShWQVJJQU5UIHZDaGlsZCwgVkFSSUFOVCogcHZTdGF0ZSk7CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hY2NIZWxwKFZBUklBTlQgdkNoaWxk
LCBCU1RSKiBoZWxwVGV4dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IGdldF9hY2NLZXlib2FyZFNob3J0Y3V0KFZBUklBTlQgdkNoaWxkLCBCU1RSKik7CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hY2NGb2N1cyhWQVJJQU5UKiBwdkZv
Y3VzZWRDaGlsZCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9h
Y2NTZWxlY3Rpb24oVkFSSUFOVCogcHZTZWxlY3RlZENoaWxkKTsKKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2FjY0RlZmF1bHRBY3Rpb24oVkFSSUFOVCB2Q2hpbGQs
IEJTVFIqIGFjdGlvbkRlc2NyaXB0aW9uKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgYWNjU2VsZWN0KGxvbmcgc2VsZWN0aW9uRmxhZ3MsIFZBUklBTlQgdkNoaWxkKTsK
KyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgYWNjTG9jYXRpb24obG9uZyog
bGVmdCwgbG9uZyogdG9wLCBsb25nKiB3aWR0aCwgbG9uZyogaGVpZ2h0LCBWQVJJQU5UIHZDaGls
ZCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGFjY05hdmlnYXRlKGxv
bmcgZGlyZWN0aW9uLCBWQVJJQU5UIHZGcm9tQ2hpbGQsIFZBUklBTlQqIHB2TmF2aWdhdGVkVG8p
OworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBhY2NIaXRUZXN0KGxvbmcg
eCwgbG9uZyB5LCBWQVJJQU5UKiBwdkNoaWxkQXRQb2ludCk7CisgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGFjY0RvRGVmYXVsdEFjdGlvbihWQVJJQU5UIHZDaGlsZCk7Cisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHB1dF9hY2NOYW1lKFZBUklBTlQs
IEJTVFIpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwdXRfYWNjVmFs
dWUoVkFSSUFOVCwgQlNUUik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IGdldF9hY2NIZWxwVG9waWMoQlNUUiogaGVscEZpbGUsIFZBUklBTlQsIGxvbmcqIHRvcGljSUQp
OworCitwcml2YXRlOgorICAgIGludCBtX3JlZkNvdW50OworICAgIGNvbnN0IFBvcHVwTWVudVdp
biYgbV9wb3B1cE1lbnU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaAkocmV2aXNp
b24gMTgwMjE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1l
V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDI3ICszNSwyNyBAQCBwdWJsaWM6CiAgICAgU2Ny
b2xsYmFyVGhlbWVXaW4oKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZVdpbigpOwogCi0g
ICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplID0g
UmVndWxhclNjcm9sbGJhcik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNj
cm9sbGJhckNvbnRyb2xTaXplID0gUmVndWxhclNjcm9sbGJhcikgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdl
ZCgpIG92ZXJyaWRlOwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRlT25Nb3VzZUVu
dGVyRXhpdCgpOworICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhpdCgp
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJh
clRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBi
b29sIHBhaW50aW5nID0gZmFsc2UpIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCBib29sIGhhc0J1dHRvbnMoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAg
dmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhclRoZW1l
Q2xpZW50Kikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVt
YihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbihTY3JvbGxi
YXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOwogCi0g
ICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50Kiwg
U2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIEludFJl
Y3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0
LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3Qo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotCi0gICAgdmly
dHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU25hcEJhY2tU
b0RyYWdPcmlnaW4oU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1l
Q2xpZW50KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOwotICAgIHZpcnR1YWwgdm9p
ZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNv
bnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUaHVt
YihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0
KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJU
aGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVD
bGllbnQqLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251459</attachid>
            <date>2015-04-23 11:45:13 -0700</date>
            <delta_ts>2015-04-23 13:32:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141704-20150423204354.patch</filename>
            <type>text/plain</type>
            <size>18727</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzE5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE1LTA0LTIzICBQZXIgQXJu
ZSBWb2xsYW4gIDxwZWF2b0BvdXRsb29rLmNvbT4KKworICAgICAgICBbV2luXSBQb3B1cCBtZW51
IGlzIG5vdCBhY2Nlc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQxNzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgR2V0IGFjY2Vzc2liaWxpdHkgaW5mb3JtYXRpb24gZm9yIGl0ZW1zIGluIHBv
cHVwIG1lbnVzLgorCisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46Om9uR2V0T2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBvcHVwTWVudVdpbjo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmxlUG9wdXBNZW51OjpBY2Nlc3NpYmxlUG9wdXBNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2libGVQb3B1cE1lbnU6On5BY2Nlc3NpYmxlUG9wdXBNZW51KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OkFkZFJlZik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmxlUG9wdXBNZW51OjpSZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQ
b3B1cE1lbnU6OkdldFR5cGVJbmZvQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJs
ZVBvcHVwTWVudTo6R2V0VHlwZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBv
cHVwTWVudTo6R2V0SURzT2ZOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9w
dXBNZW51OjpJbnZva2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6
Z2V0X2FjY1BhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51Ojpn
ZXRfYWNjQ2hpbGRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51
OjpnZXRfYWNjQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6
Z2V0X2FjY05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0
X2FjY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9h
Y2NEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51Ojpn
ZXRfYWNjUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRf
YWNjU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2Fj
Y0hlbHApOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2FjY0tl
eWJvYXJkU2hvcnRjdXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6
Z2V0X2FjY0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6Omdl
dF9hY2NTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6
Z2V0X2FjY0RlZmF1bHRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVw
TWVudTo6YWNjU2VsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6
OmFjY0xvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OmFj
Y05hdmlnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OmFjY0hp
dFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6YWNjRG9EZWZh
dWx0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OnB1dF9h
Y2NOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OnB1dF9hY2NW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjSGVs
cFRvcGljKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmg6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZVdpbjo6aGFzQnV0dG9ucyk6IERlbGV0ZWQuCisKIDIwMTUtMDQtMjMgIEVy
aWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgZml4IHRoZSByZWxlYXNlIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDE4MzE5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5o
IgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVX
aW4uaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUluc3RhbmNlSGFu
ZGxlLmgiCiAjaW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KQEAgLTc0OCw2ICs3NDksMzIg
QEAgSW50UmVjdCBQb3B1cE1lbnVXaW46OnNjcm9sbGFibGVBcmVhQm91bgogICAgIHJldHVybiBt
X3dpbmRvd1JlY3Q7CiB9CiAKK2Jvb2wgUG9wdXBNZW51V2luOjpvbkdldE9iamVjdChXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBMUkVTVUxUJiBsUmVzdWx0KQoreworICAgIGxSZXN1bHQg
PSAwOworCisgICAgaWYgKGxQYXJhbSAhPSBPQkpJRF9DTElFTlQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghbV9hY2Nlc3NpYmxlUG9wdXBNZW51KQorICAgICAgICBtX2FjY2Vz
c2libGVQb3B1cE1lbnUgPSBuZXcgQWNjZXNzaWJsZVBvcHVwTWVudSgqdGhpcyk7CisKKyAgICBz
dGF0aWMgSE1PRFVMRSBhY2Nlc3NpYmlsaXR5TGliID0gbnVsbHB0cjsKKyAgICBpZiAoIWFjY2Vz
c2liaWxpdHlMaWIpIHsKKyAgICAgICAgaWYgKCEoYWNjZXNzaWJpbGl0eUxpYiA9IDo6TG9hZExp
YnJhcnlXKEwib2xlYWNjLmRsbCIpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBzdGF0aWMgTFBGTkxSRVNVTFRGUk9NT0JKRUNUIHByb2NQdHIgPSByZWludGVycHJl
dF9jYXN0PExQRk5MUkVTVUxURlJPTU9CSkVDVD4oOjpHZXRQcm9jQWRkcmVzcyhhY2Nlc3NpYmls
aXR5TGliLCAiTHJlc3VsdEZyb21PYmplY3QiKSk7CisgICAgaWYgKCFwcm9jUHRyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBMcmVzdWx0RnJvbU9iamVjdCByZXR1cm5zIGEgcmVm
ZXJlbmNlIHRvIHRoZSBhY2Nlc3NpYmxlIG9iamVjdCwgc3RvcmVkCisgICAgLy8gaW4gYW4gTFJF
U1VMVC4gSWYgdGhpcyBjYWxsIGlzIG5vdCBzdWNjZXNzZnVsLCBXaW5kb3dzIHdpbGwgaGFuZGxl
IHRoZQorICAgIC8vIHJlcXVlc3QgdGhyb3VnaCBEZWZXaW5kb3dQcm9jLgorICAgIHJldHVybiBT
VUNDRUVERUQobFJlc3VsdCA9IHByb2NQdHIoX191dWlkb2YoSUFjY2Vzc2libGUpLCB3UGFyYW0s
IG1fYWNjZXNzaWJsZVBvcHVwTWVudS5nZXQoKSkpOworfQorCiB2b2lkIFBvcHVwTWVudVdpbjo6
cmVnaXN0ZXJDbGFzcygpCiB7CiAgICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dD
bGFzcyA9IGZhbHNlOwpAQCAtMTA1MCw2ICsxMDc3LDkgQEAgTFJFU1VMVCBQb3B1cE1lbnVXaW46
OnduZFByb2MoSFdORCBoV25kLAogICAgICAgICBjYXNlIFdNX1BSSU5UQ0xJRU5UOgogICAgICAg
ICAgICAgcGFpbnQoY2xpZW50UmVjdCgpLCAoSERDKXdQYXJhbSk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBXTV9HRVRPQkpFQ1Q6CisgICAgICAgICAgICBvbkdldE9iamVjdCh3
UGFyYW0sIGxQYXJhbSwgbFJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGxSZXN1bHQgPSBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2Us
IHdQYXJhbSwgbFBhcmFtKTsKICAgICB9CkBAIC0xMDU3LDQgKzEwODcsMjk3IEBAIExSRVNVTFQg
UG9wdXBNZW51V2luOjp3bmRQcm9jKEhXTkQgaFduZCwKICAgICByZXR1cm4gbFJlc3VsdDsKIH0K
IAorQWNjZXNzaWJsZVBvcHVwTWVudTo6QWNjZXNzaWJsZVBvcHVwTWVudShjb25zdCBQb3B1cE1l
bnVXaW4mIHBvcHVwTWVudSkKKyAgICA6IG1fcmVmQ291bnQoMCkKKyAgICAsIG1fcG9wdXBNZW51
KHBvcHVwTWVudSkKK3sKK30KKworQWNjZXNzaWJsZVBvcHVwTWVudTo6fkFjY2Vzc2libGVQb3B1
cE1lbnUoKQoreworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OlF1ZXJ5SW50ZXJm
YWNlKFJFRklJRCByaWlkLCBfX1JQQ19fZGVyZWZfb3V0IHZvaWQgX19SUENfRkFSICpfX1JQQ19G
QVIgKnBwdk9iamVjdCkKK3sKKyAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSUFj
Y2Vzc2libGUpKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElBY2Nlc3NpYmxl
Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSURpc3Bh
dGNoKSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJQWNjZXNzaWJsZSo+KHRo
aXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElVbmtub3duKSkp
CisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJQWNjZXNzaWJsZSo+KHRoaXMpOwor
ICAgIGVsc2UgeworICAgICAgICAqcHB2T2JqZWN0ID0gMDsKKyAgICAgICAgcmV0dXJuIEVfTk9J
TlRFUkZBQ0U7CisgICAgfQorICAgIEFkZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCitV
TE9ORyBBY2Nlc3NpYmxlUG9wdXBNZW51OjpBZGRSZWYoKQoreworICAgIHJldHVybiArK21fcmVm
Q291bnQ7Cit9CisKK1VMT05HIEFjY2Vzc2libGVQb3B1cE1lbnU6OlJlbGVhc2UoKQoreworICAg
IGludCByZWZDb3VudCA9IC0tbV9yZWZDb3VudDsKKyAgICBpZiAoIXJlZkNvdW50KQorICAgICAg
ICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gcmVmQ291bnQ7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJsZVBvcHVwTWVudTo6R2V0VHlwZUluZm9Db3VudChVSU5UKiBjb3VudCkKK3sKKyAgICByZXR1
cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OkdldFR5cGVJ
bmZvKFVJTlQsIExDSUQsIElUeXBlSW5mbyoqIHBwVEluZm8pCit7CisgICAgcmV0dXJuIEVfTk9U
SU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpHZXRJRHNPZk5hbWVzKFJF
RklJRCwgTFBPTEVTVFIqLCBVSU5ULCBMQ0lELCBESVNQSUQqKQoreworICAgIHJldHVybiBFX05P
VElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6SW52b2tlKERJU1BJRCwg
UkVGSUlELCBMQ0lELCBXT1JELCBESVNQUEFSQU1TKiwgVkFSSUFOVCosIEVYQ0VQSU5GTyosIFVJ
TlQqKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBv
cHVwTWVudTo6Z2V0X2FjY1BhcmVudChJRGlzcGF0Y2gqKikKK3sKKyAgICByZXR1cm4gRV9OT1RJ
TVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NDaGlsZENvdW50
KGxvbmcqIGNvdW50KQoreworICAgICpjb3VudCA9IG1fcG9wdXBNZW51LnZpc2libGVJdGVtcygp
OworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6Omdl
dF9hY2NDaGlsZChWQVJJQU5UIHZDaGlsZCwgSURpc3BhdGNoKiogcHBDaGlsZCkKK3sKKyAgICBp
ZiAodkNoaWxkLnZ0ICE9IFZUX0k0KSB7CisgICAgICAgICpwcENoaWxkID0gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisgICAgKnBwQ2hpbGQgPSBudWxscHRy
OworICAgIHJldHVybiBTX0ZBTFNFOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6
OmdldF9hY2NOYW1lKFZBUklBTlQgdkNoaWxkLCBCU1RSKiBuYW1lKQoreworICAgIHJldHVybiBn
ZXRfYWNjVmFsdWUodkNoaWxkLCBuYW1lKTsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBN
ZW51OjpnZXRfYWNjVmFsdWUoVkFSSUFOVCB2Q2hpbGQsIEJTVFIqIHZhbHVlKQoreworICAgIGlm
ICh2Q2hpbGQudnQgIT0gVlRfSTQpCisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisKKyAg
ICBpbnQgaW5kZXggPSB2Q2hpbGQubFZhbCAtIDE7CisKKyAgICBpZiAoaW5kZXggPCAwKQorICAg
ICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAgU3RyaW5nIGl0ZW1UZXh0ID0gbV9wb3B1
cE1lbnUuY2xpZW50KCktPml0ZW1UZXh0KGluZGV4KTsKKyAgICAqdmFsdWUgPSBTeXNBbGxvY1N0
cmluZyhpdGVtVGV4dC5jaGFyYWN0ZXJzMTYoKSk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKwor
SFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjRGVzY3JpcHRpb24oVkFSSUFOVCwg
QlNUUiopCit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxl
UG9wdXBNZW51OjpnZXRfYWNjUm9sZShWQVJJQU5UIHZDaGlsZCwgVkFSSUFOVCogcHZSb2xlKQor
eworICAgIGlmICh2Q2hpbGQudnQgIT0gVlRfSTQpCisgICAgICAgIHJldHVybiBFX0lOVkFMSURB
Ukc7CisKKyAgICAvLyBTY3JvbGxiYXIgcGFydHMgYXJlIGVuY29kZWQgYXMgbmVnYXRpdmUgdmFs
dWVzLgorICAgIGlmICh2Q2hpbGQubFZhbCA8IDApIHsKKyAgICAgICAgVl9WVChwdlJvbGUpID0g
VlRfSTQ7CisgICAgICAgIFZfSTQocHZSb2xlKSA9IFJPTEVfU1lTVEVNX1NDUk9MTEJBUjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBWX1ZUKHB2Um9sZSkgPSBWVF9JNDsKKyAgICAgICAgVl9JNChw
dlJvbGUpID0gUk9MRV9TWVNURU1fTElTVElURU07CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7
Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2FjY1N0YXRlKFZBUklBTlQg
dkNoaWxkLCBWQVJJQU5UKiBwdlN0YXRlKQoreworICAgIGlmICh2Q2hpbGQudnQgIT0gVlRfSTQp
CisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisKKyAgICBWX1ZUKHB2U3RhdGUpID0gVlRf
STQ7CisgICAgVl9JNChwdlN0YXRlKSA9IDA7IC8vIFNUQVRFX1NZU1RFTV9OT1JNQUwKKyAgICAK
KyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRf
YWNjSGVscChWQVJJQU5UIHZDaGlsZCwgQlNUUiogaGVscFRleHQpCit7CisgICAgcmV0dXJuIEVf
Tk9USU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjS2V5Ym9h
cmRTaG9ydGN1dChWQVJJQU5UIHZDaGlsZCwgQlNUUiopCit7CisgICAgcmV0dXJuIEVfTk9USU1Q
TDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjRm9jdXMoVkFSSUFO
VCogcHZGb2N1c2VkQ2hpbGQpCit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VM
VCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjU2VsZWN0aW9uKFZBUklBTlQqIHB2U2VsZWN0
ZWRDaGlsZCkKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2li
bGVQb3B1cE1lbnU6OmdldF9hY2NEZWZhdWx0QWN0aW9uKFZBUklBTlQgdkNoaWxkLCBCU1RSKiBh
Y3Rpb25EZXNjcmlwdGlvbikKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxU
IEFjY2Vzc2libGVQb3B1cE1lbnU6OmFjY1NlbGVjdChsb25nIHNlbGVjdGlvbkZsYWdzLCBWQVJJ
QU5UIHZDaGlsZCkKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vz
c2libGVQb3B1cE1lbnU6OmFjY0xvY2F0aW9uKGxvbmcqIGxlZnQsIGxvbmcqIHRvcCwgbG9uZyog
d2lkdGgsIGxvbmcqIGhlaWdodCwgVkFSSUFOVCB2Q2hpbGQpCit7CisgICAgaWYgKHZDaGlsZC52
dCAhPSBWVF9JNCkKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKworICAgIGNvbnN0IElu
dFJlY3QmIHdpbmRvd1JlY3QgPSBtX3BvcHVwTWVudS53aW5kb3dSZWN0KCk7CisKKyAgICAvLyBT
Y3JvbGxiYXIgcGFydHMgYXJlIGVuY29kZWQgYXMgbmVnYXRpdmUgdmFsdWVzLgorICAgIGlmICh2
Q2hpbGQubFZhbCA8IDApIHsKKyAgICAgICAgaWYgKCFtX3BvcHVwTWVudS5zY3JvbGxiYXIoKSkK
KyAgICAgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFy
UGFydCBwYXJ0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsYmFyUGFydD4oLXZDaGlsZC5s
VmFsKTsKKworICAgICAgICBTY3JvbGxiYXJUaGVtZVdpbiogdGhlbWUgPSBzdGF0aWNfY2FzdDxT
Y3JvbGxiYXJUaGVtZVdpbio+KG1fcG9wdXBNZW51LnNjcm9sbGJhcigpLT50aGVtZSgpKTsKKyAg
ICAgICAgaWYgKCF0aGVtZSkKKyAgICAgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICAgICAg
SW50UmVjdCBwYXJ0UmVjdDsKKworICAgICAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAgY2Fz
ZSBCYWNrVHJhY2tQYXJ0OgorICAgICAgICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6CisgICAg
ICAgICAgICBwYXJ0UmVjdCA9IHRoZW1lLT5iYWNrQnV0dG9uUmVjdChtX3BvcHVwTWVudS5zY3Jv
bGxiYXIoKSwgV2ViQ29yZTo6QmFja1RyYWNrUGFydCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUaHVtYlBhcnQ6CisgICAgICAgICAgICBwYXJ0UmVjdCA9IHRoZW1lLT50aHVt
YlJlY3QobV9wb3B1cE1lbnUuc2Nyb2xsYmFyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRm9yd2FyZFRyYWNrUGFydDoKKyAgICAgICAgY2FzZSBGb3J3YXJkQnV0dG9uRW5k
UGFydDoKKyAgICAgICAgICAgIHBhcnRSZWN0ID0gdGhlbWUtPmZvcndhcmRCdXR0b25SZWN0KG1f
cG9wdXBNZW51LnNjcm9sbGJhcigpLCBXZWJDb3JlOjpGb3J3YXJkVHJhY2tQYXJ0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNjcm9sbGJhckJHUGFydDoKKyAgICAgICAgICAg
IHBhcnRSZWN0ID0gdGhlbWUtPnRyYWNrUmVjdChtX3BvcHVwTWVudS5zY3JvbGxiYXIoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBF
X0ZBSUw7CisgICAgICAgIH0KKworICAgICAgICBwYXJ0UmVjdC5tb3ZlKHdpbmRvd1JlY3QueCgp
LCB3aW5kb3dSZWN0LnkoKSk7CisKKyAgICAgICAgKmxlZnQgPSBwYXJ0UmVjdC54KCk7CisgICAg
ICAgICp0b3AgPSBwYXJ0UmVjdC55KCk7CisgICAgICAgICp3aWR0aCA9IHBhcnRSZWN0LndpZHRo
KCk7CisgICAgICAgICpoZWlnaHQgPSBwYXJ0UmVjdC5oZWlnaHQoKTsKKworICAgICAgICByZXR1
cm4gU19PSzsKKyAgICB9CisKKyAgICBpbnQgaW5kZXggPSB2Q2hpbGQubFZhbCAtIDE7CisKKyAg
ICBpZiAoaW5kZXggPCAwKQorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAgKmxl
ZnQgPSB3aW5kb3dSZWN0LngoKTsKKyAgICAqdG9wID0gd2luZG93UmVjdC55KCkgKyAoaW5kZXgg
LSBtX3BvcHVwTWVudS5tX3Njcm9sbE9mZnNldCkgKiBtX3BvcHVwTWVudS5pdGVtSGVpZ2h0KCk7
CisgICAgKndpZHRoID0gd2luZG93UmVjdC53aWR0aCgpOworICAgICpoZWlnaHQgPSBtX3BvcHVw
TWVudS5pdGVtSGVpZ2h0KCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nl
c3NpYmxlUG9wdXBNZW51OjphY2NOYXZpZ2F0ZShsb25nIGRpcmVjdGlvbiwgVkFSSUFOVCB2RnJv
bUNoaWxkLCBWQVJJQU5UKiBwdk5hdmlnYXRlZFRvKQoreworICAgIHJldHVybiBFX05PVElNUEw7
Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6YWNjSGl0VGVzdChsb25nIHgsIGxv
bmcgeSwgVkFSSUFOVCogcHZDaGlsZEF0UG9pbnQpCit7CisgICAgaWYgKCFwdkNoaWxkQXRQb2lu
dCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIDo6VmFyaWFudEluaXQocHZDaGls
ZEF0UG9pbnQpOworCisgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gbV9wb3B1cE1lbnUud2luZG93
UmVjdCgpOworCisgICAgSW50UG9pbnQgcHQoeCAtIHdpbmRvd1JlY3QueCgpLCB5IC0gd2luZG93
UmVjdC55KCkpOworCisgICAgSW50UmVjdCBzY3JvbGxSZWN0OworCisgICAgaWYgKG1fcG9wdXBN
ZW51LnNjcm9sbGJhcigpKQorICAgICAgICBzY3JvbGxSZWN0ID0gbV9wb3B1cE1lbnUuc2Nyb2xs
YmFyKCktPmZyYW1lUmVjdCgpOworCisgICAgaWYgKG1fcG9wdXBNZW51LnNjcm9sbGJhcigpICYm
IHNjcm9sbFJlY3QuY29udGFpbnMocHQpKSB7CisgICAgICAgIGlmICghbV9wb3B1cE1lbnUuc2Ny
b2xsYmFyKCktPnRoZW1lKCkpCisgICAgICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgICAg
IHB0Lm1vdmUoLXNjcm9sbFJlY3QueCgpLCAtc2Nyb2xsUmVjdC55KCkpOworCisgICAgICAgIFdl
YkNvcmU6OlNjcm9sbGJhclBhcnQgcGFydCA9IG1fcG9wdXBNZW51LnNjcm9sbGJhcigpLT50aGVt
ZSgpLT5oaXRUZXN0KG1fcG9wdXBNZW51LnNjcm9sbGJhcigpLCBwdCk7CisKKyAgICAgICAgVl9W
VChwdkNoaWxkQXRQb2ludCkgPSBWVF9JNDsKKyAgICAgICAgVl9JNChwdkNoaWxkQXRQb2ludCkg
PSAtcGFydDsgLy8gU2Nyb2xsYmFyIHBhcnRzIGFyZSBlbmNvZGVkIGFzIG5lZ2F0aXZlLCB0byBh
dm9pZCBtaXh1cCB3aXRoIGl0ZW0gaW5kZXhlcy4KKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAg
fQorCisgICAgaW50IGluZGV4ID0gbV9wb3B1cE1lbnUubGlzdEluZGV4QXRQb2ludChwdCk7CisK
KyAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgIFZfVlQocHZDaGlsZEF0UG9pbnQpID0gVlRf
RU1QVFk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgIFZfVlQocHZDaGlsZEF0
UG9pbnQpID0gVlRfSTQ7CisgICAgVl9JNChwdkNoaWxkQXRQb2ludCkgPSBpbmRleCArIDE7IC8v
IENISUxESURfU0VMRiBpcyAwLCBuZWVkIHRvIGFkZCAxLgorCisgICAgcmV0dXJuIFNfT0s7Cit9
CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6YWNjRG9EZWZhdWx0QWN0aW9uKFZBUklB
TlQgdkNoaWxkKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJsZVBvcHVwTWVudTo6cHV0X2FjY05hbWUoVkFSSUFOVCwgQlNUUikKK3sKKyAgICByZXR1cm4g
RV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OnB1dF9hY2NWYWx1
ZShWQVJJQU5ULCBCU1RSKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQg
QWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2FjY0hlbHBUb3BpYyhCU1RSKiBoZWxwRmlsZSwgVkFS
SUFOVCwgbG9uZyogdG9waWNJRCkKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCShyZXZpc2lv
biAxODMxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSwxMyBAQAogI2lmbmRlZiBQb3B1cE1lbnVXaW5f
aAogI2RlZmluZSBQb3B1cE1lbnVXaW5faAogCisjaW5jbHVkZSAiQ09NUHRyLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlBvcHVwTWVu
dUNsaWVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
YmFyLmgiCisjaW5jbHVkZSA8T2xlQWNjLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAg
LTM1LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGcmFtZVZpZXc7CiBj
bGFzcyBTY3JvbGxiYXI7CitjbGFzcyBBY2Nlc3NpYmxlUG9wdXBNZW51OwogCiBjbGFzcyBQb3B1
cE1lbnVXaW4gOiBwdWJsaWMgUG9wdXBNZW51LCBwcml2YXRlIFNjcm9sbGFibGVBcmVhIHsKIHB1
YmxpYzoKQEAgLTExMiw2ICsxMTUsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FsY3VsYXRlUG9z
aXRpb25BbmRTaXplKGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqKTsKICAgICB2b2lkIGludmFs
aWRhdGVJdGVtKGludCBpbmRleCk7CiAKKyAgICBib29sIG9uR2V0T2JqZWN0KFdQQVJBTSB3UGFy
YW0sIExQQVJBTSBsUGFyYW0sIExSRVNVTFQmIGxSZXN1bHQpOworCiAgICAgc3RhdGljIExSRVNV
TFQgQ0FMTEJBQ0sgUG9wdXBNZW51V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7
CiAgICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtKTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNsYXNzKCk7CkBA
IC0xMzAsNiArMTM1LDUzIEBAIHByaXZhdGU6CiAgICAgaW50IG1faG92ZXJlZEluZGV4OwogICAg
IGJvb2wgbV9zY3JvbGxiYXJDYXB0dXJpbmdNb3VzZTsKICAgICBib29sIG1fc2hvd1BvcHVwOwor
ICAgIENPTVB0cjxJQWNjZXNzaWJsZT4gbV9hY2Nlc3NpYmxlUG9wdXBNZW51OworCisgICAgZnJp
ZW5kIGNsYXNzIEFjY2Vzc2libGVQb3B1cE1lbnU7Cit9OworCitjbGFzcyBBY2Nlc3NpYmxlUG9w
dXBNZW51IDogcHVibGljIElBY2Nlc3NpYmxlIHsKK3B1YmxpYzoKKyAgICBBY2Nlc3NpYmxlUG9w
dXBNZW51KGNvbnN0IFBvcHVwTWVudVdpbiYpOworICAgIH5BY2Nlc3NpYmxlUG9wdXBNZW51KCk7
CisKKyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgX19SUENfX2RlcmVmX291dCB2b2lkIF9fUlBD
X0ZBUiAqX19SUENfRkFSICpwcHZPYmplY3QpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9E
Q0FMTFRZUEUgQWRkUmVmKCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBS
ZWxlYXNlKCk7CisKKyAgICAvLyBJRGlzcGF0Y2ggLSBOb3QgdG8gYmUgaW1wbGVtZW50ZWQuCisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFR5cGVJbmZvQ291bnQoVUlO
VCogY291bnQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRUeXBl
SW5mbyhVSU5ULCBMQ0lELCBJVHlwZUluZm8qKiBwcFRJbmZvKTsKKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0SURzT2ZOYW1lcyhSRUZJSUQsIExQT0xFU1RSKiwgVUlO
VCwgTENJRCwgRElTUElEKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEludm9rZShESVNQSUQsIFJFRklJRCwgTENJRCwgV09SRCwgRElTUFBBUkFNUyosIFZBUklBTlQq
LCBFWENFUElORk8qLCBVSU5UKik7CisKKyAgICAvLyBJQWNjZXNzaWJsZQorICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfYWNjUGFyZW50KElEaXNwYXRjaCoqKTsKKyAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2FjY0NoaWxkQ291bnQobG9u
ZyopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfYWNjQ2hpbGQo
VkFSSUFOVCB2Q2hpbGQsIElEaXNwYXRjaCoqIHBwQ2hpbGQpOworICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfYWNjTmFtZShWQVJJQU5UIHZDaGlsZCwgQlNUUiopOwor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfYWNjVmFsdWUoVkFSSUFO
VCB2Q2hpbGQsIEJTVFIqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
Z2V0X2FjY0Rlc2NyaXB0aW9uKFZBUklBTlQsIEJTVFIqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2FjY1JvbGUoVkFSSUFOVCB2Q2hpbGQsIFZBUklBTlQqIHB2
Um9sZSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hY2NTdGF0
ZShWQVJJQU5UIHZDaGlsZCwgVkFSSUFOVCogcHZTdGF0ZSk7CisgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGdldF9hY2NIZWxwKFZBUklBTlQgdkNoaWxkLCBCU1RSKiBoZWxw
VGV4dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hY2NLZXli
b2FyZFNob3J0Y3V0KFZBUklBTlQgdkNoaWxkLCBCU1RSKik7CisgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGdldF9hY2NGb2N1cyhWQVJJQU5UKiBwdkZvY3VzZWRDaGlsZCk7
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hY2NTZWxlY3Rpb24o
VkFSSUFOVCogcHZTZWxlY3RlZENoaWxkKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgZ2V0X2FjY0RlZmF1bHRBY3Rpb24oVkFSSUFOVCB2Q2hpbGQsIEJTVFIqIGFjdGlv
bkRlc2NyaXB0aW9uKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgYWNj
U2VsZWN0KGxvbmcgc2VsZWN0aW9uRmxhZ3MsIFZBUklBTlQgdkNoaWxkKTsKKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgYWNjTG9jYXRpb24obG9uZyogbGVmdCwgbG9uZyog
dG9wLCBsb25nKiB3aWR0aCwgbG9uZyogaGVpZ2h0LCBWQVJJQU5UIHZDaGlsZCk7CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGFjY05hdmlnYXRlKGxvbmcgZGlyZWN0aW9u
LCBWQVJJQU5UIHZGcm9tQ2hpbGQsIFZBUklBTlQqIHB2TmF2aWdhdGVkVG8pOworICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBhY2NIaXRUZXN0KGxvbmcgeCwgbG9uZyB5LCBW
QVJJQU5UKiBwdkNoaWxkQXRQb2ludCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGFjY0RvRGVmYXVsdEFjdGlvbihWQVJJQU5UIHZDaGlsZCk7CisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHB1dF9hY2NOYW1lKFZBUklBTlQsIEJTVFIpOworICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwdXRfYWNjVmFsdWUoVkFSSUFOVCwg
QlNUUik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hY2NIZWxw
VG9waWMoQlNUUiogaGVscEZpbGUsIFZBUklBTlQsIGxvbmcqIHRvcGljSUQpOworCitwcml2YXRl
OgorICAgIGludCBtX3JlZkNvdW50OworICAgIGNvbnN0IFBvcHVwTWVudVdpbiYgbV9wb3B1cE1l
bnU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaAkocmV2aXNpb24gMTgzMTk2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDI3ICszNSwyNyBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyVGhlbWVX
aW4oKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZVdpbigpOwogCi0gICAgdmlydHVhbCBp
bnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplID0gUmVndWxhclNjcm9s
bGJhcik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRy
b2xTaXplID0gUmVndWxhclNjcm9sbGJhcikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
dGhlbWVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIG92ZXJyaWRl
OwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhpdCgpOwor
ICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhpdCgpIG92ZXJyaWRlOwor
CisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBT
Y3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sIHBhaW50aW5n
ID0gZmFsc2UpIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIGhhc0J1
dHRvbnMoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIGhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBib29s
IGhhc0J1dHRvbnMoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kikgb3Zl
cnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJU
aGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbihTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBJ
bnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFy
dCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1
dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50
aW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotCi0gICAgdmlydHVhbCBib29sIHNo
b3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4o
U2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3Jv
bGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29u
c3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRv
bihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3Qm
LCBTY3JvbGxiYXJQYXJ0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUaHVtYihHcmFwaGljc0Nv
bnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFy
VGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCos
IGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBj
b25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251480</attachid>
            <date>2015-04-23 13:32:23 -0700</date>
            <delta_ts>2015-04-23 16:08:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141704-20150423223105.patch</filename>
            <type>text/plain</type>
            <size>19084</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzE5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE1LTA0LTIzICBQZXIgQXJu
ZSBWb2xsYW4gIDxwZWF2b0BvdXRsb29rLmNvbT4KKworICAgICAgICBbV2luXSBQb3B1cCBtZW51
IGlzIG5vdCBhY2Nlc3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQxNzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgR2V0IGFjY2Vzc2liaWxpdHkgaW5mb3JtYXRpb24gZm9yIGl0ZW1zIGluIHBv
cHVwIG1lbnVzLgorCisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46Om9uR2V0T2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBvcHVwTWVudVdpbjo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmxlUG9wdXBNZW51OjpBY2Nlc3NpYmxlUG9wdXBNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2libGVQb3B1cE1lbnU6On5BY2Nlc3NpYmxlUG9wdXBNZW51KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OkFkZFJlZik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmxlUG9wdXBNZW51OjpSZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQ
b3B1cE1lbnU6OkdldFR5cGVJbmZvQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJs
ZVBvcHVwTWVudTo6R2V0VHlwZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBv
cHVwTWVudTo6R2V0SURzT2ZOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9w
dXBNZW51OjpJbnZva2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6
Z2V0X2FjY1BhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51Ojpn
ZXRfYWNjQ2hpbGRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51
OjpnZXRfYWNjQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6
Z2V0X2FjY05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0
X2FjY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9h
Y2NEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51Ojpn
ZXRfYWNjUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRf
YWNjU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2Fj
Y0hlbHApOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2FjY0tl
eWJvYXJkU2hvcnRjdXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6
Z2V0X2FjY0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6Omdl
dF9hY2NTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6
Z2V0X2FjY0RlZmF1bHRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVw
TWVudTo6YWNjU2VsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6
OmFjY0xvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OmFj
Y05hdmlnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OmFjY0hp
dFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZVBvcHVwTWVudTo6YWNjRG9EZWZh
dWx0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OnB1dF9h
Y2NOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVQb3B1cE1lbnU6OnB1dF9hY2NW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjSGVs
cFRvcGljKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmg6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZVdpbjo6aGFzQnV0dG9ucyk6IERlbGV0ZWQuCisKIDIwMTUtMDQtMjMgIEVy
aWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgZml4IHRoZSByZWxlYXNlIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDE4MzE5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2
ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51V2luLmgi
CiAKKyNpbmNsdWRlICJCU3RyaW5nLmgiCiAjaW5jbHVkZSAiQml0bWFwSW5mby5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC00Myw2ICs0NCw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVXaW4uaCIKICNp
bmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCiAj
aW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KQEAgLTc0OCw2ICs3NTAsMzIgQEAgSW50UmVj
dCBQb3B1cE1lbnVXaW46OnNjcm9sbGFibGVBcmVhQm91bgogICAgIHJldHVybiBtX3dpbmRvd1Jl
Y3Q7CiB9CiAKK2Jvb2wgUG9wdXBNZW51V2luOjpvbkdldE9iamVjdChXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtLCBMUkVTVUxUJiBsUmVzdWx0KQoreworICAgIGxSZXN1bHQgPSAwOworCisg
ICAgaWYgKHN0YXRpY19jYXN0PExPTkc+KGxQYXJhbSkgIT0gT0JKSURfQ0xJRU5UKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fYWNjZXNzaWJsZVBvcHVwTWVudSkKKyAgICAg
ICAgbV9hY2Nlc3NpYmxlUG9wdXBNZW51ID0gbmV3IEFjY2Vzc2libGVQb3B1cE1lbnUoKnRoaXMp
OworCisgICAgc3RhdGljIEhNT0RVTEUgYWNjZXNzaWJpbGl0eUxpYiA9IG51bGxwdHI7CisgICAg
aWYgKCFhY2Nlc3NpYmlsaXR5TGliKSB7CisgICAgICAgIGlmICghKGFjY2Vzc2liaWxpdHlMaWIg
PSA6OkxvYWRMaWJyYXJ5VyhMIm9sZWFjYy5kbGwiKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgc3RhdGljIExQRk5MUkVTVUxURlJPTU9CSkVDVCBwcm9jUHRyID0g
cmVpbnRlcnByZXRfY2FzdDxMUEZOTFJFU1VMVEZST01PQkpFQ1Q+KDo6R2V0UHJvY0FkZHJlc3Mo
YWNjZXNzaWJpbGl0eUxpYiwgIkxyZXN1bHRGcm9tT2JqZWN0IikpOworICAgIGlmICghcHJvY1B0
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gTHJlc3VsdEZyb21PYmplY3QgcmV0
dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYWNjZXNzaWJsZSBvYmplY3QsIHN0b3JlZAorICAgIC8v
IGluIGFuIExSRVNVTFQuIElmIHRoaXMgY2FsbCBpcyBub3Qgc3VjY2Vzc2Z1bCwgV2luZG93cyB3
aWxsIGhhbmRsZSB0aGUKKyAgICAvLyByZXF1ZXN0IHRocm91Z2ggRGVmV2luZG93UHJvYy4KKyAg
ICByZXR1cm4gU1VDQ0VFREVEKGxSZXN1bHQgPSBwcm9jUHRyKF9fdXVpZG9mKElBY2Nlc3NpYmxl
KSwgd1BhcmFtLCBtX2FjY2Vzc2libGVQb3B1cE1lbnUuZ2V0KCkpKTsKK30KKwogdm9pZCBQb3B1
cE1lbnVXaW46OnJlZ2lzdGVyQ2xhc3MoKQogewogICAgIHN0YXRpYyBib29sIGhhdmVSZWdpc3Rl
cmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKQEAgLTEwNTAsNiArMTA3OCw5IEBAIExSRVNVTFQgUG9w
dXBNZW51V2luOjp3bmRQcm9jKEhXTkQgaFduZCwKICAgICAgICAgY2FzZSBXTV9QUklOVENMSUVO
VDoKICAgICAgICAgICAgIHBhaW50KGNsaWVudFJlY3QoKSwgKEhEQyl3UGFyYW0pOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV01fR0VUT0JKRUNUOgorICAgICAgICAgICAgb25H
ZXRPYmplY3Qod1BhcmFtLCBsUGFyYW0sIGxSZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBsUmVzdWx0ID0gRGVmV2luZG93UHJvYyhoV25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgfQpAQCAtMTA1Nyw0ICsxMDg4LDMxNSBA
QCBMUkVTVUxUIFBvcHVwTWVudVdpbjo6d25kUHJvYyhIV05EIGhXbmQsCiAgICAgcmV0dXJuIGxS
ZXN1bHQ7CiB9CiAKK0FjY2Vzc2libGVQb3B1cE1lbnU6OkFjY2Vzc2libGVQb3B1cE1lbnUoY29u
c3QgUG9wdXBNZW51V2luJiBwb3B1cE1lbnUpCisgICAgOiBtX3JlZkNvdW50KDApCisgICAgLCBt
X3BvcHVwTWVudShwb3B1cE1lbnUpCit7Cit9CisKK0FjY2Vzc2libGVQb3B1cE1lbnU6On5BY2Nl
c3NpYmxlUG9wdXBNZW51KCkKK3sKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpR
dWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgX19SUENfX2RlcmVmX291dCB2b2lkIF9fUlBDX0ZB
UiAqX19SUENfRkFSICpwcHZPYmplY3QpCit7CisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9f
dXVpZG9mKElBY2Nlc3NpYmxlKSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJ
QWNjZXNzaWJsZSo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVp
ZG9mKElEaXNwYXRjaCkpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SUFjY2Vz
c2libGUqPih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJ
VW5rbm93bikpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SUFjY2Vzc2libGUq
Pih0aGlzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IDA7CisgICAgICAgIHJl
dHVybiBFX05PSU5URVJGQUNFOworICAgIH0KKyAgICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworVUxPTkcgQWNjZXNzaWJsZVBvcHVwTWVudTo6QWRkUmVmKCkKK3sKKyAgICByZXR1
cm4gKyttX3JlZkNvdW50OworfQorCitVTE9ORyBBY2Nlc3NpYmxlUG9wdXBNZW51OjpSZWxlYXNl
KCkKK3sKKyAgICBpbnQgcmVmQ291bnQgPSAtLW1fcmVmQ291bnQ7CisgICAgaWYgKCFyZWZDb3Vu
dCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNvdW50OworfQorCitIUkVT
VUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OkdldFR5cGVJbmZvQ291bnQoVUlOVCogY291bnQpCit7
CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51
OjpHZXRUeXBlSW5mbyhVSU5ULCBMQ0lELCBJVHlwZUluZm8qKiBwcFRJbmZvKQoreworICAgIHJl
dHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6R2V0SURz
T2ZOYW1lcyhSRUZJSUQsIExQT0xFU1RSKiwgVUlOVCwgTENJRCwgRElTUElEKikKK3sKKyAgICBy
ZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6Okludm9r
ZShESVNQSUQsIFJFRklJRCwgTENJRCwgV09SRCwgRElTUFBBUkFNUyosIFZBUklBTlQqLCBFWENF
UElORk8qLCBVSU5UKikKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFj
Y2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NQYXJlbnQoSURpc3BhdGNoKiopCit7CisgICAgcmV0
dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNj
Q2hpbGRDb3VudChsb25nKiBjb3VudCkKK3sKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworCisgICAgKmNvdW50ID0gbV9wb3B1cE1lbnUudmlzaWJsZUl0ZW1zKCk7
CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0
X2FjY0NoaWxkKFZBUklBTlQgdkNoaWxkLCBJRGlzcGF0Y2gqKiBwcENoaWxkKQoreworICAgIGlm
ICghcHBDaGlsZCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGlmICh2Q2hpbGQu
dnQgIT0gVlRfSTQpIHsKKyAgICAgICAgKnBwQ2hpbGQgPSBudWxscHRyOworICAgICAgICByZXR1
cm4gRV9JTlZBTElEQVJHOworICAgIH0KKyAgICAqcHBDaGlsZCA9IG51bGxwdHI7CisgICAgcmV0
dXJuIFNfRkFMU0U7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6Z2V0X2FjY05h
bWUoVkFSSUFOVCB2Q2hpbGQsIEJTVFIqIG5hbWUpCit7CisgICAgcmV0dXJuIGdldF9hY2NWYWx1
ZSh2Q2hpbGQsIG5hbWUpOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9h
Y2NWYWx1ZShWQVJJQU5UIHZDaGlsZCwgQlNUUiogdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGlmICh2Q2hpbGQudnQgIT0gVlRfSTQp
CisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisKKyAgICBpbnQgaW5kZXggPSB2Q2hpbGQu
bFZhbCAtIDE7CisKKyAgICBpZiAoaW5kZXggPCAwKQorICAgICAgICByZXR1cm4gRV9JTlZBTElE
QVJHOworCisgICAgQlN0cmluZyBpdGVtVGV4dChtX3BvcHVwTWVudS5jbGllbnQoKS0+aXRlbVRl
eHQoaW5kZXgpKTsKKyAgICAqdmFsdWUgPSBpdGVtVGV4dC5yZWxlYXNlKCk7CisKKyAgICByZXR1
cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjRGVzY3Jp
cHRpb24oVkFSSUFOVCwgQlNUUiopCit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJF
U1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjUm9sZShWQVJJQU5UIHZDaGlsZCwgVkFS
SUFOVCogcHZSb2xlKQoreworICAgIGlmICghcHZSb2xlKQorICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOworCisgICAgaWYgKHZDaGlsZC52dCAhPSBWVF9JNCkKKyAgICAgICAgcmV0dXJuIEVfSU5W
QUxJREFSRzsKKworICAgIC8vIFNjcm9sbGJhciBwYXJ0cyBhcmUgZW5jb2RlZCBhcyBuZWdhdGl2
ZSB2YWx1ZXMuCisgICAgaWYgKHZDaGlsZC5sVmFsIDwgMCkgeworICAgICAgICBWX1ZUKHB2Um9s
ZSkgPSBWVF9JNDsKKyAgICAgICAgVl9JNChwdlJvbGUpID0gUk9MRV9TWVNURU1fU0NST0xMQkFS
OworICAgIH0gZWxzZSB7CisgICAgICAgIFZfVlQocHZSb2xlKSA9IFZUX0k0OworICAgICAgICBW
X0k0KHB2Um9sZSkgPSBST0xFX1NZU1RFTV9MSVNUSVRFTTsKKyAgICB9CisKKyAgICByZXR1cm4g
U19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51OjpnZXRfYWNjU3RhdGUoVkFS
SUFOVCB2Q2hpbGQsIFZBUklBTlQqIHB2U3RhdGUpCit7CisgICAgaWYgKCFwdlN0YXRlKQorICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgaWYgKHZDaGlsZC52dCAhPSBWVF9JNCkKKyAg
ICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKworICAgIFZfVlQocHZTdGF0ZSkgPSBWVF9JNDsK
KyAgICBWX0k0KHB2U3RhdGUpID0gMDsgLy8gU1RBVEVfU1lTVEVNX05PUk1BTAorICAgIAorICAg
IHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NI
ZWxwKFZBUklBTlQgdkNoaWxkLCBCU1RSKiBoZWxwVGV4dCkKK3sKKyAgICByZXR1cm4gRV9OT1RJ
TVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NLZXlib2FyZFNo
b3J0Y3V0KFZBUklBTlQgdkNoaWxkLCBCU1RSKikKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOwor
fQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NGb2N1cyhWQVJJQU5UKiBw
dkZvY3VzZWRDaGlsZCkKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFj
Y2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NTZWxlY3Rpb24oVkFSSUFOVCogcHZTZWxlY3RlZENo
aWxkKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVBv
cHVwTWVudTo6Z2V0X2FjY0RlZmF1bHRBY3Rpb24oVkFSSUFOVCB2Q2hpbGQsIEJTVFIqIGFjdGlv
bkRlc2NyaXB0aW9uKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNj
ZXNzaWJsZVBvcHVwTWVudTo6YWNjU2VsZWN0KGxvbmcgc2VsZWN0aW9uRmxhZ3MsIFZBUklBTlQg
dkNoaWxkKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJs
ZVBvcHVwTWVudTo6YWNjTG9jYXRpb24obG9uZyogbGVmdCwgbG9uZyogdG9wLCBsb25nKiB3aWR0
aCwgbG9uZyogaGVpZ2h0LCBWQVJJQU5UIHZDaGlsZCkKK3sKKyAgICBpZiAoIWxlZnQgfHwgIXRv
cCB8fCAhd2lkdGggfHwgIWhlaWdodCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAg
IGlmICh2Q2hpbGQudnQgIT0gVlRfSTQpCisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisK
KyAgICBjb25zdCBJbnRSZWN0JiB3aW5kb3dSZWN0ID0gbV9wb3B1cE1lbnUud2luZG93UmVjdCgp
OworCisgICAgLy8gU2Nyb2xsYmFyIHBhcnRzIGFyZSBlbmNvZGVkIGFzIG5lZ2F0aXZlIHZhbHVl
cy4KKyAgICBpZiAodkNoaWxkLmxWYWwgPCAwKSB7CisgICAgICAgIGlmICghbV9wb3B1cE1lbnUu
c2Nyb2xsYmFyKCkpCisgICAgICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgICAgIFdlYkNv
cmU6OlNjcm9sbGJhclBhcnQgcGFydCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbGJhclBh
cnQ+KC12Q2hpbGQubFZhbCk7CisKKyAgICAgICAgU2Nyb2xsYmFyVGhlbWVXaW4qIHRoZW1lID0g
c3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVXaW4qPihtX3BvcHVwTWVudS5zY3JvbGxiYXIoKS0+
dGhlbWUoKSk7CisgICAgICAgIGlmICghdGhlbWUpCisgICAgICAgICAgICByZXR1cm4gRV9GQUlM
OworCisgICAgICAgIEludFJlY3QgcGFydFJlY3Q7CisKKyAgICAgICAgc3dpdGNoIChwYXJ0KSB7
CisgICAgICAgIGNhc2UgQmFja1RyYWNrUGFydDoKKyAgICAgICAgY2FzZSBCYWNrQnV0dG9uU3Rh
cnRQYXJ0OgorICAgICAgICAgICAgcGFydFJlY3QgPSB0aGVtZS0+YmFja0J1dHRvblJlY3QobV9w
b3B1cE1lbnUuc2Nyb2xsYmFyKCksIFdlYkNvcmU6OkJhY2tUcmFja1BhcnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGh1bWJQYXJ0OgorICAgICAgICAgICAgcGFydFJlY3Qg
PSB0aGVtZS0+dGh1bWJSZWN0KG1fcG9wdXBNZW51LnNjcm9sbGJhcigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEZvcndhcmRUcmFja1BhcnQ6CisgICAgICAgIGNhc2UgRm9y
d2FyZEJ1dHRvbkVuZFBhcnQ6CisgICAgICAgICAgICBwYXJ0UmVjdCA9IHRoZW1lLT5mb3J3YXJk
QnV0dG9uUmVjdChtX3BvcHVwTWVudS5zY3JvbGxiYXIoKSwgV2ViQ29yZTo6Rm9yd2FyZFRyYWNr
UGFydCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTY3JvbGxiYXJCR1BhcnQ6
CisgICAgICAgICAgICBwYXJ0UmVjdCA9IHRoZW1lLT50cmFja1JlY3QobV9wb3B1cE1lbnUuc2Ny
b2xsYmFyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gRV9GQUlMOworICAgICAgICB9CisKKyAgICAgICAgcGFydFJlY3QubW92ZSh3
aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCkpOworCisgICAgICAgICpsZWZ0ID0gcGFydFJl
Y3QueCgpOworICAgICAgICAqdG9wID0gcGFydFJlY3QueSgpOworICAgICAgICAqd2lkdGggPSBw
YXJ0UmVjdC53aWR0aCgpOworICAgICAgICAqaGVpZ2h0ID0gcGFydFJlY3QuaGVpZ2h0KCk7CisK
KyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgaW50IGluZGV4ID0gdkNoaWxkLmxW
YWwgLSAxOworCisgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFS
RzsKKworICAgICpsZWZ0ID0gd2luZG93UmVjdC54KCk7CisgICAgKnRvcCA9IHdpbmRvd1JlY3Qu
eSgpICsgKGluZGV4IC0gbV9wb3B1cE1lbnUubV9zY3JvbGxPZmZzZXQpICogbV9wb3B1cE1lbnUu
aXRlbUhlaWdodCgpOworICAgICp3aWR0aCA9IHdpbmRvd1JlY3Qud2lkdGgoKTsKKyAgICAqaGVp
Z2h0ID0gbV9wb3B1cE1lbnUuaXRlbUhlaWdodCgpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisK
K0hSRVNVTFQgQWNjZXNzaWJsZVBvcHVwTWVudTo6YWNjTmF2aWdhdGUobG9uZyBkaXJlY3Rpb24s
IFZBUklBTlQgdkZyb21DaGlsZCwgVkFSSUFOVCogcHZOYXZpZ2F0ZWRUbykKK3sKKyAgICByZXR1
cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmFjY0hpdFRl
c3QobG9uZyB4LCBsb25nIHksIFZBUklBTlQqIHB2Q2hpbGRBdFBvaW50KQoreworICAgIGlmICgh
cHZDaGlsZEF0UG9pbnQpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICA6OlZhcmlh
bnRJbml0KHB2Q2hpbGRBdFBvaW50KTsKKworICAgIEludFJlY3Qgd2luZG93UmVjdCA9IG1fcG9w
dXBNZW51LndpbmRvd1JlY3QoKTsKKworICAgIEludFBvaW50IHB0KHggLSB3aW5kb3dSZWN0Lngo
KSwgeSAtIHdpbmRvd1JlY3QueSgpKTsKKworICAgIEludFJlY3Qgc2Nyb2xsUmVjdDsKKworICAg
IGlmIChtX3BvcHVwTWVudS5zY3JvbGxiYXIoKSkKKyAgICAgICAgc2Nyb2xsUmVjdCA9IG1fcG9w
dXBNZW51LnNjcm9sbGJhcigpLT5mcmFtZVJlY3QoKTsKKworICAgIGlmIChtX3BvcHVwTWVudS5z
Y3JvbGxiYXIoKSAmJiBzY3JvbGxSZWN0LmNvbnRhaW5zKHB0KSkgeworICAgICAgICBpZiAoIW1f
cG9wdXBNZW51LnNjcm9sbGJhcigpLT50aGVtZSgpKQorICAgICAgICAgICAgcmV0dXJuIEVfRkFJ
TDsKKworICAgICAgICBwdC5tb3ZlKC1zY3JvbGxSZWN0LngoKSwgLXNjcm9sbFJlY3QueSgpKTsK
KworICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0IHBhcnQgPSBtX3BvcHVwTWVudS5zY3Jv
bGxiYXIoKS0+dGhlbWUoKS0+aGl0VGVzdChtX3BvcHVwTWVudS5zY3JvbGxiYXIoKSwgcHQpOwor
CisgICAgICAgIFZfVlQocHZDaGlsZEF0UG9pbnQpID0gVlRfSTQ7CisgICAgICAgIFZfSTQocHZD
aGlsZEF0UG9pbnQpID0gLXBhcnQ7IC8vIFNjcm9sbGJhciBwYXJ0cyBhcmUgZW5jb2RlZCBhcyBu
ZWdhdGl2ZSwgdG8gYXZvaWQgbWl4dXAgd2l0aCBpdGVtIGluZGV4ZXMuCisgICAgICAgIHJldHVy
biBTX09LOworICAgIH0KKworICAgIGludCBpbmRleCA9IG1fcG9wdXBNZW51Lmxpc3RJbmRleEF0
UG9pbnQocHQpOworCisgICAgaWYgKGluZGV4IDwgMCkgeworICAgICAgICBWX1ZUKHB2Q2hpbGRB
dFBvaW50KSA9IFZUX0VNUFRZOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBW
X1ZUKHB2Q2hpbGRBdFBvaW50KSA9IFZUX0k0OworICAgIFZfSTQocHZDaGlsZEF0UG9pbnQpID0g
aW5kZXggKyAxOyAvLyBDSElMRElEX1NFTEYgaXMgMCwgbmVlZCB0byBhZGQgMS4KKworICAgIHJl
dHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmFjY0RvRGVmYXVs
dEFjdGlvbihWQVJJQU5UIHZDaGlsZCkKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitI
UkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OnB1dF9hY2NOYW1lKFZBUklBTlQsIEJTVFIpCit7
CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlUG9wdXBNZW51
OjpwdXRfYWNjVmFsdWUoVkFSSUFOVCwgQlNUUikKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOwor
fQorCitIUkVTVUxUIEFjY2Vzc2libGVQb3B1cE1lbnU6OmdldF9hY2NIZWxwVG9waWMoQlNUUiog
aGVscEZpbGUsIFZBUklBTlQsIGxvbmcqIHRvcGljSUQpCit7CisgICAgcmV0dXJuIEVfTk9USU1Q
TDsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVX
aW4uaAkocmV2aXNpb24gMTgzMTk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bv
cHVwTWVudVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsMTMgQEAKICNpZm5kZWYg
UG9wdXBNZW51V2luX2gKICNkZWZpbmUgUG9wdXBNZW51V2luX2gKIAorI2luY2x1ZGUgIkNPTVB0
ci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQb3B1cE1lbnUuaCIKICNpbmNs
dWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgPE9sZUFjYy5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CkBAIC0zNSw2ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RnJhbWVWaWV3OwogY2xhc3MgU2Nyb2xsYmFyOworY2xhc3MgQWNjZXNzaWJsZVBvcHVwTWVudTsK
IAogY2xhc3MgUG9wdXBNZW51V2luIDogcHVibGljIFBvcHVwTWVudSwgcHJpdmF0ZSBTY3JvbGxh
YmxlQXJlYSB7CiBwdWJsaWM6CkBAIC0xMTIsNiArMTE1LDggQEAgcHJpdmF0ZToKICAgICB2b2lk
IGNhbGN1bGF0ZVBvc2l0aW9uQW5kU2l6ZShjb25zdCBJbnRSZWN0JiwgRnJhbWVWaWV3Kik7CiAg
ICAgdm9pZCBpbnZhbGlkYXRlSXRlbShpbnQgaW5kZXgpOwogCisgICAgYm9vbCBvbkdldE9iamVj
dChXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBMUkVTVUxUJiBsUmVzdWx0KTsKKwogICAg
IHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFBvcHVwTWVudVduZFByb2MoSFdORCwgVUlOVCwgV1BB
UkFNLCBMUEFSQU0pOwogICAgIExSRVNVTFQgd25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2Fn
ZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0
ZXJDbGFzcygpOwpAQCAtMTMwLDYgKzEzNSw1MyBAQCBwcml2YXRlOgogICAgIGludCBtX2hvdmVy
ZWRJbmRleDsKICAgICBib29sIG1fc2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2U7CiAgICAgYm9vbCBt
X3Nob3dQb3B1cDsKKyAgICBDT01QdHI8SUFjY2Vzc2libGU+IG1fYWNjZXNzaWJsZVBvcHVwTWVu
dTsKKworICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NpYmxlUG9wdXBNZW51OworfTsKKworY2xhc3Mg
QWNjZXNzaWJsZVBvcHVwTWVudSA6IHB1YmxpYyBJQWNjZXNzaWJsZSB7CitwdWJsaWM6CisgICAg
QWNjZXNzaWJsZVBvcHVwTWVudShjb25zdCBQb3B1cE1lbnVXaW4mKTsKKyAgICB+QWNjZXNzaWJs
ZVBvcHVwTWVudSgpOworCisgICAgLy8gSVVua25vd24KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIF9fUlBDX19kZXJlZl9v
dXQgdm9pZCBfX1JQQ19GQVIgKl9fUlBDX0ZBUiAqcHB2T2JqZWN0KTsKKyAgICB2aXJ0dWFsIFVM
T05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVU
SE9EQ0FMTFRZUEUgUmVsZWFzZSgpOworCisgICAgLy8gSURpc3BhdGNoIC0gTm90IHRvIGJlIGlt
cGxlbWVudGVkLgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRUeXBl
SW5mb0NvdW50KFVJTlQqIGNvdW50KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgR2V0VHlwZUluZm8oVUlOVCwgTENJRCwgSVR5cGVJbmZvKiogcHBUSW5mbyk7CisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldElEc09mTmFtZXMoUkVGSUlELCBM
UE9MRVNUUiosIFVJTlQsIExDSUQsIERJU1BJRCopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBJbnZva2UoRElTUElELCBSRUZJSUQsIExDSUQsIFdPUkQsIERJU1BQQVJB
TVMqLCBWQVJJQU5UKiwgRVhDRVBJTkZPKiwgVUlOVCopOworCisgICAgLy8gSUFjY2Vzc2libGUK
KyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2FjY1BhcmVudChJRGlz
cGF0Y2gqKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hY2ND
aGlsZENvdW50KGxvbmcqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
Z2V0X2FjY0NoaWxkKFZBUklBTlQgdkNoaWxkLCBJRGlzcGF0Y2gqKiBwcENoaWxkKTsKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2FjY05hbWUoVkFSSUFOVCB2Q2hp
bGQsIEJTVFIqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2Fj
Y1ZhbHVlKFZBUklBTlQgdkNoaWxkLCBCU1RSKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIGdldF9hY2NEZXNjcmlwdGlvbihWQVJJQU5ULCBCU1RSKik7CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hY2NSb2xlKFZBUklBTlQgdkNoaWxk
LCBWQVJJQU5UKiBwdlJvbGUpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBnZXRfYWNjU3RhdGUoVkFSSUFOVCB2Q2hpbGQsIFZBUklBTlQqIHB2U3RhdGUpOworICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfYWNjSGVscChWQVJJQU5UIHZDaGls
ZCwgQlNUUiogaGVscFRleHQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBnZXRfYWNjS2V5Ym9hcmRTaG9ydGN1dChWQVJJQU5UIHZDaGlsZCwgQlNUUiopOworICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfYWNjRm9jdXMoVkFSSUFOVCogcHZG
b2N1c2VkQ2hpbGQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRf
YWNjU2VsZWN0aW9uKFZBUklBTlQqIHB2U2VsZWN0ZWRDaGlsZCk7CisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hY2NEZWZhdWx0QWN0aW9uKFZBUklBTlQgdkNoaWxk
LCBCU1RSKiBhY3Rpb25EZXNjcmlwdGlvbik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIGFjY1NlbGVjdChsb25nIHNlbGVjdGlvbkZsYWdzLCBWQVJJQU5UIHZDaGlsZCk7
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGFjY0xvY2F0aW9uKGxvbmcq
IGxlZnQsIGxvbmcqIHRvcCwgbG9uZyogd2lkdGgsIGxvbmcqIGhlaWdodCwgVkFSSUFOVCB2Q2hp
bGQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBhY2NOYXZpZ2F0ZShs
b25nIGRpcmVjdGlvbiwgVkFSSUFOVCB2RnJvbUNoaWxkLCBWQVJJQU5UKiBwdk5hdmlnYXRlZFRv
KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgYWNjSGl0VGVzdChsb25n
IHgsIGxvbmcgeSwgVkFSSUFOVCogcHZDaGlsZEF0UG9pbnQpOworICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBhY2NEb0RlZmF1bHRBY3Rpb24oVkFSSUFOVCB2Q2hpbGQpOwor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwdXRfYWNjTmFtZShWQVJJQU5U
LCBCU1RSKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcHV0X2FjY1Zh
bHVlKFZBUklBTlQsIEJTVFIpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBnZXRfYWNjSGVscFRvcGljKEJTVFIqIGhlbHBGaWxlLCBWQVJJQU5ULCBsb25nKiB0b3BpY0lE
KTsKKworcHJpdmF0ZToKKyAgICBpbnQgbV9yZWZDb3VudDsKKyAgICBjb25zdCBQb3B1cE1lbnVX
aW4mIG1fcG9wdXBNZW51OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmgJKHJldmlz
aW9uIDE4MzE5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVt
ZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyNyArMzUsMjcgQEAgcHVibGljOgogICAgIFNj
cm9sbGJhclRoZW1lV2luKCk7CiAgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVXaW4oKTsKIAot
ICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSA9
IFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFy
Q29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwg
dm9pZCB0aGVtZUNoYW5nZWQoKTsKKyAgICB2b2lkIHRoZW1lQ2hhbmdlZCgpIG92ZXJyaWRlOwog
ICAgIAotICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhpdCgpOworICAg
IGJvb2wgaW52YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQoKSBvdmVycmlkZTsKKworICAgIEludFJl
Y3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBi
b29sIHBhaW50aW5nID0gZmFsc2UpIG92ZXJyaWRlOworICAgIEludFJlY3QgZm9yd2FyZEJ1dHRv
blJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5n
ID0gZmFsc2UpIG92ZXJyaWRlOworICAgIEludFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhclRoZW1l
Q2xpZW50KiwgYm9vbCBwYWludGluZyA9IGZhbHNlKSBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50KikgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVu
dCopOworICAgIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopIG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50
Kikgb3ZlcnJpZGU7CisKKyAgICBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICBib29s
IHNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgYmFj
a0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBh
aW50aW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxz
ZSk7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHRyYWNrUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCos
IGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVy
T25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYp
OwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbihTY3JvbGxiYXJU
aGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwotCi0gICAgdmlydHVhbCB2
b2lkIHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1l
Q2xpZW50KiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrUGll
Y2UoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0
JiwgU2Nyb2xsYmFyUGFydCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNz
Q29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJh
clBhcnQpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNj
cm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgcGFpbnRUcmFj
a0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludFRyYWNrUGllY2UoR3JhcGhpY3ND
b250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFy
UGFydCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqLCBT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KSBvdmVy
cmlkZTsKKyAgICB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiB9OwogCiB9Cg==
</data>
<flag name="review"
          id="276268"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>