<?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>40004</bug_id>
          
          <creation_ts>2010-06-01 09:52:04 -0700</creation_ts>
          <short_desc>[Qt] Support for loading notification icons</short_desc>
          <delta_ts>2010-08-03 08:31:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>40003</dependson>
    
    <dependson>40396</dependson>
          <blocked>39995</blocked>
    
    <blocked>40005</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yael">yael</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hausmann</cc>
    
    <cc>johnnyg</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>232788</commentid>
    <comment_count>0</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-01 09:52:04 -0700</bug_when>
    <thetext>Add an icon loader to load the icon for the notification.
A patch is ready but it depends heavily on the patch at bug #40003, so it will not apply until that patch is committed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233861</commentid>
    <comment_count>1</comment_count>
      <attachid>57798</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-06-03 12:06:54 -0700</bug_when>
    <thetext>Created attachment 57798
Patch

If the icon url exists, create a ThreadableLoader to handle loading the icon, and keep the notification in a load queue.
Once the icon is loaded, or an error occurred, move the notification to the active queue and continue handling as before.

Added some more lookup logic for the second queue. If reviewers prefer, I will create a template for that logic, to reduce the amount of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233864</commentid>
    <comment_count>2</comment_count>
      <attachid>57801</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-06-03 12:10:36 -0700</bug_when>
    <thetext>Created attachment 57801
Patch

Previous patch contained an unrelated change. Sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233866</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-03 12:12:43 -0700</bug_when>
    <thetext>Attachment 57801 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/qt/WebCoreSupport/NotificationIconLoader.h:35:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
WebKit/qt/WebCoreSupport/NotificationIconLoader.h:41:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 7 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>233871</commentid>
    <comment_count>4</comment_count>
      <attachid>57803</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-06-03 12:30:32 -0700</bug_when>
    <thetext>Created attachment 57803
Fix style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233889</commentid>
    <comment_count>5</comment_count>
      <attachid>57803</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-03 13:08:59 -0700</bug_when>
    <thetext>Comment on attachment 57803
Fix style issues.

Looks good to me, thought I probably need some more time to fully understand the code.

Is Chrome doing this the name way? or what are the differences?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233980</commentid>
    <comment_count>6</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-03 16:30:22 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 57803 [details])
&gt; Looks good to me, thought I probably need some more time to fully understand the code.
&gt; 
&gt; Is Chrome doing this the name way? or what are the differences?

Thank you for taking the time to look at this.
Chrome&apos;s approach is very different than mine. They wrap the Notification object with a WebNotification object, and call the UI to handle it. They keep their queue outside of WebKit.
I was asked that notifications will work &quot;out of the box&quot; in QtWebKit, so I could not use the same approach.

Also, Chrome was not deleting the Notification objects until r60569 which caused an unfortunate regression (r60590), so I think they have some more work to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234629</commentid>
    <comment_count>7</comment_count>
      <attachid>57803</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-05 12:27:56 -0700</bug_when>
    <thetext>Comment on attachment 57803
Fix style issues.

WebKit/qt/WebCoreSupport/NotificationIconLoader.cpp:44
 +  NotificationIconLoader::NotificationIconLoader(NotificationPresenterClientQt* presenter, ScriptExecutionContext* context, const KURL&amp; url)
It this NotificationIconLoader supposed to be Qt only? Currently it seems that way as it received a *ClientQt. Should it be renamed to QtNotificationIconLoader or is it possible to make it take a NotificationPresenterClient instead?

WebKit/qt/WebCoreSupport/NotificationIconLoader.cpp:75
 +      m_data += QByteArray(data, lengthReceived);
Seems a bit Qt&apos;ish so far :-)

WebKit/qt/WebCoreSupport/NotificationIconLoader.cpp:83
 +  void NotificationIconLoader::didFail(const ResourceError&amp;)
Shouldn&apos;t you handle the error somehow?

 103     if (notification-&gt;iconURL().isEmpty())
 104         displayNotification(notification, QByteArray());
 105     else
 106         startLoadNotificationIcon(notification);

It would seem more logical to do this the other way around

if (has icon)
   load it


WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:296
 +  void NotificationPresenterClientQt::removeReplacedNotificationFromLoadQueue(Notification* notification)
Why isnt it removed when being replaced?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234927</commentid>
    <comment_count>8</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-07 10:48:07 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 57803 [details])
&gt; WebKit/qt/WebCoreSupport/NotificationIconLoader.cpp:44
&gt;  +  NotificationIconLoader::NotificationIconLoader(NotificationPresenterClientQt* presenter, ScriptExecutionContext* context, const KURL&amp; url)
&gt; It this NotificationIconLoader supposed to be Qt only? Currently it seems that way as it received a *ClientQt. Should it be renamed to QtNotificationIconLoader or is it possible to make it take a NotificationPresenterClient instead?
&gt; 

The design in Chrome is very different than our design. They simply wrap the Notification object with a WebNotification, and pass it to the client. I suggested to make the icon loader cross platform, but John Greg told me that if I do that, Chrome would not use it.

&gt; WebKit/qt/WebCoreSupport/NotificationIconLoader.cpp:75
&gt;  +      m_data += QByteArray(data, lengthReceived);
&gt; Seems a bit Qt&apos;ish so far :-)
&gt; 
This class is for Qt port only. I always wonder if I should use WebCore types or Qt types for code that lives in WebKit/Qt ?

&gt; WebKit/qt/WebCoreSupport/NotificationIconLoader.cpp:83
&gt;  +  void NotificationIconLoader::didFail(const ResourceError&amp;)
&gt; Shouldn&apos;t you handle the error somehow?
&gt; 
When loading fails for whatever reason, I cleanup the loader and display the notification without an icon. 
Can you suggest a better way to handle the error?

&gt; 103     if (notification-&gt;iconURL().isEmpty())
&gt; 104         displayNotification(notification, QByteArray());
&gt; 105     else
&gt; 106         startLoadNotificationIcon(notification);
ok.

&gt; WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:296
&gt;  +  void NotificationPresenterClientQt::removeReplacedNotificationFromLoadQueue(Notification* notification)
&gt; Why isnt it removed when being replaced?

&quot;Replaced&quot; is a name of a property :-)
The idea is to find another notification that has the same &quot;Replaced&quot; property and replace the old one with the new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234943</commentid>
    <comment_count>9</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-07 11:20:53 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
NotificationPresenterClientQt::removeReplacedNotificationFromLoadQueue(Notification* notification)
&gt; &gt; Why isnt it removed when being replaced?
&gt; 
&gt; &quot;Replaced&quot; is a name of a property :-)
&gt; The idea is to find another notification that has the same &quot;Replaced&quot; property and replace the old one with the new one.

To be more specific: 
If the &quot;old&quot; notification, that has the same &quot;Replaced&quot; attribute is in the load queue, we cancel its load and remove it.
If the &quot;old&quot; notification is currently showing, and is in the active notifications queue, we first download the new icon, and then we replace the notification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234999</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-07 12:29:32 -0700</bug_when>
    <thetext>
&gt; The design in Chrome is very different than our design. They simply wrap the Notification object with a WebNotification, and pass it to the client. I suggested to make the icon loader cross platform, but John Greg told me that if I do that, Chrome would not use it.

What about the other ports? Have you talked to the Gtk guys?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235293</commentid>
    <comment_count>11</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-08 09:57:59 -0700</bug_when>
    <thetext>I can think of 2 ways of implementing an icon loader in cross platform code.
1. Notification object could inherit ThreadableLoaderClient, and handle the download itself, the same way as XMLHttpRequest does.
2. Create a NotificationPresenterProxy class to handle the download. This new class will also implement the interface NotificationPresenter, and will proxy between the NotificationCenter and the platform specific NotificationPresenter.

Advantage of first solution is that it will encapsulate all Notification logic in the Notification object itself.
Advantage of the second solution is that it does not require #ifdef in the code. Ports that don&apos;t want to download icons in cross platform code, don&apos;t use the NotificationPresenterProxy.

Any opinions on which way to go?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235496</commentid>
    <comment_count>12</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-06-08 13:45:30 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; The design in Chrome is very different than our design. They simply wrap the Notification object with a WebNotification, and pass it to the client. I suggested to make the icon loader cross platform, but John Greg told me that if I do that, Chrome would not use it.
&gt; 
&gt; What about the other ports? Have you talked to the Gtk guys?

I do not see a problem keeping the implementation specific to Qt initially. As Yael mentioned for technical reasons it would be difficult to share much code with Chrome, which is the only other ports at the moment that supports notifications. 

If other ports come along (e.g. Gtk) we can certainly move the implementation cross-platform, but at the moment QtWebKit is the only port where this patch can be really tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235503</commentid>
    <comment_count>13</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-06-08 13:49:36 -0700</bug_when>
    <thetext>I would support putting the icon loading code in Notification rather than creating the PresenterProxy.  Chrome may not use it in the current implementation, but could still have reasons to use it in the future, and it seems like the better cross-platform design in general.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236485</commentid>
    <comment_count>14</comment_count>
      <attachid>58402</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-06-10 12:34:05 -0700</bug_when>
    <thetext>Created attachment 58402
Patch

Take into use the icon downloading from r60960.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236575</commentid>
    <comment_count>15</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-10 16:08:59 -0700</bug_when>
    <thetext>Committed r60981: &lt;http://trac.webkit.org/changeset/60981&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259463</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-08-03 08:31:12 -0700</bug_when>
    <thetext>Revision r60981 cherry-picked into qtwebkit-2.1 with commit 18e3033811c283d0fa84ca78a828056cdbe35e6b</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57798</attachid>
            <date>2010-06-03 12:06:54 -0700</date>
            <delta_ts>2010-06-03 12:10:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>40004.patch</filename>
            <type>text/plain</type>
            <size>20624</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMDMgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gU3VwcG9ydCBmb3IgbG9hZGluZyBub3RpZmljYXRpb24gaWNvbnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDA0CisKKyAgICAgICAgQWRk
