<?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>138220</bug_id>
          
          <creation_ts>2014-10-30 12:10:49 -0700</creation_ts>
          <short_desc>Implement action menus for text</short_desc>
          <delta_ts>2014-10-30 12:38:41 -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>WebKit2</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="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>conrad_shultz</cc>
    
    <cc>enrica</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1045074</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-10-30 12:10:49 -0700</bug_when>
    <thetext>Implement action menus for text

rdar://problem/18742297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045076</commentid>
    <comment_count>1</comment_count>
      <attachid>240685</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-10-30 12:18:26 -0700</bug_when>
    <thetext>Created attachment 240685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045079</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-30 12:20:03 -0700</bug_when>
    <thetext>Attachment 240685 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/WKActionMenuController.mm:323:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/mac/WKActionMenuController.mm:328:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045082</commentid>
    <comment_count>3</comment_count>
      <attachid>240685</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-30 12:26:10 -0700</bug_when>
    <thetext>Comment on attachment 240685
Patch

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

&gt; Source/WebKit2/UIProcess/mac/WKActionMenuController.mm:118
&gt; +    if (!hitTestResult-&gt;isSelected())

Shouldn&apos;t this be &quot;if we have no selection at all&quot;? I&apos;m not sure.

&gt; Source/WebKit2/UIProcess/mac/WKActionMenuController.mm:314
&gt; +    if (!hitTestResult-&gt;isTextNode())
&gt; +        return @[ ];

No need to check this here, the caller already checked. At most, ASSERT. Also, our _type system depends on these things actually returning the menu we ask for!

&gt; Source/WebKit2/UIProcess/mac/WKActionMenuController.mm:324
&gt; +    _page-&gt;executeEditCommand(String(&quot;copy&quot;));

Doesn&apos;t the literal-&gt;String conversion happen magically?

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:532
&gt; +PassRefPtr&lt;Range&gt; WebPage::rangeForDictionaryLookupAtHitTestResult(const WebCore::HitTestResult&amp; hitTestResult, NSDictionary **options)

NSDictionary ** could be &apos;NSDictionary*&amp; options&apos; instead, I think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045083</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-30 12:26:25 -0700</bug_when>
    <thetext>Probably should have Enrica or someone look over this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045087</commentid>
    <comment_count>5</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-10-30 12:36:51 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 240685 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240685&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WKActionMenuController.mm:118
&gt; &gt; +    if (!hitTestResult-&gt;isSelected())
&gt; 
&gt; Shouldn&apos;t this be &quot;if we have no selection at all&quot;? I&apos;m not sure.
&gt; 
I did consider this, but I don&apos;t think so…I think it feels a lot more natural if invoking the action menu on text moves the selection there since it normally creates a selection. We can look at this in person if you like.

&gt; &gt; Source/WebKit2/UIProcess/mac/WKActionMenuController.mm:314
&gt; &gt; +    if (!hitTestResult-&gt;isTextNode())
&gt; &gt; +        return @[ ];
&gt; 
&gt; No need to check this here, the caller already checked. At most, ASSERT.
&gt; Also, our _type system depends on these things actually returning the menu
&gt; we ask for!
&gt; 

Okay!

&gt; &gt; Source/WebKit2/UIProcess/mac/WKActionMenuController.mm:324
&gt; &gt; +    _page-&gt;executeEditCommand(String(&quot;copy&quot;));
&gt; 
&gt; Doesn&apos;t the literal-&gt;String conversion happen magically?
&gt; 

Oh, yes! Fixed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:532
&gt; &gt; +PassRefPtr&lt;Range&gt; WebPage::rangeForDictionaryLookupAtHitTestResult(const WebCore::HitTestResult&amp; hitTestResult, NSDictionary **options)
&gt; 
&gt; NSDictionary ** could be &apos;NSDictionary*&amp; options&apos; instead, I think?

