<?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>34490</bug_id>
          
          <creation_ts>2010-02-02 10:38:18 -0800</creation_ts>
          <short_desc>REGRESSION(r52116): WebCore::ImageEventSender::dispatchPendingEvents() crashes in certain conditions</short_desc>
          <delta_ts>2010-02-10 13:19:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Victor Wang">victorw</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dimich</cc>
    
    <cc>fishd</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin</cc>
    
    <cc>victorw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>187040</commentid>
    <comment_count>0</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-02-02 10:38:18 -0800</bug_when>
    <thetext>This is a big crasher in recent Chromium builds and happens on all platforms (Win, Linux and Mac), no repro steps yet.

Here is the stack Trace:
0x020941e8	 [chrome.dll	 - imageloader.cpp:292]	WebCore::ImageEventSender::dispatchPendingEvents()
0x01f907e0	 [chrome.dll	 - document.cpp:1823]	WebCore::Document::implicitClose()
0x01f9ece9	 [chrome.dll	 - frameloader.cpp:1182]	WebCore::FrameLoader::checkCallImplicitClose()
0x01f9ebfc	 [chrome.dll	 - frameloader.cpp:1130]	WebCore::FrameLoader::checkCompleted()
0x01f9eb41	 [chrome.dll	 - frameloader.cpp:1069]	WebCore::FrameLoader::finishedParsing()
0x01f945e2	 [chrome.dll	 - document.cpp:4184]	WebCore::Document::finishedParsing()
0x02158016	 [chrome.dll	 - htmlparser.cpp:1662]	WebCore::HTMLParser::finished()
0x020b95b8	 [chrome.dll	 - htmltokenizer.cpp:1878]	WebCore::HTMLTokenizer::end()
0x020b982f	 [chrome.dll	 - htmltokenizer.cpp:1918]	WebCore::HTMLTokenizer::finish()
0x01f9eacf	 [chrome.dll	 - frameloader.cpp:972]	WebCore::FrameLoader::endIfNotLoadingMainResource()
0x01f9ea8f	 [chrome.dll	 - frameloader.cpp:957]	WebCore::FrameLoader::end()
0x01fa1a30	 [chrome.dll	 - frameloader.cpp:2752]	WebCore::FrameLoader::finishedLoading()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187047</commentid>
    <comment_count>1</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-02-02 10:46:36 -0800</bug_when>
    <thetext>Looking into the dump, think the crash is caused by the &quot;loader&quot; becomes invalid when ImageEventSender dispatches pending events. 

The crash started a few weeks ago and seems related to webkit patch: http://trac.webkit.org/changeset/52116, which fixes bug 31660: Image load event fires before the document fragment is attached. To fix the issue, the patch (52116) removes ImageLoader::dispatchPendingLoadEvents call from HTMLTokenizer::write() so the load events will be dispatched later.

From the dump, the crash happens in ImageEventSender::dispatchPendingEvents() which is called from HTMLTokenizer::finish(), and it seems that ImageLoader could be destroyed before that and the &quot;loader&quot; in m_dispatchSoonList becomes invalid.

Looking at ImageLoader destructor code, the event is removed from loadEventSender only if m_fireLoad is false. I think we could remove the m_fireLoad check in ImageLoader destructor and this should fix the crashes we are having with Chromium. This should not be Chromium specific issue and think the crash may happen on other browsers too. 

Alexey and Dave,
you touched this code before, any comments on the issue and the change I proposed to remove the check in ImageLoader destructor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187066</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-02 11:15:14 -0800</bug_when>
    <thetext>Such a fix would definitely need a regression test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187406</commentid>
    <comment_count>3</comment_count>
      <attachid>48047</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-02-03 09:46:18 -0800</bug_when>
    <thetext>Created attachment 48047
test case by adding delay to ImageLoader::m_timer in ImageEventSender::dispatchEventSoon()

I was able to catch the crash by adding delay to the timer in ImageEventSender (ImageLoader.cpp) and keep refreshing the page attached. This confirms the theory in comment#1 is correct.

The crash happens if ImageLoader (owned by HTMLImageElement) is destroyed after it has been added to ImageEventSender::m_dispatchSoonList but before the pending load events are dispatched (by timer, HTMLParser::finished etc).

The crash could not be easily repro because of all the timing issues: it depends on the time the ImageLoader timer fires, the time HTMLImageElement is destroyed and collected by GC, the image loading time and the time a new empty image src is sets to existing loader etc.

Removing the image loader from the pending event queue whenever the loader is destroyed fixes the crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187416</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-03 10:04:01 -0800</bug_when>
    <thetext>We can simulate slow loading for test purposes - see e.g. /Users/ap/Safari/OpenSource/LayoutTests/http/tests/misc/resources/slow-png-load.pl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187425</commentid>
    <comment_count>5</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-02-03 10:25:11 -0800</bug_when>
    <thetext>Hi Alexey,

Thanks for your suggestions. While I was repro this, looks like the hardest thing in making a reliable test is the timer in ImageEventSender. It depends on how fast the timer fires after the pending event has been added to the list (see code in ImageEventSender::dispatchEventSoon). There are also other things need to happen at right time such as setting the src in HTMLImageElement to empty (to make ImageLoader::m_firedLoad becomes true) before ImageLoader is destroyed etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187430</commentid>
    <comment_count>6</comment_count>
      <attachid>48051</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-02-03 10:32:23 -0800</bug_when>
    <thetext>Created attachment 48051
Proposed patch

Not sure about a reliable way to test this. This is a big crasher in chromium recent builds. Prefer to commit this first. Filled a bug to figure out reliable test case later: https://bugs.webkit.org/show_bug.cgi?id=34535</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187437</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-03 10:54:42 -0800</bug_when>
    <thetext>&gt; setting the src in HTMLImageElement to
&gt; empty (to make ImageLoader::m_firedLoad becomes true)

Shouldn&apos;t that just cancel pending events?

Without a real test case, it&apos;s still hard for me to tell if the fix is correct, or if it introduces behavior regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187451</commentid>
    <comment_count>8</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-02-03 11:25:03 -0800</bug_when>
    <thetext>Cancelling the pending event removes the loader from m_dispatchSoonList and m_dispatingList if the loader has been destroyed.

The code before patch &quot;http://trac.webkit.org/changeset/49394&quot; actually always removes the loader from the list. David adds this check 4 months ago while he refactored ImageLoader and ImageEventSender in his patch.

David,
Do you see any issue if we always remove the loader from pending event list if the loader is destroyed?

Thanks,
Victor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187599</commentid>
    <comment_count>9</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-02-03 19:20:04 -0800</bug_when>
    <thetext>I don&apos;t think this is specific to Chromium. Victor, have you been able to get a stack trace of this crash in WebKit/mac?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188036</commentid>
    <comment_count>10</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-02-04 17:48:36 -0800</bug_when>
    <thetext>I have been trying hard to make a test, here is how the crash may happen if every step below happens at the right timing:

1. Create a image element, set src to a valid url, add it to document so image starts loading.

2. When image loading finished, ImageLoader::notifyFinished() is called, and it does the following two things:
  2a. adds the image loader to ImageEventSender::m_dispatchSoonListlist.
  2b. starts a one shot 0 interval timer.

3. Set image element src attribute to empty string in JS so ImageLoader::m_firedLoad = true in ImageLoader::setLoadingImage().

4. Delete image element and force GC to collect it.
   In ImageLoader::~ImageLoader(), because m_firedLoad is true, this image loader will be destroyed but not removed from m_dispatchSoonList.

5. ImageEventSender::dispatchPendingEvents() (may be invoked by ImageEventSender::timerFired() or FrameLoader::finishedParsing()) calls
loader-&gt;dispatchPendingLoadEvent(), where &quot;loader&quot; points to an object that has already be destroyed by step 4.

6. Since the loader has be destroyed, loader-&gt;dispatchPendingLoadEvent() may crash.

Here are some timing issues:
ImageLoader::m_firedLoad (step 3) needs to be true before calling ImageLoader destructor and ImageLoader destructor needs to called after step 2a but before step 2b triggers dispatchPendingEvents (step 5). To make sure this happen in sequence, I uses JS setTimeout with a time that guarantees the load will be done, however, this will not make sure step 3 and 4 happens before step 5 and in most case, it won&apos;t because step 2b starts a 0 interval timer, which is likely happens earlier.

Whether step 6 crashes or not also depends what the garbage data left in that address. If it happens that m_firedLoad != 0 or m_image == 0, then it just returns and does nothing.

The patch I proposed removes the deleted ImageLoader object from m_dispatchSoonListlist, and this should avoid possible crash in step 6.

I am not sure how to write a test for it, do you have any suggestions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188102</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-05 00:04:16 -0800</bug_when>
    <thetext>&gt; Whether step 6 crashes or not also depends what the garbage data left in that
&gt; address. If it happens that m_firedLoad != 0 or m_image == 0, then it just
&gt; returns and does nothing.

While making a test, you can run debug WebKit with MallocScribble environment variable set on Mac (see man malloc), making it more likely to crash. Once you get timing right with MallocScribble, you can further tweak the test to overwrite freed memory even without it.

&gt; I am not sure how to write a test for it, do you have any suggestions?

I&apos;ll try to look into this, but probably won&apos;t be able to this week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188193</commentid>
    <comment_count>12</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-02-05 08:50:27 -0800</bug_when>
    <thetext>Sounds good. Let me know what you find out. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188203</commentid>
    <comment_count>13</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-02-05 09:44:26 -0800</bug_when>
    <thetext>Even though the problem is fairly clear by inspection of the code, writing a reliable test here is very hard --  we have to set the order of the message queue just right (see comment 10).

