<?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>43535</bug_id>
          
          <creation_ts>2010-08-04 20:15:48 -0700</creation_ts>
          <short_desc>Add shared memory abstraction</short_desc>
          <delta_ts>2010-08-05 11:03:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>260355</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-08-04 20:15:48 -0700</bug_when>
    <thetext>Add shared memory abstraction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260364</commentid>
    <comment_count>1</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-08-04 20:30:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/8275295&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260366</commentid>
    <comment_count>2</comment_count>
      <attachid>63538</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-08-04 20:41:50 -0700</bug_when>
    <thetext>Created attachment 63538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260367</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-04 20:43:31 -0700</bug_when>
    <thetext>Attachment 63538 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/Platform/SharedMemory.h:34:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit2/Platform/win/SharedMemoryWin.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/Platform/mac/SharedMemoryMac.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 3 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260567</commentid>
    <comment_count>4</comment_count>
      <attachid>63538</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-08-05 06:26:54 -0700</bug_when>
    <thetext>Comment on attachment 63538
Patch

&gt; +void SharedMemory::Handle::encode(CoreIPC::ArgumentEncoder&amp; encoder) const
&gt; +{
&gt; +    ASSERT(m_port);
&gt; +    ASSERT(m_size);
&gt; +    
&gt; +    encoder.encodeUInt64(m_size);
&gt; +    encoder.encode(CoreIPC::MachPort(m_port, MACH_MSG_TYPE_COPY_SEND));
&gt; +    const_cast&lt;Handle*&gt;(this)-&gt;m_port = MACH_PORT_NULL;
&gt; +}

Making m_port mutable seems preferable.

