<?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>92293</bug_id>
          
          <creation_ts>2012-07-25 13:56:26 -0700</creation_ts>
          <short_desc>Improve touch adjustment for targetting small controls.</short_desc>
          <delta_ts>2012-08-01 06:41:32 -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>
          
          <blocked>91894</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kevin Ellis">kevers</reporter>
          <assigned_to name="Kevin Ellis">kevers</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>gmak</cc>
    
    <cc>mifenton</cc>
    
    <cc>rjkroege</cc>
    
    <cc>rniwa</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>678429</commentid>
    <comment_count>0</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-25 13:56:26 -0700</bug_when>
    <thetext>Improve touch adjustment for targetting small controls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678452</commentid>
    <comment_count>1</comment_count>
      <attachid>154441</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-25 14:11:25 -0700</bug_when>
    <thetext>Created attachment 154441
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678463</commentid>
    <comment_count>2</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-25 14:17:15 -0700</bug_when>
    <thetext>Separating the scoring adjustment out of bug 91894 (search cancel button is hard to activate with a tap gesture even if touch adjustment is enabled).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680327</commentid>
    <comment_count>3</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-27 02:11:34 -0700</bug_when>
    <thetext>Looks good, with the test-case any future improvements to the distance method can check if they truly are better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680332</commentid>
    <comment_count>4</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-27 02:17:19 -0700</bug_when>
    <thetext>Btw, nice improvements to the touch-adjustment test-functions. I think we should soon try to collect some of the best versions of the helper functions for touch-adjustment test-cases into a small helper file and use them more consistently; but that is a task for another bug another time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680542</commentid>
    <comment_count>5</comment_count>
      <attachid>154441</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-07-27 06:33:43 -0700</bug_when>
    <thetext>Comment on attachment 154441
Patch

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

&gt; Source/WebCore/page/TouchAdjustment.cpp:253
&gt; +float hybridDistanceFunction(const IntPoint&amp; touchHotspot, const IntRect&amp; touchArea, const SubtargetGeometry&amp; subtarget)

I think we do not need the term &quot;distance&quot; here anymore, but I am out of good suggestions now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680574</commentid>
    <comment_count>6</comment_count>
      <attachid>154441</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-27 06:49:34 -0700</bug_when>
    <thetext>Comment on attachment 154441
Patch

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

&gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:253
&gt;&gt; +float hybridDistanceFunction(const IntPoint&amp; touchHotspot, const IntRect&amp; touchArea, const SubtargetGeometry&amp; subtarget)
&gt; 
&gt; I think we do not need the term &quot;distance&quot; here anymore, but I am out of good suggestions now.

It is still a distance score with 0.0 being a perfect hit and 1.0 being a glancing touch; however, I can see your point.  Calling it a &quot;cost&quot; function seems a bit too generic, but might be appropriate.  Not so keen on using a term like goodness of fit (but throwing it out there anyways), as it suggests strong statistical implications that are not strictly valid.

Does hybridCostFunction, sound better than hybridDistanceFunction?  We can certainly revisit the naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680587</commentid>
    <comment_count>7</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-27 07:03:30 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 154441 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154441&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:253
&gt; &gt;&gt; +float hybridDistanceFunction(const IntPoint&amp; touchHotspot, const IntRect&amp; touchArea, const SubtargetGeometry&amp; subtarget)
&gt; &gt; 
&gt; &gt; I think we do not need the term &quot;distance&quot; here anymore, but I am out of good suggestions now.
&gt; 
&gt; It is still a distance score with 0.0 being a perfect hit and 1.0 being a glancing touch; however, I can see your point.  Calling it a &quot;cost&quot; function seems a bit too generic, but might be appropriate.  Not so keen on using a term like goodness of fit (but throwing it out there anyways), as it suggests strong statistical implications that are not strictly valid.
&gt; 
&gt; Does hybridCostFunction, sound better than hybridDistanceFunction?  We can certainly revisit the naming.

The function used to bestZoomableNode is not a distance either, it is infact also some weighted hybrid. I orginally used the mathematical term &quot;metric&quot; (a function with distance like properties) for these functions, but using &apos;distance&apos; even if slightly wrong seemed to be more accesible to other developers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680606</commentid>
    <comment_count>8</comment_count>
      <attachid>154441</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 07:16:35 -0700</bug_when>
    <thetext>Comment on attachment 154441
Patch

Rejecting attachment 154441 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
t-queue/Source/WebKit/chromium/third_party/libvpx --revision 147803 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
39&gt;At revision 147803.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/13362687</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680814</commentid>
    <comment_count>9</comment_count>
      <attachid>154441</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 10:59:52 -0700</bug_when>
    <thetext>Comment on attachment 154441
Patch

Clearing flags on attachment: 154441

Committed r123889: &lt;http://trac.webkit.org/changeset/123889&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680815</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 10:59:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684144</commentid>
    <comment_count>11</comment_count>
      <attachid>154441</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-01 06:28:47 -0700</bug_when>
    <thetext>Comment on attachment 154441
Patch

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

Please get rid of the XHTML&apos;isms.

&gt; LayoutTests/touchadjustment/small-target-test.html:65
&gt; +  &lt;input id=&quot;task&quot; type=&quot;text&quot; value=&quot;Task 1&quot;/&gt;

This is wrong but probably harmless. Flat tags does not work in HTML.

&gt; LayoutTests/touchadjustment/small-target-test.html:70
&gt; +  &lt;div id = &quot;remove-button&quot; onclick=&quot;onClick();&quot;/&gt;

