<?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>138161</bug_id>
          
          <creation_ts>2014-10-28 17:16:03 -0700</creation_ts>
          <short_desc>webkitpy needs a results.html file to render the results.json file for human eyes.</short_desc>
          <delta_ts>2017-04-25 10:13:36 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Jake Nielsen">jake.nielsen.webkit</reporter>
          <assigned_to name="Jake Nielsen">jake.nielsen.webkit</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>glenn</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1044650</commentid>
    <comment_count>0</comment_count>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2014-10-28 17:16:03 -0700</bug_when>
    <thetext>The results.json file enumerates the test results of test-webkitpy, but it&apos;s not human readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044944</commentid>
    <comment_count>1</comment_count>
      <attachid>240646</attachid>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2014-10-29 18:34:43 -0700</bug_when>
    <thetext>Created attachment 240646
Adds results.html and results-stylesheet.css

We&apos;ll probably need to make sure people are happy with the look of results.html before CQ+ing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044988</commentid>
    <comment_count>2</comment_count>
      <attachid>240646</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-10-29 23:48:34 -0700</bug_when>
    <thetext>Comment on attachment 240646
Adds results.html and results-stylesheet.css

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

&gt; Tools/Scripts/webkitpy/resources/results.html:4
&gt; +&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js&quot;&gt;&lt;/script&gt;

I don&apos;t think that we should use 3rd party servers here. One of the reasons is that it would leak Apple internal URLs via Referer/Origin headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045187</commentid>
    <comment_count>3</comment_count>
      <attachid>240715</attachid>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2014-10-30 17:27:15 -0700</bug_when>
    <thetext>Created attachment 240715
Removes jquery</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045336</commentid>
    <comment_count>4</comment_count>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2014-10-31 11:50:54 -0700</bug_when>
    <thetext>I you folks know who would care about this change, please CC them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045393</commentid>
    <comment_count>5</comment_count>
      <attachid>240715</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-10-31 15:16:08 -0700</bug_when>
    <thetext>Comment on attachment 240715
Removes jquery

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

The approach of the patch seems reasonable. I have some questions on the implementation. Out of curiosity, did you make use of any documents when writing the patches for this bug?

&gt; Tools/Scripts/webkitpy/resources/results-stylesheet.css:3
&gt; +    font-size:14px;
&gt; +    font-family:verdana;

Nit: This is OK as-is. We seem to be alternating between having space character after the &apos;:&apos; or not throughout this file. We should pick one style and stick with it throughout this file for consistency.

&gt; Tools/Scripts/webkitpy/resources/results-stylesheet.css:74
&gt; +}

Please add a newline to the end of this file.

&gt; Tools/Scripts/webkitpy/resources/results.html:2
&gt; +&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;results-stylesheet.css&quot;&gt;

Nit: This is OK as-is. The HTML type attribute is unnecessary per &lt;https://html.spec.whatwg.org/#attr-link-type&gt;. And all modern web browsers support CSS.

&gt; Tools/Scripts/webkitpy/resources/results.html:8
&gt; +var g_state;

Nit: This variable is unused. I suggest we remove it.

&gt; Tools/Scripts/webkitpy/resources/results.html:23
&gt; +function popTableID(){
&gt; +    g_tableIDs++;
&gt; +    var poppedTableID = &quot;table&quot; + (g_tableIDs - 1);
&gt; +    return poppedTableID;
&gt; +}
&gt; +
&gt; +function popTestRowID(){
&gt; +    g_testRowIDs++;
&gt; +    var poppedTestRowIDs = &quot;testRow&quot; + (g_testRowIDs - 1);
&gt; +    return poppedTestRowIDs;
&gt; +}

I do not see the benefit of either of these functions. It is unnecessary to assign unique IDs to each &lt;table&gt;, &lt;thead&gt;, and &lt;tbody&gt; so as to implement the expand/collapse user interface because we can identify the element that was clicked by using the information provided in DOM Click event passed to the click handler of the element.

&gt; Tools/Scripts/webkitpy/resources/results.html:41
&gt; +function toggleAttribute(elementID, attributeName){
&gt; +    var element = document.getElementById(elementID);
&gt; +
&gt; +    if (!element.hasAttribute(attributeName))
&gt; +    {
&gt; +        element.setAttribute(attributeName,&quot;true&quot;);
&gt; +    }
&gt; +
&gt; +    if (element.getAttribute(attributeName) === &quot;true&quot;)
&gt; +    {
&gt; +        element.setAttribute(attributeName,&quot;false&quot;);
&gt; +    } else {
&gt; +        element.setAttribute(attributeName,&quot;true&quot;);
&gt; +    }
&gt; +
&gt; +    return element.getAttribute(attributeName) === &quot;true&quot;;
&gt; +}

From my understanding our use of this function is to ultimately show/hide content (such a test result) by causing the appropriate CSS attribute selector (e.g. tbody[expanded=&quot;false&quot;] tr.test-result td) to be applied to the element. This seems like an an indirect approach to show/hide content. It seems more straightforward to define a function that toggles applying a CSS class selector using the Element.classList API (*).

(*) Or modifying Element.className if we need to support viewing the test results page in a browser or WebKit nightly without Element.classList support (why would we have to?)

&gt; Tools/Scripts/webkitpy/resources/results.html:60
&gt; +    var resultingTableHTML = &quot;&quot;;
&gt; +    if (listOfErrorsOrFailures.length &gt; 0){
&gt; +        var currentTableID = popTableID();
&gt; +        resultingTableHTML = &quot;&lt;table class=&apos;non-passing-table&apos; id=\&quot;&quot; + currentTableID + &quot;\&quot; &quot; + g_ExpandedAttributeName + &quot;=\&quot;true\&quot;&gt;&quot;;
&gt; +        resultingTableHTML += &quot;&lt;thead onClick=\&quot;toggleAttribute(&apos;&quot; + currentTableID + &quot;&apos;, &apos;&quot; + g_ExpandedAttributeName + &quot;&apos;)\&quot;&gt; &lt;tr&gt; &lt;th&gt;&quot; + tableTitle + &quot;&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt;&quot;;
&gt; +        resultingTableHTML += &quot;&lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;strong&gt;&quot; + tableMessage + &quot;&lt;/strong&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&quot;;
&gt; +        var index;
&gt; +        for (index = 0; index &lt; listOfErrorsOrFailures.length; index++) {
&gt; +            var currentTestRowID = popTestRowID();
&gt; +            resultingTableHTML += &quot;&lt;tbody id=\&quot;&quot; + currentTestRowID + &quot;\&quot; &quot; + g_ExpandedAttributeName + &quot;=\&quot;false\&quot;&gt; &lt;tr class=&apos;test-name&apos; onClick=\&quot;toggleAttribute(&apos;&quot; + currentTestRowID + &quot;&apos;, &apos;&quot; + g_ExpandedAttributeName + &quot;&apos;)\&quot;&gt; &lt;td&gt;&quot; + listOfErrorsOrFailures[index].name + &quot;&lt;/td&gt; &lt;/tr&gt;&quot;;
&gt; +            resultingTableHTML += &quot;&lt;tr class=&apos;test-result&apos;&gt; &lt;td&gt; &lt;pre&gt;&quot; + listOfErrorsOrFailures[index].result + &quot;&lt;/pre&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&quot;;
&gt; +        }
&gt; +
&gt; +        resultingTableHTML += &quot;&lt;/table&gt;&quot;;
&gt; +    }
&gt; +
&gt; +    return resultingTableHTML;

Is there a better way to build up this markup? One idea is to using single-quoted literals instead of double-quoted literals. Then we can use double quote characters inside the string literal without escaping them.

Another idea is to use DOM operations to build up some or all of the markup (e.g. document.createElement()) (*) though DOM API tends to be more verbose.

&gt; Tools/Scripts/webkitpy/resources/results.html:75
&gt; +    var currentTableID = popTableID();
&gt; +    var resultingTableHTML = &quot;&lt;table class=&apos;passing-table&apos; id=\&quot;&quot; + currentTableID + &quot;\&quot; &quot; + g_ExpandedAttributeName + &quot;=\&quot;false\&quot;&gt;&quot;;
&gt; +    resultingTableHTML += &quot;&lt;thead onClick=\&quot;toggleAttribute(&apos;&quot; + currentTableID + &quot;&apos;, &apos;&quot; + g_ExpandedAttributeName + &quot;&apos;)\&quot;&gt; &lt;tr&gt; &lt;th&gt;&quot; + tableTitle + &quot;&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt;&quot;;
&gt; +    resultingTableHTML += &quot;&lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;strong&gt;&quot; + tableMessage + &quot;&lt;/strong&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&quot;;
&gt; +    var index;
&gt; +    for (index = 0; index &lt; listOfTests.length; index++) {
&gt; +        resultingTableHTML += &quot;&lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&quot; + listOfTests[index] + &quot;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&quot;;
&gt; +    }
&gt; +
&gt; +    resultingTableHTML += &quot;&lt;/table&gt;&quot;;
&gt; +
&gt; +    return resultingTableHTML;

This code in this function is similar to the code in constructNonPassingTestTable(). In particular, lines 64-67 (inclusive) are almost identical to lines 46-49 (inclusive). Can we share more code between these functions?

&gt; Tools/Scripts/webkitpy/resources/results.html:82
&gt; +    // TODO: We should really pull a name from the results.json file. &quot;Python Unittest&quot; or some such,
&gt; +    // and set the main-heading element to something less generic.

Notice that we do not write out such a header (DumpRenderTree Tests) in the results.html file produced by run-webkit-tests. An example of the results.html can be seen at &lt;https://build.webkit.org/results/Apple%20Mavericks%20Release%20WK2%20(Tests)/r175405%20(9041)/results.html&gt;. I take you feel such a header would be beneficial? Or envision displaying the results from different test runners on the same page?

At the very least, this comment implies that you envision making use of this HTML file and associated CSS to display the results from other test runners (e.g. test-webkitperl - our Perl test runner). If so, then I suggest that we move this file and the associated CSS from directory Tools/Scripts/webkitpy/resources to some non-webkitpy-specific directory since we will need to copy these files when distributing the JSON results produced by other test runners (e.g. test-webkitperl) and it seems weird that non-test-webkitpy test runners would need to know about/reference files in the Python code directory (Tools/Scripts/webkitpy/resources).

&gt; Tools/Scripts/webkitpy/resources/results.html:114
&gt; +&lt;/script&gt;

You want to consider want to consider moving this &lt;script&gt; before the &lt;/body&gt; to avoid blocking the parsing of the page and hence minimize the amount of time we show a blank page. Then we can remove the HTML attribute onload from the HTML body element (line 116).

&gt; Tools/Scripts/webkitpy/resources/results.html:116
&gt; +&lt;body onload=&quot;generatePage()&quot;&gt;

The markup up to this point in the document is invalid per section &quot;Optional tags&quot; of the WHATWG HTML living standard (30 October 2014): &lt;https://html.spec.whatwg.org/multipage/syntax.html#optional-tags&gt;. In particular, a &lt;/head&gt; is needed before the &lt;body&gt;.

&gt; Tools/Scripts/webkitpy/resources/results.html:117
&gt; +    &lt;div id=&quot;main-content&quot;&gt;

We aren&apos;t making use of the HTML id attribute for this element. Please remove this attribute.

&gt; Tools/Scripts/webkitpy/resources/results.html:118
&gt; +        &lt;source id=&quot;testtest&quot; src=&quot;results.json&quot;&gt;&lt;/source&gt;

Can you elaborate on what you are trying to accomplish by using this markup?

This is markup is invalid per definition of the HTML source element, &lt;https://html.spec.whatwg.org/multipage/embedded-content.html#the-source-element&gt;, and section &quot;The source element when used with the picture element, &lt;https://html.spec.whatwg.org/multipage/embedded-content.html#the-source-element-when-used-with-the-picture-element&gt;, of the WHATWG HTML living standard (30 October 2014). Paraphrasing the aforementioned definition and section, the source element can only appear as a child of &lt;media&gt; or &lt;picture&gt;. That is, it cannot appear as a child of a &lt;div&gt;.

&gt; Tools/Scripts/webkitpy/resources/results.html:119
&gt; +        &lt;h1 id=&quot;main-heading&quot;&gt;Test Results&lt;/h1&gt;

We aren&apos;t making use of the HTML id attribute for this element. Please remove this attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045939</commentid>
    <comment_count>6</comment_count>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2014-11-03 18:34:45 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 240715 [details]
