<?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>134042</bug_id>
          
          <creation_ts>2014-06-18 14:48:55 -0700</creation_ts>
          <short_desc>Don&apos;t kill the UIProcess until all local storage transactions have been committed</short_desc>
          <delta_ts>2014-06-19 12:24:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Roger Fong">roger_fong</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>jonlee</cc>
    
    <cc>roger_fong</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1016548</commentid>
    <comment_count>0</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-06-18 14:48:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/16660724&gt;

When we quit safari, we sometimes kill the UIprocess as any uncommitted local storage transactions are committed.
This patch ensure that upon quitting we do all the necessary cleanup first before exiting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016552</commentid>
    <comment_count>1</comment_count>
      <attachid>233329</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-06-18 15:01:49 -0700</bug_when>
    <thetext>Created attachment 233329
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016554</commentid>
    <comment_count>2</comment_count>
      <attachid>233330</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-06-18 15:06:59 -0700</bug_when>
    <thetext>Created attachment 233330
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016595</commentid>
    <comment_count>3</comment_count>
      <attachid>233330</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-06-18 17:12:02 -0700</bug_when>
    <thetext>Comment on attachment 233330
patch

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

&gt; Source/WebKit2/UIProcess/WebContext.cpp:723
&gt; +void WebContext::closeConnectionsInResponseToQuit()

I think calling this applicationWillTerminate is better.

&gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:611
&gt; +void StorageManager::closeConnectionsInResponseToQuit()
&gt; +{
&gt; +    Vector&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;&gt; connectionAndStorageMapIDPairsToRemove;
&gt; +    HashMap&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;, RefPtr&lt;StorageArea&gt;&gt; storageAreasByConnection = m_storageAreasByConnection;
&gt; +    for (HashMap&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;, RefPtr&lt;StorageArea&gt;&gt;::const_iterator it = storageAreasByConnection.begin(), end = storageAreasByConnection.end(); it != end; ++it) {
&gt; +        it-&gt;value-&gt;removeListener(it-&gt;key.first.get(), it-&gt;key.second);
&gt; +        connectionAndStorageMapIDPairsToRemove.append(it-&gt;key);
&gt; +    }
&gt; +
&gt; +    for (size_t i = 0; i &lt; connectionAndStorageMapIDPairsToRemove.size(); ++i)
&gt; +        m_storageAreasByConnection.remove(connectionAndStorageMapIDPairsToRemove[i]);
&gt; +
&gt; +    m_closeMutex.unlock();
&gt; +}

How is this ensuring that everything is written to disk?

&gt; Source/WebKit2/UIProcess/Storage/StorageManager.h:115
&gt; +    std::mutex m_closeMutex;

A mutex is the wrong synchronization primitive here. You should use a BinarySemaphore instead. For example, StorageManager::applicationWillTerminate() could do something like:

void StorageManager::applicationWillTerminate()
{
    BinarySemaphore semaphore;
    m_queue-&gt;dispatch([this, &amp;semaphore]) {
        // Do cleanup work.
        semaphore.signal();
    });

    semaphore.wait();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016637</commentid>
    <comment_count>4</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-06-18 22:36:27 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 233330 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=233330&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebContext.cpp:723
