<?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>154914</bug_id>
          
          <creation_ts>2016-03-02 02:08:58 -0800</creation_ts>
          <short_desc>Add some new controllers, and refine tests</short_desc>
          <delta_ts>2016-03-03 00:22:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Lee">jonlee</reporter>
          <assigned_to name="Jon Lee">jonlee</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>rniwa</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1169790</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-02 02:08:58 -0800</bug_when>
    <thetext>Add a new 30-fps based ramp controller, and a fixed controller that does not step. Refine some of the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169791</commentid>
    <comment_count>1</comment_count>
      <attachid>272647</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-02 02:09:38 -0800</bug_when>
    <thetext>Created attachment 272647
1. Switch to ramp controller as default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169792</commentid>
    <comment_count>2</comment_count>
      <attachid>272648</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-02 02:10:02 -0800</bug_when>
    <thetext>Created attachment 272648
2. Improve tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169793</commentid>
    <comment_count>3</comment_count>
      <attachid>272649</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-02 02:10:21 -0800</bug_when>
    <thetext>Created attachment 272649
3. Add a fixed controller, with no step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169794</commentid>
    <comment_count>4</comment_count>
      <attachid>272650</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-02 02:10:41 -0800</bug_when>
    <thetext>Created attachment 272650
4. Add a controller that centers around 30 fps instead of 60 fps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169796</commentid>
    <comment_count>5</comment_count>
      <attachid>272651</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-02 02:15:15 -0800</bug_when>
    <thetext>Created attachment 272651
Patch involving test harness</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169797</commentid>
    <comment_count>6</comment_count>
      <attachid>272652</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-02 02:15:47 -0800</bug_when>
    <thetext>Created attachment 272652
Patch with test updates (basically same as 2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169829</commentid>
    <comment_count>7</comment_count>
      <attachid>272652</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-02 09:20:48 -0800</bug_when>
    <thetext>Comment on attachment 272652
Patch with test updates (basically same as 2)

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

&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:138
&gt; +        var focusProgress = .5 + .5 * Math.sin(time / this.focusDuration);

I would prefer 0.5

&gt; PerformanceTests/Animometer/tests/master/resources/multiply.js:83
&gt; +        this._distanceFactor = 1.5 * (1 - .5 * Math.max(this._offsetIndex - this._centerSpiralCount, 0) / this._sidePanelCount) / Math.sqrt(this._offsetIndex);

0.5 (there&apos;s a 0.5 above).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169850</commentid>
    <comment_count>8</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-02 10:18:45 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 272652 [details]
&gt; Patch with test updates (basically same as 2)
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=272652&amp;action=review
&gt; 
&gt; &gt; PerformanceTests/Animometer/tests/master/resources/focus.js:138
&gt; &gt; +        var focusProgress = .5 + .5 * Math.sin(time / this.focusDuration);
&gt; 
&gt; I would prefer 0.5
&gt; 
&gt; &gt; PerformanceTests/Animometer/tests/master/resources/multiply.js:83
&gt; &gt; +        this._distanceFactor = 1.5 * (1 - .5 * Math.max(this._offsetIndex - this._centerSpiralCount, 0) / this._sidePanelCount) / Math.sqrt(this._offsetIndex);
&gt; 
&gt; 0.5 (there&apos;s a 0.5 above).

Done for both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169871</commentid>
    <comment_count>9</comment_count>
      <attachid>272651</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-02 11:15:58 -0800</bug_when>
    <thetext>Comment on attachment 272651
Patch involving test harness

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

&gt; PerformanceTests/Animometer/resources/debug-runner/animometer.js:498
&gt; +        if (dashboard.options[&quot;controller&quot;].indexOf(&quot;ramp&quot;) != -1)

It took me awhile to realize that you want to match &quot;ramp&quot; or &quot;ramp30&quot;. I am not sure if this is clear enough especially I need to look at the HTML file and look for the values that the &quot;controller&apos; field can take to see that.

&gt; PerformanceTests/Animometer/resources/runner/animometer.js:-370
&gt; -            &quot;frame-rate&quot;: 50,

Why are you deleting the default &quot;frame-rate&quot; value? What should it be if the controller == &apos;adaptive&apos; and its &apos;frame-rate&apos; is not specified?

&gt; PerformanceTests/Animometer/tests/resources/main.js:225
&gt; +        options[&quot;interval-length&quot;] = 0;

&quot;interval-length&quot; is a little bit vague name. I think it is not easy to understand what exactly this option for. Beside unlike other options, there is no element for it in the developer.html.

&gt; PerformanceTests/Animometer/tests/resources/main.js:226
&gt; +        Controller.call(this, benchmark, options);

The order here is tricky where you make the derived class controls the setting of this._intervalLength. I have to go to the constructor of the Controller class to see this statement first to understand why you put options[&quot;interval-length&quot;] = 0 before calling the constructor. 

        // Length of subsequent intervals; a value of 0 means use no intervals
        this._intervalLength = options[&quot;interval-length&quot;] || 100;

Can&apos;t we get rid of options[&quot;interval-length&quot;] completely since there is no element for it in the developer.html and add the following statement after calling the constructor of the Controller class in both FixedController and StepController:

this._intervalLength = 0;

By the way this is what we do with this.initialComplexity: we set its default value in the Controller constructor and then we override its value here.

&gt; PerformanceTests/Animometer/tests/resources/main.js:572
&gt; +Ramp30Controller = Utilities.createSubclass(RampController,

I think I do not like this inheritance. RampController is actually Ramp60Controller. And Ramp30Controller is inheriting from it and just overrides the four class members below. Can&apos;t we instead make RampController takes the frame rate as input and calculate these four members accordingly?

&gt; PerformanceTests/ChangeLog:31
&gt; +        * Animometer/developer.html: Increase the test length to 20 seconds.

What is the gain we get by increasing the test length to 20 seconds? Do we get more consistent results by this increase?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169939</commentid>
    <comment_count>10</comment_count>
      <attachid>272652</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-02 14:20:05 -0800</bug_when>
    <thetext>Comment on attachment 272652
Patch with test updates (basically same as 2)

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

&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:26
&gt; +        this.container = document.createElement(&apos;div&apos;);

Don&apos;t we need to set the parent of this.container?

&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:47
&gt; +    },

Should this be a utility function? Something like Utilities.hideElement().

&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:52
&gt; +    },

Ditto.

