<?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>65220</bug_id>
          
          <creation_ts>2011-07-26 16:46:11 -0700</creation_ts>
          <short_desc>[Chromium] WebViewImpl doesn&apos;t proper deactivate focus</short_desc>
          <delta_ts>2011-10-07 00:42:22 -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>WebKit Misc.</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="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>fishd</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>442620</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-07-26 16:46:11 -0700</bug_when>
    <thetext>Original report: http://code.google.com/p/chromium/issues/detail?id=64846

The problem is in WebViewImpl::setFocus().  We call setActive(true) when we set focus, but don&apos;t call setActive(false) when we unset it.

There&apos;s a very old (pre-release) comment indicating that this behavior is to avoid sending spurious focus/blur events, but all tests still appear to be passing, so I don&apos;t think this is an issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442622</commentid>
    <comment_count>1</comment_count>
      <attachid>102073</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-07-26 16:49:41 -0700</bug_when>
    <thetext>Created attachment 102073
patch + unit test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442624</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-26 16:52:25 -0700</bug_when>
    <thetext>Attachment 102073 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/chromium/tests/WebViewTest.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/chromium/tests/WebViewTest.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/chromium/tests/WebViewTest.cpp:44:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 3 in 5 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>442980</commentid>
    <comment_count>3</comment_count>
      <attachid>102153</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-07-27 09:49:29 -0700</bug_when>
    <thetext>Created attachment 102153
fix header ordering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443538</commentid>
    <comment_count>4</comment_count>
      <attachid>102153</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-07-28 10:16:43 -0700</bug_when>
    <thetext>Comment on attachment 102153
fix header ordering

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

&gt; Source/WebKit/chromium/tests/WebViewTest.cpp:72
&gt; +        webkit_support::RegisterMockedURL(WebURL(GURL(baseURL + fileName)), response, WebString::fromUTF8(filePath));

nit: you shouldn&apos;t need to manually specify the WebURL constructor.  there should be an implicit conversion constructor for WebURL that takes a GURL.

&gt; Source/WebKit/chromium/tests/WebViewTest.cpp:84
&gt; +        urlRequest.setURL(WebURL(GURL(baseURL + fileName)));

ditto

&gt; Source/WebKit/chromium/tests/WebViewTest.cpp:89
&gt; +    std::string baseURL;

nit: m_baseURL

&gt; Source/WebKit/chromium/tests/WebViewTest.cpp:108
&gt; +    WebFrameImpl* frame = static_cast&lt;WebFrameImpl*&gt;(webView-&gt;mainFrame());

it&apos;d be nice if this could be done using only WebKit APIs, which it almost can be:

  WebDocument doc = webView-&gt;mainFrame()-&gt;document();
  EXPECT_TRUE(doc.isHTMLDocument());

But, we don&apos;t have a WebHTMLDocument interface, and we don&apos;t have hasFocus().
We do have WebDocument::focusedNode() though.  Could that be used?

It just makes this test more fragile if it depends on WebCore and static casting
to WebKit API implementation types.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:-1297
&gt; -        // focus/blur events to be dispatched.

i seem to recall that there was some very tricky focus/blur logic required
to make popup lists work properly.  we should make sure that those don&apos;t
regress.  i&apos;m pretty sure that we lack layout test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450097</commentid>
    <comment_count>5</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-08-11 15:39:32 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:-1297
&gt; &gt; -        // focus/blur events to be dispatched.
&gt; 
&gt; i seem to recall that there was some very tricky focus/blur logic required
&gt; to make popup lists work properly.  we should make sure that those don&apos;t
&gt; regress.  i&apos;m pretty sure that we lack layout test coverage.

I tried the test case linked in http://code.google.com/p/chromium/issues/detail?id=23499 and the events were identical before and after.  Is there anything else I should try?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450119</commentid>
    <comment_count>6</comment_count>
      <attachid>103694</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-08-11 16:07:12 -0700</bug_when>
    <thetext>Created attachment 103694
fix style issues

Since focusedNode() means something completely different, we really need to test some variant of an HTMLDocument.  I don&apos;t think it makes sense to expose a new class just to test this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470470</commentid>
    <comment_count>7</comment_count>
      <attachid>103694</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-09-20 16:57:25 -0700</bug_when>
    <thetext>Comment on attachment 103694
fix style issues

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

