<?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>36595</bug_id>
          
          <creation_ts>2010-03-25 06:58:51 -0700</creation_ts>
          <short_desc>Forward DatabaseTracker::canEstablishDatabase to chromium layer.</short_desc>
          <delta_ts>2010-03-29 16:53:47 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter>jochen</reporter>
          <assigned_to>jochen</assigned_to>
          <cc>atwilson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dimich</cc>
    
    <cc>fishd</cc>
    
    <cc>jorlow</cc>
    
    <cc>levin</cc>
    
    <cc>michaeln</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>204023</commentid>
    <comment_count>0</comment_count>
    <who name="">jochen</who>
    <bug_when>2010-03-25 06:58:51 -0700</bug_when>
    <thetext>Forward DatabaseTracker::canEstablishDatabase to chromium layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204024</commentid>
    <comment_count>1</comment_count>
      <attachid>51633</attachid>
    <who name="">jochen</who>
    <bug_when>2010-03-25 06:59:29 -0700</bug_when>
    <thetext>Created attachment 51633
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204027</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-25 07:03:43 -0700</bug_when>
    <thetext>Attachment 51633 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/src/DatabaseObserver.cpp:54:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 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>204031</commentid>
    <comment_count>3</comment_count>
      <attachid>51633</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-25 07:07:38 -0700</bug_when>
    <thetext>Comment on attachment 51633
Patch

r+ from me, but leaving it r? for now to give some others a chance to chime in.

