<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[248569] branches/safari-608-branch</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/248569">248569</a></dd>
<dt>Author</dt> <dd>alancoon@apple.com</dd>
<dt>Date</dt> <dd>2019-08-12 16:42:20 -0700 (Mon, 12 Aug 2019)</dd>
</dl>

<h3>Log Message</h3>
<pre>Cherry-pick <a href="http://trac.webkit.org/projects/webkit/changeset/248438">r248438</a>. rdar://problem/54093220

    [iOS] Position image information should respect the image orientation
    https://bugs.webkit.org/show_bug.cgi?id=200487

    Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2019-08-08
    Reviewed by Simon Fraser.

    Source/WebCore:

    Re-factor CachedImage::imageSizeForRenderer() into another overriding
    function which does not scale the imageSize. Therefore the new function
    returns FloatSize while the original function returns LayoutSize.

    * loader/cache/CachedImage.cpp:
    (WebCore::CachedImage::imageSizeForRenderer const):
    * loader/cache/CachedImage.h:
    * rendering/RenderElement.h:

    Source/WebKit:

    imagePositionInformation() should respect the image orientation when
    drawing an Image to a ShareableBitmap context.

    boundsPositionInformation() already takes care of the image orientation
    because it gets RenderImage::enclosingBoundingBox().

    * WebProcess/WebPage/ios/WebPageIOS.mm:
    (WebKit::imagePositionInformation):

    Tools:

    Add an API test to verify the position image information is drawn rotated
    because of respecting its image orientation.

    * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
    * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
    (TestWebKitAPI::TEST):
    * TestWebKitAPI/Tests/WebKitCocoa/exif-orientation-8-llo.jpg: Added.
    * TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html: Added.

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248438 268f45cc-cd09-0410-ab3c-d52691b4dbfc</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchessafari608branchSourceWebCoreChangeLog">branches/safari-608-branch/Source/WebCore/ChangeLog</a></li>
<li><a href="#branchessafari608branchSourceWebCoreloadercacheCachedImagecpp">branches/safari-608-branch/Source/WebCore/loader/cache/CachedImage.cpp</a></li>
<li><a href="#branchessafari608branchSourceWebCoreloadercacheCachedImageh">branches/safari-608-branch/Source/WebCore/loader/cache/CachedImage.h</a></li>
<li><a href="#branchessafari608branchSourceWebCorerenderingRenderElementh">branches/safari-608-branch/Source/WebCore/rendering/RenderElement.h</a></li>
<li><a href="#branchessafari608branchSourceWebKitChangeLog">branches/safari-608-branch/Source/WebKit/ChangeLog</a></li>
<li><a href="#branchessafari608branchSourceWebKitWebProcessWebPageiosWebPageIOSmm">branches/safari-608-branch/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm</a></li>
<li><a href="#branchessafari608branchToolsChangeLog">branches/safari-608-branch/Tools/ChangeLog</a></li>
<li><a href="#branchessafari608branchToolsTestWebKitAPITestWebKitAPIxcodeprojprojectpbxproj">branches/safari-608-branch/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj</a></li>
<li><a href="#branchessafari608branchToolsTestWebKitAPITestsWebKitCocoaWKRequestActivatedElementInfomm">branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#branchessafari608branchToolsTestWebKitAPITestsWebKitCocoaexiforientation8llojpg">branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/exif-orientation-8-llo.jpg</a></li>
<li><a href="#branchessafari608branchToolsTestWebKitAPITestsWebKitCocoaimgwithrotatedimagehtml">branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchessafari608branchSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Source/WebCore/ChangeLog (248568 => 248569)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Source/WebCore/ChangeLog      2019-08-12 23:42:16 UTC (rev 248568)
+++ branches/safari-608-branch/Source/WebCore/ChangeLog 2019-08-12 23:42:20 UTC (rev 248569)
</span><span class="lines">@@ -1,5 +1,66 @@
</span><span class="cx"> 2019-08-12  Alan Coon  <alancoon@apple.com>
</span><span class="cx"> 
</span><ins>+        Cherry-pick r248438. rdar://problem/54093220
+
+    [iOS] Position image information should respect the image orientation
+    https://bugs.webkit.org/show_bug.cgi?id=200487
+    
+    Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2019-08-08
+    Reviewed by Simon Fraser.
+    
+    Source/WebCore:
+    
+    Re-factor CachedImage::imageSizeForRenderer() into another overriding
+    function which does not scale the imageSize. Therefore the new function
+    returns FloatSize while the original function returns LayoutSize.
+    
+    * loader/cache/CachedImage.cpp:
+    (WebCore::CachedImage::imageSizeForRenderer const):
+    * loader/cache/CachedImage.h:
+    * rendering/RenderElement.h:
+    
+    Source/WebKit:
+    
+    imagePositionInformation() should respect the image orientation when
+    drawing an Image to a ShareableBitmap context.
+    
+    boundsPositionInformation() already takes care of the image orientation
+    because it gets RenderImage::enclosingBoundingBox().
+    
+    * WebProcess/WebPage/ios/WebPageIOS.mm:
+    (WebKit::imagePositionInformation):
+    
+    Tools:
+    
+    Add an API test to verify the position image information is drawn rotated
+    because of respecting its image orientation.
+    
+    * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+    * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
+    (TestWebKitAPI::TEST):
+    * TestWebKitAPI/Tests/WebKitCocoa/exif-orientation-8-llo.jpg: Added.
+    * TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248438 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-08-08  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+            [iOS] Position image information should respect the image orientation
+            https://bugs.webkit.org/show_bug.cgi?id=200487
+
+            Reviewed by Simon Fraser.
+
+            Re-factor CachedImage::imageSizeForRenderer() into another overriding
+            function which does not scale the imageSize. Therefore the new function
+            returns FloatSize while the original function returns LayoutSize.
+
+            * loader/cache/CachedImage.cpp:
+            (WebCore::CachedImage::imageSizeForRenderer const):
+            * loader/cache/CachedImage.h:
+            * rendering/RenderElement.h:
+
+2019-08-12  Alan Coon  <alancoon@apple.com>
+
</ins><span class="cx">         Cherry-pick r248410. rdar://problem/54084721
</span><span class="cx"> 
</span><span class="cx">     Do not allow navigations of frames about to get replaced by the result of evaluating javascript: URLs
</span></span></pre></div>
<a id="branchessafari608branchSourceWebCoreloadercacheCachedImagecpp"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Source/WebCore/loader/cache/CachedImage.cpp (248568 => 248569)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Source/WebCore/loader/cache/CachedImage.cpp   2019-08-12 23:42:16 UTC (rev 248568)
+++ branches/safari-608-branch/Source/WebCore/loader/cache/CachedImage.cpp      2019-08-12 23:42:20 UTC (rev 248569)
</span><span class="lines">@@ -275,23 +275,26 @@
</span><span class="cx">     m_svgImageCache->setContainerContextForClient(client, containerSize, containerZoom, imageURL);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-LayoutSize CachedImage::imageSizeForRenderer(const RenderElement* renderer, float multiplier, SizeType sizeType)
</del><ins>+FloatSize CachedImage::imageSizeForRenderer(const RenderElement* renderer, SizeType sizeType) const
</ins><span class="cx"> {
</span><span class="cx">     if (!m_image)
</span><del>-        return LayoutSize();
</del><ins>+        return { };
</ins><span class="cx"> 
</span><del>-    LayoutSize imageSize;
-
</del><span class="cx">     if (is<BitmapImage>(*m_image) && renderer && renderer->shouldRespectImageOrientation() == RespectImageOrientation)
</span><del>-        imageSize = LayoutSize(downcast<BitmapImage>(*m_image).sizeRespectingOrientation());
-    else if (is<SVGImage>(*m_image) && sizeType == UsedSize)
-        imageSize = LayoutSize(m_svgImageCache->imageSizeForRenderer(renderer));
-    else
-        imageSize = LayoutSize(m_image->size());
</del><ins>+        return downcast<BitmapImage>(*m_image).sizeRespectingOrientation();
</ins><span class="cx"> 
</span><del>-    if (multiplier == 1.0f)
</del><ins>+    if (is<SVGImage>(*m_image) && sizeType == UsedSize)
+        return m_svgImageCache->imageSizeForRenderer(renderer);
+
+    return m_image->size();
+}
+
+LayoutSize CachedImage::imageSizeForRenderer(const RenderElement* renderer, float multiplier, SizeType sizeType) const
+{
+    LayoutSize imageSize = LayoutSize(imageSizeForRenderer(renderer, sizeType));
+    if (imageSize.isEmpty() || multiplier == 1.0f)
</ins><span class="cx">         return imageSize;
</span><del>-        
</del><ins>+
</ins><span class="cx">     // Don't let images that have a width/height >= 1 shrink below 1 when zoomed.
</span><span class="cx">     float widthScale = m_image->hasRelativeWidth() ? 1.0f : multiplier;
</span><span class="cx">     float heightScale = m_image->hasRelativeHeight() ? 1.0f : multiplier;
</span></span></pre></div>
<a id="branchessafari608branchSourceWebCoreloadercacheCachedImageh"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Source/WebCore/loader/cache/CachedImage.h (248568 => 248569)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Source/WebCore/loader/cache/CachedImage.h     2019-08-12 23:42:16 UTC (rev 248568)
+++ branches/safari-608-branch/Source/WebCore/loader/cache/CachedImage.h        2019-08-12 23:42:20 UTC (rev 248569)
</span><span class="lines">@@ -75,8 +75,9 @@
</span><span class="cx">         UsedSize,
</span><span class="cx">         IntrinsicSize
</span><span class="cx">     };
</span><ins>+    WEBCORE_EXPORT FloatSize imageSizeForRenderer(const RenderElement* renderer, SizeType = UsedSize) const;
</ins><span class="cx">     // This method takes a zoom multiplier that can be used to increase the natural size of the image by the zoom.
</span><del>-    LayoutSize imageSizeForRenderer(const RenderElement*, float multiplier, SizeType = UsedSize); // returns the size of the complete image.
</del><ins>+    LayoutSize imageSizeForRenderer(const RenderElement*, float multiplier, SizeType = UsedSize) const; // returns the size of the complete image.
</ins><span class="cx">     void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio);
</span><span class="cx"> 
</span><span class="cx">     bool isManuallyCached() const { return m_isManuallyCached; }
</span></span></pre></div>
<a id="branchessafari608branchSourceWebCorerenderingRenderElementh"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Source/WebCore/rendering/RenderElement.h (248568 => 248569)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Source/WebCore/rendering/RenderElement.h      2019-08-12 23:42:16 UTC (rev 248568)
+++ branches/safari-608-branch/Source/WebCore/rendering/RenderElement.h 2019-08-12 23:42:20 UTC (rev 248569)
</span><span class="lines">@@ -204,7 +204,7 @@
</span><span class="cx">     RenderBlock* containingBlockForFixedPosition() const;
</span><span class="cx">     RenderBlock* containingBlockForAbsolutePosition() const;
</span><span class="cx"> 
</span><del>-    RespectImageOrientationEnum shouldRespectImageOrientation() const;
</del><ins>+    WEBCORE_EXPORT RespectImageOrientationEnum shouldRespectImageOrientation() const;
</ins><span class="cx"> 
</span><span class="cx">     void removeFromRenderFragmentedFlow();
</span><span class="cx">     virtual void resetEnclosingFragmentedFlowAndChildInfoIncludingDescendants(RenderFragmentedFlow*);
</span></span></pre></div>
<a id="branchessafari608branchSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Source/WebKit/ChangeLog (248568 => 248569)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Source/WebKit/ChangeLog       2019-08-12 23:42:16 UTC (rev 248568)
+++ branches/safari-608-branch/Source/WebKit/ChangeLog  2019-08-12 23:42:20 UTC (rev 248569)
</span><span class="lines">@@ -1,5 +1,66 @@
</span><span class="cx"> 2019-08-12  Alan Coon  <alancoon@apple.com>
</span><span class="cx"> 
</span><ins>+        Cherry-pick r248438. rdar://problem/54093220
+
+    [iOS] Position image information should respect the image orientation
+    https://bugs.webkit.org/show_bug.cgi?id=200487
+    
+    Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2019-08-08
+    Reviewed by Simon Fraser.
+    
+    Source/WebCore:
+    
+    Re-factor CachedImage::imageSizeForRenderer() into another overriding
+    function which does not scale the imageSize. Therefore the new function
+    returns FloatSize while the original function returns LayoutSize.
+    
+    * loader/cache/CachedImage.cpp:
+    (WebCore::CachedImage::imageSizeForRenderer const):
+    * loader/cache/CachedImage.h:
+    * rendering/RenderElement.h:
+    
+    Source/WebKit:
+    
+    imagePositionInformation() should respect the image orientation when
+    drawing an Image to a ShareableBitmap context.
+    
+    boundsPositionInformation() already takes care of the image orientation
+    because it gets RenderImage::enclosingBoundingBox().
+    
+    * WebProcess/WebPage/ios/WebPageIOS.mm:
+    (WebKit::imagePositionInformation):
+    
+    Tools:
+    
+    Add an API test to verify the position image information is drawn rotated
+    because of respecting its image orientation.
+    
+    * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+    * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
+    (TestWebKitAPI::TEST):
+    * TestWebKitAPI/Tests/WebKitCocoa/exif-orientation-8-llo.jpg: Added.
+    * TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248438 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-08-08  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+            [iOS] Position image information should respect the image orientation
+            https://bugs.webkit.org/show_bug.cgi?id=200487
+
+            Reviewed by Simon Fraser.
+
+            imagePositionInformation() should respect the image orientation when
+            drawing an Image to a ShareableBitmap context.
+
+            boundsPositionInformation() already takes care of the image orientation
+            because it gets RenderImage::enclosingBoundingBox().
+
+            * WebProcess/WebPage/ios/WebPageIOS.mm:
+            (WebKit::imagePositionInformation):
+
+2019-08-12  Alan Coon  <alancoon@apple.com>
+
</ins><span class="cx">         Cherry-pick r248436. rdar://problem/54093228
</span><span class="cx"> 
</span><span class="cx">     Set WKWebView opaque based on drawsBackground in PageConfiguration.
</span></span></pre></div>
<a id="branchessafari608branchSourceWebKitWebProcessWebPageiosWebPageIOSmm"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm (248568 => 248569)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm    2019-08-12 23:42:16 UTC (rev 248568)
+++ branches/safari-608-branch/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm       2019-08-12 23:42:20 UTC (rev 248569)
</span><span class="lines">@@ -2621,9 +2621,12 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     FloatSize screenSizeInPixels = screenSize();
</span><ins>+    FloatSize imageSize = renderImage.cachedImage()->imageSizeForRenderer(&renderImage);
+    
</ins><span class="cx">     screenSizeInPixels.scale(page.corePage()->deviceScaleFactor());
</span><del>-    FloatSize scaledSize = largestRectWithAspectRatioInsideRect(image->size().width() / image->size().height(), FloatRect(0, 0, screenSizeInPixels.width(), screenSizeInPixels.height())).size();
-    FloatSize bitmapSize = scaledSize.width() < image->size().width() ? scaledSize : image->size();
</del><ins>+    FloatSize scaledSize = largestRectWithAspectRatioInsideRect(imageSize.width() / imageSize.height(), FloatRect(0, 0, screenSizeInPixels.width(), screenSizeInPixels.height())).size();
+    FloatSize bitmapSize = scaledSize.width() < imageSize.width() ? scaledSize : imageSize;
+    
</ins><span class="cx">     // FIXME: Only select ExtendedColor on images known to need wide gamut
</span><span class="cx">     ShareableBitmap::Configuration bitmapConfiguration;
</span><span class="cx">     bitmapConfiguration.colorSpace.cgColorSpace = screenColorSpace(page.corePage()->mainFrame().view());
</span><span class="lines">@@ -2636,7 +2639,8 @@
</span><span class="cx">     if (!graphicsContext)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    graphicsContext->drawImage(*image, FloatRect(0, 0, bitmapSize.width(), bitmapSize.height()));
</del><ins>+    auto shouldRespectImageOrientation = renderImage.shouldRespectImageOrientation();
+    graphicsContext->drawImage(*image, FloatRect(0, 0, bitmapSize.width(), bitmapSize.height()), ImageOrientationDescription(shouldRespectImageOrientation));
</ins><span class="cx">     info.image = sharedBitmap;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchessafari608branchToolsChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Tools/ChangeLog (248568 => 248569)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Tools/ChangeLog       2019-08-12 23:42:16 UTC (rev 248568)
+++ branches/safari-608-branch/Tools/ChangeLog  2019-08-12 23:42:20 UTC (rev 248569)
</span><span class="lines">@@ -1,5 +1,66 @@
</span><span class="cx"> 2019-08-12  Alan Coon  <alancoon@apple.com>
</span><span class="cx"> 
</span><ins>+        Cherry-pick r248438. rdar://problem/54093220
+
+    [iOS] Position image information should respect the image orientation
+    https://bugs.webkit.org/show_bug.cgi?id=200487
+    
+    Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2019-08-08
+    Reviewed by Simon Fraser.
+    
+    Source/WebCore:
+    
+    Re-factor CachedImage::imageSizeForRenderer() into another overriding
+    function which does not scale the imageSize. Therefore the new function
+    returns FloatSize while the original function returns LayoutSize.
+    
+    * loader/cache/CachedImage.cpp:
+    (WebCore::CachedImage::imageSizeForRenderer const):
+    * loader/cache/CachedImage.h:
+    * rendering/RenderElement.h:
+    
+    Source/WebKit:
+    
+    imagePositionInformation() should respect the image orientation when
+    drawing an Image to a ShareableBitmap context.
+    
+    boundsPositionInformation() already takes care of the image orientation
+    because it gets RenderImage::enclosingBoundingBox().
+    
+    * WebProcess/WebPage/ios/WebPageIOS.mm:
+    (WebKit::imagePositionInformation):
+    
+    Tools:
+    
+    Add an API test to verify the position image information is drawn rotated
+    because of respecting its image orientation.
+    
+    * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+    * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
+    (TestWebKitAPI::TEST):
+    * TestWebKitAPI/Tests/WebKitCocoa/exif-orientation-8-llo.jpg: Added.
+    * TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248438 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-08-08  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+            [iOS] Position image information should respect the image orientation
+            https://bugs.webkit.org/show_bug.cgi?id=200487
+
+            Reviewed by Simon Fraser.
+
+            Add an API test to verify the position image information is drawn rotated
+            because of respecting its image orientation.
+
+            * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+            * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
+            (TestWebKitAPI::TEST):
+            * TestWebKitAPI/Tests/WebKitCocoa/exif-orientation-8-llo.jpg: Added.
+            * TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html: Added.
+
+2019-08-12  Alan Coon  <alancoon@apple.com>
+
</ins><span class="cx">         Cherry-pick r248410. rdar://problem/54084721
</span><span class="cx"> 
</span><span class="cx">     Do not allow navigations of frames about to get replaced by the result of evaluating javascript: URLs
</span></span></pre></div>
<a id="branchessafari608branchToolsTestWebKitAPITestWebKitAPIxcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (248568 => 248569)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj   2019-08-12 23:42:16 UTC (rev 248568)
+++ branches/safari-608-branch/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj      2019-08-12 23:42:20 UTC (rev 248569)
</span><span class="lines">@@ -392,6 +392,8 @@
</span><span class="cx">          6B9ABE122086952F00D75DE6 /* HTTPParsers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B9ABE112086952F00D75DE6 /* HTTPParsers.cpp */; };
</span><span class="cx">          6BFD294C1D5E6C1D008EC968 /* HashCountedSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A38D7E51C752D5F004F157D /* HashCountedSet.cpp */; };
</span><span class="cx">          725C3EF322058A5B007C36FC /* AdditionalSupportedImageTypes.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 725C3EF2220584BA007C36FC /* AdditionalSupportedImageTypes.html */; };
</span><ins>+               7283A9D022FA754900B21C7D /* img-with-rotated-image.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 7283A9CE22FA6BBE00B21C7D /* img-with-rotated-image.html */; };
+               7283A9D222FB1E0600B21C7D /* exif-orientation-8-llo.jpg in Copy Resources */ = {isa = PBXBuildFile; fileRef = 7283A9D122FB1D9700B21C7D /* exif-orientation-8-llo.jpg */; };
</ins><span class="cx">           751B05D61F8EAC410028A09E /* DatabaseTrackerTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 751B05D51F8EAC1A0028A09E /* DatabaseTrackerTest.mm */; };
</span><span class="cx">          754CEC811F6722F200D0039A /* AutoFillAvailable.mm in Sources */ = {isa = PBXBuildFile; fileRef = 754CEC801F6722DC00D0039A /* AutoFillAvailable.mm */; };
</span><span class="cx">          7673499D1930C5BB00E44DF9 /* StopLoadingDuringDidFailProvisionalLoad_bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7673499A1930182E00E44DF9 /* StopLoadingDuringDidFailProvisionalLoad_bundle.cpp */; };
</span><span class="lines">@@ -1178,6 +1180,7 @@
</span><span class="cx">                          F407FE391F1D0DFC0017CF25 /* enormous.svg in Copy Resources */,
</span><span class="cx">                          07492B3C1DF8B86600633DE1 /* enumerateMediaDevices.html in Copy Resources */,
</span><span class="cx">                          C5E1AFFE16B221F1006CC1F2 /* execCopy.html in Copy Resources */,
</span><ins>+                               7283A9D222FB1E0600B21C7D /* exif-orientation-8-llo.jpg in Copy Resources */,
</ins><span class="cx">                           CDA29B2B20FD358400F15CED /* ExitFullscreenOnEnterPiP.html in Copy Resources */,
</span><span class="cx">                          F41AB9A31EF4696B0083FA08 /* file-uploading.html in Copy Resources */,
</span><span class="cx">                          BC2D006412AA04CE00E732A3 /* file-with-anchor.html in Copy Resources */,
</span><span class="lines">@@ -1220,6 +1223,7 @@
</span><span class="cx">                          F41AB9A51EF4696B0083FA08 /* image-and-textarea.html in Copy Resources */,
</span><span class="cx">                          F4DEF6ED1E9B4DB60048EF61 /* image-in-link-and-input.html in Copy Resources */,
</span><span class="cx">                          F45B63FB1F197F4A009D38B9 /* image-map.html in Copy Resources */,
</span><ins>+                               7283A9D022FA754900B21C7D /* img-with-rotated-image.html in Copy Resources */,
</ins><span class="cx">                           935786CD20F6A2910000CDFC /* IndexedDB.sqlite3 in Copy Resources */,
</span><span class="cx">                          935786CE20F6A2A10000CDFC /* IndexedDB.sqlite3-shm in Copy Resources */,
</span><span class="cx">                          935786CC20F6A2700000CDFC /* IndexedDB.sqlite3-wal in Copy Resources */,
</span><span class="lines">@@ -1870,6 +1874,8 @@
</span><span class="cx">          6B4E861B2220A5520022F389 /* RegistrableDomain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RegistrableDomain.cpp; sourceTree = "<group>"; };
</span><span class="cx">          6B9ABE112086952F00D75DE6 /* HTTPParsers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HTTPParsers.cpp; sourceTree = "<group>"; };
</span><span class="cx">          725C3EF2220584BA007C36FC /* AdditionalSupportedImageTypes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = AdditionalSupportedImageTypes.html; sourceTree = "<group>"; };
</span><ins>+               7283A9CE22FA6BBE00B21C7D /* img-with-rotated-image.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "img-with-rotated-image.html"; sourceTree = "<group>"; };
+               7283A9D122FB1D9700B21C7D /* exif-orientation-8-llo.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "exif-orientation-8-llo.jpg"; sourceTree = "<group>"; };
</ins><span class="cx">           751B05D51F8EAC1A0028A09E /* DatabaseTrackerTest.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = DatabaseTrackerTest.mm; sourceTree = "<group>"; };
</span><span class="cx">          754CEC801F6722DC00D0039A /* AutoFillAvailable.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AutoFillAvailable.mm; sourceTree = "<group>"; };
</span><span class="cx">          7560917719259C59009EF06E /* MemoryCacheAddImageToCacheIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MemoryCacheAddImageToCacheIOS.mm; sourceTree = "<group>"; };
</span><span class="lines">@@ -3136,6 +3142,7 @@
</span><span class="cx">                          51C8E1A81F27F47300BF731B /* EmptyGrandfatheredResourceLoadStatistics.plist */,
</span><span class="cx">                          F4C2AB211DD6D94100E06D5B /* enormous-video-with-sound.html */,
</span><span class="cx">                          F407FE381F1D0DE60017CF25 /* enormous.svg */,
</span><ins>+                               7283A9D122FB1D9700B21C7D /* exif-orientation-8-llo.jpg */,
</ins><span class="cx">                           CDA29B2A20FD344E00F15CED /* ExitFullscreenOnEnterPiP.html */,
</span><span class="cx">                          F41AB99B1EF4692C0083FA08 /* file-uploading.html */,
</span><span class="cx">                          A17EAC542083056E0084B41B /* find.pdf */,
</span><span class="lines">@@ -3160,6 +3167,7 @@
</span><span class="cx">                          F41AB9931EF4692C0083FA08 /* image-and-textarea.html */,
</span><span class="cx">                          F4DEF6EC1E9B4D950048EF61 /* image-in-link-and-input.html */,
</span><span class="cx">                          F45B63FA1F197F33009D38B9 /* image-map.html */,
</span><ins>+                               7283A9CE22FA6BBE00B21C7D /* img-with-rotated-image.html */,
</ins><span class="cx">                           934FA5C720F69FEE0040DC1B /* IndexedDB.sqlite3 */,
</span><span class="cx">                          934FA5C620F69FED0040DC1B /* IndexedDB.sqlite3-shm */,
</span><span class="cx">                          934FA5C520F69FED0040DC1B /* IndexedDB.sqlite3-wal */,
</span></span></pre></div>
<a id="branchessafari608branchToolsTestWebKitAPITestsWebKitCocoaWKRequestActivatedElementInfomm"></a>
<div class="modfile"><h4>Modified: branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm (248568 => 248569)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm        2019-08-12 23:42:16 UTC (rev 248568)
+++ branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm   2019-08-12 23:42:20 UTC (rev 248569)
</span><span class="lines">@@ -96,7 +96,51 @@
</span><span class="cx">     
</span><span class="cx">     TestWebKitAPI::Util::run(&finished);
</span><span class="cx"> }
</span><del>-    
</del><ins>+
+TEST(WebKit, RequestActivatedElementInfoForRotatedImage)
+{
+    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]);
+    NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"img-with-rotated-image" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
+
+    [webView loadRequest:request];
+    [webView _test_waitForDidFinishNavigation];
+
+    __block bool finished = false;
+    [webView _requestActivatedElementAtPosition:CGPointMake(50, 50) completionBlock: ^(_WKActivatedElementInfo *elementInfo) {
+
+        auto image = elementInfo.image.CGImage;
+        auto data = adoptCF(CGDataProviderCopyData(CGImageGetDataProvider(image)));
+        auto buffer = reinterpret_cast<const unsigned*>(CFDataGetBytePtr(data.get()));
+
+        auto pixelAt = [&](unsigned x, unsigned y) {
+            unsigned i = y * elementInfo.image.size.width + x;
+            return buffer[i];
+        };
+        
+        static const unsigned yellow = 0xFFFFFF00;
+        static const unsigned red = 0xFFF51900;
+        static const unsigned green = 0xFF278000;
+        static const unsigned blue = 0xFF0000FF;
+
+        EXPECT_TRUE(elementInfo.type == _WKActivatedElementTypeImage);
+        EXPECT_WK_STREQ(elementInfo.imageURL.lastPathComponent, "exif-orientation-8-llo.jpg");
+        EXPECT_NOT_NULL(elementInfo.image);
+        EXPECT_EQ(elementInfo.boundingRect.size.width, 50);
+        EXPECT_EQ(elementInfo.boundingRect.size.height, 100);
+        EXPECT_EQ(elementInfo.image.size.width, 50);
+        EXPECT_EQ(elementInfo.image.size.height, 100);
+
+        EXPECT_EQ(pixelAt(0, 0), yellow);
+        EXPECT_EQ(pixelAt(elementInfo.image.size.width - 1, 0), red);
+        EXPECT_EQ(pixelAt(0, elementInfo.image.size.height - 1), green);
+        EXPECT_EQ(pixelAt(elementInfo.image.size.width - 1, elementInfo.image.size.height - 1), blue);
+
+        finished = true;
+    }];
+
+    TestWebKitAPI::Util::run(&finished);
+}
+
</ins><span class="cx"> TEST(WebKit, RequestActivatedElementInfoForBlank)
</span><span class="cx"> {
</span><span class="cx">     auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]);
</span></span></pre></div>
<a id="branchessafari608branchToolsTestWebKitAPITestsWebKitCocoaexiforientation8llojpg"></a>
<div class="addfile"><h4>Added: branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/exif-orientation-8-llo.jpg (0 => 248569)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/exif-orientation-8-llo.jpg                              (rev 0)
+++ branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/exif-orientation-8-llo.jpg 2019-08-12 23:42:20 UTC (rev 248569)
</span><span class="lines">@@ -0,0 +1,99 @@
</span><ins>+\xFF\xD8\xFF\xE0JFIFHH\xFF\xE1\x82ExifMM*JR(\x87iZHH\xA0d\xA02\xFF\xE2\xFCICC_PROFILE\xECapplmntrRGB XYZ \xDA
+
+   5acspAPPL\xF6\xD6\xD3-appldescPbdscm\xB4Bcprt\xF8\xD0wtpt\xC8rXYZ\xDCgXYZ\xF0bXYZrTRC aarg+$ vcgt+DndinX>chad\x98,mmod\xC4(bTRC gTRC aabg+$ aagg+$ descDisplaymluc nlNL\xE8daDK\xFEplPLenUS,nbNO>frFRPptBRfptPT~zhCN \x94esES\xA0jaJP\xB2ruRU$\xC0svSE\xE4zhTW\xF4deDE
 fiFIitIT"koKR 6Kleuren-LCDLCD-farvesk\xE6rmKolor LCDColor LCDFarge-LCDLCD couleurLCD ColoridoLCD a Cores_i\x82r LCDLCD color0\xAB0\xE90\xFC LCD&25B=>9 -48A?;59F\xE4rg-
 LCD_i\x82rm\xB2fv\x98oy:VhFarb-LCDV\xE4ri-LCDLCD colori\xCE\xEC\xB7\xEC LCDtextCopyright Apple, Inc., 2010XYZ \xF3R\xCFXYZ g25\xF1'XYZ i\x97\xBBNqXYZ & \xC1ɔcurv
+#(-26;@EJOTY^chmrw|\x81\x86\x8B\x90\x95\x9A\x9F\xA3\xA8\xAD\xB2\xB7\xBC\xC1\xC6\xCB\xD0\xD5\xDB\xE0\xE5\xEB\xF0\xF6\xFB+%+28>ELRY`gnu|\x83\x8B\x92\x9A\xA1\xA9\xB1\xB9\xC1\xC9\xD1\xD9\xE1\xE9\xF2\xFA &/8AKT]gqz\x84\x8E\x98\xA2\xAC\xB6\xC1\xCB\xD5\xE0\xEB\xF5 !-8COZfr~\x8A\x96\xA2\xAE\xBA\xC7\xD3\xE0\xEC\xF9 -;HUcq~\x8C\x9A\xA8\xB6\xC4\xD3\xE1\xF0\xFE++:IXgw\x86\x96\xA6\xB5\xC5\xD5\xE5\xF6'7HYj{\x8C\x9D\xAF\xC0\xD1\xE3\xF5+=Oat\x86\x99\xAC\xBF\xD2\xE5\xF8 2FZn\x82\x96\xAA\xBE\xD2\xE7\xFB             %       :       O       d       y       \x8F    \xA4    \xBA    \xCF    \xE5    \xFB
+
+'
+=
+T
+j
+\x81
+\x98
+\xAE
+\xC5
+\xDC
+\xF3 " 9 Q i \x80 \x98 \xB0 \xC8 \xE1 \xF9  * C \ u \x8E \xA7 \xC0 \xD9 \xF3+++&+@+Z+t+\x8E+\xA9+\xC3+\xDE+\xF8.Id\x9B\xB6\xD2\xEE     %A^z\x96\xB3\xCF\xEC   &Ca~\x9B\xB9\xD7\xF51Om\x8C\xAA\xC9\xE8&Ed\x84\xA3\xC3\xE3#Cc\x83\xA4\xC5\xE5'Ij\x8B\xAD\xCE\xF04Vx\x9B\xBD\xE0&Il\x8F\xB2\xD6\xFAAe\x89\xAE\xD2\xF7@e\x8A\xAF\xD5\xFA Ek\x91\xB7\xDD*Qw\x9E\xC5\xEC;c\x8A\xB2\xDA*R{\xA3\xCC\xF5Gp\x99\xC3\xEC@j\x94\xBE\xE9>i\x94\xBF\xEA  A l \x98 \xC4 \xF0!!H!u!\xA1!\xCE!\xFB"'"U"\x82"\xAF"\xDD#
+#8#f#\x94#\xC2#\xF0$$M$|$\xAB$\xDA%   %8%h%\x97%\xC7%\xF7&'&W&\x87&\xB7&\xE8''I'z'\xAB'\xDC(+(?(q(\xA2(\xD4))8)k)\x9D)\xD0**5*h*\x9B*\xCF++6+i+\x9D+\xD1,,9,n,\xA2,\xD7- -A-v-\xAB-\xE1..L.\x82.\xB7.\xEE/$/Z/\x91/\xC7/\xFE050l0\xA40\xDB11J1\x821\xBA1\xF22*2c2\x9B2\xD43+3F33\xB83\xF14+4e4\x9E4\xD855M5\x875\xC25\xFD676r6\xAE6\xE97$7`7\x9C7\xD788P8\x8C8\xC899B99\xBC9\xF9:6:t:\xB2:\xEF;-;k;\xAA;\xE8<'<e<\xA4<\xE3="=a=\xA1=\xE0> >`>\xA0>\xE0?!?a?\xA2?\xE2@#@d@\xA6@\xE7A)AjA\xACA\xEEB0BrB\xB5B\xF7C:C}C\xC0DDGD\x8AD\xCEEEUE\x9AE\xDEF"FgF\xABF\xF0G5G{G\xC0HHKH\x91H\xD7IIcI\xA9I\xF0J7J}J\xC4K KSK\x9AK\xE2L*LrL\xBAMMJM\x93M\xDCN%NnN\xB7OOIO\x93O\xDDP'PqP\xBBQQPQ\x9BQ\xE6R1R|R\xC7SS_S\xAAS\xF6TBT\x8FT\xDBU(UuU\xC2VV\V\xA9V\xF7WDW\x92W\xE0X/X}X\xCBYYiY\xB8ZZVZ\xA6Z\xF5[E[\x95[\xE5\5\\x86\\xD6]']x]\xC9^^l^\xBD__a_\xB3``W`\xAA`\xFCaOa\xA2a\xF5bIb\x9Cb\xF0cCc\x97c\xEBd@d\x94d\xE9e=e\x92e\xE7f=f\x92f\xE8g=g\x93g\xE9h?h\x
 96h\xECiCi\x9Ai\xF1jHj\x9Fj\xF7kOk\xA7k\xFFlWl\xAFmm`m\xB9nnkn\xC4ooxo\xD1p+p\x86p\xE0q:q\x95q\xF0rKr\xA6ss]s\xB8ttpt\xCCu(u\x85u\xE1v>v\x9Bv\xF8wVw\xB3xxnx\xCCy*y\x89y\xE7zFz\xA5{{c{\xC2|!|\x81|\xE1}A}\xA1~~b~\xC2#\x84\xE5\x80G\x80\xA8\x81
+\x81k\x81͂0\x82\x92\x82\xF4\x83W\x83\xBA\x84\x84\x80\x84\xE3\x85G\x85\xAB\x86\x86r\x86ׇ;\x87\x9F\x88\x88i\x88Ή3\x89\x99\x89\xFE\x8Ad\x8Aʋ0\x8B\x96\x8B\xFC\x8Cc\x8Cʍ1\x8D\x98\x8D\xFF\x8Ef\x8EΏ6\x8F\x9E\x90\x90n\x90֑?\x91\xA8\x92\x92z\x92\xE3\x93M\x93\xB6\x94 \x94\x8A\x94\xF4\x95_\x95ɖ4\x96\x9F\x97
+\x97u\x97\xE0\x98L\x98\xB8\x99$\x99\x90\x99\xFC\x9Ah\x9A՛B\x9B\xAF\x9C\x9C\x89\x9C\xF7\x9Dd\x9DҞ@\x9E\xAE\x9F\x9F\x8B\x9F\xFA\xA0i\xA0ءG\xA1\xB6\xA2&\xA2\x96\xA3\xA3v\xA3\xE6\xA4V\xA4ǥ8\xA5\xA9\xA6\xA6\x8B\xA6\xFD\xA7n\xA7\xE0\xA8R\xA8ĩ7\xA9\xA9\xAA\xAA\x8F\xAB\xABu\xAB\xE9\xAC\\xACЭD\xAD\xB8\xAE-\xAE\xA1\xAF\xAF\x8B\xB0\xB0u\xB0\xEA\xB1`\xB1ֲK\xB2³8\xB3\xAE\xB4%\xB4\x9C\xB5\xB5\x8A\xB6\xB6y\xB6\xF0\xB7h\xB7\xE0\xB8Y\xB8ѹJ\xB9º;\xBA\xB5\xBB.\xBB\xA7\xBC!\xBC\x9B\xBD\xBD\x8F\xBE
+\xBE\x84\xBE\xFF\xBFz\xBF\xF5\xC0p\xC0\xEC\xC1g\xC1\xE3\xC2_\xC2\xDB\xC3X\xC3\xD4\xC4Q\xC4\xCE\xC5K\xC5\xC8\xC6F\xC6\xC3\xC7Aǿ\xC8=ȼ\xC9:ɹ\xCA8ʷ\xCB6˶\xCC5̵\xCD5͵\xCE6ζ\xCF7ϸ\xD09к\xD1<Ѿ\xD2?\xD2\xC1\xD3D\xD3\xC6\xD4I\xD4\xCB\xD5N\xD5\xD1\xD6U\xD6\xD8\xD7\\xD7\xE0\xD8d\xD8\xE8\xD9l\xD9\xF1\xDAv\xDA\xFBۀ\xDC܊\xDDݖ\xDEޢ\xDF)߯\xE06\xE0\xBD\xE1D\xE1\xCC\xE2S\xE2\xDB\xE3c\xE3\xEB\xE4s\xE4\xFC\xE5\x84\xE6+\xE6\x96\xE7\xE7\xA9\xE82\xE8\xBC\xE9F\xE9\xD0\xEA[\xEA\xE5\xEBp\xEB\xFB\xEC\x86\xED\xED\x9C\xEE(\xEE\xB4\xEF@\xEF\xCC\xF0X\xF0\xE5\xF1r\xF1\xFF\xF2\x8C\xF3\xF3\xA7\xF44\xF4\xC2\xF5P\xF5\xDE\xF6m\xF6\xFB\xF7\x8A\xF8\xF8\xA8\xF98\xF9\xC7\xFAW\xFA\xE7\xFBw\xFC\xFC\x98\xFD)\xFD\xBA\xFEK\xFE\xDC\xFFm\xFF\xFFparaff\xF2\xA7+Y\xD0
+\xC0vcgtV\x89q8\xE5\xC8\xA7\x8Fy      e
+[ U Q+VRZ`hn\x86\xC5[\xA6\xF1<\x87\xD90 ~!\xD4#+$\x83%\xDD':(\x98)\xF6+T,\xB4./y0\xE12L3\xB256\x867\xEF9T:\xBC<"=\x88>\xEE@RA\xB5CDxE\xD9G8H\x97I\xF5KTL\xABM\xE3OPAQmR\x97S\xC1T\xE6V
+W)XFY^Zr[\x83\\x90]\x9B^\xA1_\xA6`\xA8a\xA7b\xA7c\xA3d\x9Ee\x90fgnh^iNj<k+lm m\xFAn\xE9o\xD8p\xC7q\xB7r\xA7s\x96t\x85utvcwRxAy,z{{\xEC|\xD7}\xC1~\xAC\x97\x80\x81\x81m\x82X\x83C\x84.\x85\x86\x86\xF1\x87܈ȉ\xB4\x8A\xA0\x8B\x8C\x8C\x8D\x8D\x8F\x8E\x8E\x8F\x8E\x90\x8E\x91\x8D\x92\x8B\x93\x88\x94\x82\x95}\x96t\x97l\x98b\x99V\x9AI\x9B;\x9C,\x9D\x9E \x9E\xFA\x9F\xE6\xA0Ρ\xB3\xA2\x98\xA3|\xA4b\xA5H\xA6.\xA7\xA7\xFB\xA8\xE2\xA9ʪ\xB1\xAB\x9A\xAC\x82\xADl\xAEU\xAF?\xB0)\xB1\xB1\xFE\xB2\xE8\xB3Ӵ\xB8\xB5\x9C\xB6\x80\xB7c\xB8E\xB9'\xBA\xBA\xE8\xBBǼ\xA5\xBD\x81\xBE\\xBF7\xC0\xC0\xE9\xC1\xC1˜\xC3n\xC4C\xC5\xC5\xF1\xC6\xD0dzȖ\xC9z\xCA^\xCBB\xCC(\xCD\xCD\xF5\xCE\xDC\xCF\xC4Ьѕ\xD2~\xD3g\xD4P\xD5:\xD6#\xD7+\xD7\xF7\xD8\xE1\xD9\xD2\xDA\xC2۲ܢݑހ\xDFo\xE0]\xE1J\xE25\xE3 \xE4
+\xE4\xF2\xE5\xD9\xE6\xBF\xE7\xA4\xE8\x87\xE9k\xEAM\xEB.\xEC \xEC\xD7\xED\xA0\xEEk\xEF7\xF0\xF0\xD7\xF1\xAC\xF2\x84\xF3`\xF4A\xF5%\xF6\xF6\xFD\xF7\xF0\xF8\xE8\xF9\xE2\xFA\xE2\xFB\xE3\xFC\xE6\xFD\xED\xFE\xF4\xFF\xFFVEA/\xEE\xC1\x87S.\xE7 \xC6
+\xA6 \x8C v+_H7 \xFE/^\x94\xCC7h\xA1\xDDQ \x8E!\xCC#
+$G%\x85&\xC9()J*\x8E+\xD4-.h/\xB512O3\x994\xE36-7w8\xC2: ;S<\x9B=\xE1?)@mA\xB2B\xF9D>E\x83F\xBCG\xD8H\xE9I\xF8KLMN'O/P3Q6R6S3T-U%VWXX\xEFY\xDEZ\xCD[\xBA\\xA1]\x80^[_5``\xE9a\xC4b\xA0c{dUe/f
+f\xE5g\xC0h\x9BiwjQk,ll\xE2m\xBDn\x99orpLq&rr\xDAs\xB3t\x8DugvAww\xF4x\xCEy\xA7z\x82{[|4} }\xE6~\xBF\x98\x80s\x81X\x82>\x83#\x84\x84\xEE\x85Ԇ\xBA\x87\xA0\x88\x85\x89k\x8AP\x8B5\x8C\x8C\xFF\x8D\xE4\x8Eȏ\xAE\x90\x92\x91v\x92[\x93?\x94 \x95\x95ߖ\xBF\x97\xA0\x98\x81\x99a\x9AB\x9B#\x9C\x9C\xE5\x9DǞ\xA9\x9F\x8B\xA0n\xA1P\xA23\xA3\xA3\xF8\xA4ۥ\xBE\xA6\xA2\xA7\x82\xA8b\xA9B\xAA"\xAB\xAB\xE3\xACí\xA4\xAE\x83\xAFd\xB0D\xB1$\xB2\xB2\xE4\xB3Ŵ\xA5\xB5\x84\xB6d\xB7D\xB8$\xB9\xB9\xEC\xBAջ\xBE\xBC\xA9\xBD\x93\xBE~\xBFk\xC0Y\xC1G\xC27\xC3(\xC4\xC5\xC6\xC6\xF8\xC7\xEE\xC8\xE5\xC9\xDD\xCA\xD6\xCB\xCF\xCC\xC9\xCD\xCC\xCE\xCF\xCF\xD1\xD0\xD3\xD1\xD6\xD2\xD8\xD3\xDA\xD4\xDC\xD5\xDE\xD6\xE0\xD7\xE2\xD8\xE4\xD9\xE6\xDA\xE7\xDB\xEA\xDC\xEC\xDD\xF0\xDE\xF3\xDF\xF6\xE0\xF9\xE2\xE3%\xE4N\xE5y\xE6\xA7\xE7\xD9\xE9\xEAN\xEB\x91\xEC\xD9\xEE*\xEF\x83\xF0\xE3\xF2L\xF3\xBB\xF53\xF6\xAF\xF83\xF9\xBB\xFBF\xFC\xD7\xFEi\xFF\xFFV.\xEB\x9DS\xB9v6\xF1\xB8~      H
+
+\xF0 \xC4 \x96+jE!\xFE*9EVj\x80\x95\xAD\xC5\xDE\xFA 0!N"o#\x8E$\xAD%\xCF&\xF3()?*g+\x8C,\xB0-\xD7.\xFD0!1F2h3\x8A4\xAC5\xCD6\xEC8 9(:H;d<=\x9C>\xAE?\xAB@\x9EA\x8FB~CkDXE@F&G G\xE8H\xC5I\x9EJtKFLL\xE0M\xAANrO6O\xFAP\xBDQ~R:R\xF5S\xB0TkU%U\xDFV\x9AWTXX\xC7Y\x81Z:Z\xF3[\xAC\g]]\xD7^\x90_I``\xBCazb9b\xF7c\xB6dte2e\xF1f\xAFgmh*h\xE8i\xA6jdk k\xDDl\x9AmVnn\xCFo\x8BpHqq\xC3r\x81s>s\xFCt\xB9uxv5v\xF1w\xAExky'y\xE3z\x9F{[||\xD2}\x8E~HÀ\x8C\x81X\x82%\x82񃽄\x8A\x85V\x86#\x86\x88\x87\x89R\x8A\x8Aꋵ\x8C\x80\x8DK\x8E\x8EᏬ\x90v\x91B\x92\x92ܓ\xA9\x94v\x95C\x96\x96ޗ\xAB\x98y\x99F\x9A\x9Aᛯ\x9C}\x9DL\x9E\x9E蟶\xA0\x84\xA1S\xA2%\xA2\xFB\xA3֤\xB0\xA5\x8A\xA6d\xA7?\xA8\xA8\xF6\xA9Ҫ\xAF\xAB\x8C\xACi\xADG\xAE&\xAF\xAF\xE4\xB0ñ\xA3\xB2\x83\xB3d\xB4J\xB5:\xB60\xB7'\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF%\xC02\xC1D\xC2Y\xC3sďů\xC6\xD2\xC7\xF9\xC9 \xCA]\xCB\xE1͈\xCF4\xD0\xE5Ҡ\xD4g\xD6>\xD8*\xDA-\xDCMޏ\xE0\xF2\xE3}\xE6-\
 xE9\xEB\xF3\xEF
+\xF2A\xF5\x8F\xF8\xF3\xFCo\xFF\xFFndin6\xA4V\xD5Us\xA4%?+\xCCP+T9\x85
+\x8C\xCC $/<JYj{\x8F\xA3\xB9\xD0\xE92Jc}\x98\xB4\xD1\xEF-Mo\x91\xB4\xD8\xFD"Ip\x98\xC1\xEBBn\x9C\xCA\xF9(X\x8A\xBC\xEF#X\x8E\xC6\xFE7r\xAD\xEA'f\xA6\xE7  )       m       \xB1    \xF7
+>
+\x86
+\xCF  e \xB1  a \xBD++|+\xDFC\xA9~\xED^\xD3K\xC6E\xC6L\xD5a\xF1\x83\xB1R\xF8\xA0J\xF7\xA7Y+\xC4~:\xF9\xBA }!C" "\xD8#\xA6$w%J&$''\xE0(\xC2)\xA7*\x8E+x,e-S.E/:011*2&3%4'5+627;819):%;#<$=(>/?:@JA\BtC\x8FD\xAEE\xD2F\xFAH&IVJ\x8AK\xC2L\xFDNDO\x92P\xE3R8S\x8DT\xE6VAW\x9FX\xFFZa[\xC6]-^\x96`aob\xDFdRe\xC7g@h\xB9jAk\xCCm\n\xF0p\x89r&s\xC9uqwx\xD4z\x8E|O~߁\xB0\x83\x87\x85b\x87@\x89+\x8A׌\xA2\x8Eo\x90@\x92\x93䕹\x97\x8F\x99h\x9BC\x9D \x9E\xFF\xA0\xE1\xA2Ť\xAE\xA6\x98\xA8\x85\xAAu\xACZ\xAEC\xB0/\xB2\xB4\xB6
+\xB8\xBA\xBC+\xBE\xC0+\xC2C\xC4aƆȲ\xCA\xE2\xCD\xCFUі\xD4֧\xD93ۻ\xDE:\xE0\xB3\xE3"\xE5\x87\xE7\xE2\xEA3\xECz\xEE\xB8\xF0\xEE\xF3 \xF5J\xF7s\xF9\x99\xFB\xBB\xFD\xE0\xFF\xFF (4CSex\x8D\xA4\xBC\xD7\xF3(B\x\x94\xB2\xD1\xF25X|\xA2\xC8\xF0Bm\x99\xC6\xF3#S\x84\xB6\xE9Q\x86\xBD\xF4-g\xA3\xDF\\x9C\xDD d\xA9\xF0      8       \x81    \xCC
+
+e
+\xB3  T \xA6  g \xCE+8+\xA4\x83\xF7m\xE7c\xE3g\xEEy\x99/\xC8d\xA6U
+\xC3=\xFE\xC2\x8AT!\xF1\xC5 \x9A!t"P#/$$\xF6%\xE0&\xCD'\xBC(\xAF)\xA6*\x9F+\x9C,\x9B-\x9E.\xA4/\xAE0\xBA1\xCA2\xDE3\xF556,7K8^9u:\x8F;\xAB<\xCA=\xEC?@:AeB\x94C\xC6D\xFBF2GnH\xABI\xEDK2LxM\xC5OPqQ\xCCS)T\x88U\xECWQX\xBAZ&[\x94]^x_\xEEahb\xE3dce\xE4gjh\xF0j\x81lm\xABoDp\xE1r\x81t$u\xCCwuy#z\xD4|\x88~?\xF9\x81\xB8\x83y\x85?\x87\x88Ɗ\x84\x8CC\x8E\x8FǑ\x8A\x93N\x95\x96٘\x9F\x9Af\x9C-\x9D\x{15FF61}\x87\xA3R\xA5\xA6쨻\xAA\x8B\xACN\xAE\xAFݱ\xA9\xB3w\xB5H\xB7\xB8\xF1\xBA˼\xA6\xBE\x85\xC0e\xC2I\xC4/\xC6\xC8\xC9\xEC\xCB\xDA\xCD\xCBϽѱ\xD3r\xD5-\xD6\xE7ؠ\xDAW\xDC
+ݷ\xDFc\xE1    \xE2\xAA\xE4H\xE5\xDE\xE7n\xE8\xFA\xEA\x82\xEC\xED\x80\xEE\xFB\xF0p\xF1\xE3\xF3T\xF4\xC0\xF6+\xF7\x96\xF9\xFAg\xFB\xCD\xFD5\xFE\x9B\xFF\xFF      '6FYm\x83\x9B\xB6\xD2\xF0,Ig\x87\xA9\xCC\xF0<d\x8D\xB8\xE4@p\xA1\xD3<s\xAA\xE3X\x94\xD2S\x95\xD9f\xAF\xFAF\x94\xE4        6       \x89    \xDF
+5
+\x8E
+\xE9 E \xA3 } \xF2+j+\xE6d\xE8o\xFB\x8C#\xBFb \xBAo+\xEB\xB1\x81V0\xF0\xD7\xC2\xB2\xA6\x9F \x9B!\x9D"\xA3#\xAE$\xBC%\xC9&\xD7'\xE9)*+;,_-\x88.\xB5/\xE612W3\x974\xDB6$7p8\xBE:;i<\xC5>$?\x89@\xF3BbC\xD6EOF\xCCHOI\xD6KcL\xF3NnO\xE5Q_R\xDET_U\xE6WoX\xFEZ\x90\']\xC1_`ab\xABdWfg\xBBipk'l\xE1n\xA0par's\xF1u\xBEw\x8Fyc{<}~\xF5\x80؂\xBE\x84\xA9\x86\x96\x88z\x8AU\x8C2\x8E\x8F\xF8\x91ޓǕ\xB2\x97\xA0\x99\x90\x9B\x82\x9Dv\x9Fl\xA1e\xA3`\xA5_\xA7^\xA9a\xABS\xAD1\xAF\xB0\xED\xB2̴\xAA\xB6\x87\xB8b\xBA:\xBC\xBD࿮\xC1x\xC3=\xC5ƿ\xC8{\xCA5\xCB\xED͢\xCFY\xD1҉\xD3\xCB\xD5\xD67\xD7lؠ\xD9\xD2\xDB\xDC-\xDDT\xDEwߖ\xE0\xAE\xE1\xC1\xE2\xCD\xE3\xD6\xE4\xD5\xE5\xD1\xE6\xC4\xE7\xB2\xE8\x9C\xE9}\xEA_\xEB5\xEC \xEC\xDD\xED\xA7\xEEr\xEF6\xEF\xF8\xF0\xB9\xF1t\xF2.\xF2\xE9\xF3\x9C\xF4O\xF5\xF5\xB0\xF6]\xF7
+\xF7\xB4\xF8]\xF9\xF9\xAD\xFAR\xFA\xF8\xFB\x9D\xFC?\xFC\xE1\xFD\x83\xFE#\xFE\xC2\xFF`\xFF\xFFsf32 B\xDE\xFF\xFF\xF3&\x92\xFD\x91\xFF\xFF\xFB\xA2\xFF\xFF\xFD\xA3\xDC\xC0lmmod\x9C\xB7\xC6C\x84\x80\xFF\xDBC       
+    +       
+  ++  \xFF\xDBC  \xFF\xC02d"\xFF\xC4  
+ \xFF\xC4\xB5}!1AQa"q2\x81\x91\xA1#B\xB1\xC1R\xD1\xF0$3br\x82 
+%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x83\x84\x85\x86\x87\x88\x89\x8A\x92\x93\x94\x95\x96\x97\x98\x99\x9A\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFF\xC4 
+ \xFF\xC4\xB5w!1AQaq"2\x81B\x91\xA1\xB1\xC1     #3R\xF0br\xD1
+$4\xE1%\xF1&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x92\x93\x94\x95\x96\x97\x98\x99\x9A\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFF\xDA ?\xF8\xAE\x8A(\xAF\xE5s\xF8\x9C(\xA2\x8A(\xAEGW\xF8\xE5\xE1\xBD\xFC\xDBj7:\x80\x93\xEDf\xC5LzUܩ$\xE0\x91\xE5#\xA4E]\xF8<)'\x83[\xBE\xF1]\x8F\x8C\xB4ֻ\xD0$\x96HVV\x85\xBC\xD8$\x81\xD1\xD4ᕒEVQ]50x\x8A0U*S\x92\x8B\xEA\xD3K\xEF;+e\xF8\xAC=5V\xAD)F/\xAB\x8BK\xEFj\xC7\xEE\xB7\xFC\xF3\xFEQ\xD1\xF0\xEF\xFE\xE2_\xFAs\xBB\xAF\xA5\xEB\xE6\x8F\xF8#\xE7\xFC\xA3\xA3\xE1\xDF\xFDĿ\xF4\xE7w_I\xC3w̒\xA5\xBC\xB1\xC8\xF0?\x97*\xABcm\xA1\xB6\xB0\xECv\xB2\x9C\xC4\xF5\xFEeq\xDAo\x89s_\xFB\xAD\xFF\xA7$}p_\xFC\x93\xD9o\xFDx\xA5\xFF\xA6\xE2IEWɟLQEQE4tW\xCB\xDF\xF0\xB05\xEF\xFA+\xEA\xFF\xF8'\xFFG\xFC,+
 {\xFE\x83
 z\xBF\xFEI\xFF\xC5W\xFD@\xC568\x97\xFE\x87\xD8\xFCP\xFE+\xFFQk\xFF\xCF\xE8\xFD\xCC\xFA\x86\x8A\xF9{\xFE\xBD\xFFA\xBD_\xFF$\xFF\xE2\xA8\xFF\x85\x81\xAF\xD0oW\xFF\xC0\xC9?\xF8\xAA?\xE2\x9BK\xFFC\xEC?\xFE \xA8\xEA-\xF9\xFD\xB9\x9E\xBB\xF1\xCA\xAD/<\x96\xE9J\xDE,\xB7}\xAA\x99',q\xEAI$\x9E\xE4\xD5\x89\xF7\xD3\xDD\xFCI\xB2\xF0\xFD\xB6\xA4\x9A%\xBE\xA1\xA7Ow\xADĖ\x8DutT62 4h3\xB38`~`B\x8A\xF1}~\xEA_\xCD \x9E(\x92MJK|\x88\x9A\xE9\x8C\xCDy;KgOJv\xBF\xA9\x\xAE\xDA(|Qq>\xA5 -\xBA8\xEE\xA43*c 1 q^\xCE\xF6t\xF1%K\x9B=\xA0\xDCT\x93\xFD\xDC\xF7n髽m\xE7o\xD4\xFA /+\xBA*\x82\x9D[\xB8)\xA6\xED\xD6M\xB4\xD5޶\xF3\xB7\x93OU\xFA\xCD\xFB%|v\xF1\xA7\xC1\xFF٧\xE0\xE7\x8A\xFCA\xAE\xF8\x9Fş
+t.\xC2z\xEB\xC1\xBE"\x9BM\xBF\xF0\x8D\xD3\xF8\xA7RƧu\xA5\xB1\xEA\xB6\xE28\xAD\x9B&B\x89 \xCDRr\xFFn\xFF\xC1"|;\xA4hw?'\x87\xC4\\xFCY\xF1=\x9C\xD6ڗ\x89n\xF5. [\xE3L\x96\xD3\xCC\xCB\x92%i8\xF2\xF7\xB3aq\xF8\x99\xF0;Y\xBC\xBA\xF0O\x86u{\x9B\xBB\xA95]"?&\xC6\xF5\xA5cqd\x91^KqE&w"\xA4\xCCҨR\xBBc\x9A\xF4\xCF
+|k\xF1\x9F\x81<i\xAF\xF8\x93\xC0\xFE.\xF1>\x8D\xE2/\xBCrkz\xA5\x8E\xAB=\xBD\xEE\xB0т#7S\xA3\x87\x9C\xA8f
+\\x9Cn8\xEB_\xE4G\x8C\xBEV\xC0f\xF9\xFF \xC3է\x89\xADNS\x8C\c7J\xBC\x92\xBCok]JW\x8A\x8A~\xE5\xE9\xF3\xF3ԗ\xFA\x9B\xE1\xEF\xD1K8\xCFxg(\xCC\xE1\x98Ҍ+P\xC3\xD5Qp\x95ҕ+\xB4\xB2Ӛ:-.\x9BI'e\xFDQ_ϗ\xFC6\x87\xC6/\xFA+\xFF\xF0\xA7\xBE\xFF\xE3\xB4\xC3h|b\xFF\xA2\xB1\xF1/\xFF
+{\xEF\xFE;_\xCE_\xF1-y\x9F\xFD\xD3\xFF\xC0d}\xFF\xFCJ6o\xFFC:_\xF8 \xCF\xE86\x8A\xFE|\xBF\xE1\xB4>1\xD1X\xF8\x97\xFF\x85=\xF7\xFF\xA3\xFEC\xE3\xFD\x8F\x89\xF8S\xDF\xF1\xDA?\xE2Z\xF3?\xFA\xA7\xFF\x80\xC8?\xE2Q\xB3\xFA\xD2\xFF\xC0fA\xB4W\xF3\xE5\xFF+\xA1\xF1\x8B\xFE\x8A\xC7Ŀ\xFC)\xEF\xBF\xF8\xEDĵ\xE6\xF4O\xFF\x90ģf\xFF\xF43\xA5\xFF\x80\xCC\xFC\xF8\xA2\x8A+\xFE\xD9\xCF\xF2t(\xA2\x8A(\xA2\x8A\xFA7\xE0?\xFC\x92\x8D+\xFE\xDB\xE8箾\xB9\x80\xFF\xF2J4\xAF\xFBm\xFF\xA3\x9E\xBA\xFA\xFF\x9A\xCF\xBF\xE4\xE5qG\xFD\x87\xE3?\xF5"\xA1\xFF@\xDE ɿ\xE1\xCF\xFB\xC2\xE9\x8AaEW\xE5G\xE9AEPEP\xC8tQE\xD5A\xFF5\xE1EPEPѿ\xFF\xE4\x94i_\xF6\xDB\xFFG=u\xF4Q_\xF3Y\xE3\xB7\xFC\x9C\xAE(\xFF\xB0\xFCg\xFE\xA4T?\xE8\xC1\x8F\xF97\xFC9\xFF`XO\xFD1L(\xA2\x8A\xFC\xA8\xFD((\xA2\x8A(\xA2\x8A\xFF\xD9
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="branchessafari608branchToolsTestWebKitAPITestsWebKitCocoaimgwithrotatedimagehtml"></a>
<div class="addfile"><h4>Added: branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html (0 => 248569)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html                             (rev 0)
+++ branches/safari-608-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html        2019-08-12 23:42:20 UTC (rev 248569)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+<body>
+    <img src="exif-orientation-8-llo.jpg">
+</body>
</ins></span></pre>
</div>
</div>

</body>
</html>