ZWQgdGhlIE5vdGlmaWNhdGlvbkljb25Mb2FkZXIgZmlsZXMgdG8gV2ViQ29yZS5wcm8uCisKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKwogMjAxMC0wNi0wMyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQu
cmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjYwNjE0LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTIwNjUsNiArMjA2NSw3IEBAIEhFQURFUlMgKz0gXAogICAgICQkUFdE
Ly4uL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlX3AuaCBcCiAgICAgJCRQV0QvLi4v
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5oIFwKICAgICAkJFBX
RC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oIFwKKyAg
ICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRl
ci5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQuaCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUXRQbGF0Zm9ybVBsdWdpbi5oIFwKQEAgLTIxNTUsNiArMjE1Niw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0Q29tbWFuZFF0LmNwcCBcCiAg
ICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIFwK
ICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwIFwK
KyAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5j
cHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50
ZXJDbGllbnRRdC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBs
dWdpbi5jcHAgXApJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNi0wMyAgWWFlbCBBaGFyb24g
IDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW1F0XSBTdXBwb3J0IGZvciBsb2FkaW5nIG5vdGlmaWNhdGlvbiBp
Y29ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAw
MDQKKworICAgICAgICBJZiB0aGUgaWNvbiB1cmwgZXhpc3RzLCBjcmVhdGUgYSBUaHJlYWRhYmxl
TG9hZGVyIHRvIGhhbmRsZSBsb2FkaW5nIHRoZSBpY29uLAorICAgICAgICBhbmQga2VlcCB0aGUg
bm90aWZpY2F0aW9uIGluIGEgbG9hZCBxdWV1ZS4KKyAgICAgICAgT25jZSB0aGUgaWNvbiBpcyBs
b2FkZWQsIG9yIGFuIGVycm9yIG9jY3VycmVkLCBtb3ZlIHRoZSBub3RpZmljYXRpb24gdG8gdGhl
CisgICAgICAgIGFjdGl2ZSBxdWV1ZSBhbmQgY29udGludWUgaGFuZGxpbmcgYXMgYmVmb3JlLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uSWNvbkxvYWRlcjo6Tm90aWZpY2F0
aW9uSWNvbkxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25JY29uTG9hZGVy
Ojp+Tm90aWZpY2F0aW9uSWNvbkxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRp
b25JY29uTG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRp
b25JY29uTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uSWNvbkxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Tm90aWZpY2F0aW9uSWNvbkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpOb3RpZmljYXRpb25JY29uTG9hZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZEZhaWxSZWRpcmVjdENoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNhbmNlbGxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25JY29uTG9hZGVy
OjpmaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25J
Y29uTG9hZGVyLmg6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbklj
b25XcmFwcGVyOjpOb3RpZmljYXRpb25JY29uV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6ZGlzcGxheU5vdGlmaWNhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2FuY2VsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRp
b25PYmplY3REZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvbkljb25Mb2FkRmluaXNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnN0YXJ0TG9hZE5vdGlmaWNhdGlv
bkljb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6
OnJlbW92ZVJlcGxhY2VkTm90aWZpY2F0aW9uRnJvbUxvYWRRdWV1ZSk6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaDoKKwogMjAxMC0wNi0w
MyAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTGFzemxvIEdvbWJvcy4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25JY29uTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk5vdGlmaWNhdGlvbkljb25Mb2FkZXIuaCIKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05T
KQorCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5j
bHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05vdGlm
aWNhdGlvbkljb25Mb2FkZXI6Ok5vdGlmaWNhdGlvbkljb25Mb2FkZXIoTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQqIHByZXNlbnRlciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgS1VSTCYgdXJsKQorICAgIDogbV9wcmVzZW50ZXIocHJlc2VudGVyKQoreworICAg
IFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5zZW5kTG9hZENh
bGxiYWNrcyA9IGZhbHNlOworICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CisgICAg
b3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOworICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50
aWFscyA9IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgb3B0aW9ucy5jcm9zc09yaWdpblJl
cXVlc3RQb2xpY3kgPSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHM7CisgICAgbV9sb2FkZXIgPSBU
aHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoY29udGV4dCwgdGhpcywgUmVzb3VyY2VSZXF1ZXN0KHVy
bCksIG9wdGlvbnMpOworfQorCitOb3RpZmljYXRpb25JY29uTG9hZGVyOjp+Tm90aWZpY2F0aW9u
SWNvbkxvYWRlcigpCit7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uSWNvbkxvYWRlcjo6c3RvcExv
YWRpbmcoKQoreworICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBwcm90ZWN0KG1fbG9hZGVy
KTsKKyAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uSWNvbkxv
YWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIGludCBzdGF0dXMgPSByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpOworICAgIGlm
IChzdGF0dXMgJiYgKHN0YXR1cyA8IDIwMCB8fCBzdGF0dXMgPiAyOTkpKQorICAgICAgICBzdG9w
TG9hZGluZygpOworfQorCit2b2lkIE5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEg
Kz0gUUJ5dGVBcnJheShkYXRhLCBsZW5ndGhSZWNlaXZlZCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0
aW9uSWNvbkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQoreworICAgIGZp
bmlzaExvYWRpbmcoKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25JY29uTG9hZGVyOjpkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIGZpbmlzaExvYWRpbmcoKTsKK30KKwordm9p
ZCBOb3RpZmljYXRpb25JY29uTG9hZGVyOjpkaWRGYWlsUmVkaXJlY3RDaGVjaygpCit7CisgICAg
ZmluaXNoTG9hZGluZygpOworfQorCit2b2lkIE5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikK
K3sKKyAgICBmaW5pc2hMb2FkaW5nKCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uSWNvbkxvYWRl
cjo6ZmluaXNoTG9hZGluZygpCit7CisgICAgbV9wcmVzZW50ZXItPm5vdGlmaWNhdGlvbkljb25M
b2FkRmluaXNoZWQodGhpcywgbV9kYXRhKTsKKyAgICBkZWxldGUgdGhpczsKK30KKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25JY29uTG9hZGVyLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOb3RpZmljYXRpb25JY29u
TG9hZGVyX2gKKyNkZWZpbmUgTm90aWZpY2F0aW9uSWNvbkxvYWRlcl9oCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAi
VGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEtVUkw7CitjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIE5vdGlmaWNhdGlvbkljb25Mb2FkZXIgOiBwdWJs
aWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CitwdWJsaWM6CisgICAgTm90aWZpY2F0aW9uSWNv
bkxvYWRlcihOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCosIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBLVVJMJik7CisgICAgfk5vdGlmaWNhdGlvbkljb25Mb2FkZXIoKTsKKwor
ICAgIHZvaWQgc3RvcExvYWRpbmcoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAg
dmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworCitw
cml2YXRlOgorICAgIHZvaWQgZmluaXNoTG9hZGluZygpOworICAgIE5vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0KiBtX3ByZXNlbnRlcjsKKyAgICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4g
bV9sb2FkZXI7CisgICAgUUJ5dGVBcnJheSBtX2RhdGE7Cit9OworfQorCisjZW5kaWYKKyNlbmRp
ZgpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAgTm90aWZpY2F0aW9uSWNvbldyYXBwZXI6Ok5vdGlm
aWNhdGlvbkljbwogI2lmbmRlZiBRVF9OT19TWVNURU1UUkFZSUNPTgogICAgIG1fbm90aWZpY2F0
aW9uSWNvbiA9IDA7CiAjZW5kaWYKLSAgICBtX2Nsb3NlVGltZXIuc3RhcnRPbmVTaG90KG5vdGlm
aWNhdGlvblRpbWVvdXQpOwogfQogCiBOb3RpZmljYXRpb25JY29uV3JhcHBlcjo6fk5vdGlmaWNh
dGlvbkljb25XcmFwcGVyKCkKQEAgLTk3LDE3ICs5NiwyMSBAQCBib29sIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpzaG93CiAgICAgaWYgKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5pc1dvcmtlckNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIG5vdGlmaWNhdGlvbi0+c2V0UGVuZGluZ0FjdGl2aXR5KG5vdGlmaWNhdGlvbik7Ci0gICAg
aWYgKCFub3RpZmljYXRpb24tPnJlcGxhY2VJZCgpLmlzRW1wdHkoKSkgewotICAgICAgICByZW1v
dmVSZXBsYWNlZE5vdGlmaWNhdGlvbkZyb21RdWV1ZShub3RpZmljYXRpb24pOwotICAgIH0KKyAg
ICBpZiAoIW5vdGlmaWNhdGlvbi0+cmVwbGFjZUlkKCkuaXNFbXB0eSgpKQorICAgICAgICByZW1v
dmVSZXBsYWNlZE5vdGlmaWNhdGlvbkZyb21Mb2FkUXVldWUobm90aWZpY2F0aW9uKTsKICAgICBp
ZiAoZHVtcE5vdGlmaWNhdGlvbikKICAgICAgICAgZHVtcFNob3dUZXh0KG5vdGlmaWNhdGlvbik7
Ci0gICAgZGlzcGxheU5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIFFCeXRlQXJyYXkoKSk7Cisg
ICAgaWYgKG5vdGlmaWNhdGlvbi0+aWNvblVSTCgpLmlzRW1wdHkoKSkKKyAgICAgICAgZGlzcGxh
eU5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIFFCeXRlQXJyYXkoKSk7CisgICAgZWxzZQorICAg
ICAgICBzdGFydExvYWROb3RpZmljYXRpb25JY29uKG5vdGlmaWNhdGlvbik7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmRpc3BsYXlO
b3RpZmljYXRpb24oTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIGNvbnN0IFFCeXRlQXJyYXkm
IGJ5dGVzKQogeworICAgIGlmICghbm90aWZpY2F0aW9uLT5yZXBsYWNlSWQoKS5pc0VtcHR5KCkp
CisgICAgICAgIHJlbW92ZVJlcGxhY2VkTm90aWZpY2F0aW9uRnJvbVF1ZXVlKG5vdGlmaWNhdGlv
bik7CiAgICAgTm90aWZpY2F0aW9uSWNvbldyYXBwZXIqIHdyYXBwZXIgPSBuZXcgTm90aWZpY2F0
aW9uSWNvbldyYXBwZXIoKTsKICAgICBtX25vdGlmaWNhdGlvbnMuaW5zZXJ0KG5vdGlmaWNhdGlv
biwgd3JhcHBlcik7CiAgICAgUVN0cmluZyB0aXRsZTsKQEAgLTEyMSw2ICsxMjQsNyBAQCB2b2lk
IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkaXNwCiAgICAgfQogCiAjaWZuZGVmIFFU
X05PX1NZU1RFTVRSQVlJQ09OCisgICAgd3JhcHBlci0+bV9jbG9zZVRpbWVyLnN0YXJ0T25lU2hv
dChub3RpZmljYXRpb25UaW1lb3V0KTsKICAgICBRUGl4bWFwIHBpeG1hcDsKICAgICBpZiAoYnl0
ZXMubGVuZ3RoKCkgJiYgcGl4bWFwLmxvYWRGcm9tRGF0YShieXRlcykpIHsKICAgICAgICAgUUlj
b24gaWNvbihwaXhtYXApOwpAQCAtMTU1LDYgKzE1OSwxNCBAQCB2b2lkIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpjYW5jCiAgICAgICAgIHNlbmRFdmVudChub3RpZmljYXRpb24sIGV2
ZW50TmFtZXMoKS5jbG9zZUV2ZW50KTsKICAgICAgICAgZGVsZXRlIG1fbm90aWZpY2F0aW9ucy50
YWtlKG5vdGlmaWNhdGlvbik7CiAgICAgICAgIG5vdGlmaWNhdGlvbi0+dW5zZXRQZW5kaW5nQWN0
aXZpdHkobm90aWZpY2F0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgICBOb3RpZmljYXRpb25z
TG9hZFF1ZXVlOjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zTG9hZFF1ZXVlLmZpbmQo
bm90aWZpY2F0aW9uKTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gbV9ub3RpZmljYXRpb25zTG9hZFF1
ZXVlLmVuZCgpKSB7CisgICAgICAgICAgICBzZW5kRXZlbnQobm90aWZpY2F0aW9uLCBldmVudE5h
bWVzKCkuY2xvc2VFdmVudCk7CisgICAgICAgICAgICBOb3RpZmljYXRpb25JY29uTG9hZGVyKiBs
b2FkZXIgPSBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWUudGFrZShub3RpZmljYXRpb24pOworICAg
ICAgICAgICAgbG9hZGVyLT5zdG9wTG9hZGluZygpOworICAgICAgICAgICAgbm90aWZpY2F0aW9u
LT51bnNldFBlbmRpbmdBY3Rpdml0eShub3RpZmljYXRpb24pOworICAgICAgICB9CiAgICAgfQog
fQogCkBAIC0xNzQsNiArMTg2LDEzIEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50
UXQ6Om5vdGkKICAgICBOb3RpZmljYXRpb25zUXVldWU6Okl0ZXJhdG9yIGl0ZXIgPSBtX25vdGlm
aWNhdGlvbnMuZmluZChub3RpZmljYXRpb24pOwogICAgIGlmIChpdGVyICE9IG1fbm90aWZpY2F0
aW9ucy5lbmQoKSkKICAgICAgICAgZGVsZXRlIG1fbm90aWZpY2F0aW9ucy50YWtlKG5vdGlmaWNh
dGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIE5vdGlmaWNhdGlvbnNMb2FkUXVldWU6Okl0ZXJh
dG9yIGl0ZXIgPSBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWUuZmluZChub3RpZmljYXRpb24pOwor
ICAgICAgICBpZiAoaXRlciAhPSBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWUuZW5kKCkpIHsKKyAg
ICAgICAgICAgIE5vdGlmaWNhdGlvbkljb25Mb2FkZXIqIGxvYWRlciA9IG1fbm90aWZpY2F0aW9u
c0xvYWRRdWV1ZS50YWtlKG5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICBsb2FkZXItPnN0b3BM
b2FkaW5nKCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6OnJlcXVlc3RQZXJtaXNzaW9uKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBh
c3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBjYWxsYmFjaykKQEAgLTIyNCwxMiArMjQzLDMyIEBAIHZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmFsbG8KICAgICB9CiB9CiAKK3ZvaWQg
Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvbkljb25Mb2FkRmluaXNo
ZWQoTm90aWZpY2F0aW9uSWNvbkxvYWRlciogbG9hZGVyLCBjb25zdCBRQnl0ZUFycmF5JiBieXRl
cykKK3sKKyAgICBOb3RpZmljYXRpb25zTG9hZFF1ZXVlOjpJdGVyYXRvciBlbmQgPSBtX25vdGlm
aWNhdGlvbnNMb2FkUXVldWUuZW5kKCk7CisgICAgTm90aWZpY2F0aW9uc0xvYWRRdWV1ZTo6SXRl
cmF0b3IgaXRlciA9IG1fbm90aWZpY2F0aW9uc0xvYWRRdWV1ZS5iZWdpbigpOworICAgIHdoaWxl
IChpdGVyICE9IGVuZCkgeworICAgICAgICBpZiAoaXRlci52YWx1ZSgpID09IGxvYWRlcikgewor
ICAgICAgICAgICAgbV9ub3RpZmljYXRpb25zTG9hZFF1ZXVlLnRha2UoaXRlci5rZXkoKSk7Cisg
ICAgICAgICAgICBkaXNwbGF5Tm90aWZpY2F0aW9uKGl0ZXIua2V5KCksIGJ5dGVzKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGl0ZXIrKzsKKyAgICB9Cit9CisKIHZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnNlbmRFdmVudChOb3RpZmljYXRpb24q
IG5vdGlmaWNhdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgaWYg
KG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICBub3RpZmlj
YXRpb24tPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCB0cnVl
KSk7CiB9CiAKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnN0YXJ0TG9hZE5v
dGlmaWNhdGlvbkljb24oTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCit7CisgICAgTm90aWZp
Y2F0aW9uSWNvbkxvYWRlciogbG9hZGVyID0gbmV3IE5vdGlmaWNhdGlvbkljb25Mb2FkZXIodGhp
cywgbm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG5vdGlmaWNhdGlvbi0+
aWNvblVSTCgpKTsKKyAgICBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWUuaW5zZXJ0KG5vdGlmaWNh
dGlvbiwgbG9hZGVyKTsKK30KKwogdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6
cmVtb3ZlUmVwbGFjZWROb3RpZmljYXRpb25Gcm9tUXVldWUoTm90aWZpY2F0aW9uKiBub3RpZmlj
YXRpb24pCiB7CiAgICAgTm90aWZpY2F0aW9uKiBvbGROb3RpZmljYXRpb24gPSAwOwpAQCAtMjU0
LDYgKzI5MywzMSBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpyZW1vCiAg
ICAgfQogfQogCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpyZW1vdmVSZXBs
YWNlZE5vdGlmaWNhdGlvbkZyb21Mb2FkUXVldWUoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24p
Cit7CisgICAgTm90aWZpY2F0aW9uKiBvbGROb3RpZmljYXRpb24gPSAwOworICAgIE5vdGlmaWNh
dGlvbnNMb2FkUXVldWU6Okl0ZXJhdG9yIGVuZCA9IG1fbm90aWZpY2F0aW9uc0xvYWRRdWV1ZS5l
bmQoKTsKKyAgICBOb3RpZmljYXRpb25zTG9hZFF1ZXVlOjpJdGVyYXRvciBpdGVyID0gbV9ub3Rp
ZmljYXRpb25zTG9hZFF1ZXVlLmJlZ2luKCk7CisKKyAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsK
KyAgICAgICAgTm90aWZpY2F0aW9uKiBleGlzdGluZ05vdGlmaWNhdGlvbiA9IGl0ZXIua2V5KCk7
CisgICAgICAgIGlmIChleGlzdGluZ05vdGlmaWNhdGlvbi0+cmVwbGFjZUlkKCkgPT0gbm90aWZp
Y2F0aW9uLT5yZXBsYWNlSWQoKSAmJiBleGlzdGluZ05vdGlmaWNhdGlvbi0+dXJsKCkucHJvdG9j
b2woKSA9PSBub3RpZmljYXRpb24tPnVybCgpLnByb3RvY29sKCkgJiYgZXhpc3RpbmdOb3RpZmlj
YXRpb24tPnVybCgpLmhvc3QoKSA9PSBub3RpZmljYXRpb24tPnVybCgpLmhvc3QoKSkgeworICAg
ICAgICAgICAgb2xkTm90aWZpY2F0aW9uID0gaXRlci5rZXkoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGl0ZXIrKzsKKyAgICB9CisKKyAgICBpZiAob2xkTm90aWZp
Y2F0aW9uKSB7CisgICAgICAgIGlmIChkdW1wTm90aWZpY2F0aW9uKQorICAgICAgICAgICAgZHVt
cFJlcGxhY2VkSWRUZXh0KG9sZE5vdGlmaWNhdGlvbik7CisgICAgICAgIHNlbmRFdmVudChvbGRO
b3RpZmljYXRpb24sIGV2ZW50TmFtZXMoKS5jbG9zZUV2ZW50KTsKKyAgICAgICAgTm90aWZpY2F0
aW9uSWNvbkxvYWRlciogbG9hZGVyID0gbV9ub3RpZmljYXRpb25zTG9hZFF1ZXVlLnRha2Uob2xk
Tm90aWZpY2F0aW9uKTsKKyAgICAgICAgbG9hZGVyLT5zdG9wTG9hZGluZygpOworICAgICAgICBv
bGROb3RpZmljYXRpb24tPnVuc2V0UGVuZGluZ0FjdGl2aXR5KG9sZE5vdGlmaWNhdGlvbik7Cisg
ICAgfQorfQorCiB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkdW1wUmVwbGFj
ZWRJZFRleHQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7CiAgICAgaWYgKG5vdGlmaWNh
dGlvbikKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50
ZXJDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjZGVmaW5lIE5vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0X2gKIAogI2luY2x1ZGUgIk5vdGlmaWNhdGlvbi5oIgorI2luY2x1ZGUgIk5vdGlmaWNh
dGlvbkljb25Mb2FkZXIuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKICNp
bmNsdWRlICJUaW1lci5oIgogCkBAIC01OSw2ICs2MCw3IEBAIHB1YmxpYzoKIH07CiAKIHR5cGVk
ZWYgUUhhc2ggPE5vdGlmaWNhdGlvbiosIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKj4gTm90aWZp
Y2F0aW9uc1F1ZXVlOwordHlwZWRlZiBRSGFzaCA8Tm90aWZpY2F0aW9uKiwgTm90aWZpY2F0aW9u
SWNvbkxvYWRlcio+IE5vdGlmaWNhdGlvbnNMb2FkUXVldWU7CiAKIGNsYXNzIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0IDogcHVibGljIE5vdGlmaWNhdGlvblByZXNlbnRlciB7CiBwdWJs
aWM6CkBAIC04MCw2ICs4Miw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UmVjZWl2ZXIoUU9i
amVjdCogcmVjZWl2ZXIpIHsgbV9yZWNlaXZlciA9IHJlY2VpdmVyOyB9CiAKKyAgICB2b2lkIG5v
dGlmaWNhdGlvbkljb25Mb2FkRmluaXNoZWQoTm90aWZpY2F0aW9uSWNvbkxvYWRlciosIGNvbnN0
IFFCeXRlQXJyYXkmKTsKKwogICAgIHZvaWQgYWRkQ2xpZW50KCkgeyBtX2NsaWVudENvdW50Kys7
IH0KICAgICB2b2lkIHJlbW92ZUNsaWVudCgpOwogICAgIHN0YXRpYyBOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdCogbm90aWZpY2F0aW9uUHJlc2VudGVyKCk7CkBAIC04NywxMyArOTEsMTYg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHNlbmRFdmVudChOb3RpZmljYXRpb24qLCBj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSk7CiAgICAgdm9pZCBkaXNwbGF5Tm90aWZpY2F0
aW9uKE5vdGlmaWNhdGlvbiosIGNvbnN0IFFCeXRlQXJyYXkmKTsKKyAgICB2b2lkIHN0YXJ0TG9h
ZE5vdGlmaWNhdGlvbkljb24oTm90aWZpY2F0aW9uKik7CiAgICAgdm9pZCByZW1vdmVSZXBsYWNl
ZE5vdGlmaWNhdGlvbkZyb21RdWV1ZShOb3RpZmljYXRpb24qKTsKKyAgICB2b2lkIHJlbW92ZVJl
cGxhY2VkTm90aWZpY2F0aW9uRnJvbUxvYWRRdWV1ZShOb3RpZmljYXRpb24qKTsKICAgICB2b2lk
IGR1bXBSZXBsYWNlZElkVGV4dChOb3RpZmljYXRpb24qKTsKICAgICB2b2lkIGR1bXBTaG93VGV4
dChOb3RpZmljYXRpb24qKTsKIAogICAgIGludCBtX2NsaWVudENvdW50OwogICAgIFFIYXNoPFFT
dHJpbmcsICBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+ID4gbV9wZW5kaW5nUGVybWlzc2lv
blJlcXVlc3RzOwogICAgIE5vdGlmaWNhdGlvbnNRdWV1ZSBtX25vdGlmaWNhdGlvbnM7CisgICAg
Tm90aWZpY2F0aW9uc0xvYWRRdWV1ZSBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWU7CiAgICAgUU9i
amVjdCogbV9yZWNlaXZlcjsKIH07CiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0
aW9ucy9ub3RpZmljYXRpb25zLWRpc3BsYXktY2xvc2UtZXZlbnRzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L25vdGlmaWNhdGlvbnMvbm90aWZpY2F0aW9ucy1k
aXNwbGF5LWNsb3NlLWV2ZW50cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYwNjMwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMtZGlzcGxheS1jbG9zZS1l
dmVudHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotREVTS1RP
UCBOT1RJRklDQVRJT046IGljb24gaHR0cDovL2xvY2FsaG9zdC9teV9pY29uLnBuZywgdGl0bGUg
TmV3IEUtbWFpbCwgdGV4dCBNZWV0IG1lIHRvbmlnaHQgYXQgOCEKK0RFU0tUT1AgTk9USUZJQ0FU
SU9OOiBpY29uICwgdGl0bGUgTmV3IEUtbWFpbCwgdGV4dCBNZWV0IG1lIHRvbmlnaHQgYXQgOCEK
IERFU0tUT1AgTk9USUZJQ0FUSU9OIENMT1NFRDogTmV3IEUtbWFpbAogU2VuZGluZyBub3RpZmlj
YXRpb25zIHdpdGggcGVybWlzc2lvbi4uLgogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L25vdGlm
aWNhdGlvbnMvbm90aWZpY2F0aW9ucy1kaXNwbGF5LWNsb3NlLWV2ZW50cy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb25zLWRpc3Bs
YXktY2xvc2UtZXZlbnRzLmh0bWwJKHJldmlzaW9uIDYwNjMwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMtZGlzcGxheS1jbG9zZS1ldmVudHMuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMTIsMTcgKzEyLDIzIEBACiAgICAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbigiZmlsZTovLyIpOwogICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmICghd2luZG93LndlYmtpdE5vdGlmaWNhdGlvbnMpIHsKICAg
ICAgICAgICAgICAgICBsb2coIkZBSUw6IE5vIHdlYmtpdE5vdGlmaWNhdGlvbnMgaW50ZXJmYWNl
ISIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXIgTiA9IHdp
bmRvdy53ZWJraXROb3RpZmljYXRpb25zLmNyZWF0ZU5vdGlmaWNhdGlvbigiaHR0cDovL2xvY2Fs
aG9zdC9teV9pY29uLnBuZyIsICJOZXcgRS1tYWlsIiwgIk1lZXQgbWUgdG9uaWdodCBhdCA4ISIp
OwotICAgICAgICAgICAgTi5vbmRpc3BsYXkgPSBmdW5jdGlvbigpIHsgbG9nKCJQQVNTOiBkaXNw
bGF5IGV2ZW50IGludm9rZWQuIik7IH0KLSAgICAgICAgICAgIE4ub25jbG9zZSA9IGZ1bmN0aW9u
KCkgeyBsb2coIlBBU1M6IGNsb3NlIGV2ZW50IGludm9rZWQuIik7IH0KKy8vICAgICAgICAgICAg
dmFyIE4gPSB3aW5kb3cud2Via2l0Tm90aWZpY2F0aW9ucy5jcmVhdGVOb3RpZmljYXRpb24oImh0
dHA6Ly9sb2NhbGhvc3QvbXlfaWNvbi5wbmciLCAiTmV3IEUtbWFpbCIsICJNZWV0IG1lIHRvbmln
aHQgYXQgOCEiKTsKKy8vICAgICAgICAgICAgTi5vbmRpc3BsYXkgPSBmdW5jdGlvbigpIHsgbG9n
KCJQQVNTOiBkaXNwbGF5IGV2ZW50IGludm9rZWQuIik7IH0KKy8vICAgICAgICAgICAgTi5vbmNs
b3NlID0gZnVuY3Rpb24oKSB7IGxvZygiUEFTUzogY2xvc2UgZXZlbnQgaW52b2tlZC4iKTsgfQor
CisKK3ZhciBOID0gd2luZG93LndlYmtpdE5vdGlmaWNhdGlvbnMuY3JlYXRlTm90aWZpY2F0aW9u
KCIiLCAiTmV3IEUtbWFpbCIsICJNZWV0IG1lIHRvbmlnaHQgYXQgOCEiKTsKK04ub25kaXNwbGF5
ID0gZnVuY3Rpb24oKSB7IGxvZygiUEFTUzogZGlzcGxheSBldmVudCBpbnZva2VkLiIpOyBOLmNh
bmNlbCgpOyB9CitOLm9uY2xvc2UgPSBmdW5jdGlvbigpIHsgbG9nKCJQQVNTOiBjbG9zZSBldmVu
dCBpbnZva2VkLiIpOyBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7IH0KICAgICAg
ICAgICAgIE4uc2hvdygpOwotICAgICAgICAgICAgTi5jYW5jZWwoKTsKKyAgICAgICAgICAgLy8g
Ti5jYW5jZWwoKTsKICAgICAgICAgfQogICAgIDwvc2NyaXB0PgogPC9oZWFkPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57801</attachid>
            <date>2010-06-03 12:10:36 -0700</date>
            <delta_ts>2010-06-03 12:30:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>40004.patch</filename>
            <type>text/plain</type>
            <size>18264</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMDMgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gU3VwcG9ydCBmb3IgbG9hZGluZyBub3RpZmljYXRpb24gaWNvbnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDA0CisKKyAgICAgICAgQWRk