&gt; diff --git a/WebKit/chromium/public/WebFrameClient.h b/WebKit/chromium/public/WebFrameClient.h
&gt; index c6f51b6..5ffc2e3 100644
&gt; --- a/WebKit/chromium/public/WebFrameClient.h
&gt; +++ b/WebKit/chromium/public/WebFrameClient.h
&gt; @@ -1,5 +1,5 @@
&gt;  /*
&gt; - * Copyright (C) 2009 Google Inc. All rights reserved.
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt;   *
&gt;   * Redistribution and use in source and binary forms, with or without
&gt;   * modification, are permitted provided that the following conditions are
&gt; @@ -263,6 +263,9 @@ public:
&gt;      // Controls whether scripts are allowed to execute for this frame.
&gt;      virtual bool allowScript(WebFrame*, bool enabledPerSettings) { return enabledPerSettings; }
&gt;  
&gt; +    // Controls whether access to Web Databases is allowed for this frame.
&gt; +    virtual bool allowDatabase(const WebSecurityOrigin&amp;, const WebString&amp;, const WebString&amp;, unsigned long) { return true; }

If anything, I&apos;d probably default this to false...but do what you think is best.

&gt; +
&gt;      // Notifies the client that the frame would have executed script if script were enabled.
&gt;      virtual void didNotAllowScript(WebFrame*) { }
&gt;  
&gt; diff --git a/WebKit/chromium/src/DatabaseObserver.cpp b/WebKit/chromium/src/DatabaseObserver.cpp
&gt; index 54e93e1..1f13351 100644
&gt; --- a/WebKit/chromium/src/DatabaseObserver.cpp
&gt; +++ b/WebKit/chromium/src/DatabaseObserver.cpp
&gt; @@ -1,5 +1,5 @@
&gt;  /*
&gt; - * Copyright (C) 2009 Google Inc. All rights reserved.
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt;   *
&gt;   * Redistribution and use in source and binary forms, with or without
&gt;   * modification, are permitted provided that the following conditions are
&gt; @@ -32,13 +32,37 @@
&gt;  #include &quot;DatabaseObserver.h&quot;
&gt;  
&gt;  #include &quot;Database.h&quot;
&gt; +#include &quot;Document.h&quot;
&gt; +#include &quot;ScriptExecutionContext.h&quot;
&gt;  #include &quot;WebDatabase.h&quot;
&gt;  #include &quot;WebDatabaseObserver.h&quot;
&gt; +#include &quot;WebFrameClient.h&quot;
&gt; +#include &quot;WebFrameImpl.h&quot;
&gt; +#include &quot;WebSecurityOrigin.h&quot;
&gt; +#include &quot;WebWorkerImpl.h&quot;
&gt; +#include &quot;WorkerContext.h&quot;
&gt; +#include &quot;WorkerThread.h&quot;
&gt;  
&gt;  using namespace WebKit;
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; +bool DatabaseObserver::canEstablishDatabase(ScriptExecutionContext* scriptExecutionContext, const String&amp; name, const String&amp; displayName, unsigned long estimatedSize)
&gt; +{
&gt; +    ASSERT(isMainThread());
&gt; +    ASSERT(scriptExecutionContext-&gt;isDocument() || scriptExecutionContext-&gt;isWorkerContext());
&gt; +    if (scriptExecutionContext-&gt;isDocument()) {
&gt; +        Document* document = static_cast&lt;Document*&gt;(scriptExecutionContext);
&gt; +        WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document-&gt;frame());
&gt; +        return webFrame-&gt;client()-&gt;allowDatabase(WebSecurityOrigin(scriptExecutionContext-&gt;securityOrigin()), name, displayName, estimatedSize);
&gt; +    } else {
&gt; +        WorkerContext* worker = static_cast&lt;WorkerContext*&gt;(scriptExecutionContext);
&gt; +        WorkerLoaderProxy* workerLoaderProxy = &amp;worker-&gt;thread()-&gt;workerLoaderProxy();
&gt; +        WebWorkerImpl* webWorker = reinterpret_cast&lt;WebWorkerImpl*&gt;(workerLoaderProxy);
&gt; +        return webWorker-&gt;allowDatabase(WebSecurityOrigin(scriptExecutionContext-&gt;securityOrigin()), name, displayName, estimatedSize);
&gt; +    }

I don&apos;t know for sure whether this is the proper way to do this.  Seems plausible tho.

&gt; +}
&gt; +
&gt;  void DatabaseObserver::databaseOpened(Database* database)
&gt;  {
&gt;      ASSERT(isMainThread());
&gt; diff --git a/WebKit/chromium/src/WebWorkerBase.h b/WebKit/chromium/src/WebWorkerBase.h
&gt; index 0217401..c50d4a3 100644
&gt; --- a/WebKit/chromium/src/WebWorkerBase.h
&gt; +++ b/WebKit/chromium/src/WebWorkerBase.h
&gt; @@ -1,5 +1,5 @@
&gt;  /*
&gt; - * Copyright (C) 2009 Google Inc. All rights reserved.
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt;   *
&gt;   * Redistribution and use in source and binary forms, with or without
&gt;   * modification, are permitted provided that the following conditions are
&gt; @@ -45,8 +45,11 @@ class WorkerThread;
&gt;  
&gt;  namespace WebKit {
&gt;  class WebCommonWorkerClient;
&gt; +class WebSecurityOrigin;
&gt; +class WebString;
&gt;  class WebURL;
&gt;  class WebView;
&gt; +class WebWorker;
&gt;  class WebWorkerClient;
&gt;  
&gt;  // Base class for WebSharedWorkerImpl and WebWorkerImpl. It contains common
&gt; @@ -77,6 +80,9 @@ public:
&gt;      virtual void postTaskForModeToWorkerContext(
&gt;          PassOwnPtr&lt;WebCore::ScriptExecutionContext::Task&gt;, const WebCore::String&amp; mode);
&gt;  
&gt; +    // Controls whether access to Web Databases is allowed for this worker.
&gt; +    virtual bool allowDatabase(const WebSecurityOrigin&amp;, const WebString&amp;, const WebString&amp;, unsigned long) { return true; }

If anything, I&apos;d probably default this to false...but do what you think is best.

&gt; +
&gt;      // Executes the given task on the main thread.
&gt;      static void dispatchTaskToMainThread(PassOwnPtr&lt;WebCore::ScriptExecutionContext::Task&gt;);
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204053</commentid>
    <comment_count>4</comment_count>
    <who name="">jochen</who>
    <bug_when>2010-03-25 07:42:07 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 51633 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
&gt; WebKit/chromium/src/DatabaseObserver.cpp:54:  An else statement can be removed
&gt; when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.
&gt;  [readability/control_flow] [4]
&gt; Total errors found: 1 in 7 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

it looks so much better this way!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204055</commentid>
    <comment_count>5</comment_count>
    <who name="">jochen</who>
    <bug_when>2010-03-25 07:44:03 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 51633 [details])
&gt; r+ from me, but leaving it r? for now to give some others a chance to chime in.
&gt; 
&gt; &gt; diff --git a/WebKit/chromium/public/WebFrameClient.h b/WebKit/chromium/public/WebFrameClient.h
&gt; &gt; index c6f51b6..5ffc2e3 100644
&gt; &gt; --- a/WebKit/chromium/public/WebFrameClient.h
&gt; &gt; +++ b/WebKit/chromium/public/WebFrameClient.h
&gt; &gt; @@ -1,5 +1,5 @@
&gt; &gt;  /*
&gt; &gt; - * Copyright (C) 2009 Google Inc. All rights reserved.
&gt; &gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; &gt;   *
&gt; &gt;   * Redistribution and use in source and binary forms, with or without
&gt; &gt;   * modification, are permitted provided that the following conditions are
&gt; &gt; @@ -263,6 +263,9 @@ public:
&gt; &gt;      // Controls whether scripts are allowed to execute for this frame.
&gt; &gt;      virtual bool allowScript(WebFrame*, bool enabledPerSettings) { return enabledPerSettings; }
&gt; &gt;  
&gt; &gt; +    // Controls whether access to Web Databases is allowed for this frame.
&gt; &gt; +    virtual bool allowDatabase(const WebSecurityOrigin&amp;, const WebString&amp;, const WebString&amp;, unsigned long) { return true; }
&gt; 
&gt; If anything, I&apos;d probably default this to false...but do what you think is
&gt; best.

The old implementation would return true - this way, other embedders using the chromium layer won&apos;t get bidden by changed behavior.

&gt; 
&gt; &gt; +
&gt; &gt;      // Notifies the client that the frame would have executed script if script were enabled.
&gt; &gt;      virtual void didNotAllowScript(WebFrame*) { }
&gt; &gt;  
&gt; &gt; diff --git a/WebKit/chromium/src/DatabaseObserver.cpp b/WebKit/chromium/src/DatabaseObserver.cpp
&gt; &gt; index 54e93e1..1f13351 100644
&gt; &gt; --- a/WebKit/chromium/src/DatabaseObserver.cpp
&gt; &gt; +++ b/WebKit/chromium/src/DatabaseObserver.cpp
&gt; &gt; @@ -1,5 +1,5 @@
&gt; &gt;  /*
&gt; &gt; - * Copyright (C) 2009 Google Inc. All rights reserved.
&gt; &gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; &gt;   *
&gt; &gt;   * Redistribution and use in source and binary forms, with or without
&gt; &gt;   * modification, are permitted provided that the following conditions are
&gt; &gt; @@ -32,13 +32,37 @@
&gt; &gt;  #include &quot;DatabaseObserver.h&quot;
&gt; &gt;  
&gt; &gt;  #include &quot;Database.h&quot;
&gt; &gt; +#include &quot;Document.h&quot;
&gt; &gt; +#include &quot;ScriptExecutionContext.h&quot;
&gt; &gt;  #include &quot;WebDatabase.h&quot;
&gt; &gt;  #include &quot;WebDatabaseObserver.h&quot;
&gt; &gt; +#include &quot;WebFrameClient.h&quot;
&gt; &gt; +#include &quot;WebFrameImpl.h&quot;
&gt; &gt; +#include &quot;WebSecurityOrigin.h&quot;
&gt; &gt; +#include &quot;WebWorkerImpl.h&quot;
&gt; &gt; +#include &quot;WorkerContext.h&quot;
&gt; &gt; +#include &quot;WorkerThread.h&quot;
&gt; &gt;  
&gt; &gt;  using namespace WebKit;
&gt; &gt;  
&gt; &gt;  namespace WebCore {
&gt; &gt;  
&gt; &gt; +bool DatabaseObserver::canEstablishDatabase(ScriptExecutionContext* scriptExecutionContext, const String&amp; name, const String&amp; displayName, unsigned long estimatedSize)
&gt; &gt; +{
&gt; &gt; +    ASSERT(isMainThread());
&gt; &gt; +    ASSERT(scriptExecutionContext-&gt;isDocument() || scriptExecutionContext-&gt;isWorkerContext());
&gt; &gt; +    if (scriptExecutionContext-&gt;isDocument()) {
&gt; &gt; +        Document* document = static_cast&lt;Document*&gt;(scriptExecutionContext);
&gt; &gt; +        WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document-&gt;frame());
&gt; &gt; +        return webFrame-&gt;client()-&gt;allowDatabase(WebSecurityOrigin(scriptExecutionContext-&gt;securityOrigin()), name, displayName, estimatedSize);
&gt; &gt; +    } else {
&gt; &gt; +        WorkerContext* worker = static_cast&lt;WorkerContext*&gt;(scriptExecutionContext);
&gt; &gt; +        WorkerLoaderProxy* workerLoaderProxy = &amp;worker-&gt;thread()-&gt;workerLoaderProxy();
&gt; &gt; +        WebWorkerImpl* webWorker = reinterpret_cast&lt;WebWorkerImpl*&gt;(workerLoaderProxy);
&gt; &gt; +        return webWorker-&gt;allowDatabase(WebSecurityOrigin(scriptExecutionContext-&gt;securityOrigin()), name, displayName, estimatedSize);
&gt; &gt; +    }
&gt; 
&gt; I don&apos;t know for sure whether this is the proper way to do this.  Seems
&gt; plausible tho.

I&apos;ve copied this more or less from WebWorkerClientImpl::createWorkerContextProxy


&gt; 
&gt; &gt; +}
&gt; &gt; +
&gt; &gt;  void DatabaseObserver::databaseOpened(Database* database)
&gt; &gt;  {
&gt; &gt;      ASSERT(isMainThread());
&gt; &gt; diff --git a/WebKit/chromium/src/WebWorkerBase.h b/WebKit/chromium/src/WebWorkerBase.h
&gt; &gt; index 0217401..c50d4a3 100644
&gt; &gt; --- a/WebKit/chromium/src/WebWorkerBase.h
&gt; &gt; +++ b/WebKit/chromium/src/WebWorkerBase.h
&gt; &gt; @@ -1,5 +1,5 @@
&gt; &gt;  /*
&gt; &gt; - * Copyright (C) 2009 Google Inc. All rights reserved.
&gt; &gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; &gt;   *
&gt; &gt;   * Redistribution and use in source and binary forms, with or without
&gt; &gt;   * modification, are permitted provided that the following conditions are
&gt; &gt; @@ -45,8 +45,11 @@ class WorkerThread;
&gt; &gt;  
&gt; &gt;  namespace WebKit {
&gt; &gt;  class WebCommonWorkerClient;
&gt; &gt; +class WebSecurityOrigin;
&gt; &gt; +class WebString;
&gt; &gt;  class WebURL;
&gt; &gt;  class WebView;
&gt; &gt; +class WebWorker;
&gt; &gt;  class WebWorkerClient;
&gt; &gt;  
&gt; &gt;  // Base class for WebSharedWorkerImpl and WebWorkerImpl. It contains common
&gt; &gt; @@ -77,6 +80,9 @@ public:
&gt; &gt;      virtual void postTaskForModeToWorkerContext(
&gt; &gt;          PassOwnPtr&lt;WebCore::ScriptExecutionContext::Task&gt;, const WebCore::String&amp; mode);
&gt; &gt;  
&gt; &gt; +    // Controls whether access to Web Databases is allowed for this worker.
&gt; &gt; +    virtual bool allowDatabase(const WebSecurityOrigin&amp;, const WebString&amp;, const WebString&amp;, unsigned long) { return true; }
&gt; 
&gt; If anything, I&apos;d probably default this to false...but do what you think is
&gt; best.
&gt; 
&gt; &gt; +
&gt; &gt;      // Executes the given task on the main thread.
&gt; &gt;      static void dispatchTaskToMainThread(PassOwnPtr&lt;WebCore::ScriptExecutionContext::Task&gt;);
&gt; &gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204061</commentid>
    <comment_count>6</comment_count>
      <attachid>51633</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-25 07:52:20 -0700</bug_when>
    <thetext>Comment on attachment 51633
Patch

Oh, well assuming the createWorkerContextProxy code is correct, this should be fine too.  I wonder if it should be factored out so it can be shared, but it seems different enough and they&apos;re in different layers that it&apos;s probably OK to leave it.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204076</commentid>
    <comment_count>7</comment_count>
      <attachid>51633</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-25 08:25:49 -0700</bug_when>
    <thetext>Comment on attachment 51633
Patch

Clearing flags on attachment: 51633

Committed r56548: &lt;http://trac.webkit.org/changeset/56548&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204077</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-25 08:25:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204163</commentid>
    <comment_count>9</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2010-03-25 11:28:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; All reviewed patches have been landed.  Closing bug.

BTW, I suspect that calling ASSERT(isMainThread()) from DatabaseObserver::canEstablishDatabase() will fail when invoked from worker context. So you&apos;ll probably need to remove that assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204372</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-03-25 18:41:55 -0700</bug_when>
    <thetext>&gt; BTW, I suspect that calling ASSERT(isMainThread()) from
&gt; DatabaseObserver::canEstablishDatabase() will fail when invoked from worker
&gt; context. So you&apos;ll probably need to remove that assertion.

What you probably want here is...
ASSERT(scriptContext-&gt;isContextThread());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204868</commentid>
    <comment_count>11</comment_count>
      <attachid>51633</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-26 16:56:33 -0700</bug_when>
    <thetext>Comment on attachment 51633
Patch

&gt; +++ b/WebKit/chromium/public/WebFrameClient.h

&gt;      virtual bool allowScript(WebFrame*, bool enabledPerSettings) { return enabledPerSettings; }
&gt;  
&gt; +    // Controls whether access to Web Databases is allowed for this frame.
&gt; +    virtual bool allowDatabase(const WebSecurityOrigin&amp;, const WebString&amp;, const WebString&amp;, unsigned long) { return true; }

Every method of this interface must start with a WebFrame pointer.

Given a WebFrame pointer, you can get the security origin, so there
is no need for the WebSecurityOrigin parameter.

The WebString and &apos;unsigned long&apos; parameters should be named since
there is no telling from this file what they might mean.  It is
important to document the WebKit API and to do that we leverage
self-documenting variable names whenever possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205374</commentid>
    <comment_count>12</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-29 03:23:01 -0700</bug_when>
    <thetext>Re-opening to reflect the fact that Darin has provided additional comments on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205401</commentid>
    <comment_count>13</comment_count>
    <who name="">jochen</who>
    <bug_when>2010-03-29 04:26:27 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Re-opening to reflect the fact that Darin has provided additional comments on
&gt; this.

I&apos;ve opened #36743 for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205743</commentid>
    <comment_count>14</comment_count>
      <attachid>51633</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2010-03-29 16:53:47 -0700</bug_when>
    <thetext>Comment on attachment 51633
Patch

&gt;
&gt; +        WebWorkerImpl* webWorker = reinterpret_cast&lt;WebWorkerImpl*&gt;(workerLoaderProxy);

I think this line should cast to WebWorkerBase, not WebWorkerImpl since technically the object could be a WebSharedWorkerImpl instead.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51633</attachid>
            <date>2010-03-25 06:59:29 -0700</date>
            <delta_ts>2010-03-29 16:53:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36595-20100325145927.patch</filename>
            <type>text/plain</type>
            <size>8231</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Yzg3MmJmNC4uYjg0ZDQ1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wMy0yNSAgSm9jaGVuIEVpc2lu
Z2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGb3J3YXJkIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNo
RGF0YWJhc2UgdG8gY2hyb21pdW0gbGF5ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNjU5NQorCisgICAgICAgICogc3RvcmFnZS9jaHJvbWl1bS9E
YXRhYmFzZU9ic2VydmVyLmg6CisgICAgICAgICogc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRy
YWNrZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmNh
bkVzdGFibGlzaERhdGFiYXNlKToKKwogMjAxMC0wMy0yNCAgRG1pdHJ5IFRpdG92ICA8ZGltaWNo
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBObyByZXZpZXcsIHJvbGxpbmcgb3V0IHI1NjQ1My4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmgg
Yi9XZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oCmluZGV4IDUzNWMw
ZDIuLjRlMjY2YzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFz
ZU9ic2VydmVyLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2
ZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQpAQCAtMzQsMTEgKzM0LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFi
YXNlOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFN0cmluZzsKIAogLy8g
VGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MgaXMgaW4gdGhlIFdlYktpdCBBUEkgKENo
cm9taXVtIHNvdXJjZSB0cmVlKQotLy8gaW4gd2Via2l0L2FwaS9zcmMvRGF0YWJhc2VPYnNlcnZl
ci5jcHAuCisvLyBpbiBXZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwLgog
Y2xhc3MgRGF0YWJhc2VPYnNlcnZlciB7CiBwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgY2FuRXN0
YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcpOwogICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlT3Bl
bmVkKERhdGFiYXNlKik7CiAgICAgc3RhdGljIHZvaWQgZGF0YWJhc2VNb2RpZmllZChEYXRhYmFz
ZSopOwogICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKik7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3Bw
IGIvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcApp
bmRleCBhYzU4ZTA3Li4xMGI0OGZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvY2hyb21p
dW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9jaHJv
bWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTU3LDExICs1Nyw5IEBAIERhdGFiYXNl
VHJhY2tlcjo6RGF0YWJhc2VUcmFja2VyKCkKICAgICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3Rl
clNRTGl0ZVZGUygpOwogfQogCi1ib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIHVuc2lnbmVkIGxvbmcpCitib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUpCiB7Ci0gICAgLy8gSW4gQ2hyb21pdW0sIGEgZGF0YWJhc2UgY2FuIGFs
d2F5cyBiZSBlc3RhYmxpc2hlZCAoZXZlbiB0aG91Z2ggd2UgbWlnaHQgbm90Ci0gICAgLy8gYmUg
YWJsZSB0byB3cml0ZSBhbnl0aGluZyB0byBpdCBpZiB0aGUgcXVvdGEgZm9yIHRoaXMgb3JpZ2lu
IHdhcyBleGNlZWRlZCkKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gRGF0YWJhc2VPYnNl
cnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbmFtZSwg
ZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6
c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQgbG9uZykKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGM1NjhkMTUuLjU2YjQ5NmMg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEwLTAzLTI1ICBKb2NoZW4gRWlzaW5n
ZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZvcndhcmQgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hE
YXRhYmFzZSB0byBjaHJvbWl1bSBsYXllci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM2NTk1CisKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWVDbGll
bnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVDbGllbnQ6OmFsbG93RGF0YWJhc2UpOgor
ICAgICAgICAqIHNyYy9EYXRhYmFzZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKToKKyAgICAgICAgKiBzcmMvV2Vi
V29ya2VyQmFzZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJCYXNlOjphbGxvd0RhdGFi
YXNlKToKKwogMjAxMC0wMy0yNCAgRG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBObyByZXZpZXcsIHJvbGxpbmcgb3V0IHI1NjQ1My4KZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWVDbGllbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViRnJhbWVDbGllbnQuaAppbmRleCBjNmY1MWI2Li41ZmZjMmUzIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lQ2xpZW50LmgKKysrIGIvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0yNjMsNiArMjYzLDkgQEAgcHVibGljOgog
ICAgIC8vIENvbnRyb2xzIHdoZXRoZXIgc2NyaXB0cyBhcmUgYWxsb3dlZCB0byBleGVjdXRlIGZv
ciB0aGlzIGZyYW1lLgogICAgIHZpcnR1YWwgYm9vbCBhbGxvd1NjcmlwdChXZWJGcmFtZSosIGJv
b2wgZW5hYmxlZFBlclNldHRpbmdzKSB7IHJldHVybiBlbmFibGVkUGVyU2V0dGluZ3M7IH0KIAor
ICAgIC8vIENvbnRyb2xzIHdoZXRoZXIgYWNjZXNzIHRvIFdlYiBEYXRhYmFzZXMgaXMgYWxsb3dl
ZCBmb3IgdGhpcyBmcmFtZS4KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dEYXRhYmFzZShjb25zdCBX
ZWJTZWN1cml0eU9yaWdpbiYsIGNvbnN0IFdlYlN0cmluZyYsIGNvbnN0IFdlYlN0cmluZyYsIHVu
c2lnbmVkIGxvbmcpIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIC8vIE5vdGlmaWVzIHRoZSBjbGll
bnQgdGhhdCB0aGUgZnJhbWUgd291bGQgaGF2ZSBleGVjdXRlZCBzY3JpcHQgaWYgc2NyaXB0IHdl
cmUgZW5hYmxlZC4KICAgICB2aXJ0dWFsIHZvaWQgZGlkTm90QWxsb3dTY3JpcHQoV2ViRnJhbWUq
KSB7IH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVy
LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKaW5kZXggNTRl
OTNlMS4uMWYxMzM1MSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9i
c2VydmVyLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0zMiwxMyArMzIsMzcgQEAKICNpbmNsdWRlICJEYXRhYmFzZU9ic2VydmVyLmgiCiAKICNpbmNs
dWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAi
V2ViRGF0YWJhc2VPYnNlcnZlci5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5j
bHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKKyNp
bmNsdWRlICJXZWJXb3JrZXJJbXBsLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIldvcmtlclRocmVhZC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2Jvb2wgRGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NF
UlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpIHx8IHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRp
Y19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgIFdlYkZy
YW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJh
bWUoKSk7CisgICAgICAgIHJldHVybiB3ZWJGcmFtZS0+Y2xpZW50KCktPmFsbG93RGF0YWJhc2Uo
V2ViU2VjdXJpdHlPcmlnaW4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4o
KSksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXIgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3Jr
ZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXItPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwor
ICAgICAgICBXZWJXb3JrZXJJbXBsKiB3ZWJXb3JrZXIgPSByZWludGVycHJldF9jYXN0PFdlYldv
cmtlckltcGwqPih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAgIHJldHVybiB3ZWJXb3JrZXIt
PmFsbG93RGF0YWJhc2UoV2ViU2VjdXJpdHlPcmlnaW4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
c2VjdXJpdHlPcmlnaW4oKSksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAg
ICB9Cit9CisKIHZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VPcGVuZWQoRGF0YWJhc2Uq
IGRhdGFiYXNlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VyQmFzZS5oCmluZGV4IDAyMTc0MDEuLmM1MGQ0YTMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VyQmFzZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCkBAIC00NSw4ICs0NSwxMSBAQCBjbGFzcyBXb3JrZXJUaHJlYWQ7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50OworY2xhc3MgV2Vi
U2VjdXJpdHlPcmlnaW47CitjbGFzcyBXZWJTdHJpbmc7CiBjbGFzcyBXZWJVUkw7CiBjbGFzcyBX
ZWJWaWV3OworY2xhc3MgV2ViV29ya2VyOwogY2xhc3MgV2ViV29ya2VyQ2xpZW50OwogCiAvLyBC
YXNlIGNsYXNzIGZvciBXZWJTaGFyZWRXb3JrZXJJbXBsIGFuZCBXZWJXb3JrZXJJbXBsLiBJdCBj
b250YWlucyBjb21tb24KQEAgLTc3LDYgKzgwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoCiAgICAgICAgIFBhc3NPd25QdHI8V2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYgbW9kZSk7CiAKKyAgICAvLyBDb250cm9scyB3aGV0aGVyIGFjY2VzcyB0byBXZWIgRGF0YWJh
c2VzIGlzIGFsbG93ZWQgZm9yIHRoaXMgd29ya2VyLgorICAgIHZpcnR1YWwgYm9vbCBhbGxvd0Rh
dGFiYXNlKGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgY29uc3QgV2ViU3RyaW5nJiwgY29uc3Qg
V2ViU3RyaW5nJiwgdW5zaWduZWQgbG9uZykgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgLy8gRXhl
Y3V0ZXMgdGhlIGdpdmVuIHRhc2sgb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHN0YXRpYyB2b2lk
IGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+KTsKIAo=
</data>
<flag name="review"
          id="35146"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>