I don&apos;t think so? WebKitSystemInterface function wants a **, and I can&apos;t seem to make it work with a *&amp; passed into the WebPage functions, but I&apos;m falling down the pointer/reference rabbit hole a little bit, so yeah.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045088</commentid>
    <comment_count>6</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-10-30 12:38:41 -0700</bug_when>
    <thetext>Thanks Tim!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240685</attachid>
            <date>2014-10-30 12:18:26 -0700</date>
            <delta_ts>2014-10-30 12:26:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>18704</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NTM3NSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE0LTEwLTMwICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYWN0aW9uIG1lbnVz
IGZvciB0ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzgyMjAKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJv
YmxlbS8xODc0MjI5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFR3byBuZXcgdHlwZXMgb2YgYWN0aW9ucyBmb3IgdGhlIHR3byB0ZXh0IGFjdGlvbnMu
CisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLQWN0aW9uTWVudUl0ZW1UeXBlcy5oOgorCisgICAg
ICAgIE9uZSBuZXcgdHlwZSBvZiBtZW51LgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0FjdGlv
bk1lbnVUeXBlcy5oOgorCisgICAgICAgIFBhc3Mgd2lsbE9wZW5NZW51IG9uIHRvIHRoZSBXS0Fj
dGlvbk1lbnVDb250cm9sbGVyLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bToKKyAgICAgICAgKC1bV0tWaWV3IHdpbGxPcGVuTWVudTp3aXRoRXZlbnQ6XSk6CisKKyAgICAg
ICAgVHdvIG5ldyBXZWJQYWdlUHJveHkgZnVuY3Rpb25zIHRoYXQgd2lsbCBwYXNzIG1lc3NhZ2Vz
IGFsb25nIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZWxlY3RMb29rdXBUZXh0
QXRMb2NhdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorCisgICAg
ICAgIEF0IHdpbGxPcGVuTWVudSB0aW1lLCB0ZXh0IG1lbnVzIHNob3VsZCBzZWxlY3QgdGV4dCBz
byB0aGF0IGl0IGlzIGNsZWFyIHdoYXQgdGhlIAorICAgICAgICBtZW51IGFjdGlvbnMgd2lsbCBh
cHBseSB0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIubW06CisK
KyAgICAgICAgTWVudSBpdGVtcyBmb3IgdGV4dCBtZW51cy4KKyAgICAgICAgKC1bV0tBY3Rpb25N
ZW51Q29udHJvbGxlciB3aWxsT3Blbk1lbnU6d2l0aEV2ZW50Ol0pOgorICAgICAgICAoLVtXS0Fj
dGlvbk1lbnVDb250cm9sbGVyIF9kZWZhdWx0TWVudUl0ZW1zRm9yVGV4dF0pOgorICAgICAgICAo
LVtXS0FjdGlvbk1lbnVDb250cm9sbGVyIF9jb3B5VGV4dDpdKToKKyAgICAgICAgKC1bV0tBY3Rp
b25NZW51Q29udHJvbGxlciBfbG9va3VwVGV4dDpdKToKKyAgICAgICAgKC1bV0tBY3Rpb25NZW51
Q29udHJvbGxlciBfY3JlYXRlQWN0aW9uTWVudUl0ZW1Gb3JUYWc6XSk6CisgICAgICAgIChpbWFn
ZUZvclJlc291cmNlOm5hbWU6OmlmKToKKworICAgICAgICBOZXcgbWVzc2FnZXMgdG8gdGhlIHdl
YiBwcm9jZXNzLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZD
dXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCisg
ICAgICAgIFJlLWZhY3RvciBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oKSB0byBy
ZS11c2UgdGhlIGNvZGUgdGhhdCBmaW5kcyB0aGUgCisgICAgICAgIFJhbmdlIGZvciB0aGUgZGlj
dGlvbmFyeSBsb29rdXAuIFRoYXQgY29kZSBub3cgbGl2ZXMgaW4gCisgICAgICAgIHJhbmdlRm9y
RGljdGlvbmFyeUxvb2t1cEF0SGl0VGVzdFJlc3VsdCgpIGFuZCBjYW4gYmUgdXNlZCBieSAKKyAg
ICAgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKCkgYW5kIG91ciBuZXcgZnVu
Y3Rpb24gCisgICAgICAgIHNlbGVjdExvb2t1cFRleHRBdExvY2F0aW9uKCkuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpyYW5nZUZvckRpY3Rpb25hcnlMb29rdXBBdEhpdFRlc3RSZXN1bHQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOgor
CisgICAgICAgIFNpbmNlIHRoZSBhY3Rpb24gbWVudSB0ZXh0IGlzIGFsd2F5cyBzZWxlY3RlZCwg
d2hlbiB0aGUgbG9va3VwIGFjdGlvbiBpcyBjaG9zZW4sIAorICAgICAgICB3ZSBjYW4ganVzdCBs
b29rdXAgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbik6CisKKyAgICAgICAgVXNl
cyB0aGUgbmV3IGZ1bmN0aW9uIHJhbmdlRm9yRGljdGlvbmFyeUxvb2t1cEF0SGl0VGVzdFJlc3Vs
dCgpIHRvIGdldCBhIGxvb2t1cCAKKyAgICAgICAgcmFuZ2UgYW5kIHRoZW4gc2VsZWN0IGl0Lgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RMb29rdXBUZXh0QXRMb2NhdGlvbik6CisK
IDIwMTQtMTAtMzAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBX
aGVuIGEgY2xpZW50IGNlcnRpZmljYXRlIGlzIHJlamVjdGVkLCBTYWZhcmkgc2F5cyB0aGUgd2Vi
c2l0ZSBkaWRu4oCZdCBhY2NlcHQgdGhlIGNlcnRpZmljYXRlIOKAnHVua25vd27igJ0gaW5zdGVh
ZCBvZiBuYW1pbmcgdGhlIGNlcnRpZmljYXRlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
QVBJL2MvV0tBY3Rpb25NZW51SXRlbVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSS9jL1dLQWN0aW9uTWVudUl0ZW1UeXBlcy5oCShyZXZpc2lvbiAxNzUzNzMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tBY3Rpb25NZW51SXRlbVR5cGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDkgQEAgZW51bSB7CiAgICAga1dLQ29udGV4dEFj
dGlvbkl0ZW1UYWdDb3B5SW1hZ2UsCiAgICAga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdBZGRJbWFn
ZVRvUGhvdG9zLAogICAgIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFnU2F2ZUltYWdlVG9Eb3dubG9h
ZHMsCi0gICAga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdTaGFyZUltYWdlCisgICAga1dLQ29udGV4
dEFjdGlvbkl0ZW1UYWdTaGFyZUltYWdlLAorICAgIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFnQ29w
eVRleHQsCisgICAga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdMb29rdXBUZXh0CiB9OwogCiAjaWZk
ZWYgX19jcGx1c3BsdXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0FjdGlv
bk1lbnVUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9X
S0FjdGlvbk1lbnVUeXBlcy5oCShyZXZpc2lvbiAxNzUzNzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQVBJL2MvV0tBY3Rpb25NZW51VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsOCBAQCBlbnVtIHsKICAgICBrV0tBY3Rpb25NZW51Tm9uZSA9IDAsCiAgICAga1dLQWN0aW9u
TWVudUxpbmssCiAgICAga1dLQWN0aW9uTWVudUltYWdlLAotICAgIGtXS0FjdGlvbk1lbnVEYXRh
RGV0ZWN0ZWRJdGVtCisgICAga1dLQWN0aW9uTWVudURhdGFEZXRlY3RlZEl0ZW0sCisgICAga1dL
QWN0aW9uTWVudVJlYWRPbmx5VGV4dAogfTsKIHR5cGVkZWYgdWludDMyX3QgX1dLQWN0aW9uTWVu
dVR5cGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiAxNzUzNzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI3NCw2ICs1Mjc0LDExIEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpwZXJmb3JtQWN0aW9uTWVudUhpdFQKICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0TG9jYXRpb24ocG9pbnQpLCBt
X3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RMb29rdXBUZXh0QXRMb2Nh
dGlvbihGbG9hdFBvaW50IHBvaW50KQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2VsZWN0TG9va3VwVGV4dEF0TG9jYXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7Cit9
CisKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRQZXJmb3JtQWN0aW9uTWVudUhpdFRlc3QoY29uc3Qg
QWN0aW9uTWVudUhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBtX3BhZ2VDbGllbnQuZGlk
UGVyZm9ybUFjdGlvbk1lbnVIaXRUZXN0KHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAxNzUzNzMpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5MCw2ICs2OTAs
NyBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gRGljdGlvbmFyeS4KICAg
ICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jik7CisgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNl
bGVjdGlvbigpOwogI2VuZGlmCiAKICAgICB2b2lkIHJlY2VpdmVkUG9saWN5RGVjaXNpb24oV2Vi
Q29yZTo6UG9saWN5QWN0aW9uLCBXZWJGcmFtZVByb3h5KiwgdWludDY0X3QgbGlzdGVuZXJJRCwg
dWludDY0X3QgbmF2aWdhdGlvbklEKTsKQEAgLTkyNSw2ICs5MjYsNyBAQCBwdWJsaWM6CiAKICAg
ICBXZWJIaXRUZXN0UmVzdWx0KiBsYXN0TW91c2VNb3ZlSGl0VGVzdFJlc3VsdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1bHQuZ2V0KCk7IH0KICAgICB2b2lkIHBl
cmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCk7Cisg
ICAgdm9pZCBzZWxlY3RMb29rdXBUZXh0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KTsK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oRUZMKSAmJiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIGRl
ZmluZWQoSEFWRV9FQ09SRV9YKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQkocmV2aXNpb24gMTc1MzczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQzLDYgKzM2NDMsMTEg
QEAgLSAodm9pZClwcmVwYXJlRm9yTWVudTooTlNNZW51ICopbWVudSB3aQogICAgIFtfZGF0YS0+
X2FjdGlvbk1lbnVDb250cm9sbGVyIHByZXBhcmVGb3JNZW51Om1lbnUgd2l0aEV2ZW50OmV2ZW50
XTsKIH0KIAorLSAodm9pZCl3aWxsT3Blbk1lbnU6KE5TTWVudSAqKW1lbnUgd2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKK3sKKyAgICBbX2RhdGEtPl9hY3Rpb25NZW51Q29udHJvbGxlciB3aWxs
T3Blbk1lbnU6bWVudSB3aXRoRXZlbnQ6ZXZlbnRdOworfQorCiAtICh2b2lkKWRpZENsb3NlTWVu
dTooTlNNZW51ICopbWVudSB3aXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAogewogICAgIFtfZGF0
YS0+X2FjdGlvbk1lbnVDb250cm9sbGVyIGRpZENsb3NlTWVudTptZW51IHdpdGhFdmVudDpldmVu
dF07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0
aW9uTWVudUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTc1MzczKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9XS0FjdGlvbk1lbnVDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDYgKzU5LDcgQEAgQGludGVyZmFjZSBXS0FjdGlvbk1lbnVDb250cm9sbGVyIDogTlNPYgog
LSAodm9pZCl3aWxsRGVzdHJveVZpZXc6KFdLVmlldyAqKXZpZXc7CiAKIC0gKHZvaWQpcHJlcGFy
ZUZvck1lbnU6KE5TTWVudSAqKW1lbnUgd2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CistICh2
b2lkKXdpbGxPcGVuTWVudTooTlNNZW51ICopbWVudSB3aXRoRXZlbnQ6KE5TRXZlbnQgKilldmVu
dDsKIC0gKHZvaWQpZGlkQ2xvc2VNZW51OihOU01lbnUgKiltZW51IHdpdGhFdmVudDooTlNFdmVu
dCAqKWV2ZW50OwogCiAtICh2b2lkKWRpZFBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdDooY29uc3Qg
V2ViS2l0OjpBY3Rpb25NZW51SGl0VGVzdFJlc3VsdCYpaGl0VGVzdFJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tBY3Rpb25NZW51Q29udHJvbGxlci5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRy
b2xsZXIubW0JKHJldmlzaW9uIDE3NTM3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvV0tBY3Rpb25NZW51Q29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEw
NCwyMSBAQCAtICh2b2lkKXByZXBhcmVGb3JNZW51OihOU01lbnUgKiltZW51IHdpCiAgICAgW3Nl
bGYgX3VwZGF0ZUFjdGlvbk1lbnVJdGVtc107CiB9CiAKKy0gKHZvaWQpd2lsbE9wZW5NZW51OihO
U01lbnUgKiltZW51IHdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKG1lbnUg
IT0gX3drVmlldy5hY3Rpb25NZW51KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoX3R5cGUg
IT0ga1dLQWN0aW9uTWVudVJlYWRPbmx5VGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
QWN0aW9uIG1lbnVzIGZvciB0ZXh0IHNob3VsZCBoaWdobGlnaHQgdGhlIHRleHQgc28gdGhhdCBp
dCBpcyBjbGVhciB3aGF0IHRoZSBhY3Rpb24gbWVudSBhY3Rpb25zCisgICAgLy8gd2lsbCBhcHBs
eSB0by4gSWYgdGhlIHRleHQgaXMgYWxyZWFkeSBzZWxlY3RlZCwgdGhlIG1lbnUgd2lsbCB1c2Ug
dGhlIGV4aXN0aW5nIHNlbGVjdGlvbi4KKyAgICBXZWJIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVz
dWx0ID0gX3BhZ2UtPmxhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0KCk7CisgICAgaWYgKCFoaXRU
ZXN0UmVzdWx0LT5pc1NlbGVjdGVkKCkpCisgICAgICAgIF9wYWdlLT5zZWxlY3RMb29rdXBUZXh0
QXRMb2NhdGlvbihbX3drVmlldyBjb252ZXJ0UG9pbnQ6ZXZlbnQubG9jYXRpb25JbldpbmRvdyBm
cm9tVmlldzpuaWxdKTsKK30KKwogLSAodm9pZClkaWRDbG9zZU1lbnU6KE5TTWVudSAqKW1lbnUg
d2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBpZiAobWVudSAhPSBfd2tWaWV3LmFj
dGlvbk1lbnUpCkBAIC0yOTAsNiArMzA1LDMwIEBAIC0gKHZvaWQpX2FkZEltYWdlVG9QaG90b3M6
KGlkKXNlbmRlcgogICAgIH0pOwogfQogCisjcHJhZ21hIG1hcmsgVGV4dCBhY3Rpb25zCisKKy0g
KE5TQXJyYXkgKilfZGVmYXVsdE1lbnVJdGVtc0ZvclRleHQKK3sKKyAgICBXZWJIaXRUZXN0UmVz
dWx0KiBoaXRUZXN0UmVzdWx0ID0gX3BhZ2UtPmxhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0KCk7
CisgICAgaWYgKCFoaXRUZXN0UmVzdWx0LT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiBA
WyBdOworCisgICAgUmV0YWluUHRyPE5TTWVudUl0ZW0+IGNvcHlUZXh0SXRlbSA9IFtzZWxmIF9j
cmVhdGVBY3Rpb25NZW51SXRlbUZvclRhZzprV0tDb250ZXh0QWN0aW9uSXRlbVRhZ0NvcHlUZXh0
XTsKKyAgICBSZXRhaW5QdHI8TlNNZW51SXRlbT4gbG9va3VwVGV4dEl0ZW0gPSBbc2VsZiBfY3Jl
YXRlQWN0aW9uTWVudUl0ZW1Gb3JUYWc6a1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdMb29rdXBUZXh0
XTsKKworICAgIHJldHVybiBAWyBjb3B5VGV4dEl0ZW0uZ2V0KCksIGxvb2t1cFRleHRJdGVtLmdl
dCgpIF07Cit9CisKKy0odm9pZClfY29weVRleHQ6KGlkKXNlbmRlcgoreworICAgIF9wYWdlLT5l
eGVjdXRlRWRpdENvbW1hbmQoU3RyaW5nKCJjb3B5IikpOworfQorCistKHZvaWQpX2xvb2t1cFRl
eHQ6KGlkKXNlbmRlcgoreworICAgIF9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3Vy
cmVudFNlbGVjdGlvbigpOworfQorCiAjcHJhZ21hIG1hcmsgTlNNZW51RGVsZWdhdGUgaW1wbGVt
ZW50YXRpb24KIAogLSAodm9pZCltZW51TmVlZHNVcGRhdGU6KE5TTWVudSAqKW1lbnUKQEAgLTM3
NCw2ICs0MTMsMTggQEAgLSAoUmV0YWluUHRyPE5TTWVudUl0ZW0+KV9jcmVhdGVBY3Rpb25NZQog
ICAgICAgICBpbWFnZSA9IHdlYktpdEJ1bmRsZUltYWdlTmFtZWQoQCJTaGFyZUltYWdlVGVtcGxh
dGUiKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFn
Q29weVRleHQ6CisgICAgICAgIHNlbGVjdG9yID0gQHNlbGVjdG9yKF9jb3B5VGV4dDopOworICAg
ICAgICB0aXRsZSA9IEAiQ29weSI7CisgICAgICAgIGltYWdlID0gW05TSW1hZ2UgaW1hZ2VOYW1l
ZDpAIk5TQWN0aW9uTWVudUNvcHkiXTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtXS0Nv
bnRleHRBY3Rpb25JdGVtVGFnTG9va3VwVGV4dDoKKyAgICAgICAgc2VsZWN0b3IgPSBAc2VsZWN0
b3IoX2xvb2t1cFRleHQ6KTsKKyAgICAgICAgdGl0bGUgPSBAIkxvb2t1cCI7CisgICAgICAgIGlt
YWdlID0gW05TSW1hZ2UgaW1hZ2VOYW1lZDpAIk5TQWN0aW9uTWVudUxvb2t1cCJdOworICAgICAg
ICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm4gbmlsOwpAQCAtNDE0LDYgKzQ2NSw4IEBAIC0gKE5TQXJyYXkgKilfZGVm
YXVsdE1lbnVJdGVtcwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YURldGVjdG9yTWVu
dUl0ZW1zOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90
eXBlID0ga1dLQWN0aW9uTWVudVJlYWRPbmx5VGV4dDsKKyAgICAgICAgICAgIHJldHVybiBbc2Vs
ZiBfZGVmYXVsdE1lbnVJdGVtc0ZvclRleHRdOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2
aXNpb24gMTc1MzczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJv
eHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwOCw2ICs0MDgsMTQgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9vawogICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3Bh
Z2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9m
Q3VycmVudFNlbGVjdGlvbigpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlv
bmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpLCBtX3BhZ2VJRCk7Cit9CisKIC8vIENvbXBs
ZXggdGV4dCBpbnB1dCBzdXBwb3J0IGZvciBwbHVnLWlucy4KIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCkKIHsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTc1MzczKQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtOTczLDYgKzk3Myw4IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYpOwogICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShX
ZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OlJhbmdlJiwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zKTsK
KyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZUZvckRpY3Rpb25hcnlMb29rdXBB
dEhpdFRlc3RSZXN1bHQoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYsIE5TRGljdGlvbmFy
eSAqKik7CisgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlv
bigpOwogCiAgICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiB3aW5kb3dGcmFtZUluVW5mbGlwcGVkU2NyZWVuQ29vcmRpbmF0ZXMsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcyk7CiAK
QEAgLTEwNDcsNiArMTA0OSw3IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAg
dm9pZCBwZXJmb3JtQWN0aW9uTWVudUhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9p
bnQpOworICAgIHZvaWQgc2VsZWN0TG9va3VwVGV4dEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQ
b2ludCk7CiAjZW5kaWYKIAogICAgIHVpbnQ2NF90IG1fcGFnZUlEOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDE3NTM3MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNiArMTU4LDcgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgIyBEaWN0aW9uYXJ5IHN1cHBvcnQuCiAgICAgUGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExv
Y2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQpCisgICAgUGVyZm9ybURpY3Rpb25hcnlM
b29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQogI2VuZGlmCiAKICAgICBQcmVmZXJlbmNlc0RpZENo
YW5nZShXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmUgc3RvcmUpCkBAIC0zOTAsNSArMzkxLDYg
QEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgVGFrZVNuYXBzaG90
KFdlYkNvcmU6OkludFJlY3Qgc25hcHNob3RSZWN0LCBXZWJDb3JlOjpJbnRTaXplIGJpdG1hcFNp
emUsIHVpbnQzMl90IG9wdGlvbnMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIFBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6Rmxv
YXRQb2ludCBsb2NhdGlvbikKKyAgICBTZWxlY3RMb29rdXBUZXh0QXRMb2NhdGlvbihXZWJDb3Jl
OjpGbG9hdFBvaW50IGxvY2F0aW9uKQogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAx
NzUzNzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUyOSw1MCArNTI5LDYzIEBAIHN0YXRpYyBQYXNzUmVm
UHRyPFJhbmdlPiByYW5nZUV4cGFuZGVkQXIKICAgICByZXR1cm4gbWFrZVJhbmdlKGNvbnRleHRT
dGFydCwgY29udGV4dEVuZCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCitQYXNzUmVmUHRy
PFJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvckRpY3Rpb25hcnlMb29rdXBBdEhpdFRlc3RSZXN1bHQo
Y29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgTlNEaWN0aW9uYXJ5
ICoqb3B0aW9ucykKIHsKLSAgICBpZiAoUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZp
ZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKLSAgICAgICAgaWYgKHBsdWdpblZp
ZXctPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihmbG9hdFBvaW50KSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5u
ZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRoZSBwb2ludCBpcyBvdmVyLgotICAgIEludFBv
aW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KGZsb2F0UG9pbnQpOwotICAgIEhpdFRlc3RSZXN1
bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVz
dWx0QXRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhw
b2ludCkpOwotICAgIEZyYW1lKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/
IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgYXV0byByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICBJbnRQb2ludCB0cmFuc2xhdGVkUG9pbnQgPSBmcmFtZS0+dmll
dygpLT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KTsKKyAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5k
b2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIg
YXQgdGhlIHBvaW50LgotICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQodHJhbnNsYXRlZFBv
aW50KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoaGl0
VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHJlbmRlcmVyLT5w
b3NpdGlvbkZvclBvaW50KGhpdFRlc3RSZXN1bHQubG9jYWxQb2ludCgpLCBudWxscHRyKTsKKyAg
ICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKG5vZGUpOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0g
ZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHRyYW5zbGF0ZWRQb2ludCk7CiAgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzaG91bGRV
c2VTZWxlY3Rpb24ocG9zaXRpb24sIHNlbGVjdGlvbikpIHsKICAgICAgICAgcGVyZm9ybURpY3Rp
b25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIHNlbGVjdGlvbik7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgTlNEaWN0aW9uYXJ5ICpv
cHRpb25zID0gbmlsOwotCiAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSBm
b3VyIGxpbmVzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuIChEaWN0aW9uYXJ5
IGNhbiBzb21ldGltZXMgbG9vayB1cCB0aGluZ3MgdGhhdCBhcmUgZm91ciBsaW5lcyBsb25nKQog
ICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3Vu
ZFBvc2l0aW9uKHBvc2l0aW9uLCA0KTsKICAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtl
UmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJh
bmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSksIDApOwogCiAgICAgU3RyaW5n
IGZ1bGxQbGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgp
KTsKIAotICAgIE5TUmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSBXS0V4dHJhY3RXb3JkRGVmaW5pdGlv
blRva2VuUmFuZ2VGcm9tQ29udGV4dHVhbFN0cmluZyhmdWxsUGxhaW5UZXh0U3RyaW5nLCByYW5n
ZVRvUGFzcywgJm9wdGlvbnMpOworICAgIE5TUmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSBXS0V4dHJh
Y3RXb3JkRGVmaW5pdGlvblRva2VuUmFuZ2VGcm9tQ29udGV4dHVhbFN0cmluZyhmdWxsUGxhaW5U
ZXh0U3RyaW5nLCByYW5nZVRvUGFzcywgb3B0aW9ucyk7CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9u
IHNvbWV0aW1lcyByZXR1cm5zIHtOU05vdEZvdW5kLCAwfSBpZiBpdCB3YXMgdW5hYmxlIHRvIGRl
dGVybWluZSBhIGdvb2Qgc3RyaW5nLgogICAgIGlmIChleHRyYWN0ZWRSYW5nZS5sb2NhdGlvbiA9
PSBOU05vdEZvdW5kKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgUmVmUHRyPFJhbmdlPiBmaW5hbFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShm
dWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uLCBleHRyYWN0
ZWRSYW5nZS5sZW5ndGgpOwotICAgIGlmICghZmluYWxSYW5nZSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQo
KSwgZXh0cmFjdGVkUmFuZ2UubG9jYXRpb24sIGV4dHJhY3RlZFJhbmdlLmxlbmd0aCk7Cit9CisK
K3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIGZsb2F0UG9pbnQpCit7CisgICAgaWYgKFBsdWdpblZpZXcqIHBsdWdpblZpZXcg
PSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlm
IChwbHVnaW5WaWV3LT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oZmxvYXRQb2lu
dCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgcGVyZm9ybURpY3Rpb25hcnlM
b29rdXBGb3JSYW5nZShmcmFtZSwgKmZpbmFsUmFuZ2UsIG9wdGlvbnMpOworICAgIC8vIEZpbmQg
dGhlIGZyYW1lIHRoZSBwb2ludCBpcyBvdmVyLgorICAgIEludFBvaW50IHBvaW50ID0gcm91bmRl
ZEludFBvaW50KGZsb2F0UG9pbnQpOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdl
LT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2Ut
Pm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhwb2ludCkpOworICAgIEZyYW1l
KiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmls
OworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSByYW5nZUZvckRpY3Rpb25hcnlMb29rdXBBdEhp
dFRlc3RSZXN1bHQocmVzdWx0LCAmb3B0aW9ucyk7CisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29r
dXBGb3JSYW5nZShmcmFtZSwgKnJhbmdlLCBvcHRpb25zKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKQEAgLTYwMiw2ICs2MTUsMTIgQEAgdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvcgogICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdlLCBvcHRpb25zKTsKIH0KIAordm9pZCBX
ZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCit7Cisg
ICAgRnJhbWUqIGZyYW1lID0gJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7CisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUs
IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Cit9CisKIHZvaWQgV2ViUGFnZTo6cGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSogZnJhbWUsIFJhbmdlJiByYW5nZSwg
TlNEaWN0aW9uYXJ5ICpvcHRpb25zKQogewogICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0
ZVNwYWNlKCkuaXNFbXB0eSgpKQpAQCAtMTE1MSw2ICsxMTcwLDIxIEBAIHZvaWQgV2ViUGFnZTo6
cGVyZm9ybUFjdGlvbk1lbnVIaXRUZXN0QXQKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZFBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdChhY3Rpb25NZW51UmVzdWx0KSk7CiB9CiAK
K3ZvaWQgV2ViUGFnZTo6c2VsZWN0TG9va3VwVGV4dEF0TG9jYXRpb24oRmxvYXRQb2ludCBsb2Nh
dGlvbkluV2luZG93Q29vb3JkaW5hdGVzKQoreworICAgIE1haW5GcmFtZSYgbWFpbkZyYW1lID0g
Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCFtYWluRnJhbWUudmlldygpIHx8ICFt
YWluRnJhbWUudmlldygpLT5yZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybjsKKworICAgIElu
dFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5XaW5kb3dDb29vcmRpbmF0
ZXMpOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVu
dEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXco
KS0+d2luZG93VG9Db250ZW50cyhwb2ludCkpOworICAgIEZyYW1lKiBmcmFtZSA9IHJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1l
bnQoKS5mcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworICAgIFJlZlB0cjxSYW5n
ZT4gbG9va3VwUmFuZ2UgPSByYW5nZUZvckRpY3Rpb25hcnlMb29rdXBBdEhpdFRlc3RSZXN1bHQo
cmVzdWx0LCAmb3B0aW9ucyk7CisgICAgaWYgKGxvb2t1cFJhbmdlKQorICAgICAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShsb29rdXBSYW5nZS5nZXQoKSwgRE9XTlNUUkVB
TSwgdHJ1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQo=
</data>
<flag name="review"
          id="265463"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>