I spent a bit of time with Victor yesterday, trying to buliding &quot;by science&quot;, but as you know, timers code has all kinds of fun things that affect the order of firing, which makes the task excruciating.

Which is why I am asking you guys: what other tips/tricks/tools can we employ here? We replaced the image with the data URL, but that only ensures the first half of the necessary order.

This looks like a frequent renderer crasher in Chromium dev channel, and I have no doubt Safari will have it too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188759</commentid>
    <comment_count>14</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-02-08 14:06:14 -0800</bug_when>
    <thetext>Since this is a crash, any chance we could commit this and use bug 34535 to write the layout test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188815</commentid>
    <comment_count>15</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-02-08 15:59:31 -0800</bug_when>
    <thetext>I added a delay to the timer in ImageLoader and was able to catch DumpRenderTree (win) crash once with debugger attached. Here is the stack:

WebKit.dll!WebCore::Node::attached()  Line 277 + 0x11 bytes	C++
WebKit.dll!WebCore::ImageLoader::dispatchPendingLoadEvent()  Line 228 + 0x12 bytes	C++
WebKit.dll!WebCore::ImageEventSender::dispatchPendingEvents()  Line 294	C++
WebKit.dll!WebCore::ImageEventSender::timerFired(WebCore::Timer&lt;WebCore::ImageEventSender&gt; * __formal=0x035be680)  Line 301	C++
WebKit.dll!WebCore::Timer&lt;WebCore::ImageEventSender&gt;::fired()  Line 98 + 0x23 bytes	C++
WebKit.dll!WebCore::ThreadTimers::sharedTimerFiredInternal()  Line 112 + 0xf bytes	C++
WebKit.dll!WebCore::ThreadTimers::sharedTimerFired()  Line 91	C++
WebKit.dll!WebCore::TimerWindowWndProc(HWND__ * hWnd=0x000c11c4, unsigned int message=49906, unsigned int wParam=0, long lParam=0)  Line 102 + 0x8 bytes	C++
user32.dll!_InternalCallWinProc@20()  + 0x23 bytes	
user32.dll!_UserCallWinProcCheckWow@32()  + 0xb7 bytes	
user32.dll!_DispatchMessageWorker@8()  + 0xee bytes	
user32.dll!_DispatchMessageW@4()  + 0xf bytes	
DumpRenderTree_debug.exe!runTest(const std::basic_string&lt;char,std::char_traits&lt;char&gt;,std::allocator&lt;char&gt; &gt; &amp; testPathOrURL=&quot;d:\workspace\WebKit1\LayoutTests\fast\images\image-loader-crashes.html&quot;)  Line 948 + 0xf bytes	C++
DumpRenderTree_debug.exe!main(int argc=2, char * * argv=0x00589f40)  Line 1289 + 0x28 bytes	C++
DumpRenderTree_debug.exe!__tmainCRTStartup()  Line 597 + 0x17 bytes	C
kernel32.dll!@BaseThreadInitThunk@12()  + 0xe bytes	
ntdll.dll!___RtlUserThreadStart@8()  + 0x23 bytes	
ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes	

Here is what I did:
1. add delay to the timer in ImageEventSender::dispatchEventSoon(): m_timer.startOneShot(0) -&gt; m_timer.startOneShot(10)
2. create a test html (attached)
3. start DRT from debugger. I use DRT so I have more control on GC.
4. crashes may happen at the above stack location if all the timing follows the steps in comment #10.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188816</commentid>
    <comment_count>16</comment_count>
      <attachid>48373</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-02-08 16:01:10 -0800</bug_when>
    <thetext>Created attachment 48373
test html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188920</commentid>
    <comment_count>17</comment_count>
      <attachid>48395</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-09 00:38:30 -0800</bug_when>
    <thetext>Created attachment 48395
work in progress

With this patch applied, lots of existing tests crash on the new assertion. Actually, maybe even too many for it to be good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189042</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-09 08:51:20 -0800</bug_when>
    <thetext>The check is wrong, because ImageLoaders are created as members of other objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189049</commentid>
    <comment_count>19</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-02-09 09:34:05 -0800</bug_when>
    <thetext>Is Victor&apos;s patch incorrect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189144</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-09 13:56:12 -0800</bug_when>
    <thetext>I have a test case that crashes debugs builds reliably - even without any new assertions. It&apos;s even easier to crash with MallocScribble enabled.

Victor&apos;s patch seems correct in that it doesn&apos;t regress behavior, but it introduces unnecessary iteration even when we could know that there are no pending listeners. I&apos;ll try to come up with a patch that doesn&apos;t affect performance in this way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189147</commentid>
    <comment_count>21</comment_count>
      <attachid>48051</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-09 14:26:34 -0800</bug_when>
    <thetext>Comment on attachment 48051
Proposed patch

r- to get this out of review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189188</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-09 17:51:03 -0800</bug_when>
    <thetext>&lt;rdar://problem/7631464&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189189</commentid>
    <comment_count>23</comment_count>
      <attachid>48455</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-09 17:55:05 -0800</bug_when>
    <thetext>Created attachment 48455
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189191</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-09 18:01:30 -0800</bug_when>
    <thetext>Attachment 48455 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/wtf/Vector.h:998:  One line control clauses should not use braces.  [whitespace/braces] [4]
JavaScriptCore/wtf/ValueCheck.h:26:  #ifndef header guard has wrong style, please use: ValueCheck_h  [build/header_guard] [5]
JavaScriptCore/wtf/ValueCheck.h:50:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/ForwardingHeaders/wtf/ValueCheck.h:1:  #ifndef header guard has wrong style, please use: ValueCheck_h  [build/header_guard] [5]
Total errors found: 4


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189440</commentid>
    <comment_count>25</comment_count>
      <attachid>48455</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-02-10 12:17:21 -0800</bug_when>
    <thetext>Comment on attachment 48455