&gt; &gt; +void WebContext::closeConnectionsInResponseToQuit()
&gt; 
&gt; I think calling this applicationWillTerminate is better.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:611
&gt; &gt; +void StorageManager::closeConnectionsInResponseToQuit()
&gt; &gt; +{
&gt; &gt; +    Vector&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;&gt; connectionAndStorageMapIDPairsToRemove;
&gt; &gt; +    HashMap&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;, RefPtr&lt;StorageArea&gt;&gt; storageAreasByConnection = m_storageAreasByConnection;
&gt; &gt; +    for (HashMap&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;, RefPtr&lt;StorageArea&gt;&gt;::const_iterator it = storageAreasByConnection.begin(), end = storageAreasByConnection.end(); it != end; ++it) {
&gt; &gt; +        it-&gt;value-&gt;removeListener(it-&gt;key.first.get(), it-&gt;key.second);
&gt; &gt; +        connectionAndStorageMapIDPairsToRemove.append(it-&gt;key);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    for (size_t i = 0; i &lt; connectionAndStorageMapIDPairsToRemove.size(); ++i)
&gt; &gt; +        m_storageAreasByConnection.remove(connectionAndStorageMapIDPairsToRemove[i]);
&gt; &gt; +
&gt; &gt; +    m_closeMutex.unlock();
&gt; &gt; +}
&gt; 
&gt; How is this ensuring that everything is written to disk?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Storage/StorageManager.h:115
&gt; &gt; +    std::mutex m_closeMutex;
&gt; 
&gt; A mutex is the wrong synchronization primitive here. You should use a BinarySemaphore instead. For example, StorageManager::applicationWillTerminate() could do something like:
&gt; 
&gt; void StorageManager::applicationWillTerminate()
&gt; {
&gt;     BinarySemaphore semaphore;
&gt;     m_queue-&gt;dispatch([this, &amp;semaphore]) {
&gt;         // Do cleanup work.
&gt;         semaphore.signal();
&gt;     });
&gt; 
&gt;     semaphore.wait();

Would it not make sense, in addition to the semaphore, to use a mutex with the background thread to make sure that closeConnectionsInResponseToQuit and invalidateConnectionInternal don&apos;t modify the m_storageAreasByConnection map at the same time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016642</commentid>
    <comment_count>5</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-06-18 23:45:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 233330 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=233330&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebContext.cpp:723
&gt; &gt; &gt; +void WebContext::closeConnectionsInResponseToQuit()
&gt; &gt; 
&gt; &gt; I think calling this applicationWillTerminate is better.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:611
&gt; &gt; &gt; +void StorageManager::closeConnectionsInResponseToQuit()
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    Vector&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;&gt; connectionAndStorageMapIDPairsToRemove;
&gt; &gt; &gt; +    HashMap&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;, RefPtr&lt;StorageArea&gt;&gt; storageAreasByConnection = m_storageAreasByConnection;
&gt; &gt; &gt; +    for (HashMap&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;, RefPtr&lt;StorageArea&gt;&gt;::const_iterator it = storageAreasByConnection.begin(), end = storageAreasByConnection.end(); it != end; ++it) {
&gt; &gt; &gt; +        it-&gt;value-&gt;removeListener(it-&gt;key.first.get(), it-&gt;key.second);
&gt; &gt; &gt; +        connectionAndStorageMapIDPairsToRemove.append(it-&gt;key);
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +
&gt; &gt; &gt; +    for (size_t i = 0; i &lt; connectionAndStorageMapIDPairsToRemove.size(); ++i)
&gt; &gt; &gt; +        m_storageAreasByConnection.remove(connectionAndStorageMapIDPairsToRemove[i]);
&gt; &gt; &gt; +
&gt; &gt; &gt; +    m_closeMutex.unlock();
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; How is this ensuring that everything is written to disk?
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/Storage/StorageManager.h:115
&gt; &gt; &gt; +    std::mutex m_closeMutex;
&gt; &gt; 
&gt; &gt; A mutex is the wrong synchronization primitive here. You should use a BinarySemaphore instead. For example, StorageManager::applicationWillTerminate() could do something like:
&gt; &gt; 
&gt; &gt; void StorageManager::applicationWillTerminate()
&gt; &gt; {
&gt; &gt;     BinarySemaphore semaphore;
&gt; &gt;     m_queue-&gt;dispatch([this, &amp;semaphore]) {
&gt; &gt;         // Do cleanup work.
&gt; &gt;         semaphore.signal();
&gt; &gt;     });
&gt; &gt; 
&gt; &gt;     semaphore.wait();
&gt; 
&gt; Would it not make sense, in addition to the semaphore, to use a mutex with the background thread to make sure that closeConnectionsInResponseToQuit and invalidateConnectionInternal don&apos;t modify the m_storageAreasByConnection map at the same time?

I retract my statement. It&apos;s the same work queue, so that can&apos;t happen, duh.,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016643</commentid>
    <comment_count>6</comment_count>
      <attachid>233353</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-06-19 00:06:46 -0700</bug_when>
    <thetext>Created attachment 233353
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016646</commentid>
    <comment_count>7</comment_count>
      <attachid>233354</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-06-19 00:39:14 -0700</bug_when>
    <thetext>Created attachment 233354
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016714</commentid>
    <comment_count>8</comment_count>
      <attachid>233354</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-06-19 11:55:33 -0700</bug_when>
    <thetext>Comment on attachment 233354
patch

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

&gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:597
&gt; +        HashMap&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;, RefPtr&lt;StorageArea&gt;&gt; storageAreasByConnection = m_storageAreasByConnection;

No need to copy the HashMap here.

&gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:598
&gt; +        for (HashMap&lt;std::pair&lt;RefPtr&lt;IPC::Connection&gt;, uint64_t&gt;, RefPtr&lt;StorageArea&gt;&gt;::const_iterator it = storageAreasByConnection.begin(), end = storageAreasByConnection.end(); it != end; ++it) {

This should use a modern for loop.

&gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:604
&gt; +        for (size_t i = 0; i &lt; connectionAndStorageMapIDPairsToRemove.size(); ++i)
&gt; +            m_storageAreasByConnection.remove(connectionAndStorageMapIDPairsToRemove[i]);

This should use a modern for loop, and I think a comment stating that removing the storage areas causes the changes to be flushed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016721</commentid>
    <comment_count>9</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-06-19 12:24:53 -0700</bug_when>
    <thetext>committed: http://trac.webkit.org/changeset/170156</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233329</attachid>
            <date>2014-06-18 15:01:49 -0700</date>
            <delta_ts>2014-06-18 15:06:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>1720</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1RhcFRvUmFkYXJFeHRlbnNpb24vUkNTYWZhcmlFeHRlbnNpb24ubSBiL1Rh
cFRvUmFkYXJFeHRlbnNpb24vUkNTYWZhcmlFeHRlbnNpb24ubQppbmRleCBkOGM0MjQ5Li42NDE0
ZWY2IDEwMDY0NAotLS0gYS9UYXBUb1JhZGFyRXh0ZW5zaW9uL1JDU2FmYXJpRXh0ZW5zaW9uLm0K
KysrIGIvVGFwVG9SYWRhckV4dGVuc2lvbi9SQ1NhZmFyaUV4dGVuc2lvbi5tCkBAIC0xNSw3ICsx
NSw5IEBACiAjaW1wb3J0IDxSYWRhckNvbXBvc2UvUkNVdGlscy5oPgogI2ltcG9ydCA8U2FmYXJp
U2hhcmVkL1dCU05TRGljdGlvbmFyeUV4dHJhcy5oPgogCi1AaW1wbGVtZW50YXRpb24gUkNTYWZh
cmlFeHRlbnNpb24KK0BpbXBsZW1lbnRhdGlvbiBSQ1NhZmFyaUV4dGVuc2lvbiB7CisgICAgTlNT
dHJpbmcgKl91bmlxdWVEYXRlOworfQogCiAtIChpbnN0YW5jZXR5cGUpaW5pdAogewpAQCAtNDks
NiArNTEsNyBAQCAtIChOU0FycmF5ICopYXR0YWNobWVudHNXaXRoUGFyYW1zOihOU0RpY3Rpb25h
cnkgKilwYXJhbXMKIAogLSAoUkNSYWRhclByb2JsZW0gKiluZXdSYWRhcgogeworICAgIF91bmlx
dWVEYXRlID0gW1JDU2FmYXJpRXh0ZW5zaW9uIHVuaXF1ZURhdGVTdHJpbmddOwogICAgIFJDUmFk
YXJQcm9ibGVtICpyYWRhciA9IFtbUkNSYWRhclByb2JsZW0gYWxsb2NdIGluaXRdOwogCiAgICAg
W3JhZGFyIHNldFByb2JsZW1EZXNjcmlwdGlvbjoKQEAgLTYzLDEyICs2NiwxMiBAQCAtIChSQ1Jh
ZGFyUHJvYmxlbSAqKW5ld1JhZGFyCiAKIC0gKE5TU3RyaW5nICopX2N1cnJlbnRVUkxMb2dQYXRo
CiB7Ci0gICAgcmV0dXJuIFtTYWZhcmlUZW1wb3JhcnlEaXJlY3RvcnlQYXRoKCkgc3RyaW5nQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiU2FmYXJpIFVSTCBmb3IgQ3VycmVudCBUYWIubG9nIl07
CisgICAgcmV0dXJuIFtTYWZhcmlUZW1wb3JhcnlEaXJlY3RvcnlQYXRoKCkgc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiU2FmYXJpIFVS
TCBmb3IgQ3VycmVudCBUYWJfJUAubG9nIiwgX3VuaXF1ZURhdGVdXTsKIH0KIAogLSAoTlNTdHJp
bmcgKilfYWxsVVJMc0xvZ1BhdGgKIHsKLSAgICByZXR1cm4gW1NhZmFyaVRlbXBvcmFyeURpcmVj
dG9yeVBhdGgoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJTYWZhcmkgVVJMIGZv
ciBBbGwgVGFicy5sb2ciXTsKKyAgICByZXR1cm4gW1NhZmFyaVRlbXBvcmFyeURpcmVjdG9yeVBh
dGgoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJTYWZhcmkgVVJMIGZvciBBbGwgVGFic18lQC5sb2ciLCBfdW5pcXVlRGF0ZV1dOwog
fQogCiAtICh2b2lkKV9nYXRoZXJTYWZhcmlEaWFnbm9zdGljRGF0YQpAQCAtMTM4LDQgKzE0MSwx
MSBAQCAtIChOU0FycmF5ICopX2dldEF0dGFjaG1lbnRzV2l0aERpc3BsYXlOYW1lOihOU1N0cmlu
ZyAqKWRpc3BsYXlOYW1lCiAgICAgcmV0dXJuIHBhdGhzOwogfQogCisrIChOU1N0cmluZyAqKXVu
aXF1ZURhdGVTdHJpbmcKK3sKKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmRmID0gW1tOU0RhdGVGb3Jt
YXR0ZXIgYWxsb2NdIGluaXRdOworICAgIFtkZiBzZXREYXRlRm9ybWF0OkAieXl5eS1NTS1kZC1I
SG1tc3MiXTsKKyAgICByZXR1cm4gW2RmIHN0cmluZ0Zyb21EYXRlOltOU0RhdGUgZGF0ZV1dOwor
fQorCiBAZW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233330</attachid>
            <date>2014-06-18 15:06:59 -0700</date>
            <delta_ts>2014-06-19 00:06:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>7703</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDExNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE0LTA2LTE4ICBSb2dlciBG
b25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRG9uJ3Qga2lsbCB0aGUgVUlQ
cm9jZXNzIHVudGlsIGFsbCBsb2NhbCBzdG9yYWdlIHRyYW5zYWN0aW9ucyBoYXZlIGJlZW4gY29t
bWl0dGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0MDQyLgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTY2NjA3MjQ+LgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3Lm1tOiBBZGQgYSBsaXN0ZW5lciBmb3IgdGhlIGFwcGxpY2F0aW9uIHdpbGwgdGVybWlu
YXRlIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgKC1bV0tWaWV3IF9hcHBsaWNhdGlvbldpbGxUZXJt
aW5hdGU6XSk6CisgICAgICAgICgtW1dLVmlldyBpbml0V2l0aEZyYW1lOmNvbnRleHQ6Y29uZmln
dXJhdGlvbjp3ZWJWaWV3Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcDog
Q2FsbHMgY29kZSBpbiBTdG9yYWdlTWFuYWdlciB0byBjbGVhbnVwIGxvY2FsIHN0b3JhZ2UgdHJh
bnNhY3Rpb25zIHVwb24gYXBwbGljYXRpb24gdGVybWluYXRpb24uCisgICAgICAgIChXZWJLaXQ6
OldlYkNvbnRleHQ6OmNsb3NlQ29ubmVjdGlvbnNJblJlc3BvbnNlVG9RdWl0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQ29udGV4dC5oOgorCisgICAgICAgICogVUlQcm9jZXNzL1N0b3JhZ2Uv
U3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6YXBw
bGljYXRpb25XaWxsVGVybWluYXRlKTogCisgICAgICAgIERpc3BhdGNoIGxvY2FsIHN0b3JhZ2Ug
Y2xlYW51cCB0YXNrIHRvIGJhY2tncm91bmQgdGhyZWFkIGFuZCBsb2NrIGEgbXV0ZXggc28gdGhl
IFVJUHJvY2VzcyBjYW4ndCBleGl0IGVhcmx5LgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFu
YWdlcjo6Y2xvc2VDb25uZWN0aW9uc0luUmVzcG9uc2VUb1F1aXQpOiAKKyAgICAgICAgQ29tbWl0
IGFueSByZW1haW5pbmcgbG9jYWwgc3RvcmFnZSB0cmFuc2FjdGlvbnMgYW5kIHVubG9jayB0aGUg
bXV0ZXguCisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpwcm9jZXNzV2lsbENsb3Nl
Q29ubmVjdGlvbik6IAorICAgICAgICBMb2NrIHRoZSBtdXRleCBoZXJlIHNvIHRoYXQgd2UgZG9u
J3QgdHJ5IHRvIG1vZGlmeSB0aGUgcmVtYWluaW5nIHRyYW5zYWN0aW9ucyBhcnJheSBhdCB0aGUg
c2FtZSB0aW1lIGFzIGFub3RoZXIgYmFja2dyb3VuZCB0aHJlYWQuCisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VNYW5hZ2VyOjppbnZhbGlkYXRlQ29ubmVjdGlvbkludGVybmFsKTogCisgICAgICAg
IFVubG9jayB0aGUgbXV0ZXggb25jZSB0aGUgYmFja2dyb3VuZCB0aHJlYWQgaGFzIGZpbmlzaGVk
IHVzaW5nIHRoZSBhcnJheSBvZiB0cmFuc2FjdGlvbnMuCisgICAgICAgICogVUlQcm9jZXNzL1N0
b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaDoKKwogMjAxNC0wNi0xOCAgQmVuamFtaW4gUG91bGFpbiAg
PGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW2lPU11bV0syXSBEbyBub3QgYWRkIHBh
ZGRpbmcgd2hlbiBtYWduaWZ5aW5nIHJlcGxhY2VkIGVsZW1lbnRzCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCShyZXZpc2lvbiAxNzAxMDApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyMCw2
ICs3MjAsMTEgQEAgdm9pZCBXZWJDb250ZXh0Ojpwcm9jZXNzV2lsbENsb3NlQ29ubmVjdAogICAg
IG1fc3RvcmFnZU1hbmFnZXItPnByb2Nlc3NXaWxsQ2xvc2VDb25uZWN0aW9uKHByb2Nlc3MpOwog
fQogCit2b2lkIFdlYkNvbnRleHQ6OmNsb3NlQ29ubmVjdGlvbnNJblJlc3BvbnNlVG9RdWl0KCkK
K3sKKyAgICBtX3N0b3JhZ2VNYW5hZ2VyLT5hcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUoKTsKK30K
Kwogdm9pZCBXZWJDb250ZXh0Ojpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQ
cm94eSogcHJvY2VzcykKIHsKICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMocHJvY2Vz
cykpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCShyZXZpc2lvbiAx
NzAxMDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjUsNiArMTY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgcHJvY2Vzc1dpbGxD
bG9zZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5Kik7CiAgICAgdm9pZCBwcm9jZXNzRGlkRmlu
aXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSopOwogCisgICAgdm9pZCBjbG9zZUNvbm5lY3Rp
b25zSW5SZXNwb25zZVRvUXVpdCgpOwogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3MgZnJv
bSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94
eSopOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1t
CShyZXZpc2lvbiAxNzAxMDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2MjIsNiArMjYyMiwxMSBAQCAtICh2b2lkKV9h
Y3RpdmVTcGFjZURpZENoYW5nZTooTlNOb3RpZmljCiAgICAgX2RhdGEtPl9wYWdlLT52aWV3U3Rh
dGVEaWRDaGFuZ2UoVmlld1N0YXRlOjpJc1Zpc2libGUpOwogfQogCistICh2b2lkKV9hcHBsaWNh
dGlvbldpbGxUZXJtaW5hdGU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAg
X2RhdGEtPl9wYWdlLT5wcm9jZXNzKCkuY29udGV4dCgpLmNsb3NlQ29ubmVjdGlvbnNJblJlc3Bv
bnNlVG9RdWl0KCk7Cit9CisKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZWdpc3RlclVJUHJvY2Vz
c1Rva2VucwogewogICAgIC8vIEluaXRpYWxpemUgcmVtb3RlIGFjY2Vzc2liaWxpdHkgd2hlbiB0
aGUgd2luZG93IGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQuCkBAIC0zNDg1LDYgKzM0
OTAsOCBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyCiAgICAgTlNO
b3RpZmljYXRpb25DZW50ZXIqIHdvcmtzcGFjZU5vdGlmaWNhdGlvbkNlbnRlciA9IFtbTlNXb3Jr
c3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBub3RpZmljYXRpb25DZW50ZXJdOwogICAgIFt3b3Jrc3Bh
Y2VOb3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
X2FjdGl2ZVNwYWNlRGlkQ2hhbmdlOikgbmFtZTpOU1dvcmtzcGFjZUFjdGl2ZVNwYWNlRGlkQ2hh
bmdlTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwogCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfYXBw
bGljYXRpb25XaWxsVGVybWluYXRlOikgbmFtZTpOU0FwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZU5v
dGlmaWNhdGlvbiBvYmplY3Q6TlNBcHBdOworCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDE3MDEwMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9y
YWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE0LDYgKzQxNCw3IEBA
IHZvaWQgU3RvcmFnZU1hbmFnZXI6OnByb2Nlc3NXaWxsQ2xvc2VDb24KIHsKICAgICB3ZWJQcm9j
ZXNzUHJveHktPmNvbm5lY3Rpb24oKS0+cmVtb3ZlV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKIAorICAgIG1f
Y2xvc2VNdXRleC5sb2NrKCk7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goYmluZCgmU3RvcmFnZU1h
bmFnZXI6OmludmFsaWRhdGVDb25uZWN0aW9uSW50ZXJuYWwsIHRoaXMsIFJlZlB0cjxJUEM6OkNv
bm5lY3Rpb24+KHdlYlByb2Nlc3NQcm94eS0+Y29ubmVjdGlvbigpKSkpOwogfQogCkBAIC01ODgs
NiArNTg5LDI3IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2UKICAg
ICBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+Y2xvbmVUbygqbmV3U2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2UpOwogfQogCit2b2lkIFN0b3JhZ2VNYW5hZ2VyOjphcHBsaWNhdGlvbldpbGxUZXJtaW5h
dGUoKQoreworICAgIG1fY2xvc2VNdXRleC5sb2NrKCk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2go
YmluZCgmU3RvcmFnZU1hbmFnZXI6OmNsb3NlQ29ubmVjdGlvbnNJblJlc3BvbnNlVG9RdWl0LCB0
aGlzKSk7Cit9CisKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsb3NlQ29ubmVjdGlvbnNJblJlc3Bv
bnNlVG9RdWl0KCkKK3sKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxJUEM6OkNvbm5lY3Rp
b24+LCB1aW50NjRfdD4+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyc1RvUmVtb3ZlOwor
ICAgIEhhc2hNYXA8c3RkOjpwYWlyPFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+LCB1aW50NjRfdD4s
IFJlZlB0cjxTdG9yYWdlQXJlYT4+IHN0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbiA9IG1fc3RvcmFn
ZUFyZWFzQnlDb25uZWN0aW9uOworICAgIGZvciAoSGFzaE1hcDxzdGQ6OnBhaXI8UmVmUHRyPElQ
Qzo6Q29ubmVjdGlvbj4sIHVpbnQ2NF90PiwgUmVmUHRyPFN0b3JhZ2VBcmVhPj46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmJlZ2luKCksIGVuZCA9IHN0b3Jh
Z2VBcmVhc0J5Q29ubmVjdGlvbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGl0
LT52YWx1ZS0+cmVtb3ZlTGlzdGVuZXIoaXQtPmtleS5maXJzdC5nZXQoKSwgaXQtPmtleS5zZWNv
bmQpOworICAgICAgICBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcnNUb1JlbW92ZS5hcHBl
bmQoaXQtPmtleSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25uZWN0
aW9uQW5kU3RvcmFnZU1hcElEUGFpcnNUb1JlbW92ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9z
dG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24ucmVtb3ZlKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQ
YWlyc1RvUmVtb3ZlW2ldKTsKKworICAgIG1fY2xvc2VNdXRleC51bmxvY2soKTsKK30KKwogdm9p
ZCBTdG9yYWdlTWFuYWdlcjo6aW52YWxpZGF0ZUNvbm5lY3Rpb25JbnRlcm5hbChJUEM6OkNvbm5l
Y3Rpb24qIGNvbm5lY3Rpb24pCiB7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8SVBDOjpD
b25uZWN0aW9uPiwgdWludDY0X3Q+PiBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcnNUb1Jl
bW92ZTsKQEAgLTYwMiw2ICs2MjQsOCBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjppbnZhbGlkYXRl
Q29ubmVjdGlvCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbm5lY3Rpb25BbmRTdG9y
YWdlTWFwSURQYWlyc1RvUmVtb3ZlLnNpemUoKTsgKytpKQogICAgICAgICBtX3N0b3JhZ2VBcmVh
c0J5Q29ubmVjdGlvbi5yZW1vdmUoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXJzVG9SZW1v
dmVbaV0pOworCisgICAgbV9jbG9zZU11dGV4LnVubG9jaygpOwogfQogCiBTdG9yYWdlTWFuYWdl
cjo6U3RvcmFnZUFyZWEqIFN0b3JhZ2VNYW5hZ2VyOjpmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25u
ZWN0aW9uKiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgJ
KHJldmlzaW9uIDE3MDEwMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0
b3JhZ2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBwcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSopOwog
ICAgIHZvaWQgcHJvY2Vzc1dpbGxDbG9zZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5Kik7Cisg
ICAgdm9pZCBhcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUoKTsKIAogICAgIC8vIEZJWE1FOiBJbnN0
ZWFkIG9mIGEgY29udGV4dCArIEMgZnVuY3Rpb24sIHRoaXMgc2hvdWxkIHRha2UgYSBXVEY6OkZ1
bmN0aW9uLCBidXQgd2UgY3VycmVudGx5IGRvbid0CiAgICAgLy8gc3VwcG9ydCBhcmd1bWVudHMg
aW4gZnVuY3Rpb25zLgpAQCAtODgsNiArODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xvbmVT
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUludGVybmFsKHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJ
RCwgdWludDY0X3QgbmV3U3RvcmFnZU5hbWVzcGFjZUlEKTsKIAogICAgIHZvaWQgaW52YWxpZGF0
ZUNvbm5lY3Rpb25JbnRlcm5hbChJUEM6OkNvbm5lY3Rpb24qKTsKKyAgICB2b2lkIGNsb3NlQ29u
bmVjdGlvbnNJblJlc3BvbnNlVG9RdWl0KCk7CiAKICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKICAg
ICBTdG9yYWdlQXJlYSogZmluZFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiosIHVpbnQ2NF90
KSBjb25zdDsKQEAgLTEwOSw2ICsxMTEsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZT4+IG1fc2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2VzOwogCiAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8UmVmUHRyPElQQzo6Q29ubmVjdGlvbj4s
IHVpbnQ2NF90PiwgUmVmUHRyPFN0b3JhZ2VBcmVhPj4gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rp
b247CisKKyAgICBzdGQ6Om11dGV4IG1fY2xvc2VNdXRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAo=
</data>
<flag name="review"
          id="257827"
          type_id="1"
          status="-"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233353</attachid>
            <date>2014-06-19 00:06:46 -0700</date>
            <delta_ts>2014-06-19 00:39:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>6737</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDE0MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA2LTE4ICBSb2dlciBG
b25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRG9uJ3Qga2lsbCB0aGUgVUlQ
cm9jZXNzIHVudGlsIGFsbCBsb2NhbCBzdG9yYWdlIHRyYW5zYWN0aW9ucyBoYXZlIGJlZW4gY29t
bWl0dGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0MDQyLgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTY2NjA3MjQ+LgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3Lm1tOiBBZGQgYSBsaXN0ZW5lciBmb3IgdGhlIGFwcGxpY2F0aW9uIHdpbGwgdGVybWlu
YXRlIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgKC1bV0tWaWV3IF9hcHBsaWNhdGlvbldpbGxUZXJt
aW5hdGU6XSk6CisgICAgICAgICgtW1dLVmlldyBpbml0V2l0aEZyYW1lOmNvbnRleHQ6Y29uZmln
dXJhdGlvbjp3ZWJWaWV3Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcDog
Q2FsbHMgY29kZSBpbiBTdG9yYWdlTWFuYWdlciB0byBjbGVhbnVwIGxvY2FsIHN0b3JhZ2UgdHJh
bnNhY3Rpb25zIHVwb24gYXBwbGljYXRpb24gdGVybWluYXRpb24uCisgICAgICAgIChXZWJLaXQ6
OldlYkNvbnRleHQ6OmFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkNvbnRleHQuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmFwcGxpY2F0aW9u
V2lsbFRlcm1pbmF0ZSk6CisgICAgICAgIERpc3BhdGNoIGxvY2FsIHN0b3JhZ2UgY2xlYW51cCB0
YXNrIHRvIGJhY2tncm91bmQgdGhyZWFkIGFuZCBtYWtlIHN1cmUgdGhlIFVJUHJvY2VzcyBjYW4n
dCBleGl0IGVhcmx5LgorICAgICAgICAqIFVJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2Vy
Lmg6CisKIDIwMTQtMDYtMTggIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeGluZyB0aGUgR1RLKyBidWlsZCBhZnRlciByMTcwMTE0
LgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkocmV2aXNpb24g
MTcwMTAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MjAsNiArNzIwLDExIEBAIHZvaWQgV2ViQ29udGV4dDo6cHJvY2Vzc1dp
bGxDbG9zZUNvbm5lY3QKICAgICBtX3N0b3JhZ2VNYW5hZ2VyLT5wcm9jZXNzV2lsbENsb3NlQ29u
bmVjdGlvbihwcm9jZXNzKTsKIH0KIAordm9pZCBXZWJDb250ZXh0OjphcHBsaWNhdGlvbldpbGxU
ZXJtaW5hdGUoKQoreworICAgIG1fc3RvcmFnZU1hbmFnZXItPmFwcGxpY2F0aW9uV2lsbFRlcm1p
bmF0ZSgpOworfQorCiB2b2lkIFdlYkNvbnRleHQ6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmco
V2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogewogICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250
YWlucyhwcm9jZXNzKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJ
KHJldmlzaW9uIDE3MDEwMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
cm9jZXNzV2lsbENsb3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkqKTsKICAgICB2b2lkIHBy
b2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKKyAgICB2b2lkIGFw
cGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSgpOwogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3Mg
ZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSopOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
Lm1tCShyZXZpc2lvbiAxNzAxMDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2MjIsNiArMjYyMiwxMSBAQCAtICh2b2lk
KV9hY3RpdmVTcGFjZURpZENoYW5nZTooTlNOb3RpZmljCiAgICAgX2RhdGEtPl9wYWdlLT52aWV3
U3RhdGVEaWRDaGFuZ2UoVmlld1N0YXRlOjpJc1Zpc2libGUpOwogfQogCistICh2b2lkKV9hcHBs
aWNhdGlvbldpbGxUZXJtaW5hdGU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7Cisg
ICAgX2RhdGEtPl9wYWdlLT5wcm9jZXNzKCkuY29udGV4dCgpLmFwcGxpY2F0aW9uV2lsbFRlcm1p
bmF0ZSgpOworfQorCiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmVnaXN0ZXJVSVByb2Nlc3NUb2tl
bnMKIHsKICAgICAvLyBJbml0aWFsaXplIHJlbW90ZSBhY2Nlc3NpYmlsaXR5IHdoZW4gdGhlIHdp
bmRvdyBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkLgpAQCAtMzQ4NSw2ICszNDkwLDgg
QEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcgogICAgIE5TTm90aWZp
Y2F0aW9uQ2VudGVyKiB3b3Jrc3BhY2VOb3RpZmljYXRpb25DZW50ZXIgPSBbW05TV29ya3NwYWNl
IHNoYXJlZFdvcmtzcGFjZV0gbm90aWZpY2F0aW9uQ2VudGVyXTsKICAgICBbd29ya3NwYWNlTm90
aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9hY3Rp
dmVTcGFjZURpZENoYW5nZTopIG5hbWU6TlNXb3Jrc3BhY2VBY3RpdmVTcGFjZURpZENoYW5nZU5v
dGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKIAorICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2FwcGxpY2F0
aW9uV2lsbFRlcm1pbmF0ZTopIG5hbWU6TlNBcHBsaWNhdGlvbldpbGxUZXJtaW5hdGVOb3RpZmlj
YXRpb24gb2JqZWN0Ok5TQXBwXTsKKwogICAgIHJldHVybiBzZWxmOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3Bw
CShyZXZpc2lvbiAxNzAxMDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRFbmNvZGlu
Zy5oPgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1h
cGhvcmUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTU4OCw4ICs1ODksMjkg
QEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3RvcmFnZQogICAgIHNlc3Npb25T
dG9yYWdlTmFtZXNwYWNlLT5jbG9uZVRvKCpuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSk7CiB9
CiAKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSgpCit7Cisg
ICAgQmluYXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgJnNlbWFwaG9yZV0geworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxJUEM6OkNv
bm5lY3Rpb24+LCB1aW50NjRfdD4+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyc1RvUmVt
b3ZlOworICAgICAgICBIYXNoTWFwPHN0ZDo6cGFpcjxSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiwg
dWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBzdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24g
PSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbjsKKyAgICAgICAgZm9yIChIYXNoTWFwPHN0ZDo6
cGFpcjxSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiwgdWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFy
ZWE+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYmVnaW4o
KSwgZW5kID0gc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cmVtb3ZlTGlzdGVuZXIoaXQtPmtleS5maXJzdC5n
ZXQoKSwgaXQtPmtleS5zZWNvbmQpOworICAgICAgICAgICAgY29ubmVjdGlvbkFuZFN0b3JhZ2VN
YXBJRFBhaXJzVG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICB9CisKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcnNUb1Jl
bW92ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9u
LnJlbW92ZShjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcnNUb1JlbW92ZVtpXSk7CisKKyAg
ICAgICAgbV9zdG9yYWdlQXJlYXNNdXRleC51bmxvY2soKTsKKyAgICAgICAgc2VtYXBob3JlLnNp
Z25hbCgpOworICAgIH0pOworICAgIHNlbWFwaG9yZS53YWl0KHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6bWF4KCkpOworfQorCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjppbnZhbGlkYXRlQ29u
bmVjdGlvbkludGVybmFsKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbikKIHsKKyAgICBtX3N0
b3JhZ2VBcmVhc011dGV4LmxvY2soKTsKICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxJUEM6
OkNvbm5lY3Rpb24+LCB1aW50NjRfdD4+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyc1Rv
UmVtb3ZlOwogICAgIEhhc2hNYXA8c3RkOjpwYWlyPFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+LCB1
aW50NjRfdD4sIFJlZlB0cjxTdG9yYWdlQXJlYT4+IHN0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbiA9
IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uOwogICAgIGZvciAoSGFzaE1hcDxzdGQ6OnBhaXI8
UmVmUHRyPElQQzo6Q29ubmVjdGlvbj4sIHVpbnQ2NF90PiwgUmVmUHRyPFN0b3JhZ2VBcmVhPj46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmJlZ2luKCksIGVu
ZCA9IHN0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBA
IC02MDIsNiArNjI0LDcgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6aW52YWxpZGF0ZUNvbm5lY3Rp
bwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElE
UGFpcnNUb1JlbW92ZS5zaXplKCk7ICsraSkKICAgICAgICAgbV9zdG9yYWdlQXJlYXNCeUNvbm5l
Y3Rpb24ucmVtb3ZlKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyc1RvUmVtb3ZlW2ldKTsK
KyAgICBtX3N0b3JhZ2VBcmVhc011dGV4LnVubG9jaygpOwogfQogCiBTdG9yYWdlTWFuYWdlcjo6
U3RvcmFnZUFyZWEqIFN0b3JhZ2VNYW5hZ2VyOjpmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0
aW9uKiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgJKHJl
dmlzaW9uIDE3MDEwMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBwcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSopOwogICAg
IHZvaWQgcHJvY2Vzc1dpbGxDbG9zZUNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5Kik7CisgICAg
dm9pZCBhcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUoKTsKIAogICAgIC8vIEZJWE1FOiBJbnN0ZWFk
IG9mIGEgY29udGV4dCArIEMgZnVuY3Rpb24sIHRoaXMgc2hvdWxkIHRha2UgYSBXVEY6OkZ1bmN0
aW9uLCBidXQgd2UgY3VycmVudGx5IGRvbid0CiAgICAgLy8gc3VwcG9ydCBhcmd1bWVudHMgaW4g
ZnVuY3Rpb25zLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233354</attachid>
            <date>2014-06-19 00:39:14 -0700</date>
            <delta_ts>2014-06-19 11:55:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>5943</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDE0MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA2LTE4ICBSb2dlciBG
b25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRG9uJ3Qga2lsbCB0aGUgVUlQ
cm9jZXNzIHVudGlsIGFsbCBsb2NhbCBzdG9yYWdlIHRyYW5zYWN0aW9ucyBoYXZlIGJlZW4gY29t
bWl0dGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0MDQyLgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTY2NjA3MjQ+LgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3Lm1tOiBBZGQgYSBsaXN0ZW5lciBmb3IgdGhlIGFwcGxpY2F0aW9uIHdpbGwgdGVybWlu
YXRlIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgKC1bV0tWaWV3IF9hcHBsaWNhdGlvbldpbGxUZXJt
aW5hdGU6XSk6CisgICAgICAgICgtW1dLVmlldyBpbml0V2l0aEZyYW1lOmNvbnRleHQ6Y29uZmln
dXJhdGlvbjp3ZWJWaWV3Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcDog
Q2FsbHMgY29kZSBpbiBTdG9yYWdlTWFuYWdlciB0byBjbGVhbnVwIGxvY2FsIHN0b3JhZ2UgdHJh
bnNhY3Rpb25zIHVwb24gYXBwbGljYXRpb24gdGVybWluYXRpb24uCisgICAgICAgIChXZWJLaXQ6
OldlYkNvbnRleHQ6OmFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkNvbnRleHQuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmFwcGxpY2F0aW9u
V2lsbFRlcm1pbmF0ZSk6CisgICAgICAgIERpc3BhdGNoIGxvY2FsIHN0b3JhZ2UgY2xlYW51cCB0
YXNrIHRvIGJhY2tncm91bmQgdGhyZWFkIGFuZCBtYWtlIHN1cmUgdGhlIFVJUHJvY2VzcyBjYW4n
dCBleGl0IGVhcmx5LgorICAgICAgICAqIFVJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2Vy
Lmg6CisKIDIwMTQtMDYtMTggIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeGluZyB0aGUgR1RLKyBidWlsZCBhZnRlciByMTcwMTE0
LgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkocmV2aXNpb24g
MTcwMTAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MjAsNiArNzIwLDExIEBAIHZvaWQgV2ViQ29udGV4dDo6cHJvY2Vzc1dp
bGxDbG9zZUNvbm5lY3QKICAgICBtX3N0b3JhZ2VNYW5hZ2VyLT5wcm9jZXNzV2lsbENsb3NlQ29u
bmVjdGlvbihwcm9jZXNzKTsKIH0KIAordm9pZCBXZWJDb250ZXh0OjphcHBsaWNhdGlvbldpbGxU
ZXJtaW5hdGUoKQoreworICAgIG1fc3RvcmFnZU1hbmFnZXItPmFwcGxpY2F0aW9uV2lsbFRlcm1p
bmF0ZSgpOworfQorCiB2b2lkIFdlYkNvbnRleHQ6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmco
V2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogewogICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250
YWlucyhwcm9jZXNzKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJ
KHJldmlzaW9uIDE3MDEwMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
cm9jZXNzV2lsbENsb3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkqKTsKICAgICB2b2lkIHBy
b2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7CiAKKyAgICB2b2lkIGFw
cGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSgpOwogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3Mg
ZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSopOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
Lm1tCShyZXZpc2lvbiAxNzAxMDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2MjIsNiArMjYyMiwxMSBAQCAtICh2b2lk
KV9hY3RpdmVTcGFjZURpZENoYW5nZTooTlNOb3RpZmljCiAgICAgX2RhdGEtPl9wYWdlLT52aWV3
U3RhdGVEaWRDaGFuZ2UoVmlld1N0YXRlOjpJc1Zpc2libGUpOwogfQogCistICh2b2lkKV9hcHBs
aWNhdGlvbldpbGxUZXJtaW5hdGU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7Cisg
ICAgX2RhdGEtPl9wYWdlLT5wcm9jZXNzKCkuY29udGV4dCgpLmFwcGxpY2F0aW9uV2lsbFRlcm1p
bmF0ZSgpOworfQorCiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmVnaXN0ZXJVSVByb2Nlc3NUb2tl
bnMKIHsKICAgICAvLyBJbml0aWFsaXplIHJlbW90ZSBhY2Nlc3NpYmlsaXR5IHdoZW4gdGhlIHdp
bmRvdyBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkLgpAQCAtMzQ4NSw2ICszNDkwLDgg
QEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcgogICAgIE5TTm90aWZp
Y2F0aW9uQ2VudGVyKiB3b3Jrc3BhY2VOb3RpZmljYXRpb25DZW50ZXIgPSBbW05TV29ya3NwYWNl
IHNoYXJlZFdvcmtzcGFjZV0gbm90aWZpY2F0aW9uQ2VudGVyXTsKICAgICBbd29ya3NwYWNlTm90
aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9hY3Rp
dmVTcGFjZURpZENoYW5nZTopIG5hbWU6TlNXb3Jrc3BhY2VBY3RpdmVTcGFjZURpZENoYW5nZU5v
dGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKIAorICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2FwcGxpY2F0
aW9uV2lsbFRlcm1pbmF0ZTopIG5hbWU6TlNBcHBsaWNhdGlvbldpbGxUZXJtaW5hdGVOb3RpZmlj
YXRpb24gb2JqZWN0Ok5TQXBwXTsKKwogICAgIHJldHVybiBzZWxmOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3Bw
CShyZXZpc2lvbiAxNzAxMDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRFbmNvZGlu
Zy5oPgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1h
cGhvcmUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTU4OCw2ICs1ODksMjUg
QEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3RvcmFnZQogICAgIHNlc3Npb25T
dG9yYWdlTmFtZXNwYWNlLT5jbG9uZVRvKCpuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSk7CiB9
CiAKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSgpCit7Cisg
ICAgQmluYXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgJnNlbWFwaG9yZV0geworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxJUEM6OkNv
bm5lY3Rpb24+LCB1aW50NjRfdD4+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyc1RvUmVt
b3ZlOworICAgICAgICBIYXNoTWFwPHN0ZDo6cGFpcjxSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiwg
dWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBzdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24g
PSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbjsKKyAgICAgICAgZm9yIChIYXNoTWFwPHN0ZDo6
cGFpcjxSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiwgdWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFy
ZWE+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYmVnaW4o
KSwgZW5kID0gc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+cmVtb3ZlTGlzdGVuZXIoaXQtPmtleS5maXJzdC5n
ZXQoKSwgaXQtPmtleS5zZWNvbmQpOworICAgICAgICAgICAgY29ubmVjdGlvbkFuZFN0b3JhZ2VN
YXBJRFBhaXJzVG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICB9CisKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcnNUb1Jl
bW92ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9u
LnJlbW92ZShjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcnNUb1JlbW92ZVtpXSk7CisKKyAg
ICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOworICAgIH0pOworICAgIHNlbWFwaG9yZS53YWl0KHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOworfQorCiB2b2lkIFN0b3JhZ2VNYW5h
Z2VyOjppbnZhbGlkYXRlQ29ubmVjdGlvbkludGVybmFsKElQQzo6Q29ubmVjdGlvbiogY29ubmVj
dGlvbikKIHsKICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+LCB1
aW50NjRfdD4+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyc1RvUmVtb3ZlOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5o
CShyZXZpc2lvbiAxNzAxMDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgcHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkqKTsK
ICAgICB2b2lkIHByb2Nlc3NXaWxsQ2xvc2VDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSopOwor
ICAgIHZvaWQgYXBwbGljYXRpb25XaWxsVGVybWluYXRlKCk7CiAKICAgICAvLyBGSVhNRTogSW5z
dGVhZCBvZiBhIGNvbnRleHQgKyBDIGZ1bmN0aW9uLCB0aGlzIHNob3VsZCB0YWtlIGEgV1RGOjpG
dW5jdGlvbiwgYnV0IHdlIGN1cnJlbnRseSBkb24ndAogICAgIC8vIHN1cHBvcnQgYXJndW1lbnRz
IGluIGZ1bmN0aW9ucy4K
</data>
<flag name="review"
          id="257853"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>