<!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>[281633] trunk/Tools</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/281633">281633</a></dd>
<dt>Author</dt> <dd>wenson_hsieh@apple.com</dd>
<dt>Date</dt> <dd>2021-08-26 10:49:12 -0700 (Thu, 26 Aug 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>TestWebKitAPI._WKActivatedElementInfo.InfoForRotatedImage is failing on iOS 15
https://bugs.webkit.org/show_bug.cgi?id=229531
rdar://82100466

Reviewed by Said Abou-Hallawa.

Due to changes in underlying system frameworks in iOS 15, the red "corner" of the rotated image in this test now
ends up with a color of 0xFFF51800 instead of 0xFFF51900. Resolve this by refactoring the test so that it's
robust against these kinds of minute differences.

To achieve this, we first run the test over a version of the test image without EXIF rotation data (test.jpg) to
measure the expected values of the red, green, yellow and blue corners; we then verify that these color values
are present in the corresponding rotated corners of the image with EXIF rotation.

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
(TestWebKitAPI::TEST):
* TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html: Removed.
* TestWebKitAPI/Tests/WebKitCocoa/test.jpg: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestWebKitAPIxcodeprojprojectpbxproj">trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKitCocoaWKRequestActivatedElementInfomm">trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkToolsTestWebKitAPITestsWebKitCocoatestjpg">trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/test.jpg</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkToolsTestWebKitAPITestsWebKitCocoaimgwithrotatedimagehtml">trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (281632 => 281633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog    2021-08-26 17:04:05 UTC (rev 281632)
+++ trunk/Tools/ChangeLog       2021-08-26 17:49:12 UTC (rev 281633)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2021-08-26  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        TestWebKitAPI._WKActivatedElementInfo.InfoForRotatedImage is failing on iOS 15
+        https://bugs.webkit.org/show_bug.cgi?id=229531
+        rdar://82100466
+
+        Reviewed by Said Abou-Hallawa.
+
+        Due to changes in underlying system frameworks in iOS 15, the red "corner" of the rotated image in this test now
+        ends up with a color of 0xFFF51800 instead of 0xFFF51900. Resolve this by refactoring the test so that it's
+        robust against these kinds of minute differences.
+
+        To achieve this, we first run the test over a version of the test image without EXIF rotation data (test.jpg) to
+        measure the expected values of the red, green, yellow and blue corners; we then verify that these color values
+        are present in the corresponding rotated corners of the image with EXIF rotation.
+
+        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
+        (TestWebKitAPI::TEST):
+        * TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html: Removed.
+        * TestWebKitAPI/Tests/WebKitCocoa/test.jpg: Added.
+
</ins><span class="cx"> 2021-08-26  Chris Dumez  <cdumez@apple.com>
</span><span class="cx"> 
</span><span class="cx">         REGRESSION (r281516): [AppleSilicon WK2] fast/loader/reload-zero-byte-plugin.html is timing out
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestWebKitAPIxcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (281632 => 281633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj        2021-08-26 17:04:05 UTC (rev 281632)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj   2021-08-26 17:49:12 UTC (rev 281633)
</span><span class="lines">@@ -559,7 +559,6 @@
</span><span class="cx">          71E88C4124B5299C00665160 /* ShareSheetTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 71E88C4024B5299C00665160 /* ShareSheetTests.mm */; };
</span><span class="cx">          71E88C4524B534B700665160 /* img-with-base64-url.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 71E88C4324B533EC00665160 /* img-with-base64-url.html */; };
</span><span class="cx">          725C3EF322058A5B007C36FC /* AdditionalSupportedImageTypes.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 725C3EF2220584BA007C36FC /* AdditionalSupportedImageTypes.html */; };
</span><del>-               7283A9D022FA754900B21C7D /* img-with-rotated-image.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 7283A9CE22FA6BBE00B21C7D /* img-with-rotated-image.html */; };
</del><span class="cx">           7283A9D222FB1E0600B21C7D /* exif-orientation-8-llo.jpg in Copy Resources */ = {isa = PBXBuildFile; fileRef = 7283A9D122FB1D9700B21C7D /* exif-orientation-8-llo.jpg */; };
</span><span class="cx">          73BD731823A846500020F450 /* DisplayName.mm in Sources */ = {isa = PBXBuildFile; fileRef = 73BD731723A846500020F450 /* DisplayName.mm */; };
</span><span class="cx">          751B05D61F8EAC410028A09E /* DatabaseTrackerTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 751B05D51F8EAC1A0028A09E /* DatabaseTrackerTest.mm */; };
</span><span class="lines">@@ -1238,6 +1237,7 @@
</span><span class="cx">          F46A095A1ED8A6E600D4AA55 /* apple.gif in Copy Resources */ = {isa = PBXBuildFile; fileRef = F47D30EB1ED28619000482E1 /* apple.gif */; };
</span><span class="cx">          F46A095B1ED8A6E600D4AA55 /* gif-and-file-input.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F47D30ED1ED28A6C000482E1 /* gif-and-file-input.html */; };
</span><span class="cx">          F46BD56924870643008282D6 /* dragstart-data.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F46BD5682487062D008282D6 /* dragstart-data.html */; };
</span><ins>+               F46D43AB26D7092800969E5E /* test.jpg in Copy Resources */ = {isa = PBXBuildFile; fileRef = F46D43AA26D7090300969E5E /* test.jpg */; };
</ins><span class="cx">           F47728991E4AE3C1007ABF6A /* full-page-contenteditable.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F47728981E4AE3AD007ABF6A /* full-page-contenteditable.html */; };
</span><span class="cx">          F47DFB2621A878DF00021FB6 /* data-detectors.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F47DFB2421A8704A00021FB6 /* data-detectors.html */; };
</span><span class="cx">          F4811E5921940BDE00A5E0FD /* WKWebViewEditActions.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4811E5821940B4400A5E0FD /* WKWebViewEditActions.mm */; };
</span><span class="lines">@@ -1541,7 +1541,6 @@
</span><span class="cx">                          F45B63FB1F197F4A009D38B9 /* image-map.html in Copy Resources */,
</span><span class="cx">                          3128A8152376413300D90D40 /* image.html in Copy Resources */,
</span><span class="cx">                          71E88C4524B534B700665160 /* img-with-base64-url.html in Copy Resources */,
</span><del>-                               7283A9D022FA754900B21C7D /* img-with-rotated-image.html in Copy Resources */,
</del><span class="cx">                           49897D6C241FE9E400ECF153 /* in-app-browser-privacy-local-file.html in Copy Resources */,
</span><span class="cx">                          4971B1182451F29A0096994D /* incorrectCreateTableSchema.db in Copy Resources */,
</span><span class="cx">                          935786CD20F6A2910000CDFC /* IndexedDB.sqlite3 in Copy Resources */,
</span><span class="lines">@@ -1724,6 +1723,7 @@
</span><span class="cx">                          313C3A0221E567C300DBA86E /* SystemPreviewBlobNaming.html in Copy Resources */,
</span><span class="cx">                          CD59F53519E9110D00CF1835 /* test-mse.mp4 in Copy Resources */,
</span><span class="cx">                          C95984F71E36BCEF002C0D45 /* test-without-audio-track.mp4 in Copy Resources */,
</span><ins>+                               F46D43AB26D7092800969E5E /* test.jpg in Copy Resources */,
</ins><span class="cx">                           524BBCA119E30C77002F1AF1 /* test.mp4 in Copy Resources */,
</span><span class="cx">                          7AE9E5091AE5AE8B00CF874B /* test.pdf in Copy Resources */,
</span><span class="cx">                          5C7101C725DD98B600686200 /* test_print.pdf in Copy Resources */,
</span><span class="lines">@@ -2436,7 +2436,6 @@
</span><span class="cx">          71E88C4024B5299C00665160 /* ShareSheetTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ShareSheetTests.mm; sourceTree = "<group>"; };
</span><span class="cx">          71E88C4324B533EC00665160 /* img-with-base64-url.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "img-with-base64-url.html"; sourceTree = "<group>"; };
</span><span class="cx">          725C3EF2220584BA007C36FC /* AdditionalSupportedImageTypes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = AdditionalSupportedImageTypes.html; sourceTree = "<group>"; };
</span><del>-               7283A9CE22FA6BBE00B21C7D /* img-with-rotated-image.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "img-with-rotated-image.html"; sourceTree = "<group>"; };
</del><span class="cx">           7283A9D122FB1D9700B21C7D /* exif-orientation-8-llo.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "exif-orientation-8-llo.jpg"; sourceTree = "<group>"; };
</span><span class="cx">          73BD731723A846500020F450 /* DisplayName.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DisplayName.mm; sourceTree = "<group>"; };
</span><span class="cx">          751B05D51F8EAC1A0028A09E /* DatabaseTrackerTest.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = DatabaseTrackerTest.mm; sourceTree = "<group>"; };
</span><span class="lines">@@ -3100,6 +3099,7 @@
</span><span class="cx">          F46849BF1EEF5EDC00B937FE /* rich-and-plain-text.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "rich-and-plain-text.html"; sourceTree = "<group>"; };
</span><span class="cx">          F469FB231F01803500401539 /* contenteditable-and-target.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "contenteditable-and-target.html"; sourceTree = "<group>"; };
</span><span class="cx">          F46BD5682487062D008282D6 /* dragstart-data.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "dragstart-data.html"; sourceTree = "<group>"; };
</span><ins>+               F46D43AA26D7090300969E5E /* test.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = test.jpg; sourceTree = "<group>"; };
</ins><span class="cx">           F47728981E4AE3AD007ABF6A /* full-page-contenteditable.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "full-page-contenteditable.html"; sourceTree = "<group>"; };
</span><span class="cx">          F47D30EB1ED28619000482E1 /* apple.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = apple.gif; sourceTree = "<group>"; };
</span><span class="cx">          F47D30ED1ED28A6C000482E1 /* gif-and-file-input.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "gif-and-file-input.html"; sourceTree = "<group>"; };
</span><span class="lines">@@ -4070,7 +4070,6 @@
</span><span class="cx">                          F4DEF6EC1E9B4D950048EF61 /* image-in-link-and-input.html */,
</span><span class="cx">                          F45B63FA1F197F33009D38B9 /* image-map.html */,
</span><span class="cx">                          3128A814237640FD00D90D40 /* image.html */,
</span><del>-                               7283A9CE22FA6BBE00B21C7D /* img-with-rotated-image.html */,
</del><span class="cx">                           49D7FBA7241FDDDA00AB67FA /* in-app-browser-privacy-local-file.html */,
</span><span class="cx">                          4971B1172451F2780096994D /* incorrectCreateTableSchema.db */,
</span><span class="cx">                          934FA5C720F69FEE0040DC1B /* IndexedDB.sqlite3 */,
</span><span class="lines">@@ -4181,6 +4180,7 @@
</span><span class="cx">                          9BD6D39E1F7B201E00BD4962 /* sunset-in-cupertino-600px.jpg */,
</span><span class="cx">                          31B76E4423299BA3007FED2C /* system-preview-trigger.html */,
</span><span class="cx">                          313C3A0121E5677A00DBA86E /* SystemPreviewBlobNaming.html */,
</span><ins>+                               F46D43AA26D7090300969E5E /* test.jpg */,
</ins><span class="cx">                           2E9896141D8F092B00739892 /* text-and-password-inputs.html */,
</span><span class="cx">                          F4CD74C520FDACF500DE3794 /* text-with-async-script.html */,
</span><span class="cx">                          F44C7A0420FAAE320014478C /* text-with-deferred-script.html */,
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKitCocoaWKRequestActivatedElementInfomm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm (281632 => 281633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm     2021-08-26 17:04:05 UTC (rev 281632)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm        2021-08-26 17:49:12 UTC (rev 281633)
</span><span class="lines">@@ -146,57 +146,55 @@
</span><span class="cx"> TEST(_WKActivatedElementInfo, InfoForRotatedImage)
</span><span class="cx"> {
</span><span class="cx">     auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]);
</span><del>-    NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"img-with-rotated-image" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
-    [webView loadRequest:request];
-    [webView _test_waitForDidFinishNavigation];
</del><ins>+    auto imagePixels = [](CGImageRef image) -> Vector<unsigned> {
+        static const size_t bytesPerPixel = 4;
+        static const size_t bitsPerComponent = 8;
+        size_t width = CGImageGetWidth(image);
+        size_t height = CGImageGetHeight(image);
+        size_t bytesPerRow = bytesPerPixel * width;
</ins><span class="cx"> 
</span><del>-    __block bool finished = false;
-    [webView _requestActivatedElementAtPosition:CGPointMake(50, 50) completionBlock: ^(_WKActivatedElementInfo *elementInfo) {
-        static const unsigned yellow = 0xFFFFFF00;
-        static const unsigned red = 0xFFF51900;
-        static const unsigned green = 0xFF278000;
-        static const unsigned blue = 0xFF0000FF;
</del><ins>+        static_assert(bytesPerPixel == sizeof(unsigned));
+        Vector<unsigned> pixels(height * width);
</ins><span class="cx"> 
</span><del>-        auto imagePixels = [](CGImageRef image) -> Vector<unsigned> {
-            static const size_t bytesPerPixel = 4;
-            static const size_t bitsPerComponent = 8;
-            size_t width = CGImageGetWidth(image);
-            size_t height = CGImageGetHeight(image);
-            size_t bytesPerRow = bytesPerPixel * width;
</del><ins>+        RetainPtr<CGColorSpaceRef> colorSpace = adoptCF(CGColorSpaceCreateDeviceRGB());
+        RetainPtr<CGContextRef> context = adoptCF(CGBitmapContextCreate(pixels.data(), width, height, bitsPerComponent, bytesPerRow, colorSpace.get(), kCGImageAlphaPremultipliedFirst | kCGImageByteOrder32Little));
</ins><span class="cx"> 
</span><del>-            static_assert(bytesPerPixel == sizeof(unsigned));
-            Vector<unsigned> pixels(height * width);
</del><ins>+        CGContextDrawImage(context.get(), CGRectMake(0, 0, width, height), image);
+        return pixels;
+    };
</ins><span class="cx"> 
</span><del>-            RetainPtr<CGColorSpaceRef> colorSpace = adoptCF(CGColorSpaceCreateDeviceRGB());
-            RetainPtr<CGContextRef> context = adoptCF(CGBitmapContextCreate(pixels.data(), width, height, bitsPerComponent, bytesPerRow, colorSpace.get(), kCGImageAlphaPremultipliedFirst | kCGImageByteOrder32Little));
</del><ins>+    auto indexOf = [&](UIImage *image, unsigned x, unsigned y) -> unsigned {
+        return y * image.size.width + x;
+    };
</ins><span class="cx"> 
</span><del>-            CGContextDrawImage(context.get(), CGRectMake(0, 0, width, height), image);
-            return pixels;
-        };
</del><ins>+    [webView synchronouslyLoadHTMLString:@"<body><img src='test.jpg'></body>"];
+    RetainPtr originalImageInfo = [webView activatedElementAtPosition:CGPointMake(50, 50)];
+    RetainPtr originalImage = [originalImageInfo image];
+    auto originalImagePixels = imagePixels([originalImage CGImage]);
</ins><span class="cx"> 
</span><del>-        auto indexOf = [&](unsigned x, unsigned y) -> unsigned {
-            return y * elementInfo.image.size.width + x;
-        };
</del><ins>+    unsigned green = originalImagePixels[indexOf(originalImage.get(), 0, 0)];
+    unsigned yellow = originalImagePixels[indexOf(originalImage.get(), [originalImage size].width - 1, 0)];
+    unsigned blue = originalImagePixels[indexOf(originalImage.get(), 0, [originalImage size].height - 1)];
+    unsigned red = originalImagePixels[indexOf(originalImage.get(), [originalImage size].width - 1, [originalImage size].height - 1)];
</ins><span class="cx"> 
</span><del>-        auto pixels = imagePixels(elementInfo.image.CGImage);
</del><ins>+    [webView synchronouslyLoadHTMLString:@"<body><img src='exif-orientation-8-llo.jpg'></body>"];
+    RetainPtr rotatedImageInfo = [webView activatedElementAtPosition:CGPointMake(50, 50)];
+    RetainPtr rotatedImage = [rotatedImageInfo image];
</ins><span class="cx"> 
</span><del>-        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);
</del><ins>+    auto rotatedImagePixels = imagePixels([rotatedImage CGImage]);
</ins><span class="cx"> 
</span><del>-        EXPECT_EQ(pixels[indexOf(0, 0)], yellow);
-        EXPECT_EQ(pixels[indexOf(elementInfo.image.size.width - 1, 0)], red);
-        EXPECT_EQ(pixels[indexOf(0, elementInfo.image.size.height - 1)], green);
-        EXPECT_EQ(pixels[indexOf(elementInfo.image.size.width - 1, elementInfo.image.size.height - 1)], blue);
</del><ins>+    EXPECT_TRUE([rotatedImageInfo type] == _WKActivatedElementTypeImage);
+    EXPECT_WK_STREQ([rotatedImageInfo imageURL].lastPathComponent, "exif-orientation-8-llo.jpg");
+    EXPECT_NOT_NULL(rotatedImage.get());
+    EXPECT_EQ([rotatedImageInfo boundingRect].size.width, 50);
+    EXPECT_EQ([rotatedImageInfo boundingRect].size.height, 100);
+    EXPECT_EQ([rotatedImage size].width, 50);
+    EXPECT_EQ([rotatedImage size].height, 100);
</ins><span class="cx"> 
</span><del>-        finished = true;
-    }];
-
-    TestWebKitAPI::Util::run(&finished);
</del><ins>+    EXPECT_EQ(rotatedImagePixels[indexOf(rotatedImage.get(), 0, 0)], yellow);
+    EXPECT_EQ(rotatedImagePixels[indexOf(rotatedImage.get(), [rotatedImage size].width - 1, 0)], red);
+    EXPECT_EQ(rotatedImagePixels[indexOf(rotatedImage.get(), 0, [rotatedImage size].height - 1)], green);
+    EXPECT_EQ(rotatedImagePixels[indexOf(rotatedImage.get(), [rotatedImage size].width - 1, [rotatedImage size].height - 1)], blue);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> TEST(_WKActivatedElementInfo, InfoForBlank)
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKitCocoaimgwithrotatedimagehtml"></a>
<div class="delfile"><h4>Deleted: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html (281632 => 281633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html  2021-08-26 17:04:05 UTC (rev 281632)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html     2021-08-26 17:49:12 UTC (rev 281633)
</span><span class="lines">@@ -1,3 +0,0 @@
</span><del>-<body>
-    <img src="exif-orientation-8-llo.jpg">
-</body>
</del></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKitCocoatestjpg"></a>
<div class="addfile"><h4>Added: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/test.jpg (0 => 281633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/test.jpg                             (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/test.jpg        2021-08-26 17:49:12 UTC (rev 281633)
</span><span class="lines">@@ -0,0 +1,100 @@
</span><ins>+\xFF\xD8\xFF\xE0JFIFHH\xFF\xE1\x80ExifMM*JR(\x87iZHH\xA0d\xA02\xFF\xED8Photoshop 3.08BIM8BIM%\xD4\x8Cُ\xB2\xE9\x80       \x98\xEC\xF8B~\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\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\xDBC       
+    +       
+  ++  \xFF\xDBC  \xFF\xDD\xFF\xDA ?\xF8\xAE\x8A(\xAF\xE5s\xF8\x9C(\xA2\x81\xC1\xA0\xC9zҁ\xB4\xF2q\xF8W1\xAB\xFC_\xD0t{\xDF"\xFE\xE6\xED\ܛ5)\xA7\xDCȯ0$yj\xCBV~\xBCO\xB6tY\xF8\xA2Ů49$x\x96F\x89\xBCȞ&FJ\xB8}Eu\xD4\xC0\xE2(\xC1T\xA9NJ/\xABM/\xBCﭖb\xF0\xF4\xD5Z\xB4\xA4\xA2\xFA\xB4\xD2\xFB\xCF\xDD\xF8$\xCD\xFF\xEC\xF8{\xFFq\xFD9]W\xD2\xF5\xF3G\xFC\x8F\xF8'g\xC3\xDF\xFB\x88\xFF\xE9\xCA꾑\x8A\xEE+\x89&He\x8EF\x81\xFC\xB9Xm+\xB5\x87c\xB5\x94\xE0\xF6 \xF7\xAF\xF3K\xC4I\xF1.h\x{D9F6}\xA9\xFF\xA5\xB3\xFB߃\xFC \xE0?\xEB\xD5?\xFD%QE\xF1\xA7\xD3Q@Q@\xFF\xD0\xF8\xB3\x9F_֎}Z\xF9\x87\xFE>\xBD\xFFA\x9DS\xFF\x9F\xFCh\xFF\x85\x8F\xAF\xD0gT\xFF\xC0\xA7\xFF\xFD\xFF\xFE)\xBFğ\xF49\xA3\xFF\x80\xC8\xFEe\xFFQ\xAA\xFF\xCF\xE5\xF7Os\xEB\xFA\xD1ϯ\xEB_0\xFF\xC2\xC7׿\xE83\xAA\xE0S\xFF\x8D\xF0\xB1\xF5\xEF\xFA \xEA\x9F\xF8\xFF
 \xE3G\xFCS\x89?\xE
 8sG\xFF\x90\xA8\xD5\xE7\xF2\xFB\x8Fg\xF8\xC1V\xB7>XV8\xC3\xF8\x8E\xDA0fYI8\xF5'\x92{\x93U\xBE"jR\xCB\xE3\xCB=\xD7P\x8BH\x8A\xF6\xCAk\x94o=\xED\x8D\xC4\xE0\x85Ϙ\x84d^v\xE7}\xE0@\xE1\xFA\xE5\xFC\xFE(\x9A<I4\xBA\x84\x90dF\xD7eh\xC1\xE4\xE0\xB6q\xD0t\xF4\xA7kڵ׊m\xE2\x8Bė3\xDF\xC5     \xDD\HeT8\xC6@b@8\xE2\xBD\xDC?\xEC\xF5\xE2
+Q\xA4\xA5\x9CRn*I\xFB\x92ݻ\xDF\xCE\xC7\xD3\xE12c
+u.ছ\xB7Y6\xD3Wz\xDB\xCF\xF0?\?d\xBF\x8E\xFE/\xF89\xFB3\xFC!\xF1F\xBD\xAC\xF8\x97\xC4\xFF t=6\xCEv\xE7\xC2^!\x9BO\xBF\xF0\x95\xCB\xF8\x9FQۨ\xDC逪j\x96W\xA28\xED\x9B&B\x89 \xADRr\xFFj\xFF\xC1'\xF4-#B\xB8\xF8\xE34Z\xFE\xB5\xA8\xEB7<Ii-\xBE\xA3\xE2;\xAB\xFD\x90[^\x98\xE3e\xB7\x9EVX\xD8$\x91+H\xA8Ǘ\xBD\x9B \x8FĿ\x82\xED\xF4\xDE\xF0Ƨs}y&\xA3\xA3\xC7\xE5\xD8ݴ\xECg\xB2X\xEE不b|\xEEEI\x99\xA5P\xA4v,0\xC75\xE8\xFE\xF8\xD3\xE3\xF8\xB3[׼!\xE2\xBF\xE9z\xE7\x89^95}B\xD3S\x9A\xADQ\xA3Fn%W+1P\xCC\xB18\xDCqֿ\xCA?|$\xF6\xEC\xEB\x85\xFD\xBA\x85XW\x9C%8\xC6\xCA^Σ\xDE7\xB5\x9B\xBC\x9B\x8A\x8AmE\xB8\xF39M\xFF\xA7|\xF4V\xCEs\xBE\xCB3:8\xEAjiR\xA8\xA2\xE2\xF4槶\x8A\xDA]m\xA7m4?\xA2ߵG\xFD\xF5\xFF\xBE\x85j\x8F\xFB\xEB\xFF}
+\xFE|\xFF\xE1\xB0\xFE,\xFF\xD1M\xF1\xF7\xFE\xFCr\x8F\xF8l?\x8B?\xF4S|}\xFF\x85\xDF\xFF\xAF\xE6/\xF8\x96\xBCG\xFD c\xFF\x80?\xFEH\xFB\xBF\xF8\x94\xCC\xFF\xFE\x83\xA8\xFF\xE4\xFF\xE4A\x9Fj\x8F\xFB\xEB\xFF}
+>\xD5\xF7\xD7\xFE\xFA\xFC\xF9\xFF\xC3a\xFCY\xFF\xA2\x9B\xE3\xEF\xFC(.\xFF\xF8\xED\xF0\xD8\xE8\xA6\xF8\xFB\xFF
+ \xBF\xFE;G\xFCK^#\xFE\x861\xFF\xC0\xFF$\xF1)\x99\xFF\xFDQ\xFF\xC9\xFF\xC8\xFE\x83>\xD5\xF7\xD7\xFE\xFA}\xAA?\xEF\xAF\xFD\xF4+\xF9\xF3\xFF\x86\xC3\xF8\xB3\xFFE7\xC7\xDF\xF8P]\xFF\xF1\xDA?\xE1\xB0\xFE,\xFF\xD1M\xF1\xF7\xFE\xFCv\x8F\xF8\x96\xBCG\xFD c\xFF\x80?\xFEH?\xE2S3\xFF\xFA\xA3\xFF\x93\xFF\x91\xFF\xD1\xFCs\xA2\x8A+\xFD\xFC?+
+(\xA2\x80
+3E\xF4\x8F\xC0\xFF\xF9%zO\xFB\xB2\xE8Ʈ\xAE\xB9O\x81\xFF\xF2J\xF4\x9F\xF7d\xFFэ]]\xCDg\x8E\xF2q8\x87\xFE\xC2\xF1\xFArG\xFD\xF85\xFF$C\xFF`\xB4?\xF4\xDCB\x8A(\xAFʏ\xD2Š(\xA0\x8A(\xA0\xFF\xD2\xFCs\xA2\x8A+\xFD\xFC?+
+(\xA2\x80
+(\xA2\x80>\x91\xF8\xFF$\xAFI\xFFvO\xFD\xD5\xD5\xD7)\xF0?\xFEI^\x93\xFE\xEC\x9F\xFA1\xAB\xAB\xAF\xF9\xAC\xF1\xCF\xFEN'\xFF\xD8^#\xFFNH\xFF\xA0_\xBF\xE4\x82\xC8\xEC\x87\xFE\x9B\x88QE\xF9Q\xFAXQEQE\xFF\xD9
</ins><span class="cx">\ No newline at end of file
</span></span></pre>
</div>
</div>

</body>
</html>