ZWQgdGhlIE5vdGlmaWNhdGlvbkljb25Mb2FkZXIgZmlsZXMgdG8gV2ViQ29yZS5wcm8uCisKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKwogMjAxMC0wNi0wMyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQu
cmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjYwNjE0LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTIwNjUsNiArMjA2NSw3IEBAIEhFQURFUlMgKz0gXAogICAgICQkUFdE
Ly4uL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlX3AuaCBcCiAgICAgJCRQV0QvLi4v
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5oIFwKICAgICAkJFBX
RC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oIFwKKyAg
ICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRl
ci5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQuaCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUXRQbGF0Zm9ybVBsdWdpbi5oIFwKQEAgLTIxNTUsNiArMjE1Niw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0Q29tbWFuZFF0LmNwcCBcCiAg
ICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIFwK
ICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwIFwK
KyAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5j
cHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50
ZXJDbGllbnRRdC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBs
dWdpbi5jcHAgXApJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNi0wMyAgWWFlbCBBaGFyb24g
IDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW1F0XSBTdXBwb3J0IGZvciBsb2FkaW5nIG5vdGlmaWNhdGlvbiBp
Y29ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAw
MDQKKworICAgICAgICBJZiB0aGUgaWNvbiB1cmwgZXhpc3RzLCBjcmVhdGUgYSBUaHJlYWRhYmxl
TG9hZGVyIHRvIGhhbmRsZSBsb2FkaW5nIHRoZSBpY29uLAorICAgICAgICBhbmQga2VlcCB0aGUg
bm90aWZpY2F0aW9uIGluIGEgbG9hZCBxdWV1ZS4KKyAgICAgICAgT25jZSB0aGUgaWNvbiBpcyBs
b2FkZWQsIG9yIGFuIGVycm9yIG9jY3VycmVkLCBtb3ZlIHRoZSBub3RpZmljYXRpb24gdG8gdGhl
CisgICAgICAgIGFjdGl2ZSBxdWV1ZSBhbmQgY29udGludWUgaGFuZGxpbmcgYXMgYmVmb3JlLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uSWNvbkxvYWRlcjo6Tm90aWZpY2F0
aW9uSWNvbkxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25JY29uTG9hZGVy
Ojp+Tm90aWZpY2F0aW9uSWNvbkxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRp
b25JY29uTG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRp
b25JY29uTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uSWNvbkxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Tm90aWZpY2F0aW9uSWNvbkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpOb3RpZmljYXRpb25JY29uTG9hZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZEZhaWxSZWRpcmVjdENoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNhbmNlbGxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25JY29uTG9hZGVy
OjpmaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25J
Y29uTG9hZGVyLmg6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbklj
b25XcmFwcGVyOjpOb3RpZmljYXRpb25JY29uV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6ZGlzcGxheU5vdGlmaWNhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2FuY2VsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRp
b25PYmplY3REZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvbkljb25Mb2FkRmluaXNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnN0YXJ0TG9hZE5vdGlmaWNhdGlv
bkljb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6
OnJlbW92ZVJlcGxhY2VkTm90aWZpY2F0aW9uRnJvbUxvYWRRdWV1ZSk6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaDoKKwogMjAxMC0wNi0w
MyAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTGFzemxvIEdvbWJvcy4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25JY29uTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk5vdGlmaWNhdGlvbkljb25Mb2FkZXIuaCIKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05T
KQorCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5j
bHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05vdGlm
aWNhdGlvbkljb25Mb2FkZXI6Ok5vdGlmaWNhdGlvbkljb25Mb2FkZXIoTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQqIHByZXNlbnRlciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgS1VSTCYgdXJsKQorICAgIDogbV9wcmVzZW50ZXIocHJlc2VudGVyKQoreworICAg
IFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5zZW5kTG9hZENh
bGxiYWNrcyA9IGZhbHNlOworICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CisgICAg
b3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOworICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50
aWFscyA9IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgb3B0aW9ucy5jcm9zc09yaWdpblJl
cXVlc3RQb2xpY3kgPSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHM7CisgICAgbV9sb2FkZXIgPSBU
aHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoY29udGV4dCwgdGhpcywgUmVzb3VyY2VSZXF1ZXN0KHVy
bCksIG9wdGlvbnMpOworfQorCitOb3RpZmljYXRpb25JY29uTG9hZGVyOjp+Tm90aWZpY2F0aW9u
SWNvbkxvYWRlcigpCit7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uSWNvbkxvYWRlcjo6c3RvcExv
YWRpbmcoKQoreworICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBwcm90ZWN0KG1fbG9hZGVy
KTsKKyAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uSWNvbkxv
YWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIGludCBzdGF0dXMgPSByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpOworICAgIGlm
IChzdGF0dXMgJiYgKHN0YXR1cyA8IDIwMCB8fCBzdGF0dXMgPiAyOTkpKQorICAgICAgICBzdG9w
TG9hZGluZygpOworfQorCit2b2lkIE5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEg
Kz0gUUJ5dGVBcnJheShkYXRhLCBsZW5ndGhSZWNlaXZlZCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0
aW9uSWNvbkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQoreworICAgIGZp
bmlzaExvYWRpbmcoKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25JY29uTG9hZGVyOjpkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIGZpbmlzaExvYWRpbmcoKTsKK30KKwordm9p
ZCBOb3RpZmljYXRpb25JY29uTG9hZGVyOjpkaWRGYWlsUmVkaXJlY3RDaGVjaygpCit7CisgICAg
ZmluaXNoTG9hZGluZygpOworfQorCit2b2lkIE5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikK
K3sKKyAgICBmaW5pc2hMb2FkaW5nKCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uSWNvbkxvYWRl
cjo6ZmluaXNoTG9hZGluZygpCit7CisgICAgbV9wcmVzZW50ZXItPm5vdGlmaWNhdGlvbkljb25M
b2FkRmluaXNoZWQodGhpcywgbV9kYXRhKTsKKyAgICBkZWxldGUgdGhpczsKK30KKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25JY29uTG9hZGVyLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOb3RpZmljYXRpb25JY29u
TG9hZGVyX2gKKyNkZWZpbmUgTm90aWZpY2F0aW9uSWNvbkxvYWRlcl9oCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAi
VGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEtVUkw7CitjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIE5vdGlmaWNhdGlvbkljb25Mb2FkZXIgOiBwdWJs
aWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CitwdWJsaWM6CisgICAgTm90aWZpY2F0aW9uSWNv
bkxvYWRlcihOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCosIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBLVVJMJik7CisgICAgfk5vdGlmaWNhdGlvbkljb25Mb2FkZXIoKTsKKwor
ICAgIHZvaWQgc3RvcExvYWRpbmcoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAg
dmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworCitw
cml2YXRlOgorICAgIHZvaWQgZmluaXNoTG9hZGluZygpOworICAgIE5vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0KiBtX3ByZXNlbnRlcjsKKyAgICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4g
bV9sb2FkZXI7CisgICAgUUJ5dGVBcnJheSBtX2RhdGE7Cit9OworfQorCisjZW5kaWYKKyNlbmRp
ZgpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAgTm90aWZpY2F0aW9uSWNvbldyYXBwZXI6Ok5vdGlm
aWNhdGlvbkljbwogI2lmbmRlZiBRVF9OT19TWVNURU1UUkFZSUNPTgogICAgIG1fbm90aWZpY2F0
aW9uSWNvbiA9IDA7CiAjZW5kaWYKLSAgICBtX2Nsb3NlVGltZXIuc3RhcnRPbmVTaG90KG5vdGlm
aWNhdGlvblRpbWVvdXQpOwogfQogCiBOb3RpZmljYXRpb25JY29uV3JhcHBlcjo6fk5vdGlmaWNh
dGlvbkljb25XcmFwcGVyKCkKQEAgLTk3LDE3ICs5NiwyMSBAQCBib29sIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpzaG93CiAgICAgaWYgKG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5pc1dvcmtlckNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIG5vdGlmaWNhdGlvbi0+c2V0UGVuZGluZ0FjdGl2aXR5KG5vdGlmaWNhdGlvbik7Ci0gICAg
aWYgKCFub3RpZmljYXRpb24tPnJlcGxhY2VJZCgpLmlzRW1wdHkoKSkgewotICAgICAgICByZW1v
dmVSZXBsYWNlZE5vdGlmaWNhdGlvbkZyb21RdWV1ZShub3RpZmljYXRpb24pOwotICAgIH0KKyAg
ICBpZiAoIW5vdGlmaWNhdGlvbi0+cmVwbGFjZUlkKCkuaXNFbXB0eSgpKQorICAgICAgICByZW1v
dmVSZXBsYWNlZE5vdGlmaWNhdGlvbkZyb21Mb2FkUXVldWUobm90aWZpY2F0aW9uKTsKICAgICBp
ZiAoZHVtcE5vdGlmaWNhdGlvbikKICAgICAgICAgZHVtcFNob3dUZXh0KG5vdGlmaWNhdGlvbik7
Ci0gICAgZGlzcGxheU5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIFFCeXRlQXJyYXkoKSk7Cisg
ICAgaWYgKG5vdGlmaWNhdGlvbi0+aWNvblVSTCgpLmlzRW1wdHkoKSkKKyAgICAgICAgZGlzcGxh
eU5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIFFCeXRlQXJyYXkoKSk7CisgICAgZWxzZQorICAg
ICAgICBzdGFydExvYWROb3RpZmljYXRpb25JY29uKG5vdGlmaWNhdGlvbik7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmRpc3BsYXlO
b3RpZmljYXRpb24oTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIGNvbnN0IFFCeXRlQXJyYXkm
IGJ5dGVzKQogeworICAgIGlmICghbm90aWZpY2F0aW9uLT5yZXBsYWNlSWQoKS5pc0VtcHR5KCkp
CisgICAgICAgIHJlbW92ZVJlcGxhY2VkTm90aWZpY2F0aW9uRnJvbVF1ZXVlKG5vdGlmaWNhdGlv
bik7CiAgICAgTm90aWZpY2F0aW9uSWNvbldyYXBwZXIqIHdyYXBwZXIgPSBuZXcgTm90aWZpY2F0
aW9uSWNvbldyYXBwZXIoKTsKICAgICBtX25vdGlmaWNhdGlvbnMuaW5zZXJ0KG5vdGlmaWNhdGlv
biwgd3JhcHBlcik7CiAgICAgUVN0cmluZyB0aXRsZTsKQEAgLTEyMSw2ICsxMjQsNyBAQCB2b2lk
IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkaXNwCiAgICAgfQogCiAjaWZuZGVmIFFU
X05PX1NZU1RFTVRSQVlJQ09OCisgICAgd3JhcHBlci0+bV9jbG9zZVRpbWVyLnN0YXJ0T25lU2hv
dChub3RpZmljYXRpb25UaW1lb3V0KTsKICAgICBRUGl4bWFwIHBpeG1hcDsKICAgICBpZiAoYnl0
ZXMubGVuZ3RoKCkgJiYgcGl4bWFwLmxvYWRGcm9tRGF0YShieXRlcykpIHsKICAgICAgICAgUUlj
b24gaWNvbihwaXhtYXApOwpAQCAtMTU1LDYgKzE1OSwxNCBAQCB2b2lkIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpjYW5jCiAgICAgICAgIHNlbmRFdmVudChub3RpZmljYXRpb24sIGV2
ZW50TmFtZXMoKS5jbG9zZUV2ZW50KTsKICAgICAgICAgZGVsZXRlIG1fbm90aWZpY2F0aW9ucy50
YWtlKG5vdGlmaWNhdGlvbik7CiAgICAgICAgIG5vdGlmaWNhdGlvbi0+dW5zZXRQZW5kaW5nQWN0
aXZpdHkobm90aWZpY2F0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgICBOb3RpZmljYXRpb25z
TG9hZFF1ZXVlOjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zTG9hZFF1ZXVlLmZpbmQo
bm90aWZpY2F0aW9uKTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gbV9ub3RpZmljYXRpb25zTG9hZFF1
ZXVlLmVuZCgpKSB7CisgICAgICAgICAgICBzZW5kRXZlbnQobm90aWZpY2F0aW9uLCBldmVudE5h
bWVzKCkuY2xvc2VFdmVudCk7CisgICAgICAgICAgICBOb3RpZmljYXRpb25JY29uTG9hZGVyKiBs
b2FkZXIgPSBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWUudGFrZShub3RpZmljYXRpb24pOworICAg
ICAgICAgICAgbG9hZGVyLT5zdG9wTG9hZGluZygpOworICAgICAgICAgICAgbm90aWZpY2F0aW9u
LT51bnNldFBlbmRpbmdBY3Rpdml0eShub3RpZmljYXRpb24pOworICAgICAgICB9CiAgICAgfQog
fQogCkBAIC0xNzQsNiArMTg2LDEzIEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50
UXQ6Om5vdGkKICAgICBOb3RpZmljYXRpb25zUXVldWU6Okl0ZXJhdG9yIGl0ZXIgPSBtX25vdGlm
aWNhdGlvbnMuZmluZChub3RpZmljYXRpb24pOwogICAgIGlmIChpdGVyICE9IG1fbm90aWZpY2F0
aW9ucy5lbmQoKSkKICAgICAgICAgZGVsZXRlIG1fbm90aWZpY2F0aW9ucy50YWtlKG5vdGlmaWNh
dGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIE5vdGlmaWNhdGlvbnNMb2FkUXVldWU6Okl0ZXJh
dG9yIGl0ZXIgPSBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWUuZmluZChub3RpZmljYXRpb24pOwor
ICAgICAgICBpZiAoaXRlciAhPSBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWUuZW5kKCkpIHsKKyAg
ICAgICAgICAgIE5vdGlmaWNhdGlvbkljb25Mb2FkZXIqIGxvYWRlciA9IG1fbm90aWZpY2F0aW9u
c0xvYWRRdWV1ZS50YWtlKG5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICBsb2FkZXItPnN0b3BM
b2FkaW5nKCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6OnJlcXVlc3RQZXJtaXNzaW9uKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBh
c3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBjYWxsYmFjaykKQEAgLTIyNCwxMiArMjQzLDMyIEBAIHZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmFsbG8KICAgICB9CiB9CiAKK3ZvaWQg
Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvbkljb25Mb2FkRmluaXNo
ZWQoTm90aWZpY2F0aW9uSWNvbkxvYWRlciogbG9hZGVyLCBjb25zdCBRQnl0ZUFycmF5JiBieXRl
cykKK3sKKyAgICBOb3RpZmljYXRpb25zTG9hZFF1ZXVlOjpJdGVyYXRvciBlbmQgPSBtX25vdGlm
aWNhdGlvbnNMb2FkUXVldWUuZW5kKCk7CisgICAgTm90aWZpY2F0aW9uc0xvYWRRdWV1ZTo6SXRl
cmF0b3IgaXRlciA9IG1fbm90aWZpY2F0aW9uc0xvYWRRdWV1ZS5iZWdpbigpOworICAgIHdoaWxl
IChpdGVyICE9IGVuZCkgeworICAgICAgICBpZiAoaXRlci52YWx1ZSgpID09IGxvYWRlcikgewor
ICAgICAgICAgICAgbV9ub3RpZmljYXRpb25zTG9hZFF1ZXVlLnRha2UoaXRlci5rZXkoKSk7Cisg
ICAgICAgICAgICBkaXNwbGF5Tm90aWZpY2F0aW9uKGl0ZXIua2V5KCksIGJ5dGVzKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGl0ZXIrKzsKKyAgICB9Cit9CisKIHZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnNlbmRFdmVudChOb3RpZmljYXRpb24q
IG5vdGlmaWNhdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgaWYg
KG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICBub3RpZmlj
YXRpb24tPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCB0cnVl
KSk7CiB9CiAKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnN0YXJ0TG9hZE5v
dGlmaWNhdGlvbkljb24oTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCit7CisgICAgTm90aWZp
Y2F0aW9uSWNvbkxvYWRlciogbG9hZGVyID0gbmV3IE5vdGlmaWNhdGlvbkljb25Mb2FkZXIodGhp
cywgbm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG5vdGlmaWNhdGlvbi0+
aWNvblVSTCgpKTsKKyAgICBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWUuaW5zZXJ0KG5vdGlmaWNh
dGlvbiwgbG9hZGVyKTsKK30KKwogdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6
cmVtb3ZlUmVwbGFjZWROb3RpZmljYXRpb25Gcm9tUXVldWUoTm90aWZpY2F0aW9uKiBub3RpZmlj
YXRpb24pCiB7CiAgICAgTm90aWZpY2F0aW9uKiBvbGROb3RpZmljYXRpb24gPSAwOwpAQCAtMjU0
LDYgKzI5MywzMSBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpyZW1vCiAg
ICAgfQogfQogCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpyZW1vdmVSZXBs
YWNlZE5vdGlmaWNhdGlvbkZyb21Mb2FkUXVldWUoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24p
Cit7CisgICAgTm90aWZpY2F0aW9uKiBvbGROb3RpZmljYXRpb24gPSAwOworICAgIE5vdGlmaWNh
dGlvbnNMb2FkUXVldWU6Okl0ZXJhdG9yIGVuZCA9IG1fbm90aWZpY2F0aW9uc0xvYWRRdWV1ZS5l
bmQoKTsKKyAgICBOb3RpZmljYXRpb25zTG9hZFF1ZXVlOjpJdGVyYXRvciBpdGVyID0gbV9ub3Rp
ZmljYXRpb25zTG9hZFF1ZXVlLmJlZ2luKCk7CisKKyAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsK
KyAgICAgICAgTm90aWZpY2F0aW9uKiBleGlzdGluZ05vdGlmaWNhdGlvbiA9IGl0ZXIua2V5KCk7
CisgICAgICAgIGlmIChleGlzdGluZ05vdGlmaWNhdGlvbi0+cmVwbGFjZUlkKCkgPT0gbm90aWZp
Y2F0aW9uLT5yZXBsYWNlSWQoKSAmJiBleGlzdGluZ05vdGlmaWNhdGlvbi0+dXJsKCkucHJvdG9j
b2woKSA9PSBub3RpZmljYXRpb24tPnVybCgpLnByb3RvY29sKCkgJiYgZXhpc3RpbmdOb3RpZmlj
YXRpb24tPnVybCgpLmhvc3QoKSA9PSBub3RpZmljYXRpb24tPnVybCgpLmhvc3QoKSkgeworICAg
ICAgICAgICAgb2xkTm90aWZpY2F0aW9uID0gaXRlci5rZXkoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGl0ZXIrKzsKKyAgICB9CisKKyAgICBpZiAob2xkTm90aWZp
Y2F0aW9uKSB7CisgICAgICAgIGlmIChkdW1wTm90aWZpY2F0aW9uKQorICAgICAgICAgICAgZHVt
cFJlcGxhY2VkSWRUZXh0KG9sZE5vdGlmaWNhdGlvbik7CisgICAgICAgIHNlbmRFdmVudChvbGRO
b3RpZmljYXRpb24sIGV2ZW50TmFtZXMoKS5jbG9zZUV2ZW50KTsKKyAgICAgICAgTm90aWZpY2F0
aW9uSWNvbkxvYWRlciogbG9hZGVyID0gbV9ub3RpZmljYXRpb25zTG9hZFF1ZXVlLnRha2Uob2xk
Tm90aWZpY2F0aW9uKTsKKyAgICAgICAgbG9hZGVyLT5zdG9wTG9hZGluZygpOworICAgICAgICBv
bGROb3RpZmljYXRpb24tPnVuc2V0UGVuZGluZ0FjdGl2aXR5KG9sZE5vdGlmaWNhdGlvbik7Cisg
ICAgfQorfQorCiB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkdW1wUmVwbGFj
ZWRJZFRleHQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7CiAgICAgaWYgKG5vdGlmaWNh
dGlvbikKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50
ZXJDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjZGVmaW5lIE5vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0X2gKIAogI2luY2x1ZGUgIk5vdGlmaWNhdGlvbi5oIgorI2luY2x1ZGUgIk5vdGlmaWNh
dGlvbkljb25Mb2FkZXIuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKICNp
bmNsdWRlICJUaW1lci5oIgogCkBAIC01OSw2ICs2MCw3IEBAIHB1YmxpYzoKIH07CiAKIHR5cGVk
ZWYgUUhhc2ggPE5vdGlmaWNhdGlvbiosIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKj4gTm90aWZp
Y2F0aW9uc1F1ZXVlOwordHlwZWRlZiBRSGFzaCA8Tm90aWZpY2F0aW9uKiwgTm90aWZpY2F0aW9u
SWNvbkxvYWRlcio+IE5vdGlmaWNhdGlvbnNMb2FkUXVldWU7CiAKIGNsYXNzIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0IDogcHVibGljIE5vdGlmaWNhdGlvblByZXNlbnRlciB7CiBwdWJs
aWM6CkBAIC04MCw2ICs4Miw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UmVjZWl2ZXIoUU9i
amVjdCogcmVjZWl2ZXIpIHsgbV9yZWNlaXZlciA9IHJlY2VpdmVyOyB9CiAKKyAgICB2b2lkIG5v
dGlmaWNhdGlvbkljb25Mb2FkRmluaXNoZWQoTm90aWZpY2F0aW9uSWNvbkxvYWRlciosIGNvbnN0
IFFCeXRlQXJyYXkmKTsKKwogICAgIHZvaWQgYWRkQ2xpZW50KCkgeyBtX2NsaWVudENvdW50Kys7
IH0KICAgICB2b2lkIHJlbW92ZUNsaWVudCgpOwogICAgIHN0YXRpYyBOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdCogbm90aWZpY2F0aW9uUHJlc2VudGVyKCk7CkBAIC04NywxMyArOTEsMTYg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHNlbmRFdmVudChOb3RpZmljYXRpb24qLCBj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSk7CiAgICAgdm9pZCBkaXNwbGF5Tm90aWZpY2F0
aW9uKE5vdGlmaWNhdGlvbiosIGNvbnN0IFFCeXRlQXJyYXkmKTsKKyAgICB2b2lkIHN0YXJ0TG9h
ZE5vdGlmaWNhdGlvbkljb24oTm90aWZpY2F0aW9uKik7CiAgICAgdm9pZCByZW1vdmVSZXBsYWNl
ZE5vdGlmaWNhdGlvbkZyb21RdWV1ZShOb3RpZmljYXRpb24qKTsKKyAgICB2b2lkIHJlbW92ZVJl
cGxhY2VkTm90aWZpY2F0aW9uRnJvbUxvYWRRdWV1ZShOb3RpZmljYXRpb24qKTsKICAgICB2b2lk
IGR1bXBSZXBsYWNlZElkVGV4dChOb3RpZmljYXRpb24qKTsKICAgICB2b2lkIGR1bXBTaG93VGV4
dChOb3RpZmljYXRpb24qKTsKIAogICAgIGludCBtX2NsaWVudENvdW50OwogICAgIFFIYXNoPFFT
dHJpbmcsICBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+ID4gbV9wZW5kaW5nUGVybWlzc2lv
blJlcXVlc3RzOwogICAgIE5vdGlmaWNhdGlvbnNRdWV1ZSBtX25vdGlmaWNhdGlvbnM7CisgICAg
Tm90aWZpY2F0aW9uc0xvYWRRdWV1ZSBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWU7CiAgICAgUU9i
amVjdCogbV9yZWNlaXZlcjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57803</attachid>
            <date>2010-06-03 12:30:32 -0700</date>
            <delta_ts>2010-06-10 12:34:05 -0700</delta_ts>
            <desc>Fix style issues.</desc>
            <filename>40004.patch</filename>
            <type>text/plain</type>
            <size>18241</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMDMgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gU3VwcG9ydCBmb3IgbG9hZGluZyBub3RpZmljYXRpb24gaWNvbnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDA0CisKKyAgICAgICAgQWRk
