<?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>147391</bug_id>
          
          <creation_ts>2015-07-28 17:17:56 -0700</creation_ts>
          <short_desc>Remove dispatch_apply_f and instead use vImage more directly</short_desc>
          <delta_ts>2015-07-28 18:47:29 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1112952</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-07-28 17:17:56 -0700</bug_when>
    <thetext>Remove dispatch_apply_f and instead use vImage more directly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112961</commentid>
    <comment_count>1</comment_count>
      <attachid>257711</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-07-28 17:25:39 -0700</bug_when>
    <thetext>Created attachment 257711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112965</commentid>
    <comment_count>2</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-07-28 17:27:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/21893047&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112973</commentid>
    <comment_count>3</comment_count>
      <attachid>257711</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-07-28 17:41:44 -0700</bug_when>
    <thetext>Comment on attachment 257711
Patch

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

&gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:60
&gt; +static void premultiplyBufferData(vImage_Buffer* src, vImage_Buffer* dest)

Could use const vImage_Buffer&amp;, right?

&gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:65
&gt; +    if (kvImageNoError != vImagePremultiplyData_RGBA8888(src, dest, kvImageDoNotTile))

Is there any reason to use kvImageDoNotTile, or should we just let vImage use threads if it wants to?

&gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:70
&gt; +    vImagePermuteChannels_ARGB8888(dest, dest, map, kvImageDoNotTile);

Ditto.

&gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:73
&gt; +static void unpremultiplyBufferData(vImage_Buffer* src, vImage_Buffer* dest)

const vImage_Buffer&amp;

&gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:83
&gt; +    vImagePermuteChannels_ARGB8888(dest, dest, map, kvImageDoNotTile);

kvImageNoFlags?

&gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:270
&gt; +            // The unpremultiplying and channel-swapping will be done in-place ooooo.

oooo?

&gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:420
&gt;              if (resolutionScale != 1) {
&gt;                  vImage_AffineTransform scaleTransform = { resolutionScale, 0, 0, resolutionScale, 0, 0 }; // FIXME: Add subpixel translation.
&gt;                  Pixel_8888 backgroundColor;
&gt; -                vImageAffineWarp_ARGB8888(&amp;src, &amp;dst, 0, &amp;scaleTransform, backgroundColor, kvImageEdgeExtend);
&gt; +                vImageAffineWarp_ARGB8888(&amp;src, &amp;dest, 0, &amp;scaleTransform, backgroundColor, kvImageEdgeExtend);
&gt;                  // The premultiplying will be done in-place.
&gt; -                src = dst;
&gt; +                src = dest;
&gt;              }
&gt;  
&gt; -            vImagePremultiplyData_RGBA8888(&amp;src, &amp;dst, kvImageNoFlags);
&gt; +            vImagePremultiplyData_RGBA8888(&amp;src, &amp;dest, kvImageNoFlags);

Odd that this code isn&apos;t in its own function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112982</commentid>
    <comment_count>4</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-07-28 18:02:47 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 257711 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=257711&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:60
&gt; &gt; +static void premultiplyBufferData(vImage_Buffer* src, vImage_Buffer* dest)
&gt; 
&gt; Could use const vImage_Buffer&amp;, right?

Yes, fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:65
&gt; &gt; +    if (kvImageNoError != vImagePremultiplyData_RGBA8888(src, dest, kvImageDoNotTile))
&gt; 
&gt; Is there any reason to use kvImageDoNotTile, or should we just let vImage
&gt; use threads if it wants to?