This is completely wrong. Flat tags do not work in HTML, and fixing this error breaks the test-case.

&gt; LayoutTests/touchadjustment/small-target-test.html:76
&gt; +    &lt;div id = &quot;drop-down-selector&quot; onclick=&quot;onClick();&quot;/&gt;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684153</commentid>
    <comment_count>12</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-01 06:41:32 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 154441 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154441&amp;action=review
&gt; 
&gt; Please get rid of the XHTML&apos;isms.
&gt; 
Well, actually I&apos;ve got them. I will fix them in bug #92869. I noticed it will I was cleaning up for #92869 anyway.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154441</attachid>
            <date>2012-07-25 14:11:25 -0700</date>
            <delta_ts>2012-08-01 06:28:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92293-20120725171114.patch</filename>
            <type>text/plain</type>
            <size>16868</size>
            <attacher name="Kevin Ellis">kevers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc4ODg2MmNhOTBkYzg0
ZDQ3ODlkYjUzMTM2MzZiZTQyMjNmMjZiOS4uMWQ3MWZhMzkxOTgyMTRmZmEyMDY2YmI5YWM0NGRm
MDY5ZGMzZTgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA3LTI1ICBLZXZp
biBFbGxpcyAgPGtldmVyc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wcm92ZSB0b3VjaCBh
ZGp1c3RtZW50IGZvciB0YXJnZXR0aW5nIHNtYWxsIGNvbnRyb2xzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIyOTMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb2RpZmllcyB0aGUgdG91Y2ggYWRqdXN0
bWVudCBhbGdvcml0aG0gdG8gYmV0dGVyIGRpc2NyaW1pbmF0ZSBzbWFsbCB0YXJnZXRzIHdpdGhv
dXQgaW50cm9kdWNpbmcKKyAgICAgICAgYSBiaWFzIHRvd2FyZHMgc2hvcnRlciBsaW5rcy4gIFRo
ZSByZXZpc2VkIHNjb3JpbmcgYWxnb3JpaHRtIHVzZXMgYSBub3JtYWxpemVkIGRpc3RhbmNlIHRv
CisgICAgICAgIGNlbnRlci1saW5lIHNjb3JlIGFuZCBhIG5vcm1hbGl6ZWQgb3ZlcmxhcCBzY29y
ZS4gIFRoZSBiZXR0ZXIgb2YgdGhlIHR3byBzY29yZXMgaXMgdXNlZCBmb3IKKyAgICAgICAgZGV0
ZXJtaW5pbmcgdGhlIGJlc3QgY2FuZGlkYXRlIGZvciB0YXJnZXQgYWRqdXN0bWVudC4gIFRoZSBj
ZW50ZXItbGluZSBzY29yZSB3b3JrcyB3ZWxsCisgICAgICAgIGZvciBkaXNjcmltaW5hdGluZyBl
bGVtZW50cyB3aXRoIHBhcnRpYWwgb3ZlcmxhcHMsIHdoZXJlIHJlbHlpbmcgc29sZWx5IG9uIHBl
cmNlbnQgb3ZlcmxhcAorICAgICAgICBjb3VsZCBiaWFzIHRvd2FyZHMgdGhlIHNtYWxsZXIgZWxl
bWVudC4gIENvbnZlcnNlbHksIGEgaGlnaCBwZXJjZW50YWdlIGluIG92ZXJsYXAgcHJvdmlkZXMg
YSAKKyAgICAgICAgc3Ryb25nIG1lYXN1cmUgb2YgY29uZmlkZW5jZSBpbiBhIGNhbmRpZGF0ZSB0
YXJnZXQuICBBbiBhZGRpdG9uYWwgdGllLWJyZWFrIGFsZ29yaXRobSBpcworICAgICAgICBpbnRy
b2R1Y2VkIHRvIG1pbmltaXplIHRoZSBhZGp1c3RtZW50IGRpc3RhbmNlIGlmIHR3byBlcXVhbGx5
IHN1aXRhYmxlIGNhbmRpZGF0ZXMgYXJlIGZvdW5kLgorCisgICAgICAgIFRlc3Q6IHRvdWNoYWRq
dXN0bWVudC9zbWFsbC10YXJnZXQtdGVzdC5odG1sCisKKyAgICAgICAgKiBwYWdlL1RvdWNoQWRq
dXN0bWVudC5jcHA6CisgICAgICAgIChUb3VjaEFkanVzdG1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VG91Y2hBZGp1c3RtZW50Ojpub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpoeWJyaWREaXN0YW5jZUZ1bmN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoTG93ZXN0RGlzdGFuY2VN
ZXRyaWMpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEJlc3RDbGlja2FibGVDYW5kaWRhdGUpOgor
CiAyMDEyLTA3LTI0ICBOaWNvIFdlYmVyICA8dGhha2lzQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbY2hyb21pdW0vbWFjXSBSZW1vdmUgd2ViY29yZV9yZXNvdXJjZV9maWxlcyBmcm9tIFdlYkNv
cmUuZ3lwaQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwCmluZGV4IGNmNGJh
MWJiMzdhNTAxNDczOTZlZTNlYWI1YTc2NWUzZWFlZGQ1NWQuLjIxODNiNmQ1ZWJmYTYxZDljNTEw
YWFmMjYyZTM3NTBiYzMxNjFmNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91
Y2hBZGp1c3RtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVu
dC5jcHAKQEAgLTM0LDExICszNCwxNCBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAi
U2hhZG93Um9vdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBUb3VjaEFk
anVzdG1lbnQgewogCitjb25zdCBmbG9hdCB6ZXJvVG9sZXJhbmNlID0gMWUtNmY7CisKIC8vIENs
YXNzIGZvciByZW1lbWJlcmluZyBhYnNvbHV0ZSBxdWFkcyBvZiBhIHRhcmdldCBub2RlIGFuZCB3
aGF0IG5vZGUgdGhleSByZXByZXNlbnQuCiBjbGFzcyBTdWJ0YXJnZXRHZW9tZXRyeSB7CiBwdWJs
aWM6CkBAIC03Miw2ICs3NSw3IEBAIGJvb2wgbm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKE5vZGUq
IG5vZGUpCiAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGFiZWxU
YWcpICYmIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihlbGVtZW50KS0+Y29udHJvbCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCiAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBoYXNEZWZhdWx0RXZlbnRIYW5kbGVyIGFuZCB1c2UgdGhhdCBpbnN0ZWFkIG9mIGFsbCBv
ZiB0aGUgYWJvdmUgY2hlY2tzLgogICAgIGlmIChub2RlLT5oYXNFdmVudExpc3RlbmVycygpCiAg
ICAgICAgICYmIChub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkKQEAgLTIxOSw3ICsyMjMsNiBAQCBmbG9hdCBkaXN0YW5jZVNxdWFyZWRUb1RhcmdldENlbnRl
ckxpbmUoY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50UgogICAgIHJldHVy
biByZWN0LmRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCh0b3VjaEhvdHNwb3Qp
OwogfQogCi0KIC8vIFRoaXMgcmV0dXJucyBxdW90aWVudCBvZiB0aGUgdGFyZ2V0IGFyZWEgYW5k
IGl0cyBpbnRlcnNlY3Rpb24gd2l0aCB0aGUgdG91Y2ggYXJlYS4KIC8vIFRoaXMgd2lsbCBwcmlv
cml0aXplIGxhcmdlc3QgaW50ZXJzZWN0aW9uIGFuZCBzbWFsbGVzdCBhcmVhLCB3aGlsZSBiYWxh
bmNpbmcgdGhlIHR3byBhZ2FpbnN0IGVhY2ggb3RoZXIuCiBmbG9hdCB6b29tYWJsZUludGVyc2Vj
dGlvblF1b3RpZW50KGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3Qm
IHRvdWNoQXJlYSwgY29uc3QgU3VidGFyZ2V0R2VvbWV0cnkmIHN1YnRhcmdldCkKQEAgLTIzOSw2
ICsyNDIsMzQgQEAgZmxvYXQgem9vbWFibGVJbnRlcnNlY3Rpb25RdW90aWVudChjb25zdCBJbnRQ
b2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JgogICAgIHJldHVybiByZWN0LnNpemUo
KS5hcmVhKCkgLyAoZmxvYXQpaW50ZXJzZWN0aW9uLnNpemUoKS5hcmVhKCk7CiB9CiAKKy8vIFVz
ZXMgYSBoeWJyaWQgb2YgZGlzdGFuY2UgdG8gY2VudGVyIGFuZCBpbnRlcnNlY3QgcmF0aW8sIG5v
cm1hbGl6aW5nIGVhY2gKKy8vIHNjb3JlIGJldHdlZW4gMCBhbmQgMSBhbmQgY2hvb3NpbmcgdGhl
IGJldHRlciBzY29yZS4gVGhlIGRpc3RhbmNlIHRvCisvLyBjZW50ZXJsaW5lIHdvcmtzIGJlc3Qg
Zm9yIGRpc2FtYmlndWF0aW5nIGNsaWNrcyBvbiB0YXJnZXRzIHN1Y2ggYXMgbGlua3MsCisvLyB3
aGVyZSB0aGUgd2lkdGggbWF5IGJlIHNpZ25pZmljYW50bHkgbGFyZ2VyIHRoYW4gdGhlIHRvdWNo
IHdpZHRoLiBVc2luZworLy8gYXJlYSBvZiBvdmVybGFwIGluIHN1Y2ggY2FzZXMgY2FuIGxlYWQg
dG8gYSBiaWFzIHRvd2FyZHMgc2hvcnRlciBsaW5rcy4KKy8vIENvbnZlcnNlbHksIHBlcmNlbnRh
Z2Ugb2Ygb3ZlcmxhcCBjYW4gcHJvdmlkZSBzdHJvbmcgY29uZmlkZW5jZSBpbiB0YXBwaW5nCisv
LyBvbiBhIHNtYWxsIHRhcmdldCwgd2hlcmUgdGhlIG92ZXJsYXAgaXMgb2Z0ZW4gcXVpdGUgaGln
aCwgYW5kIHdvcmtzIHdlbGwKKy8vIGZvciB0aWdodGx5IHBhY2tlZCBjb250cm9scy4KK2Zsb2F0
IGh5YnJpZERpc3RhbmNlRnVuY3Rpb24oY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29u
c3QgSW50UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBTdWJ0YXJnZXRHZW9tZXRyeSYgc3VidGFyZ2V0
KQoreworICAgIEludFJlY3QgcmVjdCA9IHN1YnRhcmdldC5ib3VuZGluZ0JveCgpOworCisgICAg
Ly8gQ29udmVydCBmcm9tIGZyYW1lIGNvb3JkaW5hdGVzIHRvIHdpbmRvdyBjb29yZGluYXRlcy4K
KyAgICByZWN0ID0gc3VidGFyZ2V0Lm5vZGUoKS0+ZG9jdW1lbnQoKS0+dmlldygpLT5jb250ZW50
c1RvV2luZG93KHJlY3QpOworICAgCisgICAgZmxvYXQgdG91Y2hXaWR0aCA9IHRvdWNoQXJlYS53
aWR0aCgpOworICAgIGZsb2F0IHRvdWNoSGVpZ2h0ID0gdG91Y2hBcmVhLmhlaWdodCgpOworICAg
IGZsb2F0IGRpc3RhbmNlU2NhbGUgPSAgdG91Y2hXaWR0aCAqIHRvdWNoV2lkdGggKyB0b3VjaEhl
aWdodCAqIHRvdWNoSGVpZ2h0OworICAgIGZsb2F0IGRpc3RhbmNlVG9DZW50ZXJTY29yZSA9IHJl
Y3QuZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KHRvdWNoSG90c3BvdCkgLyBk
aXN0YW5jZVNjYWxlOworCisgICAgZmxvYXQgdGFyZ2V0QXJlYSA9IHJlY3Quc2l6ZSgpLmFyZWEo
KTsKKyAgICByZWN0LmludGVyc2VjdCh0b3VjaEFyZWEpOworICAgIGZsb2F0IGludGVyc2VjdEFy
ZWEgPSByZWN0LnNpemUoKS5hcmVhKCk7CisgICAgZmxvYXQgaW50ZXJzZWN0aW9uU2NvcmUgPSAx
IC0gaW50ZXJzZWN0QXJlYSAvIHRhcmdldEFyZWE7CisKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9u
U2NvcmUgPCBkaXN0YW5jZVRvQ2VudGVyU2NvcmUgPyBpbnRlcnNlY3Rpb25TY29yZSA6IGRpc3Rh
bmNlVG9DZW50ZXJTY29yZTsKK30KKwogRmxvYXRQb2ludCBjb250ZW50c1RvV2luZG93KEZyYW1l
VmlldyAqdmlldywgRmxvYXRQb2ludCBwdCkKIHsKICAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGlu
dD4ocHQueCgpICsgMC41Zik7CkBAIC0zMjAsNiArMzUxLDcgQEAgYm9vbCBmaW5kTm9kZVdpdGhM
b3dlc3REaXN0YW5jZU1ldHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQmIHRhcmdldFBv
aW50LAogICAgIFN1YnRhcmdldEdlb21ldHJ5TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdWJ0
YXJnZXRzLmJlZ2luKCk7CiAgICAgY29uc3QgU3VidGFyZ2V0R2VvbWV0cnlMaXN0Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBzdWJ0YXJnZXRzLmVuZCgpOwogICAgIEludFBvaW50IGFkanVzdGVkUG9p
bnQ7CisKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIE5vZGUqIG5vZGUg
PSBpdC0+bm9kZSgpOwogICAgICAgICBmbG9hdCBkaXN0YW5jZU1ldHJpYyA9IGRpc3RhbmNlRnVu
Y3Rpb24odG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsICppdCk7CkBAIC0zMzAsMTIgKzM2MiwyNyBA
QCBib29sIGZpbmROb2RlV2l0aExvd2VzdERpc3RhbmNlTWV0cmljKE5vZGUqJiB0YXJnZXROb2Rl
LCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsCiAgICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IG5v
ZGU7CiAgICAgICAgICAgICAgICAgYmVzdERpc3RhbmNlTWV0cmljID0gZGlzdGFuY2VNZXRyaWM7
CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZGlzdGFuY2VNZXRyaWMgPT0gYmVz
dERpc3RhbmNlTWV0cmljKSB7Ci0gICAgICAgICAgICAvLyBUcnkgdG8gYWx3YXlzIHJldHVybiB0
aGUgaW5uZXItbW9zdCBlbGVtZW50LgotICAgICAgICAgICAgaWYgKG5vZGUtPmlzRGVzY2VuZGFu
dE9mKHRhcmdldE5vZGUpICYmIHNuYXBUbygqaXQsIHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCBh
ZGp1c3RlZFBvaW50KSkgewotICAgICAgICAgICAgICAgIHRhcmdldFBvaW50ID0gYWRqdXN0ZWRQ
b2ludDsKLSAgICAgICAgICAgICAgICB0YXJnZXROb2RlID0gbm9kZTsKLSAgICAgICAgICAgICAg
ICB0YXJnZXRBcmVhID0gaXQtPmJvdW5kaW5nQm94KCk7CisgICAgICAgIH0gZWxzZSBpZiAoZGlz
dGFuY2VNZXRyaWMgLSBiZXN0RGlzdGFuY2VNZXRyaWMgPCB6ZXJvVG9sZXJhbmNlKSB7CisgICAg
ICAgICAgICBpZiAoc25hcFRvKCppdCwgdG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsIGFkanVzdGVk
UG9pbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzRGVzY2VuZGFudE9mKHRhcmdl
dE5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byBhbHdheXMgcmV0dXJuIHRo
ZSBpbm5lci1tb3N0IGVsZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIHRhcmdldFBvaW50ID0g
YWRqdXN0ZWRQb2ludDsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IG5vZGU7Cisg
ICAgICAgICAgICAgICAgICAgIHRhcmdldEFyZWEgPSBpdC0+Ym91bmRpbmdCb3goKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBNaW5pbWl6ZSBhZGp1
c3RtZW50IGRpc3RhbmNlLgorICAgICAgICAgICAgICAgICAgICBmbG9hdCBkeCA9IHRhcmdldFBv
aW50LngoKSAtIHRvdWNoSG90c3BvdC54KCk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGR5
ID0gdGFyZ2V0UG9pbnQueSgpIC0gdG91Y2hIb3RzcG90LnkoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgYmVzdERpc3RhbmNlID0gZHggKiBkeCArIGR5ICogZHk7CisgICAgICAgICAgICAg
ICAgICAgIGR4ID0gYWRqdXN0ZWRQb2ludC54KCkgLSB0b3VjaEhvdHNwb3QueCgpOworICAgICAg
ICAgICAgICAgICAgICBkeSA9IGFkanVzdGVkUG9pbnQueSgpIC0gdG91Y2hIb3RzcG90LnkoKTsK
KyAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGlzdGFuY2UgPSBkeCAqIGR4ICsgZHkgKiBkeTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgYmVzdERpc3RhbmNlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0YXJnZXRQb2ludCA9IGFkanVzdGVkUG9pbnQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXROb2RlID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRhcmdldEFyZWEgPSBpdC0+Ym91bmRpbmdCb3goKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAg
LTM1Miw3ICszOTksNyBAQCBib29sIGZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKE5vZGUqJiB0
YXJnZXROb2RlLCBJbnRQb2ludCAmdGFyZ2V0UG9pbnQsIGNvbnN0CiAgICAgSW50UmVjdCB0YXJn
ZXRBcmVhOwogICAgIFRvdWNoQWRqdXN0bWVudDo6U3VidGFyZ2V0R2VvbWV0cnlMaXN0IHN1YnRh
cmdldHM7CiAgICAgVG91Y2hBZGp1c3RtZW50Ojpjb21waWxlU3VidGFyZ2V0TGlzdChub2RlTGlz
dCwgc3VidGFyZ2V0cywgVG91Y2hBZGp1c3RtZW50Ojpub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUp
OwotICAgIHJldHVybiBUb3VjaEFkanVzdG1lbnQ6OmZpbmROb2RlV2l0aExvd2VzdERpc3RhbmNl
TWV0cmljKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0YXJnZXRBcmVhLCB0b3VjaEhvdHNwb3Qs
IHRvdWNoQXJlYSwgc3VidGFyZ2V0cywgVG91Y2hBZGp1c3RtZW50OjpkaXN0YW5jZVNxdWFyZWRU
b1RhcmdldENlbnRlckxpbmUpOworICAgIHJldHVybiBUb3VjaEFkanVzdG1lbnQ6OmZpbmROb2Rl
V2l0aExvd2VzdERpc3RhbmNlTWV0cmljKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0YXJnZXRB
cmVhLCB0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgc3VidGFyZ2V0cywgVG91Y2hBZGp1c3RtZW50
OjpoeWJyaWREaXN0YW5jZUZ1bmN0aW9uKTsKIH0KIAogYm9vbCBmaW5kQmVzdFpvb21hYmxlQXJl
YShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UmVjdCYgdGFyZ2V0QXJlYSwgY29uc3QgSW50UG9pbnQm
IHRvdWNoSG90c3BvdCwgY29uc3QgSW50UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBOb2RlTGlzdCYg
bm9kZUxpc3QpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggZGMyMmJiMzZmZWIwMDkxMmNiZmJiNmVmM2VjM2E3YzBmYWIzOTE4
ZS4uNjFmMWVkZWQ3NTIxOWE3NDk0MjRjYThjYjNlOWNlOGI1NDcxNTAyMSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE4IEBACisyMDEyLTA3LTI1ICBLZXZpbiBFbGxpcyAgPGtldmVyc0BjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgSW1wcm92ZSB0b3VjaCBhZGp1c3RtZW50IGZvciB0YXJnZXR0aW5nIHNtYWxs
IGNvbnRyb2xzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTIyOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGEgdGVzdCBmb3IgY2FzZXMgdGhhdCB3ZXJlIHByb2JsZW1hdGljIGZvciB0aGUgdG91
Y2ggYWRqdXN0bWVudCBhbGdvcml0aG0uICBFYWNoIGV4YW1wbGUKKyAgICAgICAgaW4gdGhlIHRl
c3QgaW52b2x2ZXMgYSBzbWFsbCBjb250cm9sIGltbWVkaWF0ZWx5IGFkamFjZW50IHRvIGEgbGFy
Z2VyIGNvbnRyb2wuICBXaGVuIHRoZSB0b3VjaAorICAgICAgICBhcmVhIGlzIHNpZ25pZmljYW50
bHkgbGFyZ2VyIHRoYW4gdGhlIHNtYWxsIGNvbnRyb2wsIGl0IHdhcyBwb3NzaWJsZSBmb3IgdGhl
IHRvdWNoIGVsZW1lbnQgdG8KKyAgICAgICAgY29tcGxldGVseSBvdmVybGFwIHRoZSBjb250cm9s
IHlldCBzZWxlY3QgYW4gYWRqYWNlbnQgZWxlbWVudCB3aXRoIGEgcGFydGlhbCBvdmVybGFwLiAK
KworICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9zbWFsbC10YXJnZXQtdGVzdC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9zbWFsbC10YXJnZXQtdGVzdC5o
dG1sOiBBZGRlZC4KKwogMjAxMi0wNy0yNCAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhA
d2Via2l0Lm9yZz4KIAogICAgICAgICBpbmxpbmUtdGFibGUgd3JhcHBlciBzaG91bGQgYmUgZ2Vu
ZXJhdGVkIGZvciBkaXNwbGF5OiBpbmxpbmUgZWxlbWVudCBvbmx5CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90b3VjaGFkanVzdG1lbnQvc21hbGwtdGFyZ2V0LXRlc3QtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3NtYWxsLXRhcmdldC10ZXN0LWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hNDg5MjlmM2VlY2Y3ODM2YzgzZTFmNzI0MWQ5NWNjNjM5ZDY0ZmJiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3NtYWxsLXRhcmdl
dC10ZXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ0IEBACisgIAorIAorIAorVGVzdHMgaWYg
c21hbGwgY2xpY2thYmxlIHRhcmdldHMgYWRqYWNlbnQgdG8gbGFyZ2VyIGNsaWNrYWJsZSBjb250
cm9scyBhcmUgcHJvcGVybHkgdGFyZ2V0dGVkIHdpdGggdG91Y2ggYWRqdXN0bWVudC4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMuCitQ
QVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiY2hlY2siCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAi
dGFzayIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJpdGVtLWxhYmVsIgorUEFTUyBhZGp1c3Rl
ZE5vZGUuaWQgaXMgInJlbW92ZS1idXR0b24iCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiY29t
Ym8tbGFiZWwiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiZHJvcC1kb3duLXNlbGVjdG9yIgor
VGVzdGluZyBpbmRpcmVjdCBoaXRzLgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgImNoZWNrIgor
UEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgImNoZWNrIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMg
ImNoZWNrIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgImNoZWNrIgorUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgImNoZWNrIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgImNoZWNrIgorUEFTUyBh
ZGp1c3RlZE5vZGUuaWQgaXMgImNoZWNrIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgImNoZWNr
IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgInJlbW92ZS1idXR0b24iCitQQVNTIGFkanVzdGVk
Tm9kZS5pZCBpcyAicmVtb3ZlLWJ1dHRvbiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJyZW1v
dmUtYnV0dG9uIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgInJlbW92ZS1idXR0b24iCitQQVNT
IGFkanVzdGVkTm9kZS5pZCBpcyAicmVtb3ZlLWJ1dHRvbiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlk
IGlzICJyZW1vdmUtYnV0dG9uIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgInJlbW92ZS1idXR0
b24iCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAicmVtb3ZlLWJ1dHRvbiIKK1BBU1MgYWRqdXN0
ZWROb2RlLmlkIGlzICJkcm9wLWRvd24tc2VsZWN0b3IiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBp
cyAiZHJvcC1kb3duLXNlbGVjdG9yIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgImRyb3AtZG93
bi1zZWxlY3RvciIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJkcm9wLWRvd24tc2VsZWN0b3Ii
CitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiZHJvcC1kb3duLXNlbGVjdG9yIgorUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgImRyb3AtZG93bi1zZWxlY3RvciIKK1BBU1MgYWRqdXN0ZWROb2RlLmlk
IGlzICJkcm9wLWRvd24tc2VsZWN0b3IiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiZHJvcC1k
b3duLXNlbGVjdG9yIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9zbWFsbC10
YXJnZXQtdGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3NtYWxsLXRhcmdl
dC10ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE4ZTJmY2U5YjIwMjhiZGY3MDgzZDY0ZTgwYzg3NGRj
MmRjZWI5YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9z
bWFsbC10YXJnZXQtdGVzdC5odG1sCkBAIC0wLDAgKzEsMjE0IEBACis8aHRtbD4KKzxoZWFkPgor
PHN0eWxlPgorICBib2R5IHsKKyAgICAtd2Via2l0LW1hcmdpbi1zdGFydDogMjBweDsKKyAgICBt
YXJnaW4tdG9wOiAyMHB4OworICB9CisKKyAgLmNvbnRyb2wtcGFpciB7CisgICAgbWFyZ2luLWJv
dHRvbTogMzBweDsKKyAgfQorCisgICNjaGVjayB7CisgICAgYm9yZGVyOiAxcHggc29saWQgYmxh
Y2s7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIHBhZGRpbmc6IDVweDsKKyAgICB2
ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworICB9CisKKyAgI3JlbW92ZS1idXR0b24geworICAgIGJv
cmRlcjogbm9uZTsKKyAgICBiYWNrZ3JvdW5kOiAjOTk5OworICAgIGRpc3BsYXk6IGlubGluZS1i
bG9jazsKKyAgICBwYWRkaW5nOiA1cHg7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAg
fQorCisgICNjb21iby1idXR0b24geworICAgIGJvcmRlcjogMXB4IHNvbGlkICM3Nzc7CisgICAg
cGFkZGluZzogNXB4OworICAgIG1hcmdpbi10b3A6IDIwcHg7CisgIH0KKworICAjY29tYm8tbGFi
ZWwgeworICAgIGJvcmRlcjogMXB4IHNvbGlkICM3Nzc7CisgICAgaGVpZ2h0OiAxZW07CisgICAg
d2lkdGg6IDRlbTsKKyAgfQorCisgICNjb21iby1idXR0b24sCisgICNjb21iby1sYWJlbCwKKyAg
I2Ryb3AtZG93bi1zZWxlY3RvciB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIHZl
cnRpY2FsLWFsaWduOiBtaWRkbGU7CisgIH0KKworICAjZHJvcC1kb3duLXNlbGVjdG9yIHsKKyAg
ICAtd2Via2l0LWJveC1zaXppbmc7IGNvbnRlbnQtYm94OworICAgIHdpZHRoOiAwOworICAgIGhl
aWdodDogMDsKKyAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJv
cmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci10b3A6IDEwcHgg
c29saWQgIzc3NzsKKyAgfQorPC9zdHlsZT4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgaWQ9Im15
Ym9keSIgb25sb2FkPSJydW5UZXN0cygpIj4KKworPGRpdiBjbGFzcz0iY29udHJvbC1wYWlyIj4K
KyAgPCEtLSBTbWFsbCBjaGVja2JveCB0byB0aGUgbGVmdCBvZiBhbm90aGVyIGNvbnRyb2wgLS0+
CisgIDxkaXYgaWQ9ImNoZWNrIiBvbmNsaWNrPSJvbkNsaWNrKCk7Ij48L2Rpdj4KKyAgPGlucHV0
IGlkPSJ0YXNrIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iVGFzayAxIi8+Cis8L2Rpdj4KKzxkaXYgY2xh
c3M9ImNvbnRyb2wtcGFpciI+CisgIDwhLS0gU21hbGwgcmVtb3ZlIGJ1dHRvbiB0byB0aGUgcmln
aHQgb2YgYW5vdGhlciBjb250cm9sIC0tPgorICA8aW5wdXQgaWQgPSAiaXRlbS1sYWJlbCIgdHlw
ZT0idGV4dCIgdmFsdWUgPSAiT3B0aW9uIDEiLz4KKyAgPGRpdiBpZCA9ICJyZW1vdmUtYnV0dG9u
IiBvbmNsaWNrPSJvbkNsaWNrKCk7Ii8+Cis8L2Rpdj4KKzxkaXY+CisgIDxkaXYgaWQ9ImNvbWJv
LWJ1dHRvbiI+CisgICAgPCEtLSBDb21iby1idXR0b24gY29udHJvbHMgLS0+CisgICAgPGRpdiBp
ZCA9ICJjb21iby1sYWJlbCIgb25jbGljaz0iZnVuY3Rpb24oKSB7fTsiPjwvZGl2PgorICAgIDxk
aXYgaWQgPSAiZHJvcC1kb3duLXNlbGVjdG9yIiBvbmNsaWNrPSJvbkNsaWNrKCk7Ii8+CisgIDwv
ZGl2PgorPC9kaXY+CisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29s
ZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIHRvdWNoUmFkaXVzID0gMjA7CisgICAgdmFy
IHRvdWNoT2Zmc2V0ID0gODsKKworICAgIHZhciBlbGVtZW50OworICAgIHZhciBhZGp1c3RlZE5v
ZGU7CisKKyAgICBmdW5jdGlvbiBvbkNsaWNrKCkKKyAgICB7CisgICAgfQorCisgICAgZnVuY3Rp
b24gZmluZEFic29sdXRlUG9zaXRpb24obm9kZSkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBu
ZXcgT2JqZWN0KCk7CisgICAgICAgIHBvcy5sZWZ0ID0gMDsgcG9zLnRvcCA9IDA7CisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zmc2V0TGVmdDsKKyAgICAgICAg
ICAgIHBvcy50b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAgICAgIH0gd2hpbGUgKG5vZGUgPSBu
b2RlLm9mZnNldFBhcmVudCk7CisgICAgICAgIHJldHVybiBwb3M7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gdGVzdERpcmVjdFRvdWNoKGlkKQorICAgIHsKKyAgICAgICAgdGVzdFRvdWNoKGlkLCAn
Y2VudGVyJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdEluZGlyZWN0VG91Y2goaWQpCisg
ICAgeworICAgICAgICB0ZXN0VG91Y2goaWQsICdsZWZ0Jyk7CisgICAgICAgIHRlc3RUb3VjaChp
ZCwgJ3JpZ2h0Jyk7CisgICAgICAgIHRlc3RUb3VjaChpZCwgJ3RvcC1sZWZ0Jyk7CisgICAgICAg
IHRlc3RUb3VjaChpZCwgJ3RvcC1yaWdodCcpOworICAgICAgICB0ZXN0VG91Y2goaWQsICdib3R0
b20tbGVmdCcpOworICAgICAgICB0ZXN0VG91Y2goaWQsICdib3R0b20tcmlnaHQnKTsKKyAgICAg
ICAgdGVzdFRvdWNoKGlkLCAndG9wJyk7CisgICAgICAgIHRlc3RUb3VjaChpZCwgJ2JvdHRvbScp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RUb3VjaChpZCwgcmVsYXRpdmVQb3NpdGlvbikK
KyAgICB7CisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cisg
ICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAgICAg
dmFyIHggPSBwb3MubGVmdDsgCisgICAgICAgIHZhciB5ID0gcG9zLnRvcDsKKyAgICAgICAgLy8g
U2V0IGNlbnRlciBwb2ludCBmb3IgdG91Y2guCisgICAgICAgIHN3aXRjaCAocmVsYXRpdmVQb3Np
dGlvbikgeworICAgICAgICBjYXNlICdjZW50ZXInOgorICAgICAgICAgIHggKz0gZWxlbWVudC5j
bGllbnRXaWR0aCAvIDI7CisgICAgICAgICAgeSArPSBlbGVtZW50LmNsaWVudEhlaWdodCAvIDI7
CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2xlZnQnOgorICAgICAgICAgIHggLT0g
dG91Y2hPZmZzZXQ7CisgICAgICAgICAgeSArPSBlbGVtZW50LmNsaWVudEhlaWdodCAvIDI7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3JpZ2h0JzoKKyAgICAgICAgICAgeCArPSBl
bGVtZW50LmNsaWVudFdpZHRoICsgdG91Y2hPZmZzZXQ7CisgICAgICAgICAgIHkgKz0gIGVsZW1l
bnQuY2xpZW50SGVpZ2h0IC8gMjsKKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3Rv
cC1sZWZ0JzoKKyAgICAgICAgICB4IC09IHRvdWNoT2Zmc2V0OworICAgICAgICAgIHkgLT0gdG91
Y2hPZmZzZXQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3RvcC1yaWdodCc6Cisg
ICAgICAgICAgIHggKz0gZWxlbWVudC5jbGllbnRXaWR0aCArIHRvdWNoT2Zmc2V0OworICAgICAg
ICAgICB5IC09IHRvdWNoT2Zmc2V0OworICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
Ym90dG9tLWxlZnQnOgorICAgICAgICAgIHggLT0gdG91Y2hPZmZzZXQ7CisgICAgICAgICAgeSAr
PSBlbGVtZW50LmNsaWVudEhlaWdodCArIHRvdWNoT2Zmc2V0OworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICdib3R0b20tcmlnaHQnOgorICAgICAgICAgICB4ICs9IGVsZW1lbnQuY2xp
ZW50V2lkdGggKyB0b3VjaE9mZnNldDsKKyAgICAgICAgICAgeSArPSBlbGVtZW50LmNsaWVudEhl
aWdodCArIHRvdWNoT2Zmc2V0OworICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndG9w
JzoKKyAgICAgICAgICAgeCArPSBlbGVtZW50LmNsaWVudFdpZHRoIC8gMjsKKyAgICAgICAgICAg
eSAtPSB0b3VjaE9mZnNldDsKKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2JvdHRv
bSc6CisgICAgICAgICAgIHggKz0gZWxlbWVudC5jbGllbnRXaWR0aCAvIDI7CisgICAgICAgICAg
IHkgKz0gZWxlbWVudC5jbGllbnRIZWlnaHQgKyB0b3VjaE9mZnNldDsKKyAgICAgICAgfQorICAg
ICAgICAvLyBBZGp1c3QgZnJvbSB0b3VjaCBjZW50ZXIgdG8gdG9wLWxlZnQgY29ybmVyLgorICAg
ICAgICB4IC09IHRvdWNoUmFkaXVzOworICAgICAgICB5IC09IHRvdWNoUmFkaXVzOworCisgICAg
ICAgIHZhciB3aWR0aCA9IDIgKiB0b3VjaFJhZGl1czsKKyAgICAgICAgdmFyIGhlaWdodCA9IDIg
KiB0b3VjaFJhZGl1czsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hO
b2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRvY3Vt
ZW50KTsKKyAgICAgICAgd2hpbGUgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSAhPSAxICkgLy8gTm90
IGFuIGVsZW1lbnQuCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFy
ZW50Tm9kZTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQn
LCBpZCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoZXMoKQorICAgIHsK
KyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMuJyk7CisKKyAgICAgICAg
dGVzdERpcmVjdFRvdWNoKCdjaGVjaycpOworICAgICAgICB0ZXN0RGlyZWN0VG91Y2goJ3Rhc2sn
KTsKKyAgICAgICAgdGVzdERpcmVjdFRvdWNoKCdpdGVtLWxhYmVsJyk7CisgICAgICAgIHRlc3RE
aXJlY3RUb3VjaCgncmVtb3ZlLWJ1dHRvbicpOworICAgICAgICB0ZXN0RGlyZWN0VG91Y2goJ2Nv
bWJvLWxhYmVsJyk7CisgICAgICAgIHRlc3REaXJlY3RUb3VjaCgnZHJvcC1kb3duLXNlbGVjdG9y
Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdEluZGlyZWN0VG91Y2hlcygpCisgICAgewor
ICAgICAgICBkZWJ1ZygnVGVzdGluZyBpbmRpcmVjdCBoaXRzLicpOworCisgICAgICAgIHRlc3RJ
bmRpcmVjdFRvdWNoKCdjaGVjaycpOworICAgICAgICB0ZXN0SW5kaXJlY3RUb3VjaCgncmVtb3Zl
LWJ1dHRvbicpOworICAgICAgICB0ZXN0SW5kaXJlY3RUb3VjaCgnZHJvcC1kb3duLXNlbGVjdG9y
Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5pbnRlcm5hbHMgJiYgaW50ZXJuYWxzLnRvdWNo
Tm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSkgeworICAgICAgICAgICAgZGVzY3JpcHRp
b24oJ1Rlc3RzIGlmIHNtYWxsIGNsaWNrYWJsZSB0YXJnZXRzIGFkamFjZW50IHRvIGxhcmdlciBj
bGlja2FibGUgY29udHJvbHMgYXJlIHByb3Blcmx5IHRhcmdldHRlZCB3aXRoIHRvdWNoIGFkanVz
dG1lbnQuJyk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgdGVzdERpcmVjdFRv
dWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3RJbmRpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAg
IGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>