ZWQgdGhlIE5vdGlmaWNhdGlvbkljb25Mb2FkZXIgZmlsZXMgdG8gV2ViQ29yZS5wcm8uCisKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKwogMjAxMC0wNi0wMyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQu
cmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjYwNjE0LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTIwNjUsNiArMjA2NSw3IEBAIEhFQURFUlMgKz0gXAogICAgICQkUFdE
Ly4uL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlX3AuaCBcCiAgICAgJCRQV0QvLi4v
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5oIFwKICAgICAkJFBX
RC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oIFwKKyAg
ICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRl
ci5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQuaCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUXRQbGF0Zm9ybVBsdWdpbi5oIFwKQEAgLTIxNTUsNiArMjE1Niw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0Q29tbWFuZFF0LmNwcCBcCiAg
ICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIFwK
ICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwIFwK
KyAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5j
cHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50
ZXJDbGllbnRRdC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBs
dWdpbi5jcHAgXApJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDYzMCkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNi0wMyAgWWFlbCBBaGFyb24g
IDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW1F0XSBTdXBwb3J0IGZvciBsb2FkaW5nIG5vdGlmaWNhdGlvbiBp
Y29ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAw
MDQKKworICAgICAgICBJZiB0aGUgaWNvbiB1cmwgZXhpc3RzLCBjcmVhdGUgYSBUaHJlYWRhYmxl
TG9hZGVyIHRvIGhhbmRsZSBsb2FkaW5nIHRoZSBpY29uLAorICAgICAgICBhbmQga2VlcCB0aGUg
bm90aWZpY2F0aW9uIGluIGEgbG9hZCBxdWV1ZS4KKyAgICAgICAgT25jZSB0aGUgaWNvbiBpcyBs
b2FkZWQsIG9yIGFuIGVycm9yIG9jY3VycmVkLCBtb3ZlIHRoZSBub3RpZmljYXRpb24gdG8gdGhl
CisgICAgICAgIGFjdGl2ZSBxdWV1ZSBhbmQgY29udGludWUgaGFuZGxpbmcgYXMgYmVmb3JlLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uSWNvbkxvYWRlcjo6Tm90aWZpY2F0
aW9uSWNvbkxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25JY29uTG9hZGVy
Ojp+Tm90aWZpY2F0aW9uSWNvbkxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRp
b25JY29uTG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRp
b25JY29uTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uSWNvbkxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Tm90aWZpY2F0aW9uSWNvbkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpOb3RpZmljYXRpb25JY29uTG9hZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZEZhaWxSZWRpcmVjdENoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNhbmNlbGxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25JY29uTG9hZGVy
OjpmaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25J
Y29uTG9hZGVyLmg6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbklj
b25XcmFwcGVyOjpOb3RpZmljYXRpb25JY29uV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6ZGlzcGxheU5vdGlmaWNhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2FuY2VsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRp
b25PYmplY3REZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvbkljb25Mb2FkRmluaXNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnN0YXJ0TG9hZE5vdGlmaWNhdGlv
bkljb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6
OnJlbW92ZVJlcGxhY2VkTm90aWZpY2F0aW9uRnJvbUxvYWRRdWV1ZSk6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaDoKKwogMjAxMC0wNi0w
MyAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTGFzemxvIEdvbWJvcy4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25JY29uTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk5vdGlmaWNhdGlvbkljb25Mb2FkZXIuaCIKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05T
KQorCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5j
bHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05vdGlm
aWNhdGlvbkljb25Mb2FkZXI6Ok5vdGlmaWNhdGlvbkljb25Mb2FkZXIoTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQqIHByZXNlbnRlciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgS1VSTCYgdXJsKQorICAgIDogbV9wcmVzZW50ZXIocHJlc2VudGVyKQoreworICAg
IFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5zZW5kTG9hZENh
bGxiYWNrcyA9IGZhbHNlOworICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CisgICAg
b3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOworICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50
aWFscyA9IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgb3B0aW9ucy5jcm9zc09yaWdpblJl
cXVlc3RQb2xpY3kgPSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHM7CisgICAgbV9sb2FkZXIgPSBU
aHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoY29udGV4dCwgdGhpcywgUmVzb3VyY2VSZXF1ZXN0KHVy
bCksIG9wdGlvbnMpOworfQorCitOb3RpZmljYXRpb25JY29uTG9hZGVyOjp+Tm90aWZpY2F0aW9u
SWNvbkxvYWRlcigpCit7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uSWNvbkxvYWRlcjo6c3RvcExv
YWRpbmcoKQoreworICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBwcm90ZWN0KG1fbG9hZGVy
KTsKKyAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uSWNvbkxv
YWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIGludCBzdGF0dXMgPSByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpOworICAgIGlm
IChzdGF0dXMgJiYgKHN0YXR1cyA8IDIwMCB8fCBzdGF0dXMgPiAyOTkpKQorICAgICAgICBzdG9w
TG9hZGluZygpOworfQorCit2b2lkIE5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEg
Kz0gUUJ5dGVBcnJheShkYXRhLCBsZW5ndGhSZWNlaXZlZCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0
aW9uSWNvbkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQoreworICAgIGZp
bmlzaExvYWRpbmcoKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25JY29uTG9hZGVyOjpkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIGZpbmlzaExvYWRpbmcoKTsKK30KKwordm9p
ZCBOb3RpZmljYXRpb25JY29uTG9hZGVyOjpkaWRGYWlsUmVkaXJlY3RDaGVjaygpCit7CisgICAg
ZmluaXNoTG9hZGluZygpOworfQorCit2b2lkIE5vdGlmaWNhdGlvbkljb25Mb2FkZXI6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikK
K3sKKyAgICBmaW5pc2hMb2FkaW5nKCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uSWNvbkxvYWRl
cjo6ZmluaXNoTG9hZGluZygpCit7CisgICAgbV9wcmVzZW50ZXItPm5vdGlmaWNhdGlvbkljb25M
b2FkRmluaXNoZWQodGhpcywgbV9kYXRhKTsKKyAgICBkZWxldGUgdGhpczsKK30KKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25JY29uTG9hZGVyLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uSWNvbkxvYWRlci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOb3RpZmljYXRpb25JY29u
TG9hZGVyX2gKKyNkZWZpbmUgTm90aWZpY2F0aW9uSWNvbkxvYWRlcl9oCisKKyNpZiBFTkFCTEUo
Tk9USUZJQ0FUSU9OUykKKworI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRl
ICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLVVJMOworY2xhc3MgTm90aWZpY2F0
aW9uUHJlc2VudGVyQ2xpZW50UXQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitj
bGFzcyBOb3RpZmljYXRpb25JY29uTG9hZGVyIDogcHVibGljIFRocmVhZGFibGVMb2FkZXJDbGll
bnQgeworcHVibGljOgorICAgIE5vdGlmaWNhdGlvbkljb25Mb2FkZXIoTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYpOwor
ICAgIH5Ob3RpZmljYXRpb25JY29uTG9hZGVyKCk7CisKKyAgICB2b2lkIHN0b3BMb2FkaW5nKCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbmd0aFJlY2VpdmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGlu
Zyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNv
bnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFJlZGlyZWN0Q2hl
Y2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0
aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGZpbmlz
aExvYWRpbmcoKTsKKyAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCogbV9wcmVzZW50
ZXI7CisgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IG1fbG9hZGVyOworICAgIFFCeXRlQXJy
YXkgbV9kYXRhOworfTsKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0
LmNwcAkocmV2aXNpb24gNjA2MzApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw2
IEBAIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyOjpOb3RpZmljYXRpb25JY28KICNpZm5kZWYgUVRf
Tk9fU1lTVEVNVFJBWUlDT04KICAgICBtX25vdGlmaWNhdGlvbkljb24gPSAwOwogI2VuZGlmCi0g
ICAgbV9jbG9zZVRpbWVyLnN0YXJ0T25lU2hvdChub3RpZmljYXRpb25UaW1lb3V0KTsKIH0KIAog
Tm90aWZpY2F0aW9uSWNvbldyYXBwZXI6On5Ob3RpZmljYXRpb25JY29uV3JhcHBlcigpCkBAIC05
NywxNyArOTYsMjEgQEAgYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6c2hvdwog
ICAgIGlmIChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNXb3JrZXJD
b250ZXh0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBub3RpZmljYXRpb24tPnNldFBl
bmRpbmdBY3Rpdml0eShub3RpZmljYXRpb24pOwotICAgIGlmICghbm90aWZpY2F0aW9uLT5yZXBs
YWNlSWQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVtb3ZlUmVwbGFjZWROb3RpZmljYXRpb25G
cm9tUXVldWUobm90aWZpY2F0aW9uKTsKLSAgICB9CisgICAgaWYgKCFub3RpZmljYXRpb24tPnJl
cGxhY2VJZCgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmVtb3ZlUmVwbGFjZWROb3RpZmljYXRpb25G
cm9tTG9hZFF1ZXVlKG5vdGlmaWNhdGlvbik7CiAgICAgaWYgKGR1bXBOb3RpZmljYXRpb24pCiAg
ICAgICAgIGR1bXBTaG93VGV4dChub3RpZmljYXRpb24pOwotICAgIGRpc3BsYXlOb3RpZmljYXRp
b24obm90aWZpY2F0aW9uLCBRQnl0ZUFycmF5KCkpOworICAgIGlmIChub3RpZmljYXRpb24tPmlj
b25VUkwoKS5pc0VtcHR5KCkpCisgICAgICAgIGRpc3BsYXlOb3RpZmljYXRpb24obm90aWZpY2F0
aW9uLCBRQnl0ZUFycmF5KCkpOworICAgIGVsc2UKKyAgICAgICAgc3RhcnRMb2FkTm90aWZpY2F0
aW9uSWNvbihub3RpZmljYXRpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIE5vdGlm
aWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkaXNwbGF5Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlv
biogbm90aWZpY2F0aW9uLCBjb25zdCBRQnl0ZUFycmF5JiBieXRlcykKIHsKKyAgICBpZiAoIW5v
dGlmaWNhdGlvbi0+cmVwbGFjZUlkKCkuaXNFbXB0eSgpKQorICAgICAgICByZW1vdmVSZXBsYWNl
ZE5vdGlmaWNhdGlvbkZyb21RdWV1ZShub3RpZmljYXRpb24pOwogICAgIE5vdGlmaWNhdGlvbklj
b25XcmFwcGVyKiB3cmFwcGVyID0gbmV3IE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKCk7CiAgICAg
bV9ub3RpZmljYXRpb25zLmluc2VydChub3RpZmljYXRpb24sIHdyYXBwZXIpOwogICAgIFFTdHJp
bmcgdGl0bGU7CkBAIC0xMjEsNiArMTI0LDcgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdDo6ZGlzcAogICAgIH0KIAogI2lmbmRlZiBRVF9OT19TWVNURU1UUkFZSUNPTgorICAg
IHdyYXBwZXItPm1fY2xvc2VUaW1lci5zdGFydE9uZVNob3Qobm90aWZpY2F0aW9uVGltZW91dCk7
CiAgICAgUVBpeG1hcCBwaXhtYXA7CiAgICAgaWYgKGJ5dGVzLmxlbmd0aCgpICYmIHBpeG1hcC5s
b2FkRnJvbURhdGEoYnl0ZXMpKSB7CiAgICAgICAgIFFJY29uIGljb24ocGl4bWFwKTsKQEAgLTE1
NSw2ICsxNTksMTQgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2FuYwog
ICAgICAgICBzZW5kRXZlbnQobm90aWZpY2F0aW9uLCBldmVudE5hbWVzKCkuY2xvc2VFdmVudCk7
CiAgICAgICAgIGRlbGV0ZSBtX25vdGlmaWNhdGlvbnMudGFrZShub3RpZmljYXRpb24pOwogICAg
ICAgICBub3RpZmljYXRpb24tPnVuc2V0UGVuZGluZ0FjdGl2aXR5KG5vdGlmaWNhdGlvbik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgTm90aWZpY2F0aW9uc0xvYWRRdWV1ZTo6SXRlcmF0b3IgaXRl
ciA9IG1fbm90aWZpY2F0aW9uc0xvYWRRdWV1ZS5maW5kKG5vdGlmaWNhdGlvbik7CisgICAgICAg
IGlmIChpdGVyICE9IG1fbm90aWZpY2F0aW9uc0xvYWRRdWV1ZS5lbmQoKSkgeworICAgICAgICAg
ICAgc2VuZEV2ZW50KG5vdGlmaWNhdGlvbiwgZXZlbnROYW1lcygpLmNsb3NlRXZlbnQpOworICAg
ICAgICAgICAgTm90aWZpY2F0aW9uSWNvbkxvYWRlciogbG9hZGVyID0gbV9ub3RpZmljYXRpb25z
TG9hZFF1ZXVlLnRha2Uobm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIGxvYWRlci0+c3RvcExv
YWRpbmcoKTsKKyAgICAgICAgICAgIG5vdGlmaWNhdGlvbi0+dW5zZXRQZW5kaW5nQWN0aXZpdHko
bm90aWZpY2F0aW9uKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTc0LDYgKzE4NiwxMyBA
QCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpCiAgICAgTm90aWZpY2F0
aW9uc1F1ZXVlOjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zLmZpbmQobm90aWZpY2F0
aW9uKTsKICAgICBpZiAoaXRlciAhPSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIGRl
bGV0ZSBtX25vdGlmaWNhdGlvbnMudGFrZShub3RpZmljYXRpb24pOworICAgIGVsc2UgeworICAg
ICAgICBOb3RpZmljYXRpb25zTG9hZFF1ZXVlOjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRp
b25zTG9hZFF1ZXVlLmZpbmQobm90aWZpY2F0aW9uKTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gbV9u
b3RpZmljYXRpb25zTG9hZFF1ZXVlLmVuZCgpKSB7CisgICAgICAgICAgICBOb3RpZmljYXRpb25J
Y29uTG9hZGVyKiBsb2FkZXIgPSBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWUudGFrZShub3RpZmlj
YXRpb24pOworICAgICAgICAgICAgbG9hZGVyLT5zdG9wTG9hZGluZygpOworICAgICAgICB9Cisg
ICAgfQogfQogCiB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpyZXF1ZXN0UGVy
bWlzc2lvbihTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4g
Y2FsbGJhY2spCkBAIC0yMjQsMTIgKzI0MywzMiBAQCB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRl
ckNsaWVudFF0OjphbGxvCiAgICAgfQogfQogCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0Ojpub3RpZmljYXRpb25JY29uTG9hZEZpbmlzaGVkKE5vdGlmaWNhdGlvbkljb25Mb2Fk
ZXIqIGxvYWRlciwgY29uc3QgUUJ5dGVBcnJheSYgYnl0ZXMpCit7CisgICAgTm90aWZpY2F0aW9u
c0xvYWRRdWV1ZTo6SXRlcmF0b3IgZW5kID0gbV9ub3RpZmljYXRpb25zTG9hZFF1ZXVlLmVuZCgp
OworICAgIE5vdGlmaWNhdGlvbnNMb2FkUXVldWU6Okl0ZXJhdG9yIGl0ZXIgPSBtX25vdGlmaWNh
dGlvbnNMb2FkUXVldWUuYmVnaW4oKTsKKyAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyAgICAg
ICAgaWYgKGl0ZXIudmFsdWUoKSA9PSBsb2FkZXIpIHsKKyAgICAgICAgICAgIG1fbm90aWZpY2F0
aW9uc0xvYWRRdWV1ZS50YWtlKGl0ZXIua2V5KCkpOworICAgICAgICAgICAgZGlzcGxheU5vdGlm
aWNhdGlvbihpdGVyLmtleSgpLCBieXRlcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBpdGVyKys7CisgICAgfQorfQorCiB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRl
ckNsaWVudFF0OjpzZW5kRXZlbnQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnROYW1lKQogewogICAgIGlmIChub3RpZmljYXRpb24tPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkKICAgICAgICAgbm90aWZpY2F0aW9uLT5kaXNwYXRjaEV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSkpOwogfQogCit2b2lkIE5vdGlmaWNh
dGlvblByZXNlbnRlckNsaWVudFF0OjpzdGFydExvYWROb3RpZmljYXRpb25JY29uKE5vdGlmaWNh
dGlvbiogbm90aWZpY2F0aW9uKQoreworICAgIE5vdGlmaWNhdGlvbkljb25Mb2FkZXIqIGxvYWRl
ciA9IG5ldyBOb3RpZmljYXRpb25JY29uTG9hZGVyKHRoaXMsIG5vdGlmaWNhdGlvbi0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCBub3RpZmljYXRpb24tPmljb25VUkwoKSk7CisgICAgbV9ub3Rp
ZmljYXRpb25zTG9hZFF1ZXVlLmluc2VydChub3RpZmljYXRpb24sIGxvYWRlcik7Cit9CisKIHZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnJlbW92ZVJlcGxhY2VkTm90aWZpY2F0
aW9uRnJvbVF1ZXVlKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogewogICAgIE5vdGlmaWNh
dGlvbiogb2xkTm90aWZpY2F0aW9uID0gMDsKQEAgLTI1NCw2ICsyOTMsMzEgQEAgdm9pZCBOb3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6cmVtbwogICAgIH0KIH0KIAordm9pZCBOb3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdDo6cmVtb3ZlUmVwbGFjZWROb3RpZmljYXRpb25Gcm9tTG9h
ZFF1ZXVlKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQoreworICAgIE5vdGlmaWNhdGlvbiog
b2xkTm90aWZpY2F0aW9uID0gMDsKKyAgICBOb3RpZmljYXRpb25zTG9hZFF1ZXVlOjpJdGVyYXRv
ciBlbmQgPSBtX25vdGlmaWNhdGlvbnNMb2FkUXVldWUuZW5kKCk7CisgICAgTm90aWZpY2F0aW9u
c0xvYWRRdWV1ZTo6SXRlcmF0b3IgaXRlciA9IG1fbm90aWZpY2F0aW9uc0xvYWRRdWV1ZS5iZWdp
bigpOworCisgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7CisgICAgICAgIE5vdGlmaWNhdGlvbiog
ZXhpc3RpbmdOb3RpZmljYXRpb24gPSBpdGVyLmtleSgpOworICAgICAgICBpZiAoZXhpc3RpbmdO
b3RpZmljYXRpb24tPnJlcGxhY2VJZCgpID09IG5vdGlmaWNhdGlvbi0+cmVwbGFjZUlkKCkgJiYg
ZXhpc3RpbmdOb3RpZmljYXRpb24tPnVybCgpLnByb3RvY29sKCkgPT0gbm90aWZpY2F0aW9uLT51
cmwoKS5wcm90b2NvbCgpICYmIGV4aXN0aW5nTm90aWZpY2F0aW9uLT51cmwoKS5ob3N0KCkgPT0g
bm90aWZpY2F0aW9uLT51cmwoKS5ob3N0KCkpIHsKKyAgICAgICAgICAgIG9sZE5vdGlmaWNhdGlv
biA9IGl0ZXIua2V5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBp
dGVyKys7CisgICAgfQorCisgICAgaWYgKG9sZE5vdGlmaWNhdGlvbikgeworICAgICAgICBpZiAo
ZHVtcE5vdGlmaWNhdGlvbikKKyAgICAgICAgICAgIGR1bXBSZXBsYWNlZElkVGV4dChvbGROb3Rp
ZmljYXRpb24pOworICAgICAgICBzZW5kRXZlbnQob2xkTm90aWZpY2F0aW9uLCBldmVudE5hbWVz
KCkuY2xvc2VFdmVudCk7CisgICAgICAgIE5vdGlmaWNhdGlvbkljb25Mb2FkZXIqIGxvYWRlciA9
IG1fbm90aWZpY2F0aW9uc0xvYWRRdWV1ZS50YWtlKG9sZE5vdGlmaWNhdGlvbik7CisgICAgICAg
IGxvYWRlci0+c3RvcExvYWRpbmcoKTsKKyAgICAgICAgb2xkTm90aWZpY2F0aW9uLT51bnNldFBl
bmRpbmdBY3Rpdml0eShvbGROb3RpZmljYXRpb24pOworICAgIH0KK30KKwogdm9pZCBOb3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdDo6ZHVtcFJlcGxhY2VkSWRUZXh0KE5vdGlmaWNhdGlvbiog
bm90aWZpY2F0aW9uKQogewogICAgIGlmIChub3RpZmljYXRpb24pCkluZGV4OiBXZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50
UXQuaAkocmV2aXNpb24gNjA2MzApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogI2RlZmluZSBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdF9oCiAKICNpbmNsdWRlICJO
b3RpZmljYXRpb24uaCIKKyNpbmNsdWRlICJOb3RpZmljYXRpb25JY29uTG9hZGVyLmgiCiAjaW5j
bHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKIApAQCAt
NTksNiArNjAsNyBAQCBwdWJsaWM6CiB9OwogCiB0eXBlZGVmIFFIYXNoIDxOb3RpZmljYXRpb24q
LCBOb3RpZmljYXRpb25JY29uV3JhcHBlcio+IE5vdGlmaWNhdGlvbnNRdWV1ZTsKK3R5cGVkZWYg
UUhhc2ggPE5vdGlmaWNhdGlvbiosIE5vdGlmaWNhdGlvbkljb25Mb2FkZXIqPiBOb3RpZmljYXRp
b25zTG9hZFF1ZXVlOwogCiBjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCA6IHB1
YmxpYyBOb3RpZmljYXRpb25QcmVzZW50ZXIgewogcHVibGljOgpAQCAtODAsNiArODIsOCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNldFJlY2VpdmVyKFFPYmplY3QqIHJlY2VpdmVyKSB7IG1fcmVj
ZWl2ZXIgPSByZWNlaXZlcjsgfQogCisgICAgdm9pZCBub3RpZmljYXRpb25JY29uTG9hZEZpbmlz
aGVkKE5vdGlmaWNhdGlvbkljb25Mb2FkZXIqLCBjb25zdCBRQnl0ZUFycmF5Jik7CisKICAgICB2
b2lkIGFkZENsaWVudCgpIHsgbV9jbGllbnRDb3VudCsrOyB9CiAgICAgdm9pZCByZW1vdmVDbGll
bnQoKTsKICAgICBzdGF0aWMgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQqIG5vdGlmaWNh
dGlvblByZXNlbnRlcigpOwpAQCAtODcsMTMgKzkxLDE2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgdm9pZCBzZW5kRXZlbnQoTm90aWZpY2F0aW9uKiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dE5hbWUpOwogICAgIHZvaWQgZGlzcGxheU5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24qLCBjb25z
dCBRQnl0ZUFycmF5Jik7CisgICAgdm9pZCBzdGFydExvYWROb3RpZmljYXRpb25JY29uKE5vdGlm
aWNhdGlvbiopOwogICAgIHZvaWQgcmVtb3ZlUmVwbGFjZWROb3RpZmljYXRpb25Gcm9tUXVldWUo
Tm90aWZpY2F0aW9uKik7CisgICAgdm9pZCByZW1vdmVSZXBsYWNlZE5vdGlmaWNhdGlvbkZyb21M
b2FkUXVldWUoTm90aWZpY2F0aW9uKik7CiAgICAgdm9pZCBkdW1wUmVwbGFjZWRJZFRleHQoTm90
aWZpY2F0aW9uKik7CiAgICAgdm9pZCBkdW1wU2hvd1RleHQoTm90aWZpY2F0aW9uKik7CiAKICAg
ICBpbnQgbV9jbGllbnRDb3VudDsKICAgICBRSGFzaDxRU3RyaW5nLCAgUUxpc3Q8UmVmUHRyPFZv
aWRDYWxsYmFjaz4gPiA+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsKICAgICBOb3RpZmlj
YXRpb25zUXVldWUgbV9ub3RpZmljYXRpb25zOworICAgIE5vdGlmaWNhdGlvbnNMb2FkUXVldWUg
bV9ub3RpZmljYXRpb25zTG9hZFF1ZXVlOwogICAgIFFPYmplY3QqIG1fcmVjZWl2ZXI7CiB9Owog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58402</attachid>
            <date>2010-06-10 12:34:05 -0700</date>
            <delta_ts>2010-06-10 16:09:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>40004.patch</filename>
            <type>text/plain</type>
            <size>1499</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNjA5NjcpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMTAgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gU3VwcG9ydCBmb3IgbG9hZGluZyBub3RpZmljYXRpb24gaWNvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDA0CisKKyAgICAg