proposed fix

 116         // Callers of this method do not need events dispatched.
 117         if (!m_firedBeforeLoad) {

It&apos;s better if a function comments about what it will do, and not about what its callers will do. Callers are unpredictable.

I&apos;d move this comment to the header declaration of setImage: // Cancels any pending beforeLoad and load events.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189452</commentid>
    <comment_count>26</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-10 13:19:29 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/54618&gt;. Oh, and addressed style bot complaints in r54619.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>48047</attachid>
            <date>2010-02-03 09:46:18 -0800</date>
            <delta_ts>2010-02-03 09:46:18 -0800</delta_ts>
            <desc>test case by adding delay to ImageLoader::m_timer in ImageEventSender::dispatchEventSoon()</desc>
            <filename>image-loader-crashes.html</filename>
            <type>text/html</type>
            <size>664</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5IG9ubG9hZD0idGVzdCgpIj4KPGRpdiBpZD1yZXN1bHQ+PC9kaXY+CjxzY3Jp
cHQ+CgpmdW5jdGlvbiB0ZXN0KCkKewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3Vs
dCIpLmlubmVySFRNTCArPSAiPGJyPnRlc3Qgc3RhcnRlZC4iOwoKICAgIHZhciBpbWdOdW0gPSAx
MDsKICAgIHZhciBpbWdFbGVtZW50cyA9IG5ldyBBcnJheSgpOwogICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBpbWdOdW07IGkrKykgewogICAgICAgIHZhciBpbWdFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaW1nIik7CiAgICAgICAgaW1nRWxlbWVudC5zcmMgPSAiaHR0cDovL3d3dy5n
b29nbGUuY29tL2xvZ29zL3JvY2t3ZWxsMTAtaHAuZ2lmIjsKICAgICAgICBpbWdFbGVtZW50c1tp
XSA9IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nRWxlbWVudCk7CiAgICB9CgogICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBpbWdOdW07IGkrKykgewogICAgICAgIHZhciBpbWdFbGVtZW50ID0g
aW1nRWxlbWVudHNbaV07CiAgICAgICAgaW1nRWxlbWVudC5zcmMgPSAiIjsKICAgIH0KCiAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9ICI8YnI+dGVzdCBl
bmRlZC4iOwp9Cgo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48051</attachid>
            <date>2010-02-03 10:32:23 -0800</date>
            <delta_ts>2010-02-09 14:26:33 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>imageloader</filename>
            <type>text/plain</type>
            <size>2114</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDI4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDItMDMgIFZpY3RvciBXYW5nICA8dmljdG9yd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWx3YXlzIHJlbW92ZSB0aGUgSW1hZ2VMb2FkZXIgZnJvbSBwZW5kaW5nIGV2ZW50IGxpc3Qgd2hl
biBpdCBoYXMgYmUgZGVzdHJveWVkLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNDQ5MAorCisgICAgICAgIFRoaXMgY2hhbmdlIGZpeGVzIGEgSW1h
Z2VMb2FkZXIgY3Jhc2ggdGhhdCBtYXkgaGFwcGVuIGlmIHRoZSBsb2FkZXIKKyAgICAgICAgKG93
bmVkIGJ5IEhUTUxJbWFnZUVsZW1lbnQpIGlzIGRlc3Ryb3llZCBhZnRlciBpdCBoYXMgYmVlbiBh
ZGRlZCB0bworICAgICAgICBJbWFnZUV2ZW50U2VuZGVyIGRpc3BhdGNoU29vbkxpc3QgYnV0IGJl
Zm9yZSB0aGUgcGVuZGluZyBsb2FkIGV2ZW50cworICAgICAgICBhcmUgZGlzcGF0Y2hlZC4gSW4g
dGhpcyBjYXNlLCB0aGUgaW1hZ2UgbG9hZGVyIG1heSBub3QgYWx3YXlzIGJlIHJlbW92ZWQKKyAg
ICAgICAgZnJvbSBJbWFnZUV2ZW50U2VuZGVyIGxpc3QsIHNvIGl0IGNyYWhzZXMgaW4gZGlzcGF0
Y2hQZW5kaW5nRXZlbnRzLgorCisgICAgICAgIE5vIHRlc3QuIEZpbGxlZCBhIGJ1ZyBmb3IgZmln
dXJpbmcgb3V0IGhvdyB0byB0ZXN0IHRoaXMgcmVsaWFibHk6CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDUzNQorCisgICAgICAgIFRoZSBjcmFzaCBo
YXBwZW5zIGluIGEgcmFjaW5nIGNvbmRpdGlvbiwgQWxsIHRoZSBjb25kaXRpb25zIG5lZWQgdG8g
aGFwcGVuCisgICAgICAgIGF0IHJpZ2h0IHRpbWluZzogdGhlIHRpbWUgdGhhdCBJbWFnZUxvYWRl
ciBmaXJlcywgdGhlIHRpbWUgdGhhdAorICAgICAgICBIVE1MSW1hZ2VFbGVtZW50IGlzIGRlc3Ry
b3llZCBhbmQgY29sbGVjdGVkIGJ5IEdDLCBpbWFnZSBsb2FkaW5nIHRpbWUKKyAgICAgICAgYW5k
IHRoZSB0aW1lIHRoYXQgbmV3IGltYWdlIHNyYyBzZXRzIHRvIGVtcHR5IGV0Yy4KKyAgICAgICAg
Tm90IHN1cmUgYWJvdXQgd2hhdCdzIHRoZSByZWxpYWJsZSB0byB0ZXN0IHRoaXMuIEFkZCBhIGJ1
ZyB0byBmaWd1cmUgdGVzdCBsYXRlci4KKworICAgICAgICAqIGxvYWRlci9JbWFnZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6fkltYWdlTG9hZGVyKToKKwogMjAx
MC0wMi0wMiAgQnJ5YW4gWWV1bmcgIDxicnlldW5nQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lv
biA1NDI1OSkKKysrIFdlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsMTAgKzc1LDggQEAgSW1hZ2VMb2FkZXI6On5JbWFnZUxvYWRlcigpCiB7CiAgICAg
aWYgKG1faW1hZ2UpCiAgICAgICAgIG1faW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLSAgICBp
ZiAoIW1fZmlyZWRCZWZvcmVMb2FkKQotICAgICAgICBiZWZvcmVMb2FkRXZlbnRTZW5kZXIoKS5j
YW5jZWxFdmVudCh0aGlzKTsKLSAgICBpZiAoIW1fZmlyZWRMb2FkKQotICAgICAgICBsb2FkRXZl
bnRTZW5kZXIoKS5jYW5jZWxFdmVudCh0aGlzKTsKKyAgICBiZWZvcmVMb2FkRXZlbnRTZW5kZXIo
KS5jYW5jZWxFdmVudCh0aGlzKTsKKyAgICBsb2FkRXZlbnRTZW5kZXIoKS5jYW5jZWxFdmVudCh0
aGlzKTsKIH0KIAogdm9pZCBJbWFnZUxvYWRlcjo6c2V0SW1hZ2UoQ2FjaGVkSW1hZ2UqIG5ld0lt
YWdlKQo=
</data>
<flag name="review"
          id="30664"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>48373</attachid>
            <date>2010-02-08 16:01:10 -0800</date>
            <delta_ts>2010-02-08 16:01:10 -0800</delta_ts>
            <desc>test html</desc>
            <filename>image-loader-crashes.html</filename>
            <type>text/html</type>
            <size>1043</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5IG9ubG9hZD0idGVzdCgpIj4KPGRpdiBpZD1yZXN1bHQ+PC9kaXY+CjxzY3Jp
cHQ+CgppZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7Cn0KCmZ1bmN0aW9uIGdjKCkgew0KICAgaWYgKHRoaXMuR0NDb250cm9sbGVyKQ0KICAg
ICAgIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7DQp9DQoKZnVuY3Rpb24gdGVzdCgpCnsKICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gIjxicj50ZXN0IHN0
YXJ0ZWQuIjsKCiAgICB2YXIgaW1nRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlt
ZyIpOwogICAgaW1nRWxlbWVudC5zcmMgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxo
QVFBQkFJQUFBT1RtN0FBQUFDSDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUNSQUVBT3c9PSI7CiAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltZ0VsZW1lbnQpOwoKICAgIHNldFRpbWVvdXQo
InJlc2V0SW1nU3JjKCkiLCAxMDApOwp9DQoNCmZ1bmN0aW9uIHJlc2V0SW1nU3JjKCkgewogICAg
dmFyIGltZ0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIilbMF07
CiAgICBpbWdFbGVtZW50LnNyYyA9ICIiOwoKICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQo
aW1nRWxlbWVudCk7CiAgICBpbWdFbGVtZW50ID0gMDsKICAgIGdjKCk7DQogICAgZ2MoKTsNCiAg
ICBnYygpOw0KCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1M
ICs9ICI8YnI+dGVzdCBlbmRlZC4iOwoKICAgIHNldFRpbWVvdXQoImRvbmUoKSIsIDIwMDAwKTsK
fQoKZnVuY3Rpb24gZG9uZSgpIHsKICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CiAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwp9Cgo8L3NjcmlwdD4K
PC9ib2R5Pgo8L2h0bWw+Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48395</attachid>
            <date>2010-02-09 00:38:30 -0800</date>
            <delta_ts>2010-02-09 17:55:05 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>CheckVector.txt</filename>
            <type>text/plain</type>
            <size>11714</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTQ0NjMpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00NzUsNiArNDc1LDcgQEAKIAkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpT
U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTI0QThGODBFNTU1Nzc1MDAz
MDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3Ry
aW5nLmNwcCAqLzsgfTsKIAkJRTE3ODYzNkQwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVU
aHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICov
OyB9OworCQlFMTdGRjc3MTExMjEzMUQyMDAwNzZBMTkgLyogVmFsdWVDaGVjay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3RkY3NzAxMTIxMzFEMjAw
MDc2QTE5IC8qIFZhbHVlQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogSlNHbG9iYWxEYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEUz
QTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBKU0dsb2JhbERhdGEuY3BwICovOyB9OwogCQlFMUE4NjJB
OTBEN0VCQjc2MDAxRUM2QUEgLyogQ29sbGF0b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBODYyQTgwRDdFQkI3NjAwMUVDNkFBIC8qIENv
bGxhdG9ySUNVLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLWZuby1zdHJp
Y3QtYWxpYXNpbmciOyB9OyB9OwogCQlFMUE4NjJENjBEN0YyQjVDMDAxRUM2QUEgLyogQ29sbGF0
b3JEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxQTg2MkQ1MEQ3RjJCNUMwMDFFQzZBQSAvKiBDb2xsYXRvckRlZmF1bHQuY3BwICovOyB9
OwpAQCAtOTc5LDYgKzk4MCw3IEBACiAJCUUxMjRBOEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFx
dWVKU1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGFx
dWVKU1N0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNzg2MzNGMEQ5
QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVUaHJlYWRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRp
bmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVRo
cmVhZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxN0ZGNzcwMTEyMTMx
RDIwMDA3NkExOSAvKiBWYWx1ZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZhbHVlQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4RTNBNTYw
REY5Mjc4QzAwRDkwQjM0IC8qIEpTR2xvYmFsRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0dsb2JhbERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIEpTR2xvYmFsRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dsb2JhbERhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMTk1Njc4RjA5RTdDRjEyMDBCODlEMTMgLyogVW5pY29kZUljdS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmljb2RlSWN1Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg2LDYgKzEzODgsNyBAQAogCQkJCTBCMzMwQzI2MEYz
OEM2MjMwMDY5MkRFMyAvKiBUeXBlVHJhaXRzLmNwcCAqLywKIAkJCQkwQjREN0U2MjBGMzE5QUM4
MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oICovLAogCQkJCTkzNUFGNDZCMDlFOUQ5REIwMEFDRDFE
OCAvKiBVbnVzZWRQYXJhbS5oICovLAorCQkJCUUxN0ZGNzcwMTEyMTMxRDIwMDA3NkExOSAvKiBW
YWx1ZUNoZWNrLmggKi8sCiAJCQkJNjU5MkMzMTYwOThCN0RFMTAwMDNENEY2IC8qIFZlY3Rvci5o
ICovLAogCQkJCTY1OTJDMzE3MDk4QjdERTEwMDAzRDRGNiAvKiBWZWN0b3JUcmFpdHMuaCAqLywK
IAkJCQk5NkRENzM3ODBGOURBMzEwMDAyN0ZCQ0MgLyogVk1UYWdzLmggKi8sCkBAIC0yMDU0LDYg
KzIwNTcsNyBAQAogCQkJCTE0MjlEQUJGMEVEMjYzRTcwMEI4OTYxOSAvKiBXUkVDUGFyc2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNjBFRDEyQjRFMDAxRDY0OUYgLyogWDg2QXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNT
dHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTdGRjc3MTExMjEzMUQyMDAwNzZB
MTkgLyogVmFsdWVDaGVjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93
dGYvSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hUYWJs
ZS5oCShyZXZpc2lvbiA1NDQ2MykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiRmFzdE1hbGxvYy5o
IgogI2luY2x1ZGUgIkhhc2hUcmFpdHMuaCIKKyNpbmNsdWRlICJWYWx1ZUNoZWNrLmgiCiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKQEAg
LTEwMjEsNyArMTAyMiw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgQVNTRVJUKGVu
dHJ5ID09IGl0Lm1fcG9zaXRpb24pOwogICAgICAgICAgICAgKytjb3VudDsKIAotICAgICAgICAg
ICAgS2V5VHJhaXRzOjpjaGVja1ZhbHVlQ29uc2lzdGVuY3koaXQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShpdC0+Zmlyc3QpOwogICAgICAg
ICB9CiAKICAgICAgICAgQVNTRVJUKGNvdW50ID09IG1fa2V5Q291bnQpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvd3RmL0hhc2hUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93
dGYvSGFzaFRyYWl0cy5oCShyZXZpc2lvbiA1NDQ2MykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9I
YXNoVHJhaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiw2IEBACiAjaW5jbHVkZSA8
dXRpbGl0eT4KICNpbmNsdWRlIDxsaW1pdHM+CiAKLS8vIEZvciBtYWxsb2Nfc2l6ZSBhbmQgX21z
aXplLgotI2lmIE9TKERBUldJTikKLSNpbmNsdWRlIDxtYWxsb2MvbWFsbG9jLmg+Ci0jZWxpZiBD
T01QSUxFUihNU1ZDKQotI2luY2x1ZGUgPG1hbGxvYy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBX
VEYgewogCiAgICAgdXNpbmcgc3RkOjpwYWlyOwpAQCAtNTgsNyArNTEsNiBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgR2VuZXJpY0hhc2hUcmFpdHMg
OiBHZW5lcmljSGFzaFRyYWl0c0Jhc2U8SXNJbnRlZ2VyPFQ+Ojp2YWx1ZSwgVD4gewogICAgICAg
ICB0eXBlZGVmIFQgVHJhaXRUeXBlOwogICAgICAgICBzdGF0aWMgVCBlbXB0eVZhbHVlKCkgeyBy
ZXR1cm4gVCgpOyB9Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVmFsdWVDb25zaXN0ZW5jeShj
b25zdCBUJikgeyB9CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBI
YXNoVHJhaXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8VD4geyB9OwpAQCAtODcsMTkgKzc5LDYgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSBmYWxzZTsKICAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFAq
JiBzbG90KSB7IHNsb3QgPSByZWludGVycHJldF9jYXN0PFAqPigtMSk7IH0KICAgICAgICAgc3Rh
dGljIGJvb2wgaXNEZWxldGVkVmFsdWUoUCogdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IHJlaW50
ZXJwcmV0X2Nhc3Q8UCo+KC0xKTsgfQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgc3Rh
dGljIHZvaWQgY2hlY2tWYWx1ZUNvbnNpc3RlbmN5KGNvbnN0IFAqIHApCi0gICAgICAgIHsKLSNp
ZiAoZGVmaW5lZChVU0VfU1lTVEVNX01BTExPQykgJiYgVVNFX1NZU1RFTV9NQUxMT0MpIHx8ICFk
ZWZpbmVkKE5ERUJVRykKLSNpZiBPUyhEQVJXSU4pCi0gICAgICAgICAgICBBU1NFUlQobWFsbG9j
X3NpemUocCkpOwotI2VsaWYgQ09NUElMRVIoTVNWQykKLSAgICAgICAgICAgIEFTU0VSVChfbXNp
emUoY29uc3RfY2FzdDxQKj4ocCkpKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgICAgICAgICBIYXNo
VHJhaXRzPFA+OjpjaGVja1ZhbHVlQ29uc2lzdGVuY3koKnApOwotICAgICAgICB9Ci0jZW5kaWYK
ICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IEhhc2hUcmFpdHM8UmVm
UHRyPFA+ID4gOiBHZW5lcmljSGFzaFRyYWl0czxSZWZQdHI8UD4gPiB7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS93dGYvVmFsdWVDaGVjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0
Zi9WYWx1ZUNoZWNrLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvVmFsdWVD
aGVjay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFsdWVUcmFpdHNfaAorI2RlZmlu
ZSBWYWx1ZVRyYWl0c19oCisKKy8vIEZvciBtYWxsb2Nfc2l6ZSBhbmQgX21zaXplLgorI2lmIE9T
KERBUldJTikKKyNpbmNsdWRlIDxtYWxsb2MvbWFsbG9jLmg+CisjZWxpZiBDT01QSUxFUihNU1ZD
KQorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgVmFsdWVDaGVjayB7CisgICAgdHlwZWRlZiBUIFRyYWl0
VHlwZTsKKyAgICBzdGF0aWMgdm9pZCBjaGVja0NvbnNpc3RlbmN5KGNvbnN0IFQmKSB7IH0KK307
CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgVmFs
dWVDaGVjazxQKj4geworICAgIHR5cGVkZWYgUCogVHJhaXRUeXBlOworICAgIHN0YXRpYyB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koY29uc3QgUCogcCkKKyAgICB7CisgICAgICAgIGlmICghcCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyNpZiAoZGVmaW5lZChVU0VfU1lTVEVNX01BTExPQykgJiYgVVNF
X1NZU1RFTV9NQUxMT0MpIHx8ICFkZWZpbmVkKE5ERUJVRykKKyNpZiBPUyhEQVJXSU4pCisgICAg
ICAgIEFTU0VSVChtYWxsb2Nfc2l6ZShwKSk7CisjZWxpZiBDT01QSUxFUihNU1ZDKQorICAgICAg
ICBBU1NFUlQoX21zaXplKGNvbnN0X2Nhc3Q8UCo+KHApKSk7CisjZW5kaWYKKyNlbmRpZgorICAg
ICAgICBWYWx1ZUNoZWNrPFA+OjpjaGVja0NvbnNpc3RlbmN5KCpwKTsKKyAgICB9Cit9OworI2Vu
ZGlmCisKK30KKworI2VuZGlmIC8vIFZhbHVlVHJhaXRzX2gKClByb3BlcnR5IGNoYW5nZXMgb246
IEphdmFTY3JpcHRDb3JlL3d0Zi9WYWx1ZUNoZWNrLmgKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVv
bC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDU0NDYz
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw3IEBACiAjaW5jbHVkZSAiRmFzdEFsbG9jQmFzZS5oIgogI2luY2x1ZGUgIk5vbmNvcHlh
YmxlLmgiCiAjaW5jbHVkZSAiTm90Rm91bmQuaCIKKyNpbmNsdWRlICJWYWx1ZUNoZWNrLmgiCiAj
aW5jbHVkZSAiVmVjdG9yVHJhaXRzLmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHV0
aWxpdHk+CkBAIC01ODYsNiArNTg3LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBt
X2J1ZmZlci5zd2FwKG90aGVyLm1fYnVmZmVyKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQg
Y2hlY2tDb25zaXN0ZW5jeSgpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBleHBhbmRD
YXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkpOwogICAgICAgICBjb25zdCBUKiBleHBhbmRD
YXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIGNvbnN0IFQqKTsKQEAgLTk4Nyw2ICs5OTAs
MTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eT46OmNoZWNrQ29uc2lzdGVuY3koKQorICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIFZhbHVlQ2hlY2s8VD46OmNoZWNrQ29uc2lzdGVuY3koYXQoaSkpOworICAgICAgICB9Cisj
ZW5kaWYKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+CiAgICAgdm9pZCBkZWxldGVBbGxWYWx1ZXMoY29uc3QgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5PiYgY29sbGVjdGlvbikKICAgICB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CkBAIC0xMDE2
LDYgKzEwMjksMTUgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHJldHVybiAhKGEgPT0gYik7
CiAgICAgfQogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBWYWx1ZUNoZWNrPFZlY3RvcjxUPiA+IHsKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8
VD4gVHJhaXRUeXBlOworICAgICAgICBzdGF0aWMgdm9pZCBjaGVja0NvbnNpc3RlbmN5KGNvbnN0
IFZlY3RvcjxUPiYgdikKKyAgICAgICAgeworICAgICAgICAgICAgdi5jaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgICAgIH0KKyAgICB9OworI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCklu
ZGV4OiBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvVmFsdWVDaGVjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9WYWx1ZUNo
ZWNrLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvVmFsdWVDaGVjay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVmFsdWVDaGVjay5oPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogSmF2YVNjcmlw
dEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1ZhbHVlQ2hlY2suaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93dGYvVmFsdWVDaGVjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvd3RmL1ZhbHVlQ2hlY2suaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL1ZhbHVlQ2hlY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisj
aWZuZGVmIFdlYkNvcmVfRldEX1ZhbHVlQ2hlY2tfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9WYWx1
ZUNoZWNrX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WYWx1ZUNoZWNrLmg+CisjZW5kaWYK
ClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1ZhbHVl
Q2hlY2suaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gNTQ0NjMpCisrKyBXZWJDb3JlL2xvYWRl
ci9JbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw2ICsyODIsOCBAQCB2b2lk
IEltYWdlRXZlbnRTZW5kZXI6OmRpc3BhdGNoUGVuZGluZ0V2CiAKICAgICBtX3RpbWVyLnN0b3Ao
KTsKIAorICAgIG1fZGlzcGF0Y2hTb29uTGlzdC5jaGVja0NvbnNpc3RlbmN5KCk7CisKICAgICBt
X2Rpc3BhdGNoaW5nTGlzdC5zd2FwKG1fZGlzcGF0Y2hTb29uTGlzdCk7CiAgICAgc2l6ZV90IHNp
emUgPSBtX2Rpc3BhdGNoaW5nTGlzdC5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKSW5kZXg6IFdlYktpdC9tYWMvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1Zh
bHVlQ2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0ZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9WYWx1ZUNoZWNrLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvbWFjL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9WYWx1ZUNoZWNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL1ZhbHVlQ2hlY2suaD4KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktp
dC9tYWMvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1ZhbHVlQ2hlY2suaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48455</attachid>
            <date>2010-02-09 17:55:05 -0800</date>
            <delta_ts>2010-02-10 12:17:20 -0800</delta_ts>
            <desc>proposed fix</desc>
            <filename>ImageLoader.txt</filename>
            <type>text/plain</type>
            <size>24766</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0NTc0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDItMDkgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0NDkwCisgICAgICAgIFdlYkNvcmU6OkltYWdlRXZlbnRTZW5kZXI6OmRpc3BhdGNoUGVu
ZGluZ0V2ZW50cygpIGNyYXNoZXMgaW4gY2VydGFpbiBjb25kaXRpb25zCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGRlZCBWYWx1ZUNo
ZWNrLmguCisKKyAgICAgICAgKiB3dGYvVmFsdWVDaGVjay5oOiBBZGRlZC4gTW92ZWQgY29kZSBv
dXQgb2YgSGFzaFRyYWl0cywgc2luY2UgaXQgd291bGQgYmUgYXdrd2FyZCB0bworICAgICAgICBp
bmNsdWRlIHRoYXQgZnJvbSBWZWN0b3IuaC4KKyAgICAgICAgKFdURjo6VmFsdWVDaGVjazo6Y2hl
Y2tDb25zaXN0ZW5jeSk6IEFsbG93IG51bGwgcG9pbnRlcnMsIHRob3NlIGFyZSBwcmV0dHkgY29u
c2lzdGVudC4KKworICAgICAgICAqIHd0Zi9IYXNoVHJhaXRzLmg6IE1vdmVkIHZhbHVlIGNoZWNr
aW5nIGNvZGUgb3V0IG9mIGhlcmUuCisKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6IChXVEY6
Ojo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6IFVwZGF0ZWQgZm9yIHRoZSBhYm92
ZSBjaGFuZ2VzLgorCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RGOjo6OmNo
ZWNrQ29uc2lzdGVuY3kpOiBDaGVjayBhbGwgdmVjdG9yIGVsZW1lbnRzLgorICAgICAgICAoV1RG
OjpWYWx1ZUNoZWNrKTogU3VwcG9ydCBjaGVja2luZyBhIFZlY3RvciBhcyBhbiBlbGVtZW50IGlu
IG90aGVyIGNvbnRhaW5lcnMuIEN1cnJlbnRseQorICAgICAgICB1bnVzZWQuCisKIDIwMTAtMDIt
MDkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1NDU1
NikKKysrIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODksNiArMjg5LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENv
cmUvd3RmL1R5cGVUcmFpdHMuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvVHlwZVRyYWl0cy5o
IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvVW51c2VkUGFyYW0uaCBcCisJSmF2YVNjcmlwdENvcmUv
d3RmL1ZhbHVlQ2hlY2suaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oIFwKIAlKYXZh
U2NyaXB0Q29yZS93dGYvVmVjdG9yVHJhaXRzLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9ndGsv
R093blB0ci5jcHAgXApJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lv
biA1NDU1NikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0MSw2ICs0NDEsNyBAQAogICAgICAgICAgICAgJ3d0Zi91bmljb2RlL1VURjgu
Y3BwJywKICAgICAgICAgICAgICd3dGYvdW5pY29kZS9VVEY4LmgnLAogICAgICAgICAgICAgJ3d0
Zi9VbnVzZWRQYXJhbS5oJywKKyAgICAgICAgICAgICd3dGYvVmFsdWVDaGVjay5oJywKICAgICAg
ICAgICAgICd3dGYvVmVjdG9yLmgnLAogICAgICAgICAgICAgJ3d0Zi9WZWN0b3JUcmFpdHMuaCcs
CiAgICAgICAgICAgICAnd3RmL1ZNVGFncy5oJywKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDU0NTU2
KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC01NDUsNiArNTQ1LDEwIEBACiAJCQk+DQogCQk8L0ZpbGU+DQog
CQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFZhbHVlQ2hlY2suaCINCisJCQk+
DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFZlY3Rv
ci5oIg0KIAkJCT4NCiAJCTwvRmlsZT4NCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU0
NTU2KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDc1LDYgKzQ3NSw3IEBACiAJCUUxMjRBOEY3MEU1
NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1
ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY2MEU1NTU3
NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi87IH07CiAJCUUxNzg2MzZEMEQ5QkVF
QzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJ
bml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLzsgfTsKKwkJRTE3RkY3NzExMTIxMzFEMjAwMDc2QTE5
IC8qIFZhbHVlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxN0ZGNzcwMTEyMTMxRDIwMDA3NkExOSAvKiBWYWx1ZUNoZWNrLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE4RTNBNTkwREY5Mjc4
QzAwRDkwQjM0IC8qIEpTR2xvYmFsRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogSlNHbG9iYWxE
YXRhLmNwcCAqLzsgfTsKIAkJRTFBODYyQTkwRDdFQkI3NjAwMUVDNkFBIC8qIENvbGxhdG9ySUNV
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTg2
MkE4MEQ3RUJCNzYwMDFFQzZBQSAvKiBDb2xsYXRvcklDVS5jcHAgKi87IHNldHRpbmdzID0ge0NP
TVBJTEVSX0ZMQUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKIAkJRTFBODYyRDYw
RDdGMkI1QzAwMUVDNkFBIC8qIENvbGxhdG9yRGVmYXVsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUE4NjJENTBEN0YyQjVDMDAxRUM2QUEgLyog
Q29sbGF0b3JEZWZhdWx0LmNwcCAqLzsgfTsKQEAgLTk3OSw2ICs5ODAsNyBAQAogCQlFMTI0QThG
NjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT3BhcXVlSlNTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTc4NjMzRjBEOUJFQzAwMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVh
ZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplVGhyZWFk
aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3
NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEluaXRpYWxpemVUaHJlYWRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMTdGRjc3MDExMjEzMUQyMDAwNzZBMTkgLyogVmFsdWVDaGVjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBKU0dsb2JhbERhdGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxEYXRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBKU0ds
b2JhbERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9i
YWxEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE5NTY3OEYwOUU3Q0Yx
MjAwQjg5RDEzIC8qIFVuaWNvZGVJY3UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVW5pY29kZUljdS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM4Niw2ICsx
Mzg4LDcgQEAKIAkJCQkwQjMzMEMyNjBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAg
Ki8sCiAJCQkJMEI0RDdFNjIwRjMxOUFDODAwQUQ3RTU4IC8qIFR5cGVUcmFpdHMuaCAqLywKIAkJ
CQk5MzVBRjQ2QjA5RTlEOURCMDBBQ0QxRDggLyogVW51c2VkUGFyYW0uaCAqLywKKwkJCQlFMTdG
Rjc3MDExMjEzMUQyMDAwNzZBMTkgLyogVmFsdWVDaGVjay5oICovLAogCQkJCTY1OTJDMzE2MDk4
QjdERTEwMDAzRDRGNiAvKiBWZWN0b3IuaCAqLywKIAkJCQk2NTkyQzMxNzA5OEI3REUxMDAwM0Q0
RjYgLyogVmVjdG9yVHJhaXRzLmggKi8sCiAJCQkJOTZERDczNzgwRjlEQTMxMDAwMjdGQkNDIC8q
IFZNVGFncy5oICovLApAQCAtMjA1NCw2ICsyMDU3LDcgQEAKIAkJCQkxNDI5REFCRjBFRDI2M0U3
MDBCODk2MTkgLyogV1JFQ1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY4OENCMTYwRUQx
MkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFODU1
MzkxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRTE3RkY3NzExMTIxMzFEMjAwMDc2QTE5IC8qIFZhbHVlQ2hlY2suaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gNTQ1NTYpCisrKyBKYXZhU2Ny
aXB0Q29yZS93dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAK
IAogI2luY2x1ZGUgIkZhc3RNYWxsb2MuaCIKICNpbmNsdWRlICJIYXNoVHJhaXRzLmgiCisjaW5j
bHVkZSAiVmFsdWVDaGVjay5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogCkBAIC0xMDIxLDcgKzEwMjIsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0aW9uKTsKICAgICAgICAg
ICAgICsrY291bnQ7CiAKLSAgICAgICAgICAgIEtleVRyYWl0czo6Y2hlY2tWYWx1ZUNvbnNpc3Rl
bmN5KGl0LT5maXJzdCk7CisgICAgICAgICAgICBWYWx1ZUNoZWNrPEtleT46OmNoZWNrQ29uc2lz
dGVuY3koaXQtPmZpcnN0KTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChjb3VudCA9PSBt
X2tleUNvdW50KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVHJhaXRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hUcmFpdHMuaAkocmV2aXNpb24gNTQ1NTYp
CisrKyBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxMyArMjYsNiBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8bGltaXRzPgogCi0v
LyBGb3IgbWFsbG9jX3NpemUgYW5kIF9tc2l6ZS4KLSNpZiBPUyhEQVJXSU4pCi0jaW5jbHVkZSA8
bWFsbG9jL21hbGxvYy5oPgotI2VsaWYgQ09NUElMRVIoTVNWQykKLSNpbmNsdWRlIDxtYWxsb2Mu
aD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHVzaW5nIHN0ZDo6cGFpcjsKQEAg
LTU4LDcgKzUxLDYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEdlbmVyaWNIYXNoVHJhaXRzIDogR2VuZXJpY0hhc2hUcmFpdHNCYXNlPElzSW50ZWdl
cjxUPjo6dmFsdWUsIFQ+IHsKICAgICAgICAgdHlwZWRlZiBUIFRyYWl0VHlwZTsKICAgICAgICAg
c3RhdGljIFQgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIFQoKTsgfQotICAgICAgICBzdGF0aWMgdm9p
ZCBjaGVja1ZhbHVlQ29uc2lzdGVuY3koY29uc3QgVCYpIHsgfQogICAgIH07CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0cyA6IEdlbmVyaWNIYXNoVHJhaXRzPFQ+
IHsgfTsKQEAgLTg3LDE5ICs3OSw2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CiAgICAgICAgIHN0YXRpYyB2b2lk
IGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShQKiYgc2xvdCkgeyBzbG90ID0gcmVpbnRlcnByZXRfY2Fz
dDxQKj4oLTEpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKFAqIHZhbHVl
KSB7IHJldHVybiB2YWx1ZSA9PSByZWludGVycHJldF9jYXN0PFAqPigtMSk7IH0KLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi0gICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVmFsdWVDb25zaXN0ZW5jeShj
b25zdCBQKiBwKQotICAgICAgICB7Ci0jaWYgKGRlZmluZWQoVVNFX1NZU1RFTV9NQUxMT0MpICYm
IFVTRV9TWVNURU1fTUFMTE9DKSB8fCAhZGVmaW5lZChOREVCVUcpCi0jaWYgT1MoREFSV0lOKQot
ICAgICAgICAgICAgQVNTRVJUKG1hbGxvY19zaXplKHApKTsKLSNlbGlmIENPTVBJTEVSKE1TVkMp
Ci0gICAgICAgICAgICBBU1NFUlQoX21zaXplKGNvbnN0X2Nhc3Q8UCo+KHApKSk7Ci0jZW5kaWYK
LSNlbmRpZgotICAgICAgICAgICAgSGFzaFRyYWl0czxQPjo6Y2hlY2tWYWx1ZUNvbnNpc3RlbmN5
KCpwKTsKLSAgICAgICAgfQotI2VuZGlmCiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFA+IHN0cnVjdCBIYXNoVHJhaXRzPFJlZlB0cjxQPiA+IDogR2VuZXJpY0hhc2hUcmFpdHM8UmVm
UHRyPFA+ID4gewpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1ZhbHVlQ2hlY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvVmFsdWVDaGVjay5oCShyZXZpc2lvbiAwKQorKysg
SmF2YVNjcmlwdENvcmUvd3RmL1ZhbHVlQ2hlY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFZhbHVlVHJhaXRzX2gKKyNkZWZpbmUgVmFsdWVUcmFpdHNfaAorCisvLyBGb3IgbWFsbG9j
X3NpemUgYW5kIF9tc2l6ZS4KKyNpZiBPUyhEQVJXSU4pCisjaW5jbHVkZSA8bWFsbG9jL21hbGxv
Yy5oPgorI2VsaWYgQ09NUElMRVIoTVNWQykKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFZhbHVlQ2hl
Y2sgeworICAgIHR5cGVkZWYgVCBUcmFpdFR5cGU7CisgICAgc3RhdGljIHZvaWQgY2hlY2tDb25z
aXN0ZW5jeShjb25zdCBUJikgeyB9Cit9OworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAordGVtcGxh
dGU8dHlwZW5hbWUgUD4gc3RydWN0IFZhbHVlQ2hlY2s8UCo+IHsKKyAgICB0eXBlZGVmIFAqIFRy
YWl0VHlwZTsKKyAgICBzdGF0aWMgdm9pZCBjaGVja0NvbnNpc3RlbmN5KGNvbnN0IFAqIHApCisg
ICAgeworICAgICAgICBpZiAoIXApCisgICAgICAgICAgICByZXR1cm47CisjaWYgKGRlZmluZWQo
VVNFX1NZU1RFTV9NQUxMT0MpICYmIFVTRV9TWVNURU1fTUFMTE9DKSB8fCAhZGVmaW5lZChOREVC
VUcpCisjaWYgT1MoREFSV0lOKQorICAgICAgICBBU1NFUlQobWFsbG9jX3NpemUocCkpOworI2Vs
aWYgQ09NUElMRVIoTVNWQykKKyAgICAgICAgQVNTRVJUKF9tc2l6ZShjb25zdF9jYXN0PFAqPihw
KSkpOworI2VuZGlmCisjZW5kaWYKKyAgICAgICAgVmFsdWVDaGVjazxQPjo6Y2hlY2tDb25zaXN0
ZW5jeSgqcCk7CisgICAgfQorfTsKKyNlbmRpZgorCit9CisKKyNlbmRpZiAvLyBWYWx1ZVRyYWl0
c19oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBKYXZhU2NyaXB0Q29yZS93dGYvVmFsdWVDaGVjay5o
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYv
VmVjdG9yLmgJKHJldmlzaW9uIDU0NTU2KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiRmFzdEFsbG9jQmFz
ZS5oIgogI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCiAjaW5jbHVkZSAiTm90Rm91bmQuaCIKKyNp
bmNsdWRlICJWYWx1ZUNoZWNrLmgiCiAjaW5jbHVkZSAiVmVjdG9yVHJhaXRzLmgiCiAjaW5jbHVk
ZSA8bGltaXRzPgogI2luY2x1ZGUgPHV0aWxpdHk+CkBAIC01ODYsNiArNTg3LDggQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgICAgICBtX2J1ZmZlci5zd2FwKG90aGVyLm1fYnVmZmVyKTsKICAg
ICAgICAgfQogCisgICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpOworCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdm9pZCBleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkpOwog
ICAgICAgICBjb25zdCBUKiBleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIGNv
bnN0IFQqKTsKQEAgLTk4Nyw2ICs5OTAsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGlu
ZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrQ29uc2lzdGVuY3koKQorICAg
IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFZhbHVlQ2hlY2s8VD46OmNoZWNrQ29uc2lzdGVu
Y3koYXQoaSkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICAgdm9pZCBkZWxldGVBbGxWYWx1ZXMo
Y29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgY29sbGVjdGlvbikKICAgICB7CiAgICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6Y29uc3RfaXRl
cmF0b3IgaXRlcmF0b3I7CkBAIC0xMDE2LDYgKzEwMjksMTUgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIHJldHVybiAhKGEgPT0gYik7CiAgICAgfQogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBWYWx1ZUNoZWNrPFZlY3RvcjxUPiA+IHsK
KyAgICAgICAgdHlwZWRlZiBWZWN0b3I8VD4gVHJhaXRUeXBlOworICAgICAgICBzdGF0aWMgdm9p
ZCBjaGVja0NvbnNpc3RlbmN5KGNvbnN0IFZlY3RvcjxUPiYgdikKKyAgICAgICAgeworICAgICAg
ICAgICAgdi5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIH0KKyAgICB9OworI2VuZGlmCiAK
IH0gLy8gbmFtZXNwYWNlIFdURgogCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NDU3NCkKKysr
IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDEwLTAyLTA5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQ5MAorICAgICAgICBXZWJDb3JlOjpJbWFnZUV2
ZW50U2VuZGVyOjpkaXNwYXRjaFBlbmRpbmdFdmVudHMoKSBjcmFzaGVzIGluIGNlcnRhaW4gY29u
ZGl0aW9ucworCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1ZhbHVlQ2hlY2suaDog
QWRkZWQuCisKIDIwMTAtMDItMDQgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9G
b3J3YXJkaW5nSGVhZGVycy93dGYvVmFsdWVDaGVjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9WYWx1ZUNoZWNrLmgJKHJldmlzaW9uIDApCisr
KyBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvVmFsdWVDaGVjay5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVmFsdWVDaGVj
ay5oPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRl
cnMvd3RmL1ZhbHVlQ2hlY2suaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBu
YXRpdmUKCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gNTQ1NzQpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDEwLTAyLTA5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQ5MAorICAg
ICAgICBXZWJDb3JlOjpJbWFnZUV2ZW50U2VuZGVyOjpkaXNwYXRjaFBlbmRpbmdFdmVudHMoKSBj
cmFzaGVzIGluIGNlcnRhaW4gY29uZGl0aW9ucworCisgICAgICAgIFRlc3Q6IGZhc3QvaW1hZ2Vz
L2Rlc3Ryb3llZC1pbWFnZS1sb2FkLWV2ZW50Lmh0bWwKKworICAgICAgICAqIEZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9WYWx1ZUNoZWNrLmg6IEFkZGVkLgorCisgICAgICAgICogbG9hZGVyL0ltYWdl
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdURjo6VmFsdWVDaGVjayk6IFNwZWNpYWwgY2FzZSB2YWx1
ZSBjaGVjayBmb3IgSW1hZ2VMb2FkZXIgLSBpdCdzIGFsbG9jYXRlZCBpbnNpZGUgZWxlbWVudHMs
CisgICAgICAgIHNvIGNoZWNrIHRoZSBvd25lciBpbnN0ZWFkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VFdmVudFNlbmRlcjo6aGFzUGVuZGluZ0V2ZW50cyk6IEFkZGVkIGEgZGVidWdnaW5nIGFp
ZCBmb3IgSW1hZ2VMb2FkZXIgZGVzdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTG9h
ZGVyOjp+SW1hZ2VMb2FkZXIpOiBBc3NlcnQgdGhhdCB3ZSdyZSBub3QgZ29pbmcgdG8gbGVhdmUg
ZGFuZ2xpbmcgcG9pbnRlcnMKKyAgICAgICAgaW4gSW1hZ2VFdmVudFNlbmRlci4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTG9hZGVyOjpzZXRJbWFnZSk6IENhbmNlbCBldmVudHMgdGhhdCBjb3Vs
ZCBiZSBkaXNwYXRjaGVkIGZvciB0aGUgcHJldmlvdXMKKyAgICAgICAgaW1hZ2UuIFRoZSBvbmx5
IGNsaWVudCB1c2luZyB0aGlzIG1ldGhvZCB0aGF0IEkgY291bGQgZmluZCB3YXMgRGVsZXRlQnV0
dG9uLCB3aGljaCBkb2Vzbid0CisgICAgICAgIGNhcmUgYWJvdXQgbG9hZCBldmVudHMgZm9yIHRo
ZSBuZXcgaW1hZ2UsIHNvIEkgZGlkbid0IGFkZCBhbnkgY29kZSBmb3IgZmlyaW5nIHRob3NlLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6OnNldExvYWRpbmdJbWFnZSk6IFRoaXMgbWV0
aG9kIG9ubHkgZXhpc3RlZCB0byBjb25mdXNlIHJlYWRlcnMgLQorICAgICAgICB0aGVyZSB3YXNu
J3QgYW55IG1lYW5pbmdmdWwgY29kZSBzaGFyZWQgKGNhbGxlcnMganVzdCB1bmRpZCBtb3N0IGFz
c2lnbm1lbnRzIG1hZGUgdGhlcmUpLgorICAgICAgICBNZXJnZWQgdGhlIGxvZ2ljIGludG8gY2Fs
bGVycy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCk6
IFdlJ3JlIGZvcmdldHRpbmcgdGhlIG9sZCBpbWFnZSwgc28gZm9yZ2V0IGl0cworICAgICAgICBv
bGQgZXZlbnRzLCB0b28uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6bm90aWZ5Rmlu
aXNoZWQpOiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBzZXRJbWFnZSgpLCBpbiB3aGljaCBjYXNl
CisgICAgICAgIG5vIG9uZSBpcyBnb2luZyB0byBkaXNwYXRjaCB0aGUgZXZlbnQgInNvb24iLiBT
bywgZG9uJ3QgcXVldWUgaXQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUV2ZW50U2VuZGVyOjpk
aXNwYXRjaFBlbmRpbmdFdmVudHMpOiBDYWxsIGNoZWNrQ29uc2lzdGVuY3koKS4gVGhpcyBkaWRu
J3QKKyAgICAgICAgaGVscCBjYXRjaCB0aGlzIHBhcnRpY3VhciBidWcsIGJ1dCBzZWVtcyBsaWtl
IGEgdXNlZnVsIGNoZWNrIGFueXdheS4KKworICAgICAgICAqIGxvYWRlci9JbWFnZUxvYWRlci5o
OiBSZW1vdmVkIHNldExvYWRpbmdJbWFnZSgpLgorCiAyMDEwLTAyLTA5ICBHYXZpbiBCYXJyYWNs
b3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXIgU3RhbXBlZCBi
eSBHZW9mZiBHYXJlbi4KSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1ZhbHVl
Q2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9WYWx1
ZUNoZWNrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9W
YWx1ZUNoZWNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3Jl
X0ZXRF9WYWx1ZUNoZWNrX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfVmFsdWVDaGVja19oCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVmFsdWVDaGVjay5oPgorI2VuZGlmCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9WYWx1ZUNoZWNrLmgKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvSW1hZ2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ltYWdlTG9h
ZGVyLmNwcAkocmV2aXNpb24gNTQ1NTYpCisrKyBXZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDI0IEBACiAjaW5jbHVkZSAiRWxlbWVudC5o
IgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisvLyBJ
bWFnZUxvYWRlciBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgYXMgbWVtYmVycyBvZiBvdGhlciBvYmpl
Y3RzLCBzbyBnZW5lcmljIHBvaW50ZXIgY2hlY2sgd291bGQgYWx3YXlzIGZhaWwuCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVDaGVjazxXZWJDb3JlOjpJbWFnZUxv
YWRlcio+IHsKKyAgICB0eXBlZGVmIFdlYkNvcmU6OkltYWdlTG9hZGVyKiBUcmFpdFR5cGU7Cisg
ICAgc3RhdGljIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShjb25zdCBXZWJDb3JlOjpJbWFnZUxvYWRl
ciogcCkKKyAgICB7CisgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgQVNTRVJUKHAtPmVsZW1lbnQoKSk7CisgICAgICAgIFZhbHVlQ2hlY2s8V2ViQ29yZTo6RWxl
bWVudCo+OjpjaGVja0NvbnNpc3RlbmN5KHAtPmVsZW1lbnQoKSk7CisgICAgfQorfTsKKworfQor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VFdmVudFNlbmRlciA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CkBAIC00MCw2ICs1OCwxMCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGRpc3BhdGNoUGVuZGluZ0V2ZW50cygpOwogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
IGJvb2wgaGFzUGVuZGluZ0V2ZW50cyhJbWFnZUxvYWRlciogbG9hZGVyKSB7IHJldHVybiBtX2Rp
c3BhdGNoU29vbkxpc3QuZmluZChsb2FkZXIpICE9IG5vdEZvdW5kOyB9CisjZW5kaWYKKwogcHJp
dmF0ZToKICAgICB2b2lkIHRpbWVyRmlyZWQoVGltZXI8SW1hZ2VFdmVudFNlbmRlcj4qKTsKIApA
QCAtNzUsOCArOTcsMTIgQEAgSW1hZ2VMb2FkZXI6On5JbWFnZUxvYWRlcigpCiB7CiAgICAgaWYg
KG1faW1hZ2UpCiAgICAgICAgIG1faW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKKworICAgIEFT
U0VSVCghbV9maXJlZEJlZm9yZUxvYWQgfHwgIWJlZm9yZUxvYWRFdmVudFNlbmRlcigpLmhhc1Bl
bmRpbmdFdmVudHModGhpcykpOwogICAgIGlmICghbV9maXJlZEJlZm9yZUxvYWQpCiAgICAgICAg
IGJlZm9yZUxvYWRFdmVudFNlbmRlcigpLmNhbmNlbEV2ZW50KHRoaXMpOworCisgICAgQVNTRVJU
KCFtX2ZpcmVkTG9hZCB8fCAhbG9hZEV2ZW50U2VuZGVyKCkuaGFzUGVuZGluZ0V2ZW50cyh0aGlz
KSk7CiAgICAgaWYgKCFtX2ZpcmVkTG9hZCkKICAgICAgICAgbG9hZEV2ZW50U2VuZGVyKCkuY2Fu
Y2VsRXZlbnQodGhpcyk7CiB9CkBAIC04Niw5ICsxMTIsMTYgQEAgdm9pZCBJbWFnZUxvYWRlcjo6
c2V0SW1hZ2UoQ2FjaGVkSW1hZ2UqIAogICAgIEFTU0VSVChtX2ZhaWxlZExvYWRVUkwuaXNFbXB0
eSgpKTsKICAgICBDYWNoZWRJbWFnZSogb2xkSW1hZ2UgPSBtX2ltYWdlLmdldCgpOwogICAgIGlm
IChuZXdJbWFnZSAhPSBvbGRJbWFnZSkgewotICAgICAgICBzZXRMb2FkaW5nSW1hZ2UobmV3SW1h
Z2UpOwotICAgICAgICBtX2ZpcmVkQmVmb3JlTG9hZCA9IHRydWU7Ci0gICAgICAgIG1fZmlyZWRM
b2FkID0gdHJ1ZTsKKyAgICAgICAgbV9pbWFnZSA9IG5ld0ltYWdlOworICAgICAgICAvLyBDYWxs
ZXJzIG9mIHRoaXMgbWV0aG9kIGRvIG5vdCBuZWVkIGV2ZW50cyBkaXNwYXRjaGVkLgorICAgICAg
ICBpZiAoIW1fZmlyZWRCZWZvcmVMb2FkKSB7CisgICAgICAgICAgICBiZWZvcmVMb2FkRXZlbnRT
ZW5kZXIoKS5jYW5jZWxFdmVudCh0aGlzKTsKKyAgICAgICAgICAgIG1fZmlyZWRCZWZvcmVMb2Fk
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fZmlyZWRMb2FkKSB7CisgICAgICAg
ICAgICBsb2FkRXZlbnRTZW5kZXIoKS5jYW5jZWxFdmVudCh0aGlzKTsKKyAgICAgICAgICAgIG1f
ZmlyZWRMb2FkID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBtX2ltYWdlQ29tcGxldGUgPSB0
cnVlOwogICAgICAgICBpZiAobmV3SW1hZ2UpCiAgICAgICAgICAgICBuZXdJbWFnZS0+YWRkQ2xp
ZW50KHRoaXMpOwpAQCAtMTAzLDE0ICsxMzYsNiBAQCB2b2lkIEltYWdlTG9hZGVyOjpzZXRJbWFn
ZShDYWNoZWRJbWFnZSogCiAgICAgfQogfQogCi12b2lkIEltYWdlTG9hZGVyOjpzZXRMb2FkaW5n
SW1hZ2UoQ2FjaGVkSW1hZ2UqIGxvYWRpbmdJbWFnZSkKLXsKLSAgICBtX2ltYWdlID0gbG9hZGlu
Z0ltYWdlOwotICAgIG1fZmlyZWRCZWZvcmVMb2FkID0gIWxvYWRpbmdJbWFnZTsKLSAgICBtX2Zp
cmVkTG9hZCA9ICFsb2FkaW5nSW1hZ2U7Ci0gICAgbV9pbWFnZUNvbXBsZXRlID0gIWxvYWRpbmdJ
bWFnZTsKLX0KLQogdm9pZCBJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewogICAg
IC8vIElmIHdlJ3JlIG5vdCBtYWtpbmcgcmVuZGVyZXJzIGZvciB0aGUgcGFnZSwgdGhlbiBkb24n
dCBsb2FkIGltYWdlcy4gIFdlIGRvbid0IHdhbnQgdG8gc2xvdwpAQCAtMTQ2LDcgKzE3MSwxNiBA
QCB2b2lkIEltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgCiAgICAgQ2FjaGVk
SW1hZ2UqIG9sZEltYWdlID0gbV9pbWFnZS5nZXQoKTsKICAgICBpZiAobmV3SW1hZ2UgIT0gb2xk
SW1hZ2UpIHsKLSAgICAgICAgc2V0TG9hZGluZ0ltYWdlKG5ld0ltYWdlKTsKKyAgICAgICAgaWYg
KCFtX2ZpcmVkQmVmb3JlTG9hZCkKKyAgICAgICAgICAgIGJlZm9yZUxvYWRFdmVudFNlbmRlcigp
LmNhbmNlbEV2ZW50KHRoaXMpOworICAgICAgICBpZiAoIW1fZmlyZWRMb2FkKQorICAgICAgICAg
ICAgbG9hZEV2ZW50U2VuZGVyKCkuY2FuY2VsRXZlbnQodGhpcyk7CisKKyAgICAgICAgbV9pbWFn
ZSA9IG5ld0ltYWdlOworICAgICAgICBtX2ZpcmVkQmVmb3JlTG9hZCA9ICFuZXdJbWFnZTsKKyAg
ICAgICAgbV9maXJlZExvYWQgPSAhbmV3SW1hZ2U7CisgICAgICAgIG1faW1hZ2VDb21wbGV0ZSA9
ICFuZXdJbWFnZTsKKwogICAgICAgICBpZiAobmV3SW1hZ2UpIHsKICAgICAgICAgICAgIG5ld0lt
YWdlLT5hZGRDbGllbnQodGhpcyk7CiAgICAgICAgICAgICBpZiAoIW1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpCRUZPUkVMT0FEX0xJU1RFTkVSKSkKQEAg
LTE4MCw2ICsyMTQsOSBAQCB2b2lkIEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRS
CiAgICAgaWYgKGhhdmVGaXJlZEJlZm9yZUxvYWRFdmVudCgpKQogICAgICAgICB1cGRhdGVSZW5k
ZXJlcigpOwogCisgICAgaWYgKG1fZmlyZWRMb2FkKQorICAgICAgICByZXR1cm47CisKICAgICBs
b2FkRXZlbnRTZW5kZXIoKS5kaXNwYXRjaEV2ZW50U29vbih0aGlzKTsKIH0KIApAQCAtMjgyLDYg
KzMxOSw4IEBAIHZvaWQgSW1hZ2VFdmVudFNlbmRlcjo6ZGlzcGF0Y2hQZW5kaW5nRXYKIAogICAg
IG1fdGltZXIuc3RvcCgpOwogCisgICAgbV9kaXNwYXRjaFNvb25MaXN0LmNoZWNrQ29uc2lzdGVu
Y3koKTsKKwogICAgIG1fZGlzcGF0Y2hpbmdMaXN0LnN3YXAobV9kaXNwYXRjaFNvb25MaXN0KTsK
ICAgICBzaXplX3Qgc2l6ZSA9IG1fZGlzcGF0Y2hpbmdMaXN0LnNpemUoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpJbmRleDogV2ViQ29yZS9sb2FkZXIvSW1hZ2VM
b2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5oCShyZXZp
c2lvbiA1NDU1NikKKysrIFdlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDggKzcwLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoUGVuZGluZ0Jl
Zm9yZUxvYWRFdmVudCgpOwogICAgIHZvaWQgZGlzcGF0Y2hQZW5kaW5nTG9hZEV2ZW50KCk7CiAK
LSAgICB2b2lkIHNldExvYWRpbmdJbWFnZShDYWNoZWRJbWFnZSopOwotCiAgICAgdm9pZCB1cGRh
dGVSZW5kZXJlcigpOwogCiAgICAgRWxlbWVudCogbV9lbGVtZW50OwpJbmRleDogV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDU0NTc0KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMiBAQAorMjAxMC0wMi0wOSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0OTAKKyAgICAgICAgV2ViQ29yZTo6
SW1hZ2VFdmVudFNlbmRlcjo6ZGlzcGF0Y2hQZW5kaW5nRXZlbnRzKCkgY3Jhc2hlcyBpbiBjZXJ0
YWluIGNvbmRpdGlvbnMKKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9WYWx1ZUNo
ZWNrLmg6IEFkZGVkLgorCiAyMDEwLTAyLTA5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdl
YktpdC9tYWMvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1ZhbHVlQ2hlY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9WYWx1ZUNoZWNrLmgJKHJldmlzaW9u
IDApCisrKyBXZWJLaXQvbWFjL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9WYWx1ZUNoZWNrLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1ZhbHVlQ2hl
Y2suaD4KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9tYWMvRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL1ZhbHVlQ2hlY2suaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRp
dmUKCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NDU3NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTAyLTA5ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NDQ5MAorICAgICAgICBXZWJDb3JlOjpJbWFnZUV2ZW50U2VuZGVyOjpkaXNwYXRjaFBlbmRpbmdF
dmVudHMoKSBjcmFzaGVzIGluIGNlcnRhaW4gY29uZGl0aW9ucworCisgICAgICAgICogZmFzdC9p
bWFnZXMvZGVzdHJveWVkLWltYWdlLWxvYWQtZXZlbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2ltYWdlcy9kZXN0cm95ZWQtaW1hZ2UtbG9hZC1ldmVudC5odG1sOiBBZGRl
ZC4KKwogMjAxMC0wMi0wOSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZC4gUm9sbC1vdXQgcjU0NTQzLCBiZWNhdXNlIGxheW91
dCB0ZXN0cyBjcmFzaCBpbiBkZWJ1ZyBtb2RlLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFn
ZXMvZGVzdHJveWVkLWltYWdlLWxvYWQtZXZlbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Rlc3Ryb3llZC1pbWFnZS1sb2FkLWV2ZW50LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Rlc3Ryb3ll
ZC1pbWFnZS1sb2FkLWV2ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
IEBACitUZXN0IGZvciBidWcgMzQ0OTA6IFdlYkNvcmU6OkltYWdlRXZlbnRTZW5kZXI6OmRpc3Bh
dGNoUGVuZGluZ0V2ZW50cygpIGNyYXNoZXMgaW4gY2VydGFpbiBjb25kaXRpb25zLgorCitQQVNT
CisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Rlc3Ryb3ll
ZC1pbWFnZS1sb2FkLWV2ZW50LWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1l
LXR5cGUKICAgKyB0ZXh0L3BsYWluCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9kZXN0cm95ZWQtaW1hZ2UtbG9hZC1ldmVudC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Rlc3Ryb3llZC1pbWFn
ZS1sb2FkLWV2ZW50Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdl
cy9kZXN0cm95ZWQtaW1hZ2UtbG9hZC1ldmVudC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU1IEBACis8Ym9keSBvbmxvYWQ9InRlc3QoKSI+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0OTAiPmJ1ZyAzNDQ5MDxhLz46
CitXZWJDb3JlOjpJbWFnZUV2ZW50U2VuZGVyOjpkaXNwYXRjaFBlbmRpbmdFdmVudHMoKSBjcmFz
aGVzIGluIGNlcnRhaW4gY29uZGl0aW9ucy48L3A+Cis8ZGl2IGlkPSJ0ZXN0UnVuIj48L2Rpdj4K
KzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cit9CisKK2Z1bmN0aW9u
IGdjKCkKK3sKKyAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIEdD
Q29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBp
KyspIHsgLy8gPiBmb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJlcXVpcmVzIGFib3V0IDlL
IGFsbG9jYXRpb25zIGJlZm9yZSBhIGNvbGxlY3QpCisgICAgICAgIHZhciBzID0gbmV3IFN0cmlu
ZygiYWJjIik7CisgICAgfQorfQorCit2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNvbnRhaW5lciIpOwordmFyIHRlc3RSdW5EaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgidGVzdFJ1biIpOwordmFyIHJlbWFpbmluZ1Rlc3RSdW5zID0gMzA7CisKK2Z1bmN0aW9u
IHRlc3QoKQoreworICAgIHRlc3RSdW5EaXYuaW5uZXJIVE1MID0gcmVtYWluaW5nVGVzdFJ1bnM7
CisKKyAgICBpZiAoLS1yZW1haW5pbmdUZXN0UnVucyA8IDApIHsKKyAgICAgICAgdGVzdFJ1bkRp
di5pbm5lckhUTUwgPSAiUEFTUyI7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxpbWcg
c3JjPSJyZXNvdXJjZXMvYm9zdG9uLmdpZiIgb25sb2FkPSJsb2FkZWQxKCkiPicgKworICAgICAg
ICAnPGltZyBzcmM9InJlc291cmNlcy9ib3N0b24uZ2lmIiBvbmxvYWQ9ImxvYWRlZDIoKSI+JzsK
K30KKworZnVuY3Rpb24gbG9hZGVkMSgpCit7CisgICAgdmFyIGltZzIgPSBkb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgiaW1nIilbMV07CisgICAgaW1nMi5zcmMgPSAiIjsKKyAgICBjb250
YWluZXIucmVtb3ZlQ2hpbGQoaW1nMik7CisgICAgaW1nMiA9IG51bGw7CisgICAgZ2MoKTsKKyAg
ICBzZXRUaW1lb3V0KHRlc3QsIDApOworfQorCitmdW5jdGlvbiBsb2FkZWQyKCkKK3sKK30KKzwv
c2NyaXB0PgorPC9ib2R5PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9p
bWFnZXMvZGVzdHJveWVkLWltYWdlLWxvYWQtZXZlbnQuaHRtbApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2
bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKCg==
</data>
<flag name="review"
          id="31142"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>