&gt; Source/WebKit/chromium/tests/WebViewTest.cpp:50
&gt; +class WebViewTest : public testing::Test {

this looks like it is largely duplicating code from WebFrameTest.cpp.  it
seems like it would be better to refactor so you can share code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471139</commentid>
    <comment_count>8</comment_count>
      <attachid>108229</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-09-21 14:02:41 -0700</bug_when>
    <thetext>Created attachment 108229
Refactor helpers into a separate file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479818</commentid>
    <comment_count>9</comment_count>
      <attachid>108229</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-06 23:24:28 -0700</bug_when>
    <thetext>Comment on attachment 108229
Refactor helpers into a separate file

R=me

sorry for the delayed review, and thank you for refactoring the test code!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479850</commentid>
    <comment_count>10</comment_count>
      <attachid>108229</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 00:42:18 -0700</bug_when>
    <thetext>Comment on attachment 108229
Refactor helpers into a separate file

Clearing flags on attachment: 108229

Committed r96912: &lt;http://trac.webkit.org/changeset/96912&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479851</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 00:42:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102073</attachid>
            <date>2011-07-26 16:49:41 -0700</date>
            <delta_ts>2011-07-27 09:49:29 -0700</delta_ts>
            <desc>patch + unit test</desc>
            <filename>focus.txt</filename>
            <type>text/plain</type>
            <size>6900</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJWaWV3VGVzdC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRf
c3VwcG9ydC5oPgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50
LmgiCisjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2lu
Y2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5j
bHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCisjaW5j
bHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCituYW1lc3BhY2UgeworCitjbGFzcyBXZWJWaWV3VGVzdCA6IHB1YmxpYyB0
ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJWaWV3VGVzdCgpCisgICAgICAgIDogYmFz
ZVVSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS8iKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlVucmVnaXN0
ZXJBbGxNb2NrZWRVUkxzKCk7CisgICAgfQorCisgICAgdm9pZCByZWdpc3Rlck1vY2tlZFVSTExv
YWQoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKQorICAgIHsKKyAgICAgICAgV2ViVVJMUmVz
cG9uc2UgcmVzcG9uc2U7CisgICAgICAgIHJlc3BvbnNlLmluaXRpYWxpemUoKTsKKyAgICAgICAg
cmVzcG9uc2Uuc2V0TUlNRVR5cGUoInRleHQvaHRtbCIpOworCisgICAgICAgIHN0ZDo6c3RyaW5n
IGZpbGVQYXRoID0gd2Via2l0X3N1cHBvcnQ6OkdldFdlYktpdFJvb3REaXIoKS51dGY4KCk7Cisg
ICAgICAgIGZpbGVQYXRoICs9ICIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhLyI7
CisgICAgICAgIGZpbGVQYXRoICs9IGZpbGVOYW1lOworCisgICAgICAgIHdlYmtpdF9zdXBwb3J0
OjpSZWdpc3Rlck1vY2tlZFVSTChXZWJVUkwoR1VSTChiYXNlVVJMICsgZmlsZU5hbWUpKSwgcmVz
cG9uc2UsIFdlYlN0cmluZzo6ZnJvbVVURjgoZmlsZVBhdGgpKTsKKyAgICB9CisKKyAgICB2b2lk
IHNlcnZlUmVxdWVzdHMoKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5
bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRGcmFtZShX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSkKKyAgICB7CisgICAg
ICAgIFdlYlVSTFJlcXVlc3QgdXJsUmVxdWVzdDsKKyAgICAgICAgdXJsUmVxdWVzdC5pbml0aWFs
aXplKCk7CisgICAgICAgIHVybFJlcXVlc3Quc2V0VVJMKFdlYlVSTChHVVJMKGJhc2VVUkwgKyBm
aWxlTmFtZSkpKTsKKyAgICAgICAgZnJhbWUtPmxvYWRSZXF1ZXN0KHVybFJlcXVlc3QpOworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIHN0ZDo6c3RyaW5nIGJhc2VVUkw7Cit9OworCitjbGFzcyBU
ZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGllbnQgeworfTsKKworVEVTVF9G
KFdlYlZpZXdUZXN0LCBGb2N1c0lzSW5hY3RpdmUpCit7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxM
b2FkKCJ2aXNpYmxlX2lmcmFtZS5odG1sIik7CisKKyAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxp
emUgdGhlIFdlYlZpZXcuCisgICAgVGVzdFdlYkZyYW1lQ2xpZW50IHdlYkZyYW1lQ2xpZW50Owor
ICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCk7CisgICAgd2ViVmlldy0+
aW5pdGlhbGl6ZU1haW5GcmFtZSgmd2ViRnJhbWVDbGllbnQpOworCisgICAgbG9hZEZyYW1lKHdl
YlZpZXctPm1haW5GcmFtZSgpLCAidmlzaWJsZV9pZnJhbWUuaHRtbCIpOworICAgIHNlcnZlUmVx
dWVzdHMoKTsKKworICAgIHdlYlZpZXctPnNldEZvY3VzKHRydWUpOworICAgIFdlYkZyYW1lSW1w
bCogZnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPih3ZWJWaWV3LT5tYWluRnJhbWUo
KSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPmZyYW1lKCktPmRvY3VtZW50KCktPmlzSFRNTERv
Y3VtZW50KCkpOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MRG9jdW1lbnQqPihmcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7
CisgICAgRVhQRUNUX1RSVUUoZG9jdW1lbnQtPmhhc0ZvY3VzKCkpOworICAgIHdlYlZpZXctPnNl
dEZvY3VzKGZhbHNlKTsKKyAgICBFWFBFQ1RfRkFMU0UoZG9jdW1lbnQtPmhhc0ZvY3VzKCkpOwor
ICAgIHdlYlZpZXctPnNldEZvY3VzKHRydWUpOworICAgIEVYUEVDVF9UUlVFKGRvY3VtZW50LT5o
YXNGb2N1cygpKTsKKworICAgIHdlYlZpZXctPmNsb3NlKCk7Cit9CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDkxNzczKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNiArNjUxLDcgQEAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6
ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQ
YWdlU2VyaWFsaXplclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICd0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDkxNzcz
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjkyLDEwICsxMjkyLDggQEAKIHZvaWQgV2ViVmlld0ltcGw6OnNldEZvY3Vz
KGJvb2wgZW5hYmxlKQogewogICAgIG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3Vz
ZWQoZW5hYmxlKTsKKyAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUoZW5h
YmxlKTsKICAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBj
YWxsIHNldEFjdGl2ZSgpIHdoZW4gZGlzYWJsZWQgYXMgdGhpcyBjYXVzZSBleHRyYQotICAgICAg
ICAvLyBmb2N1cy9ibHVyIGV2ZW50cyB0byBiZSBkaXNwYXRjaGVkLgotICAgICAgICBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIFJlZlB0cjxGcmFt
ZT4gZm9jdXNlZEZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1l
KCk7CiAgICAgICAgIGlmIChmb2N1c2VkRnJhbWUpIHsKICAgICAgICAgICAgIE5vZGUqIGZvY3Vz
ZWROb2RlID0gZm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOwpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxNzk4KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAx
MS0wNy0yNiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFs
d2F5cyBjYWxsIHNldEFjdGl2ZSgpIGluIFdlYlZpZXdJbXBsOjpzZXRGb2N1cygpLAorICAgICAg
ICBub3QganVzdCB3aGVuIGVuYWJsaW5nIGZvY3VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUyMjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogV2ViS2l0Lmd5
cGk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNldEZvY3VzKToKKyAgICAgICAgKiB0ZXN0cy9XZWJWaWV3VGVzdC5jcHA6IEFk
ZGVkLgorCiAyMDExLTA3LTI2ICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZG93bmxvYWQ9J2ZpbGVuYW1lJyBh
dHRyaWJ1dGUgaW4gYW5jaG9ycy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQko
cmV2aXNpb24gOTE3NzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAgICAgICAgICAgICAndGVzdHMvVHJlZVRl
c3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1dlYlVSTFJlcXVlc3RUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVz
dHMvV2ViVmlld1Rlc3QuY3BwJywKICAgICAgICAgXSwKIAogICAgICAgICAnY29uZGl0aW9ucyc6
IFsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102153</attachid>
            <date>2011-07-27 09:49:29 -0700</date>
            <delta_ts>2011-08-11 16:07:12 -0700</delta_ts>
            <desc>fix header ordering</desc>
            <filename>focus2.txt</filename>
            <type>text/plain</type>
            <size>6900</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJWaWV3VGVzdC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYlZpZXcuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCisjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJXZWJGcmFt
ZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBs
LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgor
I2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCituYW1lc3BhY2UgeworCitjbGFzcyBXZWJWaWV3VGVzdCA6IHB1YmxpYyB0
ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJWaWV3VGVzdCgpCisgICAgICAgIDogYmFz
ZVVSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS8iKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlVucmVnaXN0
ZXJBbGxNb2NrZWRVUkxzKCk7CisgICAgfQorCisgICAgdm9pZCByZWdpc3Rlck1vY2tlZFVSTExv
YWQoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKQorICAgIHsKKyAgICAgICAgV2ViVVJMUmVz
cG9uc2UgcmVzcG9uc2U7CisgICAgICAgIHJlc3BvbnNlLmluaXRpYWxpemUoKTsKKyAgICAgICAg
cmVzcG9uc2Uuc2V0TUlNRVR5cGUoInRleHQvaHRtbCIpOworCisgICAgICAgIHN0ZDo6c3RyaW5n
IGZpbGVQYXRoID0gd2Via2l0X3N1cHBvcnQ6OkdldFdlYktpdFJvb3REaXIoKS51dGY4KCk7Cisg
ICAgICAgIGZpbGVQYXRoICs9ICIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhLyI7
CisgICAgICAgIGZpbGVQYXRoICs9IGZpbGVOYW1lOworCisgICAgICAgIHdlYmtpdF9zdXBwb3J0
OjpSZWdpc3Rlck1vY2tlZFVSTChXZWJVUkwoR1VSTChiYXNlVVJMICsgZmlsZU5hbWUpKSwgcmVz
cG9uc2UsIFdlYlN0cmluZzo6ZnJvbVVURjgoZmlsZVBhdGgpKTsKKyAgICB9CisKKyAgICB2b2lk
IHNlcnZlUmVxdWVzdHMoKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5
bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRGcmFtZShX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSkKKyAgICB7CisgICAg
ICAgIFdlYlVSTFJlcXVlc3QgdXJsUmVxdWVzdDsKKyAgICAgICAgdXJsUmVxdWVzdC5pbml0aWFs
aXplKCk7CisgICAgICAgIHVybFJlcXVlc3Quc2V0VVJMKFdlYlVSTChHVVJMKGJhc2VVUkwgKyBm
aWxlTmFtZSkpKTsKKyAgICAgICAgZnJhbWUtPmxvYWRSZXF1ZXN0KHVybFJlcXVlc3QpOworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIHN0ZDo6c3RyaW5nIGJhc2VVUkw7Cit9OworCitjbGFzcyBU
ZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGllbnQgeworfTsKKworVEVTVF9G
KFdlYlZpZXdUZXN0LCBGb2N1c0lzSW5hY3RpdmUpCit7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxM
b2FkKCJ2aXNpYmxlX2lmcmFtZS5odG1sIik7CisKKyAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxp
emUgdGhlIFdlYlZpZXcuCisgICAgVGVzdFdlYkZyYW1lQ2xpZW50IHdlYkZyYW1lQ2xpZW50Owor
ICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCk7CisgICAgd2ViVmlldy0+
aW5pdGlhbGl6ZU1haW5GcmFtZSgmd2ViRnJhbWVDbGllbnQpOworCisgICAgbG9hZEZyYW1lKHdl
YlZpZXctPm1haW5GcmFtZSgpLCAidmlzaWJsZV9pZnJhbWUuaHRtbCIpOworICAgIHNlcnZlUmVx
dWVzdHMoKTsKKworICAgIHdlYlZpZXctPnNldEZvY3VzKHRydWUpOworICAgIFdlYkZyYW1lSW1w
bCogZnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPih3ZWJWaWV3LT5tYWluRnJhbWUo
KSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPmZyYW1lKCktPmRvY3VtZW50KCktPmlzSFRNTERv
Y3VtZW50KCkpOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MRG9jdW1lbnQqPihmcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7
CisgICAgRVhQRUNUX1RSVUUoZG9jdW1lbnQtPmhhc0ZvY3VzKCkpOworICAgIHdlYlZpZXctPnNl
dEZvY3VzKGZhbHNlKTsKKyAgICBFWFBFQ1RfRkFMU0UoZG9jdW1lbnQtPmhhc0ZvY3VzKCkpOwor
ICAgIHdlYlZpZXctPnNldEZvY3VzKHRydWUpOworICAgIEVYUEVDVF9UUlVFKGRvY3VtZW50LT5o
YXNGb2N1cygpKTsKKworICAgIHdlYlZpZXctPmNsb3NlKCk7Cit9CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDkxNzczKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNiArNjUxLDcgQEAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6
ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQ
YWdlU2VyaWFsaXplclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICd0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDkxNzcz
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjkyLDEwICsxMjkyLDggQEAKIHZvaWQgV2ViVmlld0ltcGw6OnNldEZvY3Vz
KGJvb2wgZW5hYmxlKQogewogICAgIG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3Vz
ZWQoZW5hYmxlKTsKKyAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUoZW5h
YmxlKTsKICAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBj
YWxsIHNldEFjdGl2ZSgpIHdoZW4gZGlzYWJsZWQgYXMgdGhpcyBjYXVzZSBleHRyYQotICAgICAg
ICAvLyBmb2N1cy9ibHVyIGV2ZW50cyB0byBiZSBkaXNwYXRjaGVkLgotICAgICAgICBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIFJlZlB0cjxGcmFt
ZT4gZm9jdXNlZEZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1l
KCk7CiAgICAgICAgIGlmIChmb2N1c2VkRnJhbWUpIHsKICAgICAgICAgICAgIE5vZGUqIGZvY3Vz
ZWROb2RlID0gZm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOwpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxNzk4KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAx
MS0wNy0yNiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFs
d2F5cyBjYWxsIHNldEFjdGl2ZSgpIGluIFdlYlZpZXdJbXBsOjpzZXRGb2N1cygpLAorICAgICAg
ICBub3QganVzdCB3aGVuIGVuYWJsaW5nIGZvY3VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUyMjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogV2ViS2l0Lmd5
cGk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNldEZvY3VzKToKKyAgICAgICAgKiB0ZXN0cy9XZWJWaWV3VGVzdC5jcHA6IEFk
ZGVkLgorCiAyMDExLTA3LTI2ICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZG93bmxvYWQ9J2ZpbGVuYW1lJyBh
dHRyaWJ1dGUgaW4gYW5jaG9ycy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQko
cmV2aXNpb24gOTE3NzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAgICAgICAgICAgICAndGVzdHMvVHJlZVRl
c3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1dlYlVSTFJlcXVlc3RUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVz
dHMvV2ViVmlld1Rlc3QuY3BwJywKICAgICAgICAgXSwKIAogICAgICAgICAnY29uZGl0aW9ucyc6
IFsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103694</attachid>
            <date>2011-08-11 16:07:12 -0700</date>
            <delta_ts>2011-09-21 14:02:41 -0700</delta_ts>
            <desc>fix style issues</desc>
            <filename>focus2.txt</filename>
            <type>text/plain</type>
            <size>6894</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJWaWV3VGVzdC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYlZpZXcuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCisjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJXZWJGcmFt
ZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBs
LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgor
I2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCituYW1lc3BhY2UgeworCitjbGFzcyBXZWJWaWV3VGVzdCA6IHB1YmxpYyB0
ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJWaWV3VGVzdCgpCisgICAgICAgIDogbV9i
YXNlVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tLyIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6VW5yZWdp
c3RlckFsbE1vY2tlZFVSTHMoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyTW9ja2VkVVJM
TG9hZChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpCisgICAgeworICAgICAgICBXZWJVUkxS
ZXNwb25zZSByZXNwb25zZTsKKyAgICAgICAgcmVzcG9uc2UuaW5pdGlhbGl6ZSgpOworICAgICAg
ICByZXNwb25zZS5zZXRNSU1FVHlwZSgidGV4dC9odG1sIik7CisKKyAgICAgICAgc3RkOjpzdHJp
bmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigpLnV0ZjgoKTsK
KyAgICAgICAgZmlsZVBhdGggKz0gIi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
IjsKKyAgICAgICAgZmlsZVBhdGggKz0gZmlsZU5hbWU7CisKKyAgICAgICAgd2Via2l0X3N1cHBv
cnQ6OlJlZ2lzdGVyTW9ja2VkVVJMKEdVUkwobV9iYXNlVVJMICsgZmlsZU5hbWUpLCByZXNwb25z
ZSwgV2ViU3RyaW5nOjpmcm9tVVRGOChmaWxlUGF0aCkpOworICAgIH0KKworICAgIHZvaWQgc2Vy
dmVSZXF1ZXN0cygpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hy
b25vdXNNb2NrZWRSZXF1ZXN0cygpOworICAgIH0KKworICAgIHZvaWQgbG9hZEZyYW1lKFdlYkZy
YW1lKiBmcmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKQorICAgIHsKKyAgICAgICAg
V2ViVVJMUmVxdWVzdCB1cmxSZXF1ZXN0OworICAgICAgICB1cmxSZXF1ZXN0LmluaXRpYWxpemUo
KTsKKyAgICAgICAgdXJsUmVxdWVzdC5zZXRVUkwoR1VSTChtX2Jhc2VVUkwgKyBmaWxlTmFtZSkp
OworICAgICAgICBmcmFtZS0+bG9hZFJlcXVlc3QodXJsUmVxdWVzdCk7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgc3RkOjpzdHJpbmcgbV9iYXNlVVJMOworfTsKKworY2xhc3MgVGVzdFdlYkZy
YW1lQ2xpZW50IDogcHVibGljIFdlYkZyYW1lQ2xpZW50IHsKK307CisKK1RFU1RfRihXZWJWaWV3
VGVzdCwgRm9jdXNJc0luYWN0aXZlKQoreworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCgidmlz
aWJsZV9pZnJhbWUuaHRtbCIpOworCisgICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBX
ZWJWaWV3LgorICAgIFRlc3RXZWJGcmFtZUNsaWVudCB3ZWJGcmFtZUNsaWVudDsKKyAgICBXZWJW
aWV3KiB3ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKDApOworICAgIHdlYlZpZXctPmluaXRpYWxp
emVNYWluRnJhbWUoJndlYkZyYW1lQ2xpZW50KTsKKworICAgIGxvYWRGcmFtZSh3ZWJWaWV3LT5t
YWluRnJhbWUoKSwgInZpc2libGVfaWZyYW1lLmh0bWwiKTsKKyAgICBzZXJ2ZVJlcXVlc3RzKCk7
CisKKyAgICB3ZWJWaWV3LT5zZXRGb2N1cyh0cnVlKTsKKyAgICBXZWJGcmFtZUltcGwqIGZyYW1l
ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4od2ViVmlldy0+bWFpbkZyYW1lKCkpOworICAg
IEVYUEVDVF9UUlVFKGZyYW1lLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgp
KTsKKworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MRG9jdW1lbnQqPihmcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAg
RVhQRUNUX1RSVUUoZG9jdW1lbnQtPmhhc0ZvY3VzKCkpOworICAgIHdlYlZpZXctPnNldEZvY3Vz
KGZhbHNlKTsKKyAgICBFWFBFQ1RfRkFMU0UoZG9jdW1lbnQtPmhhc0ZvY3VzKCkpOworICAgIHdl
YlZpZXctPnNldEZvY3VzKHRydWUpOworICAgIEVYUEVDVF9UUlVFKGRvY3VtZW50LT5oYXNGb2N1
cygpKTsKKworICAgIHdlYlZpZXctPmNsb3NlKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDkxNzczKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNiArNjUxLDcgQEAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0
LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2Vy
aWFsaXplclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Rz
L1dlYlZpZXdUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0
cy9Qb3B1cE1lbnVUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDkxNzczKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjkyLDEwICsxMjkyLDggQEAKIHZvaWQgV2ViVmlld0ltcGw6OnNldEZvY3VzKGJvb2wg
ZW5hYmxlKQogewogICAgIG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWQoZW5h
YmxlKTsKKyAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUoZW5hYmxlKTsK
ICAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBjYWxsIHNl
dEFjdGl2ZSgpIHdoZW4gZGlzYWJsZWQgYXMgdGhpcyBjYXVzZSBleHRyYQotICAgICAgICAvLyBm
b2N1cy9ibHVyIGV2ZW50cyB0byBiZSBkaXNwYXRjaGVkLgotICAgICAgICBtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gZm9j
dXNlZEZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCk7CiAg
ICAgICAgIGlmIChmb2N1c2VkRnJhbWUpIHsKICAgICAgICAgICAgIE5vZGUqIGZvY3VzZWROb2Rl
ID0gZm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxNzk4KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wNy0y
NiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFsd2F5cyBj
YWxsIHNldEFjdGl2ZSgpIGluIFdlYlZpZXdJbXBsOjpzZXRGb2N1cygpLAorICAgICAgICBub3Qg
anVzdCB3aGVuIGVuYWJsaW5nIGZvY3VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjUyMjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogV2ViS2l0Lmd5cGk6Cisg
ICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnNldEZvY3VzKToKKyAgICAgICAgKiB0ZXN0cy9XZWJWaWV3VGVzdC5jcHA6IEFkZGVkLgor
CiAyMDExLTA3LTI2ICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZG93bmxvYWQ9J2ZpbGVuYW1lJyBhdHRyaWJ1
dGUgaW4gYW5jaG9ycy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkocmV2aXNp
b24gOTE3NzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAgICAgICAgICAgICAndGVzdHMvVHJlZVRlc3RIZWxw
ZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL1dlYlVSTFJlcXVlc3RUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvV2Vi
Vmlld1Rlc3QuY3BwJywKICAgICAgICAgXSwKIAogICAgICAgICAnY29uZGl0aW9ucyc6IFsK
</data>
<flag name="review"
          id="99381"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108229</attachid>
            <date>2011-09-21 14:02:41 -0700</date>
            <delta_ts>2011-10-07 00:42:18 -0700</delta_ts>
            <desc>Refactor helpers into a separate file</desc>
            <filename>focus3.txt</filename>
            <type>text/plain</type>
            <size>22420</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRnJhbWVUZXN0SGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9GcmFtZVRlc3RIZWxw
ZXJzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRnJh
bWVUZXN0SGVscGVycy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYW1lVGVzdEhlbHBlcnMuaCIKKworI2luY2x1ZGUgIldl
YkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJTZXR0
aW5ncy5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVSTFJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNp
bmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCisjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy9ndXJsLmg+
CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CituYW1lc3BhY2UgRnJhbWVUZXN0SGVscGVycyB7CisKK3ZvaWQgcmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlLCBjb25zdCBzdGQ6OnN0cmluZyYg
ZmlsZU5hbWUpCit7CisgICAgV2ViVVJMUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgcmVzcG9uc2Uu
aW5pdGlhbGl6ZSgpOworICAgIHJlc3BvbnNlLnNldE1JTUVUeXBlKCJ0ZXh0L2h0bWwiKTsKKwor
ICAgIHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gd2Via2l0X3N1cHBvcnQ6OkdldFdlYktpdFJvb3RE
aXIoKS51dGY4KCk7CisgICAgZmlsZVBhdGggKz0gIi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvIjsKKyAgICBmaWxlUGF0aCArPSBmaWxlTmFtZTsKKworICAgIHdlYmtpdF9zdXBw
b3J0OjpSZWdpc3Rlck1vY2tlZFVSTChHVVJMKGJhc2UgKyBmaWxlTmFtZSksIHJlc3BvbnNlLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KGZpbGVQYXRoKSk7Cit9CisKK3ZvaWQgbG9hZEZyYW1lKFdlYkZy
YW1lKiBmcmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHVybCkKK3sKKyAgICBXZWJVUkxSZXF1ZXN0
IHVybFJlcXVlc3Q7CisgICAgdXJsUmVxdWVzdC5pbml0aWFsaXplKCk7CisgICAgdXJsUmVxdWVz
dC5zZXRVUkwoR1VSTCh1cmwpKTsKKyAgICBmcmFtZS0+bG9hZFJlcXVlc3QodXJsUmVxdWVzdCk7
Cit9CisKK2NsYXNzIFRlc3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFtZUNsaWVudCB7
Cit9OworCitzdGF0aWMgV2ViRnJhbWVDbGllbnQqIGRlZmF1bHRXZWJGcmFtZUNsaWVudCgpCit7
CisgICAgc3RhdGljIFRlc3RXZWJGcmFtZUNsaWVudCBjbGllbnQ7CisgICAgcmV0dXJuICZjbGll
bnQ7Cit9CisKK2NsYXNzIFRlc3RXZWJWaWV3Q2xpZW50IDogcHVibGljIFdlYlZpZXdDbGllbnQg
eworfTsKKworc3RhdGljIFdlYlZpZXdDbGllbnQqIGRlZmF1bHRXZWJWaWV3Q2xpZW50KCkKK3sK
KyAgICBzdGF0aWMgVGVzdFdlYlZpZXdDbGllbnQgY2xpZW50OworICAgIHJldHVybiAmY2xpZW50
OworfQorCitXZWJWaWV3KiBjcmVhdGVXZWJWaWV3QW5kTG9hZChjb25zdCBzdGQ6OnN0cmluZyYg
dXJsLCBib29sIGVuYWJsZUphdmFzY3JpcHQsIFdlYkZyYW1lQ2xpZW50KiB3ZWJGcmFtZUNsaWVu
dCkKK3sKKyAgICBpZiAoIXdlYkZyYW1lQ2xpZW50KQorICAgICAgICB3ZWJGcmFtZUNsaWVudCA9
IGRlZmF1bHRXZWJGcmFtZUNsaWVudCgpOworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBXZWJWaWV3
OjpjcmVhdGUoZGVmYXVsdFdlYlZpZXdDbGllbnQoKSk7CisgICAgd2ViVmlldy0+c2V0dGluZ3Mo
KS0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoZW5hYmxlSmF2YXNjcmlwdCk7CisgICAgd2ViVmlldy0+
aW5pdGlhbGl6ZU1haW5GcmFtZSh3ZWJGcmFtZUNsaWVudCk7CisKKyAgICBsb2FkRnJhbWUod2Vi
Vmlldy0+bWFpbkZyYW1lKCksIHVybCk7CisgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNo
cm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKworICAgIHJldHVybiB3ZWJWaWV3OworfQorCit9IC8v
IG5hbWVzcGFjZSBGcmFtZVRlc3RIZWxwZXJzCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJWaWV3VGVzdC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViVmlldy5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZVRlc3RI
ZWxwZXJzLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiV2ViRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0
X3N1cHBvcnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKwor
Y2xhc3MgV2ViVmlld1Rlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAg
V2ViVmlld1Rlc3QoKQorICAgICAgICA6IG1fYmFzZVVSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS8i
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAg
ICAgICAgd2Via2l0X3N1cHBvcnQ6OlVucmVnaXN0ZXJBbGxNb2NrZWRVUkxzKCk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgc3RkOjpzdHJpbmcgbV9iYXNlVVJMOworfTsKKworVEVTVF9GKFdl
YlZpZXdUZXN0LCBGb2N1c0lzSW5hY3RpdmUpCit7CisgICAgRnJhbWVUZXN0SGVscGVyczo6cmVn
aXN0ZXJNb2NrZWRVUkxMb2FkKG1fYmFzZVVSTCwgInZpc2libGVfaWZyYW1lLmh0bWwiKTsKKyAg
ICBXZWJWaWV3KiB3ZWJWaWV3ID0gRnJhbWVUZXN0SGVscGVyczo6Y3JlYXRlV2ViVmlld0FuZExv
YWQobV9iYXNlVVJMICsgInZpc2libGVfaWZyYW1lLmh0bWwiKTsKKworICAgIHdlYlZpZXctPnNl
dEZvY3VzKHRydWUpOworICAgIFdlYkZyYW1lSW1wbCogZnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJG
cmFtZUltcGwqPih3ZWJWaWV3LT5tYWluRnJhbWUoKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUt
PmZyYW1lKCktPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpOworCisgICAgV2ViQ29yZTo6
SFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxEb2N1bWVu
dCo+KGZyYW1lLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICBFWFBFQ1RfVFJVRShkb2N1bWVu
dC0+aGFzRm9jdXMoKSk7CisgICAgd2ViVmlldy0+c2V0Rm9jdXMoZmFsc2UpOworICAgIEVYUEVD
VF9GQUxTRShkb2N1bWVudC0+aGFzRm9jdXMoKSk7CisgICAgd2ViVmlldy0+c2V0Rm9jdXModHJ1
ZSk7CisgICAgRVhQRUNUX1RSVUUoZG9jdW1lbnQtPmhhc0ZvY3VzKCkpOworCisgICAgd2ViVmll
dy0+Y2xvc2UoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9G
cmFtZVRlc3RIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9GcmFtZVRlc3RIZWxwZXJzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgRnJhbWVUZXN0SGVscGVyc19oCisjZGVmaW5lIEZyYW1lVGVzdEhlbHBlcnNf
aAorCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
RnJhbWU7CitjbGFzcyBXZWJGcmFtZUNsaWVudDsKK2NsYXNzIFdlYlZpZXc7CisKK25hbWVzcGFj
ZSBGcmFtZVRlc3RIZWxwZXJzIHsKKwordm9pZCByZWdpc3Rlck1vY2tlZFVSTExvYWQoY29uc3Qg
c3RkOjpzdHJpbmcmIGJhc2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSk7CisKK3ZvaWQg
bG9hZEZyYW1lKFdlYkZyYW1lKiwgY29uc3Qgc3RkOjpzdHJpbmcmIHVybCk7CisKK1dlYlZpZXcq
IGNyZWF0ZVdlYlZpZXdBbmRMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwsIGJvb2wgZW5hYmxl
SmF2YXNjcmlwdCA9IGZhbHNlLCBXZWJGcmFtZUNsaWVudCogPSAwKTsKKworfSAvLyBuYW1lc3Bh
Y2UgRnJhbWVUZXN0SGVscGVycworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBG
cmFtZVRlc3RIZWxwZXJzX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
RnJhbWVUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1dlYkZyYW1lVGVzdC5jcHAJKHJldmlzaW9uIDk1NjY1KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgIkZyYW1lVGVzdEhlbHBlcnMu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJXZWJGb3JtRWxlbWVudC5oIgpAQCAtMzksMTQgKzQwLDggQEAKICNpbmNsdWRl
ICJXZWJTZWFyY2hhYmxlRm9ybURhdGEuaCIKICNpbmNsdWRlICJXZWJTZWN1cml0eVBvbGljeS5o
IgogI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCi0jaW5j
bHVkZSAiV2ViVVJMLmgiCi0jaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgotI2luY2x1ZGUgIldl
YlVSTFJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgogI2luY2x1ZGUgIldl
YlZpZXdJbXBsLmgiCiAjaW5jbHVkZSAidjguaCIKLSNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL2d1
cmwuaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0
L3dlYmtpdF9zdXBwb3J0Lmg+CiAKQEAgLTU3LDggKzUyLDggQEAKIGNsYXNzIFdlYkZyYW1lVGVz
dCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKIHB1YmxpYzoKICAgICBXZWJGcmFtZVRlc3QoKQot
ICAgICAgICA6IGJhc2VVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vIiksCi0gICAgICAgICAgY2hy
b21lVVJMKCJjaHJvbWU6Ly8iKQorICAgICAgICA6IG1fYmFzZVVSTCgiaHR0cDovL3d3dy50ZXN0
LmNvbS8iKSwKKyAgICAgICAgICBtX2Nocm9tZVVSTCgiY2hyb21lOi8vIikKICAgICB7CiAgICAg
fQogCkBAIC02OSw2MSArNjQsMTkgQEAKIAogICAgIHZvaWQgcmVnaXN0ZXJNb2NrZWRIdHRwVVJM
TG9hZChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpCiAgICAgewotICAgICAgICByZWdpc3Rl
ck1vY2tlZFVSTExvYWQoYmFzZVVSTCwgZmlsZU5hbWUpOworICAgICAgICBGcmFtZVRlc3RIZWxw
ZXJzOjpyZWdpc3Rlck1vY2tlZFVSTExvYWQobV9iYXNlVVJMLCBmaWxlTmFtZSk7CiAgICAgfQog
CiAgICAgdm9pZCByZWdpc3Rlck1vY2tlZENocm9tZVVSTExvYWQoY29uc3Qgc3RkOjpzdHJpbmcm
IGZpbGVOYW1lKQogICAgIHsKLSAgICAgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKGNocm9tZVVS
TCwgZmlsZU5hbWUpOworICAgICAgICBGcmFtZVRlc3RIZWxwZXJzOjpyZWdpc3Rlck1vY2tlZFVS
TExvYWQobV9jaHJvbWVVUkwsIGZpbGVOYW1lKTsKICAgICB9CiAKLSAgICB2b2lkIHNlcnZlUmVx
dWVzdHMoKQotICAgIHsKLSAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3Vz
TW9ja2VkUmVxdWVzdHMoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGxvYWRIdHRwRnJhbWUoV2ViRnJh
bWUqIGZyYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpCi0gICAgewotICAgICAgICBs
b2FkRnJhbWUoZnJhbWUsIGJhc2VVUkwsIGZpbGVOYW1lKTsKLSAgICB9Ci0KLSAgICB2b2lkIGxv
YWRDaHJvbWVGcmFtZShXZWJGcmFtZSogZnJhbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFt
ZSkKLSAgICB7Ci0gICAgICAgIGxvYWRGcmFtZShmcmFtZSwgY2hyb21lVVJMLCBmaWxlTmFtZSk7
Ci0gICAgfQotCi0gICAgdm9pZCByZWdpc3Rlck1vY2tlZFVSTExvYWQoY29uc3Qgc3RkOjpzdHJp
bmcmIGJhc2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSkKLSAgICB7Ci0gICAgICAgIFdl
YlVSTFJlc3BvbnNlIHJlc3BvbnNlOwotICAgICAgICByZXNwb25zZS5pbml0aWFsaXplKCk7Ci0g
ICAgICAgIHJlc3BvbnNlLnNldE1JTUVUeXBlKCJ0ZXh0L2h0bWwiKTsKLQotICAgICAgICBzdGQ6
OnN0cmluZyBmaWxlUGF0aCA9IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyKCkudXRm
OCgpOwotICAgICAgICBmaWxlUGF0aCArPSAiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS8iOwotICAgICAgICBmaWxlUGF0aCArPSBmaWxlTmFtZTsKLQotICAgICAgICB3ZWJraXRf
c3VwcG9ydDo6UmVnaXN0ZXJNb2NrZWRVUkwoV2ViVVJMKEdVUkwoYmFzZSArIGZpbGVOYW1lKSks
IHJlc3BvbnNlLCBXZWJTdHJpbmc6OmZyb21VVEY4KGZpbGVQYXRoKSk7Ci0gICAgfQotCi0gICAg
dm9pZCBsb2FkRnJhbWUoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgYmFzZSwg
Y29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKQotICAgIHsKLSAgICAgICAgV2ViVVJMUmVxdWVz
dCB1cmxSZXF1ZXN0OwotICAgICAgICB1cmxSZXF1ZXN0LmluaXRpYWxpemUoKTsKLSAgICAgICAg
dXJsUmVxdWVzdC5zZXRVUkwoV2ViVVJMKEdVUkwoYmFzZSArIGZpbGVOYW1lKSkpOwotICAgICAg
ICBmcmFtZS0+bG9hZFJlcXVlc3QodXJsUmVxdWVzdCk7Ci0gICAgfQotCiBwcm90ZWN0ZWQ6Ci0g
ICAgc3RkOjpzdHJpbmcgYmFzZVVSTDsKLSAgICBzdGQ6OnN0cmluZyBjaHJvbWVVUkw7CisgICAg
c3RkOjpzdHJpbmcgbV9iYXNlVVJMOworICAgIHN0ZDo6c3RyaW5nIG1fY2hyb21lVVJMOwogfTsK
IAotY2xhc3MgVGVzdFdlYkZyYW1lQ2xpZW50IDogcHVibGljIFdlYkZyYW1lQ2xpZW50IHsKLX07
Ci0KLWNsYXNzIFRlc3RXZWJWaWV3Q2xpZW50IDogcHVibGljIFdlYlZpZXdDbGllbnQgewotfTsK
LQogVEVTVF9GKFdlYkZyYW1lVGVzdCwgQ29udGVudFRleHQpCiB7CiAgICAgcmVnaXN0ZXJNb2Nr
ZWRIdHRwVVJMTG9hZCgiaWZyYW1lc190ZXN0Lmh0bWwiKTsKQEAgLTEzMSwxNCArODQsOCBAQAog
ICAgIHJlZ2lzdGVyTW9ja2VkSHR0cFVSTExvYWQoImludmlzaWJsZV9pZnJhbWUuaHRtbCIpOwog
ICAgIHJlZ2lzdGVyTW9ja2VkSHR0cFVSTExvYWQoInplcm9fc2l6ZWRfaWZyYW1lLmh0bWwiKTsK
IAotICAgIC8vIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgV2ViVmlldy4KLSAgICBUZXN0V2Vi
RnJhbWVDbGllbnQgd2ViRnJhbWVDbGllbnQ7Ci0gICAgV2ViVmlldyogd2ViVmlldyA9IFdlYlZp
ZXc6OmNyZWF0ZSgwKTsKLSAgICB3ZWJWaWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKCZ3ZWJGcmFt
ZUNsaWVudCk7CisgICAgV2ViVmlldyogd2ViVmlldyA9IEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0
ZVdlYlZpZXdBbmRMb2FkKG1fYmFzZVVSTCArICJpZnJhbWVzX3Rlc3QuaHRtbCIpOwogCi0gICAg
bG9hZEh0dHBGcmFtZSh3ZWJWaWV3LT5tYWluRnJhbWUoKSwgImlmcmFtZXNfdGVzdC5odG1sIik7
Ci0gICAgc2VydmVSZXF1ZXN0cygpOwotCiAgICAgLy8gTm93IHJldHJpZXZlIHRoZSBmcmFtZXMg
dGV4dCBhbmQgdGVzdCBpdCBvbmx5IGluY2x1ZGVzIHZpc2libGUgZWxlbWVudHMuCiAgICAgc3Rk
OjpzdHJpbmcgY29udGVudCA9IHdlYlZpZXctPm1haW5GcmFtZSgpLT5jb250ZW50QXNUZXh0KDEw
MjQpLnV0ZjgoKTsKICAgICBFWFBFQ1RfTkUoc3RkOjpzdHJpbmc6Om5wb3MsIGNvbnRlbnQuZmlu
ZCgiIHZpc2libGUgcGFyYWdyYXBoIikpOwpAQCAtMTU3LDE1ICsxMDQsOCBAQAogICAgIHJlZ2lz
dGVyTW9ja2VkSHR0cFVSTExvYWQoImludmlzaWJsZV9pZnJhbWUuaHRtbCIpOwogICAgIHJlZ2lz
dGVyTW9ja2VkSHR0cFVSTExvYWQoInplcm9fc2l6ZWRfaWZyYW1lLmh0bWwiKTsKIAotICAgIC8v
IENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgV2ViVmlldy4KLSAgICBUZXN0V2ViRnJhbWVDbGll
bnQgd2ViRnJhbWVDbGllbnQ7Ci0gICAgV2ViVmlldyogd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0
ZSgwKTsKLSAgICB3ZWJWaWV3LT5zZXR0aW5ncygpLT5zZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVl
KTsKLSAgICB3ZWJWaWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKCZ3ZWJGcmFtZUNsaWVudCk7Cisg
ICAgV2ViVmlldyogd2ViVmlldyA9IEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdlYlZpZXdBbmRM
b2FkKG1fYmFzZVVSTCArICJpZnJhbWVzX3Rlc3QuaHRtbCIsIHRydWUpOwogCi0gICAgbG9hZEh0
dHBGcmFtZSh3ZWJWaWV3LT5tYWluRnJhbWUoKSwgImlmcmFtZXNfdGVzdC5odG1sIik7Ci0gICAg
c2VydmVSZXF1ZXN0cygpOwotCiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIEVYUEVD
VF9FUSh3ZWJWaWV3LT5tYWluRnJhbWUoKSwKICAgICAgICAgICAgICAgV2ViRnJhbWU6OmZyYW1l
Rm9yQ29udGV4dCgKQEAgLTE4MSwxMyArMTIxLDggQEAKIHsKICAgICByZWdpc3Rlck1vY2tlZEh0
dHBVUkxMb2FkKCJmb3JtLmh0bWwiKTsKIAotICAgIFRlc3RXZWJGcmFtZUNsaWVudCB3ZWJGcmFt
ZUNsaWVudDsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKDApOwotICAg
IHdlYlZpZXctPmluaXRpYWxpemVNYWluRnJhbWUoJndlYkZyYW1lQ2xpZW50KTsKKyAgICBXZWJW
aWV3KiB3ZWJWaWV3ID0gRnJhbWVUZXN0SGVscGVyczo6Y3JlYXRlV2ViVmlld0FuZExvYWQobV9i
YXNlVVJMICsgImZvcm0uaHRtbCIpOwogCi0gICAgbG9hZEh0dHBGcmFtZSh3ZWJWaWV3LT5tYWlu
RnJhbWUoKSwgImZvcm0uaHRtbCIpOwotICAgIHNlcnZlUmVxdWVzdHMoKTsKLQogICAgIFdlYlZl
Y3RvcjxXZWJGb3JtRWxlbWVudD4gZm9ybXM7CiAgICAgd2ViVmlldy0+bWFpbkZyYW1lKCktPmRv
Y3VtZW50KCkuZm9ybXMoZm9ybXMpOwogICAgIHdlYlZpZXctPmNsb3NlKCk7CkBAIC0yMDIsMTgg
KzEzNywxMSBAQAogewogICAgIHJlZ2lzdGVyTW9ja2VkQ2hyb21lVVJMTG9hZCgiaGlzdG9yeS5o
dG1sIik7CiAKLSAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFdlYlZpZXcuCi0gICAg
VGVzdFdlYkZyYW1lQ2xpZW50IHdlYkZyYW1lQ2xpZW50OwotICAgIFdlYlZpZXcqIHdlYlZpZXcg
PSBXZWJWaWV3OjpjcmVhdGUoMCk7Ci0gICAgd2ViVmlldy0+c2V0dGluZ3MoKS0+c2V0SmF2YVNj
cmlwdEVuYWJsZWQodHJ1ZSk7Ci0gICAgd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5GcmFtZSgmd2Vi
RnJhbWVDbGllbnQpOworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBGcmFtZVRlc3RIZWxwZXJzOjpj
cmVhdGVXZWJWaWV3QW5kTG9hZChtX2Nocm9tZVVSTCArICJoaXN0b3J5Lmh0bWwiLCB0cnVlKTsK
IAotICAgIGxvYWRDaHJvbWVGcmFtZSh3ZWJWaWV3LT5tYWluRnJhbWUoKSwgImhpc3RvcnkuaHRt
bCIpOwotICAgIHNlcnZlUmVxdWVzdHMoKTsKLQogICAgIC8vIFRyeSB0byBydW4gSlMgYWdhaW5z
dCB0aGUgY2hyb21lLXN0eWxlIFVSTC4KICAgICBXZWJTZWN1cml0eVBvbGljeTo6cmVnaXN0ZXJV
UkxTY2hlbWVBc05vdEFsbG93aW5nSmF2YXNjcmlwdFVSTHMoImNocm9tZSIpOwotICAgIGxvYWRG
cmFtZSh3ZWJWaWV3LT5tYWluRnJhbWUoKSwgImphdmFzY3JpcHQ6IiwgImRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0Nsb2JiZXJlZCcpKSIpOworICAg
IEZyYW1lVGVzdEhlbHBlcnM6OmxvYWRGcmFtZSh3ZWJWaWV3LT5tYWluRnJhbWUoKSwgImphdmFz
Y3JpcHQ6ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgn
Q2xvYmJlcmVkJykpIik7CiAKICAgICAvLyBOb3cgcmV0cmlldmUgdGhlIGZyYW1lcyB0ZXh0IGFu
ZCBzZWUgaWYgaXQgd2FzIGNsb2JiZXJlZC4KICAgICBzdGQ6OnN0cmluZyBjb250ZW50ID0gd2Vi
Vmlldy0+bWFpbkZyYW1lKCktPmNvbnRlbnRBc1RleHQoMTAyNCkudXRmOCgpOwpAQCAtMjQ3LDE3
ICsxNzUsMTIgQEAKICAgICByZWdpc3Rlck1vY2tlZEh0dHBVUkxMb2FkKCJmb3JtLmh0bWwiKTsK
IAogICAgIFRlc3RSZWxvYWREb2VzbnRSZWRpcmVjdFdlYkZyYW1lQ2xpZW50IHdlYkZyYW1lQ2xp
ZW50OwotICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCk7Ci0gICAgd2Vi
Vmlldy0+aW5pdGlhbGl6ZU1haW5GcmFtZSgmd2ViRnJhbWVDbGllbnQpOworICAgIFdlYlZpZXcq
IHdlYlZpZXcgPSBGcmFtZVRlc3RIZWxwZXJzOjpjcmVhdGVXZWJWaWV3QW5kTG9hZChtX2Jhc2VV
UkwgKyAiZm9ybS5odG1sIiwgZmFsc2UsICZ3ZWJGcmFtZUNsaWVudCk7CiAKLSAgICBsb2FkSHR0
cEZyYW1lKHdlYlZpZXctPm1haW5GcmFtZSgpLCAiZm9ybS5odG1sIik7Ci0gICAgc2VydmVSZXF1
ZXN0cygpOwotICAgIC8vIEZyYW1lIGlzIGxvYWRlZC4KLQogICAgIHdlYlZpZXctPm1haW5GcmFt
ZSgpLT5yZWxvYWQodHJ1ZSk7CiAgICAgLy8gc3RhcnQgcmVsb2FkIGJlZm9yZSByZXF1ZXN0IGlz
IGRlbGl2ZXJlZC4KICAgICB3ZWJWaWV3LT5tYWluRnJhbWUoKS0+cmVsb2FkKHRydWUpOwotICAg
IHNlcnZlUmVxdWVzdHMoKTsKKyAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25vdXNN
b2NrZWRSZXF1ZXN0cygpOwogfQogCiBURVNUX0YoV2ViRnJhbWVUZXN0LCBDbGVhckZvY3VzZWRO
b2RlVGVzdCkKQEAgLTI2NSwxNiArMTg4LDggQEAKICAgICByZWdpc3Rlck1vY2tlZEh0dHBVUkxM
b2FkKCJpZnJhbWVfY2xlYXJfZm9jdXNlZF9ub2RlX3Rlc3QuaHRtbCIpOwogICAgIHJlZ2lzdGVy
TW9ja2VkSHR0cFVSTExvYWQoImF1dG9mb2N1c19pbnB1dF9maWVsZF9pZnJhbWUuaHRtbCIpOwog
Ci0gICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBXZWJWaWV3LgotICAgIFRlc3RXZWJG
cmFtZUNsaWVudCB3ZWJGcmFtZUNsaWVudDsKLSAgICBUZXN0V2ViVmlld0NsaWVudCB3ZWJ2aWV3
Q2xpZW50OwotICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCA9IHN0YXRpY19jYXN0PFdlYlZp
ZXdJbXBsKj4oV2ViVmlldzo6Y3JlYXRlKCZ3ZWJ2aWV3Q2xpZW50KSk7Ci0gICAgd2ViVmlld0lt
cGwtPnNldHRpbmdzKCktPnNldEphdmFTY3JpcHRFbmFibGVkKHRydWUpOwotICAgIHdlYlZpZXdJ
bXBsLT5pbml0aWFsaXplTWFpbkZyYW1lKCZ3ZWJGcmFtZUNsaWVudCk7CisgICAgV2ViVmlld0lt
cGwqIHdlYlZpZXdJbXBsID0gc3RhdGljX2Nhc3Q8V2ViVmlld0ltcGwqPihGcmFtZVRlc3RIZWxw
ZXJzOjpjcmVhdGVXZWJWaWV3QW5kTG9hZChtX2Jhc2VVUkwgKyAiaWZyYW1lX2NsZWFyX2ZvY3Vz
ZWRfbm9kZV90ZXN0Lmh0bWwiLCB0cnVlKSk7CiAKLSAgICBsb2FkSHR0cEZyYW1lKHdlYlZpZXdJ
bXBsLT5tYWluRnJhbWUoKSwgImlmcmFtZV9jbGVhcl9mb2N1c2VkX25vZGVfdGVzdC5odG1sIik7
Ci0gICAgc2VydmVSZXF1ZXN0cygpOwotCiAgICAgLy8gQ2xlYXIgdGhlIGZvY3VzZWQgbm9kZS4K
ICAgICB3ZWJWaWV3SW1wbC0+Y2xlYXJGb2N1c2VkTm9kZSgpOwogCkBAIC0zNTMsMTEgKzI2OCw3
IEBACiAKICAgICAvLyBMb2FkIGEgZnJhbWUgd2l0aCBhbiBpZnJhbWUsIG1ha2Ugc3VyZSB3ZSBn
ZXQgdGhlIHJpZ2h0IGNyZWF0ZSBub3RpZmljYXRpb25zLgogICAgIENvbnRleHRMaWZldGltZVRl
c3RXZWJGcmFtZUNsaWVudCB3ZWJGcmFtZUNsaWVudDsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0g
V2ViVmlldzo6Y3JlYXRlKDApOwotICAgIHdlYlZpZXctPnNldHRpbmdzKCktPnNldEphdmFTY3Jp
cHRFbmFibGVkKHRydWUpOwotICAgIHdlYlZpZXctPmluaXRpYWxpemVNYWluRnJhbWUoJndlYkZy
YW1lQ2xpZW50KTsKLSAgICBsb2FkSHR0cEZyYW1lKHdlYlZpZXctPm1haW5GcmFtZSgpLCAiY29u
dGV4dF9ub3RpZmljYXRpb25zX3Rlc3QuaHRtbCIpOwotICAgIHNlcnZlUmVxdWVzdHMoKTsKKyAg
ICBXZWJWaWV3KiB3ZWJWaWV3ID0gRnJhbWVUZXN0SGVscGVyczo6Y3JlYXRlV2ViVmlld0FuZExv
YWQobV9iYXNlVVJMICsgImNvbnRleHRfbm90aWZpY2F0aW9uc190ZXN0Lmh0bWwiLCB0cnVlLCAm
d2ViRnJhbWVDbGllbnQpOwogCiAgICAgV2ViRnJhbWUqIG1haW5GcmFtZSA9IHdlYlZpZXctPm1h
aW5GcmFtZSgpOwogICAgIFdlYkZyYW1lKiBjaGlsZEZyYW1lID0gbWFpbkZyYW1lLT5maXJzdENo
aWxkKCk7CkBAIC0zOTUsMTUgKzMwNiwxMSBAQAogICAgIHJlZ2lzdGVyTW9ja2VkSHR0cFVSTExv
YWQoImNvbnRleHRfbm90aWZpY2F0aW9uc190ZXN0X2ZyYW1lLmh0bWwiKTsKIAogICAgIENvbnRl
eHRMaWZldGltZVRlc3RXZWJGcmFtZUNsaWVudCB3ZWJGcmFtZUNsaWVudDsKLSAgICBXZWJWaWV3
KiB3ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKDApOwotICAgIHdlYlZpZXctPnNldHRpbmdzKCkt
PnNldEphdmFTY3JpcHRFbmFibGVkKHRydWUpOwotICAgIHdlYlZpZXctPmluaXRpYWxpemVNYWlu
RnJhbWUoJndlYkZyYW1lQ2xpZW50KTsKLSAgICBsb2FkSHR0cEZyYW1lKHdlYlZpZXctPm1haW5G
cmFtZSgpLCAiY29udGV4dF9ub3RpZmljYXRpb25zX3Rlc3QuaHRtbCIpOwotICAgIHNlcnZlUmVx
dWVzdHMoKTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gRnJhbWVUZXN0SGVscGVyczo6Y3JlYXRl
V2ViVmlld0FuZExvYWQobV9iYXNlVVJMICsgImNvbnRleHRfbm90aWZpY2F0aW9uc190ZXN0Lmh0
bWwiLCB0cnVlLCAmd2ViRnJhbWVDbGllbnQpOwogCiAgICAgLy8gUmVmcmVzaCwgd2Ugc2hvdWxk
IGdldCB0d28gcmVsZWFzZSBub3RpZmljYXRpb25zIGFuZCB0d28gbW9yZSBjcmVhdGUgbm90aWZp
Y2F0aW9ucy4KICAgICB3ZWJWaWV3LT5tYWluRnJhbWUoKS0+cmVsb2FkKGZhbHNlKTsKLSAgICBz
ZXJ2ZVJlcXVlc3RzKCk7CisgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9j
a2VkUmVxdWVzdHMoKTsKICAgICBBU1NFUlRfRVEoNHUsIHdlYkZyYW1lQ2xpZW50LmNyZWF0ZU5v
dGlmaWNhdGlvbnMuc2l6ZSgpKTsKICAgICBBU1NFUlRfRVEoMnUsIHdlYkZyYW1lQ2xpZW50LnJl
bGVhc2VOb3RpZmljYXRpb25zLnNpemUoKSk7CiAKQEAgLTQzOCwxMSArMzQ1LDcgQEAKICAgICBy
ZWdpc3Rlck1vY2tlZEh0dHBVUkxMb2FkKCJjb250ZXh0X25vdGlmaWNhdGlvbnNfdGVzdF9mcmFt
ZS5odG1sIik7CiAKICAgICBDb250ZXh0TGlmZXRpbWVUZXN0V2ViRnJhbWVDbGllbnQgd2ViRnJh
bWVDbGllbnQ7Ci0gICAgV2ViVmlldyogd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSgwKTsKLSAg
ICB3ZWJWaWV3LT5zZXR0aW5ncygpLT5zZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKLSAgICB3
ZWJWaWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKCZ3ZWJGcmFtZUNsaWVudCk7Ci0gICAgbG9hZEh0
dHBGcmFtZSh3ZWJWaWV3LT5tYWluRnJhbWUoKSwgImNvbnRleHRfbm90aWZpY2F0aW9uc190ZXN0
Lmh0bWwiKTsKLSAgICBzZXJ2ZVJlcXVlc3RzKCk7CisgICAgV2ViVmlldyogd2ViVmlldyA9IEZy
YW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdlYlZpZXdBbmRMb2FkKG1fYmFzZVVSTCArICJjb250ZXh0
X25vdGlmaWNhdGlvbnNfdGVzdC5odG1sIiwgdHJ1ZSwgJndlYkZyYW1lQ2xpZW50KTsKIAogICAg
IC8vIEFkZCBhbiBpc29sYXRlZCB3b3JsZC4KICAgICB3ZWJGcmFtZUNsaWVudC5yZXNldCgpOwpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gOTU2NjUpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTY3MCw2ICs2
NzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViRnJhbWVU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdl
TmV3U2VyaWFsaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAndGVzdHMvV2ViVmlld1Rlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzog
WwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2
aXNpb24gOTU2NjUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDYsMTAgKzEzMDYsOCBAQAogdm9pZCBXZWJWaWV3SW1w
bDo6c2V0Rm9jdXMoYm9vbCBlbmFibGUpCiB7CiAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+c2V0Rm9jdXNlZChlbmFibGUpOworICAgIG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNl
dEFjdGl2ZShlbmFibGUpOwogICAgIGlmIChlbmFibGUpIHsKLSAgICAgICAgLy8gTm90ZSB0aGF0
IHdlIGRvbid0IGNhbGwgc2V0QWN0aXZlKCkgd2hlbiBkaXNhYmxlZCBhcyB0aGlzIGNhdXNlIGV4
dHJhCi0gICAgICAgIC8vIGZvY3VzL2JsdXIgZXZlbnRzIHRvIGJlIGRpc3BhdGNoZWQuCi0gICAg
ICAgIG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAg
UmVmUHRyPEZyYW1lPiBmb2N1c2VkRnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkRnJhbWUoKTsKICAgICAgICAgaWYgKGZvY3VzZWRGcmFtZSkgewogICAgICAgICAgICAg
Tm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkRnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2Rl
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTU2NjgpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI1IEBACisyMDExLTA5LTIxICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgQWx3YXlzIGNhbGwgc2V0QWN0aXZlKCkgaW4gV2ViVmlld0ltcGw6OnNldEZvY3Vz
KCksCisgICAgICAgIG5vdCBqdXN0IHdoZW4gZW5hYmxpbmcgZm9jdXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTIyMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAg
KiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Rm9jdXMpOgorICAgICAgICAqIHRlc3RzL0ZyYW1lVGVz
dEhlbHBlcnMuY3BwOiBBZGRlZCwgcmVmYWN0b3JlZCBvdXQgb2YgV2ViRnJhbWVUZXN0LmNwcC4K
KyAgICAgICAgKFdlYktpdDo6RnJhbWVUZXN0SGVscGVyczo6cmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVUZXN0SGVscGVyczo6bG9hZEZyYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6RnJhbWVUZXN0SGVscGVyczo6ZGVmYXVsdFdlYkZyYW1lQ2xpZW50KToKKyAg
ICAgICAgKFdlYktpdDo6RnJhbWVUZXN0SGVscGVyczo6ZGVmYXVsdFdlYlZpZXdDbGllbnQpOgor
ICAgICAgICAoV2ViS2l0OjpGcmFtZVRlc3RIZWxwZXJzOjpjcmVhdGVXZWJWaWV3QW5kTG9hZCk6
CisgICAgICAgICogdGVzdHMvRnJhbWVUZXN0SGVscGVycy5oOiBBZGRlZCwgcmVmYWN0b3JlZCBv
dXQgb2YgV2ViRnJhbWVUZXN0LmNwcC4KKyAgICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3Bw
OgorICAgICAgICAqIHRlc3RzL1dlYlZpZXdUZXN0LmNwcDogQWRkZWQuCisKIDIwMTEtMDktMjEg
IFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KIAogICAgICAgICBFbnN1
cmUgVGVzdFdlYktpdEFQSSB3b3JrcyBvbiBtYWMsIHdpbiwgY2hyb21pdW0tbWFjIGFuZCBjaHJv
bWl1bS1saW51eApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCShyZXZpc2lvbiA5
NTY2NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDYgKzU3LDggQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0Zy
YW1lVGVzdEhlbHBlcnMuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRlc3RIZWxwZXJz
LmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLApAQCAtNzUsNiArNzcsNyBAQAogICAgICAgICAg
ICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJGcmFt
ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJVUkxSZXF1ZXN0VGVzdC5jcHAnLAor
ICAgICAgICAgICAgJ3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCcsCiAgICAgICAgIF0sCiAKICAgICAg
ICAgJ2NvbmRpdGlvbnMnOiBbCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>