ICAgVGFrZSBpbnRvIHVzZSB0aGUgaWNvbiB0aGF0IHdhcyBsb2FkZWQgZm9yIHRoZSBub3RpZmlj
YXRpb24uCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6c2hvdyk6CisKIDIwMTAtMDYtMTAgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxr
YXJuaUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCklu
ZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnRRdC5jcHAJKHJldmlzaW9uIDYwOTYzKQorKysgV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAxLDcgKzEwMSwxMSBAQCBib29sIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0OjpzaG93CiAgICAgICAgIHJlbW92ZVJlcGxhY2VkTm90aWZpY2F0aW9uRnJvbVF1ZXVlKG5v
dGlmaWNhdGlvbik7CiAgICAgaWYgKGR1bXBOb3RpZmljYXRpb24pCiAgICAgICAgIGR1bXBTaG93
VGV4dChub3RpZmljYXRpb24pOwotICAgIGRpc3BsYXlOb3RpZmljYXRpb24obm90aWZpY2F0aW9u
LCBRQnl0ZUFycmF5KCkpOworICAgIFFCeXRlQXJyYXkgaWNvbkRhdGE7CisgICAgaWYgKG5vdGlm
aWNhdGlvbi0+aWNvbkRhdGEoKSkKKyAgICAgICAgaWNvbkRhdGEgPSBRQnl0ZUFycmF5Ojpmcm9t
UmF3RGF0YShub3RpZmljYXRpb24tPmljb25EYXRhKCktPmRhdGEoKSwgbm90aWZpY2F0aW9uLT5p
Y29uRGF0YSgpLT5zaXplKCkpOworICAgIGRpc3BsYXlOb3RpZmljYXRpb24obm90aWZpY2F0aW9u
LCBpY29uRGF0YSk7CisgICAgbm90aWZpY2F0aW9uLT5yZWxlYXNlSWNvbkRhdGEoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>
<flag name="review"
          id="43485"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>