&gt; Removes jquery
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240715&amp;action=review
&gt; 
&gt; The approach of the patch seems reasonable. I have some questions on the
&gt; implementation. Out of curiosity, did you make use of any documents when
&gt; writing the patches for this bug?
At the time of the comment, yes (in particular: http://www.askyb.com/javascript/load-json-file-locally-by-js-without-jquery/), after I update the patch, only general references were used (https://html.spec.whatwg.org/multipage/syntax.html#optional-tags, http://www.w3.org/TR/XMLHttpRequest/, http://www.w3schools.com/html/, https://developer.mozilla.org/en-US/docs/Web/API/Element.classList) 
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results-stylesheet.css:3
&gt; &gt; +    font-size:14px;
&gt; &gt; +    font-family:verdana;
&gt; 
&gt; Nit: This is OK as-is. We seem to be alternating between having space
&gt; character after the &apos;:&apos; or not throughout this file. We should pick one
&gt; style and stick with it throughout this file for consistency.
Fixed in next patch
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results-stylesheet.css:74
&gt; &gt; +}
&gt; 
&gt; Please add a newline to the end of this file.
Fixed in next patch
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:2
&gt; &gt; +&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;results-stylesheet.css&quot;&gt;
&gt; 
&gt; Nit: This is OK as-is. The HTML type attribute is unnecessary per
&gt; &lt;https://html.spec.whatwg.org/#attr-link-type&gt;. And all modern web browsers
&gt; support CSS.
Fixed in next patch
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:8
&gt; &gt; +var g_state;
&gt; 
&gt; Nit: This variable is unused. I suggest we remove it.
Fixed in next patch
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:23
&gt; &gt; +function popTableID(){
&gt; &gt; +    g_tableIDs++;
&gt; &gt; +    var poppedTableID = &quot;table&quot; + (g_tableIDs - 1);
&gt; &gt; +    return poppedTableID;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +function popTestRowID(){
&gt; &gt; +    g_testRowIDs++;
&gt; &gt; +    var poppedTestRowIDs = &quot;testRow&quot; + (g_testRowIDs - 1);
&gt; &gt; +    return poppedTestRowIDs;
&gt; &gt; +}
&gt; 
&gt; I do not see the benefit of either of these functions. It is unnecessary to
&gt; assign unique IDs to each &lt;table&gt;, &lt;thead&gt;, and &lt;tbody&gt; so as to implement
&gt; the expand/collapse user interface because we can identify the element that
&gt; was clicked by using the information provided in DOM Click event passed to
&gt; the click handler of the element.
Fixed in next patch
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:41
&gt; &gt; +function toggleAttribute(elementID, attributeName){
&gt; &gt; +    var element = document.getElementById(elementID);
&gt; &gt; +
&gt; &gt; +    if (!element.hasAttribute(attributeName))
&gt; &gt; +    {
&gt; &gt; +        element.setAttribute(attributeName,&quot;true&quot;);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    if (element.getAttribute(attributeName) === &quot;true&quot;)
&gt; &gt; +    {
&gt; &gt; +        element.setAttribute(attributeName,&quot;false&quot;);
&gt; &gt; +    } else {
&gt; &gt; +        element.setAttribute(attributeName,&quot;true&quot;);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    return element.getAttribute(attributeName) === &quot;true&quot;;
&gt; &gt; +}
&gt; 
&gt; From my understanding our use of this function is to ultimately show/hide
&gt; content (such a test result) by causing the appropriate CSS attribute
&gt; selector (e.g. tbody[expanded=&quot;false&quot;] tr.test-result td) to be applied to
&gt; the element. This seems like an an indirect approach to show/hide content.
&gt; It seems more straightforward to define a function that toggles applying a
&gt; CSS class selector using the Element.classList API (*).
Using classList.toggle made everything quite a bit cleaner.
&gt; 
&gt; (*) Or modifying Element.className if we need to support viewing the test
&gt; results page in a browser or WebKit nightly without Element.classList
&gt; support (why would we have to?)
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:60
&gt; &gt; +    var resultingTableHTML = &quot;&quot;;
&gt; &gt; +    if (listOfErrorsOrFailures.length &gt; 0){
&gt; &gt; +        var currentTableID = popTableID();
&gt; &gt; +        resultingTableHTML = &quot;&lt;table class=&apos;non-passing-table&apos; id=\&quot;&quot; + currentTableID + &quot;\&quot; &quot; + g_ExpandedAttributeName + &quot;=\&quot;true\&quot;&gt;&quot;;
&gt; &gt; +        resultingTableHTML += &quot;&lt;thead onClick=\&quot;toggleAttribute(&apos;&quot; + currentTableID + &quot;&apos;, &apos;&quot; + g_ExpandedAttributeName + &quot;&apos;)\&quot;&gt; &lt;tr&gt; &lt;th&gt;&quot; + tableTitle + &quot;&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt;&quot;;
&gt; &gt; +        resultingTableHTML += &quot;&lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;strong&gt;&quot; + tableMessage + &quot;&lt;/strong&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&quot;;
&gt; &gt; +        var index;
&gt; &gt; +        for (index = 0; index &lt; listOfErrorsOrFailures.length; index++) {
&gt; &gt; +            var currentTestRowID = popTestRowID();
&gt; &gt; +            resultingTableHTML += &quot;&lt;tbody id=\&quot;&quot; + currentTestRowID + &quot;\&quot; &quot; + g_ExpandedAttributeName + &quot;=\&quot;false\&quot;&gt; &lt;tr class=&apos;test-name&apos; onClick=\&quot;toggleAttribute(&apos;&quot; + currentTestRowID + &quot;&apos;, &apos;&quot; + g_ExpandedAttributeName + &quot;&apos;)\&quot;&gt; &lt;td&gt;&quot; + listOfErrorsOrFailures[index].name + &quot;&lt;/td&gt; &lt;/tr&gt;&quot;;
&gt; &gt; +            resultingTableHTML += &quot;&lt;tr class=&apos;test-result&apos;&gt; &lt;td&gt; &lt;pre&gt;&quot; + listOfErrorsOrFailures[index].result + &quot;&lt;/pre&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&quot;;
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        resultingTableHTML += &quot;&lt;/table&gt;&quot;;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    return resultingTableHTML;
&gt; 
&gt; Is there a better way to build up this markup? One idea is to using
&gt; single-quoted literals instead of double-quoted literals. Then we can use
&gt; double quote characters inside the string literal without escaping them.
After cleaning up everything else and using single quotes instead of escaped double quotes I think it&apos;s clean enough. I didn&apos;t look into using DOM operations, but I&apos;m curious to come back to this and see how it fares.
&gt; 
&gt; Another idea is to use DOM operations to build up some or all of the markup
&gt; (e.g. document.createElement()) (*) though DOM API tends to be more verbose.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:75
&gt; &gt; +    var currentTableID = popTableID();
&gt; &gt; +    var resultingTableHTML = &quot;&lt;table class=&apos;passing-table&apos; id=\&quot;&quot; + currentTableID + &quot;\&quot; &quot; + g_ExpandedAttributeName + &quot;=\&quot;false\&quot;&gt;&quot;;
&gt; &gt; +    resultingTableHTML += &quot;&lt;thead onClick=\&quot;toggleAttribute(&apos;&quot; + currentTableID + &quot;&apos;, &apos;&quot; + g_ExpandedAttributeName + &quot;&apos;)\&quot;&gt; &lt;tr&gt; &lt;th&gt;&quot; + tableTitle + &quot;&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt;&quot;;
&gt; &gt; +    resultingTableHTML += &quot;&lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;strong&gt;&quot; + tableMessage + &quot;&lt;/strong&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&quot;;
&gt; &gt; +    var index;
&gt; &gt; +    for (index = 0; index &lt; listOfTests.length; index++) {
&gt; &gt; +        resultingTableHTML += &quot;&lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&quot; + listOfTests[index] + &quot;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&quot;;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    resultingTableHTML += &quot;&lt;/table&gt;&quot;;
&gt; &gt; +
&gt; &gt; +    return resultingTableHTML;
&gt; 
&gt; This code in this function is similar to the code in
&gt; constructNonPassingTestTable(). In particular, lines 64-67 (inclusive) are
&gt; almost identical to lines 46-49 (inclusive). Can we share more code between
&gt; these functions?
Fixed in next patch
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:82
&gt; &gt; +    // TODO: We should really pull a name from the results.json file. &quot;Python Unittest&quot; or some such,
&gt; &gt; +    // and set the main-heading element to something less generic.
&gt; 
&gt; Notice that we do not write out such a header (DumpRenderTree Tests) in the
&gt; results.html file produced by run-webkit-tests. An example of the
&gt; results.html can be seen at
&gt; &lt;https://build.webkit.org/results/
&gt; Apple%20Mavericks%20Release%20WK2%20(Tests)/r175405%20(9041)/results.html&gt;.
&gt; I take you feel such a header would be beneficial? Or envision displaying
&gt; the results from different test runners on the same page?
I think using this for displaying different test results would be jarring if the title didn&apos;t indicate which results pay you&apos;re currently looking at. 
&gt; 
&gt; At the very least, this comment implies that you envision making use of this
&gt; HTML file and associated CSS to display the results from other test runners
&gt; (e.g. test-webkitperl - our Perl test runner). If so, then I suggest that we
&gt; move this file and the associated CSS from directory
&gt; Tools/Scripts/webkitpy/resources to some non-webkitpy-specific directory
&gt; since we will need to copy these files when distributing the JSON results
&gt; produced by other test runners (e.g. test-webkitperl) and it seems weird
&gt; that non-test-webkitpy test runners would need to know about/reference files
&gt; in the Python code directory (Tools/Scripts/webkitpy/resources).
I tend to agree. It&apos;s been move to Tools/Scripts/resources. I think the only things that will need to know about it are things within the Scripts directory, so I think this is a good choice.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:114
&gt; &gt; +&lt;/script&gt;
&gt; 
&gt; You want to consider want to consider moving this &lt;script&gt; before the
&gt; &lt;/body&gt; to avoid blocking the parsing of the page and hence minimize the
&gt; amount of time we show a blank page. Then we can remove the HTML attribute
&gt; onload from the HTML body element (line 116).
Fixed in next patch
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:116
&gt; &gt; +&lt;body onload=&quot;generatePage()&quot;&gt;
&gt; 
&gt; The markup up to this point in the document is invalid per section &quot;Optional
&gt; tags&quot; of the WHATWG HTML living standard (30 October 2014):
&gt; &lt;https://html.spec.whatwg.org/multipage/syntax.html#optional-tags&gt;. In
&gt; particular, a &lt;/head&gt; is needed before the &lt;body&gt;.
Fixed in next patch
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:117
&gt; &gt; +    &lt;div id=&quot;main-content&quot;&gt;
&gt; 
&gt; We aren&apos;t making use of the HTML id attribute for this element. Please
&gt; remove this attribute.
Fixed in next patch
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:118
&gt; &gt; +        &lt;source id=&quot;testtest&quot; src=&quot;results.json&quot;&gt;&lt;/source&gt;
&gt; 
&gt; Can you elaborate on what you are trying to accomplish by using this markup?
Not without sounding quite dumb. It&apos;s been removed.
&gt; 
&gt; This is markup is invalid per definition of the HTML source element,
&gt; &lt;https://html.spec.whatwg.org/multipage/embedded-content.html#the-source-
&gt; element&gt;, and section &quot;The source element when used with the picture
&gt; element,
&gt; &lt;https://html.spec.whatwg.org/multipage/embedded-content.html#the-source-
&gt; element-when-used-with-the-picture-element&gt;, of the WHATWG HTML living
&gt; standard (30 October 2014). Paraphrasing the aforementioned definition and
&gt; section, the source element can only appear as a child of &lt;media&gt; or
&gt; &lt;picture&gt;. That is, it cannot appear as a child of a &lt;div&gt;.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/resources/results.html:119
&gt; &gt; +        &lt;h1 id=&quot;main-heading&quot;&gt;Test Results&lt;/h1&gt;
&gt; 
&gt; We aren&apos;t making use of the HTML id attribute for this element. Please
&gt; remove this attribute.
Fixed in next patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045942</commentid>
    <comment_count>7</comment_count>
      <attachid>240897</attachid>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2014-11-03 18:36:54 -0800</bug_when>
    <thetext>Created attachment 240897
Cleaner implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046129</commentid>
    <comment_count>8</comment_count>
      <attachid>240937</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-11-04 11:50:52 -0800</bug_when>
    <thetext>Created attachment 240937
Self-contained results page

For convenience, I extracted files results.html and results-stylesheet.css from attachment #240897 and created a self-contained web page with some dummy data to make it straightforward to visualize the proposed results page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046132</commentid>
    <comment_count>9</comment_count>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2014-11-04 12:05:17 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created attachment 240937 [details]
&gt; Self-contained results page
&gt; 
&gt; For convenience, I extracted files results.html and results-stylesheet.css
&gt; from attachment #240897 [details] and created a self-contained web page with
&gt; some dummy data to make it straightforward to visualize the proposed results
&gt; page.
Sweet! Thanks Dan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046155</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-11-04 13:23:12 -0800</bug_when>
    <thetext>How did you come to the decision to come up with a test results layout that differs from the layout we use for DRT tests?

After looking at appearance of the proposed results page (attachment #240937), there is a lot of bolded text on the page. I&apos;m unclear of the need to bold the names of tests and the phrases: &quot;Errored tests are tests that hit exceptions during their execution&quot;, &quot;Failed tests are tests that violated one or more assertions&quot;, and &quot;Passing tests neither hit exceptions, nor violated assertions.&quot; Is it necessary to bold such text? Usually bold text is used either for emphasis or to convey a hierarchy (e.g. title of a chapter). And overuse of bold text could desensitize this embellishment when used for the aforementioned familiar uses. I suggest that we bold text sparingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046157</commentid>
    <comment_count>11</comment_count>
      <attachid>240944</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-11-04 13:39:36 -0800</bug_when>
    <thetext>Created attachment 240944
[Alternative Proposal] DRT-like self-contained results page

For contrast, I put together a rough web page with dummy data that shows the Python results using a layout that is more consistent to the layout we use for the DRT results, &lt;https://trac.webkit.org/browser/trunk/LayoutTests/fast/harness/results.html?rev=167631&gt;. I chose to not display the list of passing tests and initially hide the actual results of each test to match the look-and-feel of the DRT results page. Feel free to make use of this web page or scrap it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046387</commentid>
    <comment_count>12</comment_count>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2014-11-04 22:09:43 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; How did you come to the decision to come up with a test results layout that
&gt; differs from the layout we use for DRT tests?
&gt; 
&gt; After looking at appearance of the proposed results page (attachment #240937
&gt; [details]), there is a lot of bolded text on the page. I&apos;m unclear of the
&gt; need to bold the names of tests and the phrases: &quot;Errored tests are tests
&gt; that hit exceptions during their execution&quot;, &quot;Failed tests are tests that
&gt; violated one or more assertions&quot;, and &quot;Passing tests neither hit exceptions,
&gt; nor violated assertions.&quot; Is it necessary to bold such text? Usually bold
&gt; text is used either for emphasis or to convey a hierarchy (e.g. title of a
&gt; chapter). And overuse of bold text could desensitize this embellishment when
&gt; used for the aforementioned familiar uses. I suggest that we bold text
&gt; sparingly.

Essentially I decided there was a lot of machinery that didn&apos;t need to be there, and didn&apos;t really like the look and feel, so I thought I&apos;d give it a shot. Unfortunately the end result still looks like something out of 1995 to me, but at least it doesn&apos;t have so many moving parts.

The bold components are the collapsable ones, with the exception of the phrases you mentioned. Perhaps the phrases shouldn&apos;t be bold, I was looking at the passing tests section when I decided to bold it. I thought it should look different from the test names. Maybe that doesn&apos;t make sense now that the collapsable test names are bold anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047242</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-11-07 16:21:24 -0800</bug_when>
    <thetext>For what it&apos;s worth, I think that I like the alternative proposal better, except that the &lt;pre&gt; content looks too heavy to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063163</commentid>
    <comment_count>14</comment_count>
      <attachid>245084</attachid>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2015-01-21 14:12:02 -0800</bug_when>
    <thetext>Created attachment 245084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063167</commentid>
    <comment_count>15</comment_count>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2015-01-21 14:15:07 -0800</bug_when>
    <thetext>^ Uses Dan&apos;s file proposal with a few changes:
Puts CSS into results-stylesheet.css
Actually loads results.json
Adds a passed tests section

(Also I just noticed something silly I should change. I&apos;ll post another patch shortly.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063168</commentid>
    <comment_count>16</comment_count>
      <attachid>245085</attachid>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2015-01-21 14:16:53 -0800</bug_when>
    <thetext>Created attachment 245085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063419</commentid>
    <comment_count>17</comment_count>
      <attachid>245085</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-01-22 11:58:55 -0800</bug_when>
    <thetext>Comment on attachment 245085
Patch

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

&gt; Tools/ChangeLog:21
&gt; +        Adds the script_resources_directory function to allow runtests to copy

Nit: runtests =&gt; &quot;the RunTests step&quot;

&gt; Tools/Scripts/resources/results-stylesheet.css:1
&gt; +body {

You removed a FIXME comment that I had placed at the top of the stylesheet section in attachment #240944. It&apos;s unfortunate that this file duplicates some of the CSS styles in LayoutTests/fast/harness/results.html. We should look share the common CSS styles between the unit test result page and layout test result page to so as to help ensure a consistent look-and-feel between them. We should add a FIXME comment at the top of this file that remarks about the styles duplicated from LayoutTests/fast/harness/results.html and suggests that we look to share the CSS styles. Maybe something of the form:

/* FIXME: This file duplicates some of the styles used in LayoutTests/fast/harness/results.html. We should look to share such CSS styles. */

&gt; Tools/Scripts/resources/results.html:32
&gt; +&lt;script&gt;

I don&apos;t see the benefit of demarcating the XMLHttpRequest logic into its own &lt;script&gt;. We should merge the contents of this &lt;script&gt; and the contents of the &lt;script&gt; that begins on line 43 into a single HTML script element.

&gt; Tools/Scripts/resources/results.html:35
&gt; +fileRequest.open(&apos;GET&apos;, &quot;results.json&quot;, false);

This loads results.json synchronously. We should load results.json asynchronously so as to avoid blocking the main thread for an HTTP response. We may also want to consider showing and hiding a loading indicator while waiting for the results.json file to load and once the results.json file is loaded, respectively. We do not need to implement the loading indicator in this patch. It can be done in another bug. I would prefer that we implemented asynchronous loading of results.json in this patch. One way to do this is to move the logic in lines [97, 156] into a function that takes a JavaScript dictionary, say generatePageWithResults(...), that is called from the onload handler of the XMLHttpRequest object with argument fileRequest.response.

Nit: Please use double quotes for string literals.

&gt; Tools/Scripts/resources/results.html:36
&gt; +fileRequest.responseType = &apos;json&apos;;

Nit: Please use double quotes for string literals.

&gt; Tools/Scripts/resources/results.html:39
&gt; +var g_jsonp = fileRequest.response

Nit: Missing semicolon at the end of this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300804</commentid>
    <comment_count>18</comment_count>
      <attachid>245085</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-04-24 19:04:29 -0700</bug_when>
    <thetext>Comment on attachment 245085
Patch

This patch has been pending review since 2015 with no recent activity.
It seems unlikely that it would even still apply to trunk in its current form.

Clearing from the review queue.

Feel free to update and resubmit if the patch is still relevant.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240646</attachid>
            <date>2014-10-29 18:34:43 -0700</date>
            <delta_ts>2014-10-30 17:27:15 -0700</delta_ts>
            <desc>Adds results.html and results-stylesheet.css</desc>
            <filename>0001-webkitpy-needs-a-results.html-file-to-render-the-res.patch</filename>
            <type>text/plain</type>
            <size>12624</size>
            <attacher name="Jake Nielsen">jake.nielsen.webkit</attacher>
            
              <data encoding="base64">RnJvbSAxOWNlNDY4ZDdjM2Q2YzgzZTA2NGExZmY2NGUxODM3MDBjMTU5ZDlhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWtlIE5pZWxzZW4gPGphY29iX25pZWxzZW5AYXBwbGUuY29t
PgpEYXRlOiBXZWQsIDI5IE9jdCAyMDE0IDE4OjMyOjI0IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0g
d2Via2l0cHkgbmVlZHMgYSByZXN1bHRzLmh0bWwgZmlsZSB0byByZW5kZXIgdGhlIHJlc3VsdHMu
anNvbgogZmlsZSBmb3IgaHVtYW4gZXllcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzODE2MQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgoqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9iYXNlLnB5OgpBZGRzIHRoZSB3ZWJraXRweV9yZXNvdXJjZXNfZGlyZWN0
b3J5IGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBsb2NhdGlvbgpvZiByZXN1bHRzLmh0bWwgdG8gYmUg
a25vd24gYnkgd2Via2l0cHkgc2NyaXB0cy4KKFBvcnQud2Via2l0cHlfcmVzb3VyY2VzX2RpcmVj
dG9yeSk6CiogU2NyaXB0cy93ZWJraXRweS9yZXNvdXJjZXMvcmVzdWx0cy1zdHlsZXNoZWV0LmNz
czogQWRkZWQuCihib2R5KToKKGgxKToKKHRhYmxlKToKKHRhYmxlLCB0aCwgdGQpOgoodGgsIHRk
KToKKHRkKToKKHRyLnRlc3QtcmVzdWx0IHRkKToKKC5zdGF0dXMtbWVzc2FnZS1iYWQpOgooLnN0
YXR1cy1tZXNzYWdlLWdvb2QpOgooLnRlc3QtcmVzdWx0KToKKHRyLnRlc3QtcmVzdWx0IHRkIHBy
ZSk6Cih0YWJsZVtleHBhbmRlZD0idHJ1ZSJdIHRoOjpiZWZvcmUpOgoodGFibGVbZXhwYW5kZWQ9
ImZhbHNlIl0gdGg6OmJlZm9yZSk6Cih0YWJsZVtleHBhbmRlZD0iZmFsc2UiXSB0Ym9keSk6Cih0
Ym9keVtleHBhbmRlZD0idHJ1ZSJdIHRyLnRlc3QtbmFtZSB0ZDo6YmVmb3JlKToKKHRib2R5W2V4
cGFuZGVkPSJmYWxzZSJdIHRyLnRlc3QtbmFtZSB0ZDo6YmVmb3JlKToKKHRib2R5W2V4cGFuZGVk
PSJmYWxzZSJdIHRyLnRlc3QtcmVzdWx0IHRkKToKKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc291cmNl
cy9yZXN1bHRzLmh0bWw6IEFkZGVkLgoqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9ydW50
ZXN0cy5weToKQWRkcyBhIGZldyBsaW5lcyB0byBjb3B5IHJlc3VsdHMuaHRtbCBhbmQgcmVzdWx0
cy1zdHlsZXNoZWV0LmNzcyBpbnRvCnRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkgYWZ0ZXIgcmVz
dWx0cy5qc29uIGlzIGdlbmVyYXRlZC4KKFJ1blRlc3RzLnJ1bik6Ci0tLQogVG9vbHMvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzYgKysrKysrKwogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkgICAgICAgICAgICAgICAgfCAgIDMgKwog
Li4uL3dlYmtpdHB5L3Jlc291cmNlcy9yZXN1bHRzLXN0eWxlc2hlZXQuY3NzICAgICAgfCAgNzQg
KysrKysrKysrKysrKwogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXNvdXJjZXMvcmVzdWx0cy5o
dG1sICAgICAgfCAxMTggKysrKysrKysrKysrKysrKysrKysrCiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvc3RlcHMvcnVudGVzdHMucHkgICAgICB8ICAgNiArLQogNSBmaWxlcyBjaGFuZ2Vk
LCAyMzYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzb3VyY2VzL3Jlc3VsdHMtc3R5bGVzaGVldC5jc3MKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc291cmNlcy9yZXN1bHRz
Lmh0bWwKCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggN2Y1ZGI0Mi4uMGMzMDE4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE0LTEwLTI5ICBKYWtlIE5pZWxzZW4g
IDxqYWNvYl9uaWVsc2VuQGFwcGxlLmNvbT4KKworICAgICAgICB3ZWJraXRweSBuZWVkcyBhIHJl
c3VsdHMuaHRtbCBmaWxlIHRvIHJlbmRlciB0aGUgcmVzdWx0cy5qc29uIGZpbGUgZm9yCisgICAg
ICAgIGh1bWFuIGV5ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzgxNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICBBZGRzIHRo
ZSB3ZWJraXRweV9yZXNvdXJjZXNfZGlyZWN0b3J5IGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBsb2Nh
dGlvbgorICAgICAgICBvZiByZXN1bHRzLmh0bWwgdG8gYmUga25vd24gYnkgd2Via2l0cHkgc2Ny
aXB0cy4KKyAgICAgICAgKFBvcnQud2Via2l0cHlfcmVzb3VyY2VzX2RpcmVjdG9yeSk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9yZXNvdXJjZXMvcmVzdWx0cy1zdHlsZXNoZWV0LmNzczog
QWRkZWQuCisgICAgICAgIChib2R5KToKKyAgICAgICAgKGgxKToKKyAgICAgICAgKHRhYmxlKToK
KyAgICAgICAgKHRhYmxlLCB0aCwgdGQpOgorICAgICAgICAodGgsIHRkKToKKyAgICAgICAgKHRk
KToKKyAgICAgICAgKHRyLnRlc3QtcmVzdWx0IHRkKToKKyAgICAgICAgKC5zdGF0dXMtbWVzc2Fn
ZS1iYWQpOgorICAgICAgICAoLnN0YXR1cy1tZXNzYWdlLWdvb2QpOgorICAgICAgICAoLnRlc3Qt
cmVzdWx0KToKKyAgICAgICAgKHRyLnRlc3QtcmVzdWx0IHRkIHByZSk6CisgICAgICAgICh0YWJs
ZVtleHBhbmRlZD0idHJ1ZSJdIHRoOjpiZWZvcmUpOgorICAgICAgICAodGFibGVbZXhwYW5kZWQ9
ImZhbHNlIl0gdGg6OmJlZm9yZSk6CisgICAgICAgICh0YWJsZVtleHBhbmRlZD0iZmFsc2UiXSB0
Ym9keSk6CisgICAgICAgICh0Ym9keVtleHBhbmRlZD0idHJ1ZSJdIHRyLnRlc3QtbmFtZSB0ZDo6
YmVmb3JlKToKKyAgICAgICAgKHRib2R5W2V4cGFuZGVkPSJmYWxzZSJdIHRyLnRlc3QtbmFtZSB0
ZDo6YmVmb3JlKToKKyAgICAgICAgKHRib2R5W2V4cGFuZGVkPSJmYWxzZSJdIHRyLnRlc3QtcmVz
dWx0IHRkKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc291cmNlcy9yZXN1bHRzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9ydW50ZXN0
cy5weToKKyAgICAgICAgQWRkcyBhIGZldyBsaW5lcyB0byBjb3B5IHJlc3VsdHMuaHRtbCBhbmQg
cmVzdWx0cy1zdHlsZXNoZWV0LmNzcyBpbnRvCisgICAgICAgIHRoZSBhcHByb3ByaWF0ZSBkaXJl
Y3RvcnkgYWZ0ZXIgcmVzdWx0cy5qc29uIGlzIGdlbmVyYXRlZC4KKyAgICAgICAgKFJ1blRlc3Rz
LnJ1bik6CisKIDIwMTQtMTAtMjkgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBbRUZMXSBidWlsZC13ZWJraXQgc2hvdWxkIHRyeSBoYXJkZXIgdG8gYXZv
aWQgcmUtcnVubmluZyBjbWFrZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQppbmRleCAz
ZDBkNGViLi5hZGM0NjQ5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
YmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQpAQCAtNzg4
LDYgKzc4OCw5IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgcHl0aG9uX3VuaXR0ZXN0
X3Jlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0
aCgncHl0aG9uLXVuaXR0ZXN0LXJlc3VsdHMnKQogCisgICAgZGVmIHdlYmtpdHB5X3Jlc291cmNl
c19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRf
YmFzZSgiVG9vbHMiLCAiU2NyaXB0cyIsICJ3ZWJraXRweSIsICJyZXNvdXJjZXMiKQorCiAgICAg
ZGVmIGRlZmF1bHRfcmVzdWx0c19kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgICIiIkFic29sdXRl
IHBhdGggdG8gdGhlIGRlZmF1bHQgcGxhY2UgdG8gc3RvcmUgdGhlIHRlc3QgcmVzdWx0cy4iIiIK
ICAgICAgICAgIyBSZXN1bHRzIGFyZSBzdG9yZSByZWxhdGl2ZSB0byB0aGUgYnVpbHQgcHJvZHVj
dHMgdG8gbWFrZSBpdCBlYXN5CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Jl
c291cmNlcy9yZXN1bHRzLXN0eWxlc2hlZXQuY3NzIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9y
ZXNvdXJjZXMvcmVzdWx0cy1zdHlsZXNoZWV0LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45NzUzYjAwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9yZXNvdXJjZXMvcmVzdWx0cy1zdHlsZXNoZWV0LmNzcwpAQCAtMCwwICsxLDc0IEBACiti
b2R5IHsKKyAgICBmb250LXNpemU6MTRweDsKKyAgICBmb250LWZhbWlseTp2ZXJkYW5hOworICAg
IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworfQorCitoMSB7CisgICAgZm9udC1zaXplOjE2cHg7
Cit9CisKK3RhYmxlIHsKKyAgICBwYWRkaW5nOiAycHg7CisgICAgbWluLXdpZHRoOiAyMDBweDsK
KyAgICBtYXJnaW4tYm90dG9tOiAxMHB4OworfQorCit0YWJsZSwgdGgsIHRkIHsKKyAgICB0ZXh0
LWFsaWduOiBsZWZ0OworfQorCit0aCwgdGQgeworICAgIHBhZGRpbmc6IDZweDsKK30KKwordGQg
eworICAgIHBhZGRpbmctbGVmdDogMzBweDsKK30KKwordHIudGVzdC1yZXN1bHQgdGQgeworICAg
IHBhZGRpbmctbGVmdDogNjBweDsKK30KKworLnN0YXR1cy1tZXNzYWdlLWJhZCB7CisgICAgY29s
b3I6cmVkOworfQorCisuc3RhdHVzLW1lc3NhZ2UtZ29vZCB7CisgICAgY29sb3I6Z3JlZW47Cit9
CisKKy50ZXN0LXJlc3VsdCB7CisgICAgZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyI7Cit9CisK
K3RyLnRlc3QtcmVzdWx0IHRkIHByZSB7CisgICAgYm9yZGVyOiAxcHggc29saWQ7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgcGFkZGluZzogNnB4OworfQorCisKK3RhYmxlW2V4
cGFuZGVkPSJ0cnVlIl0gdGg6OmJlZm9yZXsKKyAgICBjb250ZW50OiJcMDAyNUJDXCAiOworfQor
Cit0YWJsZVtleHBhbmRlZD0iZmFsc2UiXSB0aDo6YmVmb3JleworICAgIGNvbnRlbnQ6IlwwMDI1
QkFcICI7Cit9CisKK3RhYmxlW2V4cGFuZGVkPSJmYWxzZSJdIHRib2R5eworICAgIGRpc3BsYXk6
bm9uZTsKK30KKwordGJvZHlbZXhwYW5kZWQ9InRydWUiXSB0ci50ZXN0LW5hbWUgdGQ6OmJlZm9y
ZXsKKyAgICBjb250ZW50OiJcMDAyNUJDXCAiOworfQorCit0Ym9keVtleHBhbmRlZD0iZmFsc2Ui
XSB0ci50ZXN0LW5hbWUgdGQ6OmJlZm9yZXsKKyAgICBjb250ZW50OiJcMDAyNUJBXCAiOworfQor
Cit0Ym9keVtleHBhbmRlZD0iZmFsc2UiXSB0ci50ZXN0LXJlc3VsdCB0ZHsKKyAgICBkaXNwbGF5
Om5vbmU7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9yZXNvdXJjZXMvcmVzdWx0cy5odG1sIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9yZXNvdXJjZXMvcmVzdWx0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJiYzFlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Jlc291cmNlcy9yZXN1bHRzLmh0bWwKQEAgLTAsMCArMSwxMTggQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0icmVzdWx0
cy1zdHlsZXNoZWV0LmNzcyI+CisKKzxzY3JpcHQgc3JjPSJodHRwOi8vYWpheC5nb29nbGVhcGlz
LmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTEuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+CisidXNlIHN0cmljdCI7Cit2YXIgZ19yZXN1bHRzRmlsZSA9ICJyZXN1bHRzLmpzb24i
CisKK3ZhciBnX3N0YXRlOwordmFyIGdfdGFibGVJRHMgPSAwOwordmFyIGdfdGVzdFJvd0lEcyA9
IDA7Cit2YXIgZ19FeHBhbmRlZEF0dHJpYnV0ZU5hbWUgPSAiZXhwYW5kZWQiOworCitmdW5jdGlv
biBwb3BUYWJsZUlEKCl7CisgICAgZ190YWJsZUlEcysrOworICAgIHZhciBwb3BwZWRUYWJsZUlE
ID0gInRhYmxlIiArIChnX3RhYmxlSURzIC0gMSk7CisgICAgcmV0dXJuIHBvcHBlZFRhYmxlSUQ7
Cit9CisKK2Z1bmN0aW9uIHBvcFRlc3RSb3dJRCgpeworICAgIGdfdGVzdFJvd0lEcysrOworICAg
IHZhciBwb3BwZWRUZXN0Um93SURzID0gInRlc3RSb3ciICsgKGdfdGVzdFJvd0lEcyAtIDEpOwor
ICAgIHJldHVybiBwb3BwZWRUZXN0Um93SURzOworfQorCitmdW5jdGlvbiB0b2dnbGVBdHRyaWJ1
dGUoZWxlbWVudElELCBhdHRyaWJ1dGVOYW1lKXsKKyAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJRCk7CisKKyAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmli
dXRlKGF0dHJpYnV0ZU5hbWUpKQorICAgIHsKKyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUo
YXR0cmlidXRlTmFtZSwidHJ1ZSIpOworICAgIH0KKworICAgIGlmIChlbGVtZW50LmdldEF0dHJp
YnV0ZShhdHRyaWJ1dGVOYW1lKSA9PT0gInRydWUiKQorICAgIHsKKyAgICAgICAgZWxlbWVudC5z
ZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwiZmFsc2UiKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCJ0cnVlIik7CisgICAgfQorCisg
ICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID09PSAidHJ1ZSI7
Cit9CisKK2Z1bmN0aW9uIGNvbnN0cnVjdE5vblBhc3NpbmdUZXN0VGFibGUodGFibGVUaXRsZSwg
dGFibGVNZXNzYWdlLCBsaXN0T2ZFcnJvcnNPckZhaWx1cmVzKSB7CisgICAgdmFyIHJlc3VsdGlu
Z1RhYmxlSFRNTCA9ICIiOworICAgIGlmIChsaXN0T2ZFcnJvcnNPckZhaWx1cmVzLmxlbmd0aCA+
IDApeworICAgICAgICB2YXIgY3VycmVudFRhYmxlSUQgPSBwb3BUYWJsZUlEKCk7CisgICAgICAg
IHJlc3VsdGluZ1RhYmxlSFRNTCA9ICI8dGFibGUgY2xhc3M9J25vbi1wYXNzaW5nLXRhYmxlJyBp
ZD1cIiIgKyBjdXJyZW50VGFibGVJRCArICJcIiAiICsgZ19FeHBhbmRlZEF0dHJpYnV0ZU5hbWUg
KyAiPVwidHJ1ZVwiPiI7CisgICAgICAgIHJlc3VsdGluZ1RhYmxlSFRNTCArPSAiPHRoZWFkIG9u
Q2xpY2s9XCJ0b2dnbGVBdHRyaWJ1dGUoJyIgKyBjdXJyZW50VGFibGVJRCArICInLCAnIiArIGdf
RXhwYW5kZWRBdHRyaWJ1dGVOYW1lICsgIicpXCI+IDx0cj4gPHRoPiIgKyB0YWJsZVRpdGxlICsg
IjwvdGg+IDwvdHI+IDwvdGhlYWQ+IjsKKyAgICAgICAgcmVzdWx0aW5nVGFibGVIVE1MICs9ICI8
dGJvZHk+IDx0cj4gPHRkPiA8c3Ryb25nPiIgKyB0YWJsZU1lc3NhZ2UgKyAiPC9zdHJvbmc+IDwv
dGQ+IDwvdHI+IDwvdGJvZHk+IjsKKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICBmb3IgKGlu
ZGV4ID0gMDsgaW5kZXggPCBsaXN0T2ZFcnJvcnNPckZhaWx1cmVzLmxlbmd0aDsgaW5kZXgrKykg
eworICAgICAgICAgICAgdmFyIGN1cnJlbnRUZXN0Um93SUQgPSBwb3BUZXN0Um93SUQoKTsKKyAg
ICAgICAgICAgIHJlc3VsdGluZ1RhYmxlSFRNTCArPSAiPHRib2R5IGlkPVwiIiArIGN1cnJlbnRU
ZXN0Um93SUQgKyAiXCIgIiArIGdfRXhwYW5kZWRBdHRyaWJ1dGVOYW1lICsgIj1cImZhbHNlXCI+
IDx0ciBjbGFzcz0ndGVzdC1uYW1lJyBvbkNsaWNrPVwidG9nZ2xlQXR0cmlidXRlKCciICsgY3Vy
cmVudFRlc3RSb3dJRCArICInLCAnIiArIGdfRXhwYW5kZWRBdHRyaWJ1dGVOYW1lICsgIicpXCI+
IDx0ZD4iICsgbGlzdE9mRXJyb3JzT3JGYWlsdXJlc1tpbmRleF0ubmFtZSArICI8L3RkPiA8L3Ry
PiI7CisgICAgICAgICAgICByZXN1bHRpbmdUYWJsZUhUTUwgKz0gIjx0ciBjbGFzcz0ndGVzdC1y
ZXN1bHQnPiA8dGQ+IDxwcmU+IiArIGxpc3RPZkVycm9yc09yRmFpbHVyZXNbaW5kZXhdLnJlc3Vs
dCArICI8L3ByZT4gPC90ZD4gPC90cj4gPC90Ym9keT4iOworICAgICAgICB9CisKKyAgICAgICAg
cmVzdWx0aW5nVGFibGVIVE1MICs9ICI8L3RhYmxlPiI7CisgICAgfQorCisgICAgcmV0dXJuIHJl
c3VsdGluZ1RhYmxlSFRNTDsKK30KKworZnVuY3Rpb24gY29uc3RydWN0UGFzc2luZ1Rlc3RUYWJs
ZSh0YWJsZVRpdGxlLCB0YWJsZU1lc3NhZ2UsIGxpc3RPZlRlc3RzKSB7CisgICAgdmFyIGN1cnJl
bnRUYWJsZUlEID0gcG9wVGFibGVJRCgpOworICAgIHZhciByZXN1bHRpbmdUYWJsZUhUTUwgPSAi
PHRhYmxlIGNsYXNzPSdwYXNzaW5nLXRhYmxlJyBpZD1cIiIgKyBjdXJyZW50VGFibGVJRCArICJc
IiAiICsgZ19FeHBhbmRlZEF0dHJpYnV0ZU5hbWUgKyAiPVwiZmFsc2VcIj4iOworICAgIHJlc3Vs
dGluZ1RhYmxlSFRNTCArPSAiPHRoZWFkIG9uQ2xpY2s9XCJ0b2dnbGVBdHRyaWJ1dGUoJyIgKyBj
dXJyZW50VGFibGVJRCArICInLCAnIiArIGdfRXhwYW5kZWRBdHRyaWJ1dGVOYW1lICsgIicpXCI+
IDx0cj4gPHRoPiIgKyB0YWJsZVRpdGxlICsgIjwvdGg+IDwvdHI+IDwvdGhlYWQ+IjsKKyAgICBy
ZXN1bHRpbmdUYWJsZUhUTUwgKz0gIjx0Ym9keT4gPHRyPiA8dGQ+IDxzdHJvbmc+IiArIHRhYmxl
TWVzc2FnZSArICI8L3N0cm9uZz4gPC90ZD4gPC90cj4gPC90Ym9keT4iOworICAgIHZhciBpbmRl
eDsKKyAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsaXN0T2ZUZXN0cy5sZW5ndGg7IGluZGV4
KyspIHsKKyAgICAgICAgcmVzdWx0aW5nVGFibGVIVE1MICs9ICI8dGJvZHk+IDx0cj4gPHRkPiIg
KyBsaXN0T2ZUZXN0c1tpbmRleF0gKyAiPC90ZD4gPC90cj4gPC90Ym9keT4iOworICAgIH0KKwor
ICAgIHJlc3VsdGluZ1RhYmxlSFRNTCArPSAiPC90YWJsZT4iOworCisgICAgcmV0dXJuIHJlc3Vs
dGluZ1RhYmxlSFRNTDsKK30KKworJCgnLmhlYWRlcicpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAg
Y29uc29sZS5sb2coImh1cnIiKTsKKyAgICAkKHRoaXMpLm5leHRVbnRpbCgndHIuaGVhZGVyJyku
c2xpZGVUb2dnbGUoMTAwMCk7Cit9KTsKKworZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkgeworICAg
IGpRdWVyeS5nZXQoZ19yZXN1bHRzRmlsZSkudGhlbihmdW5jdGlvbih0ZXh0LCBzdGF0dXMsIHho
cil7CisgICAgICAgIHZhciByZXN1bHRzID0gSlNPTi5wYXJzZSh0ZXh0KTsKKworICAgICAgICAv
LyBUT0RPOiBXZSBzaG91bGQgcmVhbGx5IHB1bGwgYSBuYW1lIGZyb20gdGhlIHJlc3VsdHMuanNv
biBmaWxlLiAiUHl0aG9uIFVuaXR0ZXN0IiBvciBzb21lIHN1Y2gsCisgICAgICAgIC8vIGFuZCBz
ZXQgdGhlIG1haW4taGVhZGluZyBlbGVtZW50IHRvIHNvbWV0aGluZyBsZXNzIGdlbmVyaWMuCisK
KyAgICAgICAgdmFyIHN0YXR1c1NlY3Rpb25FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3N0YXR1cy1zZWN0aW9uJyk7CisgICAgICAgIHZhciBudW1iZXJPZk5vblBhc3NpbmdUZXN0
cyA9IHJlc3VsdHMuZXJyb3JzLmxlbmd0aCArIHJlc3VsdHMuZmFpbHVyZXMubGVuZ3RoOworICAg
ICAgICBpZiAobnVtYmVyT2ZOb25QYXNzaW5nVGVzdHMgPiAxKSB7CisgICAgICAgICAgICBzdGF0
dXNTZWN0aW9uRWxlbWVudC5pbm5lckhUTUwgPSAiPHAgY2xhc3M9J3N0YXR1cy1tZXNzYWdlLWJh
ZCc+ICIgKyBudW1iZXJPZk5vblBhc3NpbmdUZXN0cyArIiB0ZXN0cyBkaWQgbm90IHBhc3MuIDwv
cD4iOworICAgICAgICB9IGVsc2UgaWYgKG51bWJlck9mTm9uUGFzc2luZ1Rlc3RzID09PSAxKSB7
CisgICAgICAgICAgICBzdGF0dXNTZWN0aW9uRWxlbWVudC5pbm5lckhUTUwgPSAiPHAgY2xhc3M9
J3N0YXR1cy1tZXNzYWdlLWJhZCc+ICIgKyBudW1iZXJPZk5vblBhc3NpbmdUZXN0cyArIiB0ZXN0
IGRpZCBub3QgcGFzcy4gPC9wPiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0
dXNTZWN0aW9uRWxlbWVudC5pbm5lckhUTUwgPSAiPHAgY2xhc3M9J3N0YXR1cy1tZXNzYWdlLWdv
b2QnPiBBbGwgdGVzdHMgcGFzc2VkLiA8L3A+IjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0
ZXN0UmVzdWx0c1NlY3Rpb25FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3Qt
cmVzdWx0cy1zZWN0aW9uJyk7CisKKyAgICAgICAgdGVzdFJlc3VsdHNTZWN0aW9uRWxlbWVudC5p
bm5lckhUTUwgKz0gY29uc3RydWN0Tm9uUGFzc2luZ1Rlc3RUYWJsZSgiVGVzdHMgd2l0aCBlcnJv
cnMiLCAiRXJyb3JlZCB0ZXN0cyBhcmUgdGVzdHMgdGhhdCBoaXQgZXhjZXB0aW9ucyBkdXJpbmcg
dGhlaXIgZXhlY3V0aW9uLiIsIHJlc3VsdHMuZXJyb3JzKTsKKyAgICAgICAgdGVzdFJlc3VsdHNT
ZWN0aW9uRWxlbWVudC5pbm5lckhUTUwgKz0gY29uc3RydWN0Tm9uUGFzc2luZ1Rlc3RUYWJsZSgi
VGVzdHMgd2l0aCBmYWlsdXJlcyIsICJGYWlsZWQgdGVzdHMgYXJlIHRlc3RzIHRoYXQgdmlvbGF0
ZWQgb25lIG9yIG1vcmUgYXNzZXJ0aW9ucy4iLCByZXN1bHRzLmZhaWx1cmVzKTsKKyAgICAgICAg
dGVzdFJlc3VsdHNTZWN0aW9uRWxlbWVudC5pbm5lckhUTUwgKz0gY29uc3RydWN0UGFzc2luZ1Rl
c3RUYWJsZSgiVGVzdHMgdGhhdCBwYXNzIiwgIlBhc3NpbmcgdGVzdHMgbmVpdGhlciBoaXQgZXhj
ZXB0aW9ucywgbm9yIHZpb2xhdGVkIGFzc2VydGlvbnMuIiwgcmVzdWx0cy5wYXNzZXMpOworCisg
ICAgfSk7Cit9CisKKzwvc2NyaXB0PgorCis8Ym9keSBvbmxvYWQ9ImdlbmVyYXRlUGFnZSgpIj4K
KyAgICA8ZGl2IGlkPSJtYWluLWNvbnRlbnQiPgorICAgICAgICA8aDEgaWQ9Im1haW4taGVhZGlu
ZyI+VGVzdCBSZXN1bHRzPC9oMT4KKyAgICAgICAgPGRpdiBpZD0ic3RhdHVzLXNlY3Rpb24iPjwv
ZGl2PgorICAgICAgICA8ZGl2IGlkPSJ0ZXN0LXJlc3VsdHMtc2VjdGlvbiI+PC9kaXY+CisgICAg
PC9kaXY+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
c3RlcHMvcnVudGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvcnVu
dGVzdHMucHkKaW5kZXggZWNkNjM1MS4uNmNhOGUwMiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL3N0ZXBzL3J1bnRlc3RzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9zdGVwcy9ydW50ZXN0cy5weQpAQCAtNTgsMTIgKzU4LDE2IEBAIGNsYXNzIFJ1
blRlc3RzKEFic3RyYWN0U3RlcCk6CiAgICAgICAgICAgICBfbG9nLmluZm8oIlJ1bm5pbmcgUHl0
aG9uIHVuaXQgdGVzdHMiKQogICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ub25faW50ZXJh
Y3RpdmU6CiAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSA9IHNlbGYuX3Rvb2wuZmlsZXN5c3Rl
bQotICAgICAgICAgICAgICAgIHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVjdG9yeSA9IHNl
bGYuX3Rvb2wucG9ydF9mYWN0b3J5LmdldCgpLnB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVj
dG9yeSgpCisgICAgICAgICAgICAgICAgcG9ydCA9IHNlbGYuX3Rvb2wucG9ydF9mYWN0b3J5Lmdl
dCgpCisgICAgICAgICAgICAgICAgcHl0aG9uX3VuaXR0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5ID0g
cG9ydC5weXRob25fdW5pdHRlc3RfcmVzdWx0c19kaXJlY3RvcnkoKQogICAgICAgICAgICAgICAg
IGZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3RvcnkocHl0aG9uX3VuaXR0ZXN0X3Jlc3VsdHNf
ZGlyZWN0b3J5KQogCiAgICAgICAgICAgICAgICAgcHl0aG9uX3VuaXR0ZXN0c19jb21tYW5kLmFw
cGVuZCgnLS1qc29uJykKICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl90b29sLmV4ZWN1
dGl2ZS5ydW5fY29tbWFuZChweXRob25fdW5pdHRlc3RzX2NvbW1hbmQsIGN3ZD1zZWxmLl90b29s
LnNjbSgpLmNoZWNrb3V0X3Jvb3QsIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJv
ciwgcmV0dXJuX3N0ZGVycj1GYWxzZSkKICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLndyaXRl
X3RleHRfZmlsZShmaWxlc3lzdGVtLmpvaW4ocHl0aG9uX3VuaXR0ZXN0X3Jlc3VsdHNfZGlyZWN0
b3J5LCAicmVzdWx0cy5qc29uIiksIG91dHB1dCkKKyAgICAgICAgICAgICAgICByZXNvdXJjZXNf
cGF0aCA9IHBvcnQud2Via2l0cHlfcmVzb3VyY2VzX2RpcmVjdG9yeSgpCisgICAgICAgICAgICAg
ICAgZmlsZXN5c3RlbS5jb3B5ZmlsZShmaWxlc3lzdGVtLmpvaW4ocmVzb3VyY2VzX3BhdGgsICJy
ZXN1bHRzLmh0bWwiKSwgZmlsZXN5c3RlbS5qb2luKHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2Rp
cmVjdG9yeSwgInJlc3VsdHMuaHRtbCIpKQorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uY29w
eWZpbGUoZmlsZXN5c3RlbS5qb2luKHJlc291cmNlc19wYXRoLCAicmVzdWx0cy1zdHlsZXNoZWV0
LmNzcyIpLCBmaWxlc3lzdGVtLmpvaW4ocHl0aG9uX3VuaXR0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5
LCAicmVzdWx0cy1zdHlsZXNoZWV0LmNzcyIpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAg
ICAgICAgICBzZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwocHl0aG9u
X3VuaXR0ZXN0c19jb21tYW5kLCBjd2Q9c2VsZi5fdG9vbC5zY20oKS5jaGVja291dF9yb290KQog
Ci0tIAoxLjkuMyAoQXBwbGUgR2l0LTUwKQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240715</attachid>
            <date>2014-10-30 17:27:15 -0700</date>
            <delta_ts>2014-11-03 18:36:54 -0800</delta_ts>
            <desc>Removes jquery</desc>
            <filename>0001-webkitpy-needs-a-results.html-file-to-render-the-res.patch</filename>
            <type>text/plain</type>
            <size>12685</size>
            <attacher name="Jake Nielsen">jake.nielsen.webkit</attacher>
            
              <data encoding="base64">RnJvbSAzZWY5OTM4MzZjMzZiNDAxOTE1Yjc0ZDY2YjhmODZjZWU0ZmNlOTdlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWtlIE5pZWxzZW4gPGphY29iX25pZWxzZW5AYXBwbGUuY29t
PgpEYXRlOiBUaHUsIDMwIE9jdCAyMDE0IDE3OjI2OjI4IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0g
d2Via2l0cHkgbmVlZHMgYSByZXN1bHRzLmh0bWwgZmlsZSB0byByZW5kZXIgdGhlIHJlc3VsdHMu
anNvbgogZmlsZSBmb3IgaHVtYW4gZXllcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzODE2MQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgoqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9iYXNlLnB5OgpBZGRzIHRoZSB3ZWJraXRweV9yZXNvdXJjZXNfZGlyZWN0
b3J5IGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBsb2NhdGlvbgpvZiByZXN1bHRzLmh0bWwgdG8gYmUg
a25vd24gYnkgd2Via2l0cHkgc2NyaXB0cy4KKFBvcnQud2Via2l0cHlfcmVzb3VyY2VzX2RpcmVj
dG9yeSk6CiogU2NyaXB0cy93ZWJraXRweS9yZXNvdXJjZXMvcmVzdWx0cy1zdHlsZXNoZWV0LmNz
czogQWRkZWQuCihib2R5KToKKGgxKToKKHRhYmxlKToKKHRhYmxlLCB0aCwgdGQpOgoodGgsIHRk
KToKKHRkKToKKHRyLnRlc3QtcmVzdWx0IHRkKToKKC5zdGF0dXMtbWVzc2FnZS1iYWQpOgooLnN0
YXR1cy1tZXNzYWdlLWdvb2QpOgooLnRlc3QtcmVzdWx0KToKKHRyLnRlc3QtcmVzdWx0IHRkIHBy
ZSk6Cih0YWJsZVtleHBhbmRlZD0idHJ1ZSJdIHRoOjpiZWZvcmUpOgoodGFibGVbZXhwYW5kZWQ9
ImZhbHNlIl0gdGg6OmJlZm9yZSk6Cih0YWJsZVtleHBhbmRlZD0iZmFsc2UiXSB0Ym9keSk6Cih0
Ym9keVtleHBhbmRlZD0idHJ1ZSJdIHRyLnRlc3QtbmFtZSB0ZDo6YmVmb3JlKToKKHRib2R5W2V4
cGFuZGVkPSJmYWxzZSJdIHRyLnRlc3QtbmFtZSB0ZDo6YmVmb3JlKToKKHRib2R5W2V4cGFuZGVk
PSJmYWxzZSJdIHRyLnRlc3QtcmVzdWx0IHRkKToKKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc291cmNl
cy9yZXN1bHRzLmh0bWw6IEFkZGVkLgoqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9ydW50
ZXN0cy5weToKQWRkcyBhIGZldyBsaW5lcyB0byBjb3B5IHJlc3VsdHMuaHRtbCBhbmQgcmVzdWx0
cy1zdHlsZXNoZWV0LmNzcyBpbnRvCnRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkgYWZ0ZXIgcmVz
dWx0cy5qc29uIGlzIGdlbmVyYXRlZC4KKFJ1blRlc3RzLnJ1bik6Ci0tLQogVG9vbHMvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzYgKysrKysrCiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weSAgICAgICAgICAgICAgICB8ICAgMyArCiAu
Li4vd2Via2l0cHkvcmVzb3VyY2VzL3Jlc3VsdHMtc3R5bGVzaGVldC5jc3MgICAgICB8ICA3NCAr
KysrKysrKysrKysrCiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc291cmNlcy9yZXN1bHRzLmh0
bWwgICAgICB8IDEyMyArKysrKysrKysrKysrKysrKysrKysKIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9zdGVwcy9ydW50ZXN0cy5weSAgICAgIHwgICA2ICstCiA1IGZpbGVzIGNoYW5nZWQs
IDI0MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9yZXNvdXJjZXMvcmVzdWx0cy1zdHlsZXNoZWV0LmNzcwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzb3VyY2VzL3Jlc3VsdHMu
aHRtbAoKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCA3ZjVkYjQyLi4wYzMwMThmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTQtMTAtMjkgIEpha2UgTmllbHNlbiAg
PGphY29iX25pZWxzZW5AYXBwbGUuY29tPgorCisgICAgICAgIHdlYmtpdHB5IG5lZWRzIGEgcmVz
dWx0cy5odG1sIGZpbGUgdG8gcmVuZGVyIHRoZSByZXN1bHRzLmpzb24gZmlsZSBmb3IKKyAgICAg
ICAgaHVtYW4gZXllcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzODE2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIEFkZHMgdGhl
IHdlYmtpdHB5X3Jlc291cmNlc19kaXJlY3RvcnkgZnVuY3Rpb24gdG8gYWxsb3cgdGhlIGxvY2F0
aW9uCisgICAgICAgIG9mIHJlc3VsdHMuaHRtbCB0byBiZSBrbm93biBieSB3ZWJraXRweSBzY3Jp
cHRzLgorICAgICAgICAoUG9ydC53ZWJraXRweV9yZXNvdXJjZXNfZGlyZWN0b3J5KToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc291cmNlcy9yZXN1bHRzLXN0eWxlc2hlZXQuY3NzOiBB
ZGRlZC4KKyAgICAgICAgKGJvZHkpOgorICAgICAgICAoaDEpOgorICAgICAgICAodGFibGUpOgor
ICAgICAgICAodGFibGUsIHRoLCB0ZCk6CisgICAgICAgICh0aCwgdGQpOgorICAgICAgICAodGQp
OgorICAgICAgICAodHIudGVzdC1yZXN1bHQgdGQpOgorICAgICAgICAoLnN0YXR1cy1tZXNzYWdl
LWJhZCk6CisgICAgICAgICguc3RhdHVzLW1lc3NhZ2UtZ29vZCk6CisgICAgICAgICgudGVzdC1y
ZXN1bHQpOgorICAgICAgICAodHIudGVzdC1yZXN1bHQgdGQgcHJlKToKKyAgICAgICAgKHRhYmxl
W2V4cGFuZGVkPSJ0cnVlIl0gdGg6OmJlZm9yZSk6CisgICAgICAgICh0YWJsZVtleHBhbmRlZD0i
ZmFsc2UiXSB0aDo6YmVmb3JlKToKKyAgICAgICAgKHRhYmxlW2V4cGFuZGVkPSJmYWxzZSJdIHRi
b2R5KToKKyAgICAgICAgKHRib2R5W2V4cGFuZGVkPSJ0cnVlIl0gdHIudGVzdC1uYW1lIHRkOjpi
ZWZvcmUpOgorICAgICAgICAodGJvZHlbZXhwYW5kZWQ9ImZhbHNlIl0gdHIudGVzdC1uYW1lIHRk
OjpiZWZvcmUpOgorICAgICAgICAodGJvZHlbZXhwYW5kZWQ9ImZhbHNlIl0gdHIudGVzdC1yZXN1
bHQgdGQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzb3VyY2VzL3Jlc3VsdHMuaHRt
bDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3J1bnRlc3Rz
LnB5OgorICAgICAgICBBZGRzIGEgZmV3IGxpbmVzIHRvIGNvcHkgcmVzdWx0cy5odG1sIGFuZCBy
ZXN1bHRzLXN0eWxlc2hlZXQuY3NzIGludG8KKyAgICAgICAgdGhlIGFwcHJvcHJpYXRlIGRpcmVj
dG9yeSBhZnRlciByZXN1bHRzLmpzb24gaXMgZ2VuZXJhdGVkLgorICAgICAgICAoUnVuVGVzdHMu
cnVuKToKKwogMjAxNC0xMC0yOSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFtFRkxdIGJ1aWxkLXdlYmtpdCBzaG91bGQgdHJ5IGhhcmRlciB0byBhdm9p
ZCByZS1ydW5uaW5nIGNtYWtlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CmluZGV4IDNk
MGQ0ZWIuLmFkYzQ2NDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9i
YXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CkBAIC03ODgs
NiArNzg4LDkgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgIGRlZiBweXRob25fdW5pdHRlc3Rf
cmVzdWx0c19kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRo
KCdweXRob24tdW5pdHRlc3QtcmVzdWx0cycpCiAKKyAgICBkZWYgd2Via2l0cHlfcmVzb3VyY2Vz
X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX3dlYmtpdF9i
YXNlKCJUb29scyIsICJTY3JpcHRzIiwgIndlYmtpdHB5IiwgInJlc291cmNlcyIpCisKICAgICBk
ZWYgZGVmYXVsdF9yZXN1bHRzX2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgIiIiQWJzb2x1dGUg
cGF0aCB0byB0aGUgZGVmYXVsdCBwbGFjZSB0byBzdG9yZSB0aGUgdGVzdCByZXN1bHRzLiIiIgog
ICAgICAgICAjIFJlc3VsdHMgYXJlIHN0b3JlIHJlbGF0aXZlIHRvIHRoZSBidWlsdCBwcm9kdWN0
cyB0byBtYWtlIGl0IGVhc3kKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVz
b3VyY2VzL3Jlc3VsdHMtc3R5bGVzaGVldC5jc3MgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Jl
c291cmNlcy9yZXN1bHRzLXN0eWxlc2hlZXQuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjk3NTNiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Jlc291cmNlcy9yZXN1bHRzLXN0eWxlc2hlZXQuY3NzCkBAIC0wLDAgKzEsNzQgQEAKK2Jv
ZHkgeworICAgIGZvbnQtc2l6ZToxNHB4OworICAgIGZvbnQtZmFtaWx5OnZlcmRhbmE7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Cit9CisKK2gxIHsKKyAgICBmb250LXNpemU6MTZweDsK
K30KKwordGFibGUgeworICAgIHBhZGRpbmc6IDJweDsKKyAgICBtaW4td2lkdGg6IDIwMHB4Owor
ICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cit9CisKK3RhYmxlLCB0aCwgdGQgeworICAgIHRleHQt
YWxpZ246IGxlZnQ7Cit9CisKK3RoLCB0ZCB7CisgICAgcGFkZGluZzogNnB4OworfQorCit0ZCB7
CisgICAgcGFkZGluZy1sZWZ0OiAzMHB4OworfQorCit0ci50ZXN0LXJlc3VsdCB0ZCB7CisgICAg
cGFkZGluZy1sZWZ0OiA2MHB4OworfQorCisuc3RhdHVzLW1lc3NhZ2UtYmFkIHsKKyAgICBjb2xv
cjpyZWQ7Cit9CisKKy5zdGF0dXMtbWVzc2FnZS1nb29kIHsKKyAgICBjb2xvcjpncmVlbjsKK30K
KworLnRlc3QtcmVzdWx0IHsKKyAgICBmb250LWZhbWlseTogIkNvdXJpZXIgTmV3IjsKK30KKwor
dHIudGVzdC1yZXN1bHQgdGQgcHJlIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAgICBiYWNr
Z3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBwYWRkaW5nOiA2cHg7Cit9CisKKwordGFibGVbZXhw
YW5kZWQ9InRydWUiXSB0aDo6YmVmb3JleworICAgIGNvbnRlbnQ6IlwwMDI1QkNcICI7Cit9CisK
K3RhYmxlW2V4cGFuZGVkPSJmYWxzZSJdIHRoOjpiZWZvcmV7CisgICAgY29udGVudDoiXDAwMjVC
QVwgIjsKK30KKwordGFibGVbZXhwYW5kZWQ9ImZhbHNlIl0gdGJvZHl7CisgICAgZGlzcGxheTpu
b25lOworfQorCit0Ym9keVtleHBhbmRlZD0idHJ1ZSJdIHRyLnRlc3QtbmFtZSB0ZDo6YmVmb3Jl
eworICAgIGNvbnRlbnQ6IlwwMDI1QkNcICI7Cit9CisKK3Rib2R5W2V4cGFuZGVkPSJmYWxzZSJd
IHRyLnRlc3QtbmFtZSB0ZDo6YmVmb3JleworICAgIGNvbnRlbnQ6IlwwMDI1QkFcICI7Cit9CisK
K3Rib2R5W2V4cGFuZGVkPSJmYWxzZSJdIHRyLnRlc3QtcmVzdWx0IHRkeworICAgIGRpc3BsYXk6
bm9uZTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Jlc291cmNlcy9yZXN1bHRzLmh0bWwgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc291cmNlcy9yZXN1bHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uM2ZkYTEyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Jlc291cmNlcy9yZXN1bHRzLmh0bWwKQEAgLTAsMCArMSwxMjMgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0icmVzdWx0
cy1zdHlsZXNoZWV0LmNzcyI+CisKKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7Cit2YXIgZ19yZXN1
bHRzRmlsZSA9ICJyZXN1bHRzLmpzb24iCisKK3ZhciBnX3N0YXRlOwordmFyIGdfdGFibGVJRHMg
PSAwOwordmFyIGdfdGVzdFJvd0lEcyA9IDA7Cit2YXIgZ19FeHBhbmRlZEF0dHJpYnV0ZU5hbWUg
PSAiZXhwYW5kZWQiOworCitmdW5jdGlvbiBwb3BUYWJsZUlEKCl7CisgICAgZ190YWJsZUlEcysr
OworICAgIHZhciBwb3BwZWRUYWJsZUlEID0gInRhYmxlIiArIChnX3RhYmxlSURzIC0gMSk7Cisg
ICAgcmV0dXJuIHBvcHBlZFRhYmxlSUQ7Cit9CisKK2Z1bmN0aW9uIHBvcFRlc3RSb3dJRCgpewor
ICAgIGdfdGVzdFJvd0lEcysrOworICAgIHZhciBwb3BwZWRUZXN0Um93SURzID0gInRlc3RSb3ci
ICsgKGdfdGVzdFJvd0lEcyAtIDEpOworICAgIHJldHVybiBwb3BwZWRUZXN0Um93SURzOworfQor
CitmdW5jdGlvbiB0b2dnbGVBdHRyaWJ1dGUoZWxlbWVudElELCBhdHRyaWJ1dGVOYW1lKXsKKyAg
ICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJRCk7CisKKyAg
ICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKQorICAgIHsKKyAgICAg
ICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwidHJ1ZSIpOworICAgIH0KKwor
ICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA9PT0gInRydWUiKQor
ICAgIHsKKyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwiZmFsc2Ui
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVO
YW1lLCJ0cnVlIik7CisgICAgfQorCisgICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0
dHJpYnV0ZU5hbWUpID09PSAidHJ1ZSI7Cit9CisKK2Z1bmN0aW9uIGNvbnN0cnVjdE5vblBhc3Np
bmdUZXN0VGFibGUodGFibGVUaXRsZSwgdGFibGVNZXNzYWdlLCBsaXN0T2ZFcnJvcnNPckZhaWx1
cmVzKSB7CisgICAgdmFyIHJlc3VsdGluZ1RhYmxlSFRNTCA9ICIiOworICAgIGlmIChsaXN0T2ZF
cnJvcnNPckZhaWx1cmVzLmxlbmd0aCA+IDApeworICAgICAgICB2YXIgY3VycmVudFRhYmxlSUQg
PSBwb3BUYWJsZUlEKCk7CisgICAgICAgIHJlc3VsdGluZ1RhYmxlSFRNTCA9ICI8dGFibGUgY2xh
c3M9J25vbi1wYXNzaW5nLXRhYmxlJyBpZD1cIiIgKyBjdXJyZW50VGFibGVJRCArICJcIiAiICsg
Z19FeHBhbmRlZEF0dHJpYnV0ZU5hbWUgKyAiPVwidHJ1ZVwiPiI7CisgICAgICAgIHJlc3VsdGlu
Z1RhYmxlSFRNTCArPSAiPHRoZWFkIG9uQ2xpY2s9XCJ0b2dnbGVBdHRyaWJ1dGUoJyIgKyBjdXJy
ZW50VGFibGVJRCArICInLCAnIiArIGdfRXhwYW5kZWRBdHRyaWJ1dGVOYW1lICsgIicpXCI+IDx0
cj4gPHRoPiIgKyB0YWJsZVRpdGxlICsgIjwvdGg+IDwvdHI+IDwvdGhlYWQ+IjsKKyAgICAgICAg
cmVzdWx0aW5nVGFibGVIVE1MICs9ICI8dGJvZHk+IDx0cj4gPHRkPiA8c3Ryb25nPiIgKyB0YWJs
ZU1lc3NhZ2UgKyAiPC9zdHJvbmc+IDwvdGQ+IDwvdHI+IDwvdGJvZHk+IjsKKyAgICAgICAgdmFy
IGluZGV4OworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsaXN0T2ZFcnJvcnNPckZh
aWx1cmVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGN1cnJlbnRUZXN0Um93
SUQgPSBwb3BUZXN0Um93SUQoKTsKKyAgICAgICAgICAgIHJlc3VsdGluZ1RhYmxlSFRNTCArPSAi
PHRib2R5IGlkPVwiIiArIGN1cnJlbnRUZXN0Um93SUQgKyAiXCIgIiArIGdfRXhwYW5kZWRBdHRy
aWJ1dGVOYW1lICsgIj1cImZhbHNlXCI+IDx0ciBjbGFzcz0ndGVzdC1uYW1lJyBvbkNsaWNrPVwi
dG9nZ2xlQXR0cmlidXRlKCciICsgY3VycmVudFRlc3RSb3dJRCArICInLCAnIiArIGdfRXhwYW5k
ZWRBdHRyaWJ1dGVOYW1lICsgIicpXCI+IDx0ZD4iICsgbGlzdE9mRXJyb3JzT3JGYWlsdXJlc1tp
bmRleF0ubmFtZSArICI8L3RkPiA8L3RyPiI7CisgICAgICAgICAgICByZXN1bHRpbmdUYWJsZUhU
TUwgKz0gIjx0ciBjbGFzcz0ndGVzdC1yZXN1bHQnPiA8dGQ+IDxwcmU+IiArIGxpc3RPZkVycm9y
c09yRmFpbHVyZXNbaW5kZXhdLnJlc3VsdCArICI8L3ByZT4gPC90ZD4gPC90cj4gPC90Ym9keT4i
OworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0aW5nVGFibGVIVE1MICs9ICI8L3RhYmxlPiI7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdGluZ1RhYmxlSFRNTDsKK30KKworZnVuY3Rpb24g
Y29uc3RydWN0UGFzc2luZ1Rlc3RUYWJsZSh0YWJsZVRpdGxlLCB0YWJsZU1lc3NhZ2UsIGxpc3RP
ZlRlc3RzKSB7CisgICAgdmFyIGN1cnJlbnRUYWJsZUlEID0gcG9wVGFibGVJRCgpOworICAgIHZh
ciByZXN1bHRpbmdUYWJsZUhUTUwgPSAiPHRhYmxlIGNsYXNzPSdwYXNzaW5nLXRhYmxlJyBpZD1c
IiIgKyBjdXJyZW50VGFibGVJRCArICJcIiAiICsgZ19FeHBhbmRlZEF0dHJpYnV0ZU5hbWUgKyAi
PVwiZmFsc2VcIj4iOworICAgIHJlc3VsdGluZ1RhYmxlSFRNTCArPSAiPHRoZWFkIG9uQ2xpY2s9
XCJ0b2dnbGVBdHRyaWJ1dGUoJyIgKyBjdXJyZW50VGFibGVJRCArICInLCAnIiArIGdfRXhwYW5k
ZWRBdHRyaWJ1dGVOYW1lICsgIicpXCI+IDx0cj4gPHRoPiIgKyB0YWJsZVRpdGxlICsgIjwvdGg+
IDwvdHI+IDwvdGhlYWQ+IjsKKyAgICByZXN1bHRpbmdUYWJsZUhUTUwgKz0gIjx0Ym9keT4gPHRy
PiA8dGQ+IDxzdHJvbmc+IiArIHRhYmxlTWVzc2FnZSArICI8L3N0cm9uZz4gPC90ZD4gPC90cj4g
PC90Ym9keT4iOworICAgIHZhciBpbmRleDsKKyAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBs
aXN0T2ZUZXN0cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgcmVzdWx0aW5nVGFibGVIVE1M
ICs9ICI8dGJvZHk+IDx0cj4gPHRkPiIgKyBsaXN0T2ZUZXN0c1tpbmRleF0gKyAiPC90ZD4gPC90
cj4gPC90Ym9keT4iOworICAgIH0KKworICAgIHJlc3VsdGluZ1RhYmxlSFRNTCArPSAiPC90YWJs
ZT4iOworCisgICAgcmV0dXJuIHJlc3VsdGluZ1RhYmxlSFRNTDsKK30KKworZnVuY3Rpb24gZ2Vu
ZXJhdGVQYWdlRnJvbUpzb24odGV4dCl7CisgICAgdmFyIHJlc3VsdHMgPSBKU09OLnBhcnNlKHRl
eHQpOworCisgICAgLy8gVE9ETzogV2Ugc2hvdWxkIHJlYWxseSBwdWxsIGEgbmFtZSBmcm9tIHRo
ZSByZXN1bHRzLmpzb24gZmlsZS4gIlB5dGhvbiBVbml0dGVzdCIgb3Igc29tZSBzdWNoLAorICAg
IC8vIGFuZCBzZXQgdGhlIG1haW4taGVhZGluZyBlbGVtZW50IHRvIHNvbWV0aGluZyBsZXNzIGdl
bmVyaWMuCisKKyAgICB2YXIgc3RhdHVzU2VjdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc3RhdHVzLXNlY3Rpb24nKTsKKyAgICB2YXIgbnVtYmVyT2ZOb25QYXNzaW5nVGVz
dHMgPSByZXN1bHRzLmVycm9ycy5sZW5ndGggKyByZXN1bHRzLmZhaWx1cmVzLmxlbmd0aDsKKyAg
ICBpZiAobnVtYmVyT2ZOb25QYXNzaW5nVGVzdHMgPiAxKSB7CisgICAgICAgIHN0YXR1c1NlY3Rp
b25FbGVtZW50LmlubmVySFRNTCA9ICI8cCBjbGFzcz0nc3RhdHVzLW1lc3NhZ2UtYmFkJz4gIiAr
IG51bWJlck9mTm9uUGFzc2luZ1Rlc3RzICsiIHRlc3RzIGRpZCBub3QgcGFzcy4gPC9wPiI7Cisg
ICAgfSBlbHNlIGlmIChudW1iZXJPZk5vblBhc3NpbmdUZXN0cyA9PT0gMSkgeworICAgICAgICBz
dGF0dXNTZWN0aW9uRWxlbWVudC5pbm5lckhUTUwgPSAiPHAgY2xhc3M9J3N0YXR1cy1tZXNzYWdl
LWJhZCc+ICIgKyBudW1iZXJPZk5vblBhc3NpbmdUZXN0cyArIiB0ZXN0IGRpZCBub3QgcGFzcy4g
PC9wPiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdHVzU2VjdGlvbkVsZW1lbnQuaW5uZXJI
VE1MID0gIjxwIGNsYXNzPSdzdGF0dXMtbWVzc2FnZS1nb29kJz4gQWxsIHRlc3RzIHBhc3NlZC4g
PC9wPiI7CisgICAgfQorCisgICAgdmFyIHRlc3RSZXN1bHRzU2VjdGlvbkVsZW1lbnQgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdC1yZXN1bHRzLXNlY3Rpb24nKTsKKworICAgIHRlc3RS
ZXN1bHRzU2VjdGlvbkVsZW1lbnQuaW5uZXJIVE1MICs9IGNvbnN0cnVjdE5vblBhc3NpbmdUZXN0
VGFibGUoIlRlc3RzIHdpdGggZXJyb3JzIiwgIkVycm9yZWQgdGVzdHMgYXJlIHRlc3RzIHRoYXQg
aGl0IGV4Y2VwdGlvbnMgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvbi4iLCByZXN1bHRzLmVycm9ycyk7
CisgICAgdGVzdFJlc3VsdHNTZWN0aW9uRWxlbWVudC5pbm5lckhUTUwgKz0gY29uc3RydWN0Tm9u
UGFzc2luZ1Rlc3RUYWJsZSgiVGVzdHMgd2l0aCBmYWlsdXJlcyIsICJGYWlsZWQgdGVzdHMgYXJl
IHRlc3RzIHRoYXQgdmlvbGF0ZWQgb25lIG9yIG1vcmUgYXNzZXJ0aW9ucy4iLCByZXN1bHRzLmZh
aWx1cmVzKTsKKyAgICB0ZXN0UmVzdWx0c1NlY3Rpb25FbGVtZW50LmlubmVySFRNTCArPSBjb25z
dHJ1Y3RQYXNzaW5nVGVzdFRhYmxlKCJUZXN0cyB0aGF0IHBhc3MiLCAiUGFzc2luZyB0ZXN0cyBu
ZWl0aGVyIGhpdCBleGNlcHRpb25zLCBub3IgdmlvbGF0ZWQgYXNzZXJ0aW9ucy4iLCByZXN1bHRz
LnBhc3Nlcyk7CisKK30KKworZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkgeworICAgIHZhciB4b2Jq
ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeG9iai5vdmVycmlkZU1pbWVUeXBlKCJhcHBs
aWNhdGlvbi9qc29uIik7CisgICAgeG9iai5vcGVuKCdHRVQnLCBnX3Jlc3VsdHNGaWxlLCB0cnVl
KTsKKyAgICB4b2JqLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKHhvYmoucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgICBnZW5lcmF0ZVBhZ2VGcm9t
SnNvbih4b2JqLnJlc3BvbnNlVGV4dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgeG9iai5zZW5k
KG51bGwpOworfQorCis8L3NjcmlwdD4KKworPGJvZHkgb25sb2FkPSJnZW5lcmF0ZVBhZ2UoKSI+
CisgICAgPGRpdiBpZD0ibWFpbi1jb250ZW50Ij4KKyAgICAgICAgPHNvdXJjZSBpZD0idGVzdHRl
c3QiIHNyYz0icmVzdWx0cy5qc29uIj48L3NvdXJjZT4KKyAgICAgICAgPGgxIGlkPSJtYWluLWhl
YWRpbmciPlRlc3QgUmVzdWx0czwvaDE+CisgICAgICAgIDxkaXYgaWQ9InN0YXR1cy1zZWN0aW9u
Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0idGVzdC1yZXN1bHRzLXNlY3Rpb24iPjwvZGl2Pgor
ICAgIDwvZGl2PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL3N0ZXBzL3J1bnRlc3RzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBz
L3J1bnRlc3RzLnB5CmluZGV4IGVjZDYzNTEuLjZjYThlMDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9ydW50ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc3RlcHMvcnVudGVzdHMucHkKQEAgLTU4LDEyICs1OCwxNiBAQCBjbGFz
cyBSdW5UZXN0cyhBYnN0cmFjdFN0ZXApOgogICAgICAgICAgICAgX2xvZy5pbmZvKCJSdW5uaW5n
IFB5dGhvbiB1bml0IHRlc3RzIikKICAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMubm9uX2lu
dGVyYWN0aXZlOgogICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gPSBzZWxmLl90b29sLmZpbGVz
eXN0ZW0KLSAgICAgICAgICAgICAgICBweXRob25fdW5pdHRlc3RfcmVzdWx0c19kaXJlY3Rvcnkg
PSBzZWxmLl90b29sLnBvcnRfZmFjdG9yeS5nZXQoKS5weXRob25fdW5pdHRlc3RfcmVzdWx0c19k
aXJlY3RvcnkoKQorICAgICAgICAgICAgICAgIHBvcnQgPSBzZWxmLl90b29sLnBvcnRfZmFjdG9y
eS5nZXQoKQorICAgICAgICAgICAgICAgIHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVjdG9y
eSA9IHBvcnQucHl0aG9uX3VuaXR0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5KCkKICAgICAgICAgICAg
ICAgICBmaWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KHB5dGhvbl91bml0dGVzdF9yZXN1
bHRzX2RpcmVjdG9yeSkKIAogICAgICAgICAgICAgICAgIHB5dGhvbl91bml0dGVzdHNfY29tbWFu
ZC5hcHBlbmQoJy0tanNvbicpCiAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5fdG9vbC5l
eGVjdXRpdmUucnVuX2NvbW1hbmQocHl0aG9uX3VuaXR0ZXN0c19jb21tYW5kLCBjd2Q9c2VsZi5f
dG9vbC5zY20oKS5jaGVja291dF9yb290LCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVf
ZXJyb3IsIHJldHVybl9zdGRlcnI9RmFsc2UpCiAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS53
cml0ZV90ZXh0X2ZpbGUoZmlsZXN5c3RlbS5qb2luKHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2Rp
cmVjdG9yeSwgInJlc3VsdHMuanNvbiIpLCBvdXRwdXQpCisgICAgICAgICAgICAgICAgcmVzb3Vy
Y2VzX3BhdGggPSBwb3J0LndlYmtpdHB5X3Jlc291cmNlc19kaXJlY3RvcnkoKQorICAgICAgICAg
ICAgICAgIGZpbGVzeXN0ZW0uY29weWZpbGUoZmlsZXN5c3RlbS5qb2luKHJlc291cmNlc19wYXRo
LCAicmVzdWx0cy5odG1sIiksIGZpbGVzeXN0ZW0uam9pbihweXRob25fdW5pdHRlc3RfcmVzdWx0
c19kaXJlY3RvcnksICJyZXN1bHRzLmh0bWwiKSkKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVt
LmNvcHlmaWxlKGZpbGVzeXN0ZW0uam9pbihyZXNvdXJjZXNfcGF0aCwgInJlc3VsdHMtc3R5bGVz
aGVldC5jc3MiKSwgZmlsZXN5c3RlbS5qb2luKHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVj
dG9yeSwgInJlc3VsdHMtc3R5bGVzaGVldC5jc3MiKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICAgICAgc2VsZi5fdG9vbC5leGVjdXRpdmUucnVuX2FuZF90aHJvd19pZl9mYWlsKHB5
dGhvbl91bml0dGVzdHNfY29tbWFuZCwgY3dkPXNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tvdXRfcm9v
dCkKIAotLSAKMS45LjMgKEFwcGxlIEdpdC01MCkKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240897</attachid>
            <date>2014-11-03 18:36:54 -0800</date>
            <delta_ts>2015-01-21 14:11:58 -0800</delta_ts>
            <desc>Cleaner implementation</desc>
            <filename>0001-webkitpy-needs-a-results.html-file-to-render-the-res.patch</filename>
            <type>text/plain</type>
            <size>9348</size>
            <attacher name="Jake Nielsen">jake.nielsen.webkit</attacher>
            
              <data encoding="base64">RnJvbSA2NGEwMmE5M2JmMjQwZmY2YmZiZmU4NmEzODAyMzY3ZmZkYzQ4YjdkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWtlIE5pZWxzZW4gPGphY29iX25pZWxzZW5AYXBwbGUuY29t
PgpEYXRlOiBNb24sIDMgTm92IDIwMTQgMTg6MTg6MzYgLTA4MDAKU3ViamVjdDogW1BBVENIXSB3
ZWJraXRweSBuZWVkcyBhIHJlc3VsdHMuaHRtbCBmaWxlIHRvIHJlbmRlciB0aGUgcmVzdWx0cy5q
c29uCiBmaWxlIGZvciBodW1hbiBleWVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM4MTYxCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogU2NyaXB0cy9y
ZXNvdXJjZXMvcmVzdWx0cy1zdHlsZXNoZWV0LmNzczogQWRkZWQuClN0eWxlIHNoZWV0IGZvciBy
ZXN1bHRzLmh0bWwKKGJvZHkpOgooaDEpOgoodGFibGUsIHRoLCB0ZCk6Cih0YWJsZSk6Cih0aCk6
Cih0ZCk6CihwcmUpOgooLnN0YXR1cy1tZXNzYWdlLWJhZCk6Ciguc3RhdHVzLW1lc3NhZ2UtZ29v
ZCk6Cih0ci50ZXN0LXJlc3VsdCB0ZCk6CiguY29sbGFwc2VkIC5yZW1vdmFibGUpOgooLmNvbGxh
cHNhYmxlIHRoOjpiZWZvcmUpOgooLmNvbGxhcHNlZCB0aDo6YmVmb3JlKToKKiBTY3JpcHRzL3Jl
c291cmNlcy9yZXN1bHRzLmh0bWw6IEFkZGVkLgoqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNl
LnB5OgpBZGRzIHRoZSBzY3JpcHRfcmVzb3VyY2VzX2RpcmVjdG9yeSBmdW5jdGlvbiB0byBhbGxv
dyBydW50ZXN0cyB0byBjb3B5CnJlc3VsdHMuaHRtbCBhbmQgcmVzdWx0cy1zdHlsZXNoZWV0LmNz
cyBpbnRvIHRoZSBhcHByb3ByaWF0ZQpkaXJlY3RvcnkuCihQb3J0LnNjcmlwdF9yZXNvdXJjZXNf
ZGlyZWN0b3J5KToKKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvcnVudGVzdHMucHk6CkNv
cGllcyBmaWxlcyBhcyBwZXIgY29tbWVudCBhYm92ZS4KKFJ1blRlc3RzLnJ1bik6Ci0tLQogVG9v
bHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMzICsrKysrKysr
KysrKwogVG9vbHMvU2NyaXB0cy9yZXNvdXJjZXMvcmVzdWx0cy1zdHlsZXNoZWV0LmNzcyB8IDU3
ICsrKysrKysrKysrKysrKysrKysrCiBUb29scy9TY3JpcHRzL3Jlc291cmNlcy9yZXN1bHRzLmh0
bWwgICAgICAgICAgIHwgNzMgKysrKysrKysrKysrKysrKysrKysrKysrKysKIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5ICAgICAgICAgICAgfCAgMyArKwogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL3N0ZXBzL3J1bnRlc3RzLnB5ICB8ICA2ICsrLQogNSBmaWxlcyBjaGFu
Z2VkLCAxNzEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0
IFRvb2xzL1NjcmlwdHMvcmVzb3VyY2VzL3Jlc3VsdHMtc3R5bGVzaGVldC5jc3MKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBUb29scy9TY3JpcHRzL3Jlc291cmNlcy9yZXN1bHRzLmh0bWwKCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2Y1ZGI0Mi4uMTZm
NmFiNyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM2IEBACisyMDE0LTExLTAzICBKYWtlIE5pZWxzZW4gIDxqYWNvYl9uaWVsc2Vu
QGFwcGxlLmNvbT4KKworICAgICAgICB3ZWJraXRweSBuZWVkcyBhIHJlc3VsdHMuaHRtbCBmaWxl
IHRvIHJlbmRlciB0aGUgcmVzdWx0cy5qc29uIGZpbGUgZm9yCisgICAgICAgIGh1bWFuIGV5ZXMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgxNjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlw
dHMvcmVzb3VyY2VzL3Jlc3VsdHMtc3R5bGVzaGVldC5jc3M6IEFkZGVkLgorICAgICAgICBTdHls
ZSBzaGVldCBmb3IgcmVzdWx0cy5odG1sCisgICAgICAgIChib2R5KToKKyAgICAgICAgKGgxKToK
KyAgICAgICAgKHRhYmxlLCB0aCwgdGQpOgorICAgICAgICAodGFibGUpOgorICAgICAgICAodGgp
OgorICAgICAgICAodGQpOgorICAgICAgICAocHJlKToKKyAgICAgICAgKC5zdGF0dXMtbWVzc2Fn
ZS1iYWQpOgorICAgICAgICAoLnN0YXR1cy1tZXNzYWdlLWdvb2QpOgorICAgICAgICAodHIudGVz
dC1yZXN1bHQgdGQpOgorICAgICAgICAoLmNvbGxhcHNlZCAucmVtb3ZhYmxlKToKKyAgICAgICAg
KC5jb2xsYXBzYWJsZSB0aDo6YmVmb3JlKToKKyAgICAgICAgKC5jb2xsYXBzZWQgdGg6OmJlZm9y
ZSk6CisgICAgICAgICogU2NyaXB0cy9yZXNvdXJjZXMvcmVzdWx0cy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToKKyAgICAgICAgQWRkcyB0aGUg
c2NyaXB0X3Jlc291cmNlc19kaXJlY3RvcnkgZnVuY3Rpb24gdG8gYWxsb3cgcnVudGVzdHMgdG8g
Y29weQorICAgICAgICByZXN1bHRzLmh0bWwgYW5kIHJlc3VsdHMtc3R5bGVzaGVldC5jc3MgaW50
byB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAoUG9ydC5zY3Jp
cHRfcmVzb3VyY2VzX2RpcmVjdG9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29s
L3N0ZXBzL3J1bnRlc3RzLnB5OgorICAgICAgICBDb3BpZXMgZmlsZXMgYXMgcGVyIGNvbW1lbnQg
YWJvdmUuCisgICAgICAgIChSdW5UZXN0cy5ydW4pOgorCiAyMDE0LTEwLTI5ICBDc2FiYSBPc3p0
cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0VGTF0gYnVpbGQtd2Via2l0
IHNob3VsZCB0cnkgaGFyZGVyIHRvIGF2b2lkIHJlLXJ1bm5pbmcgY21ha2UKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvcmVzb3VyY2VzL3Jlc3VsdHMtc3R5bGVzaGVldC5jc3MgYi9Ub29scy9T
Y3JpcHRzL3Jlc291cmNlcy9yZXN1bHRzLXN0eWxlc2hlZXQuY3NzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQ3YjdlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3Jlc291cmNlcy9yZXN1bHRzLXN0eWxlc2hlZXQuY3NzCkBAIC0wLDAgKzEsNTcgQEAKK2Jv
ZHkgeworICAgIGZvbnQtc2l6ZTogMTRweDsKKyAgICBmb250LWZhbWlseTogdmVyZGFuYTsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKK30KKworaDEgeworICAgIGZvbnQtc2l6ZTogMTZw
eDsKK30KKwordGFibGUsIHRoLCB0ZCB7CisgICAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFi
bGUgeworICAgIHBhZGRpbmc6IDJweDsKKyAgICBtaW4td2lkdGg6IDIwMHB4OworfQorCit0aCB7
CisgICAgcGFkZGluZzogNnB4OworfQorCit0ZCB7CisgICAgcGFkZGluZy1sZWZ0OiAzMHB4Owor
fQorCitwcmUgeworICAgIGZvbnQtZmFtaWx5OiAiQ291cmllciBOZXciOworICAgIGJvcmRlcjog
MXB4IHNvbGlkOworICAgIGJhY2tncm91bmQtY29sb3I6ICNFM0UzRTM7CisgICAgcGFkZGluZzog
NnB4OworfQorCisuc3RhdHVzLW1lc3NhZ2UtYmFkIHsKKyAgICBjb2xvcjogcmVkOworfQorCisu
c3RhdHVzLW1lc3NhZ2UtZ29vZCB7CisgICAgY29sb3I6IGdyZWVuOworfQorCit0ci50ZXN0LXJl
c3VsdCB0ZCB7CisgICAgcGFkZGluZy1sZWZ0OiA2MHB4OworfQorCisuY29sbGFwc2VkIC5yZW1v
dmFibGUgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5jb2xsYXBzYWJsZSB0aDo6YmVmb3Jl
eworICAgIGNvbnRlbnQ6ICJcMDAyNUJDXCAiOworfQorCisuY29sbGFwc2VkIHRoOjpiZWZvcmV7
CisgICAgY29udGVudDogIlwwMDI1QkFcICI7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3Jlc291cmNlcy9yZXN1bHRzLmh0bWwgYi9Ub29scy9TY3JpcHRzL3Jlc291cmNlcy9yZXN1bHRz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmMGNjZQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvcmVzb3VyY2VzL3Jlc3VsdHMuaHRtbApAQCAtMCww
ICsxLDczIEBACis8IURPQ1RZUEUgaHRtbD4KKworPGhlYWQ+CisgICAgPHRpdGxlPlRlc3QgUmVz
dWx0czwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXN1bHRzLXN0
eWxlc2hlZXQuY3NzIj4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxoMT5UZXN0IFJlc3VsdHM8L2gx
PgorICAgIDxkaXYgaWQ9InN0YXR1cy1zZWN0aW9uIj48L2Rpdj4KKyAgICA8ZGl2IGlkPSJ0ZXN0
LXJlc3VsdHMtc2VjdGlvbiI+PC9kaXY+Cis8L2JvZHk+CisKKzxzY3JpcHQ+CisidXNlIHN0cmlj
dCI7Cit2YXIgZ19yZXN1bHRzRmlsZSA9ICJyZXN1bHRzLmpzb24iCisKK2Z1bmN0aW9uIHRvZ2ds
ZUNvbGxhcHNlZChlbGVtZW50KXsKKyAgICBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoImNvbGxh
cHNlZCIpOworfQorCitmdW5jdGlvbiBjb25zdHJ1Y3RDb2xsYXBzYWJsZVRhYmxlKHRhYmxlVGl0
bGUsIGxpc3RPZlJlbW92YWJsZUVsZW1lbnRzKQoreworICAgIHZhciByZXN1bHRpbmdUYWJsZUhU
TUwgPSAiPHRhYmxlIGNsYXNzPSdjb2xsYXBzYWJsZSc+IjsKKyAgICByZXN1bHRpbmdUYWJsZUhU
TUwgKz0gIjx0aGVhZCBvbkNsaWNrPSd0b2dnbGVDb2xsYXBzZWQodGhpcy5wYXJlbnROb2RlKSc+
IDx0cj4gPHRoPiIgKyB0YWJsZVRpdGxlICsgIjwvdGg+IDwvdHI+IDwvdGhlYWQ+IjsKKyAgICBy
ZXN1bHRpbmdUYWJsZUhUTUwgKz0gIjx0Ym9keSBjbGFzcz0ncmVtb3ZhYmxlJz4iOworICAgIHZh
ciBpbmRleDsKKyAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsaXN0T2ZSZW1vdmFibGVFbGVt
ZW50cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgcmVzdWx0aW5nVGFibGVIVE1MICs9ICI8
dHI+IDx0ZD4gIiArIGxpc3RPZlJlbW92YWJsZUVsZW1lbnRzW2luZGV4XSArICIgPC90ZD4gPC90
cj4iOworICAgIH0KKyAgICByZXN1bHRpbmdUYWJsZUhUTUwgKz0gIjwvdGJvZHk+IDwvdGFibGU+
IjsKKyAgICByZXR1cm4gcmVzdWx0aW5nVGFibGVIVE1MOworfQorCitmdW5jdGlvbiBmYWlsdXJl
VG9Db2xsYXBzYWJsZUxpc3QoZmFpbHVyZSkgeworICAgIHJldHVybiBjb25zdHJ1Y3RDb2xsYXBz
YWJsZVRhYmxlKGZhaWx1cmUubmFtZSxbICI8cHJlPiIgKyBmYWlsdXJlLnJlc3VsdCArICI8L3By
ZT4iIF0pOworfQorCit2YXIgZmlsZVJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKK2Zp
bGVSZXF1ZXN0Lm9wZW4oJ0dFVCcsIGdfcmVzdWx0c0ZpbGUsIGZhbHNlKTsKK2ZpbGVSZXF1ZXN0
LnJlc3BvbnNlVHlwZSA9ICdqc29uJzsKK2ZpbGVSZXF1ZXN0LnNlbmQoKTsKKwordmFyIHJlc3Vs
dHMgPSBmaWxlUmVxdWVzdC5yZXNwb25zZQorCisvLyBUT0RPOiBXZSBzaG91bGQgcmVhbGx5IHB1
bGwgYSBuYW1lIGZyb20gdGhlIHJlc3VsdHMuanNvbiBmaWxlLiAiUHl0aG9uIFVuaXR0ZXN0IiBv
ciBzb21lIHN1Y2gsCisvLyBhbmQgc2V0IHRoZSBoMSBlbGVtZW50IHRvIHNvbWV0aGluZyBsZXNz
IGdlbmVyaWMuCisKK3ZhciBzdGF0dXNTZWN0aW9uRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdzdGF0dXMtc2VjdGlvbicpOwordmFyIG51bWJlck9mTm9uUGFzc2luZ1Rlc3RzID0g
cmVzdWx0cy5lcnJvcnMubGVuZ3RoICsgcmVzdWx0cy5mYWlsdXJlcy5sZW5ndGg7CitpZiAobnVt
YmVyT2ZOb25QYXNzaW5nVGVzdHMgPiAxKSB7CisgICAgc3RhdHVzU2VjdGlvbkVsZW1lbnQuaW5u
ZXJIVE1MID0gIjxwIGNsYXNzPSdzdGF0dXMtbWVzc2FnZS1iYWQnPiAiICsgbnVtYmVyT2ZOb25Q
YXNzaW5nVGVzdHMgKyIgdGVzdHMgZGlkIG5vdCBwYXNzLiA8L3A+IjsKK30gZWxzZSBpZiAobnVt
YmVyT2ZOb25QYXNzaW5nVGVzdHMgPT09IDEpIHsKKyAgICBzdGF0dXNTZWN0aW9uRWxlbWVudC5p
bm5lckhUTUwgPSAiPHAgY2xhc3M9J3N0YXR1cy1tZXNzYWdlLWJhZCc+ICIgKyBudW1iZXJPZk5v
blBhc3NpbmdUZXN0cyArIiB0ZXN0IGRpZCBub3QgcGFzcy4gPC9wPiI7Cit9IGVsc2UgeworICAg
IHN0YXR1c1NlY3Rpb25FbGVtZW50LmlubmVySFRNTCA9ICI8cCBjbGFzcz0nc3RhdHVzLW1lc3Nh
Z2UtZ29vZCc+IEFsbCB0ZXN0cyBwYXNzZWQuIDwvcD4iOworfQorCit2YXIgdGVzdFJlc3VsdHNT
ZWN0aW9uRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0LXJlc3VsdHMtc2Vj
dGlvbicpOworCitpZiAocmVzdWx0cy5lcnJvcnMubGVuZ3RoID4gMCl7CisgICAgdGVzdFJlc3Vs
dHNTZWN0aW9uRWxlbWVudC5pbm5lckhUTUwgKz0gY29uc3RydWN0Q29sbGFwc2FibGVUYWJsZSgi
VGVzdHMgd2l0aCBlcnJvcnMiLCBbIjxzdHJvbmc+RXJyb3JlZCB0ZXN0cyBhcmUgdGVzdHMgdGhh
dCBoaXQgZXhjZXB0aW9ucyBkdXJpbmcgdGhlaXIgZXhlY3V0aW9uLjwvc3Ryb25nPiJdLmNvbmNh
dChyZXN1bHRzLmVycm9ycy5tYXAoZmFpbHVyZVRvQ29sbGFwc2FibGVMaXN0KSkpOworfQorCitp
ZiAocmVzdWx0cy5mYWlsdXJlcy5sZW5ndGggPiAwKXsKKyAgICB0ZXN0UmVzdWx0c1NlY3Rpb25F
bGVtZW50LmlubmVySFRNTCArPSBjb25zdHJ1Y3RDb2xsYXBzYWJsZVRhYmxlKCJUZXN0cyB3aXRo
IGZhaWx1cmVzIiwgWyI8c3Ryb25nPkZhaWxlZCB0ZXN0cyBhcmUgdGVzdHMgdGhhdCB2aW9sYXRl
ZCBvbmUgb3IgbW9yZSBhc3NlcnRpb25zLjwvc3Ryb25nPiJdLmNvbmNhdChyZXN1bHRzLmZhaWx1
cmVzLm1hcChmYWlsdXJlVG9Db2xsYXBzYWJsZUxpc3QpKSk7Cit9CisKK2lmIChyZXN1bHRzLnBh
c3Nlcy5sZW5ndGggPiAwKXsKKyAgICB0ZXN0UmVzdWx0c1NlY3Rpb25FbGVtZW50LmlubmVySFRN
TCArPSBjb25zdHJ1Y3RDb2xsYXBzYWJsZVRhYmxlKCJUZXN0cyB0aGF0IHBhc3MiLCBbIjxzdHJv
bmc+UGFzc2luZyB0ZXN0cyBuZWl0aGVyIGhpdCBleGNlcHRpb25zLCBub3IgdmlvbGF0ZWQgYXNz
ZXJ0aW9ucy48L3N0cm9uZz4iXS5jb25jYXQocmVzdWx0cy5wYXNzZXMpKTsKK30KKworPC9zY3Jp
cHQ+CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKaW5kZXggM2QwZDRlYi4uYmJiODcw
NSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKQEAgLTc4OCw2ICs3ODgsOSBAQCBj
bGFzcyBQb3J0KG9iamVjdCk6CiAgICAgZGVmIHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVj
dG9yeShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ3B5dGhvbi11bml0
dGVzdC1yZXN1bHRzJykKIAorICAgIGRlZiBzY3JpcHRfcmVzb3VyY2VzX2RpcmVjdG9yeShzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCJUb29scyIsICJT
Y3JpcHRzIiwgInJlc291cmNlcyIpCisKICAgICBkZWYgZGVmYXVsdF9yZXN1bHRzX2RpcmVjdG9y
eShzZWxmKToKICAgICAgICAgIiIiQWJzb2x1dGUgcGF0aCB0byB0aGUgZGVmYXVsdCBwbGFjZSB0
byBzdG9yZSB0aGUgdGVzdCByZXN1bHRzLiIiIgogICAgICAgICAjIFJlc3VsdHMgYXJlIHN0b3Jl
IHJlbGF0aXZlIHRvIHRoZSBidWlsdCBwcm9kdWN0cyB0byBtYWtlIGl0IGVhc3kKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9ydW50ZXN0cy5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9ydW50ZXN0cy5weQppbmRleCBlY2Q2MzUxLi4z
NTM1MzFkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvcnVu
dGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3J1bnRlc3Rz
LnB5CkBAIC01OCwxMiArNTgsMTYgQEAgY2xhc3MgUnVuVGVzdHMoQWJzdHJhY3RTdGVwKToKICAg
ICAgICAgICAgIF9sb2cuaW5mbygiUnVubmluZyBQeXRob24gdW5pdCB0ZXN0cyIpCiAgICAgICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLm5vbl9pbnRlcmFjdGl2ZToKICAgICAgICAgICAgICAgICBm
aWxlc3lzdGVtID0gc2VsZi5fdG9vbC5maWxlc3lzdGVtCi0gICAgICAgICAgICAgICAgcHl0aG9u
X3VuaXR0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5ID0gc2VsZi5fdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0
KCkucHl0aG9uX3VuaXR0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5KCkKKyAgICAgICAgICAgICAgICBw
b3J0ID0gc2VsZi5fdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0KCkKKyAgICAgICAgICAgICAgICBweXRo
b25fdW5pdHRlc3RfcmVzdWx0c19kaXJlY3RvcnkgPSBwb3J0LnB5dGhvbl91bml0dGVzdF9yZXN1
bHRzX2RpcmVjdG9yeSgpCiAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS5tYXliZV9tYWtlX2Rp
cmVjdG9yeShweXRob25fdW5pdHRlc3RfcmVzdWx0c19kaXJlY3RvcnkpCiAKICAgICAgICAgICAg
ICAgICBweXRob25fdW5pdHRlc3RzX2NvbW1hbmQuYXBwZW5kKCctLWpzb24nKQogICAgICAgICAg
ICAgICAgIG91dHB1dCA9IHNlbGYuX3Rvb2wuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHB5dGhvbl91
bml0dGVzdHNfY29tbWFuZCwgY3dkPXNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tvdXRfcm9vdCwgZXJy
b3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9yLCByZXR1cm5fc3RkZXJyPUZhbHNlKQog
ICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGZpbGVzeXN0ZW0uam9p
bihweXRob25fdW5pdHRlc3RfcmVzdWx0c19kaXJlY3RvcnksICJyZXN1bHRzLmpzb24iKSwgb3V0
cHV0KQorICAgICAgICAgICAgICAgIHJlc291cmNlc19wYXRoID0gcG9ydC5zY3JpcHRfcmVzb3Vy
Y2VzX2RpcmVjdG9yeSgpCisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS5jb3B5ZmlsZShmaWxl
c3lzdGVtLmpvaW4ocmVzb3VyY2VzX3BhdGgsICJyZXN1bHRzLmh0bWwiKSwgZmlsZXN5c3RlbS5q
b2luKHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVjdG9yeSwgInJlc3VsdHMuaHRtbCIpKQor
ICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uY29weWZpbGUoZmlsZXN5c3RlbS5qb2luKHJlc291
cmNlc19wYXRoLCAicmVzdWx0cy1zdHlsZXNoZWV0LmNzcyIpLCBmaWxlc3lzdGVtLmpvaW4ocHl0
aG9uX3VuaXR0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5LCAicmVzdWx0cy1zdHlsZXNoZWV0LmNzcyIp
KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLl90b29sLmV4ZWN1dGl2
ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwocHl0aG9uX3VuaXR0ZXN0c19jb21tYW5kLCBjd2Q9c2Vs
Zi5fdG9vbC5zY20oKS5jaGVja291dF9yb290KQogCi0tIAoxLjkuMyAoQXBwbGUgR2l0LTUwKQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>240937</attachid>
            <date>2014-11-04 11:50:52 -0800</date>
            <delta_ts>2014-11-04 11:50:52 -0800</delta_ts>
            <desc>Self-contained results page</desc>
            <filename>self-contained-results.html</filename>
            <type>text/html</type>
            <size>5085</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+Cgo8aGVhZD4KICAgIDx0aXRsZT5UZXN0IFJlc3VsdHM8L3RpdGxlPgog
ICAgPHN0eWxlPgogICAgYm9keSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZv
bnQtZmFtaWx5OiB2ZXJkYW5hOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAg
fQoKICAgIGgxIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICB9CgogICAgdGFibGUsIHRo
LCB0ZCB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIH0KCiAgICB0YWJsZSB7CiAgICAg
ICAgcGFkZGluZzogMnB4OwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICB9CgogICAgdGgg
ewogICAgICAgIHBhZGRpbmc6IDZweDsKICAgIH0KCiAgICB0ZCB7CiAgICAgICAgcGFkZGluZy1s
ZWZ0OiAzMHB4OwogICAgfQoKICAgIHByZSB7CiAgICAgICAgZm9udC1mYW1pbHk6ICJDb3VyaWVy
IE5ldyI7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xv
cjogI0UzRTNFMzsKICAgICAgICBwYWRkaW5nOiA2cHg7CiAgICB9CgogICAgLnN0YXR1cy1tZXNz
YWdlLWJhZCB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgIH0KCiAgICAuc3RhdHVzLW1lc3NhZ2Ut
Z29vZCB7CiAgICAgICAgY29sb3I6IGdyZWVuOwogICAgfQoKICAgIHRyLnRlc3QtcmVzdWx0IHRk
IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7CiAgICB9CgogICAgLmNvbGxhcHNlZCAucmVt
b3ZhYmxlIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5jb2xsYXBzYWJsZSB0
aDo6YmVmb3JlewogICAgICAgIGNvbnRlbnQ6ICJcMDAyNUJDXCAiOwogICAgfQoKICAgIC5jb2xs
YXBzZWQgdGg6OmJlZm9yZXsKICAgICAgICBjb250ZW50OiAiXDAwMjVCQVwgIjsKICAgIH0KICAg
IDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgICA8aDE+VGVzdCBSZXN1bHRzPC9oMT4KICAgIDxk
aXYgaWQ9InN0YXR1cy1zZWN0aW9uIj48L2Rpdj4KICAgIDxkaXYgaWQ9InRlc3QtcmVzdWx0cy1z
ZWN0aW9uIj48L2Rpdj4KPC9ib2R5Pgo8c2NyaXB0Pgp2YXIgZ19qc29ucCA9IHsiZmFpbHVyZXMi
Olt7Im5hbWUiOiJ3ZWJraXRweS5jb21tb24uZWRpdGRpc3RhbmNlX3VuaXR0ZXN0LkVkaXREaXN0
YW5jZVRlc3QudGVzdF9lZGl0X2Rpc3RhbmNlIiwicmVzdWx0IjpbIlRyYWNlYmFjayAobW9zdCBy
ZWNlbnQgY2FsbCBsYXN0KTpcbiAgRmlsZSBcIi9Vc2Vycy9kYmF0ZXMvRGVza3RvcC9XZWJLaXQv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRpdGRpc3RhbmNlX3VuaXR0ZXN0LnB5XCIs
IGxpbmUgMzYsIGluIHRlc3RfZWRpdF9kaXN0YW5jZVxuICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWRp
dF9kaXN0YW5jZSgnJywgJ2FhJyksIDYpXG5Bc3NlcnRpb25FcnJvcjogMiAhPSA2XG4iXX0seyJu
YW1lIjoid2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfdW5pdHRlc3QuU2NyaXB0RXJy
b3JUZXN0LnRlc3RfbWVzc2FnZV93aXRoX291dHB1dCIsInJlc3VsdCI6WyJUcmFjZWJhY2sgKG1v
c3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gIEZpbGUgXCIvVXNlcnMvZGJhdGVzL0Rlc2t0b3AvV2Vi
S2l0L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRl
c3QucHlcIiwgbGluZSA1NCwgaW4gdGVzdF9tZXNzYWdlX3dpdGhfb3V0cHV0XG4gICAgc2VsZi5h
c3NlcnRFcXVhbChlcnJvci5tZXNzYWdlX3dpdGhfb3V0cHV0KCksICdNeSBjdXN0b20gbWVzc2Fn
ZSEnKVxuQXNzZXJ0aW9uRXJyb3I6IHUnTXkgY3VzMnRvbSBtZXNzYWdlIScgIT0gJ015IGN1c3Rv
bSBtZXNzYWdlISdcbiJdfV0sImVycm9ycyI6W3sibmFtZSI6IndlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uZXhlY3V0aXZlX3VuaXR0ZXN0LkV4ZWN1dGl2ZVRlc3Quc2VyaWFsX3Rlc3RfY2hlY2tfcnVu
bmluZ19waWQiLCJyZXN1bHQiOlsiVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxu
ICBGaWxlIFwiL1VzZXJzL2RiYXRlcy9EZXNrdG9wL1dlYktpdC9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5XCIsIGxpbmUgMjIzLCBpbiBz
ZXJpYWxfdGVzdF9jaGVja19ydW5uaW5nX3BpZFxuICAgIHNlbGYuYXNzZXJ0VHJ1ZShleGVjdXRp
dmUuY2hlY2tfcnVubmluZ19waWQob3MuZ2V0cGlkKCkpKVxuVHlwZUVycm9yOiB1bmJvdW5kIG1l
dGhvZCBjaGVja19ydW5uaW5nX3BpZCgpIG11c3QgYmUgY2FsbGVkIHdpdGggRXhlY3V0aXZlIGlu
c3RhbmNlIGFzIGZpcnN0IGFyZ3VtZW50IChnb3QgaW50IGluc3RhbmNlIGluc3RlYWQpXG4iXX1d
LCJwYXNzZXMiOlsid2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LmNoYW5nZWxvZ191bml0dGVzdC5D
aGFuZ2VMb2dUZXN0LnRlc3RfZGVsZXRlX2VudHJpZXMiLCJ3ZWJraXRweS5jb21tb24uY2hlY2tv
dXQuY2hhbmdlbG9nX3VuaXR0ZXN0LkNoYW5nZUxvZ1Rlc3QudGVzdF9mdXp6eV9yZXZpZXdlcl9t
YXRjaF9fbm9uZSIsIndlYmtpdHB5LmNvbW1vbi5jaGVja291dC5jaGFuZ2Vsb2dfdW5pdHRlc3Qu
Q2hhbmdlTG9nVGVzdC50ZXN0X2Z1enp5X3Jldmlld2VyX21hdGNoX2FkYW1fYmFydGgiXX07Cjwv
c2NyaXB0PgoKPHNjcmlwdD4KInVzZSBzdHJpY3QiOwoKZnVuY3Rpb24gdG9nZ2xlQ29sbGFwc2Vk
KGVsZW1lbnQpewogICAgZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCJjb2xsYXBzZWQiKTsKfQoK
ZnVuY3Rpb24gY29uc3RydWN0Q29sbGFwc2FibGVUYWJsZSh0YWJsZVRpdGxlLCBsaXN0T2ZSZW1v
dmFibGVFbGVtZW50cykKewogICAgdmFyIHJlc3VsdGluZ1RhYmxlSFRNTCA9ICI8dGFibGUgY2xh
c3M9J2NvbGxhcHNhYmxlJz4iOwogICAgcmVzdWx0aW5nVGFibGVIVE1MICs9ICI8dGhlYWQgb25D
bGljaz0ndG9nZ2xlQ29sbGFwc2VkKHRoaXMucGFyZW50Tm9kZSknPiA8dHI+IDx0aD4iICsgdGFi
bGVUaXRsZSArICI8L3RoPiA8L3RyPiA8L3RoZWFkPiI7CiAgICByZXN1bHRpbmdUYWJsZUhUTUwg
Kz0gIjx0Ym9keSBjbGFzcz0ncmVtb3ZhYmxlJz4iOwogICAgdmFyIGluZGV4OwogICAgZm9yIChp
bmRleCA9IDA7IGluZGV4IDwgbGlzdE9mUmVtb3ZhYmxlRWxlbWVudHMubGVuZ3RoOyBpbmRleCsr
KSB7CiAgICAgICAgcmVzdWx0aW5nVGFibGVIVE1MICs9ICI8dHI+IDx0ZD4gIiArIGxpc3RPZlJl
bW92YWJsZUVsZW1lbnRzW2luZGV4XSArICIgPC90ZD4gPC90cj4iOwogICAgfQogICAgcmVzdWx0
aW5nVGFibGVIVE1MICs9ICI8L3Rib2R5PiA8L3RhYmxlPiI7CiAgICByZXR1cm4gcmVzdWx0aW5n
VGFibGVIVE1MOwp9CgpmdW5jdGlvbiBmYWlsdXJlVG9Db2xsYXBzYWJsZUxpc3QoZmFpbHVyZSkg
ewogICAgcmV0dXJuIGNvbnN0cnVjdENvbGxhcHNhYmxlVGFibGUoZmFpbHVyZS5uYW1lLFsgIjxw
cmU+IiArIGZhaWx1cmUucmVzdWx0ICsgIjwvcHJlPiIgXSk7Cn0KCnZhciByZXN1bHRzID0gZ19q
c29ucDsKCi8vIFRPRE86IFdlIHNob3VsZCByZWFsbHkgcHVsbCBhIG5hbWUgZnJvbSB0aGUgcmVz
dWx0cy5qc29uIGZpbGUuICJQeXRob24gVW5pdHRlc3QiIG9yIHNvbWUgc3VjaCwKLy8gYW5kIHNl
dCB0aGUgaDEgZWxlbWVudCB0byBzb21ldGhpbmcgbGVzcyBnZW5lcmljLgoKdmFyIHN0YXR1c1Nl
Y3Rpb25FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXR1cy1zZWN0aW9uJyk7
CnZhciBudW1iZXJPZk5vblBhc3NpbmdUZXN0cyA9IHJlc3VsdHMuZXJyb3JzLmxlbmd0aCArIHJl
c3VsdHMuZmFpbHVyZXMubGVuZ3RoOwppZiAobnVtYmVyT2ZOb25QYXNzaW5nVGVzdHMgPiAxKSB7
CiAgICBzdGF0dXNTZWN0aW9uRWxlbWVudC5pbm5lckhUTUwgPSAiPHAgY2xhc3M9J3N0YXR1cy1t
ZXNzYWdlLWJhZCc+ICIgKyBudW1iZXJPZk5vblBhc3NpbmdUZXN0cyArIiB0ZXN0cyBkaWQgbm90
IHBhc3MuIDwvcD4iOwp9IGVsc2UgaWYgKG51bWJlck9mTm9uUGFzc2luZ1Rlc3RzID09PSAxKSB7
CiAgICBzdGF0dXNTZWN0aW9uRWxlbWVudC5pbm5lckhUTUwgPSAiPHAgY2xhc3M9J3N0YXR1cy1t
ZXNzYWdlLWJhZCc+ICIgKyBudW1iZXJPZk5vblBhc3NpbmdUZXN0cyArIiB0ZXN0IGRpZCBub3Qg
cGFzcy4gPC9wPiI7Cn0gZWxzZSB7CiAgICBzdGF0dXNTZWN0aW9uRWxlbWVudC5pbm5lckhUTUwg
PSAiPHAgY2xhc3M9J3N0YXR1cy1tZXNzYWdlLWdvb2QnPiBBbGwgdGVzdHMgcGFzc2VkLiA8L3A+
IjsKfQoKdmFyIHRlc3RSZXN1bHRzU2VjdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgndGVzdC1yZXN1bHRzLXNlY3Rpb24nKTsKCmlmIChyZXN1bHRzLmVycm9ycy5sZW5ndGgg
PiAwKXsKICAgIHRlc3RSZXN1bHRzU2VjdGlvbkVsZW1lbnQuaW5uZXJIVE1MICs9IGNvbnN0cnVj
dENvbGxhcHNhYmxlVGFibGUoIlRlc3RzIHdpdGggZXJyb3JzIiwgWyI8c3Ryb25nPkVycm9yZWQg
dGVzdHMgYXJlIHRlc3RzIHRoYXQgaGl0IGV4Y2VwdGlvbnMgZHVyaW5nIHRoZWlyIGV4ZWN1dGlv
bi48L3N0cm9uZz4iXS5jb25jYXQocmVzdWx0cy5lcnJvcnMubWFwKGZhaWx1cmVUb0NvbGxhcHNh
YmxlTGlzdCkpKTsKfQoKaWYgKHJlc3VsdHMuZmFpbHVyZXMubGVuZ3RoID4gMCl7CiAgICB0ZXN0
UmVzdWx0c1NlY3Rpb25FbGVtZW50LmlubmVySFRNTCArPSBjb25zdHJ1Y3RDb2xsYXBzYWJsZVRh
YmxlKCJUZXN0cyB3aXRoIGZhaWx1cmVzIiwgWyI8c3Ryb25nPkZhaWxlZCB0ZXN0cyBhcmUgdGVz
dHMgdGhhdCB2aW9sYXRlZCBvbmUgb3IgbW9yZSBhc3NlcnRpb25zLjwvc3Ryb25nPiJdLmNvbmNh
dChyZXN1bHRzLmZhaWx1cmVzLm1hcChmYWlsdXJlVG9Db2xsYXBzYWJsZUxpc3QpKSk7Cn0KCmlm
IChyZXN1bHRzLnBhc3Nlcy5sZW5ndGggPiAwKXsKICAgIHRlc3RSZXN1bHRzU2VjdGlvbkVsZW1l
bnQuaW5uZXJIVE1MICs9IGNvbnN0cnVjdENvbGxhcHNhYmxlVGFibGUoIlRlc3RzIHRoYXQgcGFz
cyIsIFsiPHN0cm9uZz5QYXNzaW5nIHRlc3RzIG5laXRoZXIgaGl0IGV4Y2VwdGlvbnMsIG5vciB2
aW9sYXRlZCBhc3NlcnRpb25zLjwvc3Ryb25nPiJdLmNvbmNhdChyZXN1bHRzLnBhc3NlcykpOwp9
Cgo8L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>240944</attachid>
            <date>2014-11-04 13:39:36 -0800</date>
            <delta_ts>2014-11-04 13:40:12 -0800</delta_ts>
            <desc>[Alternative Proposal] DRT-like self-contained results page</desc>
            <filename>DRT-like-Python-results.html</filename>
            <type>text/html</type>
            <size>6334</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPG1ldGEgY2hhcnNldD0idXRmLTgiPgo8c3R5
bGU+Ci8qIEZJWE1FOiBDb25zaWRlciBleHRyYWN0aW5nIGNvbW1vbiBDU1Mgc3R5bGVzIHVzZWQg
aW4gdGhlIHJlc3VsdHMgcGFnZSByZXByZXNlbnRlZCBieSB0aGlzIGZpbGUgYW5kIExheW91dFRl
c3RzL2Zhc3QvaGFybmVzcy9yZXN1bHRzLmh0bWwKaW50byBpdHMgb3duIGZpbGUgYW5kIHJlZmVy
ZW5jZSBpdCBmcm9tIGJvdGggcmVzdWx0cyBwYWdlcy4gKi8KYm9keSB7CiAgICBtYXJnaW46IDA7
CiAgICBmb250LWZhbWlseTogSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwogICAgZm9udC1zaXplOiAx
MXB0Owp9Cgpib2R5ID4gKiB7CiAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgbWFyZ2luLXRvcDog
NHB4Owp9CgpoMSB7CiAgICBmb250LXNpemU6IDE0cHQ7CiAgICBtYXJnaW4tdG9wOiAxLjVlbTsK
fQoKLmV4cGFuZC1idXR0b24gewogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICB3aWR0
aDogMTFweDsKICAgIGhlaWdodDogMTJweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7CiAg
ICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBtYXJnaW46IDAgM3B4IDAgMDsKICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIC13ZWJraXQtdXNlci1zZWxl
Y3Q6IG5vbmU7Cn0KCi5leHBhbmQtYnV0dG9uLXRleHQgewogICAgcG9zaXRpb246IGFic29sdXRl
OwogICAgdG9wOiAtMC4zZW07CiAgICBsZWZ0OiAxcHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9u
ZTsKfQoKLmhpZGRlbiB7CiAgICBkaXNwbGF5OiBub25lOwp9CgouYWN0dWFsLXJlc3VsdHMgewog
ICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgYm9yZGVyOiAxcHggc29saWQgZ3JheTsKICAg
IG1hcmdpbjogNHB4Owp9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+Cjx0ZW1wbGF0ZSBjbGFzcz0i
dGVzdC1yZXN1bHRzLWxpc3RpbmciPgogICAgPGgxPlRlc3RzIHRoYXQgZmFpbGVkICgxKTo8L2gx
PgogICAgPHRhYmxlPgogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0idGVzdC1yZXN1bHRzLXRhYmxl
LXNlY3Rpb24iPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PHNwYW4gY2xh
c3M9ImV4cGFuZC1idXR0b24iIG9uY2xpY2s9InRvZ2dsZUFjdHVhbFJlc3VsdHModGhpcykiPjxz
cGFuIGNsYXNzPSJleHBhbmQtYnV0dG9uLXRleHQiPis8L3NwYW4+PC9zcGFuPjxhIGhyZWY9IiMi
PndlYmtpdHB5LmNvbW1vbi5lZGl0ZGlzdGFuY2VfdW5pdHRlc3QuRWRpdERpc3RhbmNlVGVzdC50
ZXN0X2VkaXRfZGlzdGFuY2U8L2E+PC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAg
PHRyIGNsYXNzPSJoaWRkZW4iPgogICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiPjxwcmUg
Y2xhc3M9ImFjdHVhbC1yZXN1bHRzIj5Bc3NlcnRpb25FcnJvcjogMiAhPSA2PC9wcmU+PC90ZD4K
ICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgPC90YWJsZT4KPC90ZW1w
bGF0ZT4KCjwhLS0gRklYTUU6IExvYWQgdGhlIHJlc3VsdHMgZnJvbSBhbiBleHRlcm5hbCBmaWxl
LiAtLT4KPHNjcmlwdD4KdmFyIGdfanNvbnAgPSB7ImZhaWx1cmVzIjpbeyJuYW1lIjoid2Via2l0
cHkuY29tbW9uLmVkaXRkaXN0YW5jZV91bml0dGVzdC5FZGl0RGlzdGFuY2VUZXN0LnRlc3RfZWRp
dF9kaXN0YW5jZSIsInJlc3VsdCI6WyJUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6
XG4gIEZpbGUgXCIvVXNlcnMvZGJhdGVzL0Rlc2t0b3AvV2ViS2l0L1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2VkaXRkaXN0YW5jZV91bml0dGVzdC5weVwiLCBsaW5lIDM2LCBpbiB0ZXN0
X2VkaXRfZGlzdGFuY2VcbiAgICBzZWxmLmFzc2VydEVxdWFsKGVkaXRfZGlzdGFuY2UoJycsICdh
YScpLCA2KVxuQXNzZXJ0aW9uRXJyb3I6IDIgIT0gNlxuIl19LHsibmFtZSI6IndlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uZXhlY3V0aXZlX3VuaXR0ZXN0LlNjcmlwdEVycm9yVGVzdC50ZXN0X21lc3Nh
Z2Vfd2l0aF9vdXRwdXQiLCJyZXN1bHQiOlsiVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxh
c3QpOlxuICBGaWxlIFwiL1VzZXJzL2RiYXRlcy9EZXNrdG9wL1dlYktpdC9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5XCIsIGxpbmUgNTQs
IGluIHRlc3RfbWVzc2FnZV93aXRoX291dHB1dFxuICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3Iu
bWVzc2FnZV93aXRoX291dHB1dCgpLCAnTXkgY3VzdG9tIG1lc3NhZ2UhJylcbkFzc2VydGlvbkVy
cm9yOiB1J015IGN1czJ0b20gbWVzc2FnZSEnICE9ICdNeSBjdXN0b20gbWVzc2FnZSEnXG4iXX1d
LCJlcnJvcnMiOlt7Im5hbWUiOiJ3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV91bml0
dGVzdC5FeGVjdXRpdmVUZXN0LnNlcmlhbF90ZXN0X2NoZWNrX3J1bm5pbmdfcGlkIiwicmVzdWx0
IjpbIlRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgRmlsZSBcIi9Vc2Vycy9k
YmF0ZXMvRGVza3RvcC9XZWJLaXQvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2V4ZWN1dGl2ZV91bml0dGVzdC5weVwiLCBsaW5lIDIyMywgaW4gc2VyaWFsX3Rlc3RfY2hlY2tf
cnVubmluZ19waWRcbiAgICBzZWxmLmFzc2VydFRydWUoZXhlY3V0aXZlLmNoZWNrX3J1bm5pbmdf
cGlkKG9zLmdldHBpZCgpKSlcblR5cGVFcnJvcjogdW5ib3VuZCBtZXRob2QgY2hlY2tfcnVubmlu
Z19waWQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIEV4ZWN1dGl2ZSBpbnN0YW5jZSBhcyBmaXJzdCBh
cmd1bWVudCAoZ290IGludCBpbnN0YW5jZSBpbnN0ZWFkKVxuIl19XSwicGFzc2VzIjpbIndlYmtp
dHB5LmNvbW1vbi5jaGVja291dC5jaGFuZ2Vsb2dfdW5pdHRlc3QuQ2hhbmdlTG9nVGVzdC50ZXN0
X2RlbGV0ZV9lbnRyaWVzIiwid2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LmNoYW5nZWxvZ191bml0
dGVzdC5DaGFuZ2VMb2dUZXN0LnRlc3RfZnV6enlfcmV2aWV3ZXJfbWF0Y2hfX25vbmUiLCJ3ZWJr
aXRweS5jb21tb24uY2hlY2tvdXQuY2hhbmdlbG9nX3VuaXR0ZXN0LkNoYW5nZUxvZ1Rlc3QudGVz
dF9mdXp6eV9yZXZpZXdlcl9tYXRjaF9hZGFtX2JhcnRoIl19Owo8L3NjcmlwdD4KCjxzY3JpcHQ+
CnZhciBUUkFDX1dFQktJVFBZX1VSTF9QUkVGSVggPSAiaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcv
YnJvd3Nlci90cnVuay9Ub29scy9TY3JpcHRzLyI7CnZhciBQWVRIT05fVU5JVF9URVNUX1NVRkZJ
WCA9ICJfdW5pdHRlc3QiOwp2YXIgRGlzY2xvc3VyZVN0YXRlID0gewogICAgT1BFTjogIuKAkyIs
CiAgICBDTE9TRUQ6ICIrIgp9OwoKZnVuY3Rpb24gbWF0Y2hlc1NlbGVjdG9yKG5vZGUsIHNlbGVj
dG9yKQp7CiAgICBpZiAobm9kZS5tYXRjaGVzKQogICAgICAgIHJldHVybiBub2RlLm1hdGNoZXMo
c2VsZWN0b3IpOwogICAgaWYgKG5vZGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yKQogICAgICAgIHJl
dHVybiBub2RlLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7CiAgICBpZiAobm9kZS5t
b3pNYXRjaGVzU2VsZWN0b3IpCiAgICAgICAgcmV0dXJuIG5vZGUubW96TWF0Y2hlc1NlbGVjdG9y
KHNlbGVjdG9yKTsKfQoKZnVuY3Rpb24gcGFyZW50T2ZUeXBlKG5vZGUsIHNlbGVjdG9yKQp7CiAg
ICB3aGlsZSAobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkgewogICAgICAgIGlmIChtYXRjaGVzU2Vs
ZWN0b3Iobm9kZSwgc2VsZWN0b3IpKQogICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgIH0KICAg
IHJldHVybiBudWxsOwp9CgpmdW5jdGlvbiBzZXRBY3R1YWxSZXN1bHRzVmlzaWJsZShyZXN1bHRT
ZWN0aW9uLCB2aXNpYmxlKQp7CiAgICB2YXIgZnVuY3Rpb25Ub0NhbGw7CiAgICB2YXIgbmV3RGlz
Y2xvc3VyZVN0YXRlOwogICAgaWYgKHZpc2libGUpIHsKICAgICAgICBuZXdEaXNjbG9zdXJlU3Rh
dGUgPSBEaXNjbG9zdXJlU3RhdGUuT1BFTjsKICAgICAgICBmdW5jdGlvblRvQ2FsbCA9ICJyZW1v
dmUiOwogICAgfSBlbHNlIHsKICAgICAgICBuZXdEaXNjbG9zdXJlU3RhdGUgPSBEaXNjbG9zdXJl
U3RhdGUuQ0xPU0VEOwogICAgICAgIGZ1bmN0aW9uVG9DYWxsID0gImFkZCI7CiAgICB9CiAgICB2
YXIgZXhwYW5kQnV0dG9uVGV4dCA9IHJlc3VsdFNlY3Rpb24ucXVlcnlTZWxlY3RvcigiLmV4cGFu
ZC1idXR0b24tdGV4dCIpOwogICAgZXhwYW5kQnV0dG9uVGV4dC50ZXh0Q29udGVudCA9IG5ld0Rp
c2Nsb3N1cmVTdGF0ZTsKICAgIHJlc3VsdFNlY3Rpb24ubmV4dEVsZW1lbnRTaWJsaW5nLmNsYXNz
TGlzdFtmdW5jdGlvblRvQ2FsbF0oImhpZGRlbiIpOwp9CgpmdW5jdGlvbiB0b2dnbGVBY3R1YWxS
ZXN1bHRzKGVsZW1lbnQpCnsKICAgIHNldEFjdHVhbFJlc3VsdHNWaXNpYmxlKHBhcmVudE9mVHlw
ZShlbGVtZW50LCAidHIiKSwgZWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZXhwYW5kLWJ1dHRvbi10
ZXh0IikudGV4dENvbnRlbnQgPT09IERpc2Nsb3N1cmVTdGF0ZS5DTE9TRUQpOwp9CgpmdW5jdGlv
biB0cmFjVVJMRm9yUHl0aG9uVW5pdFRlc3ROYW1lKHVuaXRUZXN0TmFtZSkKewogICAgdmFyIG1v
ZHVsZVBhdGggPSB1bml0VGVzdE5hbWUuc3Vic3RyKDAsIHVuaXRUZXN0TmFtZS5sYXN0SW5kZXhP
ZihQWVRIT05fVU5JVF9URVNUX1NVRkZJWCArICIuIikgKyBQWVRIT05fVU5JVF9URVNUX1NVRkZJ
WC5sZW5ndGgpOwogICAgcmV0dXJuIFRSQUNfV0VCS0lUUFlfVVJMX1BSRUZJWCArIG1vZHVsZVBh
dGgucmVwbGFjZSgvXC4vZywgIi8iKSArICIucHkiOwp9Cgp2YXIgVGVzdENhdGVnb3JpZXMgPSBb
CnsKICAgIG5hbWU6ICJUZXN0cyB0aGF0IGZhaWxlZCIsCiAgICB0ZXN0czogZ19qc29ucC5mYWls
dXJlcywKfSwKewogICAgbmFtZTogIlRlc3RzIHRoYXQgaGFkIGVycm9yIG91dHB1dCIsCiAgICB0
ZXN0czogZ19qc29ucC5lcnJvcnMsCn0KXTsKCnZhciBsaXN0aW5nQ29udGFpbmVyID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CnZhciBsaXN0aW5nVGVtcGxhdGUgPSBkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKCIudGVzdC1yZXN1bHRzLWxpc3RpbmciKS5jb250ZW50Owp2YXIgdGFibGVT
ZWN0aW9uVGVtcGxhdGUgPSBsaXN0aW5nVGVtcGxhdGUucXVlcnlTZWxlY3RvcigiLnRlc3QtcmVz
dWx0cy10YWJsZS1zZWN0aW9uIikuY29udGVudDsKZm9yICh2YXIgaSA9IDA7IGkgPCBUZXN0Q2F0
ZWdvcmllcy5sZW5ndGg7ICsraSkgewogICAgdmFyIHRlc3RDYXRlZ29yeSA9IFRlc3RDYXRlZ29y
aWVzW2ldOwogICAgdmFyIHRlc3RzID0gdGVzdENhdGVnb3J5LnRlc3RzOwogICAgdmFyIG51bWJl
ck9mVGVzdHMgPSB0ZXN0cy5sZW5ndGg7CgogICAgdmFyIGxpc3RpbmcgPSBsaXN0aW5nVGVtcGxh
dGUuY2xvbmVOb2RlKHRydWUgLyogRGVlcCBjb3B5ICovKTsKICAgIGxpc3RpbmcucXVlcnlTZWxl
Y3RvcigiaDEiKS50ZXh0Q29udGVudCA9IHRlc3RDYXRlZ29yeS5uYW1lICsgIiAoIiArIG51bWJl
ck9mVGVzdHMgKyAiKToiOwogICAgdmFyIHRhYmxlID0gbGlzdGluZy5xdWVyeVNlbGVjdG9yKCJ0
YWJsZSIpOwogICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1iZXJPZlRlc3RzOyArK2opIHsKICAg
ICAgICB2YXIgdGVzdCA9IHRlc3RzW2pdOwogICAgICAgIHZhciB0YWJsZVNlY3Rpb24gPSB0YWJs
ZVNlY3Rpb25UZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSAvKiBEZWVwIGNvcHkgKi8pOwogICAgICAg
IHZhciBhID0gdGFibGVTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoImEiKTsKICAgICAgICBhLmhyZWYg
PSB0cmFjVVJMRm9yUHl0aG9uVW5pdFRlc3ROYW1lKHRlc3QubmFtZSk7CiAgICAgICAgYS50ZXh0
Q29udGVudCA9IHRlc3QubmFtZTsKCiAgICAgICAgc2V0QWN0dWFsUmVzdWx0c1Zpc2libGUodGFi
bGVTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoInRyIiksIGZhbHNlKTsKCiAgICAgICAgLy8gRklYTUU6
IENvbnNpZGVyIGNyZWF0aW5nIGh5cGVybGlua3MgdG8gdHJhYy53ZWJraXQub3JnIGNvcnJlc3Bv
bmRpbmcgdG8gZWFjaCBmaWxlIHJlZmVyZW5jZWQgaW4gdGhlIGJhY2t0cmFjZS4KICAgICAgICB0
YWJsZVNlY3Rpb24ucXVlcnlTZWxlY3RvcigiLmFjdHVhbC1yZXN1bHRzIikudGV4dENvbnRlbnQg
PSB0ZXN0LnJlc3VsdDsKICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0YWJsZVNlY3Rpb24pOwog
ICAgfQogICAgbGlzdGluZ0NvbnRhaW5lci5hcHBlbmRDaGlsZChsaXN0aW5nKTsKfQpkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGxpc3RpbmdDb250YWluZXIpOwo8L3NjcmlwdD4KPC9ib2R5Pgo8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245084</attachid>
            <date>2015-01-21 14:12:02 -0800</date>
            <delta_ts>2015-01-21 14:16:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138161-20150121141210.patch</filename>
            <type>text/plain</type>
            <size>10815</size>
            <attacher name="Jake Nielsen">jake.nielsen.webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc4ODU1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWZjNGFkMTZiZjVlYzVhZTZlOGI0OTg0Mjk0ZjBkZGNl
MGQ3NmFkYy4uNmRjMjhjMGRmZjE2NTg0ZWZkYmI1NmJlZTlhMmVlOTQ3YzU2MjMxYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMx
IEBACisyMDE1LTAxLTIxICBKYWtlIE5pZWxzZW4gIDxqYWNvYl9uaWVsc2VuQGFwcGxlLmNvbT4K
KworICAgICAgICB3ZWJraXRweSBuZWVkcyBhIHJlc3VsdHMuaHRtbCBmaWxlIHRvIHJlbmRlciB0
aGUgcmVzdWx0cy5qc29uIGZpbGUgZm9yCisgICAgICAgIGh1bWFuIGV5ZXMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgxNjEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcmVzb3VyY2Vz
L3Jlc3VsdHMtc3R5bGVzaGVldC5jc3M6IEFkZGVkLgorICAgICAgICBTdHlsZSBzaGVldCBmb3Ig
cmVzdWx0cy5odG1sCisgICAgICAgIChib2R5KToKKyAgICAgICAgKGJvZHkgPiAqKToKKyAgICAg
ICAgKGgxKToKKyAgICAgICAgKHByZSk6CisgICAgICAgICguZXhwYW5kLWJ1dHRvbik6CisgICAg
ICAgICguZXhwYW5kLWJ1dHRvbi10ZXh0KToKKyAgICAgICAgKC5oaWRkZW4pOgorICAgICAgICAo
LmFjdHVhbC1yZXN1bHRzKToKKyAgICAgICAgKiBTY3JpcHRzL3Jlc291cmNlcy9yZXN1bHRzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAg
ICAgICBBZGRzIHRoZSBzY3JpcHRfcmVzb3VyY2VzX2RpcmVjdG9yeSBmdW5jdGlvbiB0byBhbGxv
dyBydW50ZXN0cyB0byBjb3B5CisgICAgICAgIHJlc3VsdHMuaHRtbCBhbmQgcmVzdWx0cy1zdHls
ZXNoZWV0LmNzcyBpbnRvIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICBkaXJlY3RvcnkuCisgICAg
ICAgIChQb3J0LnNjcmlwdF9yZXNvdXJjZXNfZGlyZWN0b3J5KToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc3RlcHMvcnVudGVzdHMucHk6CisgICAgICAgIENvcGllcyBmaWxlcyBh
cyBwZXIgY29tbWVudCBhYm92ZS4KKyAgICAgICAgKFJ1blRlc3RzLnJ1bik6CisKIDIwMTUtMDEt
MjEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6
Ly9idWlsZC53ZWJraXQub3JnL2Rhc2hib2FyZC9tZXRyaWNzLmh0bWwgZmFpbHMgYmVjYXVzZSBv
ZiBpb3MtZXdzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3Jlc291cmNlcy9yZXN1bHRzLXN0
eWxlc2hlZXQuY3NzIGIvVG9vbHMvU2NyaXB0cy9yZXNvdXJjZXMvcmVzdWx0cy1zdHlsZXNoZWV0
LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kNjc2NWEyZjFmYmI0NjU4NmEzYzg1YmNmY2RiZmIxYjNmMDYyZDAw
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9yZXNvdXJjZXMvcmVzdWx0cy1zdHls
ZXNoZWV0LmNzcwpAQCAtMCwwICsxLDUxIEBACitib2R5IHsKKyAgICBtYXJnaW46IDA7CisgICAg
Zm9udC1mYW1pbHk6IEhlbHZldGljYSwgc2Fucy1zZXJpZjsKKyAgICBmb250LXNpemU6IDExcHQ7
Cit9CisKK2JvZHkgPiAqIHsKKyAgICBtYXJnaW4tbGVmdDogNHB4OworICAgIG1hcmdpbi10b3A6
IDRweDsKK30KKworaDEgeworICAgIGZvbnQtc2l6ZTogMTRwdDsKKyAgICBtYXJnaW4tdG9wOiAx
LjVlbTsKK30KKworcHJlIHsKKyAgICBmb250LWZhbWlseTogIkNvdXJpZXIgTmV3IjsKKyAgICBi
b3JkZXI6IDFweCBzb2xpZDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTNFM0UzOworICAgIHBh
ZGRpbmc6IDZweDsKK30KKworLmV4cGFuZC1idXR0b24geworICAgIGJhY2tncm91bmQtY29sb3I6
IHdoaXRlOworICAgIHdpZHRoOiAxMXB4OworICAgIGhlaWdodDogMTJweDsKKyAgICBib3JkZXI6
IDFweCBzb2xpZCBncmF5OworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBtYXJnaW46
IDAgM3B4IDAgMDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgY3Vyc29yOiBkZWZhdWx0
OworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Cit9CisKKy5leHBhbmQtYnV0dG9uLXRl
eHQgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0wLjNlbTsKKyAgICBsZWZ0
OiAxcHg7CisgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cit9CisKKy5oaWRkZW4geworICAgIGRp
c3BsYXk6IG5vbmU7Cit9CisKKy5hY3R1YWwtcmVzdWx0cyB7CisgICAgZGlzcGxheTogaW5saW5l
LWJsb2NrOworICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7CisgICAgbWFyZ2luOiA0cHg7Cit9
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9y
ZXNvdXJjZXMvcmVzdWx0cy5odG1sIGIvVG9vbHMvU2NyaXB0cy9yZXNvdXJjZXMvcmVzdWx0cy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmFiMzQwMzRiY2VkMDAwZThhYWY0MmIwMmQxMGMwOGQ4MzExZDAwY2QK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3Jlc291cmNlcy9yZXN1bHRzLmh0bWwK
QEAgLTAsMCArMSwxNjcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJy
ZXN1bHRzLXN0eWxlc2hlZXQuY3NzIj4KKzwvaGVhZD4KKzxib2R5PgorPHRlbXBsYXRlIGNsYXNz
PSJ0ZXN0LXJlc3VsdHMtbGlzdGluZyI+CisgICAgPGgxPlRlc3RzIHRoYXQgZmFpbGVkICgxKTo8
L2gxPgorICAgIDx0YWJsZT4KKyAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJ0ZXN0LXJlc3VsdHMt
dGFibGUtc2VjdGlvbiI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPjxz
cGFuIGNsYXNzPSJleHBhbmQtYnV0dG9uIiBvbmNsaWNrPSJ0b2dnbGVBY3R1YWxSZXN1bHRzKHRo
aXMpIj48c3BhbiBjbGFzcz0iZXhwYW5kLWJ1dHRvbi10ZXh0Ij4rPC9zcGFuPjwvc3Bhbj48YSBo
cmVmPSIjIj53ZWJraXRweS5jb21tb24uZWRpdGRpc3RhbmNlX3VuaXR0ZXN0LkVkaXREaXN0YW5j
ZVRlc3QudGVzdF9lZGl0X2Rpc3RhbmNlPC9hPjwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAg
ICAgICAgICAgPHRyIGNsYXNzPSJoaWRkZW4iPgorICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFu
PSIxIj48cHJlIGNsYXNzPSJhY3R1YWwtcmVzdWx0cyI+QXNzZXJ0aW9uRXJyb3I6IDIgIT0gNjwv
cHJlPjwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICA8L3RlbXBsYXRlPgorICAgIDwv
dGFibGU+Cis8L3RlbXBsYXRlPgorPHRlbXBsYXRlIGNsYXNzPSJwYXNzaW5nLXRlc3QtbGlzdGlu
ZyI+CisgICAgPGgxPlRlc3RzIHRoYXQgcGFzc2VkICgxKTo8L2gxPgorICAgIDx0YWJsZT4KKyAg
ICAgICAgPHRlbXBsYXRlIGNsYXNzPSJwYXNzaW5nLXRlc3QtdGFibGUtc2VjdGlvbiI+CisgICAg
ICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9IiMiPndlYmtpdHB5LmNv
bW1vbi5lZGl0ZGlzdGFuY2VfdW5pdHRlc3QuRWRpdERpc3RhbmNlVGVzdC50ZXN0X2VkaXRfZGlz
dGFuY2U8L2E+PC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGVtcGxhdGU+Cisg
ICAgPC90YWJsZT4KKzwvdGVtcGxhdGU+CisKKzxzY3JpcHQ+CisKK3ZhciBmaWxlUmVxdWVzdCA9
IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworZmlsZVJlcXVlc3Qub3BlbignR0VUJywgInJlc3VsdHMu
anNvbiIsIGZhbHNlKTsKK2ZpbGVSZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdqc29uJzsKK2ZpbGVS
ZXF1ZXN0LnNlbmQoKTsKKwordmFyIGdfanNvbnAgPSBmaWxlUmVxdWVzdC5yZXNwb25zZQorCis8
L3NjcmlwdD4KKworPHNjcmlwdD4KK3ZhciBUUkFDX1dFQktJVFBZX1VSTF9QUkVGSVggPSAiaHR0
cHM6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9Ub29scy9TY3JpcHRzLyI7Cit2YXIg
UFlUSE9OX1VOSVRfVEVTVF9TVUZGSVggPSAiX3VuaXR0ZXN0IjsKK3ZhciBEaXNjbG9zdXJlU3Rh
dGUgPSB7CisgICAgT1BFTjogIuKAkyIsCisgICAgQ0xPU0VEOiAiKyIKK307CisKK2Z1bmN0aW9u
IG1hdGNoZXNTZWxlY3Rvcihub2RlLCBzZWxlY3RvcikKK3sKKyAgICBpZiAobm9kZS5tYXRjaGVz
KQorICAgICAgICByZXR1cm4gbm9kZS5tYXRjaGVzKHNlbGVjdG9yKTsKKyAgICBpZiAobm9kZS53
ZWJraXRNYXRjaGVzU2VsZWN0b3IpCisgICAgICAgIHJldHVybiBub2RlLndlYmtpdE1hdGNoZXNT
ZWxlY3RvcihzZWxlY3Rvcik7CisgICAgaWYgKG5vZGUubW96TWF0Y2hlc1NlbGVjdG9yKQorICAg
ICAgICByZXR1cm4gbm9kZS5tb3pNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpOworfQorCitmdW5j
dGlvbiBwYXJlbnRPZlR5cGUobm9kZSwgc2VsZWN0b3IpCit7CisgICAgd2hpbGUgKG5vZGUgPSBu
b2RlLnBhcmVudE5vZGUpIHsKKyAgICAgICAgaWYgKG1hdGNoZXNTZWxlY3Rvcihub2RlLCBzZWxl
Y3RvcikpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgICAgcmV0dXJuIG51bGw7
Cit9CisKK2Z1bmN0aW9uIHNldEFjdHVhbFJlc3VsdHNWaXNpYmxlKHJlc3VsdFNlY3Rpb24sIHZp
c2libGUpCit7CisgICAgdmFyIGZ1bmN0aW9uVG9DYWxsOworICAgIHZhciBuZXdEaXNjbG9zdXJl
U3RhdGU7CisgICAgaWYgKHZpc2libGUpIHsKKyAgICAgICAgbmV3RGlzY2xvc3VyZVN0YXRlID0g
RGlzY2xvc3VyZVN0YXRlLk9QRU47CisgICAgICAgIGZ1bmN0aW9uVG9DYWxsID0gInJlbW92ZSI7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbmV3RGlzY2xvc3VyZVN0YXRlID0gRGlzY2xvc3VyZVN0
YXRlLkNMT1NFRDsKKyAgICAgICAgZnVuY3Rpb25Ub0NhbGwgPSAiYWRkIjsKKyAgICB9CisgICAg
dmFyIGV4cGFuZEJ1dHRvblRleHQgPSByZXN1bHRTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoIi5leHBh
bmQtYnV0dG9uLXRleHQiKTsKKyAgICBleHBhbmRCdXR0b25UZXh0LnRleHRDb250ZW50ID0gbmV3
RGlzY2xvc3VyZVN0YXRlOworICAgIHJlc3VsdFNlY3Rpb24ubmV4dEVsZW1lbnRTaWJsaW5nLmNs
YXNzTGlzdFtmdW5jdGlvblRvQ2FsbF0oImhpZGRlbiIpOworfQorCitmdW5jdGlvbiB0b2dnbGVB
Y3R1YWxSZXN1bHRzKGVsZW1lbnQpCit7CisgICAgc2V0QWN0dWFsUmVzdWx0c1Zpc2libGUocGFy
ZW50T2ZUeXBlKGVsZW1lbnQsICJ0ciIpLCBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5leHBhbmQt
YnV0dG9uLXRleHQiKS50ZXh0Q29udGVudCA9PT0gRGlzY2xvc3VyZVN0YXRlLkNMT1NFRCk7Cit9
CisKK2Z1bmN0aW9uIHRyYWNVUkxGb3JQeXRob25Vbml0VGVzdE5hbWUodW5pdFRlc3ROYW1lKQor
eworICAgIHZhciBtb2R1bGVQYXRoID0gdW5pdFRlc3ROYW1lLnN1YnN0cigwLCB1bml0VGVzdE5h
bWUubGFzdEluZGV4T2YoUFlUSE9OX1VOSVRfVEVTVF9TVUZGSVggKyAiLiIpICsgUFlUSE9OX1VO
SVRfVEVTVF9TVUZGSVgubGVuZ3RoKTsKKyAgICByZXR1cm4gVFJBQ19XRUJLSVRQWV9VUkxfUFJF
RklYICsgbW9kdWxlUGF0aC5yZXBsYWNlKC9cLi9nLCAiLyIpICsgIi5weSI7Cit9CisKK2Z1bmN0
aW9uIHBhc3NUb1Jlc3VsdEZvcm1hdChwYXNzaW5nVGVzdCkKK3sKKyAgICByZXR1cm4geworICAg
ICAgICBuYW1lOiBwYXNzaW5nVGVzdCwKKyAgICAgICAgcmVzdWx0OiBbInBhc3MiXSwKKyAgICB9
Cit9CisKK3ZhciBUZXN0Q2F0ZWdvcmllcyA9IFsKK3sKKyAgICBuYW1lOiAiVGVzdHMgdGhhdCBm
YWlsZWQiLAorICAgIHRlc3RzOiBnX2pzb25wLmZhaWx1cmVzLAorfSwKK3sKKyAgICBuYW1lOiAi
VGVzdHMgdGhhdCBoYWQgZXJyb3Igb3V0cHV0IiwKKyAgICB0ZXN0czogZ19qc29ucC5lcnJvcnMs
Cit9CitdOworCit2YXIgbGlzdGluZ0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwordmFyIGxpc3RpbmdUZW1wbGF0ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi50
ZXN0LXJlc3VsdHMtbGlzdGluZyIpLmNvbnRlbnQ7Cit2YXIgdGFibGVTZWN0aW9uVGVtcGxhdGUg
PSBsaXN0aW5nVGVtcGxhdGUucXVlcnlTZWxlY3RvcigiLnRlc3QtcmVzdWx0cy10YWJsZS1zZWN0
aW9uIikuY29udGVudDsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBUZXN0Q2F0ZWdvcmllcy5sZW5n
dGg7ICsraSkgeworICAgIHZhciB0ZXN0Q2F0ZWdvcnkgPSBUZXN0Q2F0ZWdvcmllc1tpXTsKKyAg
ICB2YXIgdGVzdHMgPSB0ZXN0Q2F0ZWdvcnkudGVzdHM7CisgICAgdmFyIG51bWJlck9mVGVzdHMg
PSB0ZXN0cy5sZW5ndGg7CisKKyAgICB2YXIgbGlzdGluZyA9IGxpc3RpbmdUZW1wbGF0ZS5jbG9u
ZU5vZGUodHJ1ZSAvKiBEZWVwIGNvcHkgKi8pOworICAgIGxpc3RpbmcucXVlcnlTZWxlY3Rvcigi
aDEiKS50ZXh0Q29udGVudCA9IHRlc3RDYXRlZ29yeS5uYW1lICsgIiAoIiArIG51bWJlck9mVGVz
dHMgKyAiKToiOworICAgIHZhciB0YWJsZSA9IGxpc3RpbmcucXVlcnlTZWxlY3RvcigidGFibGUi
KTsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bWJlck9mVGVzdHM7ICsraikgeworICAgICAg
ICB2YXIgdGVzdCA9IHRlc3RzW2pdOworICAgICAgICB2YXIgdGFibGVTZWN0aW9uID0gdGFibGVT
ZWN0aW9uVGVtcGxhdGUuY2xvbmVOb2RlKHRydWUgLyogRGVlcCBjb3B5ICovKTsKKyAgICAgICAg
dmFyIGEgPSB0YWJsZVNlY3Rpb24ucXVlcnlTZWxlY3RvcigiYSIpOworICAgICAgICBhLmhyZWYg
PSB0cmFjVVJMRm9yUHl0aG9uVW5pdFRlc3ROYW1lKHRlc3QubmFtZSk7CisgICAgICAgIGEudGV4
dENvbnRlbnQgPSB0ZXN0Lm5hbWU7CisKKyAgICAgICAgc2V0QWN0dWFsUmVzdWx0c1Zpc2libGUo
dGFibGVTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoInRyIiksIGZhbHNlKTsKKworICAgICAgICAvLyBG
SVhNRTogQ29uc2lkZXIgY3JlYXRpbmcgaHlwZXJsaW5rcyB0byB0cmFjLndlYmtpdC5vcmcgY29y
cmVzcG9uZGluZyB0byBlYWNoIGZpbGUgcmVmZXJlbmNlZCBpbiB0aGUgYmFja3RyYWNlLgorICAg
ICAgICB0YWJsZVNlY3Rpb24ucXVlcnlTZWxlY3RvcigiLmFjdHVhbC1yZXN1bHRzIikudGV4dENv
bnRlbnQgPSB0ZXN0LnJlc3VsdDsKKyAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodGFibGVTZWN0
aW9uKTsKKyAgICB9CisgICAgbGlzdGluZ0NvbnRhaW5lci5hcHBlbmRDaGlsZChsaXN0aW5nKTsK
K30KKwordmFyIHBhc3NpbmdMaXN0aW5nVGVtcGxhdGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9y
KCIucGFzc2luZy10ZXN0LWxpc3RpbmciKS5jb250ZW50OwordmFyIHBhc3NpbmdUYWJsZVNlY3Rp
b25UZW1wbGF0ZSA9IHBhc3NpbmdMaXN0aW5nVGVtcGxhdGUucXVlcnlTZWxlY3RvcigiLnBhc3Np
bmctdGVzdC10YWJsZS1zZWN0aW9uIikuY29udGVudDsKKwordmFyIHBhc3NpbmdUZXN0cyA9IGdf
anNvbnAucGFzc2VzOwordmFyIG51bWJlck9mUGFzc2luZ1Rlc3RzID0gcGFzc2luZ1Rlc3RzLmxl
bmd0aDsKKwordmFyIGxpc3RpbmcgPSBwYXNzaW5nTGlzdGluZ1RlbXBsYXRlLmNsb25lTm9kZSh0
cnVlIC8qIERlZXAgY29weSAqLyk7CitsaXN0aW5nLnF1ZXJ5U2VsZWN0b3IoImgxIikudGV4dENv
bnRlbnQgPSAiVGVzdHMgdGhhdCBwYXNzZWQgKCIgKyBudW1iZXJPZlBhc3NpbmdUZXN0cyArICIp
OiI7Cit2YXIgdGFibGUgPSBsaXN0aW5nLnF1ZXJ5U2VsZWN0b3IoInRhYmxlIik7Citmb3IgKHZh
ciBqID0gMDsgaiA8IG51bWJlck9mUGFzc2luZ1Rlc3RzOyArK2opIHsKKyAgICB2YXIgdGVzdE5h
bWUgPSBwYXNzaW5nVGVzdHNbal07CisgICAgdmFyIHRhYmxlU2VjdGlvbiA9IHBhc3NpbmdUYWJs
ZVNlY3Rpb25UZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSAvKiBEZWVwIGNvcHkgKi8pOworICAgIHZh
ciBhID0gdGFibGVTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoImEiKTsKKyAgICBhLmhyZWYgPSB0cmFj
VVJMRm9yUHl0aG9uVW5pdFRlc3ROYW1lKHRlc3ROYW1lKTsKKyAgICBhLnRleHRDb250ZW50ID0g
dGVzdE5hbWU7CisKKyAgICB0YWJsZS5hcHBlbmRDaGlsZCh0YWJsZVNlY3Rpb24pOworfQorbGlz
dGluZ0NvbnRhaW5lci5hcHBlbmRDaGlsZChsaXN0aW5nKTsKKworZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChsaXN0aW5nQ29udGFpbmVyKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQppbmRleCBkZmM4Mzc2ZGUyYTBkYzJjYWI3ZThi
MjhlMTdmYjM2YWM0NzQzZDdlLi5kMTg2ZjJjMDJiZTQ4N2QyZmNlZDU2MGE4YWM1NTI4M2MxNDQ0
OTk0IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQpAQCAtNzgxLDYgKzc4MSw5IEBA
IGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgcHl0aG9uX3VuaXR0ZXN0X3Jlc3VsdHNfZGly
ZWN0b3J5KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgncHl0aG9uLXVu
aXR0ZXN0LXJlc3VsdHMnKQogCisgICAgZGVmIHNjcmlwdF9yZXNvdXJjZXNfZGlyZWN0b3J5KHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoIlRvb2xzIiwg
IlNjcmlwdHMiLCAicmVzb3VyY2VzIikKKwogICAgIGRlZiBkZWZhdWx0X3Jlc3VsdHNfZGlyZWN0
b3J5KHNlbGYpOgogICAgICAgICAiIiJBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkZWZhdWx0IHBsYWNl
IHRvIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHMuIiIiCiAgICAgICAgICMgUmVzdWx0cyBhcmUgc3Rv
cmUgcmVsYXRpdmUgdG8gdGhlIGJ1aWx0IHByb2R1Y3RzIHRvIG1ha2UgaXQgZWFzeQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3J1bnRlc3RzLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3J1bnRlc3RzLnB5CmluZGV4IGVjZDYzNTE3
NzMxYzAwMjk5YWNjNWUxOTk4NjkwOGU3MzVmNjQ0ODMuLjM1MzUzMWRhMDBmYWMyZTQ5YTcwYWEz
Mzg3YWNhODg5ODUzMDcwZWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9zdGVwcy9ydW50ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3Rl
cHMvcnVudGVzdHMucHkKQEAgLTU4LDEyICs1OCwxNiBAQCBjbGFzcyBSdW5UZXN0cyhBYnN0cmFj
dFN0ZXApOgogICAgICAgICAgICAgX2xvZy5pbmZvKCJSdW5uaW5nIFB5dGhvbiB1bml0IHRlc3Rz
IikKICAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMubm9uX2ludGVyYWN0aXZlOgogICAgICAg
ICAgICAgICAgIGZpbGVzeXN0ZW0gPSBzZWxmLl90b29sLmZpbGVzeXN0ZW0KLSAgICAgICAgICAg
ICAgICBweXRob25fdW5pdHRlc3RfcmVzdWx0c19kaXJlY3RvcnkgPSBzZWxmLl90b29sLnBvcnRf
ZmFjdG9yeS5nZXQoKS5weXRob25fdW5pdHRlc3RfcmVzdWx0c19kaXJlY3RvcnkoKQorICAgICAg
ICAgICAgICAgIHBvcnQgPSBzZWxmLl90b29sLnBvcnRfZmFjdG9yeS5nZXQoKQorICAgICAgICAg
ICAgICAgIHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVjdG9yeSA9IHBvcnQucHl0aG9uX3Vu
aXR0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5KCkKICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLm1h
eWJlX21ha2VfZGlyZWN0b3J5KHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVjdG9yeSkKIAog
ICAgICAgICAgICAgICAgIHB5dGhvbl91bml0dGVzdHNfY29tbWFuZC5hcHBlbmQoJy0tanNvbicp
CiAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5fdG9vbC5leGVjdXRpdmUucnVuX2NvbW1h
bmQocHl0aG9uX3VuaXR0ZXN0c19jb21tYW5kLCBjd2Q9c2VsZi5fdG9vbC5zY20oKS5jaGVja291
dF9yb290LCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IsIHJldHVybl9zdGRl
cnI9RmFsc2UpCiAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoZmls
ZXN5c3RlbS5qb2luKHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVjdG9yeSwgInJlc3VsdHMu
anNvbiIpLCBvdXRwdXQpCisgICAgICAgICAgICAgICAgcmVzb3VyY2VzX3BhdGggPSBwb3J0LnNj
cmlwdF9yZXNvdXJjZXNfZGlyZWN0b3J5KCkKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLmNv
cHlmaWxlKGZpbGVzeXN0ZW0uam9pbihyZXNvdXJjZXNfcGF0aCwgInJlc3VsdHMuaHRtbCIpLCBm
aWxlc3lzdGVtLmpvaW4ocHl0aG9uX3VuaXR0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5LCAicmVzdWx0
cy5odG1sIikpCisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS5jb3B5ZmlsZShmaWxlc3lzdGVt
LmpvaW4ocmVzb3VyY2VzX3BhdGgsICJyZXN1bHRzLXN0eWxlc2hlZXQuY3NzIiksIGZpbGVzeXN0
ZW0uam9pbihweXRob25fdW5pdHRlc3RfcmVzdWx0c19kaXJlY3RvcnksICJyZXN1bHRzLXN0eWxl
c2hlZXQuY3NzIikpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuX3Rv
b2wuZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChweXRob25fdW5pdHRlc3RzX2NvbW1h
bmQsIGN3ZD1zZWxmLl90b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245085</attachid>
            <date>2015-01-21 14:16:53 -0800</date>
            <delta_ts>2017-04-24 19:04:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138161-20150121141701.patch</filename>
            <type>text/plain</type>
            <size>10689</size>
            <attacher name="Jake Nielsen">jake.nielsen.webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc4ODU1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWZjNGFkMTZiZjVlYzVhZTZlOGI0OTg0Mjk0ZjBkZGNl
MGQ3NmFkYy4uNmRjMjhjMGRmZjE2NTg0ZWZkYmI1NmJlZTlhMmVlOTQ3YzU2MjMxYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMx
IEBACisyMDE1LTAxLTIxICBKYWtlIE5pZWxzZW4gIDxqYWNvYl9uaWVsc2VuQGFwcGxlLmNvbT4K
KworICAgICAgICB3ZWJraXRweSBuZWVkcyBhIHJlc3VsdHMuaHRtbCBmaWxlIHRvIHJlbmRlciB0
aGUgcmVzdWx0cy5qc29uIGZpbGUgZm9yCisgICAgICAgIGh1bWFuIGV5ZXMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgxNjEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcmVzb3VyY2Vz
L3Jlc3VsdHMtc3R5bGVzaGVldC5jc3M6IEFkZGVkLgorICAgICAgICBTdHlsZSBzaGVldCBmb3Ig
cmVzdWx0cy5odG1sCisgICAgICAgIChib2R5KToKKyAgICAgICAgKGJvZHkgPiAqKToKKyAgICAg
ICAgKGgxKToKKyAgICAgICAgKHByZSk6CisgICAgICAgICguZXhwYW5kLWJ1dHRvbik6CisgICAg
ICAgICguZXhwYW5kLWJ1dHRvbi10ZXh0KToKKyAgICAgICAgKC5oaWRkZW4pOgorICAgICAgICAo
LmFjdHVhbC1yZXN1bHRzKToKKyAgICAgICAgKiBTY3JpcHRzL3Jlc291cmNlcy9yZXN1bHRzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAg
ICAgICBBZGRzIHRoZSBzY3JpcHRfcmVzb3VyY2VzX2RpcmVjdG9yeSBmdW5jdGlvbiB0byBhbGxv
dyBydW50ZXN0cyB0byBjb3B5CisgICAgICAgIHJlc3VsdHMuaHRtbCBhbmQgcmVzdWx0cy1zdHls
ZXNoZWV0LmNzcyBpbnRvIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICBkaXJlY3RvcnkuCisgICAg
ICAgIChQb3J0LnNjcmlwdF9yZXNvdXJjZXNfZGlyZWN0b3J5KToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc3RlcHMvcnVudGVzdHMucHk6CisgICAgICAgIENvcGllcyBmaWxlcyBh
cyBwZXIgY29tbWVudCBhYm92ZS4KKyAgICAgICAgKFJ1blRlc3RzLnJ1bik6CisKIDIwMTUtMDEt
MjEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6
Ly9idWlsZC53ZWJraXQub3JnL2Rhc2hib2FyZC9tZXRyaWNzLmh0bWwgZmFpbHMgYmVjYXVzZSBv
ZiBpb3MtZXdzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3Jlc291cmNlcy9yZXN1bHRzLXN0
eWxlc2hlZXQuY3NzIGIvVG9vbHMvU2NyaXB0cy9yZXNvdXJjZXMvcmVzdWx0cy1zdHlsZXNoZWV0
LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kNjc2NWEyZjFmYmI0NjU4NmEzYzg1YmNmY2RiZmIxYjNmMDYyZDAw
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9yZXNvdXJjZXMvcmVzdWx0cy1zdHls
ZXNoZWV0LmNzcwpAQCAtMCwwICsxLDUxIEBACitib2R5IHsKKyAgICBtYXJnaW46IDA7CisgICAg
Zm9udC1mYW1pbHk6IEhlbHZldGljYSwgc2Fucy1zZXJpZjsKKyAgICBmb250LXNpemU6IDExcHQ7
Cit9CisKK2JvZHkgPiAqIHsKKyAgICBtYXJnaW4tbGVmdDogNHB4OworICAgIG1hcmdpbi10b3A6
IDRweDsKK30KKworaDEgeworICAgIGZvbnQtc2l6ZTogMTRwdDsKKyAgICBtYXJnaW4tdG9wOiAx
LjVlbTsKK30KKworcHJlIHsKKyAgICBmb250LWZhbWlseTogIkNvdXJpZXIgTmV3IjsKKyAgICBi
b3JkZXI6IDFweCBzb2xpZDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTNFM0UzOworICAgIHBh
ZGRpbmc6IDZweDsKK30KKworLmV4cGFuZC1idXR0b24geworICAgIGJhY2tncm91bmQtY29sb3I6
IHdoaXRlOworICAgIHdpZHRoOiAxMXB4OworICAgIGhlaWdodDogMTJweDsKKyAgICBib3JkZXI6
IDFweCBzb2xpZCBncmF5OworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBtYXJnaW46
IDAgM3B4IDAgMDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgY3Vyc29yOiBkZWZhdWx0
OworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Cit9CisKKy5leHBhbmQtYnV0dG9uLXRl
eHQgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0wLjNlbTsKKyAgICBsZWZ0
OiAxcHg7CisgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cit9CisKKy5oaWRkZW4geworICAgIGRp
c3BsYXk6IG5vbmU7Cit9CisKKy5hY3R1YWwtcmVzdWx0cyB7CisgICAgZGlzcGxheTogaW5saW5l
LWJsb2NrOworICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7CisgICAgbWFyZ2luOiA0cHg7Cit9
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9y
ZXNvdXJjZXMvcmVzdWx0cy5odG1sIGIvVG9vbHMvU2NyaXB0cy9yZXNvdXJjZXMvcmVzdWx0cy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjVmZjMzZGZiYzE1NWQxOWI0MDAyODQyOWM1MWVjYjY1YWE2MWEwMWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3Jlc291cmNlcy9yZXN1bHRzLmh0bWwK
QEAgLTAsMCArMSwxNTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJy
ZXN1bHRzLXN0eWxlc2hlZXQuY3NzIj4KKzwvaGVhZD4KKzxib2R5PgorPHRlbXBsYXRlIGNsYXNz
PSJ0ZXN0LXJlc3VsdHMtbGlzdGluZyI+CisgICAgPGgxPlRlc3RzIHRoYXQgZmFpbGVkICgxKTo8
L2gxPgorICAgIDx0YWJsZT4KKyAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJ0ZXN0LXJlc3VsdHMt
dGFibGUtc2VjdGlvbiI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPjxz
cGFuIGNsYXNzPSJleHBhbmQtYnV0dG9uIiBvbmNsaWNrPSJ0b2dnbGVBY3R1YWxSZXN1bHRzKHRo
aXMpIj48c3BhbiBjbGFzcz0iZXhwYW5kLWJ1dHRvbi10ZXh0Ij4rPC9zcGFuPjwvc3Bhbj48YSBo
cmVmPSIjIj53ZWJraXRweS5jb21tb24uZWRpdGRpc3RhbmNlX3VuaXR0ZXN0LkVkaXREaXN0YW5j
ZVRlc3QudGVzdF9lZGl0X2Rpc3RhbmNlPC9hPjwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAg
ICAgICAgICAgPHRyIGNsYXNzPSJoaWRkZW4iPgorICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFu
PSIxIj48cHJlIGNsYXNzPSJhY3R1YWwtcmVzdWx0cyI+QXNzZXJ0aW9uRXJyb3I6IDIgIT0gNjwv
cHJlPjwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICA8L3RlbXBsYXRlPgorICAgIDwv
dGFibGU+Cis8L3RlbXBsYXRlPgorPHRlbXBsYXRlIGNsYXNzPSJwYXNzaW5nLXRlc3QtbGlzdGlu
ZyI+CisgICAgPGgxPlRlc3RzIHRoYXQgcGFzc2VkICgxKTo8L2gxPgorICAgIDx0YWJsZT4KKyAg
ICAgICAgPHRlbXBsYXRlIGNsYXNzPSJwYXNzaW5nLXRlc3QtdGFibGUtc2VjdGlvbiI+CisgICAg
ICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9IiMiPndlYmtpdHB5LmNv
bW1vbi5lZGl0ZGlzdGFuY2VfdW5pdHRlc3QuRWRpdERpc3RhbmNlVGVzdC50ZXN0X2VkaXRfZGlz
dGFuY2U8L2E+PC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGVtcGxhdGU+Cisg
ICAgPC90YWJsZT4KKzwvdGVtcGxhdGU+CisKKzxzY3JpcHQ+CisKK3ZhciBmaWxlUmVxdWVzdCA9
IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworZmlsZVJlcXVlc3Qub3BlbignR0VUJywgInJlc3VsdHMu
anNvbiIsIGZhbHNlKTsKK2ZpbGVSZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdqc29uJzsKK2ZpbGVS
ZXF1ZXN0LnNlbmQoKTsKKwordmFyIGdfanNvbnAgPSBmaWxlUmVxdWVzdC5yZXNwb25zZQorCis8
L3NjcmlwdD4KKworPHNjcmlwdD4KK3ZhciBUUkFDX1dFQktJVFBZX1VSTF9QUkVGSVggPSAiaHR0
cHM6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9Ub29scy9TY3JpcHRzLyI7Cit2YXIg
UFlUSE9OX1VOSVRfVEVTVF9TVUZGSVggPSAiX3VuaXR0ZXN0IjsKK3ZhciBEaXNjbG9zdXJlU3Rh
dGUgPSB7CisgICAgT1BFTjogIuKAkyIsCisgICAgQ0xPU0VEOiAiKyIKK307CisKK2Z1bmN0aW9u
IG1hdGNoZXNTZWxlY3Rvcihub2RlLCBzZWxlY3RvcikKK3sKKyAgICBpZiAobm9kZS5tYXRjaGVz
KQorICAgICAgICByZXR1cm4gbm9kZS5tYXRjaGVzKHNlbGVjdG9yKTsKKyAgICBpZiAobm9kZS53
ZWJraXRNYXRjaGVzU2VsZWN0b3IpCisgICAgICAgIHJldHVybiBub2RlLndlYmtpdE1hdGNoZXNT
ZWxlY3RvcihzZWxlY3Rvcik7CisgICAgaWYgKG5vZGUubW96TWF0Y2hlc1NlbGVjdG9yKQorICAg
ICAgICByZXR1cm4gbm9kZS5tb3pNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpOworfQorCitmdW5j
dGlvbiBwYXJlbnRPZlR5cGUobm9kZSwgc2VsZWN0b3IpCit7CisgICAgd2hpbGUgKG5vZGUgPSBu
b2RlLnBhcmVudE5vZGUpIHsKKyAgICAgICAgaWYgKG1hdGNoZXNTZWxlY3Rvcihub2RlLCBzZWxl
Y3RvcikpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgICAgcmV0dXJuIG51bGw7
Cit9CisKK2Z1bmN0aW9uIHNldEFjdHVhbFJlc3VsdHNWaXNpYmxlKHJlc3VsdFNlY3Rpb24sIHZp
c2libGUpCit7CisgICAgdmFyIGZ1bmN0aW9uVG9DYWxsOworICAgIHZhciBuZXdEaXNjbG9zdXJl
U3RhdGU7CisgICAgaWYgKHZpc2libGUpIHsKKyAgICAgICAgbmV3RGlzY2xvc3VyZVN0YXRlID0g
RGlzY2xvc3VyZVN0YXRlLk9QRU47CisgICAgICAgIGZ1bmN0aW9uVG9DYWxsID0gInJlbW92ZSI7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbmV3RGlzY2xvc3VyZVN0YXRlID0gRGlzY2xvc3VyZVN0
YXRlLkNMT1NFRDsKKyAgICAgICAgZnVuY3Rpb25Ub0NhbGwgPSAiYWRkIjsKKyAgICB9CisgICAg
dmFyIGV4cGFuZEJ1dHRvblRleHQgPSByZXN1bHRTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoIi5leHBh
bmQtYnV0dG9uLXRleHQiKTsKKyAgICBleHBhbmRCdXR0b25UZXh0LnRleHRDb250ZW50ID0gbmV3
RGlzY2xvc3VyZVN0YXRlOworICAgIHJlc3VsdFNlY3Rpb24ubmV4dEVsZW1lbnRTaWJsaW5nLmNs
YXNzTGlzdFtmdW5jdGlvblRvQ2FsbF0oImhpZGRlbiIpOworfQorCitmdW5jdGlvbiB0b2dnbGVB
Y3R1YWxSZXN1bHRzKGVsZW1lbnQpCit7CisgICAgc2V0QWN0dWFsUmVzdWx0c1Zpc2libGUocGFy
ZW50T2ZUeXBlKGVsZW1lbnQsICJ0ciIpLCBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5leHBhbmQt
YnV0dG9uLXRleHQiKS50ZXh0Q29udGVudCA9PT0gRGlzY2xvc3VyZVN0YXRlLkNMT1NFRCk7Cit9
CisKK2Z1bmN0aW9uIHRyYWNVUkxGb3JQeXRob25Vbml0VGVzdE5hbWUodW5pdFRlc3ROYW1lKQor
eworICAgIHZhciBtb2R1bGVQYXRoID0gdW5pdFRlc3ROYW1lLnN1YnN0cigwLCB1bml0VGVzdE5h
bWUubGFzdEluZGV4T2YoUFlUSE9OX1VOSVRfVEVTVF9TVUZGSVggKyAiLiIpICsgUFlUSE9OX1VO
SVRfVEVTVF9TVUZGSVgubGVuZ3RoKTsKKyAgICByZXR1cm4gVFJBQ19XRUJLSVRQWV9VUkxfUFJF
RklYICsgbW9kdWxlUGF0aC5yZXBsYWNlKC9cLi9nLCAiLyIpICsgIi5weSI7Cit9CisKK3ZhciBU
ZXN0Q2F0ZWdvcmllcyA9IFsKK3sKKyAgICBuYW1lOiAiVGVzdHMgdGhhdCBmYWlsZWQiLAorICAg
IHRlc3RzOiBnX2pzb25wLmZhaWx1cmVzLAorfSwKK3sKKyAgICBuYW1lOiAiVGVzdHMgdGhhdCBo
YWQgZXJyb3Igb3V0cHV0IiwKKyAgICB0ZXN0czogZ19qc29ucC5lcnJvcnMsCit9CitdOworCit2
YXIgbGlzdGluZ0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwordmFy
IGxpc3RpbmdUZW1wbGF0ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi50ZXN0LXJlc3VsdHMt
bGlzdGluZyIpLmNvbnRlbnQ7Cit2YXIgdGFibGVTZWN0aW9uVGVtcGxhdGUgPSBsaXN0aW5nVGVt
cGxhdGUucXVlcnlTZWxlY3RvcigiLnRlc3QtcmVzdWx0cy10YWJsZS1zZWN0aW9uIikuY29udGVu
dDsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBUZXN0Q2F0ZWdvcmllcy5sZW5ndGg7ICsraSkgewor
ICAgIHZhciB0ZXN0Q2F0ZWdvcnkgPSBUZXN0Q2F0ZWdvcmllc1tpXTsKKyAgICB2YXIgdGVzdHMg
PSB0ZXN0Q2F0ZWdvcnkudGVzdHM7CisgICAgdmFyIG51bWJlck9mVGVzdHMgPSB0ZXN0cy5sZW5n
dGg7CisKKyAgICB2YXIgbGlzdGluZyA9IGxpc3RpbmdUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSAv
KiBEZWVwIGNvcHkgKi8pOworICAgIGxpc3RpbmcucXVlcnlTZWxlY3RvcigiaDEiKS50ZXh0Q29u
dGVudCA9IHRlc3RDYXRlZ29yeS5uYW1lICsgIiAoIiArIG51bWJlck9mVGVzdHMgKyAiKToiOwor
ICAgIHZhciB0YWJsZSA9IGxpc3RpbmcucXVlcnlTZWxlY3RvcigidGFibGUiKTsKKyAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IG51bWJlck9mVGVzdHM7ICsraikgeworICAgICAgICB2YXIgdGVzdCA9
IHRlc3RzW2pdOworICAgICAgICB2YXIgdGFibGVTZWN0aW9uID0gdGFibGVTZWN0aW9uVGVtcGxh
dGUuY2xvbmVOb2RlKHRydWUgLyogRGVlcCBjb3B5ICovKTsKKyAgICAgICAgdmFyIGEgPSB0YWJs
ZVNlY3Rpb24ucXVlcnlTZWxlY3RvcigiYSIpOworICAgICAgICBhLmhyZWYgPSB0cmFjVVJMRm9y
UHl0aG9uVW5pdFRlc3ROYW1lKHRlc3QubmFtZSk7CisgICAgICAgIGEudGV4dENvbnRlbnQgPSB0
ZXN0Lm5hbWU7CisKKyAgICAgICAgc2V0QWN0dWFsUmVzdWx0c1Zpc2libGUodGFibGVTZWN0aW9u
LnF1ZXJ5U2VsZWN0b3IoInRyIiksIGZhbHNlKTsKKworICAgICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgY3JlYXRpbmcgaHlwZXJsaW5rcyB0byB0cmFjLndlYmtpdC5vcmcgY29ycmVzcG9uZGluZyB0
byBlYWNoIGZpbGUgcmVmZXJlbmNlZCBpbiB0aGUgYmFja3RyYWNlLgorICAgICAgICB0YWJsZVNl
Y3Rpb24ucXVlcnlTZWxlY3RvcigiLmFjdHVhbC1yZXN1bHRzIikudGV4dENvbnRlbnQgPSB0ZXN0
LnJlc3VsdDsKKyAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodGFibGVTZWN0aW9uKTsKKyAgICB9
CisgICAgbGlzdGluZ0NvbnRhaW5lci5hcHBlbmRDaGlsZChsaXN0aW5nKTsKK30KKwordmFyIHBh
c3NpbmdMaXN0aW5nVGVtcGxhdGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucGFzc2luZy10
ZXN0LWxpc3RpbmciKS5jb250ZW50OwordmFyIHBhc3NpbmdUYWJsZVNlY3Rpb25UZW1wbGF0ZSA9
IHBhc3NpbmdMaXN0aW5nVGVtcGxhdGUucXVlcnlTZWxlY3RvcigiLnBhc3NpbmctdGVzdC10YWJs
ZS1zZWN0aW9uIikuY29udGVudDsKKwordmFyIHBhc3NpbmdUZXN0cyA9IGdfanNvbnAucGFzc2Vz
OwordmFyIG51bWJlck9mUGFzc2luZ1Rlc3RzID0gcGFzc2luZ1Rlc3RzLmxlbmd0aDsKKwordmFy
IGxpc3RpbmcgPSBwYXNzaW5nTGlzdGluZ1RlbXBsYXRlLmNsb25lTm9kZSh0cnVlIC8qIERlZXAg
Y29weSAqLyk7CitsaXN0aW5nLnF1ZXJ5U2VsZWN0b3IoImgxIikudGV4dENvbnRlbnQgPSAiVGVz
dHMgdGhhdCBwYXNzZWQgKCIgKyBudW1iZXJPZlBhc3NpbmdUZXN0cyArICIpOiI7Cit2YXIgdGFi
bGUgPSBsaXN0aW5nLnF1ZXJ5U2VsZWN0b3IoInRhYmxlIik7Citmb3IgKHZhciBqID0gMDsgaiA8
IG51bWJlck9mUGFzc2luZ1Rlc3RzOyArK2opIHsKKyAgICB2YXIgdGVzdE5hbWUgPSBwYXNzaW5n
VGVzdHNbal07CisgICAgdmFyIHRhYmxlU2VjdGlvbiA9IHBhc3NpbmdUYWJsZVNlY3Rpb25UZW1w
bGF0ZS5jbG9uZU5vZGUodHJ1ZSAvKiBEZWVwIGNvcHkgKi8pOworICAgIHZhciBhID0gdGFibGVT
ZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoImEiKTsKKyAgICBhLmhyZWYgPSB0cmFjVVJMRm9yUHl0aG9u
VW5pdFRlc3ROYW1lKHRlc3ROYW1lKTsKKyAgICBhLnRleHRDb250ZW50ID0gdGVzdE5hbWU7CisK
KyAgICB0YWJsZS5hcHBlbmRDaGlsZCh0YWJsZVNlY3Rpb24pOworfQorbGlzdGluZ0NvbnRhaW5l
ci5hcHBlbmRDaGlsZChsaXN0aW5nKTsKKworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaXN0
aW5nQ29udGFpbmVyKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvYmFzZS5weQppbmRleCBkZmM4Mzc2ZGUyYTBkYzJjYWI3ZThiMjhlMTdmYjM2YWM0
NzQzZDdlLi5kMTg2ZjJjMDJiZTQ4N2QyZmNlZDU2MGE4YWM1NTI4M2MxNDQ0OTk0IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQpAQCAtNzgxLDYgKzc4MSw5IEBAIGNsYXNzIFBvcnQo
b2JqZWN0KToKICAgICBkZWYgcHl0aG9uX3VuaXR0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5KHNlbGYp
OgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgncHl0aG9uLXVuaXR0ZXN0LXJlc3Vs
dHMnKQogCisgICAgZGVmIHNjcmlwdF9yZXNvdXJjZXNfZGlyZWN0b3J5KHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoIlRvb2xzIiwgIlNjcmlwdHMiLCAi
cmVzb3VyY2VzIikKKwogICAgIGRlZiBkZWZhdWx0X3Jlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgog
ICAgICAgICAiIiJBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkZWZhdWx0IHBsYWNlIHRvIHN0b3JlIHRo
ZSB0ZXN0IHJlc3VsdHMuIiIiCiAgICAgICAgICMgUmVzdWx0cyBhcmUgc3RvcmUgcmVsYXRpdmUg
dG8gdGhlIGJ1aWx0IHByb2R1Y3RzIHRvIG1ha2UgaXQgZWFzeQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3J1bnRlc3RzLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL3N0ZXBzL3J1bnRlc3RzLnB5CmluZGV4IGVjZDYzNTE3NzMxYzAwMjk5YWNj
NWUxOTk4NjkwOGU3MzVmNjQ0ODMuLjM1MzUzMWRhMDBmYWMyZTQ5YTcwYWEzMzg3YWNhODg5ODUz
MDcwZWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9ydW50
ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvcnVudGVzdHMu
cHkKQEAgLTU4LDEyICs1OCwxNiBAQCBjbGFzcyBSdW5UZXN0cyhBYnN0cmFjdFN0ZXApOgogICAg
ICAgICAgICAgX2xvZy5pbmZvKCJSdW5uaW5nIFB5dGhvbiB1bml0IHRlc3RzIikKICAgICAgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMubm9uX2ludGVyYWN0aXZlOgogICAgICAgICAgICAgICAgIGZp
bGVzeXN0ZW0gPSBzZWxmLl90b29sLmZpbGVzeXN0ZW0KLSAgICAgICAgICAgICAgICBweXRob25f
dW5pdHRlc3RfcmVzdWx0c19kaXJlY3RvcnkgPSBzZWxmLl90b29sLnBvcnRfZmFjdG9yeS5nZXQo
KS5weXRob25fdW5pdHRlc3RfcmVzdWx0c19kaXJlY3RvcnkoKQorICAgICAgICAgICAgICAgIHBv
cnQgPSBzZWxmLl90b29sLnBvcnRfZmFjdG9yeS5nZXQoKQorICAgICAgICAgICAgICAgIHB5dGhv
bl91bml0dGVzdF9yZXN1bHRzX2RpcmVjdG9yeSA9IHBvcnQucHl0aG9uX3VuaXR0ZXN0X3Jlc3Vs
dHNfZGlyZWN0b3J5KCkKICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLm1heWJlX21ha2VfZGly
ZWN0b3J5KHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVjdG9yeSkKIAogICAgICAgICAgICAg
ICAgIHB5dGhvbl91bml0dGVzdHNfY29tbWFuZC5hcHBlbmQoJy0tanNvbicpCiAgICAgICAgICAg
ICAgICAgb3V0cHV0ID0gc2VsZi5fdG9vbC5leGVjdXRpdmUucnVuX2NvbW1hbmQocHl0aG9uX3Vu
aXR0ZXN0c19jb21tYW5kLCBjd2Q9c2VsZi5fdG9vbC5zY20oKS5jaGVja291dF9yb290LCBlcnJv
cl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IsIHJldHVybl9zdGRlcnI9RmFsc2UpCiAg
ICAgICAgICAgICAgICAgZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoZmlsZXN5c3RlbS5qb2lu
KHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVjdG9yeSwgInJlc3VsdHMuanNvbiIpLCBvdXRw
dXQpCisgICAgICAgICAgICAgICAgcmVzb3VyY2VzX3BhdGggPSBwb3J0LnNjcmlwdF9yZXNvdXJj
ZXNfZGlyZWN0b3J5KCkKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLmNvcHlmaWxlKGZpbGVz
eXN0ZW0uam9pbihyZXNvdXJjZXNfcGF0aCwgInJlc3VsdHMuaHRtbCIpLCBmaWxlc3lzdGVtLmpv
aW4ocHl0aG9uX3VuaXR0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5LCAicmVzdWx0cy5odG1sIikpCisg
ICAgICAgICAgICAgICAgZmlsZXN5c3RlbS5jb3B5ZmlsZShmaWxlc3lzdGVtLmpvaW4ocmVzb3Vy
Y2VzX3BhdGgsICJyZXN1bHRzLXN0eWxlc2hlZXQuY3NzIiksIGZpbGVzeXN0ZW0uam9pbihweXRo
b25fdW5pdHRlc3RfcmVzdWx0c19kaXJlY3RvcnksICJyZXN1bHRzLXN0eWxlc2hlZXQuY3NzIikp
CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuX3Rvb2wuZXhlY3V0aXZl
LnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChweXRob25fdW5pdHRlc3RzX2NvbW1hbmQsIGN3ZD1zZWxm
Ll90b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCiAK
</data>
<flag name="review"
          id="270031"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>