&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:92
&gt; +        var particle = document.querySelector(&quot;#center-text div&quot;);

In the HTML, there is a rule for the selector &quot;#stage div div&quot;. Aren&apos;t &quot;#center-text div&quot; and &quot;#stage div div&quot; the same? If they are, can&apos;t we use the same selector for consistency?

&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:115
&gt; +            this._offsetIndex = Math.max(0, this._offsetIndex + count);
&gt; +            for (var i = this._offsetIndex; i &lt; this._testElements.length; ++i)
&gt; +                this._testElements[i].hide();

Do you need to hide from this._offsetIndex to this._testElements.length?  I think you need to loop from the new _offsetIndex to the original _offsetIndex; like what you do in the (count &gt; 0) case?

for (var i = newIndex; i &lt; this._offsetIndex; ++i)
    this._testElements[i].hide();

&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:120
&gt; +        if (newIndex &gt; this._testElements.length) {

Do we need this if-statment? The termination condition in the for-loop is doing the same thing.

&gt; PerformanceTests/ChangeLog:12
&gt; +        overflow. This way, when the blur is applied, it avoid causing layer resizes.

Nit: avoids</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169953</commentid>
    <comment_count>11</comment_count>
      <attachid>272651</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-02 14:37:56 -0800</bug_when>
    <thetext>Comment on attachment 272651
Patch involving test harness

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

&gt;&gt; PerformanceTests/Animometer/resources/debug-runner/animometer.js:498
&gt;&gt; +        if (dashboard.options[&quot;controller&quot;].indexOf(&quot;ramp&quot;) != -1)
&gt; 
&gt; It took me awhile to realize that you want to match &quot;ramp&quot; or &quot;ramp30&quot;. I am not sure if this is clear enough especially I need to look at the HTML file and look for the values that the &quot;controller&apos; field can take to see that.

I can rewrite this.

&gt;&gt; PerformanceTests/Animometer/resources/runner/animometer.js:-370
&gt;&gt; -            &quot;frame-rate&quot;: 50,
&gt; 
&gt; Why are you deleting the default &quot;frame-rate&quot; value? What should it be if the controller == &apos;adaptive&apos; and its &apos;frame-rate&apos; is not specified?

These are hard-coded for this page, so there&apos;s no opportunity to change it from the user&apos;s side.

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:225
&gt;&gt; +        options[&quot;interval-length&quot;] = 0;
&gt; 
&gt; &quot;interval-length&quot; is a little bit vague name. I think it is not easy to understand what exactly this option for. Beside unlike other options, there is no element for it in the developer.html.

Right. The idea is that options can be added by script.

I don&apos;t have a better name for it.

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:226
&gt;&gt; +        Controller.call(this, benchmark, options);
&gt; 
&gt; The order here is tricky where you make the derived class controls the setting of this._intervalLength. I have to go to the constructor of the Controller class to see this statement first to understand why you put options[&quot;interval-length&quot;] = 0 before calling the constructor. 
&gt; 
&gt;         // Length of subsequent intervals; a value of 0 means use no intervals
&gt;         this._intervalLength = options[&quot;interval-length&quot;] || 100;
&gt; 
&gt; Can&apos;t we get rid of options[&quot;interval-length&quot;] completely since there is no element for it in the developer.html and add the following statement after calling the constructor of the Controller class in both FixedController and StepController:
&gt; 
&gt; this._intervalLength = 0;
&gt; 
&gt; By the way this is what we do with this.initialComplexity: we set its default value in the Controller constructor and then we override its value here.

Sure.

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:572
&gt;&gt; +Ramp30Controller = Utilities.createSubclass(RampController,
&gt; 
&gt; I think I do not like this inheritance. RampController is actually Ramp60Controller. And Ramp30Controller is inheriting from it and just overrides the four class members below. Can&apos;t we instead make RampController takes the frame rate as input and calculate these four members accordingly?

There&apos;s no calculation here, they are hard-coded values. I don&apos;t think we should try to make a generic ramp controller.

&gt;&gt; PerformanceTests/ChangeLog:31
&gt;&gt; +        * Animometer/developer.html: Increase the test length to 20 seconds.
&gt; 
&gt; What is the gain we get by increasing the test length to 20 seconds? Do we get more consistent results by this increase?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169958</commentid>
    <comment_count>12</comment_count>
      <attachid>272652</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-02 14:47:03 -0800</bug_when>
    <thetext>Comment on attachment 272652
Patch with test updates (basically same as 2)

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

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:26
&gt;&gt; +        this.container = document.createElement(&apos;div&apos;);
&gt; 
&gt; Don&apos;t we need to set the parent of this.container?

That&apos;s done in tune().

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:47
&gt;&gt; +    },
&gt; 
&gt; Should this be a utility function? Something like Utilities.hideElement().

In other tests I use visibility instead, so it&apos;s tied to the technique of the test. Not sure this is worth pulling out into a utility function.

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:92
&gt;&gt; +        var particle = document.querySelector(&quot;#center-text div&quot;);
&gt; 
&gt; In the HTML, there is a rule for the selector &quot;#stage div div&quot;. Aren&apos;t &quot;#center-text div&quot; and &quot;#stage div div&quot; the same? If they are, can&apos;t we use the same selector for consistency?

No. &quot;#center-text div&quot; has some extra special values for the styles, as you can see below.

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:115
&gt;&gt; +                this._testElements[i].hide();
&gt; 
&gt; Do you need to hide from this._offsetIndex to this._testElements.length?  I think you need to loop from the new _offsetIndex to the original _offsetIndex; like what you do in the (count &gt; 0) case?
&gt; 
&gt; for (var i = newIndex; i &lt; this._offsetIndex; ++i)
&gt;     this._testElements[i].hide();

I felt it was a small optimization and not worth it. Everything that&apos;s already hidden stays as such. It matters in the other case because the amount we have to tune might still leave some already-allocated particles hidden.

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/focus.js:120
&gt;&gt; +        if (newIndex &gt; this._testElements.length) {
&gt; 
&gt; Do we need this if-statment? The termination condition in the for-loop is doing the same thing.

Removed.

&gt;&gt; PerformanceTests/ChangeLog:12
&gt;&gt; +        overflow. This way, when the blur is applied, it avoid causing layer resizes.
&gt; 
&gt; Nit: avoids

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170137</commentid>
    <comment_count>13</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-03 00:16:05 -0800</bug_when>
    <thetext>Committed r197498: &lt;http://trac.webkit.org/changeset/197498&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170138</commentid>
    <comment_count>14</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-03-03 00:22:29 -0800</bug_when>
    <thetext>Committed r197499: &lt;http://trac.webkit.org/changeset/197499&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272647</attachid>
            <date>2016-03-02 02:09:38 -0800</date>
            <delta_ts>2016-03-02 02:09:38 -0800</delta_ts>
            <desc>1. Switch to ramp controller as default.</desc>
            <filename>0001-Switch-to-ramp-controller-as-default.patch</filename>
            <type>text/plain</type>
            <size>7425</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">RnJvbSBkYzUwNWViZDU5MjU4YjAxNTQwNDIwMjA0M2YyOGI5ZGU1N2FlMjM4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb24gTGVlIDxqb25sZWVAYXBwbGUuY29tPgpEYXRlOiBNb24s
IDI5IEZlYiAyMDE2IDIxOjI0OjU5IC0wODAwClN1YmplY3Q6IFtQQVRDSCAxLzRdIFN3aXRjaCB0
byByYW1wIGNvbnRyb2xsZXIgYXMgZGVmYXVsdC4KCiogQW5pbW9tZXRlci9kZXZlbG9wZXIuaHRt
bDogSW5jcmVhc2UgdGhlIHRlc3QgbGVuZ3RoIHRvIDIwIHNlY29uZHMuCiogQW5pbW9tZXRlci9y
ZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1vbWV0ZXIuanM6IFJlbmFtZSB0aGUgImFkanVzdG1l
bnQiIGZpZWxkIHRvICJjb250cm9sbGVyIgpzaW5jZSB0aGF0IGlzIGEgbW9yZSBhY2N1cmF0ZSBk
ZXNjcmlwdGlvbi4KKiBBbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvZ3JhcGguanM6
CiogQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVubmVyL2FuaW1vbWV0ZXIuanM6IFVwZGF0ZSBwcmVm
ZXJlbmNlcyBmb3IgcmVsZWFzZSBzdWl0ZS4KLS0tCiBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0
ZXIvZGV2ZWxvcGVyLmh0bWwgICAgICAgICAgICAgICAgICAgICB8ICA4ICsrKystLS0tCiAuLi4v
QW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1vbWV0ZXIuanMgICAgICAgICAg
ICB8ICA2ICsrKy0tLQogUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1
Zy1ydW5uZXIvZ3JhcGguanMgICAgfCAgMiArLQogUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVy
L3Jlc291cmNlcy9ydW5uZXIvYW5pbW9tZXRlci5qcyAgICAgfCAgNyArKystLS0tCiBQZXJmb3Jt
YW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvcmVzb3VyY2VzL21haW4uanMgICAgICAgICAgICB8
ICAyICstCiBQZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IDEwICsrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0
aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9B
bmltb21ldGVyL2RldmVsb3Blci5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL2Rl
dmVsb3Blci5odG1sCmluZGV4IDNiMjY0ZmEuLjgzMWI0MjQgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvQW5pbW9tZXRlci9kZXZlbG9wZXIuaHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L0FuaW1vbWV0ZXIvZGV2ZWxvcGVyLmh0bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgICAg
ICAgICAgICAgPGZvcm0gbmFtZT0iYmVuY2htYXJrLW9wdGlvbnMiPgogICAgICAgICAgICAgICAg
ICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgIDxsaT4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIDxsYWJlbD5UZXN0IGxlbmd0aDogPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InRlc3QtaW50
ZXJ2YWwiIHZhbHVlPSIxMCI+IHNlY29uZHMgZWFjaDwvbGFiZWw+CisgICAgICAgICAgICAgICAg
ICAgICAgICA8bGFiZWw+VGVzdCBsZW5ndGg6IDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ0ZXN0
LWludGVydmFsIiB2YWx1ZT0iMjAiPiBzZWNvbmRzIGVhY2g8L2xhYmVsPgogICAgICAgICAgICAg
ICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAg
ICAgICAgICA8aDM+RGlzcGxheTo8L2gzPgpAQCAtNDcsOSArNDcsOSBAQAogICAgICAgICAgICAg
ICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+QWRqdXN0aW5nIHRoZSB0
ZXN0IGNvbXBsZXhpdHk6PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGxhYmVsPjxpbnB1dCBuYW1lPSJhZGp1c3RtZW50
IiB0eXBlPSJyYWRpbyIgdmFsdWU9InN0ZXAiPiBLZWVwIGF0IGEgZml4ZWQgY29tcGxleGl0eSwg
dGhlbiBtYWtlIGEgYmlnIHN0ZXA8L2xhYmVsPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGxpPjxsYWJlbD48aW5wdXQgbmFtZT0iYWRqdXN0bWVudCIgdHlwZT0icmFkaW8iIHZh
bHVlPSJhZGFwdGl2ZSIgY2hlY2tlZD4gTWFpbnRhaW4gdGFyZ2V0IEZQUzwvbGFiZWw+PC9saT4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGxhYmVsPjxpbnB1dCBuYW1lPSJhZGp1
c3RtZW50IiB0eXBlPSJyYWRpbyIgdmFsdWU9InJhbXAiPiBSYW1wPC9sYWJlbD48L2xpPgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48bGFiZWw+PGlucHV0IG5hbWU9ImNvbnRyb2xs
ZXIiIHR5cGU9InJhZGlvIiB2YWx1ZT0ic3RlcCI+IEtlZXAgYXQgYSBmaXhlZCBjb21wbGV4aXR5
LCB0aGVuIG1ha2UgYSBiaWcgc3RlcDwvbGFiZWw+PC9saT4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8bGk+PGxhYmVsPjxpbnB1dCBuYW1lPSJjb250cm9sbGVyIiB0eXBlPSJyYWRpbyIg
dmFsdWU9ImFkYXB0aXZlIj4gTWFpbnRhaW4gdGFyZ2V0IEZQUzwvbGFiZWw+PC9saT4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGxhYmVsPjxpbnB1dCBuYW1lPSJjb250cm9sbGVy
IiB0eXBlPSJyYWRpbyIgdmFsdWU9InJhbXAiIGNoZWNrZWQ+IFJhbXA8L2xhYmVsPjwvbGk+CiAg
ICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICA8L2xpPgog
ICAgICAgICAgICAgICAgICAgICA8bGk+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0Fu
aW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmltb21ldGVyLmpzIGIvUGVyZm9ybWFu
Y2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvYW5pbW9tZXRlci5qcwpp
bmRleCA4Y2I5ZWNkLi5kMmY1YTFlIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1v
bWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmltb21ldGVyLmpzCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1vbWV0ZXIuanMK
QEAgLTMyOCw3ICszMjgsNyBAQCB3aW5kb3cuc3VpdGVzTWFuYWdlciA9CiAgICAgdXBkYXRlRWRp
dHNFbGVtZW50c1N0YXRlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIgZWRpdHNFbGVt
ZW50cyA9IHRoaXMuX2VkaXRzRWxlbWVudHMoKTsKLSAgICAgICAgdmFyIHNob3dDb21wbGV4aXR5
SW5wdXRzID0gb3B0aW9uc01hbmFnZXIudmFsdWVGb3JPcHRpb24oImFkanVzdG1lbnQiKSA9PSAi
c3RlcCI7CisgICAgICAgIHZhciBzaG93Q29tcGxleGl0eUlucHV0cyA9IG9wdGlvbnNNYW5hZ2Vy
LnZhbHVlRm9yT3B0aW9uKCJjb250cm9sbGVyIikgPT0gInN0ZXAiOwogCiAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgZWRpdHNFbGVtZW50cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAg
dmFyIGVkaXRFbGVtZW50ID0gZWRpdHNFbGVtZW50c1tpXTsKQEAgLTQ3MSw3ICs0NzEsNyBAQCBV
dGlsaXRpZXMuZXh0ZW5kT2JqZWN0KHdpbmRvdy5iZW5jaG1hcmtDb250cm9sbGVyLCB7CiAKICAg
ICBvbkJlbmNobWFya09wdGlvbnNDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAg
ICAgIGlmIChldmVudC50YXJnZXQubmFtZSA9PSAiYWRqdXN0bWVudCIpIHsKKyAgICAgICAgaWYg
KGV2ZW50LnRhcmdldC5uYW1lID09ICJjb250cm9sbGVyIikgewogICAgICAgICAgICAgc3VpdGVz
TWFuYWdlci51cGRhdGVFZGl0c0VsZW1lbnRzU3RhdGUoKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtNDk1LDcgKzQ5NSw3IEBAIFV0aWxpdGllcy5leHRlbmRPYmplY3Qod2lu
ZG93LmJlbmNobWFya0NvbnRyb2xsZXIsIHsKICAgICAgICAgfQogCiAgICAgICAgIHZhciBkYXNo
Ym9hcmQgPSBiZW5jaG1hcmtSdW5uZXJDbGllbnQucmVzdWx0czsKLSAgICAgICAgaWYgKGRhc2hi
b2FyZC5vcHRpb25zWyJhZGp1c3RtZW50Il0gPT0gInJhbXAiKQorICAgICAgICBpZiAoZGFzaGJv
YXJkLm9wdGlvbnNbImNvbnRyb2xsZXIiXSA9PSAicmFtcCIpCiAgICAgICAgICAgICBIZWFkZXJz
LmRldGFpbHNbM10uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IEhlYWRlcnMuZGV0YWlsc1sxXS5kaXNhYmxlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9ncmFwaC5qcyBiL1Bl
cmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2dyYXBoLmpz
CmluZGV4IGQ4OTUyYjUuLjc2YTBhOTggMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5p
bW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2dyYXBoLmpzCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2dyYXBoLmpzCkBAIC0zNjgs
NyArMzY4LDcgQEAgVXRpbGl0aWVzLmV4dGVuZE9iamVjdCh3aW5kb3cuYmVuY2htYXJrQ29udHJv
bGxlciwgewogICAgICAgICB9CiAKICAgICAgICAgLy8gcmlnaHQtdGFyZ2V0Ci0gICAgICAgIGlm
IChvcHRpb25zWyJhZGp1c3RtZW50Il0gPT0gImFkYXB0aXZlIikgeworICAgICAgICBpZiAob3B0
aW9uc1siY29udHJvbGxlciJdID09ICJhZGFwdGl2ZSIpIHsKICAgICAgICAgICAgIHZhciB0YXJn
ZXRGcmFtZUxlbmd0aCA9IDEwMDAgLyBvcHRpb25zWyJmcmFtZS1yYXRlIl07CiAgICAgICAgICAg
ICBzdmcuYXBwZW5kKCJsaW5lIikKICAgICAgICAgICAgICAgICAuYXR0cigieDEiLCB4KDApKQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9ydW5uZXIv
YW5pbW9tZXRlci5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVu
bmVyL2FuaW1vbWV0ZXIuanMKaW5kZXggM2FjMmRjYy4uNjQ5OTg1MyAxMDA2NDQKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9ydW5uZXIvYW5pbW9tZXRlci5qcwor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL3J1bm5lci9hbmltb21l
dGVyLmpzCkBAIC0xMDcsNyArMTA3LDcgQEAgUmVzdWx0c0Rhc2hib2FyZCA9IFV0aWxpdGllcy5j
cmVhdGVDbGFzcygKICAgICAgICAgICAgIHJlZ3Jlc3Npb25bU3RyaW5ncy5qc29uLm1lYXN1cmVt
ZW50cy5zdGRldl0gPSBNYXRoLnNxcnQoY2FsY3VsYXRpb24uZXJyb3IgLyBzYW1wbGVzW3Nlcmll
c05hbWVdLmxlbmd0aCk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIGlmICh0aGlzLl9vcHRpb25z
WyJhZGp1c3RtZW50Il0gPT0gInJhbXAiKSB7CisgICAgICAgIGlmICh0aGlzLl9vcHRpb25zWyJj
b250cm9sbGVyIl0gPT0gInJhbXAiKSB7CiAgICAgICAgICAgICB2YXIgdGltZUNvbXBsZXhpdHkg
PSBuZXcgRXhwZXJpbWVudDsKICAgICAgICAgICAgIGRhdGFbU3RyaW5ncy5qc29uLmNvbnRyb2xs
ZXJdLmZvckVhY2goZnVuY3Rpb24ocmVncmVzc2lvbikgewogICAgICAgICAgICAgICAgIHRpbWVD
b21wbGV4aXR5LnNhbXBsZShyZWdyZXNzaW9uW1N0cmluZ3MuanNvbi5jb21wbGV4aXR5XSk7CkBA
IC0zNjQsMTAgKzM2NCw5IEBAIHdpbmRvdy5iZW5jaG1hcmtDb250cm9sbGVyID0gewogICAgIHN0
YXJ0QmVuY2htYXJrOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIgb3B0aW9ucyA9IHsK
LSAgICAgICAgICAgICJ0ZXN0LWludGVydmFsIjogMTAsCisgICAgICAgICAgICAidGVzdC1pbnRl
cnZhbCI6IDIwLAogICAgICAgICAgICAgImRpc3BsYXkiOiAibWluaW1hbCIsCi0gICAgICAgICAg
ICAiYWRqdXN0bWVudCI6ICJhZGFwdGl2ZSIsCi0gICAgICAgICAgICAiZnJhbWUtcmF0ZSI6IDUw
LAorICAgICAgICAgICAgImNvbnRyb2xsZXIiOiAicmFtcCIsCiAgICAgICAgICAgICAia2FsbWFu
LXByb2Nlc3MtZXJyb3IiOiAxLAogICAgICAgICAgICAgImthbG1hbi1tZWFzdXJlbWVudC1lcnJv
ciI6IDQsCiAgICAgICAgICAgICAidGltZS1tZWFzdXJlbWVudCI6ICJwZXJmb3JtYW5jZSIKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9yZXNvdXJjZXMvbWFp
bi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9yZXNvdXJjZXMvbWFpbi5q
cwppbmRleCA1MjllMWNlLi5jZDRiZjA3IDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0Fu
aW1vbWV0ZXIvdGVzdHMvcmVzb3VyY2VzL21haW4uanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9B
bmltb21ldGVyL3Rlc3RzL3Jlc291cmNlcy9tYWluLmpzCkBAIC03NzUsNyArNzc1LDcgQEAgQmVu
Y2htYXJrID0gVXRpbGl0aWVzLmNyZWF0ZUNsYXNzKAogICAgICAgICB9CiAKICAgICAgICAgb3B0
aW9uc1sidGVzdC1pbnRlcnZhbCJdICo9IDEwMDA7Ci0gICAgICAgIHN3aXRjaCAob3B0aW9uc1si
YWRqdXN0bWVudCJdKQorICAgICAgICBzd2l0Y2ggKG9wdGlvbnNbImNvbnRyb2xsZXIiXSkKICAg
ICAgICAgewogICAgICAgICBjYXNlICJzdGVwIjoKICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xs
ZXIgPSBuZXcgU3RlcENvbnRyb2xsZXIodGhpcywgb3B0aW9ucyk7CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDZmOWUwZmUuLjFmMTk5ZWMxIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxv
ZworKysgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2
LTAyLTI5ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KKworICAgICAgICBTd2l0Y2ggdG8g
cmFtcCBjb250cm9sbGVyIGFzIGRlZmF1bHQuCisKKyAgICAgICAgKiBBbmltb21ldGVyL2RldmVs
b3Blci5odG1sOiBJbmNyZWFzZSB0aGUgdGVzdCBsZW5ndGggdG8gMjAgc2Vjb25kcy4KKyAgICAg
ICAgKiBBbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvYW5pbW9tZXRlci5qczogUmVu
YW1lIHRoZSAiYWRqdXN0bWVudCIgZmllbGQgdG8gImNvbnRyb2xsZXIiCisgICAgICAgIHNpbmNl
IHRoYXQgaXMgYSBtb3JlIGFjY3VyYXRlIGRlc2NyaXB0aW9uLgorICAgICAgICAqIEFuaW1vbWV0
ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9ncmFwaC5qczoKKyAgICAgICAgKiBBbmltb21ldGVy
L3Jlc291cmNlcy9ydW5uZXIvYW5pbW9tZXRlci5qczogVXBkYXRlIHByZWZlcmVuY2VzIGZvciBy
ZWxlYXNlIHN1aXRlLgorCiAyMDE2LTAyLTI2ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGRyZXNzIERlYW4ncyBjb21tZW50cyBpbiAxNTQ2NzMuCi0tIAoyLjYuNCAo
QXBwbGUgR2l0LTYzKQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272648</attachid>
            <date>2016-03-02 02:10:02 -0800</date>
            <delta_ts>2016-03-02 02:10:02 -0800</delta_ts>
            <desc>2. Improve tests.</desc>
            <filename>0002-Improve-tests.patch</filename>
            <type>text/plain</type>
            <size>15274</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">RnJvbSA4MGNlYjg1ZWFjNTlkNzIxZTNiNGMyMzJjZGMxMTEwOGU4ZjA3ZTE3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb24gTGVlIDxqb25sZWVAYXBwbGUuY29tPgpEYXRlOiBUdWUs
IDEgTWFyIDIwMTYgMjA6NDQ6MzUgLTA4MDAKU3ViamVjdDogW1BBVENIIDIvNF0gSW1wcm92ZSB0
ZXN0cy4KCiogQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvZm9jdXMuaHRtbDogTW92ZSBlYWNoIHBh
cnRpY2xlIGludG8gYSBsYXllci4gUHV0IHRoZSBwYXJ0aWNsZQppbiBhIGNvbnRhaW5lciBlbGVt
ZW50LiBFeHBhbmQgdGhlIGNvbnRhaW5lciBlbGVtZW50IGJ5IHRoZSBtYXggYmx1ciByYWRpdXMs
IGFuZCBjbGlwCm92ZXJmbG93LiBUaGlzIHdheSwgd2hlbiB0aGUgYmx1ciBpcyBhcHBsaWVkLCBp
dCBhdm9pZCBjYXVzaW5nIGxheWVyIHJlc2l6ZXMuCiogQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIv
cmVzb3VyY2VzL2ZvY3VzLmpzOgooRm9jdXNFbGVtZW50LlV0aWxpdGllcy5jcmVhdGVDbGFzcyk6
IENyZWF0ZSBhIGNvbnRhaW5lciBlbGVtZW50LCBhbmQgcHV0IHRoZSBwYXJ0aWNsZQppbnNpZGUu
CihoaWRlKTogU2V0IGRpc3BsYXk6bm9uZS4KKHNob3cpOiBTZXQgZGlzcGxheTpibG9jay4KKGFu
aW1hdGUpOiBBcHBseSBmaWx0ZXJzIHRvIHRoZSBjb250YWluZXIgZWxlbWVudC4KKEZvY3VzU3Rh
Z2UuY2FsbC5pbml0aWFsaXplKTogSW5zdGVhZCBvZiBpbnNlcnRpbmcgYW5kIHJlbW92aW5nIGVs
ZW1lbnRzIGZyb20gdGhlIERPTSwKa2VlcCB0aGVtIGluIHRoZSBzdGFnZSwgYnV0IHNldCB0aGUg
ZGlzcGxheSBzdHlsZSBpbnN0ZWFkLiBVc2UgdGhpcy5fb2Zmc2V0SW5kZXggdG8Ka2VlcCB0cmFj
ayBvZiB3aGljaCBlbGVtZW50cyBhcmUgZGlzcGxheWVkLgooRm9jdXNTdGFnZS5jYWxsLmFuaW1h
dGUpOiBNb3ZlIHNvbWUgY2FsY3VsYXRpb25zIGFyb3VuZCB0byBhdm9pZCBkb2luZyB1bm5lZWRl
ZCBtYXRoLgooRm9jdXNTdGFnZS5jYWxsLmdldEJsdXJWYWx1ZSk6IE1ha2Ugc3VyZSBlbGVtZW50
cyBhcmUgYWx3YXlzIGJsdXJyZWQuCihGb2N1c1N0YWdlLmNhbGwuZ2V0T3BhY2l0eVZhbHVlKTog
TWFrZSBzdXJlIGVsZW1lbnRzIGhhdmUgc29tZSBvcGFjaXR5LgoqIEFuaW1vbWV0ZXIvdGVzdHMv
bWFzdGVyL3Jlc291cmNlcy9tdWx0aXBseS5qczogSGF2ZSB0aGUgcGFydGljbGVzIG9uIHRoZSBl
ZGdlIG9mIHRoZQpzdGFnZSBhcHBlYXIgbGVzcyBibGFjayB3aGVuIHRoZSBjb21wbGV4aXR5IGdl
dHMgbGFyZ2UgZW5vdWdoLgoodHVuZSk6IEhhdmUgdGhpcy5fZGlzdGFuY2VGYWN0b3IgY2FsY3Vs
YXRlIHRoZSBmYWN0b3IuIEF2b2lkIGNhbGN1bGF0aW5nIHNxdWFyZSByb290IGVhY2gKZnJhbWUu
Ci0tLQogLi4uL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL2ZvY3VzLmh0bWwgICAgICAgICAgICAg
fCAgMTAgKy0KIC4uLi9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvZm9jdXMuanMg
ICAgIHwgMTA0ICsrKysrKysrKysrKy0tLS0tLS0tLQogLi4uL0FuaW1vbWV0ZXIvdGVzdHMvbWFz
dGVyL3Jlc291cmNlcy9tdWx0aXBseS5qcyAgfCAgMTUgKystCiBQZXJmb3JtYW5jZVRlc3RzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyNCArKysrKwogNCBmaWxlcyBjaGFu
Z2VkLCAxMDAgaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9mb2N1cy5odG1sIGIvUGVyZm9y
bWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9mb2N1cy5odG1sCmluZGV4IDJhNWM2
MDAuLmU0YjJmODAgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0
cy9tYXN0ZXIvZm9jdXMuaHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVz
dHMvbWFzdGVyL2ZvY3VzLmh0bWwKQEAgLTEwLDcgKzEwLDExIEBACiAgICAgICAgIHotaW5kZXg6
IC0xMDAwMDsKICAgICB9CiAKLSAgICAjc3RhZ2UgZGl2IHsKKyAgICAjc3RhZ2UgPiBkaXYgewor
ICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIG92ZXJmbG93OiBoaWRkZW47Cisg
ICAgfQorICAgICNzdGFnZSBkaXYgZGl2IHsKICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwog
ICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjREVEQUREOwogICAgICAgICBib3JkZXItcmFkaXVz
OiA1MCU7CkBAIC0yMywxNCArMjcsMTQgQEAKICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwog
ICAgICAgICB0b3A6IDUwJTsKICAgICAgICAgbGVmdDogNTAlOwotICAgICAgICB0cmFuc2Zvcm06
IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKTsKKyAgICAgICAgdHJhbnNmb3JtOiB0
cmFuc2xhdGUzZCgtNTAlLCAtNTAlLCAwKTsKICAgICB9CiAKICAgICA8L3N0eWxlPgogPC9oZWFk
PgogPGJvZHk+CiAgICAgPGRpdiBpZD0ic3RhZ2UiPgotICAgICAgICA8ZGl2IGlkPSJjZW50ZXIt
dGV4dCI+PHNwYW4+Zm9jdXM8L3NwYW4+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9ImNlbnRlci10
ZXh0Ij48ZGl2PjxzcGFuPmZvY3VzPC9zcGFuPjwvZGl2PjwvZGl2PgogICAgIDwvZGl2PgogICAg
IDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvc3RyaW5ncy5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9leHRlbnNpb25zLmpzIj48L3NjcmlwdD4KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3Vy
Y2VzL2ZvY3VzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9y
ZXNvdXJjZXMvZm9jdXMuanMKaW5kZXggZmMwY2E1OS4uYTZmOTVhYSAxMDA2NDQKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvZm9jdXMuanMK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMv
Zm9jdXMuanMKQEAgLTEsMTQgKzEsMTUgQEAKIChmdW5jdGlvbigpIHsKIAogdmFyIG1heFZlcnRp
Y2FsT2Zmc2V0ID0gNTA7Ci12YXIgcmFkaXVzID0gMjA7Cit2YXIgcmFkaXVzID0gMTA7Cit2YXIg
Y2VudGVyRGlhbWV0ZXIgPSAxMDA7CiB2YXIgc2l6ZVZhcmlhbmNlID0gODA7CiB2YXIgdHJhdmVs
RGlzdGFuY2UgPSA3MDsKIAogdmFyIG1pbk9iamVjdERlcHRoID0gMC4yOwogdmFyIG1heE9iamVj
dERlcHRoID0gMS4wOwogCi12YXIgb3BhY2l0eU11bHRpcGxpZXIgPSA0MDsKK3ZhciBvcGFjaXR5
TXVsdGlwbGllciA9IDMwOwogCiB2YXIgRm9jdXNFbGVtZW50ID0gVXRpbGl0aWVzLmNyZWF0ZUNs
YXNzKAogICAgIGZ1bmN0aW9uKHN0YWdlKQpAQCAtMjIsMjcgKzIzLDQxIEBAIHZhciBGb2N1c0Vs
ZW1lbnQgPSBVdGlsaXRpZXMuY3JlYXRlQ2xhc3MoCiAgICAgICAgIHZhciBkaXN0YW5jZSA9IFV0
aWxpdGllcy5sZXJwKHRoaXMuX2RlcHRoLCAxLCBzaXplVmFyaWFuY2UpOwogICAgICAgICB2YXIg
c2l6ZSA9IDIgKiByYWRpdXMgKyBzaXplVmFyaWFuY2UgLSBkaXN0YW5jZTsKIAotICAgICAgICB0
aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAgdGhp
cy5lbGVtZW50LnN0eWxlLndpZHRoID0gc2l6ZSArICJweCI7Ci0gICAgICAgIHRoaXMuZWxlbWVu
dC5zdHlsZS5oZWlnaHQgPSBzaXplICsgInB4IjsKLSAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxl
LnRvcCA9IHRvcCArICJweCI7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5sZWZ0ID0gbGVm
dCArICJweCI7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS56SW5kZXggPSBNYXRoLnJvdW5k
KCgxIC0gdGhpcy5fZGVwdGgpICogMTApOworICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS53
aWR0aCA9IChzaXplICsgc3RhZ2UubWF4Qmx1clZhbHVlICogMikgKyAicHgiOworICAgICAgICB0
aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAoc2l6ZSArIHN0YWdlLm1heEJsdXJWYWx1ZSAq
IDIpICsgInB4IjsKKyAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUudG9wID0gdG9wICsgInB4
IjsKKyAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUubGVmdCA9IGxlZnQgKyAicHgiOworICAg
ICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXggPSBNYXRoLnJvdW5kKCgxIC0gdGhpcy5f
ZGVwdGgpICogMTApOwogCi0gICAgICAgIFV0aWxpdGllcy5zZXRFbGVtZW50UHJlZml4ZWRQcm9w
ZXJ0eSh0aGlzLmVsZW1lbnQsICJmaWx0ZXIiLCAiYmx1cigiICsgc3RhZ2UuZ2V0Qmx1clZhbHVl
KHRoaXMuX2RlcHRoKSArICJweCkgb3BhY2l0eSgiICsgc3RhZ2UuZ2V0T3BhY2l0eVZhbHVlKHRo
aXMuX2RlcHRoKSArICIlKSIpOworICAgICAgICB2YXIgcGFydGljbGUgPSBVdGlsaXRpZXMuY3Jl
YXRlRWxlbWVudCgiZGl2Iiwge30sIHRoaXMuY29udGFpbmVyKTsKKyAgICAgICAgcGFydGljbGUu
c3R5bGUud2lkdGggPSBzaXplICsgInB4IjsKKyAgICAgICAgcGFydGljbGUuc3R5bGUuaGVpZ2h0
ID0gc2l6ZSArICJweCI7CisgICAgICAgIHBhcnRpY2xlLnN0eWxlLnRvcCA9IHN0YWdlLm1heEJs
dXJWYWx1ZSArICJweCI7CisgICAgICAgIHBhcnRpY2xlLnN0eWxlLmxlZnQgPSBzdGFnZS5tYXhC
bHVyVmFsdWUgKyAicHgiOwogCiAgICAgICAgIHZhciBkZXB0aE11bHRpcGxpZXIgPSBVdGlsaXRp
ZXMubGVycCgxIC0gdGhpcy5fZGVwdGgsIDAuOCwgMSk7CiAgICAgICAgIHRoaXMuX3Npbk11bHRp
cGxpZXIgPSBQc2V1ZG8ucmFuZG9tKCkgKiBTdGFnZS5yYW5kb21TaWduKCkgKiBkZXB0aE11bHRp
cGxpZXI7CiAgICAgICAgIHRoaXMuX2Nvc011bHRpcGxpZXIgPSBQc2V1ZG8ucmFuZG9tKCkgKiBT
dGFnZS5yYW5kb21TaWduKCkgKiBkZXB0aE11bHRpcGxpZXI7CiAgICAgfSwgewogCi0gICAgYW5p
bWF0ZTogZnVuY3Rpb24oc3RhZ2UsIHNpblRpbWUsIGNvc1RpbWUpCisgICAgaGlkZTogZnVuY3Rp
b24oKQogICAgIHsKLSAgICAgICAgdmFyIHRvcCA9IHNpblRpbWUgKiB0aGlzLl9zaW5NdWx0aXBs
aWVyICogdHJhdmVsRGlzdGFuY2U7Ci0gICAgICAgIHZhciBsZWZ0ID0gY29zVGltZSAqIHRoaXMu
X2Nvc011bHRpcGxpZXIgKiB0cmF2ZWxEaXN0YW5jZTsKKyAgICAgICAgdGhpcy5jb250YWluZXIu
c3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICB9LAorCisgICAgc2hvdzogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Cisg
ICAgfSwKIAotICAgICAgICBVdGlsaXRpZXMuc2V0RWxlbWVudFByZWZpeGVkUHJvcGVydHkodGhp
cy5lbGVtZW50LCAiZmlsdGVyIiwgImJsdXIoIiArIHN0YWdlLmdldEJsdXJWYWx1ZSh0aGlzLl9k
ZXB0aCkgKyAicHgpIG9wYWNpdHkoIiArIHN0YWdlLmdldE9wYWNpdHlWYWx1ZSh0aGlzLl9kZXB0
aCkgKyAiJSkiKTsKLSAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFu
c2xhdGVYKCIgKyBsZWZ0ICsgIiUpIHRyYW5zbGF0ZVkoIiArIHRvcCArICIlKSI7CisgICAgYW5p
bWF0ZTogZnVuY3Rpb24oc3RhZ2UsIHNpbkZhY3RvciwgY29zRmFjdG9yKQorICAgIHsKKyAgICAg
ICAgdmFyIHRvcCA9IHNpbkZhY3RvciAqIHRoaXMuX3Npbk11bHRpcGxpZXI7CisgICAgICAgIHZh
ciBsZWZ0ID0gY29zRmFjdG9yICogdGhpcy5fY29zTXVsdGlwbGllcjsKKworICAgICAgICBVdGls
aXRpZXMuc2V0RWxlbWVudFByZWZpeGVkUHJvcGVydHkodGhpcy5jb250YWluZXIsICJmaWx0ZXIi
LCAiYmx1cigiICsgc3RhZ2UuZ2V0Qmx1clZhbHVlKHRoaXMuX2RlcHRoKSArICJweCkgb3BhY2l0
eSgiICsgc3RhZ2UuZ2V0T3BhY2l0eVZhbHVlKHRoaXMuX2RlcHRoKSArICIlKSIpOworICAgICAg
ICB0aGlzLmNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlM2QoIiArIGxlZnQg
KyAiJSwgIiArIHRvcCArICIlLCAwKSI7CiAgICAgfQogfSk7CiAKQEAgLTY3LDE5ICs4MiwyNiBA
QCB2YXIgRm9jdXNTdGFnZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhTdGFnZSwKIAogICAg
ICAgICB0aGlzLl90ZXN0RWxlbWVudHMgPSBbXTsKICAgICAgICAgdGhpcy5fZm9jYWxQb2ludCA9
IDAuNTsKKyAgICAgICAgdGhpcy5fb2Zmc2V0SW5kZXggPSAwOwogCiAgICAgICAgIHRoaXMuX2Nl
bnRlckVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2VudGVyLXRleHQiKTsKLSAg
ICAgICAgdGhpcy5fY2VudGVyRWxlbWVudC5zdHlsZS53aWR0aCA9IChyYWRpdXMgKiA1KSArICdw
eCc7Ci0gICAgICAgIHRoaXMuX2NlbnRlckVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gKHJhZGl1cyAq
IDUpICsgJ3B4JzsKKyAgICAgICAgdGhpcy5fY2VudGVyRWxlbWVudC5zdHlsZS53aWR0aCA9IChj
ZW50ZXJEaWFtZXRlciArIHRoaXMubWF4Q2VudGVyT2JqZWN0Qmx1clZhbHVlICogMikgKyAicHgi
OworICAgICAgICB0aGlzLl9jZW50ZXJFbGVtZW50LnN0eWxlLmhlaWdodCA9IChjZW50ZXJEaWFt
ZXRlciArIHRoaXMubWF4Q2VudGVyT2JqZWN0Qmx1clZhbHVlICogMikgKyAicHgiOwogICAgICAg
ICB0aGlzLl9jZW50ZXJFbGVtZW50LnN0eWxlLnpJbmRleCA9IE1hdGgucm91bmQoMTAgKiB0aGlz
LmNlbnRlck9iamVjdERlcHRoKTsKIAotICAgICAgICB2YXIgYmx1ciA9IHRoaXMuZ2V0Qmx1clZh
bHVlKHRoaXMuY2VudGVyT2JqZWN0RGVwdGgpOworICAgICAgICB2YXIgcGFydGljbGUgPSBkb2N1
bWVudC5xdWVyeVNlbGVjdG9yKCIjY2VudGVyLXRleHQgZGl2Iik7CisgICAgICAgIHBhcnRpY2xl
LnN0eWxlLndpZHRoID0gY2VudGVyRGlhbWV0ZXIgKyAicHgiOworICAgICAgICBwYXJ0aWNsZS5z
dHlsZS5oZWlnaHQgPSBjZW50ZXJEaWFtZXRlciArICJweCI7CisgICAgICAgIHBhcnRpY2xlLnN0
eWxlLnRvcCA9IHRoaXMubWF4Q2VudGVyT2JqZWN0Qmx1clZhbHVlICsgInB4IjsKKyAgICAgICAg
cGFydGljbGUuc3R5bGUubGVmdCA9IHRoaXMubWF4Q2VudGVyT2JqZWN0Qmx1clZhbHVlICsgInB4
IjsKKworICAgICAgICB2YXIgYmx1ciA9IHRoaXMuZ2V0Qmx1clZhbHVlKHRoaXMuY2VudGVyT2Jq
ZWN0RGVwdGgsIHRydWUpOwogICAgICAgICBVdGlsaXRpZXMuc2V0RWxlbWVudFByZWZpeGVkUHJv
cGVydHkodGhpcy5fY2VudGVyRWxlbWVudCwgImZpbHRlciIsICJibHVyKCIgKyBibHVyICsgInB4
KSIpOwogICAgIH0sCiAKICAgICBjb21wbGV4aXR5OiBmdW5jdGlvbigpCiAgICAgewotICAgICAg
ICByZXR1cm4gMSArIHRoaXMuX3Rlc3RFbGVtZW50cy5sZW5ndGg7CisgICAgICAgIHJldHVybiAx
ICsgdGhpcy5fb2Zmc2V0SW5kZXg7CiAgICAgfSwKIAogICAgIHR1bmU6IGZ1bmN0aW9uKGNvdW50
KQpAQCAtODcsNTUgKzEwOSw1MyBAQCB2YXIgRm9jdXNTdGFnZSA9IFV0aWxpdGllcy5jcmVhdGVT
dWJjbGFzcyhTdGFnZSwKICAgICAgICAgaWYgKGNvdW50ID09IDApCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgaWYgKGNvdW50ID4gMCkgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9iaiA9IG5ldyBGb2N1
c0VsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGVzdEVsZW1lbnRzLnB1c2go
b2JqKTsKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQob2JqLmVsZW1l
bnQpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoY291bnQgPCAwKSB7CisgICAgICAgICAg
ICB0aGlzLl9vZmZzZXRJbmRleCA9IE1hdGgubWF4KDAsIHRoaXMuX29mZnNldEluZGV4ICsgY291
bnQpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX29mZnNldEluZGV4OyBpIDwgdGhp
cy5fdGVzdEVsZW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RF
bGVtZW50c1tpXS5oaWRlKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICB3aGlsZSAoY291bnQgPCAwKSB7Ci0gICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fdGVz
dEVsZW1lbnRzLnNoaWZ0KCk7Ci0gICAgICAgICAgICBpZiAoIW9iaikKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZChvYmouZWxl
bWVudCk7Ci0gICAgICAgICAgICBjb3VudCsrOworICAgICAgICB2YXIgbmV3SW5kZXggPSB0aGlz
Ll9vZmZzZXRJbmRleCArIGNvdW50OworICAgICAgICBpZiAobmV3SW5kZXggPiB0aGlzLl90ZXN0
RWxlbWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fdGVzdEVs
ZW1lbnRzLmxlbmd0aDsgaSA8IG5ld0luZGV4OyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIg
b2JqID0gbmV3IEZvY3VzRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXN0
RWxlbWVudHMucHVzaChvYmopOworICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRD
aGlsZChvYmouY29udGFpbmVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBm
b3IgKHZhciBpID0gdGhpcy5fb2Zmc2V0SW5kZXg7IGkgPCBuZXdJbmRleDsgKytpKQorICAgICAg
ICAgICAgdGhpcy5fdGVzdEVsZW1lbnRzW2ldLnNob3coKTsKKyAgICAgICAgdGhpcy5fb2Zmc2V0
SW5kZXggPSBuZXdJbmRleDsKICAgICB9LAogCiAgICAgYW5pbWF0ZTogZnVuY3Rpb24oKQogICAg
IHsKICAgICAgICAgdmFyIHRpbWUgPSB0aGlzLl9iZW5jaG1hcmsudGltZXN0YW1wOwotICAgICAg
ICB2YXIgc2luVGltZSA9IE1hdGguc2luKHRpbWUgLyB0aGlzLm1vdmVtZW50RHVyYXRpb24pOwot
ICAgICAgICB2YXIgY29zVGltZSA9IE1hdGguY29zKHRpbWUgLyB0aGlzLm1vdmVtZW50RHVyYXRp
b24pOworICAgICAgICB2YXIgc2luRmFjdG9yID0gTWF0aC5zaW4odGltZSAvIHRoaXMubW92ZW1l
bnREdXJhdGlvbikgKiB0cmF2ZWxEaXN0YW5jZTsKKyAgICAgICAgdmFyIGNvc0ZhY3RvciA9IE1h
dGguY29zKHRpbWUgLyB0aGlzLm1vdmVtZW50RHVyYXRpb24pICogdHJhdmVsRGlzdGFuY2U7CiAK
LSAgICAgICAgdmFyIGZvY3VzUHJvZ3Jlc3MgPSBVdGlsaXRpZXMucHJvZ3Jlc3NWYWx1ZShNYXRo
LnNpbih0aW1lIC8gdGhpcy5mb2N1c0R1cmF0aW9uKSwgLTEsIDEpOworICAgICAgICB2YXIgZm9j
dXNQcm9ncmVzcyA9IC41ICsgLjUgKiBNYXRoLnNpbih0aW1lIC8gdGhpcy5mb2N1c0R1cmF0aW9u
KTsKICAgICAgICAgdGhpcy5fZm9jYWxQb2ludCA9IGZvY3VzUHJvZ3Jlc3M7CiAKICAgICAgICAg
Ly8gdXBkYXRlIGNlbnRlciBlbGVtZW50IGJlZm9yZSBsb29wCiAgICAgICAgIFV0aWxpdGllcy5z
ZXRFbGVtZW50UHJlZml4ZWRQcm9wZXJ0eSh0aGlzLl9jZW50ZXJFbGVtZW50LCAiZmlsdGVyIiwg
ImJsdXIoIiArIHRoaXMuZ2V0Qmx1clZhbHVlKHRoaXMuY2VudGVyT2JqZWN0RGVwdGgsIHRydWUp
ICsgInB4KSIpOwogCi0gICAgICAgIHRoaXMuX3Rlc3RFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9u
KGVsZW1lbnQpIHsKLSAgICAgICAgICAgIGVsZW1lbnQuYW5pbWF0ZSh0aGlzLCBzaW5UaW1lLCBj
b3NUaW1lKTsKLSAgICAgICAgfSwgdGhpcyk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5fb2Zmc2V0SW5kZXg7ICsraSkKKyAgICAgICAgICAgIHRoaXMuX3Rlc3RFbGVtZW50c1tp
XS5hbmltYXRlKHRoaXMsIHNpbkZhY3RvciwgY29zRmFjdG9yKTsKICAgICB9LAogCiAgICAgZ2V0
Qmx1clZhbHVlOiBmdW5jdGlvbihkZXB0aCwgaXNDZW50ZXIpCiAgICAgewotICAgICAgICB2YXIg
dmFsdWUgPSBNYXRoLmFicyhkZXB0aCAtIHRoaXMuX2ZvY2FsUG9pbnQpOwotCiAgICAgICAgIGlm
IChpc0NlbnRlcikKLSAgICAgICAgICAgIHJldHVybiB0aGlzLm1heENlbnRlck9iamVjdEJsdXJW
YWx1ZSAqIHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIDEgKyBNYXRoLmFicyhkZXB0aCAtIHRo
aXMuX2ZvY2FsUG9pbnQpICogKHRoaXMubWF4Q2VudGVyT2JqZWN0Qmx1clZhbHVlIC0gMSk7CiAK
LSAgICAgICAgcmV0dXJuIFV0aWxpdGllcy5sZXJwKHZhbHVlLCB0aGlzLm1pbkJsdXJWYWx1ZSwg
dGhpcy5tYXhCbHVyVmFsdWUpOworICAgICAgICByZXR1cm4gVXRpbGl0aWVzLmxlcnAoTWF0aC5h
YnMoZGVwdGggLSB0aGlzLl9mb2NhbFBvaW50KSwgdGhpcy5taW5CbHVyVmFsdWUsIHRoaXMubWF4
Qmx1clZhbHVlKTsKICAgICB9LAogCiAgICAgZ2V0T3BhY2l0eVZhbHVlOiBmdW5jdGlvbihkZXB0
aCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGFjaXR5TXVsdGlwbGllciAqICgxIC0gTWF0aC5h
YnMoZGVwdGggLSB0aGlzLl9mb2NhbFBvaW50KSk7CisgICAgICAgIHJldHVybiBNYXRoLm1heCgx
LCBvcGFjaXR5TXVsdGlwbGllciAqICgxIC0gTWF0aC5hYnMoZGVwdGggLSB0aGlzLl9mb2NhbFBv
aW50KSkpOwogICAgIH0sCiB9KTsKIApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmlt
b21ldGVyL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvbXVsdGlwbHkuanMgYi9QZXJmb3JtYW5jZVRl
c3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9tdWx0aXBseS5qcwppbmRleCA3
YmNmYjAyLi43NDc4ZTlhIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIv
dGVzdHMvbWFzdGVyL3Jlc291cmNlcy9tdWx0aXBseS5qcworKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9tdWx0aXBseS5qcwpAQCAtMjEsOCAr
MjEsOCBAQCB2YXIgTXVsdGlwbHlTdGFnZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhTdGFn
ZSwKICAgICAgICAgdmFyIHNwaXJhbENvdW50ZXIgPSAyOwogICAgICAgICB2YXIgbmV4dEluZGV4
ID0gMTsKICAgICAgICAgdmFyIG1heFNpZGUgPSBNYXRoLmZsb29yKHkgLyB0aWxlU3RyaWRlKSAq
IDIgKyAxOwotICAgICAgICB2YXIgY2VudGVyU3BpcmFsQ291bnQgPSBtYXhTaWRlICogbWF4U2lk
ZTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZW50ZXJTcGlyYWxDb3VudDsgKytpKSB7
CisgICAgICAgIHRoaXMuX2NlbnRlclNwaXJhbENvdW50ID0gbWF4U2lkZSAqIG1heFNpZGU7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY2VudGVyU3BpcmFsQ291bnQ7ICsraSkg
ewogICAgICAgICAgICAgdGhpcy5fYWRkVGlsZSh4LCB5LCB0aWxlU2l6ZSwgaSAlIDM2MCk7CiAK
ICAgICAgICAgICAgIGlmIChpID09IG5leHRJbmRleCkgewpAQCAtNDAsOCArNDAsOCBAQCB2YXIg
TXVsdGlwbHlTdGFnZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhTdGFnZSwKICAgICAgICAg
ICAgICAgICB5ICs9IHRpbGVTdHJpZGU7CiAgICAgICAgIH0KIAotICAgICAgICBjZW50ZXJTcGly
YWxDb3VudCA9IG1heFNpZGUgKiBNYXRoLmZsb29yKCh0aGlzLnNpemUud2lkdGggLSB4KSAvIHRp
bGVTdHJpZGUpICogMjsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZW50ZXJTcGlyYWxD
b3VudDsgKytpKSB7CisgICAgICAgIHRoaXMuX3NpZGVQYW5lbENvdW50ID0gbWF4U2lkZSAqIE1h
dGguZmxvb3IoKHRoaXMuc2l6ZS53aWR0aCAtIHgpIC8gdGlsZVN0cmlkZSkgKiAyOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NpZGVQYW5lbENvdW50OyArK2kpIHsKICAgICAg
ICAgICAgIHZhciBzaWRlWCA9IHggKyBNYXRoLmZsb29yKE1hdGguZmxvb3IoaSAvIG1heFNpZGUp
IC8gMikgKiB0aWxlU3RyaWRlOwogICAgICAgICAgICAgdmFyIHNpZGVZID0geSAtIHRpbGVTdHJp
ZGUgKiAoaSAlIG1heFNpZGUpOwogCkBAIC02MSw3ICs2MSw3IEBAIHZhciBNdWx0aXBseVN0YWdl
ID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKFN0YWdlLAogICAgICAgICB0aWxlLnN0eWxlLmhl
aWdodCA9IHRpbGVTaXplICsgJ3B4JzsKICAgICAgICAgdGlsZS5zdHlsZS52aXNpYmlsaXR5ID0g
ImhpZGRlbiI7CiAKLSAgICAgICAgdmFyIGRpc3RhbmNlID0gMS4zIC8gdGlsZVNpemUgKiB0aGlz
LnNpemUubXVsdGlwbHkoMC41KS5zdWJ0cmFjdChuZXcgUG9pbnQoeCArIGhhbGZUaWxlU2l6ZSwg
eSArIGhhbGZUaWxlU2l6ZSkpLmxlbmd0aCgpOworICAgICAgICB2YXIgZGlzdGFuY2UgPSAxIC8g
dGlsZVNpemUgKiB0aGlzLnNpemUubXVsdGlwbHkoMC41KS5zdWJ0cmFjdChuZXcgUG9pbnQoeCAr
IGhhbGZUaWxlU2l6ZSwgeSArIGhhbGZUaWxlU2l6ZSkpLmxlbmd0aCgpOwogCiAgICAgICAgIHRo
aXMudGlsZXMucHVzaCh7CiAgICAgICAgICAgICBlbGVtZW50OiB0aWxlLApAQCAtODAsMTIgKzgw
LDExIEBAIHZhciBNdWx0aXBseVN0YWdlID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKFN0YWdl
LAogICAgIHR1bmU6IGZ1bmN0aW9uKGNvdW50KQogICAgIHsKICAgICAgICAgdGhpcy5fb2Zmc2V0
SW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLl9vZmZzZXRJbmRleCArIGNvdW50LCB0
aGlzLnRpbGVzLmxlbmd0aCkpOworICAgICAgICB0aGlzLl9kaXN0YW5jZUZhY3RvciA9IDEuNSAq
ICgxIC0gLjUgKiBNYXRoLm1heCh0aGlzLl9vZmZzZXRJbmRleCAtIHRoaXMuX2NlbnRlclNwaXJh
bENvdW50LCAwKSAvIHRoaXMuX3NpZGVQYW5lbENvdW50KSAvIE1hdGguc3FydCh0aGlzLl9vZmZz
ZXRJbmRleCk7CiAgICAgfSwKIAogICAgIGFuaW1hdGU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIHZhciBkaXN0YW5jZUZhY3RvciA9IDEgLyBNYXRoLnNxcnQodGhpcy5fb2Zmc2V0SW5kZXgp
OwotCiAgICAgICAgIHZhciBwcm9ncmVzcyA9IHRoaXMuX2JlbmNobWFyay50aW1lc3RhbXAgJSAx
MDAwMCAvIDEwMDAwOwogICAgICAgICB2YXIgYm91bmNlUHJvZ3Jlc3MgPSBNYXRoLnNpbigyICog
TWF0aC5hYnMoIDAuNSAtIHByb2dyZXNzKSk7CiAgICAgICAgIHZhciBsID0gVXRpbGl0aWVzLmxl
cnAoYm91bmNlUHJvZ3Jlc3MsIDIwLCA1MCk7CkBAIC05OCw3ICs5Nyw3IEBAIHZhciBNdWx0aXBs
eVN0YWdlID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKFN0YWdlLAogICAgICAgICAgICAgdGls
ZS5yb3RhdGUgKz0gdGlsZS5zdGVwOwogICAgICAgICAgICAgdGlsZS5lbGVtZW50LnN0eWxlLnRy
YW5zZm9ybSA9ICJyb3RhdGUoIiArIHRpbGUucm90YXRlICsgImRlZykiOwogCi0gICAgICAgICAg
ICB2YXIgaW5mbHVlbmNlID0gMSAtICh0aWxlLmRpc3RhbmNlICogZGlzdGFuY2VGYWN0b3IpOwor
ICAgICAgICAgICAgdmFyIGluZmx1ZW5jZSA9IDEgLSAodGlsZS5kaXN0YW5jZSAqIHRoaXMuX2Rp
c3RhbmNlRmFjdG9yKTsKICAgICAgICAgICAgIHRpbGUuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5k
Q29sb3IgPSBoc2xQcmVmaXggKyBsICogTWF0aC50YW4oaW5mbHVlbmNlIC8gMS4yNSkgKyAiJSwi
ICsgaW5mbHVlbmNlICsgIikiOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWYxOTll
YzEuLjRjMjhmOTcgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTYtMDMtMDEg
IEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgorCisgICAgICAgIEltcHJvdmUgdGVzdHMuCisK
KyAgICAgICAgKiBBbmltb21ldGVyL3Rlc3RzL21hc3Rlci9mb2N1cy5odG1sOiBNb3ZlIGVhY2gg
cGFydGljbGUgaW50byBhIGxheWVyLiBQdXQgdGhlIHBhcnRpY2xlCisgICAgICAgIGluIGEgY29u
dGFpbmVyIGVsZW1lbnQuIEV4cGFuZCB0aGUgY29udGFpbmVyIGVsZW1lbnQgYnkgdGhlIG1heCBi
bHVyIHJhZGl1cywgYW5kIGNsaXAKKyAgICAgICAgb3ZlcmZsb3cuIFRoaXMgd2F5LCB3aGVuIHRo
ZSBibHVyIGlzIGFwcGxpZWQsIGl0IGF2b2lkIGNhdXNpbmcgbGF5ZXIgcmVzaXplcy4KKyAgICAg
ICAgKiBBbmltb21ldGVyL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvZm9jdXMuanM6CisgICAgICAg
IChGb2N1c0VsZW1lbnQuVXRpbGl0aWVzLmNyZWF0ZUNsYXNzKTogQ3JlYXRlIGEgY29udGFpbmVy
IGVsZW1lbnQsIGFuZCBwdXQgdGhlIHBhcnRpY2xlCisgICAgICAgIGluc2lkZS4KKyAgICAgICAg
KGhpZGUpOiBTZXQgZGlzcGxheTpub25lLgorICAgICAgICAoc2hvdyk6IFNldCBkaXNwbGF5OmJs
b2NrLgorICAgICAgICAoYW5pbWF0ZSk6IEFwcGx5IGZpbHRlcnMgdG8gdGhlIGNvbnRhaW5lciBl
bGVtZW50LgorICAgICAgICAoRm9jdXNTdGFnZS5jYWxsLmluaXRpYWxpemUpOiBJbnN0ZWFkIG9m
IGluc2VydGluZyBhbmQgcmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgRE9NLAorICAgICAgICBr
ZWVwIHRoZW0gaW4gdGhlIHN0YWdlLCBidXQgc2V0IHRoZSBkaXNwbGF5IHN0eWxlIGluc3RlYWQu
IFVzZSB0aGlzLl9vZmZzZXRJbmRleCB0bworICAgICAgICBrZWVwIHRyYWNrIG9mIHdoaWNoIGVs
ZW1lbnRzIGFyZSBkaXNwbGF5ZWQuCisgICAgICAgIChGb2N1c1N0YWdlLmNhbGwuYW5pbWF0ZSk6
IE1vdmUgc29tZSBjYWxjdWxhdGlvbnMgYXJvdW5kIHRvIGF2b2lkIGRvaW5nIHVubmVlZGVkIG1h
dGguCisgICAgICAgIChGb2N1c1N0YWdlLmNhbGwuZ2V0Qmx1clZhbHVlKTogTWFrZSBzdXJlIGVs
ZW1lbnRzIGFyZSBhbHdheXMgYmx1cnJlZC4KKyAgICAgICAgKEZvY3VzU3RhZ2UuY2FsbC5nZXRP
cGFjaXR5VmFsdWUpOiBNYWtlIHN1cmUgZWxlbWVudHMgaGF2ZSBzb21lIG9wYWNpdHkuCisgICAg
ICAgICogQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL211bHRpcGx5LmpzOiBIYXZl
IHRoZSBwYXJ0aWNsZXMgb24gdGhlIGVkZ2Ugb2YgdGhlCisgICAgICAgIHN0YWdlIGFwcGVhciBs
ZXNzIGJsYWNrIHdoZW4gdGhlIGNvbXBsZXhpdHkgZ2V0cyBsYXJnZSBlbm91Z2guCisgICAgICAg
ICh0dW5lKTogSGF2ZSB0aGlzLl9kaXN0YW5jZUZhY3RvciBjYWxjdWxhdGUgdGhlIGZhY3Rvci4g
QXZvaWQgY2FsY3VsYXRpbmcgc3F1YXJlIHJvb3QgZWFjaAorICAgICAgICBmcmFtZS4KKwogMjAx
Ni0wMi0yOSAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAgICAgICAgU3dpdGNoIHRv
IHJhbXAgY29udHJvbGxlciBhcyBkZWZhdWx0LgotLSAKMi42LjQgKEFwcGxlIEdpdC02MykKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272649</attachid>
            <date>2016-03-02 02:10:21 -0800</date>
            <delta_ts>2016-03-02 02:10:21 -0800</delta_ts>
            <desc>3. Add a fixed controller, with no step.</desc>
            <filename>0003-Add-a-fixed-controller-with-no-step.patch</filename>
            <type>text/plain</type>
            <size>4071</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">RnJvbSA5YjY2ZDQ1N2FmNzgyMDdjMjFkNzFhYmRjODlhNGJjZGMxMGUzZjg5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb24gTGVlIDxqb25sZWVAYXBwbGUuY29tPgpEYXRlOiBXZWQs
IDIgTWFyIDIwMTYgMDE6MDM6MzUgLTA4MDAKU3ViamVjdDogW1BBVENIIDMvNF0gQWRkIGEgZml4
ZWQgY29udHJvbGxlciwgd2l0aCBubyBzdGVwLgoKKiBBbmltb21ldGVyL2RldmVsb3Blci5odG1s
OiBBZGQgYSBjb250cm9sbGVyIHRoYXQgdGFrZXMgbm8gc3RlcC4KKiBBbmltb21ldGVyL3Jlc291
cmNlcy9kZWJ1Zy1ydW5uZXIvYW5pbW9tZXRlci5qczoKKiBBbmltb21ldGVyL3Rlc3RzL3Jlc291
cmNlcy9tYWluLmpzOgooUm90YXRlci5VdGlsaXRpZXMuY3JlYXRlQ2xhc3MpOgotLS0KIFBlcmZv
cm1hbmNlVGVzdHMvQW5pbW9tZXRlci9kZXZlbG9wZXIuaHRtbCAgICAgICAgICAgICAgICAgICB8
ICAxICsKIC4uLi9Bbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvYW5pbW9tZXRlci5q
cyAgICAgICAgICB8ICAyICstCiBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvcmVz
b3VyY2VzL21haW4uanMgICAgICAgICAgfCAxMiArKysrKysrKysrKysKIFBlcmZvcm1hbmNlVGVz
dHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5ICsrKysr
KysrKwogNCBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL2RldmVsb3Blci5odG1sIGIv
UGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL2RldmVsb3Blci5odG1sCmluZGV4IDgzMWI0MjQu
LjFkYmQ2OWEgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9kZXZlbG9w
ZXIuaHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvZGV2ZWxvcGVyLmh0bWwK
QEAgLTQ3LDYgKzQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAg
ICAgICAgICAgICAgPGgzPkFkanVzdGluZyB0aGUgdGVzdCBjb21wbGV4aXR5OjwvaDM+CiAgICAg
ICAgICAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxp
PjxsYWJlbD48aW5wdXQgbmFtZT0iY29udHJvbGxlciIgdHlwZT0icmFkaW8iIHZhbHVlPSJmaXhl
ZCI+IEtlZXAgYXQgYSBmaXhlZCBjb21wbGV4aXR5PC9sYWJlbD48L2xpPgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxsaT48bGFiZWw+PGlucHV0IG5hbWU9ImNvbnRyb2xsZXIiIHR5cGU9
InJhZGlvIiB2YWx1ZT0ic3RlcCI+IEtlZXAgYXQgYSBmaXhlZCBjb21wbGV4aXR5LCB0aGVuIG1h
a2UgYSBiaWcgc3RlcDwvbGFiZWw+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
bGk+PGxhYmVsPjxpbnB1dCBuYW1lPSJjb250cm9sbGVyIiB0eXBlPSJyYWRpbyIgdmFsdWU9ImFk
YXB0aXZlIj4gTWFpbnRhaW4gdGFyZ2V0IEZQUzwvbGFiZWw+PC9saT4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8bGk+PGxhYmVsPjxpbnB1dCBuYW1lPSJjb250cm9sbGVyIiB0eXBlPSJy
YWRpbyIgdmFsdWU9InJhbXAiIGNoZWNrZWQ+IFJhbXA8L2xhYmVsPjwvbGk+CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmlt
b21ldGVyLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1y
dW5uZXIvYW5pbW9tZXRlci5qcwppbmRleCBkMmY1YTFlLi43NGE4NzhmIDEwMDY0NAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmltb21l
dGVyLmpzCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWct
cnVubmVyL2FuaW1vbWV0ZXIuanMKQEAgLTMyOCw3ICszMjgsNyBAQCB3aW5kb3cuc3VpdGVzTWFu
YWdlciA9CiAgICAgdXBkYXRlRWRpdHNFbGVtZW50c1N0YXRlOiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICB2YXIgZWRpdHNFbGVtZW50cyA9IHRoaXMuX2VkaXRzRWxlbWVudHMoKTsKLSAgICAg
ICAgdmFyIHNob3dDb21wbGV4aXR5SW5wdXRzID0gb3B0aW9uc01hbmFnZXIudmFsdWVGb3JPcHRp
b24oImNvbnRyb2xsZXIiKSA9PSAic3RlcCI7CisgICAgICAgIHZhciBzaG93Q29tcGxleGl0eUlu
cHV0cyA9IFsiZml4ZWQiLCAic3RlcCJdLmluZGV4T2Yob3B0aW9uc01hbmFnZXIudmFsdWVGb3JP
cHRpb24oImNvbnRyb2xsZXIiKSkgIT0gLTE7CiAKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBlZGl0c0VsZW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICB2YXIgZWRpdEVsZW1l
bnQgPSBlZGl0c0VsZW1lbnRzW2ldOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmlt
b21ldGVyL3Rlc3RzL3Jlc291cmNlcy9tYWluLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21l
dGVyL3Rlc3RzL3Jlc291cmNlcy9tYWluLmpzCmluZGV4IGNkNGJmMDcuLjA1MDQ0NjMgMTAwNjQ0
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9yZXNvdXJjZXMvbWFpbi5q
cworKysgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvcmVzb3VyY2VzL21haW4u
anMKQEAgLTIxOSw2ICsyMTksMTUgQEAgQ29udHJvbGxlciA9IFV0aWxpdGllcy5jcmVhdGVDbGFz
cygKICAgICB9CiB9KTsKIAorRml4ZWRDb250cm9sbGVyID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNs
YXNzKENvbnRyb2xsZXIsCisgICAgZnVuY3Rpb24oYmVuY2htYXJrLCBvcHRpb25zKQorICAgIHsK
KyAgICAgICAgb3B0aW9uc1siaW50ZXJ2YWwtbGVuZ3RoIl0gPSAwOworICAgICAgICBDb250cm9s
bGVyLmNhbGwodGhpcywgYmVuY2htYXJrLCBvcHRpb25zKTsKKyAgICAgICAgdGhpcy5pbml0aWFs
Q29tcGxleGl0eSA9IG9wdGlvbnNbImNvbXBsZXhpdHkiXTsKKyAgICB9CispOworCiBTdGVwQ29u
dHJvbGxlciA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhDb250cm9sbGVyLAogICAgIGZ1bmN0
aW9uKGJlbmNobWFyaywgb3B0aW9ucykKICAgICB7CkBAIC03NzcsNiArNzg2LDkgQEAgQmVuY2ht
YXJrID0gVXRpbGl0aWVzLmNyZWF0ZUNsYXNzKAogICAgICAgICBvcHRpb25zWyJ0ZXN0LWludGVy
dmFsIl0gKj0gMTAwMDsKICAgICAgICAgc3dpdGNoIChvcHRpb25zWyJjb250cm9sbGVyIl0pCiAg
ICAgICAgIHsKKyAgICAgICAgY2FzZSAiZml4ZWQiOgorICAgICAgICAgICAgdGhpcy5fY29udHJv
bGxlciA9IG5ldyBGaXhlZENvbnRyb2xsZXIodGhpcywgb3B0aW9ucyk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSAic3RlcCI6CiAgICAgICAgICAgICB0aGlzLl9jb250cm9sbGVy
ID0gbmV3IFN0ZXBDb250cm9sbGVyKHRoaXMsIG9wdGlvbnMpOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDRjMjhmOTcuLmUyZTE4MzQgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTYtMDMtMDIgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgorCisg
ICAgICAgIEFkZCBhIGZpeGVkIGNvbnRyb2xsZXIsIHdpdGggbm8gc3RlcC4KKworICAgICAgICAq
IEFuaW1vbWV0ZXIvZGV2ZWxvcGVyLmh0bWw6IEFkZCBhIGNvbnRyb2xsZXIgdGhhdCB0YWtlcyBu
byBzdGVwLgorICAgICAgICAqIEFuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmlt
b21ldGVyLmpzOgorICAgICAgICAqIEFuaW1vbWV0ZXIvdGVzdHMvcmVzb3VyY2VzL21haW4uanM6
CisgICAgICAgIChSb3RhdGVyLlV0aWxpdGllcy5jcmVhdGVDbGFzcyk6CisKIDIwMTYtMDMtMDEg
IEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgdGVzdHMuCi0t
IAoyLjYuNCAoQXBwbGUgR2l0LTYzKQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272650</attachid>
            <date>2016-03-02 02:10:41 -0800</date>
            <delta_ts>2016-03-02 02:10:41 -0800</delta_ts>
            <desc>4. Add a controller that centers around 30 fps instead of 60 fps.</desc>
            <filename>0004-Add-a-controller-that-centers-around-30-fps-instead-.patch</filename>
            <type>text/plain</type>
            <size>16260</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">RnJvbSBlYTIwM2VjYmEyMDhkZTlkM2M5ZDE0OGJiOWJlMGFhNzdhZTMxZTkxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb24gTGVlIDxqb25sZWVAYXBwbGUuY29tPgpEYXRlOiBXZWQs
IDIgTWFyIDIwMTYgMDI6MDY6NTcgLTA4MDAKU3ViamVjdDogW1BBVENIIDQvNF0gQWRkIGEgY29u
dHJvbGxlciB0aGF0IGNlbnRlcnMgYXJvdW5kIDMwIGZwcyBpbnN0ZWFkIG9mIDYwCiBmcHMuCgoq
IEFuaW1vbWV0ZXIvZGV2ZWxvcGVyLmh0bWw6IEFkZCBhIG5ldyBvcHRpb24uCiogQW5pbW9tZXRl
ci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1vbWV0ZXIuanM6CiogQW5pbW9tZXRlci9yZXNv
dXJjZXMvcnVubmVyL2FuaW1vbWV0ZXIuanM6Cih0aGlzLl9wcm9jZXNzRGF0YS5maW5kUmVncmVz
c2lvbik6IFdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvbXBsZXhpdHktZnJhbWVMZW5ndGggcmVncmVz
c2lvbiwKY2hlY2sgdGhlIGNvbnRyb2xsZXIsIGFuZCB1c2UgYSAzMCBmcHMgYmFzZWxpbmUgaWYg
bmVlZGVkLgoqIEFuaW1vbWV0ZXIvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanM6CihSZWdyZXNzaW9u
LlV0aWxpdGllcy5jcmVhdGVDbGFzcyk6IFVwZGF0ZSB0byBhbGxvdyBjbGllbnRzIHRvIHNwZWNp
ZnkgdGhlIGJhc2VsaW5lCmZyYW1lIGxlbmd0aC4KKiBBbmltb21ldGVyL3Rlc3RzL3Jlc291cmNl
cy9Wb2x1bWVzL0RhdGEvU2FuZGJveC9TYWZhcmkvT3BlblNvdXJjZS8wMDA0LUFkZC1hLWNvbnRy
b2xsZXItdGhhdC1jZW50ZXJzLWFyb3VuZC0zMC1mcHMtaW5zdGVhZC0ucGF0Y2gvbWFpbi5qczoK
KHR1bmUpOiBPdmVycmlkZSBzb21lIG9mIHRoZSBjb25zdGFudHMgaW4gUmFtcENvbnRyb2xsZXIu
IE1vdmUgdGhvc2UgY29uc3RhbnRzIG91dCBmb3IKZWFzaWVyIHJlYWRpbmcuCi0tLQogUGVyZm9y
bWFuY2VUZXN0cy9Bbmltb21ldGVyL2RldmVsb3Blci5odG1sICAgICAgICAgfCAgMSArCiAuLi4v
cmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmltb21ldGVyLmpzICAgICAgICAgICB8ICAyICstCiAu
Li4vQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVubmVyL2FuaW1vbWV0ZXIuanMgICAgICB8ICA4ICsr
LQogLi4uL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMgICAgICAgICAgICAgfCAg
NyArKy0KIC4uLi9Bbmltb21ldGVyL3Rlc3RzL3Jlc291cmNlcy9tYWluLmpzICAgICAgICAgICAg
IHwgNjkgKysrKysrKysrKysrKystLS0tLS0tLQogUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAxNiArKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA3MSBp
bnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL0FuaW1vbWV0ZXIvZGV2ZWxvcGVyLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0
ZXIvZGV2ZWxvcGVyLmh0bWwKaW5kZXggMWRiZDY5YS4uOThjMmNiZiAxMDA2NDQKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL2RldmVsb3Blci5odG1sCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvQW5pbW9tZXRlci9kZXZlbG9wZXIuaHRtbApAQCAtNTEsNiArNTEsNyBAQAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxsaT48bGFiZWw+PGlucHV0IG5hbWU9ImNvbnRyb2xsZXIi
IHR5cGU9InJhZGlvIiB2YWx1ZT0ic3RlcCI+IEtlZXAgYXQgYSBmaXhlZCBjb21wbGV4aXR5LCB0
aGVuIG1ha2UgYSBiaWcgc3RlcDwvbGFiZWw+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8bGk+PGxhYmVsPjxpbnB1dCBuYW1lPSJjb250cm9sbGVyIiB0eXBlPSJyYWRpbyIgdmFs
dWU9ImFkYXB0aXZlIj4gTWFpbnRhaW4gdGFyZ2V0IEZQUzwvbGFiZWw+PC9saT4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8bGk+PGxhYmVsPjxpbnB1dCBuYW1lPSJjb250cm9sbGVyIiB0
eXBlPSJyYWRpbyIgdmFsdWU9InJhbXAiIGNoZWNrZWQ+IFJhbXA8L2xhYmVsPjwvbGk+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxsYWJlbD48aW5wdXQgbmFtZT0iY29udHJvbGxl
ciIgdHlwZT0icmFkaW8iIHZhbHVlPSJyYW1wMzAiPiBSYW1wIEAgMzBmcHM8L2xhYmVsPjwvbGk+
CiAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICA8L2xp
PgogICAgICAgICAgICAgICAgICAgICA8bGk+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmltb21ldGVyLmpzIGIvUGVyZm9y
bWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvYW5pbW9tZXRlci5q
cwppbmRleCA3NGE4NzhmLi4yZThlODAxIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0Fu
aW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmltb21ldGVyLmpzCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1vbWV0ZXIu
anMKQEAgLTQ5NSw3ICs0OTUsNyBAQCBVdGlsaXRpZXMuZXh0ZW5kT2JqZWN0KHdpbmRvdy5iZW5j
aG1hcmtDb250cm9sbGVyLCB7CiAgICAgICAgIH0KIAogICAgICAgICB2YXIgZGFzaGJvYXJkID0g
YmVuY2htYXJrUnVubmVyQ2xpZW50LnJlc3VsdHM7Ci0gICAgICAgIGlmIChkYXNoYm9hcmQub3B0
aW9uc1siY29udHJvbGxlciJdID09ICJyYW1wIikKKyAgICAgICAgaWYgKGRhc2hib2FyZC5vcHRp
b25zWyJjb250cm9sbGVyIl0uaW5kZXhPZigicmFtcCIpICE9IC0xKQogICAgICAgICAgICAgSGVh
ZGVycy5kZXRhaWxzWzNdLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBIZWFkZXJzLmRldGFpbHNbMV0uZGlzYWJsZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9ydW5uZXIvYW5pbW9tZXRlci5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVubmVyL2FuaW1vbWV0ZXIu
anMKaW5kZXggNjQ5OTg1My4uYTg5YTE2YiAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9B
bmltb21ldGVyL3Jlc291cmNlcy9ydW5uZXIvYW5pbW9tZXRlci5qcworKysgYi9QZXJmb3JtYW5j
ZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL3J1bm5lci9hbmltb21ldGVyLmpzCkBAIC02MCw2
ICs2MCwxMCBAQCBSZXN1bHRzRGFzaGJvYXJkID0gVXRpbGl0aWVzLmNyZWF0ZUNsYXNzKAogICAg
ICAgICBkYXRhW1N0cmluZ3MuanNvbi5yZXN1bHRdID0gcmVzdWx0OwogICAgICAgICB2YXIgc2Ft
cGxlcyA9IGRhdGFbU3RyaW5ncy5qc29uLnNhbXBsZXNdOwogCisgICAgICAgIHZhciBkZXNpcmVk
RnJhbWVMZW5ndGggPSAxMDAwLzYwOworICAgICAgICBpZiAodGhpcy5fb3B0aW9uc1siY29udHJv
bGxlciJdID09ICJyYW1wMzAiKQorICAgICAgICAgICAgZGVzaXJlZEZyYW1lTGVuZ3RoID0gMTAw
MC8zMDsKKwogICAgICAgICBmdW5jdGlvbiBmaW5kUmVncmVzc2lvbihzZXJpZXMpIHsKICAgICAg
ICAgICAgIHZhciBtaW5JbmRleCA9IE1hdGgucm91bmQoLjAyNSAqIHNlcmllcy5sZW5ndGgpOwog
ICAgICAgICAgICAgdmFyIG1heEluZGV4ID0gTWF0aC5yb3VuZCguOTc1ICogKHNlcmllcy5sZW5n
dGggLSAxKSk7CkBAIC04MCw3ICs4NCw3IEBAIFJlc3VsdHNEYXNoYm9hcmQgPSBVdGlsaXRpZXMu
Y3JlYXRlQ2xhc3MoCiAgICAgICAgICAgICAgICAgICAgIHNlcmllcywKICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gKGRhdHVtLCBpKSB7IHJldHVybiBkYXR1bVtpXS5jb21wbGV4aXR5OyB9
LAogICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZGF0dW0sIGkpIHsgcmV0dXJuIGRhdHVt
W2ldLmZyYW1lTGVuZ3RoOyB9LAotICAgICAgICAgICAgICAgICAgICBtaW5JbmRleCwgbWF4SW5k
ZXgpCisgICAgICAgICAgICAgICAgICAgIG1pbkluZGV4LCBtYXhJbmRleCwgZGVzaXJlZEZyYW1l
TGVuZ3RoKQogICAgICAgICAgICAgfTsKICAgICAgICAgfQogCkBAIC0xMDcsNyArMTExLDcgQEAg
UmVzdWx0c0Rhc2hib2FyZCA9IFV0aWxpdGllcy5jcmVhdGVDbGFzcygKICAgICAgICAgICAgIHJl
Z3Jlc3Npb25bU3RyaW5ncy5qc29uLm1lYXN1cmVtZW50cy5zdGRldl0gPSBNYXRoLnNxcnQoY2Fs
Y3VsYXRpb24uZXJyb3IgLyBzYW1wbGVzW3Nlcmllc05hbWVdLmxlbmd0aCk7CiAgICAgICAgIH0p
OwogCi0gICAgICAgIGlmICh0aGlzLl9vcHRpb25zWyJjb250cm9sbGVyIl0gPT0gInJhbXAiKSB7
CisgICAgICAgIGlmICh0aGlzLl9vcHRpb25zWyJjb250cm9sbGVyIl0uaW5kZXhPZigicmFtcCIp
ICE9IC0xKSB7CiAgICAgICAgICAgICB2YXIgdGltZUNvbXBsZXhpdHkgPSBuZXcgRXhwZXJpbWVu
dDsKICAgICAgICAgICAgIGRhdGFbU3RyaW5ncy5qc29uLmNvbnRyb2xsZXJdLmZvckVhY2goZnVu
Y3Rpb24ocmVncmVzc2lvbikgewogICAgICAgICAgICAgICAgIHRpbWVDb21wbGV4aXR5LnNhbXBs
ZShyZWdyZXNzaW9uW1N0cmluZ3MuanNvbi5jb21wbGV4aXR5XSk7CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMKaW5kZXggZWU3YzI0
Yy4uNjU4NmU4NiAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291
cmNlcy9zdGF0aXN0aWNzLmpzCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNv
dXJjZXMvc3RhdGlzdGljcy5qcwpAQCAtMTQ4LDE2ICsxNDgsMTcgQEAgRXhwZXJpbWVudC5kZWZh
dWx0cyA9CiB9OwogCiBSZWdyZXNzaW9uID0gVXRpbGl0aWVzLmNyZWF0ZUNsYXNzKAotICAgIGZ1
bmN0aW9uKHNhbXBsZXMsIGdldENvbXBsZXhpdHksIGdldEZyYW1lTGVuZ3RoLCBzdGFydEluZGV4
LCBlbmRJbmRleCwgb3B0aW9ucykKKyAgICBmdW5jdGlvbihzYW1wbGVzLCBnZXRDb21wbGV4aXR5
LCBnZXRGcmFtZUxlbmd0aCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIGRlc2lyZWRGcmFtZUxlbmd0
aCkKICAgICB7CisgICAgICAgIGRlc2lyZWRGcmFtZUxlbmd0aCA9IGRlc2lyZWRGcmFtZUxlbmd0
aCB8fCAxMDAwLzYwOwogICAgICAgICB2YXIgc2xvcGUgPSB0aGlzLl9jYWxjdWxhdGVSZWdyZXNz
aW9uKHNhbXBsZXMsIGdldENvbXBsZXhpdHksIGdldEZyYW1lTGVuZ3RoLCBzdGFydEluZGV4LCBl
bmRJbmRleCwgewogICAgICAgICAgICAgc2hvdWxkQ2xpcDogdHJ1ZSwKLSAgICAgICAgICAgIHMx
OiAxMDAwLzYwLAorICAgICAgICAgICAgczE6IGRlc2lyZWRGcmFtZUxlbmd0aCwKICAgICAgICAg
ICAgIHQxOiAwCiAgICAgICAgIH0pOwogICAgICAgICB2YXIgZmxhdCA9IHRoaXMuX2NhbGN1bGF0
ZVJlZ3Jlc3Npb24oc2FtcGxlcywgZ2V0Q29tcGxleGl0eSwgZ2V0RnJhbWVMZW5ndGgsIHN0YXJ0
SW5kZXgsIGVuZEluZGV4LCB7CiAgICAgICAgICAgICBzaG91bGRDbGlwOiB0cnVlLAotICAgICAg
ICAgICAgczE6IDEwMDAvNjAsCisgICAgICAgICAgICBzMTogZGVzaXJlZEZyYW1lTGVuZ3RoLAog
ICAgICAgICAgICAgdDE6IDAsCiAgICAgICAgICAgICB0MjogMAogICAgICAgICB9KTsKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9yZXNvdXJjZXMvbWFpbi5q
cyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9yZXNvdXJjZXMvbWFpbi5qcwpp
bmRleCAwNTA0NDYzLi43NjQ4OGU4IDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1v
bWV0ZXIvdGVzdHMvcmVzb3VyY2VzL21haW4uanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmlt
b21ldGVyL3Rlc3RzL3Jlc291cmNlcy9tYWluLmpzCkBAIC0zMjcsMTIgKzMyNyw2IEBAIFJhbXBD
b250cm9sbGVyID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKENvbnRyb2xsZXIsCiAgICAgICAg
IHRoaXMuX3RpZXIgPSAtLjU7CiAgICAgICAgIC8vIFRoZSB0aW1lc3RhbXAgaXMgZmlyc3Qgc2V0
IGFmdGVyIHRoZSBmaXJzdCBpbnRlcnZhbCBjb21wbGV0ZXMKICAgICAgICAgdGhpcy5fdGllclN0
YXJ0VGltZXN0YW1wID0gMDsKLSAgICAgICAgLy8gSWYgdGhlIGVuZ2luZSBjYW4gaGFuZGxlIHRo
ZSB0aWVyJ3MgY29tcGxleGl0eSBhdCA2MCBGUFMsIHRlc3QgZm9yIGEgc2hvcnQKLSAgICAgICAg
Ly8gcGVyaW9kLCB0aGVuIG1vdmUgb24gdG8gdGhlIG5leHQgdGllcgotICAgICAgICB0aGlzLl90
aWVyRmFzdFRlc3RMZW5ndGggPSAyNTA7Ci0gICAgICAgIC8vIElmIHRoZSBlbmdpbmUgaXMgdW5k
ZXIgc3RyZXNzLCBsZXQgdGhlIHRlc3QgcnVuIGEgbGl0dGxlIGxvbmdlciB0byBsZXQKLSAgICAg
ICAgLy8gdGhlIG1lYXN1cmVtZW50IHNldHRsZQotICAgICAgICB0aGlzLl90aWVyU2xvd1Rlc3RM
ZW5ndGggPSA3NTA7CiAgICAgICAgIHRoaXMuX21pbmltdW1Db21wbGV4aXR5ID0gMDsKICAgICAg
ICAgdGhpcy5fbWF4aW11bUNvbXBsZXhpdHkgPSAwOwogCkBAIC0zNDEsMTcgKzMzNSw5IEBAIFJh
bXBDb250cm9sbGVyID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKENvbnRyb2xsZXIsCiAgICAg
ICAgIHZhciB0b3RhbFJhbXBJdGVyYXRpb25zID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih0aGlz
Ll9lbmRUaW1lc3RhbXAgLyBtaW5pbXVtUmFtcExlbmd0aCkpOwogICAgICAgICAvLyBHaXZlIGEg
bGl0dGxlIGV4dHJhIHJvb20gdG8gcnVuIHNpbmNlIHRoZSByYW1wcyB3b24ndCBiZSBleGFjdGx5
IHRoaXMgbGVuZ3RoCiAgICAgICAgIHRoaXMuX3JhbXBMZW5ndGggPSBNYXRoLmZsb29yKCh0aGlz
Ll9lbmRUaW1lc3RhbXAgLSB0b3RhbFJhbXBJdGVyYXRpb25zICogdGhpcy5faW50ZXJ2YWxMZW5n
dGgpIC8gdG90YWxSYW1wSXRlcmF0aW9ucyk7Ci0gICAgICAgIHRoaXMuX3JhbXBXYXJtdXBMZW5n
dGggPSAyMDA7CiAgICAgICAgIHRoaXMuX3JhbXBEaWRXYXJtdXAgPSBmYWxzZTsKICAgICAgICAg
dGhpcy5fcmFtcFJlZ3Jlc3Npb25zID0gW107CiAKLSAgICAgICAgLy8gQWRkIHNvbWUgdG9sZXJh
bmNlOyBmcmFtZSBsZW5ndGhzIHNob3J0ZXIgdGhhbiB0aGlzIGFyZSBjb25zaWRlcmVkIHRvIGJl
IEAgNjAgZnBzCi0gICAgICAgIHRoaXMuX2ZwczYwVGhyZXNob2xkID0gMTAwMC81ODsKLSAgICAg
ICAgLy8gV2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBjb21wbGV4aXR5IHRoYXQgd2lsbCBnZXQgdXMg
YXQgbGVhc3QgYXMgc2xvdyB0aGlzIHRocmVzaG9sZAotICAgICAgICB0aGlzLl9mcHNMb3dlc3RU
aHJlc2hvbGQgPSAxMDAwLzMwOwotICAgICAgICAvLyBUcnkgdG8gbWFrZSBlYWNoIHJhbXAgZ2V0
IHRoaXMgc2xvdyBzbyB0aGF0IHdlIGNhbiBjcm9zcyB0aGUgYnJlYWsgcG9pbnQKLSAgICAgICAg
dGhpcy5fZnBzUmFtcFNsb3dUaHJlc2hvbGQgPSAxMDAwLzQ1OwotCiAgICAgICAgIHRoaXMuX2Zp
bmlzaGVkVGllclNhbXBsaW5nID0gZmFsc2U7CiAgICAgICAgIHRoaXMuX2NoYW5nZVBvaW50RXN0
aW1hdG9yID0gbmV3IEV4cGVyaW1lbnQ7CiAgICAgICAgIHRoaXMuX21pbmltdW1Db21wbGV4aXR5
RXN0aW1hdG9yID0gbmV3IEV4cGVyaW1lbnQ7CkBAIC0zNTksNiArMzQ1LDIzIEBAIFJhbXBDb250
cm9sbGVyID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKENvbnRyb2xsZXIsCiAgICAgICAgIHRo
aXMuX2ludGVydmFsRnJhbWVMZW5ndGhFc3RpbWF0b3IgPSBuZXcgRXhwZXJpbWVudDsKICAgICB9
LCB7CiAKKyAgICAvLyBJZiB0aGUgZW5naW5lIGNhbiBoYW5kbGUgdGhlIHRpZXIncyBjb21wbGV4
aXR5IGF0IHRoZSBkZXNpcmVkIGZyYW1lIHJhdGUsIHRlc3QgZm9yIGEgc2hvcnQKKyAgICAvLyBw
ZXJpb2QsIHRoZW4gbW92ZSBvbiB0byB0aGUgbmV4dCB0aWVyCisgICAgdGllckZhc3RUZXN0TGVu
Z3RoOiAyNTAsCisgICAgLy8gSWYgdGhlIGVuZ2luZSBpcyB1bmRlciBzdHJlc3MsIGxldCB0aGUg
dGVzdCBydW4gYSBsaXR0bGUgbG9uZ2VyIHRvIGxldCB0aGUgbWVhc3VyZW1lbnQgc2V0dGxlCisg
ICAgdGllclNsb3dUZXN0TGVuZ3RoOiA3NTAsCisKKyAgICByYW1wV2FybXVwTGVuZ3RoOiAyMDAs
CisKKyAgICAvLyBVc2VkIGZvciByZWdyZXNzaW9uIGNhbGN1bGF0aW9ucyBpbiB0aGUgcmFtcHMK
KyAgICBmcmFtZUxlbmd0aERlc2lyZWQ6IDEwMDAvNjAsCisgICAgLy8gQWRkIHNvbWUgdG9sZXJh
bmNlOyBmcmFtZSBsZW5ndGhzIHNob3J0ZXIgdGhhbiB0aGlzIGFyZSBjb25zaWRlcmVkIHRvIGJl
IEAgdGhlIGRlc2lyZWQgZnJhbWUgbGVuZ3RoCisgICAgZnJhbWVMZW5ndGhEZXNpcmVkVGhyZXNo
b2xkOiAxMDAwLzU4LAorICAgIC8vIFJlcHJlc2VudHMgdGhlIGxvd2VyIGJvdW5kIHRocmVzaG9s
ZCBpbiBvcmRlciB0byBmaW5kIHRoZSByaWdodCBjb21wbGV4aXR5IHJhbmdlIHRvIHNhbXBsZQor
ICAgIGZyYW1lTGVuZ3RoU2xvd2VzdFRocmVzaG9sZDogMTAwMC8zMCwKKyAgICAvLyBUcnkgdG8g
bWFrZSBlYWNoIHJhbXAgZ2V0IHRoaXMgc2xvdyBzbyB0aGF0IHdlIGNhbiBjcm9zcyB0aGUgYnJl
YWsgcG9pbnQKKyAgICBmcmFtZUxlbmd0aFJhbXBMb3dlclRocmVzaG9sZDogMTAwMC80NSwKKwog
ICAgIHN0YXJ0OiBmdW5jdGlvbihzdGFydFRpbWVzdGFtcCwgc3RhZ2UpCiAgICAgewogICAgICAg
ICBDb250cm9sbGVyLnByb3RvdHlwZS5zdGFydC5jYWxsKHRoaXMsIHN0YXJ0VGltZXN0YW1wLCBz
dGFnZSk7CkBAIC0zNjgsMTQgKzM3MSwxNCBAQCBSYW1wQ29udHJvbGxlciA9IFV0aWxpdGllcy5j
cmVhdGVTdWJjbGFzcyhDb250cm9sbGVyLAogICAgIGRpZEZpbmlzaEludGVydmFsOiBmdW5jdGlv
bih0aW1lc3RhbXAsIHN0YWdlLCBpbnRlcnZhbEF2ZXJhZ2VGcmFtZUxlbmd0aCkKICAgICB7CiAg
ICAgICAgIGlmICghdGhpcy5fZmluaXNoZWRUaWVyU2FtcGxpbmcpIHsKLSAgICAgICAgICAgIGlm
ICh0aGlzLl90aWVyU3RhcnRUaW1lc3RhbXAgPiAwICYmIHRpbWVzdGFtcCA8IHRoaXMuX3RpZXJT
dGFydFRpbWVzdGFtcCArIHRoaXMuX3RpZXJGYXN0VGVzdExlbmd0aCkKKyAgICAgICAgICAgIGlm
ICh0aGlzLl90aWVyU3RhcnRUaW1lc3RhbXAgPiAwICYmIHRpbWVzdGFtcCA8IHRoaXMuX3RpZXJT
dGFydFRpbWVzdGFtcCArIHRoaXMudGllckZhc3RUZXN0TGVuZ3RoKQogICAgICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICAgICAgdmFyIGN1cnJlbnRDb21wbGV4aXR5ID0gc3RhZ2UuY29t
cGxleGl0eSgpOwogICAgICAgICAgICAgdmFyIGN1cnJlbnRGcmFtZUxlbmd0aCA9IHRoaXMuX2Zy
YW1lTGVuZ3RoRXN0aW1hdG9yLmVzdGltYXRlOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFt
ZUxlbmd0aCA8IHRoaXMuX2Zwc0xvd2VzdFRocmVzaG9sZCkgewotICAgICAgICAgICAgICAgIHZh
ciBpc0FuaW1hdGluZ0F0NjBGUFMgPSBjdXJyZW50RnJhbWVMZW5ndGggPCB0aGlzLl9mcHM2MFRo
cmVzaG9sZDsKLSAgICAgICAgICAgICAgICB2YXIgaGFzRmluaXNoZWRTbG93VGllclRlc3QgPSB0
aW1lc3RhbXAgPiB0aGlzLl90aWVyU3RhcnRUaW1lc3RhbXAgKyB0aGlzLl90aWVyU2xvd1Rlc3RM
ZW5ndGg7CisgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lTGVuZ3RoIDwgdGhpcy5mcmFtZUxl
bmd0aFNsb3dlc3RUaHJlc2hvbGQpIHsKKyAgICAgICAgICAgICAgICB2YXIgaXNBbmltYXRpbmdB
dDYwRlBTID0gY3VycmVudEZyYW1lTGVuZ3RoIDwgdGhpcy5mcmFtZUxlbmd0aERlc2lyZWRUaHJl
c2hvbGQ7CisgICAgICAgICAgICAgICAgdmFyIGhhc0ZpbmlzaGVkU2xvd1RpZXJUZXN0ID0gdGlt
ZXN0YW1wID4gdGhpcy5fdGllclN0YXJ0VGltZXN0YW1wICsgdGhpcy50aWVyU2xvd1Rlc3RMZW5n
dGg7CiAKICAgICAgICAgICAgICAgICBpZiAoIWlzQW5pbWF0aW5nQXQ2MEZQUyAmJiAhaGFzRmlu
aXNoZWRTbG93VGllclRlc3QpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5Niw3
ICszOTksNyBAQCBSYW1wQ29udHJvbGxlciA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhDb250
cm9sbGVyLAogICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmsoIkNvbXBsZXhpdHk6ICIgKyBu
ZXh0VGllckNvbXBsZXhpdHksIHRpbWVzdGFtcCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVzdGFtcCA8
IHRoaXMuX3RpZXJTdGFydFRpbWVzdGFtcCArIHRoaXMuX3RpZXJTbG93VGVzdExlbmd0aCkKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAodGltZXN0YW1wIDwgdGhpcy5fdGllclN0YXJ0VGltZXN0YW1w
ICsgdGhpcy50aWVyU2xvd1Rlc3RMZW5ndGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgICAgICB0aGlzLl9maW5pc2hlZFRpZXJTYW1wbGluZyA9IHRydWU7CkBAIC00MTQsNyAr
NDE3LDcgQEAgUmFtcENvbnRyb2xsZXIgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoQ29udHJv
bGxlciwKICAgICAgICAgICAgIC8vIEF2b2lkIGdvaW5nIGRvd24gdGhhdCBmYXIgc2luY2UgaXQg
bWVhbnMgZmV3ZXIgbWVhc3VyZW1lbnRzIGFyZSB0YWtlbiBpbiB0aGUgNjAgZnBzIGFyZWEKICAg
ICAgICAgICAgIC8vIEludGVycG9sYXRlIGEgbWF4aW11bSBjb21wbGV4aXR5IHRoYXQgZ2V0cyB1
cyBhcm91bmQgdGhlIGxvd2VzdCB0aHJlc2hvbGQKICAgICAgICAgICAgIGlmICh0aGlzLl9sYXN0
VGllckNvbXBsZXhpdHkgIT0gY3VycmVudENvbXBsZXhpdHkpCi0gICAgICAgICAgICAgICAgdGhp
cy5fbWF4aW11bUNvbXBsZXhpdHkgPSBNYXRoLmZsb29yKFV0aWxpdGllcy5sZXJwKFV0aWxpdGll
cy5wcm9ncmVzc1ZhbHVlKHRoaXMuX2Zwc0xvd2VzdFRocmVzaG9sZCwgdGhpcy5fbGFzdFRpZXJG
cmFtZUxlbmd0aCwgY3VycmVudEZyYW1lTGVuZ3RoKSwgdGhpcy5fbGFzdFRpZXJDb21wbGV4aXR5
LCBjdXJyZW50Q29tcGxleGl0eSkpOworICAgICAgICAgICAgICAgIHRoaXMuX21heGltdW1Db21w
bGV4aXR5ID0gTWF0aC5mbG9vcihVdGlsaXRpZXMubGVycChVdGlsaXRpZXMucHJvZ3Jlc3NWYWx1
ZSh0aGlzLmZyYW1lTGVuZ3RoU2xvd2VzdFRocmVzaG9sZCwgdGhpcy5fbGFzdFRpZXJGcmFtZUxl
bmd0aCwgY3VycmVudEZyYW1lTGVuZ3RoKSwgdGhpcy5fbGFzdFRpZXJDb21wbGV4aXR5LCBjdXJy
ZW50Q29tcGxleGl0eSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIGJyb3dzZXIgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyB0aGUgbW9zdCBjb21wbGV4IHZl
cnNpb24gb2YgdGhlIHRlc3QsIHVzZSB0aGF0CiAgICAgICAgICAgICAgICAgdGhpcy5fbWF4aW11
bUNvbXBsZXhpdHkgPSBjdXJyZW50Q29tcGxleGl0eTsKQEAgLTQzNCw3ICs0MzcsNyBAQCBSYW1w
Q29udHJvbGxlciA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhDb250cm9sbGVyLAogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCh0aW1lc3RhbXAgLSB0aGlz
Ll9yYW1wU3RhcnRUaW1lc3RhbXApIDwgdGhpcy5fcmFtcFdhcm11cExlbmd0aCkKKyAgICAgICAg
aWYgKCh0aW1lc3RhbXAgLSB0aGlzLl9yYW1wU3RhcnRUaW1lc3RhbXApIDwgdGhpcy5yYW1wV2Fy
bXVwTGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICh0aGlzLl9yYW1w
RGlkV2FybXVwKQpAQCAtNDYwLDE0ICs0NjMsMTQgQEAgUmFtcENvbnRyb2xsZXIgPSBVdGlsaXRp
ZXMuY3JlYXRlU3ViY2xhc3MoQ29udHJvbGxlciwKICAgICAgICAgdmFyIGludGVydmFsRnJhbWVM
ZW5ndGhNZWFuID0gdGhpcy5faW50ZXJ2YWxGcmFtZUxlbmd0aEVzdGltYXRvci5tZWFuKCk7CiAg
ICAgICAgIHZhciBpbnRlcnZhbEZyYW1lTGVuZ3RoU3RhbmRhcmREZXZpYXRpb24gPSB0aGlzLl9p
bnRlcnZhbEZyYW1lTGVuZ3RoRXN0aW1hdG9yLnN0YW5kYXJkRGV2aWF0aW9uKCk7CiAKLSAgICAg
ICAgaWYgKGludGVydmFsRnJhbWVMZW5ndGhNZWFuIDwgdGhpcy5fZnBzNjBUaHJlc2hvbGQgJiYg
dGhpcy5faW50ZXJ2YWxGcmFtZUxlbmd0aEVzdGltYXRvci5jZGYodGhpcy5fZnBzNjBUaHJlc2hv
bGQpID4gLjk1KSB7CisgICAgICAgIGlmIChpbnRlcnZhbEZyYW1lTGVuZ3RoTWVhbiA8IHRoaXMu
ZnJhbWVMZW5ndGhEZXNpcmVkVGhyZXNob2xkICYmIHRoaXMuX2ludGVydmFsRnJhbWVMZW5ndGhF
c3RpbWF0b3IuY2RmKHRoaXMuZnJhbWVMZW5ndGhEZXNpcmVkVGhyZXNob2xkKSA+IC45NSkgewog
ICAgICAgICAgICAgdGhpcy5fcG9zc2libGVNaW5pbXVtQ29tcGxleGl0eSA9IE1hdGgubWF4KHRo
aXMuX3Bvc3NpYmxlTWluaW11bUNvbXBsZXhpdHksIGN1cnJlbnRDb21wbGV4aXR5KTsKICAgICAg
ICAgfSBlbHNlIGlmIChpbnRlcnZhbEZyYW1lTGVuZ3RoU3RhbmRhcmREZXZpYXRpb24gPiAyKSB7
CiAgICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSB3aGVyZSB3ZSBtaWdodCBoYXZlIGZvdW5kIGEg
cHJldmlvdXMgaW50ZXJ2YWwgd2hlcmUgNjBmcHMgd2FzIHJlYWNoZWQuIFdlIGhpdCBhIHNpZ25p
ZmljYW50IGJsaXAsCiAgICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgcmVzYW1wbGUgdGhpcyBh
cmVhIGluIHRoZSBuZXh0IHJhbXAuCiAgICAgICAgICAgICB0aGlzLl9wb3NzaWJsZU1pbmltdW1D
b21wbGV4aXR5ID0gMDsKICAgICAgICAgfQotICAgICAgICBpZiAoaW50ZXJ2YWxGcmFtZUxlbmd0
aE1lYW4gLSBpbnRlcnZhbEZyYW1lTGVuZ3RoU3RhbmRhcmREZXZpYXRpb24gPiB0aGlzLl9mcHNS
YW1wU2xvd1RocmVzaG9sZCkKKyAgICAgICAgaWYgKGludGVydmFsRnJhbWVMZW5ndGhNZWFuIC0g
aW50ZXJ2YWxGcmFtZUxlbmd0aFN0YW5kYXJkRGV2aWF0aW9uID4gdGhpcy5mcmFtZUxlbmd0aFJh
bXBMb3dlclRocmVzaG9sZCkKICAgICAgICAgICAgIHRoaXMuX3Bvc3NpYmxlTWF4aW11bUNvbXBs
ZXhpdHkgPSBNYXRoLm1pbih0aGlzLl9wb3NzaWJsZU1heGltdW1Db21wbGV4aXR5LCBjdXJyZW50
Q29tcGxleGl0eSk7CiAgICAgICAgIHRoaXMuX2ludGVydmFsRnJhbWVMZW5ndGhFc3RpbWF0b3Iu
cmVzZXQoKTsKIApAQCAtNDc5LDEyICs0ODIsMTIgQEAgUmFtcENvbnRyb2xsZXIgPSBVdGlsaXRp
ZXMuY3JlYXRlU3ViY2xhc3MoQ29udHJvbGxlciwKICAgICAgICAgfQogCiAgICAgICAgIHZhciBy
ZWdyZXNzaW9uID0gbmV3IFJlZ3Jlc3Npb24odGhpcy5fc2FtcGxlci5zYW1wbGVzLCB0aGlzLl9n
ZXRDb21wbGV4aXR5LCB0aGlzLl9nZXRGcmFtZUxlbmd0aCwKLSAgICAgICAgICAgIHRoaXMuX3Nh
bXBsZXIuc2FtcGxlQ291bnQgLSAxLCB0aGlzLl9yYW1wU3RhcnRJbmRleCk7CisgICAgICAgICAg
ICB0aGlzLl9zYW1wbGVyLnNhbXBsZUNvdW50IC0gMSwgdGhpcy5fcmFtcFN0YXJ0SW5kZXgsIHRo
aXMuZnJhbWVMZW5ndGhEZXNpcmVkKTsKICAgICAgICAgdGhpcy5fcmFtcFJlZ3Jlc3Npb25zLnB1
c2gocmVncmVzc2lvbik7CiAKICAgICAgICAgdmFyIGludGVycG9sYXRlZEZyYW1lTGVuZ3RoID0g
cmVncmVzc2lvbi52YWx1ZUF0KHRoaXMuX21heGltdW1Db21wbGV4aXR5KTsKLSAgICAgICAgaWYg
KGludGVycG9sYXRlZEZyYW1lTGVuZ3RoIDwgdGhpcy5fZnBzUmFtcFNsb3dUaHJlc2hvbGQpCi0g
ICAgICAgICAgICB0aGlzLl9wb3NzaWJsZU1heGltdW1Db21wbGV4aXR5ID0gTWF0aC5mbG9vcihV
dGlsaXRpZXMubGVycChVdGlsaXRpZXMucHJvZ3Jlc3NWYWx1ZSh0aGlzLl9mcHNSYW1wU2xvd1Ro
cmVzaG9sZCwgaW50ZXJwb2xhdGVkRnJhbWVMZW5ndGgsIHRoaXMuX2xhc3RUaWVyRnJhbWVMZW5n
dGgpLCB0aGlzLl9tYXhpbXVtQ29tcGxleGl0eSwgdGhpcy5fbGFzdFRpZXJDb21wbGV4aXR5KSk7
CisgICAgICAgIGlmIChpbnRlcnBvbGF0ZWRGcmFtZUxlbmd0aCA8IHRoaXMuZnJhbWVMZW5ndGhS
YW1wTG93ZXJUaHJlc2hvbGQpCisgICAgICAgICAgICB0aGlzLl9wb3NzaWJsZU1heGltdW1Db21w
bGV4aXR5ID0gTWF0aC5mbG9vcihVdGlsaXRpZXMubGVycChVdGlsaXRpZXMucHJvZ3Jlc3NWYWx1
ZSh0aGlzLmZyYW1lTGVuZ3RoUmFtcExvd2VyVGhyZXNob2xkLCBpbnRlcnBvbGF0ZWRGcmFtZUxl
bmd0aCwgdGhpcy5fbGFzdFRpZXJGcmFtZUxlbmd0aCksIHRoaXMuX21heGltdW1Db21wbGV4aXR5
LCB0aGlzLl9sYXN0VGllckNvbXBsZXhpdHkpKTsKIAogICAgICAgICBpbnRlcnBvbGF0ZWRGcmFt
ZUxlbmd0aCA9IHJlZ3Jlc3Npb24udmFsdWVBdCh0aGlzLl9taW5pbXVtQ29tcGxleGl0eSk7CiAg
ICAgICAgIHRoaXMuX21pbmltdW1Db21wbGV4aXR5RXN0aW1hdG9yLnNhbXBsZSh0aGlzLl9wb3Nz
aWJsZU1pbmltdW1Db21wbGV4aXR5KTsKQEAgLTU2Niw2ICs1NjksMTggQEAgUmFtcENvbnRyb2xs
ZXIgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoQ29udHJvbGxlciwKICAgICB9CiB9KTsKIAor
UmFtcDMwQ29udHJvbGxlciA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhSYW1wQ29udHJvbGxl
ciwKKyAgICBmdW5jdGlvbihiZW5jaG1hcmssIG9wdGlvbnMpCisgICAgeworICAgICAgICBSYW1w
Q29udHJvbGxlci5jYWxsKHRoaXMsIGJlbmNobWFyaywgb3B0aW9ucyk7CisgICAgfSwgeworCisg
ICAgZnJhbWVMZW5ndGhEZXNpcmVkOiAxMDAwLzMwLAorICAgIGZyYW1lTGVuZ3RoRGVzaXJlZFRo
cmVzaG9sZDogMTAwMC8yOSwKKyAgICBmcmFtZUxlbmd0aFNsb3dlc3RUaHJlc2hvbGQ6IDEwMDAv
MjAsCisgICAgZnJhbWVMZW5ndGhSYW1wTG93ZXJUaHJlc2hvbGQ6IDEwMDAvMjAKK30pOworCiBT
dGFnZSA9IFV0aWxpdGllcy5jcmVhdGVDbGFzcygKICAgICBmdW5jdGlvbigpCiAgICAgewpAQCAt
Nzk4LDYgKzgxMyw4IEBAIEJlbmNobWFyayA9IFV0aWxpdGllcy5jcmVhdGVDbGFzcygKICAgICAg
ICAgY2FzZSAicmFtcCI6CiAgICAgICAgICAgICB0aGlzLl9jb250cm9sbGVyID0gbmV3IFJhbXBD
b250cm9sbGVyKHRoaXMsIG9wdGlvbnMpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgInJhbXAzMCI6CisgICAgICAgICAgICB0aGlzLl9jb250cm9sbGVyID0gbmV3IFJhbXAzMENv
bnRyb2xsZXIodGhpcywgb3B0aW9ucyk7CiAgICAgICAgIH0KICAgICB9LCB7CiAKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggZTJlMTgzNC4uNWZmZjA5OSAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyMSBA
QAogMjAxNi0wMy0wMiAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKKyAgICAgICAgQWRk
IGEgY29udHJvbGxlciB0aGF0IGNlbnRlcnMgYXJvdW5kIDMwIGZwcyBpbnN0ZWFkIG9mIDYwIGZw
cy4KKworICAgICAgICAqIEFuaW1vbWV0ZXIvZGV2ZWxvcGVyLmh0bWw6IEFkZCBhIG5ldyBvcHRp
b24uCisgICAgICAgICogQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1vbWV0
ZXIuanM6CisgICAgICAgICogQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVubmVyL2FuaW1vbWV0ZXIu
anM6CisgICAgICAgICh0aGlzLl9wcm9jZXNzRGF0YS5maW5kUmVncmVzc2lvbik6IFdoZW4gY2Fs
Y3VsYXRpbmcgdGhlIGNvbXBsZXhpdHktZnJhbWVMZW5ndGggcmVncmVzc2lvbiwKKyAgICAgICAg
Y2hlY2sgdGhlIGNvbnRyb2xsZXIsIGFuZCB1c2UgYSAzMCBmcHMgYmFzZWxpbmUgaWYgbmVlZGVk
LgorICAgICAgICAqIEFuaW1vbWV0ZXIvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanM6CisgICAgICAg
IChSZWdyZXNzaW9uLlV0aWxpdGllcy5jcmVhdGVDbGFzcyk6IFVwZGF0ZSB0byBhbGxvdyBjbGll
bnRzIHRvIHNwZWNpZnkgdGhlIGJhc2VsaW5lCisgICAgICAgIGZyYW1lIGxlbmd0aC4KKyAgICAg
ICAgKiBBbmltb21ldGVyL3Rlc3RzL3Jlc291cmNlcy9tYWluLmpzOgorICAgICAgICAodHVuZSk6
IE92ZXJyaWRlIHNvbWUgb2YgdGhlIGNvbnN0YW50cyBpbiBSYW1wQ29udHJvbGxlci4gTW92ZSB0
aG9zZSBjb25zdGFudHMgb3V0IGZvcgorICAgICAgICBlYXNpZXIgcmVhZGluZy4KKworMjAxNi0w
My0wMiAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CisKICAgICAgICAgQWRkIGEgZml4ZWQg
Y29udHJvbGxlciwgd2l0aCBubyBzdGVwLgogCiAgICAgICAgICogQW5pbW9tZXRlci9kZXZlbG9w
ZXIuaHRtbDogQWRkIGEgY29udHJvbGxlciB0aGF0IHRha2VzIG5vIHN0ZXAuCi0tIAoyLjYuNCAo
QXBwbGUgR2l0LTYzKQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272651</attachid>
            <date>2016-03-02 02:15:15 -0800</date>
            <delta_ts>2016-03-02 09:18:12 -0800</delta_ts>
            <desc>Patch involving test harness</desc>
            <filename>0001-Add-some-new-controllers-and-refine-tests.patch</filename>
            <type>text/plain</type>
            <size>21566</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">RnJvbSA3NTY3ZjFkMjAyMWE1ZjYwYTlmYTEwNjE1OGFkZTRmYWQzNDJhZWVhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb24gTGVlIDxqb25sZWVAYXBwbGUuY29tPgpEYXRlOiBXZWQs
IDIgTWFyIDIwMTYgMDI6MTM6MDYgLTA4MDAKU3ViamVjdDogW1BBVENIIDEvMl0gQWRkIHNvbWUg
bmV3IGNvbnRyb2xsZXJzLCBhbmQgcmVmaW5lIHRlc3RzCiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU0OTE0CgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCkFk
ZCBhIGNvbnRyb2xsZXIgdGhhdCBjZW50ZXJzIGFyb3VuZCAzMCBmcHMgaW5zdGVhZCBvZiA2MCBm
cHMuCgoqIEFuaW1vbWV0ZXIvZGV2ZWxvcGVyLmh0bWw6IEFkZCBhIG5ldyBvcHRpb24uCiogQW5p
bW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1vbWV0ZXIuanM6CiogQW5pbW9tZXRl
ci9yZXNvdXJjZXMvcnVubmVyL2FuaW1vbWV0ZXIuanM6Cih0aGlzLl9wcm9jZXNzRGF0YS5maW5k
UmVncmVzc2lvbik6IFdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvbXBsZXhpdHktZnJhbWVMZW5ndGgg
cmVncmVzc2lvbiwKY2hlY2sgdGhlIGNvbnRyb2xsZXIsIGFuZCB1c2UgYSAzMCBmcHMgYmFzZWxp
bmUgaWYgbmVlZGVkLgoqIEFuaW1vbWV0ZXIvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanM6CihSZWdy
ZXNzaW9uLlV0aWxpdGllcy5jcmVhdGVDbGFzcyk6IFVwZGF0ZSB0byBhbGxvdyBjbGllbnRzIHRv
IHNwZWNpZnkgdGhlIGJhc2VsaW5lCmZyYW1lIGxlbmd0aC4KKiBBbmltb21ldGVyL3Rlc3RzL3Jl
c291cmNlcy9tYWluLmpzOgoodHVuZSk6IE92ZXJyaWRlIHNvbWUgb2YgdGhlIGNvbnN0YW50cyBp
biBSYW1wQ29udHJvbGxlci4gTW92ZSB0aG9zZSBjb25zdGFudHMgb3V0IGZvcgplYXNpZXIgcmVh
ZGluZy4KCkFkZCBhIGZpeGVkIGNvbnRyb2xsZXIsIHdpdGggbm8gc3RlcC4KCiogQW5pbW9tZXRl
ci9kZXZlbG9wZXIuaHRtbDogQWRkIGEgY29udHJvbGxlciB0aGF0IHRha2VzIG5vIHN0ZXAuCiog
QW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1vbWV0ZXIuanM6CiogQW5pbW9t
ZXRlci90ZXN0cy9yZXNvdXJjZXMvbWFpbi5qczoKKFJvdGF0ZXIuVXRpbGl0aWVzLmNyZWF0ZUNs
YXNzKToKClN3aXRjaCB0byByYW1wIGNvbnRyb2xsZXIgYXMgZGVmYXVsdC4KCiogQW5pbW9tZXRl
ci9kZXZlbG9wZXIuaHRtbDogSW5jcmVhc2UgdGhlIHRlc3QgbGVuZ3RoIHRvIDIwIHNlY29uZHMu
CiogQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1vbWV0ZXIuanM6IFJlbmFt
ZSB0aGUgImFkanVzdG1lbnQiIGZpZWxkIHRvICJjb250cm9sbGVyIgpzaW5jZSB0aGF0IGlzIGEg
bW9yZSBhY2N1cmF0ZSBkZXNjcmlwdGlvbi4KKiBBbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1y
dW5uZXIvZ3JhcGguanM6CiogQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVubmVyL2FuaW1vbWV0ZXIu
anM6IFVwZGF0ZSBwcmVmZXJlbmNlcyBmb3IgcmVsZWFzZSBzdWl0ZS4KLS0tCiBQZXJmb3JtYW5j
ZVRlc3RzL0FuaW1vbWV0ZXIvZGV2ZWxvcGVyLmh0bWwgICAgICAgICB8IDEwICstLQogLi4uL3Jl
c291cmNlcy9kZWJ1Zy1ydW5uZXIvYW5pbW9tZXRlci5qcyAgICAgICAgICAgfCAgNiArLQogLi4u
L0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9ncmFwaC5qcyAgICAgfCAgMiArLQog
Li4uL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL3J1bm5lci9hbmltb21ldGVyLmpzICAgICAgfCAxMyAr
Ky0tCiAuLi4vQW5pbW9tZXRlci9yZXNvdXJjZXMvc3RhdGlzdGljcy5qcyAgICAgICAgICAgICB8
ICA3ICstCiAuLi4vQW5pbW9tZXRlci90ZXN0cy9yZXNvdXJjZXMvbWFpbi5qcyAgICAgICAgICAg
ICB8IDgzICsrKysrKysrKysrKysrKy0tLS0tLS0KIFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9n
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzYgKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2Vk
LCAxMTQgaW5zZXJ0aW9ucygrKSwgNDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9Bbmltb21ldGVyL2RldmVsb3Blci5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9B
bmltb21ldGVyL2RldmVsb3Blci5odG1sCmluZGV4IDNiMjY0ZmEuLjk4YzJjYmYgMTAwNjQ0Ci0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9kZXZlbG9wZXIuaHRtbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvZGV2ZWxvcGVyLmh0bWwKQEAgLTM1LDcgKzM1LDcgQEAK
ICAgICAgICAgICAgICAgICAgICAgPGZvcm0gbmFtZT0iYmVuY2htYXJrLW9wdGlvbnMiPgogICAg
ICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgIDxsaT4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIDxsYWJlbD5UZXN0IGxlbmd0aDogPGlucHV0IHR5cGU9Im51bWJlciIg
aWQ9InRlc3QtaW50ZXJ2YWwiIHZhbHVlPSIxMCI+IHNlY29uZHMgZWFjaDwvbGFiZWw+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VGVzdCBsZW5ndGg6IDxpbnB1dCB0eXBlPSJudW1i
ZXIiIGlkPSJ0ZXN0LWludGVydmFsIiB2YWx1ZT0iMjAiPiBzZWNvbmRzIGVhY2g8L2xhYmVsPgog
ICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAg
ICAgICAgICAgICAgICAgICAgICA8aDM+RGlzcGxheTo8L2gzPgpAQCAtNDcsOSArNDcsMTEgQEAK
ICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkFk
anVzdGluZyB0aGUgdGVzdCBjb21wbGV4aXR5OjwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAg
ICA8dWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxsYWJlbD48aW5wdXQgbmFt
ZT0iYWRqdXN0bWVudCIgdHlwZT0icmFkaW8iIHZhbHVlPSJzdGVwIj4gS2VlcCBhdCBhIGZpeGVk
IGNvbXBsZXhpdHksIHRoZW4gbWFrZSBhIGJpZyBzdGVwPC9sYWJlbD48L2xpPgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDxsaT48bGFiZWw+PGlucHV0IG5hbWU9ImFkanVzdG1lbnQiIHR5
cGU9InJhZGlvIiB2YWx1ZT0iYWRhcHRpdmUiIGNoZWNrZWQ+IE1haW50YWluIHRhcmdldCBGUFM8
L2xhYmVsPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxsYWJlbD48aW5w
dXQgbmFtZT0iYWRqdXN0bWVudCIgdHlwZT0icmFkaW8iIHZhbHVlPSJyYW1wIj4gUmFtcDwvbGFi
ZWw+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGxhYmVsPjxpbnB1dCBu
YW1lPSJjb250cm9sbGVyIiB0eXBlPSJyYWRpbyIgdmFsdWU9ImZpeGVkIj4gS2VlcCBhdCBhIGZp
eGVkIGNvbXBsZXhpdHk8L2xhYmVsPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PGxpPjxsYWJlbD48aW5wdXQgbmFtZT0iY29udHJvbGxlciIgdHlwZT0icmFkaW8iIHZhbHVlPSJz
dGVwIj4gS2VlcCBhdCBhIGZpeGVkIGNvbXBsZXhpdHksIHRoZW4gbWFrZSBhIGJpZyBzdGVwPC9s
YWJlbD48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48bGFiZWw+PGlucHV0
IG5hbWU9ImNvbnRyb2xsZXIiIHR5cGU9InJhZGlvIiB2YWx1ZT0iYWRhcHRpdmUiPiBNYWludGFp
biB0YXJnZXQgRlBTPC9sYWJlbD48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxs
aT48bGFiZWw+PGlucHV0IG5hbWU9ImNvbnRyb2xsZXIiIHR5cGU9InJhZGlvIiB2YWx1ZT0icmFt
cCIgY2hlY2tlZD4gUmFtcDwvbGFiZWw+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8bGk+PGxhYmVsPjxpbnB1dCBuYW1lPSJjb250cm9sbGVyIiB0eXBlPSJyYWRpbyIgdmFsdWU9
InJhbXAzMCI+IFJhbXAgQCAzMGZwczwvbGFiZWw+PC9saT4KICAgICAgICAgICAgICAgICAgICAg
ICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAg
IDxsaT4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMv
ZGVidWctcnVubmVyL2FuaW1vbWV0ZXIuanMgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIv
cmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmltb21ldGVyLmpzCmluZGV4IDhjYjllY2QuLjJlOGU4
MDEgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVi
dWctcnVubmVyL2FuaW1vbWV0ZXIuanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVy
L3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvYW5pbW9tZXRlci5qcwpAQCAtMzI4LDcgKzMyOCw3IEBA
IHdpbmRvdy5zdWl0ZXNNYW5hZ2VyID0KICAgICB1cGRhdGVFZGl0c0VsZW1lbnRzU3RhdGU6IGZ1
bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBlZGl0c0VsZW1lbnRzID0gdGhpcy5fZWRpdHNF
bGVtZW50cygpOwotICAgICAgICB2YXIgc2hvd0NvbXBsZXhpdHlJbnB1dHMgPSBvcHRpb25zTWFu
YWdlci52YWx1ZUZvck9wdGlvbigiYWRqdXN0bWVudCIpID09ICJzdGVwIjsKKyAgICAgICAgdmFy
IHNob3dDb21wbGV4aXR5SW5wdXRzID0gWyJmaXhlZCIsICJzdGVwIl0uaW5kZXhPZihvcHRpb25z
TWFuYWdlci52YWx1ZUZvck9wdGlvbigiY29udHJvbGxlciIpKSAhPSAtMTsKIAogICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGVkaXRzRWxlbWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgIHZhciBlZGl0RWxlbWVudCA9IGVkaXRzRWxlbWVudHNbaV07CkBAIC00NzEsNyArNDcxLDcg
QEAgVXRpbGl0aWVzLmV4dGVuZE9iamVjdCh3aW5kb3cuYmVuY2htYXJrQ29udHJvbGxlciwgewog
CiAgICAgb25CZW5jaG1hcmtPcHRpb25zQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewot
ICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm5hbWUgPT0gImFkanVzdG1lbnQiKSB7CisgICAgICAg
IGlmIChldmVudC50YXJnZXQubmFtZSA9PSAiY29udHJvbGxlciIpIHsKICAgICAgICAgICAgIHN1
aXRlc01hbmFnZXIudXBkYXRlRWRpdHNFbGVtZW50c1N0YXRlKCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KQEAgLTQ5NSw3ICs0OTUsNyBAQCBVdGlsaXRpZXMuZXh0ZW5kT2JqZWN0
KHdpbmRvdy5iZW5jaG1hcmtDb250cm9sbGVyLCB7CiAgICAgICAgIH0KIAogICAgICAgICB2YXIg
ZGFzaGJvYXJkID0gYmVuY2htYXJrUnVubmVyQ2xpZW50LnJlc3VsdHM7Ci0gICAgICAgIGlmIChk
YXNoYm9hcmQub3B0aW9uc1siYWRqdXN0bWVudCJdID09ICJyYW1wIikKKyAgICAgICAgaWYgKGRh
c2hib2FyZC5vcHRpb25zWyJjb250cm9sbGVyIl0uaW5kZXhPZigicmFtcCIpICE9IC0xKQogICAg
ICAgICAgICAgSGVhZGVycy5kZXRhaWxzWzNdLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBIZWFkZXJzLmRldGFpbHNbMV0uZGlzYWJsZWQgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1ydW5u
ZXIvZ3JhcGguanMgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVn
LXJ1bm5lci9ncmFwaC5qcwppbmRleCBkODk1MmI1Li43NmEwYTk4IDEwMDY0NAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9ncmFwaC5qcwor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9n
cmFwaC5qcwpAQCAtMzY4LDcgKzM2OCw3IEBAIFV0aWxpdGllcy5leHRlbmRPYmplY3Qod2luZG93
LmJlbmNobWFya0NvbnRyb2xsZXIsIHsKICAgICAgICAgfQogCiAgICAgICAgIC8vIHJpZ2h0LXRh
cmdldAotICAgICAgICBpZiAob3B0aW9uc1siYWRqdXN0bWVudCJdID09ICJhZGFwdGl2ZSIpIHsK
KyAgICAgICAgaWYgKG9wdGlvbnNbImNvbnRyb2xsZXIiXSA9PSAiYWRhcHRpdmUiKSB7CiAgICAg
ICAgICAgICB2YXIgdGFyZ2V0RnJhbWVMZW5ndGggPSAxMDAwIC8gb3B0aW9uc1siZnJhbWUtcmF0
ZSJdOwogICAgICAgICAgICAgc3ZnLmFwcGVuZCgibGluZSIpCiAgICAgICAgICAgICAgICAgLmF0
dHIoIngxIiwgeCgwKSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9y
ZXNvdXJjZXMvcnVubmVyL2FuaW1vbWV0ZXIuanMgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0
ZXIvcmVzb3VyY2VzL3J1bm5lci9hbmltb21ldGVyLmpzCmluZGV4IDNhYzJkY2MuLmE4OWExNmIg
MTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVubmVy
L2FuaW1vbWV0ZXIuanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNl
cy9ydW5uZXIvYW5pbW9tZXRlci5qcwpAQCAtNjAsNiArNjAsMTAgQEAgUmVzdWx0c0Rhc2hib2Fy
ZCA9IFV0aWxpdGllcy5jcmVhdGVDbGFzcygKICAgICAgICAgZGF0YVtTdHJpbmdzLmpzb24ucmVz
dWx0XSA9IHJlc3VsdDsKICAgICAgICAgdmFyIHNhbXBsZXMgPSBkYXRhW1N0cmluZ3MuanNvbi5z
YW1wbGVzXTsKIAorICAgICAgICB2YXIgZGVzaXJlZEZyYW1lTGVuZ3RoID0gMTAwMC82MDsKKyAg
ICAgICAgaWYgKHRoaXMuX29wdGlvbnNbImNvbnRyb2xsZXIiXSA9PSAicmFtcDMwIikKKyAgICAg
ICAgICAgIGRlc2lyZWRGcmFtZUxlbmd0aCA9IDEwMDAvMzA7CisKICAgICAgICAgZnVuY3Rpb24g
ZmluZFJlZ3Jlc3Npb24oc2VyaWVzKSB7CiAgICAgICAgICAgICB2YXIgbWluSW5kZXggPSBNYXRo
LnJvdW5kKC4wMjUgKiBzZXJpZXMubGVuZ3RoKTsKICAgICAgICAgICAgIHZhciBtYXhJbmRleCA9
IE1hdGgucm91bmQoLjk3NSAqIChzZXJpZXMubGVuZ3RoIC0gMSkpOwpAQCAtODAsNyArODQsNyBA
QCBSZXN1bHRzRGFzaGJvYXJkID0gVXRpbGl0aWVzLmNyZWF0ZUNsYXNzKAogICAgICAgICAgICAg
ICAgICAgICBzZXJpZXMsCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChkYXR1bSwgaSkg
eyByZXR1cm4gZGF0dW1baV0uY29tcGxleGl0eTsgfSwKICAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gKGRhdHVtLCBpKSB7IHJldHVybiBkYXR1bVtpXS5mcmFtZUxlbmd0aDsgfSwKLSAgICAg
ICAgICAgICAgICAgICAgbWluSW5kZXgsIG1heEluZGV4KQorICAgICAgICAgICAgICAgICAgICBt
aW5JbmRleCwgbWF4SW5kZXgsIGRlc2lyZWRGcmFtZUxlbmd0aCkKICAgICAgICAgICAgIH07CiAg
ICAgICAgIH0KIApAQCAtMTA3LDcgKzExMSw3IEBAIFJlc3VsdHNEYXNoYm9hcmQgPSBVdGlsaXRp
ZXMuY3JlYXRlQ2xhc3MoCiAgICAgICAgICAgICByZWdyZXNzaW9uW1N0cmluZ3MuanNvbi5tZWFz
dXJlbWVudHMuc3RkZXZdID0gTWF0aC5zcXJ0KGNhbGN1bGF0aW9uLmVycm9yIC8gc2FtcGxlc1tz
ZXJpZXNOYW1lXS5sZW5ndGgpOwogICAgICAgICB9KTsKIAotICAgICAgICBpZiAodGhpcy5fb3B0
aW9uc1siYWRqdXN0bWVudCJdID09ICJyYW1wIikgeworICAgICAgICBpZiAodGhpcy5fb3B0aW9u
c1siY29udHJvbGxlciJdLmluZGV4T2YoInJhbXAiKSAhPSAtMSkgewogICAgICAgICAgICAgdmFy
IHRpbWVDb21wbGV4aXR5ID0gbmV3IEV4cGVyaW1lbnQ7CiAgICAgICAgICAgICBkYXRhW1N0cmlu
Z3MuanNvbi5jb250cm9sbGVyXS5mb3JFYWNoKGZ1bmN0aW9uKHJlZ3Jlc3Npb24pIHsKICAgICAg
ICAgICAgICAgICB0aW1lQ29tcGxleGl0eS5zYW1wbGUocmVncmVzc2lvbltTdHJpbmdzLmpzb24u
Y29tcGxleGl0eV0pOwpAQCAtMzY0LDEwICszNjgsOSBAQCB3aW5kb3cuYmVuY2htYXJrQ29udHJv
bGxlciA9IHsKICAgICBzdGFydEJlbmNobWFyazogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAg
dmFyIG9wdGlvbnMgPSB7Ci0gICAgICAgICAgICAidGVzdC1pbnRlcnZhbCI6IDEwLAorICAgICAg
ICAgICAgInRlc3QtaW50ZXJ2YWwiOiAyMCwKICAgICAgICAgICAgICJkaXNwbGF5IjogIm1pbmlt
YWwiLAotICAgICAgICAgICAgImFkanVzdG1lbnQiOiAiYWRhcHRpdmUiLAotICAgICAgICAgICAg
ImZyYW1lLXJhdGUiOiA1MCwKKyAgICAgICAgICAgICJjb250cm9sbGVyIjogInJhbXAiLAogICAg
ICAgICAgICAgImthbG1hbi1wcm9jZXNzLWVycm9yIjogMSwKICAgICAgICAgICAgICJrYWxtYW4t
bWVhc3VyZW1lbnQtZXJyb3IiOiA0LAogICAgICAgICAgICAgInRpbWUtbWVhc3VyZW1lbnQiOiAi
cGVyZm9ybWFuY2UiCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVz
b3VyY2VzL3N0YXRpc3RpY3MuanMgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3Vy
Y2VzL3N0YXRpc3RpY3MuanMKaW5kZXggZWU3YzI0Yy4uNjU4NmU4NiAxMDA2NDQKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvc3RhdGlzdGljcy5qcwpAQCAtMTQ4
LDE2ICsxNDgsMTcgQEAgRXhwZXJpbWVudC5kZWZhdWx0cyA9CiB9OwogCiBSZWdyZXNzaW9uID0g
VXRpbGl0aWVzLmNyZWF0ZUNsYXNzKAotICAgIGZ1bmN0aW9uKHNhbXBsZXMsIGdldENvbXBsZXhp
dHksIGdldEZyYW1lTGVuZ3RoLCBzdGFydEluZGV4LCBlbmRJbmRleCwgb3B0aW9ucykKKyAgICBm
dW5jdGlvbihzYW1wbGVzLCBnZXRDb21wbGV4aXR5LCBnZXRGcmFtZUxlbmd0aCwgc3RhcnRJbmRl
eCwgZW5kSW5kZXgsIGRlc2lyZWRGcmFtZUxlbmd0aCkKICAgICB7CisgICAgICAgIGRlc2lyZWRG
cmFtZUxlbmd0aCA9IGRlc2lyZWRGcmFtZUxlbmd0aCB8fCAxMDAwLzYwOwogICAgICAgICB2YXIg
c2xvcGUgPSB0aGlzLl9jYWxjdWxhdGVSZWdyZXNzaW9uKHNhbXBsZXMsIGdldENvbXBsZXhpdHks
IGdldEZyYW1lTGVuZ3RoLCBzdGFydEluZGV4LCBlbmRJbmRleCwgewogICAgICAgICAgICAgc2hv
dWxkQ2xpcDogdHJ1ZSwKLSAgICAgICAgICAgIHMxOiAxMDAwLzYwLAorICAgICAgICAgICAgczE6
IGRlc2lyZWRGcmFtZUxlbmd0aCwKICAgICAgICAgICAgIHQxOiAwCiAgICAgICAgIH0pOwogICAg
ICAgICB2YXIgZmxhdCA9IHRoaXMuX2NhbGN1bGF0ZVJlZ3Jlc3Npb24oc2FtcGxlcywgZ2V0Q29t
cGxleGl0eSwgZ2V0RnJhbWVMZW5ndGgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB7CiAgICAgICAg
ICAgICBzaG91bGRDbGlwOiB0cnVlLAotICAgICAgICAgICAgczE6IDEwMDAvNjAsCisgICAgICAg
ICAgICBzMTogZGVzaXJlZEZyYW1lTGVuZ3RoLAogICAgICAgICAgICAgdDE6IDAsCiAgICAgICAg
ICAgICB0MjogMAogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQW5p
bW9tZXRlci90ZXN0cy9yZXNvdXJjZXMvbWFpbi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9t
ZXRlci90ZXN0cy9yZXNvdXJjZXMvbWFpbi5qcwppbmRleCA1MjllMWNlLi43NjQ4OGU4IDEwMDY0
NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvcmVzb3VyY2VzL21haW4u
anMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL3Jlc291cmNlcy9tYWlu
LmpzCkBAIC0yMTksNiArMjE5LDE1IEBAIENvbnRyb2xsZXIgPSBVdGlsaXRpZXMuY3JlYXRlQ2xh
c3MoCiAgICAgfQogfSk7CiAKK0ZpeGVkQ29udHJvbGxlciA9IFV0aWxpdGllcy5jcmVhdGVTdWJj
bGFzcyhDb250cm9sbGVyLAorICAgIGZ1bmN0aW9uKGJlbmNobWFyaywgb3B0aW9ucykKKyAgICB7
CisgICAgICAgIG9wdGlvbnNbImludGVydmFsLWxlbmd0aCJdID0gMDsKKyAgICAgICAgQ29udHJv
bGxlci5jYWxsKHRoaXMsIGJlbmNobWFyaywgb3B0aW9ucyk7CisgICAgICAgIHRoaXMuaW5pdGlh
bENvbXBsZXhpdHkgPSBvcHRpb25zWyJjb21wbGV4aXR5Il07CisgICAgfQorKTsKKwogU3RlcENv
bnRyb2xsZXIgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoQ29udHJvbGxlciwKICAgICBmdW5j
dGlvbihiZW5jaG1hcmssIG9wdGlvbnMpCiAgICAgewpAQCAtMzE4LDEyICszMjcsNiBAQCBSYW1w
Q29udHJvbGxlciA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhDb250cm9sbGVyLAogICAgICAg
ICB0aGlzLl90aWVyID0gLS41OwogICAgICAgICAvLyBUaGUgdGltZXN0YW1wIGlzIGZpcnN0IHNl
dCBhZnRlciB0aGUgZmlyc3QgaW50ZXJ2YWwgY29tcGxldGVzCiAgICAgICAgIHRoaXMuX3RpZXJT
dGFydFRpbWVzdGFtcCA9IDA7Ci0gICAgICAgIC8vIElmIHRoZSBlbmdpbmUgY2FuIGhhbmRsZSB0
aGUgdGllcidzIGNvbXBsZXhpdHkgYXQgNjAgRlBTLCB0ZXN0IGZvciBhIHNob3J0Ci0gICAgICAg
IC8vIHBlcmlvZCwgdGhlbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IHRpZXIKLSAgICAgICAgdGhpcy5f
dGllckZhc3RUZXN0TGVuZ3RoID0gMjUwOwotICAgICAgICAvLyBJZiB0aGUgZW5naW5lIGlzIHVu
ZGVyIHN0cmVzcywgbGV0IHRoZSB0ZXN0IHJ1biBhIGxpdHRsZSBsb25nZXIgdG8gbGV0Ci0gICAg
ICAgIC8vIHRoZSBtZWFzdXJlbWVudCBzZXR0bGUKLSAgICAgICAgdGhpcy5fdGllclNsb3dUZXN0
TGVuZ3RoID0gNzUwOwogICAgICAgICB0aGlzLl9taW5pbXVtQ29tcGxleGl0eSA9IDA7CiAgICAg
ICAgIHRoaXMuX21heGltdW1Db21wbGV4aXR5ID0gMDsKIApAQCAtMzMyLDE3ICszMzUsOSBAQCBS
YW1wQ29udHJvbGxlciA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhDb250cm9sbGVyLAogICAg
ICAgICB2YXIgdG90YWxSYW1wSXRlcmF0aW9ucyA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IodGhp
cy5fZW5kVGltZXN0YW1wIC8gbWluaW11bVJhbXBMZW5ndGgpKTsKICAgICAgICAgLy8gR2l2ZSBh
IGxpdHRsZSBleHRyYSByb29tIHRvIHJ1biBzaW5jZSB0aGUgcmFtcHMgd29uJ3QgYmUgZXhhY3Rs
eSB0aGlzIGxlbmd0aAogICAgICAgICB0aGlzLl9yYW1wTGVuZ3RoID0gTWF0aC5mbG9vcigodGhp
cy5fZW5kVGltZXN0YW1wIC0gdG90YWxSYW1wSXRlcmF0aW9ucyAqIHRoaXMuX2ludGVydmFsTGVu
Z3RoKSAvIHRvdGFsUmFtcEl0ZXJhdGlvbnMpOwotICAgICAgICB0aGlzLl9yYW1wV2FybXVwTGVu
Z3RoID0gMjAwOwogICAgICAgICB0aGlzLl9yYW1wRGlkV2FybXVwID0gZmFsc2U7CiAgICAgICAg
IHRoaXMuX3JhbXBSZWdyZXNzaW9ucyA9IFtdOwogCi0gICAgICAgIC8vIEFkZCBzb21lIHRvbGVy
YW5jZTsgZnJhbWUgbGVuZ3RocyBzaG9ydGVyIHRoYW4gdGhpcyBhcmUgY29uc2lkZXJlZCB0byBi
ZSBAIDYwIGZwcwotICAgICAgICB0aGlzLl9mcHM2MFRocmVzaG9sZCA9IDEwMDAvNTg7Ci0gICAg
ICAgIC8vIFdlIGFyZSBsb29raW5nIGZvciB0aGUgY29tcGxleGl0eSB0aGF0IHdpbGwgZ2V0IHVz
IGF0IGxlYXN0IGFzIHNsb3cgdGhpcyB0aHJlc2hvbGQKLSAgICAgICAgdGhpcy5fZnBzTG93ZXN0
VGhyZXNob2xkID0gMTAwMC8zMDsKLSAgICAgICAgLy8gVHJ5IHRvIG1ha2UgZWFjaCByYW1wIGdl
dCB0aGlzIHNsb3cgc28gdGhhdCB3ZSBjYW4gY3Jvc3MgdGhlIGJyZWFrIHBvaW50Ci0gICAgICAg
IHRoaXMuX2Zwc1JhbXBTbG93VGhyZXNob2xkID0gMTAwMC80NTsKLQogICAgICAgICB0aGlzLl9m
aW5pc2hlZFRpZXJTYW1wbGluZyA9IGZhbHNlOwogICAgICAgICB0aGlzLl9jaGFuZ2VQb2ludEVz
dGltYXRvciA9IG5ldyBFeHBlcmltZW50OwogICAgICAgICB0aGlzLl9taW5pbXVtQ29tcGxleGl0
eUVzdGltYXRvciA9IG5ldyBFeHBlcmltZW50OwpAQCAtMzUwLDYgKzM0NSwyMyBAQCBSYW1wQ29u
dHJvbGxlciA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhDb250cm9sbGVyLAogICAgICAgICB0
aGlzLl9pbnRlcnZhbEZyYW1lTGVuZ3RoRXN0aW1hdG9yID0gbmV3IEV4cGVyaW1lbnQ7CiAgICAg
fSwgewogCisgICAgLy8gSWYgdGhlIGVuZ2luZSBjYW4gaGFuZGxlIHRoZSB0aWVyJ3MgY29tcGxl
eGl0eSBhdCB0aGUgZGVzaXJlZCBmcmFtZSByYXRlLCB0ZXN0IGZvciBhIHNob3J0CisgICAgLy8g
cGVyaW9kLCB0aGVuIG1vdmUgb24gdG8gdGhlIG5leHQgdGllcgorICAgIHRpZXJGYXN0VGVzdExl
bmd0aDogMjUwLAorICAgIC8vIElmIHRoZSBlbmdpbmUgaXMgdW5kZXIgc3RyZXNzLCBsZXQgdGhl
IHRlc3QgcnVuIGEgbGl0dGxlIGxvbmdlciB0byBsZXQgdGhlIG1lYXN1cmVtZW50IHNldHRsZQor
ICAgIHRpZXJTbG93VGVzdExlbmd0aDogNzUwLAorCisgICAgcmFtcFdhcm11cExlbmd0aDogMjAw
LAorCisgICAgLy8gVXNlZCBmb3IgcmVncmVzc2lvbiBjYWxjdWxhdGlvbnMgaW4gdGhlIHJhbXBz
CisgICAgZnJhbWVMZW5ndGhEZXNpcmVkOiAxMDAwLzYwLAorICAgIC8vIEFkZCBzb21lIHRvbGVy
YW5jZTsgZnJhbWUgbGVuZ3RocyBzaG9ydGVyIHRoYW4gdGhpcyBhcmUgY29uc2lkZXJlZCB0byBi
ZSBAIHRoZSBkZXNpcmVkIGZyYW1lIGxlbmd0aAorICAgIGZyYW1lTGVuZ3RoRGVzaXJlZFRocmVz
aG9sZDogMTAwMC81OCwKKyAgICAvLyBSZXByZXNlbnRzIHRoZSBsb3dlciBib3VuZCB0aHJlc2hv
bGQgaW4gb3JkZXIgdG8gZmluZCB0aGUgcmlnaHQgY29tcGxleGl0eSByYW5nZSB0byBzYW1wbGUK
KyAgICBmcmFtZUxlbmd0aFNsb3dlc3RUaHJlc2hvbGQ6IDEwMDAvMzAsCisgICAgLy8gVHJ5IHRv
IG1ha2UgZWFjaCByYW1wIGdldCB0aGlzIHNsb3cgc28gdGhhdCB3ZSBjYW4gY3Jvc3MgdGhlIGJy
ZWFrIHBvaW50CisgICAgZnJhbWVMZW5ndGhSYW1wTG93ZXJUaHJlc2hvbGQ6IDEwMDAvNDUsCisK
ICAgICBzdGFydDogZnVuY3Rpb24oc3RhcnRUaW1lc3RhbXAsIHN0YWdlKQogICAgIHsKICAgICAg
ICAgQ29udHJvbGxlci5wcm90b3R5cGUuc3RhcnQuY2FsbCh0aGlzLCBzdGFydFRpbWVzdGFtcCwg
c3RhZ2UpOwpAQCAtMzU5LDE0ICszNzEsMTQgQEAgUmFtcENvbnRyb2xsZXIgPSBVdGlsaXRpZXMu
Y3JlYXRlU3ViY2xhc3MoQ29udHJvbGxlciwKICAgICBkaWRGaW5pc2hJbnRlcnZhbDogZnVuY3Rp
b24odGltZXN0YW1wLCBzdGFnZSwgaW50ZXJ2YWxBdmVyYWdlRnJhbWVMZW5ndGgpCiAgICAgewog
ICAgICAgICBpZiAoIXRoaXMuX2ZpbmlzaGVkVGllclNhbXBsaW5nKSB7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5fdGllclN0YXJ0VGltZXN0YW1wID4gMCAmJiB0aW1lc3RhbXAgPCB0aGlzLl90aWVy
U3RhcnRUaW1lc3RhbXAgKyB0aGlzLl90aWVyRmFzdFRlc3RMZW5ndGgpCisgICAgICAgICAgICBp
ZiAodGhpcy5fdGllclN0YXJ0VGltZXN0YW1wID4gMCAmJiB0aW1lc3RhbXAgPCB0aGlzLl90aWVy
U3RhcnRUaW1lc3RhbXAgKyB0aGlzLnRpZXJGYXN0VGVzdExlbmd0aCkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgICAgIHZhciBjdXJyZW50Q29tcGxleGl0eSA9IHN0YWdlLmNv
bXBsZXhpdHkoKTsKICAgICAgICAgICAgIHZhciBjdXJyZW50RnJhbWVMZW5ndGggPSB0aGlzLl9m
cmFtZUxlbmd0aEVzdGltYXRvci5lc3RpbWF0ZTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50RnJh
bWVMZW5ndGggPCB0aGlzLl9mcHNMb3dlc3RUaHJlc2hvbGQpIHsKLSAgICAgICAgICAgICAgICB2
YXIgaXNBbmltYXRpbmdBdDYwRlBTID0gY3VycmVudEZyYW1lTGVuZ3RoIDwgdGhpcy5fZnBzNjBU
aHJlc2hvbGQ7Ci0gICAgICAgICAgICAgICAgdmFyIGhhc0ZpbmlzaGVkU2xvd1RpZXJUZXN0ID0g
dGltZXN0YW1wID4gdGhpcy5fdGllclN0YXJ0VGltZXN0YW1wICsgdGhpcy5fdGllclNsb3dUZXN0
TGVuZ3RoOworICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZUxlbmd0aCA8IHRoaXMuZnJhbWVM
ZW5ndGhTbG93ZXN0VGhyZXNob2xkKSB7CisgICAgICAgICAgICAgICAgdmFyIGlzQW5pbWF0aW5n
QXQ2MEZQUyA9IGN1cnJlbnRGcmFtZUxlbmd0aCA8IHRoaXMuZnJhbWVMZW5ndGhEZXNpcmVkVGhy
ZXNob2xkOworICAgICAgICAgICAgICAgIHZhciBoYXNGaW5pc2hlZFNsb3dUaWVyVGVzdCA9IHRp
bWVzdGFtcCA+IHRoaXMuX3RpZXJTdGFydFRpbWVzdGFtcCArIHRoaXMudGllclNsb3dUZXN0TGVu
Z3RoOwogCiAgICAgICAgICAgICAgICAgaWYgKCFpc0FuaW1hdGluZ0F0NjBGUFMgJiYgIWhhc0Zp
bmlzaGVkU2xvd1RpZXJUZXN0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zODcs
NyArMzk5LDcgQEAgUmFtcENvbnRyb2xsZXIgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoQ29u
dHJvbGxlciwKICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrKCJDb21wbGV4aXR5OiAiICsg
bmV4dFRpZXJDb21wbGV4aXR5LCB0aW1lc3RhbXApOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lc3RhbXAg
PCB0aGlzLl90aWVyU3RhcnRUaW1lc3RhbXAgKyB0aGlzLl90aWVyU2xvd1Rlc3RMZW5ndGgpCisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVzdGFtcCA8IHRoaXMuX3RpZXJTdGFydFRpbWVzdGFt
cCArIHRoaXMudGllclNsb3dUZXN0TGVuZ3RoKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAgICAgdGhpcy5fZmluaXNoZWRUaWVyU2FtcGxpbmcgPSB0cnVlOwpAQCAtNDA1LDcg
KzQxNyw3IEBAIFJhbXBDb250cm9sbGVyID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKENvbnRy
b2xsZXIsCiAgICAgICAgICAgICAvLyBBdm9pZCBnb2luZyBkb3duIHRoYXQgZmFyIHNpbmNlIGl0
IG1lYW5zIGZld2VyIG1lYXN1cmVtZW50cyBhcmUgdGFrZW4gaW4gdGhlIDYwIGZwcyBhcmVhCiAg
ICAgICAgICAgICAvLyBJbnRlcnBvbGF0ZSBhIG1heGltdW0gY29tcGxleGl0eSB0aGF0IGdldHMg
dXMgYXJvdW5kIHRoZSBsb3dlc3QgdGhyZXNob2xkCiAgICAgICAgICAgICBpZiAodGhpcy5fbGFz
dFRpZXJDb21wbGV4aXR5ICE9IGN1cnJlbnRDb21wbGV4aXR5KQotICAgICAgICAgICAgICAgIHRo
aXMuX21heGltdW1Db21wbGV4aXR5ID0gTWF0aC5mbG9vcihVdGlsaXRpZXMubGVycChVdGlsaXRp
ZXMucHJvZ3Jlc3NWYWx1ZSh0aGlzLl9mcHNMb3dlc3RUaHJlc2hvbGQsIHRoaXMuX2xhc3RUaWVy
RnJhbWVMZW5ndGgsIGN1cnJlbnRGcmFtZUxlbmd0aCksIHRoaXMuX2xhc3RUaWVyQ29tcGxleGl0
eSwgY3VycmVudENvbXBsZXhpdHkpKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXhpbXVtQ29t
cGxleGl0eSA9IE1hdGguZmxvb3IoVXRpbGl0aWVzLmxlcnAoVXRpbGl0aWVzLnByb2dyZXNzVmFs
dWUodGhpcy5mcmFtZUxlbmd0aFNsb3dlc3RUaHJlc2hvbGQsIHRoaXMuX2xhc3RUaWVyRnJhbWVM
ZW5ndGgsIGN1cnJlbnRGcmFtZUxlbmd0aCksIHRoaXMuX2xhc3RUaWVyQ29tcGxleGl0eSwgY3Vy
cmVudENvbXBsZXhpdHkpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBicm93c2VyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlIG1vc3QgY29tcGxleCB2
ZXJzaW9uIG9mIHRoZSB0ZXN0LCB1c2UgdGhhdAogICAgICAgICAgICAgICAgIHRoaXMuX21heGlt
dW1Db21wbGV4aXR5ID0gY3VycmVudENvbXBsZXhpdHk7CkBAIC00MjUsNyArNDM3LDcgQEAgUmFt
cENvbnRyb2xsZXIgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoQ29udHJvbGxlciwKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgodGltZXN0YW1wIC0gdGhp
cy5fcmFtcFN0YXJ0VGltZXN0YW1wKSA8IHRoaXMuX3JhbXBXYXJtdXBMZW5ndGgpCisgICAgICAg
IGlmICgodGltZXN0YW1wIC0gdGhpcy5fcmFtcFN0YXJ0VGltZXN0YW1wKSA8IHRoaXMucmFtcFdh
cm11cExlbmd0aCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAodGhpcy5fcmFt
cERpZFdhcm11cCkKQEAgLTQ1MSwxNCArNDYzLDE0IEBAIFJhbXBDb250cm9sbGVyID0gVXRpbGl0
aWVzLmNyZWF0ZVN1YmNsYXNzKENvbnRyb2xsZXIsCiAgICAgICAgIHZhciBpbnRlcnZhbEZyYW1l
TGVuZ3RoTWVhbiA9IHRoaXMuX2ludGVydmFsRnJhbWVMZW5ndGhFc3RpbWF0b3IubWVhbigpOwog
ICAgICAgICB2YXIgaW50ZXJ2YWxGcmFtZUxlbmd0aFN0YW5kYXJkRGV2aWF0aW9uID0gdGhpcy5f
aW50ZXJ2YWxGcmFtZUxlbmd0aEVzdGltYXRvci5zdGFuZGFyZERldmlhdGlvbigpOwogCi0gICAg
ICAgIGlmIChpbnRlcnZhbEZyYW1lTGVuZ3RoTWVhbiA8IHRoaXMuX2ZwczYwVGhyZXNob2xkICYm
IHRoaXMuX2ludGVydmFsRnJhbWVMZW5ndGhFc3RpbWF0b3IuY2RmKHRoaXMuX2ZwczYwVGhyZXNo
b2xkKSA+IC45NSkgeworICAgICAgICBpZiAoaW50ZXJ2YWxGcmFtZUxlbmd0aE1lYW4gPCB0aGlz
LmZyYW1lTGVuZ3RoRGVzaXJlZFRocmVzaG9sZCAmJiB0aGlzLl9pbnRlcnZhbEZyYW1lTGVuZ3Ro
RXN0aW1hdG9yLmNkZih0aGlzLmZyYW1lTGVuZ3RoRGVzaXJlZFRocmVzaG9sZCkgPiAuOTUpIHsK
ICAgICAgICAgICAgIHRoaXMuX3Bvc3NpYmxlTWluaW11bUNvbXBsZXhpdHkgPSBNYXRoLm1heCh0
aGlzLl9wb3NzaWJsZU1pbmltdW1Db21wbGV4aXR5LCBjdXJyZW50Q29tcGxleGl0eSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaW50ZXJ2YWxGcmFtZUxlbmd0aFN0YW5kYXJkRGV2aWF0aW9uID4gMikg
ewogICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgd2UgbWlnaHQgaGF2ZSBmb3VuZCBh
IHByZXZpb3VzIGludGVydmFsIHdoZXJlIDYwZnBzIHdhcyByZWFjaGVkLiBXZSBoaXQgYSBzaWdu
aWZpY2FudCBibGlwLAogICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIHJlc2FtcGxlIHRoaXMg
YXJlYSBpbiB0aGUgbmV4dCByYW1wLgogICAgICAgICAgICAgdGhpcy5fcG9zc2libGVNaW5pbXVt
Q29tcGxleGl0eSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGludGVydmFsRnJhbWVMZW5n
dGhNZWFuIC0gaW50ZXJ2YWxGcmFtZUxlbmd0aFN0YW5kYXJkRGV2aWF0aW9uID4gdGhpcy5fZnBz
UmFtcFNsb3dUaHJlc2hvbGQpCisgICAgICAgIGlmIChpbnRlcnZhbEZyYW1lTGVuZ3RoTWVhbiAt
IGludGVydmFsRnJhbWVMZW5ndGhTdGFuZGFyZERldmlhdGlvbiA+IHRoaXMuZnJhbWVMZW5ndGhS
YW1wTG93ZXJUaHJlc2hvbGQpCiAgICAgICAgICAgICB0aGlzLl9wb3NzaWJsZU1heGltdW1Db21w
bGV4aXR5ID0gTWF0aC5taW4odGhpcy5fcG9zc2libGVNYXhpbXVtQ29tcGxleGl0eSwgY3VycmVu
dENvbXBsZXhpdHkpOwogICAgICAgICB0aGlzLl9pbnRlcnZhbEZyYW1lTGVuZ3RoRXN0aW1hdG9y
LnJlc2V0KCk7CiAKQEAgLTQ3MCwxMiArNDgyLDEyIEBAIFJhbXBDb250cm9sbGVyID0gVXRpbGl0
aWVzLmNyZWF0ZVN1YmNsYXNzKENvbnRyb2xsZXIsCiAgICAgICAgIH0KIAogICAgICAgICB2YXIg
cmVncmVzc2lvbiA9IG5ldyBSZWdyZXNzaW9uKHRoaXMuX3NhbXBsZXIuc2FtcGxlcywgdGhpcy5f
Z2V0Q29tcGxleGl0eSwgdGhpcy5fZ2V0RnJhbWVMZW5ndGgsCi0gICAgICAgICAgICB0aGlzLl9z
YW1wbGVyLnNhbXBsZUNvdW50IC0gMSwgdGhpcy5fcmFtcFN0YXJ0SW5kZXgpOworICAgICAgICAg
ICAgdGhpcy5fc2FtcGxlci5zYW1wbGVDb3VudCAtIDEsIHRoaXMuX3JhbXBTdGFydEluZGV4LCB0
aGlzLmZyYW1lTGVuZ3RoRGVzaXJlZCk7CiAgICAgICAgIHRoaXMuX3JhbXBSZWdyZXNzaW9ucy5w
dXNoKHJlZ3Jlc3Npb24pOwogCiAgICAgICAgIHZhciBpbnRlcnBvbGF0ZWRGcmFtZUxlbmd0aCA9
IHJlZ3Jlc3Npb24udmFsdWVBdCh0aGlzLl9tYXhpbXVtQ29tcGxleGl0eSk7Ci0gICAgICAgIGlm
IChpbnRlcnBvbGF0ZWRGcmFtZUxlbmd0aCA8IHRoaXMuX2Zwc1JhbXBTbG93VGhyZXNob2xkKQot
ICAgICAgICAgICAgdGhpcy5fcG9zc2libGVNYXhpbXVtQ29tcGxleGl0eSA9IE1hdGguZmxvb3Io
VXRpbGl0aWVzLmxlcnAoVXRpbGl0aWVzLnByb2dyZXNzVmFsdWUodGhpcy5fZnBzUmFtcFNsb3dU
aHJlc2hvbGQsIGludGVycG9sYXRlZEZyYW1lTGVuZ3RoLCB0aGlzLl9sYXN0VGllckZyYW1lTGVu
Z3RoKSwgdGhpcy5fbWF4aW11bUNvbXBsZXhpdHksIHRoaXMuX2xhc3RUaWVyQ29tcGxleGl0eSkp
OworICAgICAgICBpZiAoaW50ZXJwb2xhdGVkRnJhbWVMZW5ndGggPCB0aGlzLmZyYW1lTGVuZ3Ro
UmFtcExvd2VyVGhyZXNob2xkKQorICAgICAgICAgICAgdGhpcy5fcG9zc2libGVNYXhpbXVtQ29t
cGxleGl0eSA9IE1hdGguZmxvb3IoVXRpbGl0aWVzLmxlcnAoVXRpbGl0aWVzLnByb2dyZXNzVmFs
dWUodGhpcy5mcmFtZUxlbmd0aFJhbXBMb3dlclRocmVzaG9sZCwgaW50ZXJwb2xhdGVkRnJhbWVM
ZW5ndGgsIHRoaXMuX2xhc3RUaWVyRnJhbWVMZW5ndGgpLCB0aGlzLl9tYXhpbXVtQ29tcGxleGl0
eSwgdGhpcy5fbGFzdFRpZXJDb21wbGV4aXR5KSk7CiAKICAgICAgICAgaW50ZXJwb2xhdGVkRnJh
bWVMZW5ndGggPSByZWdyZXNzaW9uLnZhbHVlQXQodGhpcy5fbWluaW11bUNvbXBsZXhpdHkpOwog
ICAgICAgICB0aGlzLl9taW5pbXVtQ29tcGxleGl0eUVzdGltYXRvci5zYW1wbGUodGhpcy5fcG9z
c2libGVNaW5pbXVtQ29tcGxleGl0eSk7CkBAIC01NTcsNiArNTY5LDE4IEBAIFJhbXBDb250cm9s
bGVyID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKENvbnRyb2xsZXIsCiAgICAgfQogfSk7CiAK
K1JhbXAzMENvbnRyb2xsZXIgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoUmFtcENvbnRyb2xs
ZXIsCisgICAgZnVuY3Rpb24oYmVuY2htYXJrLCBvcHRpb25zKQorICAgIHsKKyAgICAgICAgUmFt
cENvbnRyb2xsZXIuY2FsbCh0aGlzLCBiZW5jaG1hcmssIG9wdGlvbnMpOworICAgIH0sIHsKKwor
ICAgIGZyYW1lTGVuZ3RoRGVzaXJlZDogMTAwMC8zMCwKKyAgICBmcmFtZUxlbmd0aERlc2lyZWRU
aHJlc2hvbGQ6IDEwMDAvMjksCisgICAgZnJhbWVMZW5ndGhTbG93ZXN0VGhyZXNob2xkOiAxMDAw
LzIwLAorICAgIGZyYW1lTGVuZ3RoUmFtcExvd2VyVGhyZXNob2xkOiAxMDAwLzIwCit9KTsKKwog
U3RhZ2UgPSBVdGlsaXRpZXMuY3JlYXRlQ2xhc3MoCiAgICAgZnVuY3Rpb24oKQogICAgIHsKQEAg
LTc3NSw4ICs3OTksMTEgQEAgQmVuY2htYXJrID0gVXRpbGl0aWVzLmNyZWF0ZUNsYXNzKAogICAg
ICAgICB9CiAKICAgICAgICAgb3B0aW9uc1sidGVzdC1pbnRlcnZhbCJdICo9IDEwMDA7Ci0gICAg
ICAgIHN3aXRjaCAob3B0aW9uc1siYWRqdXN0bWVudCJdKQorICAgICAgICBzd2l0Y2ggKG9wdGlv
bnNbImNvbnRyb2xsZXIiXSkKICAgICAgICAgeworICAgICAgICBjYXNlICJmaXhlZCI6CisgICAg
ICAgICAgICB0aGlzLl9jb250cm9sbGVyID0gbmV3IEZpeGVkQ29udHJvbGxlcih0aGlzLCBvcHRp
b25zKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICJzdGVwIjoKICAgICAgICAg
ICAgIHRoaXMuX2NvbnRyb2xsZXIgPSBuZXcgU3RlcENvbnRyb2xsZXIodGhpcywgb3B0aW9ucyk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTc4Niw2ICs4MTMsOCBAQCBCZW5jaG1hcmsgPSBVdGls
aXRpZXMuY3JlYXRlQ2xhc3MoCiAgICAgICAgIGNhc2UgInJhbXAiOgogICAgICAgICAgICAgdGhp
cy5fY29udHJvbGxlciA9IG5ldyBSYW1wQ29udHJvbGxlcih0aGlzLCBvcHRpb25zKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJyYW1wMzAiOgorICAgICAgICAgICAgdGhpcy5f
Y29udHJvbGxlciA9IG5ldyBSYW1wMzBDb250cm9sbGVyKHRoaXMsIG9wdGlvbnMpOwogICAgICAg
ICB9CiAgICAgfSwgewogCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZyBi
L1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDZmOWUwZmUuLmVhMDYyMWEgMTAwNjQ0
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTYtMDMtMDIgIEpvbiBMZWUgIDxqb25sZWVA
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzb21lIG5ldyBjb250cm9sbGVycywgYW5kIHJlZmlu
ZSB0ZXN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU0OTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIGEgY29udHJvbGxlciB0aGF0IGNlbnRlcnMgYXJvdW5kIDMwIGZwcyBpbnN0ZWFkIG9mIDYw
IGZwcy4KKworICAgICAgICAqIEFuaW1vbWV0ZXIvZGV2ZWxvcGVyLmh0bWw6IEFkZCBhIG5ldyBv
cHRpb24uCisgICAgICAgICogQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1v
bWV0ZXIuanM6CisgICAgICAgICogQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVubmVyL2FuaW1vbWV0
ZXIuanM6CisgICAgICAgICh0aGlzLl9wcm9jZXNzRGF0YS5maW5kUmVncmVzc2lvbik6IFdoZW4g
Y2FsY3VsYXRpbmcgdGhlIGNvbXBsZXhpdHktZnJhbWVMZW5ndGggcmVncmVzc2lvbiwKKyAgICAg
ICAgY2hlY2sgdGhlIGNvbnRyb2xsZXIsIGFuZCB1c2UgYSAzMCBmcHMgYmFzZWxpbmUgaWYgbmVl
ZGVkLgorICAgICAgICAqIEFuaW1vbWV0ZXIvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanM6CisgICAg
ICAgIChSZWdyZXNzaW9uLlV0aWxpdGllcy5jcmVhdGVDbGFzcyk6IFVwZGF0ZSB0byBhbGxvdyBj
bGllbnRzIHRvIHNwZWNpZnkgdGhlIGJhc2VsaW5lCisgICAgICAgIGZyYW1lIGxlbmd0aC4KKyAg
ICAgICAgKiBBbmltb21ldGVyL3Rlc3RzL3Jlc291cmNlcy9tYWluLmpzOgorICAgICAgICAodHVu
ZSk6IE92ZXJyaWRlIHNvbWUgb2YgdGhlIGNvbnN0YW50cyBpbiBSYW1wQ29udHJvbGxlci4gTW92
ZSB0aG9zZSBjb25zdGFudHMgb3V0IGZvcgorICAgICAgICBlYXNpZXIgcmVhZGluZy4KKworICAg
ICAgICBBZGQgYSBmaXhlZCBjb250cm9sbGVyLCB3aXRoIG5vIHN0ZXAuCisKKyAgICAgICAgKiBB
bmltb21ldGVyL2RldmVsb3Blci5odG1sOiBBZGQgYSBjb250cm9sbGVyIHRoYXQgdGFrZXMgbm8g
c3RlcC4KKyAgICAgICAgKiBBbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvYW5pbW9t
ZXRlci5qczoKKyAgICAgICAgKiBBbmltb21ldGVyL3Rlc3RzL3Jlc291cmNlcy9tYWluLmpzOgor
ICAgICAgICAoUm90YXRlci5VdGlsaXRpZXMuY3JlYXRlQ2xhc3MpOgorCisgICAgICAgIFN3aXRj
aCB0byByYW1wIGNvbnRyb2xsZXIgYXMgZGVmYXVsdC4KKworICAgICAgICAqIEFuaW1vbWV0ZXIv
ZGV2ZWxvcGVyLmh0bWw6IEluY3JlYXNlIHRoZSB0ZXN0IGxlbmd0aCB0byAyMCBzZWNvbmRzLgor
ICAgICAgICAqIEFuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmltb21ldGVyLmpz
OiBSZW5hbWUgdGhlICJhZGp1c3RtZW50IiBmaWVsZCB0byAiY29udHJvbGxlciIKKyAgICAgICAg
c2luY2UgdGhhdCBpcyBhIG1vcmUgYWNjdXJhdGUgZGVzY3JpcHRpb24uCisgICAgICAgICogQW5p
bW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2dyYXBoLmpzOgorICAgICAgICAqIEFuaW1v
bWV0ZXIvcmVzb3VyY2VzL3J1bm5lci9hbmltb21ldGVyLmpzOiBVcGRhdGUgcHJlZmVyZW5jZXMg
Zm9yIHJlbGVhc2Ugc3VpdGUuCisKIDIwMTYtMDItMjYgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZHJlc3MgRGVhbidzIGNvbW1lbnRzIGluIDE1NDY3My4KLS0gCjIu
Ni40IChBcHBsZSBHaXQtNjMpCgo=
</data>
<flag name="review"
          id="297411"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272652</attachid>
            <date>2016-03-02 02:15:47 -0800</date>
            <delta_ts>2016-03-02 09:20:48 -0800</delta_ts>
            <desc>Patch with test updates (basically same as 2)</desc>
            <filename>0002-Add-some-new-controllers-and-refine-tests.patch</filename>
            <type>text/plain</type>
            <size>15625</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">RnJvbSA4ZDVlNTU1NmNmY2NlOTAxMDhhZDRlN2RjODU3OWFiYTkyYTQ0OTY4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb24gTGVlIDxqb25sZWVAYXBwbGUuY29tPgpEYXRlOiBUdWUs
IDEgTWFyIDIwMTYgMjA6NDQ6MzUgLTA4MDAKU3ViamVjdDogW1BBVENIIDIvMl0gQWRkIHNvbWUg
bmV3IGNvbnRyb2xsZXJzLCBhbmQgcmVmaW5lIHRlc3RzCiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU0OTE0CgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCklt
cHJvdmUgdGVzdHMuCgoqIEFuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL2ZvY3VzLmh0bWw6IE1vdmUg
ZWFjaCBwYXJ0aWNsZSBpbnRvIGEgbGF5ZXIuIFB1dCB0aGUgcGFydGljbGUKaW4gYSBjb250YWlu
ZXIgZWxlbWVudC4gRXhwYW5kIHRoZSBjb250YWluZXIgZWxlbWVudCBieSB0aGUgbWF4IGJsdXIg
cmFkaXVzLCBhbmQgY2xpcApvdmVyZmxvdy4gVGhpcyB3YXksIHdoZW4gdGhlIGJsdXIgaXMgYXBw
bGllZCwgaXQgYXZvaWQgY2F1c2luZyBsYXllciByZXNpemVzLgoqIEFuaW1vbWV0ZXIvdGVzdHMv
bWFzdGVyL3Jlc291cmNlcy9mb2N1cy5qczoKKEZvY3VzRWxlbWVudC5VdGlsaXRpZXMuY3JlYXRl
Q2xhc3MpOiBDcmVhdGUgYSBjb250YWluZXIgZWxlbWVudCwgYW5kIHB1dCB0aGUgcGFydGljbGUK
aW5zaWRlLgooaGlkZSk6IFNldCBkaXNwbGF5Om5vbmUuCihzaG93KTogU2V0IGRpc3BsYXk6Ymxv
Y2suCihhbmltYXRlKTogQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGFpbmVyIGVsZW1lbnQuCihG
b2N1c1N0YWdlLmNhbGwuaW5pdGlhbGl6ZSk6IEluc3RlYWQgb2YgaW5zZXJ0aW5nIGFuZCByZW1v
dmluZyBlbGVtZW50cyBmcm9tIHRoZSBET00sCmtlZXAgdGhlbSBpbiB0aGUgc3RhZ2UsIGJ1dCBz
ZXQgdGhlIGRpc3BsYXkgc3R5bGUgaW5zdGVhZC4gVXNlIHRoaXMuX29mZnNldEluZGV4IHRvCmtl
ZXAgdHJhY2sgb2Ygd2hpY2ggZWxlbWVudHMgYXJlIGRpc3BsYXllZC4KKEZvY3VzU3RhZ2UuY2Fs
bC5hbmltYXRlKTogTW92ZSBzb21lIGNhbGN1bGF0aW9ucyBhcm91bmQgdG8gYXZvaWQgZG9pbmcg
dW5uZWVkZWQgbWF0aC4KKEZvY3VzU3RhZ2UuY2FsbC5nZXRCbHVyVmFsdWUpOiBNYWtlIHN1cmUg
ZWxlbWVudHMgYXJlIGFsd2F5cyBibHVycmVkLgooRm9jdXNTdGFnZS5jYWxsLmdldE9wYWNpdHlW
YWx1ZSk6IE1ha2Ugc3VyZSBlbGVtZW50cyBoYXZlIHNvbWUgb3BhY2l0eS4KKiBBbmltb21ldGVy
L3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvbXVsdGlwbHkuanM6IEhhdmUgdGhlIHBhcnRpY2xlcyBv
biB0aGUgZWRnZSBvZiB0aGUKc3RhZ2UgYXBwZWFyIGxlc3MgYmxhY2sgd2hlbiB0aGUgY29tcGxl
eGl0eSBnZXRzIGxhcmdlIGVub3VnaC4KKHR1bmUpOiBIYXZlIHRoaXMuX2Rpc3RhbmNlRmFjdG9y
IGNhbGN1bGF0ZSB0aGUgZmFjdG9yLiBBdm9pZCBjYWxjdWxhdGluZyBzcXVhcmUgcm9vdCBlYWNo
CmZyYW1lLgotLS0KIC4uLi9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9mb2N1cy5odG1sICAgICAg
ICAgICAgIHwgIDEwICstCiAuLi4vQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL2Zv
Y3VzLmpzICAgICB8IDEwNCArKysrKysrKysrKystLS0tLS0tLS0KIC4uLi9Bbmltb21ldGVyL3Rl
c3RzL21hc3Rlci9yZXNvdXJjZXMvbXVsdGlwbHkuanMgIHwgIDE1ICsrLQogUGVyZm9ybWFuY2VU
ZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjkgKysrKysrCiA0IGZp
bGVzIGNoYW5nZWQsIDEwNSBpbnNlcnRpb25zKCspLCA1MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL2ZvY3VzLmh0bWwg
Yi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL2ZvY3VzLmh0bWwKaW5k
ZXggMmE1YzYwMC4uZTRiMmY4MCAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21l
dGVyL3Rlc3RzL21hc3Rlci9mb2N1cy5odG1sCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9t
ZXRlci90ZXN0cy9tYXN0ZXIvZm9jdXMuaHRtbApAQCAtMTAsNyArMTAsMTEgQEAKICAgICAgICAg
ei1pbmRleDogLTEwMDAwOwogICAgIH0KIAotICAgICNzdGFnZSBkaXYgeworICAgICNzdGFnZSA+
IGRpdiB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgb3ZlcmZsb3c6IGhp
ZGRlbjsKKyAgICB9CisgICAgI3N0YWdlIGRpdiBkaXYgewogICAgICAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CiAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNERURBREQ7CiAgICAgICAgIGJvcmRl
ci1yYWRpdXM6IDUwJTsKQEAgLTIzLDE0ICsyNywxNCBAQAogICAgICAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CiAgICAgICAgIHRvcDogNTAlOwogICAgICAgICBsZWZ0OiA1MCU7Ci0gICAgICAgIHRy
YW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC01MCUpOworICAgICAgICB0cmFu
c2Zvcm06IHRyYW5zbGF0ZTNkKC01MCUsIC01MCUsIDApOwogICAgIH0KIAogICAgIDwvc3R5bGU+
CiA8L2hlYWQ+CiA8Ym9keT4KICAgICA8ZGl2IGlkPSJzdGFnZSI+Ci0gICAgICAgIDxkaXYgaWQ9
ImNlbnRlci10ZXh0Ij48c3Bhbj5mb2N1czwvc3Bhbj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0i
Y2VudGVyLXRleHQiPjxkaXY+PHNwYW4+Zm9jdXM8L3NwYW4+PC9kaXY+PC9kaXY+CiAgICAgPC9k
aXY+CiAgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9zdHJpbmdzLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2V4dGVuc2lvbnMuanMiPjwvc2Ny
aXB0PgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rl
ci9yZXNvdXJjZXMvZm9jdXMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMv
bWFzdGVyL3Jlc291cmNlcy9mb2N1cy5qcwppbmRleCBmYzBjYTU5Li5hNmY5NWFhIDEwMDY0NAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9m
b2N1cy5qcworKysgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jl
c291cmNlcy9mb2N1cy5qcwpAQCAtMSwxNCArMSwxNSBAQAogKGZ1bmN0aW9uKCkgewogCiB2YXIg
bWF4VmVydGljYWxPZmZzZXQgPSA1MDsKLXZhciByYWRpdXMgPSAyMDsKK3ZhciByYWRpdXMgPSAx
MDsKK3ZhciBjZW50ZXJEaWFtZXRlciA9IDEwMDsKIHZhciBzaXplVmFyaWFuY2UgPSA4MDsKIHZh
ciB0cmF2ZWxEaXN0YW5jZSA9IDcwOwogCiB2YXIgbWluT2JqZWN0RGVwdGggPSAwLjI7CiB2YXIg
bWF4T2JqZWN0RGVwdGggPSAxLjA7CiAKLXZhciBvcGFjaXR5TXVsdGlwbGllciA9IDQwOwordmFy
IG9wYWNpdHlNdWx0aXBsaWVyID0gMzA7CiAKIHZhciBGb2N1c0VsZW1lbnQgPSBVdGlsaXRpZXMu
Y3JlYXRlQ2xhc3MoCiAgICAgZnVuY3Rpb24oc3RhZ2UpCkBAIC0yMiwyNyArMjMsNDEgQEAgdmFy
IEZvY3VzRWxlbWVudCA9IFV0aWxpdGllcy5jcmVhdGVDbGFzcygKICAgICAgICAgdmFyIGRpc3Rh
bmNlID0gVXRpbGl0aWVzLmxlcnAodGhpcy5fZGVwdGgsIDEsIHNpemVWYXJpYW5jZSk7CiAgICAg
ICAgIHZhciBzaXplID0gMiAqIHJhZGl1cyArIHNpemVWYXJpYW5jZSAtIGRpc3RhbmNlOwogCi0g
ICAgICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAg
ICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSBzaXplICsgInB4IjsKLSAgICAgICAgdGhp
cy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IHNpemUgKyAicHgiOwotICAgICAgICB0aGlzLmVsZW1l
bnQuc3R5bGUudG9wID0gdG9wICsgInB4IjsKLSAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmxl
ZnQgPSBsZWZ0ICsgInB4IjsKLSAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnpJbmRleCA9IE1h
dGgucm91bmQoKDEgLSB0aGlzLl9kZXB0aCkgKiAxMCk7CisgICAgICAgIHRoaXMuY29udGFpbmVy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIHRoaXMuY29udGFpbmVy
LnN0eWxlLndpZHRoID0gKHNpemUgKyBzdGFnZS5tYXhCbHVyVmFsdWUgKiAyKSArICJweCI7Cisg
ICAgICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IChzaXplICsgc3RhZ2UubWF4Qmx1
clZhbHVlICogMikgKyAicHgiOworICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS50b3AgPSB0
b3AgKyAicHgiOworICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gbGVmdCArICJw
eCI7CisgICAgICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleCA9IE1hdGgucm91bmQoKDEg
LSB0aGlzLl9kZXB0aCkgKiAxMCk7CiAKLSAgICAgICAgVXRpbGl0aWVzLnNldEVsZW1lbnRQcmVm
aXhlZFByb3BlcnR5KHRoaXMuZWxlbWVudCwgImZpbHRlciIsICJibHVyKCIgKyBzdGFnZS5nZXRC
bHVyVmFsdWUodGhpcy5fZGVwdGgpICsgInB4KSBvcGFjaXR5KCIgKyBzdGFnZS5nZXRPcGFjaXR5
VmFsdWUodGhpcy5fZGVwdGgpICsgIiUpIik7CisgICAgICAgIHZhciBwYXJ0aWNsZSA9IFV0aWxp
dGllcy5jcmVhdGVFbGVtZW50KCJkaXYiLCB7fSwgdGhpcy5jb250YWluZXIpOworICAgICAgICBw
YXJ0aWNsZS5zdHlsZS53aWR0aCA9IHNpemUgKyAicHgiOworICAgICAgICBwYXJ0aWNsZS5zdHls
ZS5oZWlnaHQgPSBzaXplICsgInB4IjsKKyAgICAgICAgcGFydGljbGUuc3R5bGUudG9wID0gc3Rh
Z2UubWF4Qmx1clZhbHVlICsgInB4IjsKKyAgICAgICAgcGFydGljbGUuc3R5bGUubGVmdCA9IHN0
YWdlLm1heEJsdXJWYWx1ZSArICJweCI7CiAKICAgICAgICAgdmFyIGRlcHRoTXVsdGlwbGllciA9
IFV0aWxpdGllcy5sZXJwKDEgLSB0aGlzLl9kZXB0aCwgMC44LCAxKTsKICAgICAgICAgdGhpcy5f
c2luTXVsdGlwbGllciA9IFBzZXVkby5yYW5kb20oKSAqIFN0YWdlLnJhbmRvbVNpZ24oKSAqIGRl
cHRoTXVsdGlwbGllcjsKICAgICAgICAgdGhpcy5fY29zTXVsdGlwbGllciA9IFBzZXVkby5yYW5k
b20oKSAqIFN0YWdlLnJhbmRvbVNpZ24oKSAqIGRlcHRoTXVsdGlwbGllcjsKICAgICB9LCB7CiAK
LSAgICBhbmltYXRlOiBmdW5jdGlvbihzdGFnZSwgc2luVGltZSwgY29zVGltZSkKKyAgICBoaWRl
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgdG9wID0gc2luVGltZSAqIHRoaXMuX3Np
bk11bHRpcGxpZXIgKiB0cmF2ZWxEaXN0YW5jZTsKLSAgICAgICAgdmFyIGxlZnQgPSBjb3NUaW1l
ICogdGhpcy5fY29zTXVsdGlwbGllciAqIHRyYXZlbERpc3RhbmNlOworICAgICAgICB0aGlzLmNv
bnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgIH0sCisKKyAgICBzaG93OiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gImJs
b2NrIjsKKyAgICB9LAogCi0gICAgICAgIFV0aWxpdGllcy5zZXRFbGVtZW50UHJlZml4ZWRQcm9w
ZXJ0eSh0aGlzLmVsZW1lbnQsICJmaWx0ZXIiLCAiYmx1cigiICsgc3RhZ2UuZ2V0Qmx1clZhbHVl
KHRoaXMuX2RlcHRoKSArICJweCkgb3BhY2l0eSgiICsgc3RhZ2UuZ2V0T3BhY2l0eVZhbHVlKHRo
aXMuX2RlcHRoKSArICIlKSIpOwotICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3Jt
ID0gInRyYW5zbGF0ZVgoIiArIGxlZnQgKyAiJSkgdHJhbnNsYXRlWSgiICsgdG9wICsgIiUpIjsK
KyAgICBhbmltYXRlOiBmdW5jdGlvbihzdGFnZSwgc2luRmFjdG9yLCBjb3NGYWN0b3IpCisgICAg
eworICAgICAgICB2YXIgdG9wID0gc2luRmFjdG9yICogdGhpcy5fc2luTXVsdGlwbGllcjsKKyAg
ICAgICAgdmFyIGxlZnQgPSBjb3NGYWN0b3IgKiB0aGlzLl9jb3NNdWx0aXBsaWVyOworCisgICAg
ICAgIFV0aWxpdGllcy5zZXRFbGVtZW50UHJlZml4ZWRQcm9wZXJ0eSh0aGlzLmNvbnRhaW5lciwg
ImZpbHRlciIsICJibHVyKCIgKyBzdGFnZS5nZXRCbHVyVmFsdWUodGhpcy5fZGVwdGgpICsgInB4
KSBvcGFjaXR5KCIgKyBzdGFnZS5nZXRPcGFjaXR5VmFsdWUodGhpcy5fZGVwdGgpICsgIiUpIik7
CisgICAgICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGUzZCgi
ICsgbGVmdCArICIlLCAiICsgdG9wICsgIiUsIDApIjsKICAgICB9CiB9KTsKIApAQCAtNjcsMTkg
KzgyLDI2IEBAIHZhciBGb2N1c1N0YWdlID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKFN0YWdl
LAogCiAgICAgICAgIHRoaXMuX3Rlc3RFbGVtZW50cyA9IFtdOwogICAgICAgICB0aGlzLl9mb2Nh
bFBvaW50ID0gMC41OworICAgICAgICB0aGlzLl9vZmZzZXRJbmRleCA9IDA7CiAKICAgICAgICAg
dGhpcy5fY2VudGVyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjZW50ZXItdGV4
dCIpOwotICAgICAgICB0aGlzLl9jZW50ZXJFbGVtZW50LnN0eWxlLndpZHRoID0gKHJhZGl1cyAq
IDUpICsgJ3B4JzsKLSAgICAgICAgdGhpcy5fY2VudGVyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAo
cmFkaXVzICogNSkgKyAncHgnOworICAgICAgICB0aGlzLl9jZW50ZXJFbGVtZW50LnN0eWxlLndp
ZHRoID0gKGNlbnRlckRpYW1ldGVyICsgdGhpcy5tYXhDZW50ZXJPYmplY3RCbHVyVmFsdWUgKiAy
KSArICJweCI7CisgICAgICAgIHRoaXMuX2NlbnRlckVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gKGNl
bnRlckRpYW1ldGVyICsgdGhpcy5tYXhDZW50ZXJPYmplY3RCbHVyVmFsdWUgKiAyKSArICJweCI7
CiAgICAgICAgIHRoaXMuX2NlbnRlckVsZW1lbnQuc3R5bGUuekluZGV4ID0gTWF0aC5yb3VuZCgx
MCAqIHRoaXMuY2VudGVyT2JqZWN0RGVwdGgpOwogCi0gICAgICAgIHZhciBibHVyID0gdGhpcy5n
ZXRCbHVyVmFsdWUodGhpcy5jZW50ZXJPYmplY3REZXB0aCk7CisgICAgICAgIHZhciBwYXJ0aWNs
ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNjZW50ZXItdGV4dCBkaXYiKTsKKyAgICAgICAg
cGFydGljbGUuc3R5bGUud2lkdGggPSBjZW50ZXJEaWFtZXRlciArICJweCI7CisgICAgICAgIHBh
cnRpY2xlLnN0eWxlLmhlaWdodCA9IGNlbnRlckRpYW1ldGVyICsgInB4IjsKKyAgICAgICAgcGFy
dGljbGUuc3R5bGUudG9wID0gdGhpcy5tYXhDZW50ZXJPYmplY3RCbHVyVmFsdWUgKyAicHgiOwor
ICAgICAgICBwYXJ0aWNsZS5zdHlsZS5sZWZ0ID0gdGhpcy5tYXhDZW50ZXJPYmplY3RCbHVyVmFs
dWUgKyAicHgiOworCisgICAgICAgIHZhciBibHVyID0gdGhpcy5nZXRCbHVyVmFsdWUodGhpcy5j
ZW50ZXJPYmplY3REZXB0aCwgdHJ1ZSk7CiAgICAgICAgIFV0aWxpdGllcy5zZXRFbGVtZW50UHJl
Zml4ZWRQcm9wZXJ0eSh0aGlzLl9jZW50ZXJFbGVtZW50LCAiZmlsdGVyIiwgImJsdXIoIiArIGJs
dXIgKyAicHgpIik7CiAgICAgfSwKIAogICAgIGNvbXBsZXhpdHk6IGZ1bmN0aW9uKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiAxICsgdGhpcy5fdGVzdEVsZW1lbnRzLmxlbmd0aDsKKyAgICAgICAg
cmV0dXJuIDEgKyB0aGlzLl9vZmZzZXRJbmRleDsKICAgICB9LAogCiAgICAgdHVuZTogZnVuY3Rp
b24oY291bnQpCkBAIC04Nyw1NSArMTA5LDUzIEBAIHZhciBGb2N1c1N0YWdlID0gVXRpbGl0aWVz
LmNyZWF0ZVN1YmNsYXNzKFN0YWdlLAogICAgICAgICBpZiAoY291bnQgPT0gMCkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBpZiAoY291bnQgPiAwKSB7Ci0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgb2JqID0g
bmV3IEZvY3VzRWxlbWVudCh0aGlzKTsKLSAgICAgICAgICAgICAgICB0aGlzLl90ZXN0RWxlbWVu
dHMucHVzaChvYmopOwotICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChv
YmouZWxlbWVudCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChjb3VudCA8IDApIHsKKyAg
ICAgICAgICAgIHRoaXMuX29mZnNldEluZGV4ID0gTWF0aC5tYXgoMCwgdGhpcy5fb2Zmc2V0SW5k
ZXggKyBjb3VudCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fb2Zmc2V0SW5kZXg7
IGkgPCB0aGlzLl90ZXN0RWxlbWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgdGhp
cy5fdGVzdEVsZW1lbnRzW2ldLmhpZGUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIHdoaWxlIChjb3VudCA8IDApIHsKLSAgICAgICAgICAgIHZhciBvYmogPSB0
aGlzLl90ZXN0RWxlbWVudHMuc2hpZnQoKTsKLSAgICAgICAgICAgIGlmICghb2JqKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxk
KG9iai5lbGVtZW50KTsKLSAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIHZhciBuZXdJbmRl
eCA9IHRoaXMuX29mZnNldEluZGV4ICsgY291bnQ7CisgICAgICAgIGlmIChuZXdJbmRleCA+IHRo
aXMuX3Rlc3RFbGVtZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlz
Ll90ZXN0RWxlbWVudHMubGVuZ3RoOyBpIDwgbmV3SW5kZXg7ICsraSkgeworICAgICAgICAgICAg
ICAgIHZhciBvYmogPSBuZXcgRm9jdXNFbGVtZW50KHRoaXMpOworICAgICAgICAgICAgICAgIHRo
aXMuX3Rlc3RFbGVtZW50cy5wdXNoKG9iaik7CisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50
LmFwcGVuZENoaWxkKG9iai5jb250YWluZXIpOworICAgICAgICAgICAgfQogICAgICAgICB9Cisg
ICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9vZmZzZXRJbmRleDsgaSA8IG5ld0luZGV4OyArK2kp
CisgICAgICAgICAgICB0aGlzLl90ZXN0RWxlbWVudHNbaV0uc2hvdygpOworICAgICAgICB0aGlz
Ll9vZmZzZXRJbmRleCA9IG5ld0luZGV4OwogICAgIH0sCiAKICAgICBhbmltYXRlOiBmdW5jdGlv
bigpCiAgICAgewogICAgICAgICB2YXIgdGltZSA9IHRoaXMuX2JlbmNobWFyay50aW1lc3RhbXA7
Ci0gICAgICAgIHZhciBzaW5UaW1lID0gTWF0aC5zaW4odGltZSAvIHRoaXMubW92ZW1lbnREdXJh
dGlvbik7Ci0gICAgICAgIHZhciBjb3NUaW1lID0gTWF0aC5jb3ModGltZSAvIHRoaXMubW92ZW1l
bnREdXJhdGlvbik7CisgICAgICAgIHZhciBzaW5GYWN0b3IgPSBNYXRoLnNpbih0aW1lIC8gdGhp
cy5tb3ZlbWVudER1cmF0aW9uKSAqIHRyYXZlbERpc3RhbmNlOworICAgICAgICB2YXIgY29zRmFj
dG9yID0gTWF0aC5jb3ModGltZSAvIHRoaXMubW92ZW1lbnREdXJhdGlvbikgKiB0cmF2ZWxEaXN0
YW5jZTsKIAotICAgICAgICB2YXIgZm9jdXNQcm9ncmVzcyA9IFV0aWxpdGllcy5wcm9ncmVzc1Zh
bHVlKE1hdGguc2luKHRpbWUgLyB0aGlzLmZvY3VzRHVyYXRpb24pLCAtMSwgMSk7CisgICAgICAg
IHZhciBmb2N1c1Byb2dyZXNzID0gLjUgKyAuNSAqIE1hdGguc2luKHRpbWUgLyB0aGlzLmZvY3Vz
RHVyYXRpb24pOwogICAgICAgICB0aGlzLl9mb2NhbFBvaW50ID0gZm9jdXNQcm9ncmVzczsKIAog
ICAgICAgICAvLyB1cGRhdGUgY2VudGVyIGVsZW1lbnQgYmVmb3JlIGxvb3AKICAgICAgICAgVXRp
bGl0aWVzLnNldEVsZW1lbnRQcmVmaXhlZFByb3BlcnR5KHRoaXMuX2NlbnRlckVsZW1lbnQsICJm
aWx0ZXIiLCAiYmx1cigiICsgdGhpcy5nZXRCbHVyVmFsdWUodGhpcy5jZW50ZXJPYmplY3REZXB0
aCwgdHJ1ZSkgKyAicHgpIik7CiAKLSAgICAgICAgdGhpcy5fdGVzdEVsZW1lbnRzLmZvckVhY2go
ZnVuY3Rpb24oZWxlbWVudCkgewotICAgICAgICAgICAgZWxlbWVudC5hbmltYXRlKHRoaXMsIHNp
blRpbWUsIGNvc1RpbWUpOwotICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLl9vZmZzZXRJbmRleDsgKytpKQorICAgICAgICAgICAgdGhpcy5fdGVzdEVs
ZW1lbnRzW2ldLmFuaW1hdGUodGhpcywgc2luRmFjdG9yLCBjb3NGYWN0b3IpOwogICAgIH0sCiAK
ICAgICBnZXRCbHVyVmFsdWU6IGZ1bmN0aW9uKGRlcHRoLCBpc0NlbnRlcikKICAgICB7Ci0gICAg
ICAgIHZhciB2YWx1ZSA9IE1hdGguYWJzKGRlcHRoIC0gdGhpcy5fZm9jYWxQb2ludCk7Ci0KICAg
ICAgICAgaWYgKGlzQ2VudGVyKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF4Q2VudGVyT2Jq
ZWN0Qmx1clZhbHVlICogdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gMSArIE1hdGguYWJzKGRl
cHRoIC0gdGhpcy5fZm9jYWxQb2ludCkgKiAodGhpcy5tYXhDZW50ZXJPYmplY3RCbHVyVmFsdWUg
LSAxKTsKIAotICAgICAgICByZXR1cm4gVXRpbGl0aWVzLmxlcnAodmFsdWUsIHRoaXMubWluQmx1
clZhbHVlLCB0aGlzLm1heEJsdXJWYWx1ZSk7CisgICAgICAgIHJldHVybiBVdGlsaXRpZXMubGVy
cChNYXRoLmFicyhkZXB0aCAtIHRoaXMuX2ZvY2FsUG9pbnQpLCB0aGlzLm1pbkJsdXJWYWx1ZSwg
dGhpcy5tYXhCbHVyVmFsdWUpOwogICAgIH0sCiAKICAgICBnZXRPcGFjaXR5VmFsdWU6IGZ1bmN0
aW9uKGRlcHRoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wYWNpdHlNdWx0aXBsaWVyICogKDEg
LSBNYXRoLmFicyhkZXB0aCAtIHRoaXMuX2ZvY2FsUG9pbnQpKTsKKyAgICAgICAgcmV0dXJuIE1h
dGgubWF4KDEsIG9wYWNpdHlNdWx0aXBsaWVyICogKDEgLSBNYXRoLmFicyhkZXB0aCAtIHRoaXMu
X2ZvY2FsUG9pbnQpKSk7CiAgICAgfSwKIH0pOwogCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9tdWx0aXBseS5qcyBiL1BlcmZv
cm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL211bHRpcGx5Lmpz
CmluZGV4IDdiY2ZiMDIuLjc0NzhlOWEgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5p
bW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL211bHRpcGx5LmpzCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL211bHRpcGx5LmpzCkBA
IC0yMSw4ICsyMSw4IEBAIHZhciBNdWx0aXBseVN0YWdlID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNs
YXNzKFN0YWdlLAogICAgICAgICB2YXIgc3BpcmFsQ291bnRlciA9IDI7CiAgICAgICAgIHZhciBu
ZXh0SW5kZXggPSAxOwogICAgICAgICB2YXIgbWF4U2lkZSA9IE1hdGguZmxvb3IoeSAvIHRpbGVT
dHJpZGUpICogMiArIDE7Ci0gICAgICAgIHZhciBjZW50ZXJTcGlyYWxDb3VudCA9IG1heFNpZGUg
KiBtYXhTaWRlOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbnRlclNwaXJhbENvdW50
OyArK2kpIHsKKyAgICAgICAgdGhpcy5fY2VudGVyU3BpcmFsQ291bnQgPSBtYXhTaWRlICogbWF4
U2lkZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jZW50ZXJTcGlyYWxDb3Vu
dDsgKytpKSB7CiAgICAgICAgICAgICB0aGlzLl9hZGRUaWxlKHgsIHksIHRpbGVTaXplLCBpICUg
MzYwKTsKIAogICAgICAgICAgICAgaWYgKGkgPT0gbmV4dEluZGV4KSB7CkBAIC00MCw4ICs0MCw4
IEBAIHZhciBNdWx0aXBseVN0YWdlID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKFN0YWdlLAog
ICAgICAgICAgICAgICAgIHkgKz0gdGlsZVN0cmlkZTsKICAgICAgICAgfQogCi0gICAgICAgIGNl
bnRlclNwaXJhbENvdW50ID0gbWF4U2lkZSAqIE1hdGguZmxvb3IoKHRoaXMuc2l6ZS53aWR0aCAt
IHgpIC8gdGlsZVN0cmlkZSkgKiAyOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbnRl
clNwaXJhbENvdW50OyArK2kpIHsKKyAgICAgICAgdGhpcy5fc2lkZVBhbmVsQ291bnQgPSBtYXhT
aWRlICogTWF0aC5mbG9vcigodGhpcy5zaXplLndpZHRoIC0geCkgLyB0aWxlU3RyaWRlKSAqIDI7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2lkZVBhbmVsQ291bnQ7ICsraSkg
ewogICAgICAgICAgICAgdmFyIHNpZGVYID0geCArIE1hdGguZmxvb3IoTWF0aC5mbG9vcihpIC8g
bWF4U2lkZSkgLyAyKSAqIHRpbGVTdHJpZGU7CiAgICAgICAgICAgICB2YXIgc2lkZVkgPSB5IC0g
dGlsZVN0cmlkZSAqIChpICUgbWF4U2lkZSk7CiAKQEAgLTYxLDcgKzYxLDcgQEAgdmFyIE11bHRp
cGx5U3RhZ2UgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoU3RhZ2UsCiAgICAgICAgIHRpbGUu
c3R5bGUuaGVpZ2h0ID0gdGlsZVNpemUgKyAncHgnOwogICAgICAgICB0aWxlLnN0eWxlLnZpc2li
aWxpdHkgPSAiaGlkZGVuIjsKIAotICAgICAgICB2YXIgZGlzdGFuY2UgPSAxLjMgLyB0aWxlU2l6
ZSAqIHRoaXMuc2l6ZS5tdWx0aXBseSgwLjUpLnN1YnRyYWN0KG5ldyBQb2ludCh4ICsgaGFsZlRp
bGVTaXplLCB5ICsgaGFsZlRpbGVTaXplKSkubGVuZ3RoKCk7CisgICAgICAgIHZhciBkaXN0YW5j
ZSA9IDEgLyB0aWxlU2l6ZSAqIHRoaXMuc2l6ZS5tdWx0aXBseSgwLjUpLnN1YnRyYWN0KG5ldyBQ
b2ludCh4ICsgaGFsZlRpbGVTaXplLCB5ICsgaGFsZlRpbGVTaXplKSkubGVuZ3RoKCk7CiAKICAg
ICAgICAgdGhpcy50aWxlcy5wdXNoKHsKICAgICAgICAgICAgIGVsZW1lbnQ6IHRpbGUsCkBAIC04
MCwxMiArODAsMTEgQEAgdmFyIE11bHRpcGx5U3RhZ2UgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xh
c3MoU3RhZ2UsCiAgICAgdHVuZTogZnVuY3Rpb24oY291bnQpCiAgICAgewogICAgICAgICB0aGlz
Ll9vZmZzZXRJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMuX29mZnNldEluZGV4ICsg
Y291bnQsIHRoaXMudGlsZXMubGVuZ3RoKSk7CisgICAgICAgIHRoaXMuX2Rpc3RhbmNlRmFjdG9y
ID0gMS41ICogKDEgLSAuNSAqIE1hdGgubWF4KHRoaXMuX29mZnNldEluZGV4IC0gdGhpcy5fY2Vu
dGVyU3BpcmFsQ291bnQsIDApIC8gdGhpcy5fc2lkZVBhbmVsQ291bnQpIC8gTWF0aC5zcXJ0KHRo
aXMuX29mZnNldEluZGV4KTsKICAgICB9LAogCiAgICAgYW5pbWF0ZTogZnVuY3Rpb24oKQogICAg
IHsKLSAgICAgICAgdmFyIGRpc3RhbmNlRmFjdG9yID0gMSAvIE1hdGguc3FydCh0aGlzLl9vZmZz
ZXRJbmRleCk7Ci0KICAgICAgICAgdmFyIHByb2dyZXNzID0gdGhpcy5fYmVuY2htYXJrLnRpbWVz
dGFtcCAlIDEwMDAwIC8gMTAwMDA7CiAgICAgICAgIHZhciBib3VuY2VQcm9ncmVzcyA9IE1hdGgu
c2luKDIgKiBNYXRoLmFicyggMC41IC0gcHJvZ3Jlc3MpKTsKICAgICAgICAgdmFyIGwgPSBVdGls
aXRpZXMubGVycChib3VuY2VQcm9ncmVzcywgMjAsIDUwKTsKQEAgLTk4LDcgKzk3LDcgQEAgdmFy
IE11bHRpcGx5U3RhZ2UgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoU3RhZ2UsCiAgICAgICAg
ICAgICB0aWxlLnJvdGF0ZSArPSB0aWxlLnN0ZXA7CiAgICAgICAgICAgICB0aWxlLmVsZW1lbnQu
c3R5bGUudHJhbnNmb3JtID0gInJvdGF0ZSgiICsgdGlsZS5yb3RhdGUgKyAiZGVnKSI7CiAKLSAg
ICAgICAgICAgIHZhciBpbmZsdWVuY2UgPSAxIC0gKHRpbGUuZGlzdGFuY2UgKiBkaXN0YW5jZUZh
Y3Rvcik7CisgICAgICAgICAgICB2YXIgaW5mbHVlbmNlID0gMSAtICh0aWxlLmRpc3RhbmNlICog
dGhpcy5fZGlzdGFuY2VGYWN0b3IpOwogICAgICAgICAgICAgdGlsZS5lbGVtZW50LnN0eWxlLmJh
Y2tncm91bmRDb2xvciA9IGhzbFByZWZpeCArIGwgKiBNYXRoLnRhbihpbmZsdWVuY2UgLyAxLjI1
KSArICIlLCIgKyBpbmZsdWVuY2UgKyAiKSI7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwppbmRl
eCBlYTA2MjFhLi40MDc0NWFhIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxv
ZworKysgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDM1IEBACiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgSW1wcm92ZSB0ZXN0
cy4KKworICAgICAgICAqIEFuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL2ZvY3VzLmh0bWw6IE1vdmUg
ZWFjaCBwYXJ0aWNsZSBpbnRvIGEgbGF5ZXIuIFB1dCB0aGUgcGFydGljbGUKKyAgICAgICAgaW4g
YSBjb250YWluZXIgZWxlbWVudC4gRXhwYW5kIHRoZSBjb250YWluZXIgZWxlbWVudCBieSB0aGUg
bWF4IGJsdXIgcmFkaXVzLCBhbmQgY2xpcAorICAgICAgICBvdmVyZmxvdy4gVGhpcyB3YXksIHdo
ZW4gdGhlIGJsdXIgaXMgYXBwbGllZCwgaXQgYXZvaWQgY2F1c2luZyBsYXllciByZXNpemVzLgor
ICAgICAgICAqIEFuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9mb2N1cy5qczoKKyAg
ICAgICAgKEZvY3VzRWxlbWVudC5VdGlsaXRpZXMuY3JlYXRlQ2xhc3MpOiBDcmVhdGUgYSBjb250
YWluZXIgZWxlbWVudCwgYW5kIHB1dCB0aGUgcGFydGljbGUKKyAgICAgICAgaW5zaWRlLgorICAg
ICAgICAoaGlkZSk6IFNldCBkaXNwbGF5Om5vbmUuCisgICAgICAgIChzaG93KTogU2V0IGRpc3Bs
YXk6YmxvY2suCisgICAgICAgIChhbmltYXRlKTogQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGFp
bmVyIGVsZW1lbnQuCisgICAgICAgIChGb2N1c1N0YWdlLmNhbGwuaW5pdGlhbGl6ZSk6IEluc3Rl
YWQgb2YgaW5zZXJ0aW5nIGFuZCByZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBET00sCisgICAg
ICAgIGtlZXAgdGhlbSBpbiB0aGUgc3RhZ2UsIGJ1dCBzZXQgdGhlIGRpc3BsYXkgc3R5bGUgaW5z
dGVhZC4gVXNlIHRoaXMuX29mZnNldEluZGV4IHRvCisgICAgICAgIGtlZXAgdHJhY2sgb2Ygd2hp
Y2ggZWxlbWVudHMgYXJlIGRpc3BsYXllZC4KKyAgICAgICAgKEZvY3VzU3RhZ2UuY2FsbC5hbmlt
YXRlKTogTW92ZSBzb21lIGNhbGN1bGF0aW9ucyBhcm91bmQgdG8gYXZvaWQgZG9pbmcgdW5uZWVk
ZWQgbWF0aC4KKyAgICAgICAgKEZvY3VzU3RhZ2UuY2FsbC5nZXRCbHVyVmFsdWUpOiBNYWtlIHN1
cmUgZWxlbWVudHMgYXJlIGFsd2F5cyBibHVycmVkLgorICAgICAgICAoRm9jdXNTdGFnZS5jYWxs
LmdldE9wYWNpdHlWYWx1ZSk6IE1ha2Ugc3VyZSBlbGVtZW50cyBoYXZlIHNvbWUgb3BhY2l0eS4K
KyAgICAgICAgKiBBbmltb21ldGVyL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvbXVsdGlwbHkuanM6
IEhhdmUgdGhlIHBhcnRpY2xlcyBvbiB0aGUgZWRnZSBvZiB0aGUKKyAgICAgICAgc3RhZ2UgYXBw
ZWFyIGxlc3MgYmxhY2sgd2hlbiB0aGUgY29tcGxleGl0eSBnZXRzIGxhcmdlIGVub3VnaC4KKyAg
ICAgICAgKHR1bmUpOiBIYXZlIHRoaXMuX2Rpc3RhbmNlRmFjdG9yIGNhbGN1bGF0ZSB0aGUgZmFj
dG9yLiBBdm9pZCBjYWxjdWxhdGluZyBzcXVhcmUgcm9vdCBlYWNoCisgICAgICAgIGZyYW1lLgor
CisyMDE2LTAzLTAyICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQg
c29tZSBuZXcgY29udHJvbGxlcnMsIGFuZCByZWZpbmUgdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDkxNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEFkZCBhIGNvbnRyb2xsZXIgdGhhdCBjZW50
ZXJzIGFyb3VuZCAzMCBmcHMgaW5zdGVhZCBvZiA2MCBmcHMuCiAKICAgICAgICAgKiBBbmltb21l
dGVyL2RldmVsb3Blci5odG1sOiBBZGQgYSBuZXcgb3B0aW9uLgotLSAKMi42LjQgKEFwcGxlIEdp
dC02MykKCg==
</data>
<flag name="review"
          id="297412"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>