Correct, we want kvImageNoFlags.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp:420
&gt; &gt;              if (resolutionScale != 1) {
&gt; &gt;                  vImage_AffineTransform scaleTransform = { resolutionScale, 0, 0, resolutionScale, 0, 0 }; // FIXME: Add subpixel translation.
&gt; &gt;                  Pixel_8888 backgroundColor;
&gt; &gt; -                vImageAffineWarp_ARGB8888(&amp;src, &amp;dst, 0, &amp;scaleTransform, backgroundColor, kvImageEdgeExtend);
&gt; &gt; +                vImageAffineWarp_ARGB8888(&amp;src, &amp;dest, 0, &amp;scaleTransform, backgroundColor, kvImageEdgeExtend);
&gt; &gt;                  // The premultiplying will be done in-place.
&gt; &gt; -                src = dst;
&gt; &gt; +                src = dest;
&gt; &gt;              }
&gt; &gt;  
&gt; &gt; -            vImagePremultiplyData_RGBA8888(&amp;src, &amp;dst, kvImageNoFlags);
&gt; &gt; +            vImagePremultiplyData_RGBA8888(&amp;src, &amp;dest, kvImageNoFlags);
&gt; 
&gt; Odd that this code isn&apos;t in its own function.

Yeah, I made this:

static void affineWarpBufferData(const vImage_Buffer&amp; src, const vImage_Buffer&amp; dest, float scale)
{
    vImage_AffineTransform scaleTransform = { scale, 0, 0, scale, 0, 0 }; // FIXME: Add subpixel translation.
    Pixel_8888 backgroundColor;
    vImageAffineWarp_ARGB8888(&amp;src, &amp;dest, 0, &amp;scaleTransform, backgroundColor, kvImageEdgeExtend);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112996</commentid>
    <comment_count>5</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-07-28 18:47:29 -0700</bug_when>
    <thetext>Committed r187534: &lt;http://trac.webkit.org/changeset/187534&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257711</attachid>
            <date>2015-07-28 17:25:39 -0700</date>
            <delta_ts>2015-07-28 17:41:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147391-20150729102415.patch</filename>
            <type>text/plain</type>
            <size>14706</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3NTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ZmMjY3ZGEwMDQ3OWU2
NTUxNjE2YzVlMzk4NDI3ZmIzN2QyZDRjZC4uYzlkNjUyOGZlNWZkZGExZDE5NGNhMWQyNjUyYzc3
Y2MxZjcxMDg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE1LTA3LTI4ICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgZGlzcGF0Y2hfYXBw
bHlfZiBhbmQgaW5zdGVhZCB1c2UgdkltYWdlIG1vcmUgZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzM5MQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjE4OTMwNDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXNlIHZJbWFnZSB1bm11bHRpcGxpY2F0aW9uIGFuZCBwcmVtdWx0aXBsaWNh
dGlvbiBmdW5jdGlvbnMgb24gdGhlCisgICAgICAgIGVudGlyZSBJbWFnZUJ1ZmZlckRhdGEgb2Jq
ZWN0LCByYXRoZXIgdGhhbiBnZXR0aW5nIGFuZCBzZXR0aW5nIGRhdGEgb24gYW4KKyAgICAgICAg
bGluZSBieSBsaW5lIHVzaW5nIGRpc3BhdGNoX2FwcGx5LgorCisgICAgICAgIFdlIHdlcmUgc2Vl
aW5nIHNvbWUgY3Jhc2hlcyBpbiB2SW1hZ2Ugd2l0aCB0aGUgc21hbGxlciBidWZmZXIgc2l6ZXMs
IGFuZAorICAgICAgICBob3BlZnVsbHkgdGhpcyB3aWxsIGVpdGhlciBmaXggdGhlIHByb2JsZW0s
IG9yIGdpdmUgdXMgYSBiZXR0ZXIKKyAgICAgICAgc3RhY2sgdHJhY2UgdG8gZGlhZ25vc2UuCisK
KyAgICAgICAgSSBhbHNvIGRpZCBhIGRyaXZlLWJ5IGNoYW5nZSBvZiAiZHN0IiB0byAiZGVzdCIu
IEl0IHdhcyBpbmNvbnNpc3RlbnQgdGhyb3VnaG91dAorICAgICAgICB0aGUgZmlsZS4KKworICAg
ICAgICBDb252ZXJlZCBieSB0aGUgdGVzdHMgaW4gZmFzdC9jYW52YXMgYW5kIGltcG9ydGVkL3cz
Yy9jYW52YXMKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0
YUNHLmNwcDogUmVtb3ZlIHRoZSBTY2FubGluZURhdGEgc3RydWN0dXJlLiBJdCBpcworICAgICAg
ICBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbHlCdWZmZXJE
YXRhKTogTmV3IGZ1bmN0aW9uIHRoYXQgY2FsbHMgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4
ODg4LgorICAgICAgICAoV2ViQ29yZTo6dW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEpOiBOZXcgZnVu
Y3Rpb24gdGhhdCBjYWxscyB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OAorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKTogVXNlIHRoZSB0d28gbmV3IGZ1
bmN0aW9ucyBhcyBhcHByb3ByaWF0ZS4gTW92ZQorICAgICAgICBzb21lIG9mIHRoZSBjb2RlIGFy
b3VuZCBub3cgdGhhdCBtb3JlIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgI2lmIGJy
YW5jaGVzLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRTY2FubGluZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjp1bnByZW11bHRpdHBseVNjYW5saW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnByZW11bHRpdHBseVNjYW5saW5lKTogRGVsZXRlZC4KKwogMjAxNS0wNy0yOCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZvbGxvdy11cCBu
aXQgZml4IGFmdGVyIHIxODc0ODkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKaW5kZXggMWJkYjUxZTRkMTk3
OGZjMTYzMTZkOWQ1YWM1Nzg0NmRiZjI4NmVkNi4uYzNkOGFkMzQ4ZGY1NWM5NDMxMGZjNmJhYmI3
MTQxMjJlMGRiNGI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApAQCAtNDIsMTYgKzQyLDYgQEAKICNp
bmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgogI2VuZGlmCiAKLSNpZiBVU0UoQUNDRUxFUkFU
RSkKLXN0cnVjdCBTY2FubGluZURhdGEgewotICAgIHZJbWFnZVBpeGVsQ291bnQgc2NhbmxpbmVX
aWR0aDsKLSAgICB1bnNpZ25lZCBjaGFyKiBzcmNEYXRhOwotICAgIHNpemVfdCBzcmNSb3dCeXRl
czsKLSAgICB1bnNpZ25lZCBjaGFyKiBkZXN0RGF0YTsKLSAgICBzaXplX3QgZGVzdFJvd0J5dGVz
OwotfTsKLSNlbmRpZgotCiAvLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0Iz
MiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCiAjZGVmaW5lIFVTRV9BUkdCMzIg
UExBVEZPUk0oSU9TKQogCkBAIC02Niw0NyArNTYsMzMgQEAgSW1hZ2VCdWZmZXJEYXRhOjp+SW1h
Z2VCdWZmZXJEYXRhKCkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQotCiAjaWYgVVNFX0FSR0Iz
MiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RhdGljIHZvaWQgY29u
dmVydFNjYW5saW5lKHZvaWQqIGRhdGEsIHNpemVfdCB0aWxlTnVtYmVyLCBib29sIHByZW11bHRp
cGx5KQorc3RhdGljIHZvaWQgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHZJbWFnZV9CdWZmZXIqIHNy
YywgdkltYWdlX0J1ZmZlciogZGVzdCkKIHsKLSAgICBTY2FubGluZURhdGEqIHNjYW5saW5lRGF0
YSA9IHN0YXRpY19jYXN0PFNjYW5saW5lRGF0YSo+KGRhdGEpOwotCi0gICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgc3JjLmRhdGEgPSBzY2FubGluZURhdGEtPnNyY0RhdGEgKyB0aWxlTnVtYmVy
ICogc2NhbmxpbmVEYXRhLT5zcmNSb3dCeXRlczsKLSAgICBzcmMuaGVpZ2h0ID0gMTsKLSAgICBz
cmMud2lkdGggPSBzY2FubGluZURhdGEtPnNjYW5saW5lV2lkdGg7Ci0gICAgc3JjLnJvd0J5dGVz
ID0gc2NhbmxpbmVEYXRhLT5zcmNSb3dCeXRlczsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsK
LSAgICBkZXN0LmRhdGEgPSBzY2FubGluZURhdGEtPmRlc3REYXRhICsgdGlsZU51bWJlciAqIHNj
YW5saW5lRGF0YS0+ZGVzdFJvd0J5dGVzOwotICAgIGRlc3QuaGVpZ2h0ID0gMTsKLSAgICBkZXN0
LndpZHRoID0gc2NhbmxpbmVEYXRhLT5zY2FubGluZVdpZHRoOwotICAgIGRlc3Qucm93Qnl0ZXMg
PSBzY2FubGluZURhdGEtPmRlc3RSb3dCeXRlczsKLQotICAgIGlmIChwcmVtdWx0aXBseSkgewot
ICAgICAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4
ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlRG9Ob3RUaWxlKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVt
dWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VEb05vdFRpbGUpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQoc3JjLT5kYXRhKTsKKyAgICBBU1NF
UlQoZGVzdC0+ZGF0YSk7CisKKyAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlUHJlbXVs
dGlwbHlEYXRhX1JHQkE4ODg4KHNyYywgZGVzdCwga3ZJbWFnZURvTm90VGlsZSkpCisgICAgICAg
IHJldHVybjsKIAogICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JB
PC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KICAg
ICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11
dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZURvTm90VGlsZSk7
CisgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KGRlc3QsIGRlc3QsIG1hcCwga3ZJ
bWFnZURvTm90VGlsZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHVucHJlbXVsdGl0cGx5U2NhbmxpbmUo
dm9pZCogZGF0YSwgc2l6ZV90IHRpbGVOdW1iZXIpCitzdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5
QnVmZmVyRGF0YSh2SW1hZ2VfQnVmZmVyKiBzcmMsIHZJbWFnZV9CdWZmZXIqIGRlc3QpCiB7Ci0g
ICAgY29udmVydFNjYW5saW5lKGRhdGEsIHRpbGVOdW1iZXIsIGZhbHNlKTsKLX0KKyAgICBBU1NF
UlQoc3JjLT5kYXRhKTsKKyAgICBBU1NFUlQoZGVzdC0+ZGF0YSk7CiAKLXN0YXRpYyB2b2lkIHBy
ZW11bHRpdHBseVNjYW5saW5lKHZvaWQqIGRhdGEsIHNpemVfdCB0aWxlTnVtYmVyKQotewotICAg
IGNvbnZlcnRTY2FubGluZShkYXRhLCB0aWxlTnVtYmVyLCB0cnVlKTsKKyAgICBpZiAoa3ZJbWFn
ZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoc3JjLCBkZXN0LCBr
dkltYWdlRG9Ob3RUaWxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU3dhcCBjaGFubmVs
cyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJ
bWFnZURhdGEgZXhwZWN0cyBSR0JBLgorICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAx
LCAwLCAzIH07CisgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KGRlc3QsIGRlc3Qs
IG1hcCwga3ZJbWFnZURvTm90VGlsZSk7CiB9Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKKyNlbmRpZiAvLyBVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCiAKIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywg
Ym9vbCB1bm11bHRpcGxpZWQsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkgY29uc3QKQEAgLTE2Nyw0
MSArMTQzLDM2IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpn
ZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEluCiAgICAgaWYgKCFhY2NlbGVyYXRl
UmVuZGVyaW5nKSB7CiAgICAgICAgIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZl
R2V0KCk7CiAgICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIq
PihkYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotICAgICAg
ICAKKwogI2lmIFVTRShBQ0NFTEVSQVRFKQogICAgICAgICBpZiAodW5tdWx0aXBsaWVkKSB7Ci0j
aWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgU2NhbmxpbmVEYXRhIHNjYW5saW5lRGF0YTsKLSAg
ICAgICAgICAgIHNjYW5saW5lRGF0YS5zY2FubGluZVdpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7
Ci0gICAgICAgICAgICBzY2FubGluZURhdGEuc3JjRGF0YSA9IHNyY1Jvd3M7Ci0gICAgICAgICAg
ICBzY2FubGluZURhdGEuc3JjUm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
IHNjYW5saW5lRGF0YS5kZXN0RGF0YSA9IGRlc3RSb3dzOwotICAgICAgICAgICAgc2NhbmxpbmVE
YXRhLmRlc3RSb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLQotICAgICAgICAgICAgZGlzcGF0
Y2hfYXBwbHlfZihkZXN0aC51bnNhZmVHZXQoKSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShE
SVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgJnNjYW5saW5lRGF0YSwgdW5wcmVt
dWx0aXRwbHlTY2FubGluZSk7Ci0jZWxzZQorCiAgICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNy
YzsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7CiAgICAgICAg
ICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIHNyYy5oZWln
aHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7CiAgICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNC
eXRlc1BlclJvdzsKICAgICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkc3Q7Ci0gICAgICAgICAgICBkc3QuaGVpZ2h0
ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkc3Qud2lkdGggPSBkZXN0dy51bnNh
ZmVHZXQoKTsKLSAgICAgICAgICAgIGRzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIGRzdC5kYXRhID0gZGVzdFJvd3M7CiAKKyAgICAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgZGVzdDsKKyAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKKyAg
ICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBk
ZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OworICAgICAgICAgICAgZGVzdC5kYXRhID0g
ZGVzdFJvd3M7CisKKyNpZiBVU0VfQVJHQjMyCisgICAgICAgICAgICB1bnByZW11bHRpcGx5QnVm
ZmVyRGF0YSgmc3JjLCAmZGVzdCk7CisjZWxzZQogICAgICAgICAgICAgaWYgKHJlc29sdXRpb25T
Y2FsZSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgdkltYWdlX0FmZmluZVRyYW5zZm9ybSBzY2Fs
ZVRyYW5zZm9ybSA9IHsgMSAvIHJlc29sdXRpb25TY2FsZSwgMCwgMCwgMSAvIHJlc29sdXRpb25T
Y2FsZSwgMCwgMCB9OyAvLyBGSVhNRTogQWRkIHN1YnBpeGVsIHRyYW5zbGF0aW9uLgogICAgICAg
ICAgICAgICAgIFBpeGVsXzg4ODggYmFja2dyb3VuZENvbG9yOwotICAgICAgICAgICAgICAgIHZJ
bWFnZUFmZmluZVdhcnBfQVJHQjg4ODgoJnNyYywgJmRzdCwgMCwgJnNjYWxlVHJhbnNmb3JtLCBi
YWNrZ3JvdW5kQ29sb3IsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKKyAgICAgICAgICAgICAgICB2SW1h
Z2VBZmZpbmVXYXJwX0FSR0I4ODg4KCZzcmMsICZkZXN0LCAwLCAmc2NhbGVUcmFuc2Zvcm0sIGJh
Y2tncm91bmRDb2xvciwga3ZJbWFnZUVkZ2VFeHRlbmQpOwogICAgICAgICAgICAgICAgIC8vIFRo
ZSB1bnByZW11bHRpcGx5aW5nIHdpbGwgYmUgZG9uZSBpbi1wbGFjZS4KLSAgICAgICAgICAgICAg
ICBzcmMgPSBkc3Q7CisgICAgICAgICAgICAgICAgc3JjID0gZGVzdDsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRz
dCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFf
UkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKICNlbmRpZgorCiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAjZW5kaWYKQEAgLTI3OSwxNSArMjUwLDE2
IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNv
bnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEluCiAgICAgICAgIHNyY1Jvd3MgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oSU9TdXJmYWNlR2V0QmFzZUFkZHJlc3Moc3VyZmFjZVJlZikpICsg
b3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7CiAKICNpZiBVU0UoQUNDRUxF
UkFURSkKKwogICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLmhlaWdodCA9
IGhlaWdodC51bnNhZmVHZXQoKTsKICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0
KCk7CisgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7CiAgICAgICAgIHNy
Yy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwogICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7
CiAKICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LmhlaWdodCA9IGRl
c3RoLnVuc2FmZUdldCgpOwogICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7
CisgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7CiAgICAgICAgIGRlc3Qu
cm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dz
OwogCkBAIC0yOTUsMjYgKzI2NywxMyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdl
QnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbgogICAgICAg
ICAgICAgdkltYWdlX0FmZmluZVRyYW5zZm9ybSBzY2FsZVRyYW5zZm9ybSA9IHsgMSAvIHJlc29s
dXRpb25TY2FsZSwgMCwgMCwgMSAvIHJlc29sdXRpb25TY2FsZSwgMCwgMCB9OyAvLyBGSVhNRTog
QWRkIHN1YnBpeGVsIHRyYW5zbGF0aW9uLgogICAgICAgICAgICAgUGl4ZWxfODg4OCBiYWNrZ3Jv
dW5kQ29sb3I7CiAgICAgICAgICAgICB2SW1hZ2VBZmZpbmVXYXJwX0FSR0I4ODg4KCZzcmMsICZk
ZXN0LCAwLCAmc2NhbGVUcmFuc2Zvcm0sIGJhY2tncm91bmRDb2xvciwga3ZJbWFnZUVkZ2VFeHRl
bmQpOwotICAgICAgICAgICAgLy8gVGhlIHVucHJlbXVsdGlwbHlpbmcgYW5kIGNoYW5uZWwtc3dh
cHBpbmcgd2lsbCBiZSBkb25lIGluLXBsYWNlLgotICAgICAgICAgICAgaWYgKHVubXVsdGlwbGll
ZCkgewotICAgICAgICAgICAgICAgIHNyY1Jvd3MgPSBkZXN0Um93czsKLSAgICAgICAgICAgICAg
ICB3aWR0aCA9IGRlc3R3OwotICAgICAgICAgICAgICAgIGhlaWdodCA9IGRlc3RoOwotICAgICAg
ICAgICAgICAgIHNyY0J5dGVzUGVyUm93ID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgc3JjID0gZGVzdDsKKyAgICAgICAgICAgIC8vIFRoZSB1
bnByZW11bHRpcGx5aW5nIGFuZCBjaGFubmVsLXN3YXBwaW5nIHdpbGwgYmUgZG9uZSBpbi1wbGFj
ZSBvb29vby4KKyAgICAgICAgICAgIHNyYyA9IGRlc3Q7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAodW5tdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBTY2FubGluZURhdGEgc2NhbmxpbmVEYXRh
OwotICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNjYW5saW5lV2lkdGggPSBkZXN0dy51bnNhZmVH
ZXQoKTsKLSAgICAgICAgICAgIHNjYW5saW5lRGF0YS5zcmNEYXRhID0gc3JjUm93czsKLSAgICAg
ICAgICAgIHNjYW5saW5lRGF0YS5zcmNSb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAg
ICAgICAgc2NhbmxpbmVEYXRhLmRlc3REYXRhID0gZGVzdFJvd3M7Ci0gICAgICAgICAgICBzY2Fu
bGluZURhdGEuZGVzdFJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotCi0gICAgICAgICAgICBk
aXNwYXRjaF9hcHBseV9mKGRlc3RoLnVuc2FmZUdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1
ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCAmc2NhbmxpbmVEYXRhLCB1
bnByZW11bHRpdHBseVNjYW5saW5lKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHVu
bXVsdGlwbGllZCkKKyAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKCZzcmMsICZk
ZXN0KTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxz
IGZyb20gQkdSQSB0byBSR0JBLgogICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7
IDIsIDEsIDAsIDMgfTsKICAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4
OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CkBAIC00MzEsNDEgKzM5MCwzNCBA
QCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShVaW50OENsYW1wZWRBcnJheSomIHNvdXJj
ZSwgY29uc3QgSW50U2l6ZSYgc291cmNlUwogICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykg
ewogICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKICAg
ICAgICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSAr
IChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0gICAg
ICAgIAotI2lmICBVU0UoQUNDRUxFUkFURSkKKworI2lmIFVTRShBQ0NFTEVSQVRFKQogICAgICAg
ICBpZiAodW5tdWx0aXBsaWVkKSB7Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgLy8gRklY
TUU6IEFyZSBzY2FubGluZURhdGEuc2NhbmxpbmVXaWR0aCBhbmQgdGhlIG51bWJlciBvZiBpdGVy
YXRpb25zIHNwZWNpZmllZCB0byBkaXNwYXRjaF9hcHBseV9mKCkgY29ycmVjdD8KLSAgICAgICAg
ICAgIFNjYW5saW5lRGF0YSBzY2FubGluZURhdGE7Ci0gICAgICAgICAgICBzY2FubGluZURhdGEu
c2NhbmxpbmVXaWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc2NhbmxpbmVE
YXRhLnNyY0RhdGEgPSBzcmNSb3dzOwotICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY1Jvd0J5
dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzY2FubGluZURhdGEuZGVzdERhdGEg
PSBkZXN0Um93czsKLSAgICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0Um93Qnl0ZXMgPSBkZXN0
Qnl0ZXNQZXJSb3c7Ci0KLSAgICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2YoaGVpZ2h0LnVuc2Fm
ZUdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZ
X0RFRkFVTFQsIDApLCAmc2NhbmxpbmVEYXRhLCBwcmVtdWx0aXRwbHlTY2FubGluZSk7Ci0jZWxz
ZQorCiAgICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy5oZWln
aHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7CiAgICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51
bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7
CiAgICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKICAgICAgICAgICAg
IHNyYy5kYXRhID0gc3JjUm93czsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdkltYWdlX0J1
ZmZlciBkc3Q7Ci0gICAgICAgICAgICBkc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0g
ICAgICAgICAgICBkc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRz
dC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRzdC5kYXRhID0gZGVz
dFJvd3M7CiAKKyAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICAgICAgICAgIGRl
c3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0g
ZGVzdGgudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVz
UGVyUm93OworICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7CisKKyNpZiBVU0VfQVJH
QjMyCisgICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YSgmc3JjLCAmZGVzdCk7Cisj
ZWxzZQogICAgICAgICAgICAgaWYgKHJlc29sdXRpb25TY2FsZSAhPSAxKSB7CiAgICAgICAgICAg
ICAgICAgdkltYWdlX0FmZmluZVRyYW5zZm9ybSBzY2FsZVRyYW5zZm9ybSA9IHsgcmVzb2x1dGlv
blNjYWxlLCAwLCAwLCByZXNvbHV0aW9uU2NhbGUsIDAsIDAgfTsgLy8gRklYTUU6IEFkZCBzdWJw
aXhlbCB0cmFuc2xhdGlvbi4KICAgICAgICAgICAgICAgICBQaXhlbF84ODg4IGJhY2tncm91bmRD
b2xvcjsKLSAgICAgICAgICAgICAgICB2SW1hZ2VBZmZpbmVXYXJwX0FSR0I4ODg4KCZzcmMsICZk
c3QsIDAsICZzY2FsZVRyYW5zZm9ybSwgYmFja2dyb3VuZENvbG9yLCBrdkltYWdlRWRnZUV4dGVu
ZCk7CisgICAgICAgICAgICAgICAgdkltYWdlQWZmaW5lV2FycF9BUkdCODg4OCgmc3JjLCAmZGVz
dCwgMCwgJnNjYWxlVHJhbnNmb3JtLCBiYWNrZ3JvdW5kQ29sb3IsIGt2SW1hZ2VFZGdlRXh0ZW5k
KTsKICAgICAgICAgICAgICAgICAvLyBUaGUgcHJlbXVsdGlwbHlpbmcgd2lsbCBiZSBkb25lIGlu
LXBsYWNlLgotICAgICAgICAgICAgICAgIHNyYyA9IGRzdDsKKyAgICAgICAgICAgICAgICBzcmMg
PSBkZXN0OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICAgICAgdklt
YWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDc5LDYgKzQzMSw3
IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKFVpbnQ4Q2xhbXBlZEFycmF5KiYgc291
cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTCiAgICAgICAgICAgICBpZiAoIXVubXVsdGlwbGll
ZCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgICAgIC8vIFRoZSBwcmVtdWx0
aXBseWluZyB3aWxsIGJlIGRvbmUgaW4tcGxhY2UuCiAgICAgICAgICAgICBzcmNSb3dzID0gZGVz
dFJvd3M7CiAgICAgICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGRlc3RCeXRlc1BlclJvdzsKICAg
ICAgICAgICAgIHdpZHRoID0gZGVzdHc7CkBAIC01MjQsMTQgKzQ3NywxNCBAQCB2b2lkIEltYWdl
QnVmZmVyRGF0YTo6cHV0RGF0YShVaW50OENsYW1wZWRBcnJheSomIHNvdXJjZSwgY29uc3QgSW50
U2l6ZSYgc291cmNlUwogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwogICAgICAg
ICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKKyAgICAgICAgc3JjLmhlaWdodCA9IGhl
aWdodC51bnNhZmVHZXQoKTsKICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7
CiAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKIAogICAgICAgICB2SW1hZ2VfQnVmZmVyIGRl
c3Q7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7CiAgICAgICAgIGRl
c3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKKyAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0
aC51bnNhZmVHZXQoKTsKICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsK
ICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7CiAKQEAgLTU0MCwyNSArNDkzLDEyIEBAIHZv
aWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKFVpbnQ4Q2xhbXBlZEFycmF5KiYgc291cmNlLCBj
b25zdCBJbnRTaXplJiBzb3VyY2VTCiAgICAgICAgICAgICBQaXhlbF84ODg4IGJhY2tncm91bmRD
b2xvcjsKICAgICAgICAgICAgIHZJbWFnZUFmZmluZVdhcnBfQVJHQjg4ODgoJnNyYywgJmRlc3Qs
IDAsICZzY2FsZVRyYW5zZm9ybSwgYmFja2dyb3VuZENvbG9yLCBrdkltYWdlRWRnZUV4dGVuZCk7
CiAgICAgICAgICAgICAvLyBUaGUgdW5wcmVtdWx0aXBseWluZyBhbmQgY2hhbm5lbC1zd2FwcGlu
ZyB3aWxsIGJlIGRvbmUgaW4tcGxhY2UuCi0gICAgICAgICAgICBpZiAodW5tdWx0aXBsaWVkKSB7
Ci0gICAgICAgICAgICAgICAgc3JjUm93cyA9IGRlc3RSb3dzOwotICAgICAgICAgICAgICAgIHdp
ZHRoID0gZGVzdHc7Ci0gICAgICAgICAgICAgICAgaGVpZ2h0ID0gZGVzdGg7Ci0gICAgICAgICAg
ICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICBzcmMgPSBkZXN0OworICAgICAgICAgICAgc3JjID0gZGVzdDsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmICh1bm11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIFNj
YW5saW5lRGF0YSBzY2FubGluZURhdGE7Ci0gICAgICAgICAgICBzY2FubGluZURhdGEuc2Nhbmxp
bmVXaWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNy
Y0RhdGEgPSBzcmNSb3dzOwotICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY1Jvd0J5dGVzID0g
c3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzY2FubGluZURhdGEuZGVzdERhdGEgPSBkZXN0
Um93czsKLSAgICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0Um93Qnl0ZXMgPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0KLSAgICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2YoaGVpZ2h0LnVuc2FmZUdldCgp
LCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFV
TFQsIDApLCAmc2NhbmxpbmVEYXRhLCBwcmVtdWx0aXRwbHlTY2FubGluZSk7Ci0gICAgICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmICh1bm11bHRpcGxpZWQpCisgICAgICAgICAgICBwcmVtdWx0aXBs
eUJ1ZmZlckRhdGEoJnNyYywgJmRlc3QpOworICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8v
IFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBSR0JBIHRvIEJHUkEuCiAgICAgICAgICAgICBjb25z
dCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwogICAgICAgICAgICAgdkltYWdlUGVy
bXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsK
</data>
<flag name="review"
          id="282884"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>