&gt; +bool SharedMemory::Handle::decode(CoreIPC::ArgumentDecoder&amp; decoder, Handle&amp; handle)
&gt; +{
&gt; +    ASSERT(!handle.m_port);
&gt; +    ASSERT(!handle.m_size);
&gt; +
&gt; +
&gt; +    uint64_t size;

Extra newline here.

&gt; +PassRefPtr&lt;SharedMemory&gt; SharedMemory::create(size_t size)
&gt; +{
&gt; +    mach_vm_address_t address;
&gt; +    kern_return_t kr = mach_vm_allocate(mach_task_self(), &amp;address, round_page(size), VM_FLAGS_ANYWHERE);
&gt; +    if (kr != KERN_SUCCESS)
&gt; +        return 0;
&gt; +
&gt; +    RefPtr&lt;SharedMemory&gt; sharedMemory(adoptRef(new SharedMemory));
&gt; +    sharedMemory-&gt;m_size = size;
&gt; +    sharedMemory-&gt;m_data = (void*)address;

Is the cast really needed? A C++ cast would be nicer if so.

&gt; +PassRefPtr&lt;SharedMemory&gt; SharedMemory::create(const Handle&amp; handle, Protection protection)
&gt; +{
&gt; +    if (!handle.m_port)
&gt; +        return 0;
&gt; +    
&gt; +    // Map the memory.
&gt; +    vm_prot_t vmProtection = machProtection(protection);
&gt; +    mach_vm_address_t mappedAddress;
&gt; +    kern_return_t kr = mach_vm_map(mach_task_self(), &amp;mappedAddress, handle.m_size, 0, VM_FLAGS_ANYWHERE, handle.m_port, 0, false, vmProtection, vmProtection, VM_INHERIT_NONE);
&gt; +    if (kr != KERN_SUCCESS)
&gt; +        return 0;
&gt; +
&gt; +    RefPtr&lt;SharedMemory&gt; sharedMemory(adoptRef(new SharedMemory));
&gt; +    sharedMemory-&gt;m_size = handle.m_size;
&gt; +    sharedMemory-&gt;m_data = (void*)mappedAddress;

Ditto.

&gt; +SharedMemory::~SharedMemory()
&gt; +{
&gt; +    if (!m_data)
&gt; +        return;
&gt; +    
&gt; +    kern_return_t kr = mach_vm_deallocate(mach_task_self(), (vm_address_t)m_data, round_page(m_size));

C++ cast would be better.

&gt; +bool SharedMemory::createHandle(Handle&amp; handle, Protection protection)
&gt; +{
&gt; +    ASSERT(!handle.m_port);
&gt; +    ASSERT(!handle.m_size);
&gt; +
&gt; +    mach_vm_address_t address = (vm_address_t)m_data;

Here, too!

&gt; +unsigned SharedMemory::systemPageSize()
&gt; +{
&gt; +    static unsigned pageSize = 0;
&gt; +
&gt; +    if (!pageSize) {
&gt; +        SYSTEM_INFO systemInfo;
&gt; +        ::GetSystemInfo(&amp;systemInfo);
&gt; +        pageSize = systemInfo.dwPageSize;
&gt; +    }
&gt; +
&gt; +    return pageSize;
&gt; +}

Thanks!

&gt; +++ b/WebKit2/win/WebKit2.vcproj
&gt; @@ -1364,6 +1364,10 @@
&gt;  				RelativePath=&quot;..\Platform\WorkItem.h&quot;
&gt;  				&gt;
&gt;  			&lt;/File&gt;
&gt; +            &lt;File
&gt; +            	RelativePath=&quot;..\Platform\SharedMemory.h&quot;
&gt; +            &gt;
&gt; +            &lt;/File&gt;

VS wants you to use tabs. Copying-and-pasting an existing &lt;File&gt; element is usually the best way to go.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260698</commentid>
    <comment_count>5</comment_count>
      <attachid>63538</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-05 10:56:45 -0700</bug_when>
    <thetext>Comment on attachment 63538
Patch

&gt; +#include &lt;wtf/Noncopyable.h&gt;
&gt; +#include &lt;wtf/PassRefPtr.h&gt;
&gt; +#include &lt;wtf/RefCounted.h&gt;

No need to include Noncopyable if you include RefCounted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260700</commentid>
    <comment_count>6</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-08-05 11:03:22 -0700</bug_when>
    <thetext>Committed r64765: &lt;http://trac.webkit.org/changeset/64765&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63538</attachid>
            <date>2010-08-04 20:41:50 -0700</date>
            <delta_ts>2010-08-05 10:56:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43535-20100804204149.patch</filename>
            <type>text/plain</type>
            <size>17754</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
MjAxNGM2NjI5ZWQyZGYyZjdkN2EwMDgzMDRlMWEyNzA0ZjNiYmE0OS4uNTJkODhjMDg4ZWEzMDFi
M2RjYjUwMzRmNDg0NmRhOWI3NWI1MjE0OCAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0wOC0wNCAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzaGFyZWQgbWVtb3J5IGFic3RyYWN0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzUzNQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vODI3NTI5NT4KKworICAgICAgICAqIFBsYXRmb3JtL1No
YXJlZE1lbW9yeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjopOgor
ICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OnNpemUpOgorICAgICAgICBSZXR1cm4gdGhl
IHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgc2hhcmVkIG1lbW9yeSBvYmplY3QuCisgICAgICAgIAor
ICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmRhdGEpOgorICAgICAgICBSZXR1cm4gYSBw
b2ludGVyIHRvIHRoZSBzaGFyZWQgbWVtb3J5IG9iamVjdC4KKyAgICAgICAgCisgICAgICAgICog
UGxhdGZvcm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSk6CisgICAgICAgIEEgc2hhcmVkIG1lbW9yeSBoYW5kbGUs
IHdoaWNoIGNhbiBiZSBwYXNzZWQgaW4gYSBDb3JlSVBDIENvbm5lY3Rpb24uCisKKyAgICAgICAg
KFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUpOgorICAgICAgICBBbGxvY2F0ZSB0aGUgc2hh
cmVkIG1lbW9yeS4KKworICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1v
cnkpOgorICAgICAgICBEZWFsbG9jYXRlIHRoZSBzaGFyZWQgbWVtb3J5LgorCisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKToKKyAgICAgICAgQ3JlYXRlIGEgbWFj
aCBwb3J0IGFuZCBwYXNzIGl0IHRvIHRoZSBoYW5kbGUuCisKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSk6CisgICAgICAgIFJldHVybiB0aGUgc3lzdGVtIHBh
Z2Ugc2l6ZSwgaW4gYnl0ZXMuCisgICAgICAgIAorICAgICAgICAqIFBsYXRmb3JtL3dpbi9TaGFy
ZWRNZW1vcnlXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgQWRkIHN0dWJiZWQgb3V0IHZlcnNpb24u
CisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogd2luL1dlYktpdDIudmNwcm9qOgorICAgICAgICBBZGQgZmlsZXMuCisKIDIwMTAtMDgtMDQg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5o
IGIvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTgxYmM5ZDc5
NjMzN2Y5ZjU1ODNjZWFiMWI4N2EyYTdkZGUyMTVkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTaGFyZWRNZW1vcnlfaAorI2RlZmluZSBTaGFyZWRNZW1vcnlfaAorCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7CisgICAgY2xhc3Mg
QXJndW1lbnREZWNvZGVyOworICAgIGNsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFNoYXJlZE1lbW9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPFNo
YXJlZE1lbW9yeT4geworcHVibGljOgorICAgIGVudW0gUHJvdGVjdGlvbiB7CisgICAgICAgIFJl
YWRPbmx5LAorICAgICAgICBSZWFkV3JpdGUKKyAgICB9OworCisgICAgY2xhc3MgSGFuZGxlIDog
Tm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgSGFuZGxlKCk7CisgICAgICAgIH5I
YW5kbGUoKTsKKworICAgICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIm
KSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciYsIEhhbmRsZSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNo
YXJlZE1lbW9yeTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIG1hY2hfcG9ydF90IG1fcG9y
dDsKKyNlbmRpZgorICAgICAgICBzaXplX3QgbV9zaXplOworICAgIH07CisgICAgCisgICAgLy8g
Q3JlYXRlIGEgc2hhcmVkIG1lbW9yeSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc2l6ZS4gV2lsbCBy
ZXR1cm4gMCBvbiBmYWlsdXJlLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4g
Y3JlYXRlKHNpemVfdCk7CisKKyAgICAvLyBDcmVhdGUgYSBzaGFyZWQgbWVtb3J5IG9iamVjdCBm
cm9tIHRoZSBnaXZlbiBoYW5kbGUgYW5kIHRoZSByZXF1ZXN0ZWQgcHJvdGVjdGlvbi4gV2lsbCBy
ZXR1cm4gMCBvbiBmYWlsdXJlLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4g
Y3JlYXRlKGNvbnN0IEhhbmRsZSYsIFByb3RlY3Rpb24pOworICAgIAorICAgIH5TaGFyZWRNZW1v
cnkoKTsKKworICAgIGJvb2wgY3JlYXRlSGFuZGxlKEhhbmRsZSYsIFByb3RlY3Rpb24pOworCisg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICB2b2lkKiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICAvLyBSZXR1cm4gdGhlIHN5c3RlbSBw
YWdlIHNpemUgaW4gYnl0ZXMuCisgICAgc3RhdGljIHVuc2lnbmVkIHN5c3RlbVBhZ2VTaXplKCk7
CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICB2b2lkKiBtX2RhdGE7Cit9Owor
Cit9OworCisjZW5kaWYgLy8gU2hhcmVkTWVtb3J5X2gKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxh
dGZvcm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5jcHAgYi9XZWJLaXQyL1BsYXRmb3JtL21hYy9TaGFy
ZWRNZW1vcnlNYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkNjE1NTIyMGE4MmE2ODhhMjM1MjM2ZjdlZGNj
ZDQxZjAzNjYyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL21hYy9TaGFy
ZWRNZW1vcnlNYWMuY3BwCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
IlNoYXJlZE1lbW9yeS5oIgorCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVk
ZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAi
TWFjaFBvcnQuaCIKKyNpbmNsdWRlIDxtYWNoL21hY2hfdm0uaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTaGFyZWRNZW1vcnk6OkhhbmRsZTo6SGFu
ZGxlKCkKKyAgICA6IG1fcG9ydChNQUNIX1BPUlRfTlVMTCkKKyAgICAsIG1fc2l6ZSgwKQorewor
fQorCitTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSgpCit7CisgICAgaWYgKG1fcG9ydCkK
KyAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgbV9wb3J0KTsK
K30KKwordm9pZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wb3J0KTsKKyAgICBBU1NF
UlQobV9zaXplKTsKKyAgICAKKyAgICBlbmNvZGVyLmVuY29kZVVJbnQ2NChtX3NpemUpOworICAg
IGVuY29kZXIuZW5jb2RlKENvcmVJUEM6Ok1hY2hQb3J0KG1fcG9ydCwgTUFDSF9NU0dfVFlQRV9D
T1BZX1NFTkQpKTsKKyAgICBjb25zdF9jYXN0PEhhbmRsZSo+KHRoaXMpLT5tX3BvcnQgPSBNQUNI
X1BPUlRfTlVMTDsKK30KKworYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgQVNT
RVJUKCFoYW5kbGUubV9wb3J0KTsKKyAgICBBU1NFUlQoIWhhbmRsZS5tX3NpemUpOworCisKKyAg
ICB1aW50NjRfdCBzaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVVSW50NjQoc2l6ZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvcmVJUEM6Ok1hY2hQb3J0IG1hY2hQb3J0Owor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoQ29yZUlQQzo6T3V0KG1hY2hQb3J0KSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBoYW5kbGUubV9zaXplID0gc2l6ZTsKKyAgICBoYW5k
bGUubV9wb3J0ID0gbWFjaFBvcnQucG9ydCgpOworICAgIHJldHVybiB0cnVlOworfQorCitQYXNz
UmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCit7
CisgICAgbWFjaF92bV9hZGRyZXNzX3QgYWRkcmVzczsKKyAgICBrZXJuX3JldHVybl90IGtyID0g
bWFjaF92bV9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCAmYWRkcmVzcywgcm91bmRfcGFnZShz
aXplKSwgVk1fRkxBR1NfQU5ZV0hFUkUpOworICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5
KGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9
IHNpemU7CisgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSAodm9pZCopYWRkcmVzczsKKworICAg
IHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZtX3By
b3RfdCBtYWNoUHJvdGVjdGlvbihTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb24gcHJvdGVjdGlvbikK
K3sKKyAgICBzd2l0Y2ggKHByb3RlY3Rpb24pIHsKKyAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVh
ZE9ubHk6CisgICAgICAgIHJldHVybiBWTV9QUk9UX1JFQUQ7CisgICAgY2FzZSBTaGFyZWRNZW1v
cnk6OlJlYWRXcml0ZToKKyAgICAgICAgcmV0dXJuIFZNX1BST1RfUkVBRCB8IFZNX1BST1RfV1JJ
VEU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFZNX1BS
T1RfTk9ORTsgICAgCit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6
OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQorewor
ICAgIGlmICghaGFuZGxlLm1fcG9ydCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgLy8g
TWFwIHRoZSBtZW1vcnkuCisgICAgdm1fcHJvdF90IHZtUHJvdGVjdGlvbiA9IG1hY2hQcm90ZWN0
aW9uKHByb3RlY3Rpb24pOworICAgIG1hY2hfdm1fYWRkcmVzc190IG1hcHBlZEFkZHJlc3M7Cisg
ICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hfdm1fbWFwKG1hY2hfdGFza19zZWxmKCksICZtYXBw
ZWRBZGRyZXNzLCBoYW5kbGUubV9zaXplLCAwLCBWTV9GTEFHU19BTllXSEVSRSwgaGFuZGxlLm1f
cG9ydCwgMCwgZmFsc2UsIHZtUHJvdGVjdGlvbiwgdm1Qcm90ZWN0aW9uLCBWTV9JTkhFUklUX05P
TkUpOworICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0UmVmKG5ldyBTaGFyZWRN
ZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IGhhbmRsZS5tX3NpemU7CisgICAg
c2hhcmVkTWVtb3J5LT5tX2RhdGEgPSAodm9pZCopbWFwcGVkQWRkcmVzczsKKyAgICAKKyAgICBy
ZXR1cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsKK30KKworU2hhcmVkTWVtb3J5Ojp+U2hhcmVk
TWVtb3J5KCkKK3sKKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGtlcm5fcmV0dXJuX3Qga3IgPSBtYWNoX3ZtX2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwg
KHZtX2FkZHJlc3NfdCltX2RhdGEsIHJvdW5kX3BhZ2UobV9zaXplKSk7CisgICAgQVNTRVJUX1VO
VVNFRChrciwga3IgPT0gS0VSTl9TVUNDRVNTKTsKK30KKyAgICAKK2Jvb2wgU2hhcmVkTWVtb3J5
OjpjcmVhdGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKK3sK
KyAgICBBU1NFUlQoIWhhbmRsZS5tX3BvcnQpOworICAgIEFTU0VSVCghaGFuZGxlLm1fc2l6ZSk7
CisKKyAgICBtYWNoX3ZtX2FkZHJlc3NfdCBhZGRyZXNzID0gKHZtX2FkZHJlc3NfdCltX2RhdGE7
CisgICAgbWVtb3J5X29iamVjdF9zaXplX3Qgc2l6ZSA9IHJvdW5kX3BhZ2UobV9zaXplKTsKKwor
ICAgIC8vIENyZWF0ZSBhIG1hY2ggcG9ydCB0aGF0IHJlcHJlc2VudHMgdGhlIHNoYXJlZCBtZW1v
cnkuCisgICAgbWFjaF9wb3J0X3QgcG9ydDsKKyAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF9t
YWtlX21lbW9yeV9lbnRyeV82NChtYWNoX3Rhc2tfc2VsZigpLCAmc2l6ZSwgYWRkcmVzcywgbWFj
aFByb3RlY3Rpb24ocHJvdGVjdGlvbiksICZwb3J0LCBNQUNIX1BPUlRfTlVMTCk7CisgICAgaWYg
KGtyICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFuZGxl
Lm1fcG9ydCA9IHBvcnQ7CisgICAgaGFuZGxlLm1fc2l6ZSA9IHNpemU7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordW5zaWduZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCit7Cisg
ICAgcmV0dXJuIHZtX3BhZ2Vfc2l6ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9TaGFyZWRNZW1vcnlXaW4uY3BwIGIvV2ViS2l0
Mi9QbGF0Zm9ybS93aW4vU2hhcmVkTWVtb3J5V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjU5Yjk1MmJk
NzhhYzY1NjE5MTY5NTRjN2NmM2MwYTdhNjI4YjY3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
Mi9QbGF0Zm9ybS93aW4vU2hhcmVkTWVtb3J5V2luLmNwcApAQCAtMCwwICsxLDg5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NoYXJlZE1lbW9yeTo6SGFuZGxlOjpI
YW5kbGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1NoYXJlZE1lbW9yeTo6SGFu
ZGxlOjp+SGFuZGxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgU2hhcmVkTWVtb3J5
OjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEhhbmRs
ZSYgaGFuZGxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90
IHNpemUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFz
c1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYg
aGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsgICAgCit9CisKK1NoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyAgICAKK2Jvb2wgU2hhcmVkTWVtb3J5OjpjcmVh
dGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordW5zaWduZWQgU2hhcmVk
TWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCit7CisgICAgc3RhdGljIHVuc2lnbmVkIHBhZ2VTaXpl
ID0gMDsKKworICAgIGlmICghcGFnZVNpemUpIHsKKyAgICAgICAgU1lTVEVNX0lORk8gc3lzdGVt
SW5mbzsKKyAgICAgICAgOjpHZXRTeXN0ZW1JbmZvKCZzeXN0ZW1JbmZvKTsKKyAgICAgICAgcGFn
ZVNpemUgPSBzeXN0ZW1JbmZvLmR3UGFnZVNpemU7CisgICAgfQorCisgICAgcmV0dXJuIHBhZ2VT
aXplOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjYyNjZmNWMyOGY0MzkwMzEyMjc0MGIyMzYwOGY1ZjI3
MWE5YjU3NC4uZGNjYTQzZmFjNjg4ZjZhMDZkOTIzMzgyOWU2NjFiNjA3YjYyNDcwZSAxMDA2NDQK
LS0tIGEvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQxLDYgKzQxLDggQEAK
IAkJMUEyMTYyQjExMUYzODk3MTAwOEFEMEY1IC8qIE5QUnVudGltZVV0aWxpdGllcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyMTYyQUYxMUYzODk3
MTAwOEFEMEY1IC8qIE5QUnVudGltZVV0aWxpdGllcy5oICovOyB9OwogCQkxQTI0QjVGMjExRjUz
MUU4MDBDMzgyNjkgLyogTWFjaFV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTI0QjVGMDExRjUzMUU4MDBDMzgyNjkgLyogTWFjaFV0
aWxpdGllcy5jcHAgKi87IH07CiAJCTFBMjRCNUYzMTFGNTMxRTgwMEMzODI2OSAvKiBNYWNoVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTI0QjVGMTExRjUzMUU4MDBDMzgyNjkgLyogTWFjaFV0aWxpdGllcy5oICovOyB9OworCQkxQTI0
QkVENTEyMDg5NEQxMDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTI0QkVEMzEyMDg5NEQxMDBGQkIwNTkgLyog
U2hhcmVkTWVtb3J5LmggKi87IH07CisJCTFBMjRCRjNBMTIwODk2QTYwMEZCQjA1OSAvKiBTaGFy
ZWRNZW1vcnlNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUEyNEJGMzkxMjA4OTZBNjAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeU1hYy5jcHAgKi87
IH07CiAJCTFBMzAwNjZFMTExMEY0RjcwMDMxOTM3QyAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTMwMDY2QzEx
MTBGNEY3MDAzMTkzN0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovOyB9OwogCQkxQTMwRUFD
NjExNUQ3REEzMDA1M0U5MzcgLyogQ29ubmVjdGlvbk1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTMwRUFDNTExNUQ3REEzMDA1M0U5MzcgLyog
Q29ubmVjdGlvbk1hYy5jcHAgKi87IH07CiAJCTFBM0U3MzYxMTFDQzI2NTkwMDdCRDUzOSAvKiBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBM0U3MzVGMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaCAqLzsgfTsKQEAgLTM0NSw2ICszNDcsOCBAQAogCQkxQTIxNjJBRjExRjM4OTcxMDA4
QUQwRjUgLyogTlBSdW50aW1lVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5QUnVudGltZVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQTI0QjVGMDExRjUzMUU4MDBDMzgyNjkgLyogTWFjaFV0aWxpdGllcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNoVXRpbGl0aWVzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEyNEI1RjExMUY1MzFFODAwQzM4MjY5IC8qIE1hY2hVdGls
aXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjaFV0aWxpdGllcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTI0QkVEMzEyMDg5NEQxMDBGQkIwNTkg
LyogU2hhcmVkTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJl
ZE1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTI0QkYzOTEyMDg5NkE2
MDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5TWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNoYXJlZE1lbW9yeU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBMzAwNjZDMTExMEY0RjcwMDMxOTM3QyAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3BvbnNpdmVuZXNzVGltZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEzMEVBQzUxMTVEN0RBMzAwNTNFOTM3IC8q
IENvbm5lY3Rpb25NYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q29ubmVjdGlvbk1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBM0U3MzVG
MTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03NzUsNiArNzc5LDcgQEAKIAkJCQkxQTI0QjVGMTExRjUzMUU4
MDBDMzgyNjkgLyogTWFjaFV0aWxpdGllcy5oICovLAogCQkJCUMwRTNBQTQ4MTIwOUU0NTAwMEE0
OUQwMSAvKiBNb2R1bGVNYWMubW0gKi8sCiAJCQkJQkMwMDkyRjUxMTU4MzdBMzAwRTBBRTJBIC8q
IFJ1bkxvb3BNYWMubW0gKi8sCisJCQkJMUEyNEJGMzkxMjA4OTZBNjAwRkJCMDU5IC8qIFNoYXJl
ZE1lbW9yeU1hYy5jcHAgKi8sCiAJCQkJQkMwMDkyRjYxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtR
dWV1ZU1hYy5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKQEAgLTExNzEsNiArMTE3Niw3
IEBACiAJCQkJQkM4NzgwRkIxMTYxQzJCODAwQ0MyNzY4IC8qIFBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIuaCAqLywKIAkJCQlCQzJFNkU3NzExNDE5NzBDMDBBNjNCMUUgLyogUnVuTG9vcC5jcHAg
Ki8sCiAJCQkJQkMyRTZFNzgxMTQxOTcwQzAwQTYzQjFFIC8qIFJ1bkxvb3AuaCAqLywKKwkJCQkx
QTI0QkVEMzEyMDg5NEQxMDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5LmggKi8sCiAJCQkJQkMyRTZF
N0MxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtJdGVtLmggKi8sCiAJCQkJQkMyRTZFN0QxMTQxOTcw
QzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi8sCiAJCQkJQkMyRTZFN0UxMTQxOTcwQzAwQTYz
QjFFIC8qIFdvcmtRdWV1ZS5oICovLApAQCAtMTM3NSw2ICsxMzgxLDcgQEAKIAkJCQlDMEUzQUE3
QzEyMDlFODNDMDBBNDlEMDEgLyogTW9kdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTZBNEE1
OTEyMEExQUI1MDBDMDVCN0YgLyogV0tFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2QTRB
NUQxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTI0
QkVENTEyMDg5NEQxMDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5LmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTE1ODIsNiArMTU4OSw3IEBACiAJCQkJQzBFM0FBN0ExMjA5RTgzMDAwQTQ5RDAxIC8qIE1vZHVs
ZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwRTNBQTdCMTIwOUU4MzUwMEE0OUQwMSAvKiBN
b2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2QTRBNUExMjBBMUFCNTAwQzA1QjdGIC8q
IFdLRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUEyNEJGM0ExMjA4OTZBNjAwRkJCMDU5
IC8qIFNoYXJlZE1lbW9yeU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYktp
dDIvd2luL1dlYktpdDIudmNwcm9qIGIvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oKaW5kZXgg
MTk2M2JlOTY1YjczNDdiMGU0ZTE5YjlhZjFhODExYjY2Njk3NTQ4ZC4uZTgxYzM5OWFlM2Q5ZTBi
NWNmNTM2ZmU3OWIyM2RlNDc1ZDIyZDU3ZCAxMDA3NTUKLS0tIGEvV2ViS2l0Mi93aW4vV2ViS2l0
Mi52Y3Byb2oKKysrIGIvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oKQEAgLTEzNjQsNiArMTM2
NCwxMCBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cV29ya0l0ZW0uaCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCisgICAgICAgICAgICA8RmlsZQ0KKyAgICAgICAgICAgIAlSZWxhdGl2
ZVBhdGg9Ii4uXFBsYXRmb3JtXFNoYXJlZE1lbW9yeS5oIg0KKyAgICAgICAgICAgID4NCisgICAg
ICAgICAgICA8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9y
bVxXb3JrUXVldWUuY3BwIg0KIAkJCQk+DQpAQCAtMTM4NCw2ICsxMzg4LDEwIEBACiAJCQkJCT4N
CiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9y
bVx3aW5cU2hhcmVkTWVtb3J5V2luLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8
RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVx3aW5cV29ya1F1ZXVlV2luLmNw
cCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0K
</data>
<flag name="review"
          id="51920"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>