<?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>84220</bug_id>
          
          <creation_ts>2012-04-17 17:56:12 -0700</creation_ts>
          <short_desc>Implement object-literal constructor for Intent object</short_desc>
          <delta_ts>2012-04-25 17:28:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>75123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Greg Billock">gbillock</reporter>
          <assigned_to name="Greg Billock">gbillock</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>haraken</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>604532</commentid>
    <comment_count>0</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-17 17:56:12 -0700</bug_when>
    <thetext>Implement object-literal constructor for Intent object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604535</commentid>
    <comment_count>1</comment_count>
      <attachid>137644</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-17 17:59:43 -0700</bug_when>
    <thetext>Created attachment 137644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604538</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-17 18:02:41 -0700</bug_when>
    <thetext>Attachment 137644 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604541</commentid>
    <comment_count>3</comment_count>
      <attachid>137644</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-17 18:16:25 -0700</bug_when>
    <thetext>Comment on attachment 137644
Patch

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

Before looking into more details, maybe we want to confirm that the code works as expected (i.e. want test cases).

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        No new tests. (OOPS!)
&gt; 
&gt; You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]

Please add test cases in fast/events/constructors/. (Please look at other tests in that directory.)

&gt; Source/WebCore/ChangeLog:17
&gt; +        * Modules/intents/DeliveredIntent.h: Copied from Source/WebCore/Modules/intents/Intent.h.
&gt; +        (WebCore):
&gt; +        (DeliveredIntentClient):
&gt; +        (WebCore::DeliveredIntentClient::~DeliveredIntentClient):
&gt; +        (WebCore::DeliveredIntentClient::postResult):
&gt; +        (WebCore::DeliveredIntentClient::postFailure):
&gt; +        (DeliveredIntent):
&gt; +        (WebCore::DeliveredIntent::~DeliveredIntent):

This ChangeLog seems wrong.

&gt; Source/WebCore/bindings/v8/Dictionary.cpp:422
&gt; +    v8::Local&lt;v8::Value&gt; v8Value;
&gt; +    if (!getKey(key, v8Value))
&gt; +        return false;
&gt; +
&gt; +    if (v8Value-&gt;IsObject())
&gt; +        value = Dictionary(v8Value);

I am not sure if this implementation is correct. Could you add test cases as I mentioned above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604800</commentid>
    <comment_count>4</comment_count>
      <attachid>137705</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-18 09:16:11 -0700</bug_when>
    <thetext>Created attachment 137705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604817</commentid>
    <comment_count>5</comment_count>
      <attachid>137707</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-18 09:33:38 -0700</bug_when>
    <thetext>Created attachment 137707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604819</commentid>
    <comment_count>6</comment_count>
      <attachid>137705</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-18 09:34:47 -0700</bug_when>
    <thetext>Comment on attachment 137705
Patch

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

We need more comprehensive test cases (before discussing details). Making the test cases work correctly would be the fastest way to make the patch correct, rather than discussing the maybe-wrong code.

- You need to add fast/events/constructors/web-intents-constructor.html. The test should cover almost all possible constructor patterns. Please look at fast/events/constructors/message-event-constructor.html. Also please add test cases for each exception that the constructor can throw (I know that some exceptions are difficult to test. Then you can skip them).

- web-intents-obj-constructor.html should cover more use cases of WebKitIntent.

&gt; Source/WebCore/ChangeLog:9
&gt; +        Implement object-literal constructor for Intent object. This will
&gt; +        hopefully be temporary, as we&apos;ll convert to just using this constructor,
&gt; +        which can then use codegen.
&gt; +        Added layout tests for object constructor:
&gt; +        webintents/web-intent-obj-constructor.html
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=84220

Please follow the ChangeLog convention:

1. Title
2. Bug link
3. Reviewed by
4. Description
5. Tests

&gt; LayoutTests/webintents/web-intents-api-expected.txt:3
&gt; +PASS new WebKitIntent(&apos;a&apos;) threw exception Error: SYNTAX_ERR: DOM Exception 12.

This would be wrong. The previous test result seems correct.

&gt; LayoutTests/webintents/web-intents-api.html:-11
&gt; -      shouldThrow(&quot;new WebKitIntent(&apos;a&apos;)&quot;, &quot;&apos;TypeError: Not enough arguments&apos;&quot;);

Ditto.

&gt; LayoutTests/webintents/web-intents-obj-constructor.html:17
&gt; +&lt;input type=&quot;button&quot; id=&quot;button&quot; value=&quot;Start Web Intent&quot; onmouseup=&quot;buttonClicked()&quot;&gt;

We do not need to click a button to run this test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604820</commentid>
    <comment_count>7</comment_count>
      <attachid>137707</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-18 09:35:29 -0700</bug_when>
    <thetext>Comment on attachment 137707
Patch

Marking r- due to the previous comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604821</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-18 09:36:42 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604890</commentid>
    <comment_count>9</comment_count>
      <attachid>137705</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-18 10:58:32 -0700</bug_when>
    <thetext>Comment on attachment 137705
Patch

Attachment 137705 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12423911</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605225</commentid>
    <comment_count>10</comment_count>
      <attachid>137705</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-18 16:54:57 -0700</bug_when>
    <thetext>Comment on attachment 137705
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=84220
&gt; 
&gt; Please follow the ChangeLog convention:
&gt; 
&gt; 1. Title
&gt; 2. Bug link
&gt; 3. Reviewed by
&gt; 4. Description
&gt; 5. Tests

Done.

&gt;&gt; LayoutTests/webintents/web-intents-api-expected.txt:3
&gt;&gt; +PASS new WebKitIntent(&apos;a&apos;) threw exception Error: SYNTAX_ERR: DOM Exception 12.
&gt; 
&gt; This would be wrong. The previous test result seems correct.

The new constructor is single-arg (the object-literal). &apos;a&apos; isn&apos;t a dictionary, so it errors out. I&apos;m using EXCEPTION_BLOCK on this, which perhaps ought to throw a type mismatch error? Anyway, this is just stock behavior I believe.

&gt; LayoutTests/webintents/web-intents-obj-constructor.html:1
&gt; +&lt;html&gt;

I put the constructor here rather than with the other constructors since there&apos;s already the right exclusions in platforms for LayoutTests/webintents. The other constructor form is tested in web-intents-api.html

&gt;&gt; LayoutTests/webintents/web-intents-obj-constructor.html:17
&gt;&gt; +&lt;input type=&quot;button&quot; id=&quot;button&quot; value=&quot;Start Web Intent&quot; onmouseup=&quot;buttonClicked()&quot;&gt;
&gt; 
&gt; We do not need to click a button to run this test.

A user gesture is required for webkitStartActivity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605229</commentid>
    <comment_count>11</comment_count>
      <attachid>137804</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-18 16:58:26 -0700</bug_when>
    <thetext>Created attachment 137804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605275</commentid>
    <comment_count>12</comment_count>
      <attachid>137812</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-18 18:20:12 -0700</bug_when>
    <thetext>Created attachment 137812
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605276</commentid>
    <comment_count>13</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-18 18:21:11 -0700</bug_when>
    <thetext>Added extras translation and more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605294</commentid>
    <comment_count>14</comment_count>
      <attachid>137812</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-18 19:16:38 -0700</bug_when>
    <thetext>Comment on attachment 137812
Patch

Attachment 137812 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12441074</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606068</commentid>
    <comment_count>15</comment_count>
      <attachid>137812</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-19 16:02:05 -0700</bug_when>
    <thetext>Comment on attachment 137812
Patch

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

Please add more test cases. As commented below, we need to confirm the behavior when we pass various parameters to the Intent constructor. (Please look at existing tests in fast/events/constructors/.)

&gt; Source/WebCore/Modules/intents/Intent.cpp:67
&gt; +    String action;
&gt; +    bool actionExists = parameters.getWithUndefinedOrNullCheck(&quot;action&quot;, action);
&gt; +    String type;
&gt; +    bool typeExists = parameters.getWithUndefinedOrNullCheck(&quot;type&quot;, type);
&gt; +    String service;
&gt; +    parameters.get(&quot;service&quot;, service);

Is this behavior speced? (i.e. what should happen when we pass null or undefined?)
 
Anyway please add test cases for all possible parameters.

&gt; Source/WebCore/Modules/intents/Intent.cpp:71
&gt; +    if (!actionExists || action.isEmpty()) {
&gt;          ec = SYNTAX_ERR;
&gt;          return 0;

Ditto.

&gt; Source/WebCore/Modules/intents/Intent.cpp:75
&gt; +    if (!typeExists || type.isEmpty()) {
&gt;          ec = SYNTAX_ERR;
&gt;          return 0;

Ditto.

&gt; Source/WebCore/Modules/intents/Intent.idl:31
&gt; +      Constructor(in Dictionary parameters),

Remove this. This IDL attribute makes no sense under [CustomConstructor].

&gt; Source/WebCore/bindings/v8/Dictionary.cpp:101
&gt; -    if (!options-&gt;Has(v8Key))
&gt; +    if (!options-&gt;Has(v8Key-&gt;ToString()))

What is the rational for this change?

&gt; Source/WebCore/bindings/v8/Dictionary.cpp:437
&gt; +      if (key.IsEmpty() || !key-&gt;Length() || !wrapper-&gt;Has(key))

Can&apos;t this be just &apos;if (!wrapper-&gt;Has(key))&apos;?

&gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:86
&gt; +    if (ec)
&gt; +        return throwError(ec);

Nit: Move these two lines to just below &apos;RefPtr&lt;Intent&gt; impl = ...&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606250</commentid>
    <comment_count>16</comment_count>
      <attachid>138017</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-19 18:05:29 -0700</bug_when>
    <thetext>Created attachment 138017
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606255</commentid>
    <comment_count>17</comment_count>
      <attachid>138020</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-19 18:12:19 -0700</bug_when>
    <thetext>Created attachment 138020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606258</commentid>
    <comment_count>18</comment_count>
      <attachid>137812</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-19 18:13:26 -0700</bug_when>
    <thetext>Comment on attachment 137812
Patch

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

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:67
&gt;&gt; +    parameters.get(&quot;service&quot;, service);
&gt; 
&gt; Is this behavior speced? (i.e. what should happen when we pass null or undefined?)
&gt; 
&gt; Anyway please add test cases for all possible parameters.

The only missing one now in the test is &quot;transfer&quot;. I&apos;ve got that working now. It&apos;s fairly nasty, though, since by the time I get the data in the Dictionary, there&apos;s no straightforward way to run the v8-side code to extract transferables. I will likely punt for now and only support MessagePortArray.

For &quot;service&quot;, if the field is present at all, we interpret the intent as explicit, so this is a bug (I need checks to verify that.) BTW, is there any way to do better signaling of the error? Can I pass back an error string to help users out? DOM Error 12 is pretty unpromising as an error message. :-(

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:71
&gt;&gt;          return 0;
&gt; 
&gt; Ditto.

Yes, this is speced -- at present, you can&apos;t legally invoke an intent without action/type.

&gt;&gt; Source/WebCore/Modules/intents/Intent.idl:31
&gt;&gt; +      Constructor(in Dictionary parameters),
&gt; 
&gt; Remove this. This IDL attribute makes no sense under [CustomConstructor].

Should I get rid of the other one, too?

&gt;&gt; Source/WebCore/bindings/v8/Dictionary.cpp:101
&gt;&gt; +    if (!options-&gt;Has(v8Key-&gt;ToString()))
&gt; 
&gt; What is the rational for this change?

Oh, drat. I think I changed this in error while editing this file.

&gt;&gt; Source/WebCore/bindings/v8/Dictionary.cpp:437
&gt;&gt; +      if (key.IsEmpty() || !key-&gt;Length() || !wrapper-&gt;Has(key))
&gt; 
&gt; Can&apos;t this be just &apos;if (!wrapper-&gt;Has(key))&apos;?

Done.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:86
&gt;&gt; +        return throwError(ec);
&gt; 
&gt; Nit: Move these two lines to just below &apos;RefPtr&lt;Intent&gt; impl = ...&apos;.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606277</commentid>
    <comment_count>19</comment_count>
      <attachid>138020</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-19 18:43:06 -0700</bug_when>
    <thetext>Comment on attachment 138020
Patch

Attachment 138020 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12479044</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606604</commentid>
    <comment_count>20</comment_count>
      <attachid>138102</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-20 09:04:01 -0700</bug_when>
    <thetext>Created attachment 138102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606640</commentid>
    <comment_count>21</comment_count>
      <attachid>138102</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-20 09:36:27 -0700</bug_when>
    <thetext>Comment on attachment 138102
Patch

Attachment 138102 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12476198</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606684</commentid>
    <comment_count>22</comment_count>
      <attachid>138116</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-20 10:37:02 -0700</bug_when>
    <thetext>Created attachment 138116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607126</commentid>
    <comment_count>23</comment_count>
      <attachid>138116</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-20 18:42:14 -0700</bug_when>
    <thetext>Comment on attachment 138116
Patch

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

&gt; Source/WebCore/Modules/intents/Intent.cpp:98
&gt; +    if (dataExists) {
&gt; +      bool didThrow = false;
&gt; +      serializedData = dataValue.serialize(scriptState, &amp;ports, 0, didThrow);
&gt; +      if (didThrow) {
&gt; +          ec = DATA_CLONE_ERR;
&gt; +          return 0;
&gt; +      }
&gt; +    }

Wrong indentation

&gt; Source/WebCore/bindings/v8/Dictionary.cpp:445
&gt; +    for (uint32_t i = 0; i &lt; properties-&gt;Length(); ++i) {
&gt; +      v8::Local&lt;v8::String&gt; key = properties-&gt;Get(i)-&gt;ToString();
&gt; +      if (!wrapper-&gt;Has(key))
&gt; +          continue;
&gt; +
&gt; +      v8::Local&lt;v8::Value&gt; value = wrapper-&gt;Get(key);
&gt; +      String stringKey = v8ValueToWebCoreString(key);
&gt; +      String stringValue = v8ValueToWebCoreString(value);
&gt; +      if (!stringKey.isEmpty())
&gt; +          hashMap.set(stringKey, stringValue);
&gt; +    }

Wrong indentation.

&gt; Source/WebKit/chromium/public/WebIntent.h:68
&gt; +    WEBKIT_EXPORT WebString extrasValue(const WebString&amp;) const;

We should explain what is the argument and what&apos;s returned if the argument is not good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607724</commentid>
    <comment_count>24</comment_count>
      <attachid>138116</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-23 08:56:42 -0700</bug_when>
    <thetext>Comment on attachment 138116
Patch

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

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:98
&gt;&gt; +    }
&gt; 
&gt; Wrong indentation

Done.

&gt;&gt; Source/WebCore/bindings/v8/Dictionary.cpp:445
&gt;&gt; +    }
&gt; 
&gt; Wrong indentation.

Done.

&gt;&gt; Source/WebKit/chromium/public/WebIntent.h:68
&gt;&gt; +    WEBKIT_EXPORT WebString extrasValue(const WebString&amp;) const;
&gt; 
&gt; We should explain what is the argument and what&apos;s returned if the argument is not good.

Added comments. The intended usage is to call extrasNames() and then iterate through the names getting the values. (There&apos;s no &quot;WebHashMap&quot; or I&apos;d have used that.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607738</commentid>
    <comment_count>25</comment_count>
      <attachid>138360</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-23 09:14:22 -0700</bug_when>
    <thetext>Created attachment 138360
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607835</commentid>
    <comment_count>26</comment_count>
      <attachid>138360</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-23 10:51:54 -0700</bug_when>
    <thetext>Comment on attachment 138360
Patch

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

First round of comments.

&gt; Source/WebCore/Modules/intents/Intent.cpp:63
&gt; +    bool actionExists = parameters.getWithUndefinedOrNullCheck(&quot;action&quot;, action);

Why do you use getWithUndefinedOrNullCheck() for action and type, but use get() for service? Is it speced?

&gt; Source/WebCore/Modules/intents/Intent.cpp:68
&gt; +    if (parameters.get(&quot;service&quot;, service)
&gt; +        &amp;&amp; (service.isNull() || service.isEmpty())) {

This condition (&apos;service.isNull() || service.isEmpty()&apos;) sounds strange. Is it speced? We need to take case how Empty, Null and Undefined should be treated. Also please add test cases for Empty, Null and Undefined.

Nit: No line break please.

&gt; Source/WebCore/Modules/intents/Intent.cpp:73
&gt; +    if (!actionExists || action.isEmpty()) {

Nit: actionExists would not be necessary. &apos;if (!paramters.get(&quot;action&quot;, action) || action.isEmpty)&apos;.

&gt; Source/WebCore/Modules/intents/Intent.cpp:77
&gt; +    if (!typeExists || type.isEmpty()) {

Ditto.

&gt; Source/WebCore/Modules/intents/Intent.cpp:85
&gt; +    if (portsExists)

Ditto.

&gt; Source/WebCore/Modules/intents/Intent.cpp:91
&gt; +    if (dataExists) {

Ditto.

&gt; Source/WebCore/Modules/intents/Intent.cpp:95
&gt; +            ec = DATA_CLONE_ERR;

Please add a test case for this exception.

&gt; Source/WebCore/Modules/intents/Intent.cpp:103
&gt; +    if (extrasExists)

Ditto. extrasExists would not be necessary.

&gt; Source/WebCore/Modules/intents/Intent.h:72
&gt; +

Nit: No line break please.

&gt; Source/WebCore/Modules/intents/Intent.h:75
&gt; +

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607905</commentid>
    <comment_count>27</comment_count>
      <attachid>138360</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-23 12:05:34 -0700</bug_when>
    <thetext>Comment on attachment 138360
Patch

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

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:63
&gt;&gt; +    bool actionExists = parameters.getWithUndefinedOrNullCheck(&quot;action&quot;, action);
&gt; 
&gt; Why do you use getWithUndefinedOrNullCheck() for action and type, but use get() for service? Is it speced?

It&apos;s speced that action/type must be present. (Service is optional.)

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:68
&gt;&gt; +        &amp;&amp; (service.isNull() || service.isEmpty())) {
&gt; 
&gt; This condition (&apos;service.isNull() || service.isEmpty()&apos;) sounds strange. Is it speced? We need to take case how Empty, Null and Undefined should be treated. Also please add test cases for Empty, Null and Undefined.
&gt; 
&gt; Nit: No line break please.

If service is present, it&apos;s speced to be a URL, so a null or empty value is a caller error. Is there a way to be more explicit with the message?

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:73
&gt;&gt; +    if (!actionExists || action.isEmpty()) {
&gt; 
&gt; Nit: actionExists would not be necessary. &apos;if (!paramters.get(&quot;action&quot;, action) || action.isEmpty)&apos;.

Done. Much better.

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:77
&gt;&gt; +    if (!typeExists || type.isEmpty()) {
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:85
&gt;&gt; +    if (portsExists)
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:91
&gt;&gt; +    if (dataExists) {
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:95
&gt;&gt; +            ec = DATA_CLONE_ERR;
&gt; 
&gt; Please add a test case for this exception.

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:103
&gt;&gt; +    if (extrasExists)
&gt; 
&gt; Ditto. extrasExists would not be necessary.

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.h:72
&gt;&gt; +
&gt; 
&gt; Nit: No line break please.

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.h:75
&gt;&gt; +
&gt; 
&gt; Ditto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607915</commentid>
    <comment_count>28</comment_count>
      <attachid>138397</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-23 12:17:23 -0700</bug_when>
    <thetext>Created attachment 138397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608250</commentid>
    <comment_count>29</comment_count>
      <attachid>138397</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-23 17:51:02 -0700</bug_when>
    <thetext>Comment on attachment 138397
Patch

LGTM for WebKit API part and DRT part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608469</commentid>
    <comment_count>30</comment_count>
      <attachid>138397</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-24 01:56:15 -0700</bug_when>
    <thetext>Comment on attachment 138397
Patch

Attachment 138397 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12528183</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608748</commentid>
    <comment_count>31</comment_count>
      <attachid>138397</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-24 09:25:06 -0700</bug_when>
    <thetext>Comment on attachment 138397
Patch

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

&gt; Source/WebCore/Modules/intents/Intent.cpp:63
&gt; +    if (!parameters.getWithUndefinedOrNullCheck(&quot;action&quot;, action) || action.isEmpty()) {

&gt; &gt; Why do you use getWithUndefinedOrNullCheck() for action and type, but use get() for service? Is it speced?
&gt; 
&gt; It&apos;s speced that action/type must be present. (Service is optional.)

- &apos;must be present&apos; and &apos;undefined or null&apos; are different things. Please refer to http://www.w3.org/TR/WebIDL/#es-DOMString

{type: undefined} =&gt; present. type is treated as a string &quot;undefined&quot;.
{type: null} =&gt; present. type is treated as a string &quot;null&quot;.
{type: &quot;&quot;} =&gt; present. type is treated as &quot;&quot;.
{} =&gt; not present. type is treated as a null string.

Unless the spec explicitly says that undefined or null should be treated as a null string, we should not use parameters.getUndefinedOrNullCheck().

- I think you do not need to check action.isEmpty() here. Isn&apos;t it the work of Intent::create()?

- As I commented repeatedly, please add test cases for these. Missing type, type = undefined, type = null, type = &quot;&quot;. Same for action, service, extras etc. Please look at other constructor test cases in fast/events/constructors/*. As we have discussed, we often mis-implement the behavior for these corner cases.

&gt; Source/WebCore/Modules/intents/Intent.cpp:69
&gt; +    if (!parameters.getWithUndefinedOrNullCheck(&quot;type&quot;, type) || type.isEmpty()) {

Ditto.

&gt; Source/WebCore/Modules/intents/Intent.cpp:77
&gt; +    if (parameters.get(&quot;service&quot;, service) &amp;&amp; (service.isNull() || service.isEmpty())) {
&gt; +        ec = SYNTAX_ERR;
&gt; +        return 0;

&gt; If service is present, it&apos;s speced to be a URL, so a null or empty value is a caller error. Is there a way to be more explicit with the message?

The check should be service.isEmpty(). String::isNull() returns true if the string is null (i.e. not initialized). String::isEmpty() returns true if the string is null or an empty string. Thus if isEmpty() is true, then isNull() is true.

But I think that the check should be done in Intent::create().

&gt; Source/WebCore/Modules/intents/Intent.cpp:91
&gt; +            ec = DATA_CLONE_ERR;

Please add a test case for this.

&gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:66
&gt; +        return toV8(impl.release(), args.Holder());

I would guess that V8Proxy::toV8() no longer exists (since I removed it:-) Please use setJSWrapperForDOMObject(), just like you are doing below.

&gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:81
&gt; +        return v8::Undefined();

Shouldn&apos;t we return some exception? (I am not sure though.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608861</commentid>
    <comment_count>32</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-24 11:11:41 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 138397 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=138397&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/intents/Intent.cpp:63
&gt; &gt; +    if (!parameters.getWithUndefinedOrNullCheck(&quot;action&quot;, action) || action.isEmpty()) {
&gt; 
&gt; &gt; &gt; Why do you use getWithUndefinedOrNullCheck() for action and type, but use get() for service? Is it speced?
&gt; &gt; 
&gt; &gt; It&apos;s speced that action/type must be present. (Service is optional.)
&gt; 
&gt; - &apos;must be present&apos; and &apos;undefined or null&apos; are different things. Please refer to http://www.w3.org/TR/WebIDL/#es-DOMString
&gt; 
&gt; {type: undefined} =&gt; present. type is treated as a string &quot;undefined&quot;.
&gt; {type: null} =&gt; present. type is treated as a string &quot;null&quot;.
&gt; {type: &quot;&quot;} =&gt; present. type is treated as &quot;&quot;.
&gt; {} =&gt; not present. type is treated as a null string.
&gt; 
&gt; Unless the spec explicitly says that undefined or null should be treated as a null string, we should not use parameters.getUndefinedOrNullCheck().

OK, fixed.
 
&gt; - I think you do not need to check action.isEmpty() here. Isn&apos;t it the work of Intent::create()?

Done.

&gt; - As I commented repeatedly, please add test cases for these. Missing type, type = undefined, type = null, type = &quot;&quot;. Same for action, service, extras etc. Please look at other constructor test cases in fast/events/constructors/*. As we have discussed, we often mis-implement the behavior for these corner cases.

Will do. My intention was to have some of those covered by getUndefinedOrNullCheck, but I&apos;ll add more.
 
&gt; &gt; Source/WebCore/Modules/intents/Intent.cpp:69
&gt; &gt; +    if (!parameters.getWithUndefinedOrNullCheck(&quot;type&quot;, type) || type.isEmpty()) {
&gt; 
&gt; Ditto.

Done.
 
&gt; &gt; Source/WebCore/Modules/intents/Intent.cpp:77
&gt; &gt; +    if (parameters.get(&quot;service&quot;, service) &amp;&amp; (service.isNull() || service.isEmpty())) {
&gt; &gt; +        ec = SYNTAX_ERR;
&gt; &gt; +        return 0;
&gt; 
&gt; &gt; If service is present, it&apos;s speced to be a URL, so a null or empty value is a caller error. Is there a way to be more explicit with the message?
&gt; 
&gt; The check should be service.isEmpty(). String::isNull() returns true if the string is null (i.e. not initialized). String::isEmpty() returns true if the string is null or an empty string. Thus if isEmpty() is true, then isNull() is true.
&gt; 
&gt; But I think that the check should be done in Intent::create().

Done.

&gt; &gt; Source/WebCore/Modules/intents/Intent.cpp:91
&gt; &gt; +            ec = DATA_CLONE_ERR;
&gt; 
&gt; Please add a test case for this.

This is present.
 
&gt; &gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:66
&gt; &gt; +        return toV8(impl.release(), args.Holder());
&gt; 
&gt; I would guess that V8Proxy::toV8() no longer exists (since I removed it:-) Please use setJSWrapperForDOMObject(), just like you are doing below.

Done.

&gt; &gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:81
&gt; &gt; +        return v8::Undefined();
&gt; 
&gt; Shouldn&apos;t we return some exception? (I am not sure though.)

Yes. Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608987</commentid>
    <comment_count>33</comment_count>
      <attachid>138629</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-24 13:27:35 -0700</bug_when>
    <thetext>Created attachment 138629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608990</commentid>
    <comment_count>34</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-24 13:32:10 -0700</bug_when>
    <thetext>I added tons more constructor edge case tests here. I&apos;m a bit unhappy about them WRT to the treatment of &apos;extras&apos;. Right now the semantics are &quot;stringify all own properties into a map&quot;. Would it be nicer if it would detect, say, string or number or array types, and then throw TYPE_ERR? The Dictionary constructor takes arbitrary v8::Value&apos;s, so EXCEPTION_BLOCK basically always works. I think that&apos;s acceptable, but it&apos;d be less surprising to TYPE_ERR on those cases. Is there a good detection routine for such cases?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609480</commentid>
    <comment_count>35</comment_count>
      <attachid>138629</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-24 23:21:35 -0700</bug_when>
    <thetext>Comment on attachment 138629
Patch

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

Almost looks OK except for test cases.

&gt; Source/WebCore/Modules/intents/Intent.cpp:60
&gt; +PassRefPtr&lt;Intent&gt; Intent::create(ScriptState* scriptState, const Dictionary&amp; parameters, ExceptionCode&amp; ec)

Nit: Shall we rename &apos;parameters&apos; to &apos;options&apos;, since you are using &apos;options&apos; in the caller side?

&gt; Source/WebCore/Modules/intents/Intent.cpp:137
&gt; +const KURL&amp; Intent::service() const
&gt; +{
&gt; +    return m_service;
&gt; +}

Nit: you can put this code in the header.

&gt; Source/WebCore/Modules/intents/Intent.cpp:152
&gt; +const WTF::HashMap&lt;String, String&gt;&amp; Intent::extras() const
&gt; +{
&gt; +    return m_extras;
&gt; +}

Nit: you can put this code in the header.

&gt; Source/WebCore/bindings/v8/Dictionary.cpp:432
&gt; +    if (isUndefinedOrNull())
&gt; +        return false;
&gt; +    if (!m_options-&gt;IsObject())

You can write:

    if (!isObject())
        return false;

&gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:67
&gt; +        V8DOMWrapper::setDOMWrapper(args.Holder(), &amp;info, impl.get());

Nit: args.Holder() =&gt; wrapper.

&gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:69
&gt; +        return args.Holder();

Nit: args.Holder() =&gt; wrapper.

&gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:93
&gt; +    return args.Holder();

Nit: args.Holder() =&gt; wrapper.

&gt; LayoutTests/webintents/web-intents-obj-constructor.html:2
&gt; +  &lt;head&gt;

Nit: 4 space indent please. Or no indent is OK. WebKit does not use 2 space indent.

&gt; LayoutTests/webintents/web-intents-obj-constructor.html:32
&gt; +        shouldNotThrow(&quot;new WebKitIntent({&apos;action&apos;:&apos;a&apos;,&apos;type&apos;:&apos;b&apos;})&quot;);

Instead, we might write the test like this:

shouldBeEqualToString(&apos;(new WebKitIntent({&quot;action&quot;:&quot;a&quot;,&quot;type&quot;:&quot;b&quot;})).action&apos;, &apos;a&apos;);
shouldBeEqualToString(&apos;(new WebKitIntent({&quot;action&quot;:&quot;a&quot;,&quot;type&quot;:&quot;b&quot;})).type&apos;, &apos;b&apos;);

The same comment for the following tests. (Though I know the number of tests increases.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609756</commentid>
    <comment_count>36</comment_count>
      <attachid>138629</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-25 08:03:27 -0700</bug_when>
    <thetext>Comment on attachment 138629
Patch

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

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:60
&gt;&gt; +PassRefPtr&lt;Intent&gt; Intent::create(ScriptState* scriptState, const Dictionary&amp; parameters, ExceptionCode&amp; ec)
&gt; 
&gt; Nit: Shall we rename &apos;parameters&apos; to &apos;options&apos;, since you are using &apos;options&apos; in the caller side?

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:137
&gt;&gt; +}
&gt; 
&gt; Nit: you can put this code in the header.

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:152
&gt;&gt; +}
&gt; 
&gt; Nit: you can put this code in the header.

Done.

&gt;&gt; Source/WebCore/bindings/v8/Dictionary.cpp:432
&gt;&gt; +    if (!m_options-&gt;IsObject())
&gt; 
&gt; You can write:
&gt; 
&gt;     if (!isObject())
&gt;         return false;

Done.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:67
&gt;&gt; +        V8DOMWrapper::setDOMWrapper(args.Holder(), &amp;info, impl.get());
&gt; 
&gt; Nit: args.Holder() =&gt; wrapper.

Done.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:69
&gt;&gt; +        return args.Holder();
&gt; 
&gt; Nit: args.Holder() =&gt; wrapper.

Done.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp:93
&gt;&gt; +    return args.Holder();
&gt; 
&gt; Nit: args.Holder() =&gt; wrapper.

Done.

&gt;&gt; LayoutTests/webintents/web-intents-obj-constructor.html:2
&gt;&gt; +  &lt;head&gt;
&gt; 
&gt; Nit: 4 space indent please. Or no indent is OK. WebKit does not use 2 space indent.

Done.

&gt;&gt; LayoutTests/webintents/web-intents-obj-constructor.html:32
&gt;&gt; +        shouldNotThrow(&quot;new WebKitIntent({&apos;action&apos;:&apos;a&apos;,&apos;type&apos;:&apos;b&apos;})&quot;);
&gt; 
&gt; Instead, we might write the test like this:
&gt; 
&gt; shouldBeEqualToString(&apos;(new WebKitIntent({&quot;action&quot;:&quot;a&quot;,&quot;type&quot;:&quot;b&quot;})).action&apos;, &apos;a&apos;);
&gt; shouldBeEqualToString(&apos;(new WebKitIntent({&quot;action&quot;:&quot;a&quot;,&quot;type&quot;:&quot;b&quot;})).type&apos;, &apos;b&apos;);
&gt; 
&gt; The same comment for the following tests. (Though I know the number of tests increases.)

Done. I like it. Currently the spec doesn&apos;t have accessors for |service| and |extras|, so I&apos;ve left them as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609778</commentid>
    <comment_count>37</comment_count>
      <attachid>138814</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-25 08:24:33 -0700</bug_when>
    <thetext>Created attachment 138814
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609783</commentid>
    <comment_count>38</comment_count>
      <attachid>138817</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-25 08:28:12 -0700</bug_when>
    <thetext>Created attachment 138817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609813</commentid>
    <comment_count>39</comment_count>
      <attachid>138817</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-25 08:52:49 -0700</bug_when>
    <thetext>Comment on attachment 138817
Patch

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

Sorry for the iterative comments. Almost r+.

&gt; Source/WebCore/ChangeLog:9
&gt; +        This will hopefully be temporary, as we&apos;ll convert to just using this
&gt; +        constructor, which can then use codegen.

Please update the description. It is a good idea to add the link to the spec that supports your change.
http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html ?

&gt; Source/WebCore/ChangeLog:11
&gt; +        Added layout tests for object constructor:
&gt; +        webintents/web-intent-obj-constructor.html

Our convention is to write

        Test: webintents/web-intent-obj-constructor.html

Please look at other ChangeLogs.

&gt; Source/WebCore/Modules/intents/Intent.cpp:60
&gt; +PassRefPtr&lt;Intent&gt; Intent::create(ScriptState* scriptState, const Dictionary&amp; options, ExceptionCode&amp; ec)

How about removing scriptState from the method arguments, and call ScriptState::current() just before dataValue.serialize()?

&gt; Source/WebCore/Modules/intents/Intent.cpp:77
&gt; +    options.get(&quot;service&quot;, service);
&gt; +    if (!service.isEmpty()) {

if (options.get(&quot;service&quot;, service) &amp;&amp; !service.isEmpty())

&gt; Source/WebKit/chromium/src/WebIntent.cpp:139
&gt; +    for (int i = 0; keyIter != m_private-&gt;extras().end().keys(); ++keyIter, ++i)

Nit: int =&gt; size_t?

&gt; LayoutTests/webintents/web-intents-obj-constructor.html:43
&gt; +        shouldNotThrow(&quot;new WebKitIntent({&apos;action&apos;:&apos;a&apos;,&apos;type&apos;:&apos;b&apos;,&apos;service&apos;:&apos;&apos;})&quot;);

&gt;&gt; The same comment for the following tests. (Though I know the number of tests increases.)
&gt;&gt;
&gt; Currently the spec doesn&apos;t have accessors for |service| and |extras|, so I&apos;ve left them as is.

It seems the spec has service and extras as a readonly attribute: http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html

Maybe you need to add service and extras to Intent.idl?

At least, given that you implemented accessors for service and extras in this patch, we should test them. Otherwise, we might want to remove accessors for service and extras from this patch for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609839</commentid>
    <comment_count>40</comment_count>
      <attachid>138817</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-25 09:42:17 -0700</bug_when>
    <thetext>Comment on attachment 138817
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        constructor, which can then use codegen.
&gt; 
&gt; Please update the description. It is a good idea to add the link to the spec that supports your change.
&gt; http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html ?

Done.

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        webintents/web-intent-obj-constructor.html
&gt; 
&gt; Our convention is to write
&gt; 
&gt;         Test: webintents/web-intent-obj-constructor.html
&gt; 
&gt; Please look at other ChangeLogs.

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:60
&gt;&gt; +PassRefPtr&lt;Intent&gt; Intent::create(ScriptState* scriptState, const Dictionary&amp; options, ExceptionCode&amp; ec)
&gt; 
&gt; How about removing scriptState from the method arguments, and call ScriptState::current() just before dataValue.serialize()?

I put it like this to be more codegen-alike. It looks like ScriptState::current is a v8-ism.

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:77
&gt;&gt; +    if (!service.isEmpty()) {
&gt; 
&gt; if (options.get(&quot;service&quot;, service) &amp;&amp; !service.isEmpty())

Done.

&gt;&gt; Source/WebKit/chromium/src/WebIntent.cpp:139
&gt;&gt; +    for (int i = 0; keyIter != m_private-&gt;extras().end().keys(); ++keyIter, ++i)
&gt; 
&gt; Nit: int =&gt; size_t?

Done.

&gt; LayoutTests/webintents/web-intents-obj-constructor-expected.txt:3
&gt; +Explicit intent service: http://explicit.com/

Here&apos;s where service and extras get tested (although not from JS).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609840</commentid>
    <comment_count>41</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-25 09:45:11 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; (From update of attachment 138817 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=138817&amp;action=review
&gt; 
&gt; Sorry for the iterative comments. Almost r+.

yay! :-) no worries.

&gt; &gt;&gt; The same comment for the following tests. (Though I know the number of tests increases.)
&gt; &gt;&gt;
&gt; &gt; Currently the spec doesn&apos;t have accessors for |service| and |extras|, so I&apos;ve left them as is.
&gt; 
&gt; It seems the spec has service and extras as a readonly attribute: http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html
&gt; 
&gt; Maybe you need to add service and extras to Intent.idl?
&gt; 
&gt; At least, given that you implemented accessors for service and extras in this patch, we should test them. Otherwise, we might want to remove accessors for service and extras from this patch for now.

The attributes are on the object literal, though, not on the intent object. These tests do test those accessors (from the DRT code), but not from JS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609843</commentid>
    <comment_count>42</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-25 09:48:59 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; &gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:60
&gt; &gt;&gt; +PassRefPtr&lt;Intent&gt; Intent::create(ScriptState* scriptState, const Dictionary&amp; options, ExceptionCode&amp; ec)
&gt; &gt; 
&gt; &gt; How about removing scriptState from the method arguments, and call ScriptState::current() just before dataValue.serialize()?
&gt; 
&gt; I put it like this to be more codegen-alike. It looks like ScriptState::current is a v8-ism.

Makes sense.

&gt; &gt; At least, given that you implemented accessors for service and extras in this patch, we should test them. Otherwise, we might want to remove accessors for service and extras from this patch for now.
&gt;&gt;
&gt; The attributes are on the object literal, though, not on the intent object. These tests do test those accessors (from the DRT code), but not from JS.

Makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609851</commentid>
    <comment_count>43</comment_count>
      <attachid>138827</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-25 09:56:49 -0700</bug_when>
    <thetext>Created attachment 138827
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609866</commentid>
    <comment_count>44</comment_count>
      <attachid>138827</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-25 10:06:35 -0700</bug_when>
    <thetext>Comment on attachment 138827
Patch

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

Looks OK. Thank you very much for the long discussion:)

&gt; Source/WebCore/ChangeLog:8
&gt; +        This will hopefully be temporary, as we&apos;ll convert to just using this
&gt; +        constructor, which can then use codegen.

Please explain why this patch is temporary. Recently there&apos;s been webkit-dev@ discussion on making ChangeLogs descriptive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609892</commentid>
    <comment_count>45</comment_count>
      <attachid>138841</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-25 10:43:59 -0700</bug_when>
    <thetext>Created attachment 138841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609893</commentid>
    <comment_count>46</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-04-25 10:45:17 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (From update of attachment 138827 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=138827&amp;action=review
&gt; 
&gt; Looks OK. Thank you very much for the long discussion:)

Thanks for the review!

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        This will hopefully be temporary, as we&apos;ll convert to just using this
&gt; &gt; +        constructor, which can then use codegen.
&gt; 
&gt; Please explain why this patch is temporary. Recently there&apos;s been webkit-dev@ discussion on making ChangeLogs descriptive.

Updated with an improved changelog description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610056</commentid>
    <comment_count>47</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-25 14:38:56 -0700</bug_when>
    <thetext>BTW, if you want to commit it, please change &quot;cq&quot; to &quot;cq?&quot;. Then I can change it to &quot;cq+&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610204</commentid>
    <comment_count>48</comment_count>
      <attachid>138841</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-25 17:28:05 -0700</bug_when>
    <thetext>Comment on attachment 138841
Patch

Clearing flags on attachment: 138841

Committed r115264: &lt;http://trac.webkit.org/changeset/115264&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610205</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-25 17:28:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137644</attachid>
            <date>2012-04-17 17:59:43 -0700</date>
            <delta_ts>2012-04-18 09:16:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120417175942.patch</filename>
            <type>text/plain</type>
            <size>17494</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0MzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmIyZTIzNWQ1MTcyNDU2
YTE5YWQzZDljN2YwYmRkMTBlMmJmMmJhMy4uMjZhNTA4MTI5YjJlYmExYzI3MGZkM2EwZjkwM2I1
ZDNkMDhlYTEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQyMjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKwor
ICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9EZWxpdmVyZWRJbnRlbnQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChEZWxpdmVyZWRJbnRlbnRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGVsaXZlcmVkSW50ZW50Q2xpZW50Ojp+RGVsaXZlcmVkSW50ZW50Q2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRlbGl2ZXJlZEludGVudENsaWVudDo6cG9zdFJlc3VsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxpdmVyZWRJbnRlbnRDbGllbnQ6OnBvc3RGYWlsdXJlKToKKyAgICAgICAgKERl
bGl2ZXJlZEludGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWxpdmVyZWRJbnRlbnQ6On5EZWxp
dmVyZWRJbnRlbnQpOgorICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50
OjpJbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpzZXJ2aWNlKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpleHRyYXMpOgorICAgICAgICAq
IE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
SW50ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbDoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5OjpnZXQpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvRGljdGlvbmFyeS5oOgorICAgICAgICAoRGljdGlvbmFyeSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0VmFsdWU6OnNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoU2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4SW50ZW50Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKwogMjAx
Mi0wNC0xNiAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBpbnNlcnRlZEludG9Eb2N1bWVudCBhbmQgaW5zZXJ0ZWRJbnRvVHJlZSBzaG91bGQgYmUgdW5p
dGlmZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwCmluZGV4IDA1
M2Q0MjljZmExYzk3MjNmOTYzNmMzNzlmM2EzOTE4NWRkNDk0YmUuLmE3N2E4Yzc4MGRjMzkzN2Y2
ZTEzY2FmZjFkNTlmNjAwYzA0YTBjOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW50ZW50cy9JbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnQuY3BwCkBAIC0zMywxMSArMzMsMTIgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgi
CiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6OmNy
ZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYgcG9y
dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChhY3Rpb24uaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKQEAgLTQ4LDM5ICs0OSw2OSBAQCBQYXNzUmVmUHRyPElu
dGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dHlwZSwgUGFzcwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEpKTsKKyAgICBPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMo
JnBvcnRzLCBlYyk7CisKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJhczsK
KyAgICBTdHJpbmcgc2VydmljZTsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFj
dGlvbiwgdHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2UpKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMp
CitQYXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLCBjb25zdCBEaWN0aW9uYXJ5JiBwYXJhbWV0ZXJzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkgeworICAgIFN0cmluZyBhY3Rpb247CisgICAgYm9v
bCBhY3Rpb25FeGlzdHMgPSBwYXJhbWV0ZXJzLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygi
YWN0aW9uIiwgYWN0aW9uKTsKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBib29sIHR5cGVFeGlzdHMg
PSBwYXJhbWV0ZXJzLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygidHlwZSIsIHR5cGUpOwor
ICAgIFN0cmluZyBzZXJ2aWNlOworICAgIHBhcmFtZXRlcnMuZ2V0KCJzZXJ2aWNlIiwgc2Vydmlj
ZSk7CisKKyAgICBpZiAoIWFjdGlvbkV4aXN0cyB8fCBhY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICh0
eXBlLmlzRW1wdHkoKSkgeworICAgIGlmICghdHlwZUV4aXN0cyB8fCB0eXBlLmlzRW1wdHkoKSkg
ewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMgPSBNZXNzYWdlUG9y
dDo6ZGlzZW50YW5nbGVQb3J0cygmcG9ydHMsIGVjKTsKKyAgICBNZXNzYWdlUG9ydEFycmF5IHBv
cnRzOworICAgIGJvb2wgcG9ydHNFeGlzdHMgPSBwYXJhbWV0ZXJzLmdldCgidHJhbnNmZXIiLCBw
b3J0cyk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVsczsKKyAg
ICBpZiAocG9ydHNFeGlzdHMpCisgICAgICAgIGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2Vu
dGFuZ2xlUG9ydHMoJnBvcnRzLCBlYyk7CisKKyAgICBTY3JpcHRWYWx1ZSBkYXRhVmFsdWU7Cisg
ICAgYm9vbCBkYXRhRXhpc3RzID0gcGFyYW1ldGVycy5nZXQoImRhdGEiLCBkYXRhVmFsdWUpOwor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWREYXRhOworICAgIGlm
IChkYXRhRXhpc3RzKSB7CisgICAgICBib29sIGRpZFRocm93ID0gZmFsc2U7CisgICAgICBzZXJp
YWxpemVkRGF0YSA9IGRhdGFWYWx1ZS5zZXJpYWxpemUoc2NyaXB0U3RhdGUsICZwb3J0cywgMCwg
ZGlkVGhyb3cpOworICAgICAgaWYgKGRpZFRocm93KSB7CisgICAgICAgICAgZWMgPSBTWU5UQVhf
RVJSOworICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW50ZW50KGFjdGlvbiwgdHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgp
KSk7Ci19CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBleHRyYXM7CisgICAgRGlj
dGlvbmFyeSBleHRyYXNEaWN0aW9uYXJ5OworICAgIGJvb2wgZXh0cmFzRXhpc3RzID0gcGFyYW1l
dGVycy5nZXQoImV4dHJhcyIsIGV4dHJhc0RpY3Rpb25hcnkpOworICAgIGlmIChleHRyYXNFeGlz
dHMpIHsKKyAgICAgICAgLy8gVE9ETzogZmlsbCBpbiBleHRyYXMgSGFzaE1hcCB3aXRoIGV4dHJh
c0RpY3Rpb25hcnkuIElzIHRoZXJlIGEgaGVscGVyIGZvcgorICAgICAgICAvLyB0aGlzPworICAg
IH0KIAotSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCi0gICAgOiBtX2Fj
dGlvbihhY3Rpb24pCi0gICAgLCBtX3R5cGUodHlwZSkKLXsKLSAgICBpZiAoZGF0YSkKLSAgICAg
ICAgbV9kYXRhID0gZGF0YTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQo
YWN0aW9uLCB0eXBlLCBzZXJpYWxpemVkRGF0YS5yZWxlYXNlKCksIGNoYW5uZWxzLnJlbGVhc2Uo
KSwgZXh0cmFzLCBzZXJ2aWNlKSk7CiB9CiAKLUludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYg
YWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cykKK0lu
dGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsCisg
ICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFz
c093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMsCisgICAgICAgICAgICAgICBj
b25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMsIGNvbnN0IFN0cmluZyYg
c2VydmljZSkKICAgICA6IG1fYWN0aW9uKGFjdGlvbikKICAgICAsIG1fdHlwZSh0eXBlKQogICAg
ICwgbV9wb3J0cyhwb3J0cykKKyAgICAsIG1fc2VydmljZShzZXJ2aWNlKQorICAgICwgbV9leHRy
YXMoZXh0cmFzKQogewogICAgIGlmIChkYXRhKQogICAgICAgICBtX2RhdGEgPSBkYXRhOwpAQCAt
OTgsNiArMTI5LDExIEBAIGNvbnN0IFN0cmluZyYgSW50ZW50Ojp0eXBlKCkgY29uc3QKICAgICBy
ZXR1cm4gbV90eXBlOwogfQogCitjb25zdCBTdHJpbmcmIEludGVudDo6c2VydmljZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc2VydmljZTsKK30KKwogU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBJ
bnRlbnQ6OmRhdGEoKSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEuZ2V0KCk7CkBAIC0xMDgs
NiArMTQ0LDExIEBAIE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBJbnRlbnQ6Om1lc3NhZ2VQb3J0
cygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcG9ydHMuZ2V0KCk7CiB9CiAKK2NvbnN0IFdURjo6SGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4mIEludGVudDo6ZXh0cmFzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9leHRyYXM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJfSU5URU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9JbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaApp
bmRleCAzM2VmNjllMDQ0MTA1OTZlMjQxNTMzNDg1ZWZiYzlmNWM0ZTZiNmQ0Li5lZDNjMjdhODY3
MjIzYmExMDg2YjYwZTI3YzNlNzYyODZjZjg0ZWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bnRlbnRzL0ludGVudC5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpZiBFTkFCTEUoV0VCX0lOVEVO
VFMpCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIK
ICNpbmNsdWRlICJNZXNzYWdlUG9ydENoYW5uZWwuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgpAQCAtNDEsMzIgKzQyLDQwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2Ny
aXB0U3RhdGU7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CiAKIGNsYXNzIEludGVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVudD4g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludGVudD4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW50ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIGNvbnN0IE1lc3NhZ2VQb3J0
QXJyYXkmIHBvcnRzLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50
ZW50PiBjcmVhdGUoU2NyaXB0U3RhdGUqLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29k
ZSYpOwogCiAgICAgY29uc3QgU3RyaW5nJiBhY3Rpb24oKSBjb25zdDsKICAgICBjb25zdCBTdHJp
bmcmIHR5cGUoKSBjb25zdDsKICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEoKSBjb25z
dDsKIAotICAgIGludCBpZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRJZGVudGlmaWVy
KGludCk7Ci0KICAgICBNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogbWVzc2FnZVBvcnRzKCkgY29u
c3Q7CisgICAgY29uc3QgU3RyaW5nJiBzZXJ2aWNlKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAg
ICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAg
ICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8
TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzLAorICAgICAgICAgICBjb25zdCBXVEY6Okhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMsIGNvbnN0IFN0cmluZyYgc2VydmljZSk7CisK
KyAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMoKSBjb25zdDsK
IAogcHJpdmF0ZToKLSAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpOwotICAgIElu
dGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheT4gcG9ydHMpOwogCiAgICAgU3RyaW5nIG1fYWN0aW9uOwogICAgIFN0cmluZyBtX3R5
cGU7CisKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX2RhdGE7CiAgICAgT3du
UHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX3BvcnRzOworCisgICAgU3RyaW5nIG1fc2Vy
dmljZTsKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fZXh0cmFzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbnRlbnRzL0ludGVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50
ZW50LmlkbAppbmRleCBlZjA4MjUwNzM0ZmZjNzliMTk0OTgwZWM4MjQzZWViMzQ0OGFjNTJlLi43
YmU1ODZhNzYzMjI0YzEzNzFkMjZkYzhjNTIwMWNlMTYwZmRhY2UyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbApAQCAtMjYsNyArMjYsOSBAQAogbW9kdWxlIHdp
bmRvdyB7CiAgIGludGVyZmFjZSBbCiAgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5UUywKKyAg
ICAgIEN1c3RvbUNvbnN0cnVjdG9yLAogICAgICAgQ29uc3RydWN0b3IoaW4gRE9NU3RyaW5nIGFj
dGlvbiwgaW4gRE9NU3RyaW5nIHR5cGUsIGluIFtPcHRpb25hbD1EZWZhdWx0SXNOdWxsU3RyaW5n
LCBUcmFuc2Zlckxpc3Q9dHJhbnNmZXJMaXN0XSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGF0YSwg
aW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gQXJyYXkgdHJhbnNmZXJMaXN0KSwKKyAg
ICAgIENvbnN0cnVjdG9yKGluIERpY3Rpb25hcnkgcGFyYW1ldGVycyksCiAgICAgICBDb25zdHJ1
Y3RvclJhaXNlc0V4Y2VwdGlvbgogICBdIEludGVudCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgYWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDY1YjRiMTcxNTQ2OTE4
Y2U1NDk4NDliMDJjYWUxZWQ3NTljZDBkN2YuLmYxM2RhNGE4MjM2NWQwYzJkYjg0ZmZkNDUyNjU0
MzQwYzU3OTM1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIyNzcsNiArMjI3Nyw3IEBACiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50MTZBcnJheUN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDMyQXJyYXlDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQ4QXJyYXlDdXN0b20uY3BwJywKKyAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEphdmFTY3JpcHRDYWxsRnJhbWVDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVs
Q29uc3RydWN0b3IuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5j
cHAKaW5kZXggZmQ0ZGExZmIwMDZjZmNmNjQxODlmODIzOWQ4ZTZjYjIwZjFjNmFlYS4uYTdkNjVh
NTY3Y2Y3NzY4NzBjNGZjYjA4NGQzNTQ0YmQ2ZDAxOGRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAKQEAgLTQxMiw0ICs0MTIsMTYgQEAgYm9vbCBEaWN0aW9u
YXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dExpc3Q+JiB2YWwKIAogI2VuZGlmCiAKK2Jvb2wgRGljdGlvbmFyeTo6Z2V0KGNvbnN0IFN0cmlu
ZyYga2V5LCBEaWN0aW9uYXJ5JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICh2OFZhbHVlLT5Jc09iamVjdCgpKQorICAgICAgICB2YWx1
ZSA9IERpY3Rpb25hcnkodjhWYWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RGljdGlvbmFyeS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5oCmlu
ZGV4IDMyMTY0YjhjYmIyM2E1NGFiYzU4NDk3OTk2MjU5NmM1ZmQyZmY4MzEuLmZjM2E0MzVlOTIx
ZGM5YzcxZGQ1NGE5YTczZWNhOWYwMjIxNmMyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9EaWN0aW9uYXJ5LmgKQEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0KGNv
bnN0IFN0cmluZyYsIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+JikgY29uc3Q7
CiAjZW5kaWYKICAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBIYXNoU2V0PEF0b21pY1N0cmlu
Zz4mKSBjb25zdDsKKyAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBEaWN0aW9uYXJ5JikgY29u
c3Q7CiAKICAgICBib29sIGdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcm
LCBTdHJpbmcmKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFs
dWUuY3BwCmluZGV4IGVjYzM2NzM2MmE4MzhiN2Y5ODkyOGVkMDU5OWQ2Mzc2OWYwOTdjYjcuLmNh
NTU4YzdjNzQ5N2U2OWNiMDM3N2NmOTE2ODJhZDllZDJhMmY4ZTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKQEAgLTQ0LDYgKzQ0LDEzIEBAIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTY3JpcHRWYWx1ZTo6c2VyaWFsaXplKFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0CiAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KHY4VmFsdWUoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTY3Jp
cHRWYWx1ZTo6c2VyaWFsaXplKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0
QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJBcnJheSogYXJyYXlCdWZmZXJzLCBib29s
JiBkaWRUaHJvdykKK3sKKyAgICBTY3JpcHRTY29wZSBzY29wZShzY3JpcHRTdGF0ZSk7CisgICAg
cmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4VmFsdWUoKSwgbWVzc2FnZVBv
cnRzLCBhcnJheUJ1ZmZlcnMsIGRpZFRocm93KTsKK30KKwogU2NyaXB0VmFsdWUgU2NyaXB0VmFs
dWU6OmRlc2VyaWFsaXplKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgU2VyaWFsaXplZFNjcmlw
dFZhbHVlKiB2YWx1ZSkKIHsKICAgICBTY3JpcHRTY29wZSBzY29wZShzY3JpcHRTdGF0ZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaAppbmRleCBkNDEyOTAxZmRhZDk1
MGVlODZmOGI5ZGVlZGNiMTc4MmQxNWEwMTFlLi5mNjIzMzk0NTRjNTMyNWI4NjI2MTRjOGU4NjQ4
ZWJkNjgzMmZmZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgK
QEAgLTM2LDE0ICszNiwyMCBAQAogCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmbmRlZiBOREVCVUcKICNp
bmNsdWRlICJWOFByb3h5LmgiICAvLyBmb3IgcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgZ2xvYmFs
IGhhbmRsZXMuCiAjZW5kaWYKIAorbmFtZXNwYWNlIFdURiB7CitjbGFzcyBBcnJheUJ1ZmZlcjsK
K30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKK2NsYXNz
IE1lc3NhZ2VQb3J0OwogY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogCiBjbGFzcyBTY3Jp
cHRWYWx1ZSB7CkBAIC0xMzEsNiArMTM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUqKTsKKyAg
ICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlwdFN0YXRl
KiwgTWVzc2FnZVBvcnRBcnJheSosIEFycmF5QnVmZmVyQXJyYXkqLCBib29sJik7CiAgICAgc3Rh
dGljIFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplKFNjcmlwdFN0YXRlKiwgU2VyaWFsaXplZFNjcmlw
dFZhbHVlKik7CiAKICAgICBzdGF0aWMgU2NyaXB0VmFsdWUgdW5kZWZpbmVkKCkgeyByZXR1cm4g
U2NyaXB0VmFsdWUodjg6OlVuZGVmaW5lZCgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjM4MjU1NmMyZGNmMzJiYjIwZWFlZGVhNGU5NmJjMTg5YjYzYjY0NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHAKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRl
bnQuaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9y
dC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCisjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCisjaW5jbHVkZSAiVjhET01X
cmFwcGVyLmgiCisjaW5jbHVkZSAiVjhJbnRlbnQuaCIKKyNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0
LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEludGVudDo6
Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElO
Q19TVEFUUygiRE9NLkludGVudC5Db25zdHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29u
c3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25z
dHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwgVjhQcm94eTo6VHlwZUVy
cm9yKTsKKworICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rv
ck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7
CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigi
Tm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworICAgIGlmIChhcmdz
Lkxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBkaWN0aW9uYXJ5IGNvbnN0cnVj
dG9yLgorICAgICAgICBFWENFUFRJT05fQkxPQ0soRGljdGlvbmFyeSwgb3B0aW9ucywgYXJnc1sw
XSk7CisgICAgICAgIEVtcHR5U2NyaXB0U3RhdGUgc3RhdGU7CisgICAgICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgICAgICBSZWZQdHI8SW50ZW50PiBpbXBsID0gSW50ZW50OjpjcmVhdGUo
JnN0YXRlLCBvcHRpb25zLCBlYyk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGVjKTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFy
Z3MuSG9sZGVyKCksICZpbmZvLCBpbXBsLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoaW1w
bC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAgIH0KKworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJh
bWV0ZXI8PiwgYWN0aW9uLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0
SXNVbmRlZmluZWQpKTsKKyAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NL
KFY4UGFyYW1ldGVyPD4sIHR5cGUsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERl
ZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIE1lc3NhZ2VQb3J0QXJyYXkgbWVzc2FnZVBvcnRBcnJh
eVRyYW5zZmVyTGlzdDsKKyAgICBBcnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVyQXJyYXlUcmFu
c2Zlckxpc3Q7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAzKSB7CisgICAgICAgIGlmICghZXh0
cmFjdFRyYW5zZmVyYWJsZXMoYXJnc1szXSwgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwg
YXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcigiQ291bGQgbm90IGV4dHJhY3QgdHJhbnNmZXJhYmxlcyIsIFY4UHJveHk6OlR5cGVFcnJv
cik7CisgICAgfQorICAgIGJvb2wgZGF0YURpZFRocm93ID0gZmFsc2U7CisgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KGFyZ3NbMl0sICZtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCAmYXJyYXlCdWZmZXJBcnJh
eVRyYW5zZmVyTGlzdCwgZGF0YURpZFRocm93KTsKKyAgICBpZiAoZGF0YURpZFRocm93KQorICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgUmVmUHRyPEludGVudD4gaW1wbCA9
IEludGVudDo6Y3JlYXRlKGFjdGlvbiwgdHlwZSwgZGF0YSwgbWVzc2FnZVBvcnRBcnJheVRyYW5z
ZmVyTGlzdCwgZWMpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3Mu
SG9sZGVyKCk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CisK
KyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIod3JhcHBlciwgJmluZm8sIGltcGwuZ2V0
KCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGltcGwucmVs
ZWFzZSgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKKyAgICBy
ZXR1cm4gYXJncy5Ib2xkZXIoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137705</attachid>
            <date>2012-04-18 09:16:11 -0700</date>
            <delta_ts>2012-04-18 16:58:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120418091610.patch</filename>
            <type>text/plain</type>
            <size>20661</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0MzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmIyZTIzNWQ1MTcyNDU2
YTE5YWQzZDljN2YwYmRkMTBlMmJmMmJhMy4uMmJlYzUyZTRmMmYzZGU3OGMyNDljM2Y4YzA1M2Zi
ZTZmNjYyMjEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4gVGhpcyB3aWxsCisgICAg
ICAgIGhvcGVmdWxseSBiZSB0ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2lu
ZyB0aGlzIGNvbnN0cnVjdG9yLAorICAgICAgICB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4K
KyAgICAgICAgQWRkZWQgbGF5b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAg
ICAgIHdlYmludGVudHMvd2ViLWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDIyMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMTYgIEhhamltZSBNb3Jy
aXRhICA8bW9ycml0YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgaW5zZXJ0ZWRJbnRvRG9jdW1l
bnQgYW5kIGluc2VydGVkSW50b1RyZWUgc2hvdWxkIGJlIHVuaXRpZmVkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcAppbmRleCAwNTNkNDI5Y2ZhMWM5NzIzZjk2MzZj
Mzc5ZjNhMzkxODVkZDQ5NGJlLi5hZmNjNmYzNGIzZjQxNTQ5OTM3ZjdhZDQxMzBkMWE3NGYyZjI3
YzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcApAQCAtMzMs
MTEgKzMzLDEyIEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTWVz
c2FnZVBvcnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SW50
ZW50PiBJbnRlbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0
eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCitQYXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGRhdGEsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9F
UlI7CkBAIC00OCwzOSArNDksNjkgQEAgUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3MKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9u
LCB0eXBlLCBkYXRhKSk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFu
bmVscyA9IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywgZWMpOworCisgICAg
V1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBleHRyYXM7CisgICAgU3RyaW5nIHNlcnZpY2U7
CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEsIGNo
YW5uZWxzLnJlbGVhc2UoKSwgZXh0cmFzLCBzZXJ2aWNlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW50
ZW50PiBJbnRlbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0
eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2Fn
ZVBvcnRBcnJheSYgcG9ydHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJbnRlbnQ+
IEludGVudDo6Y3JlYXRlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgRGljdGlvbmFy
eSYgcGFyYW1ldGVycywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKGFjdGlvbi5pc0Vt
cHR5KCkpIHsKKyAgICBTdHJpbmcgYWN0aW9uOworICAgIGJvb2wgYWN0aW9uRXhpc3RzID0gcGFy
YW1ldGVycy5nZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soImFjdGlvbiIsIGFjdGlvbik7Cisg
ICAgU3RyaW5nIHR5cGU7CisgICAgYm9vbCB0eXBlRXhpc3RzID0gcGFyYW1ldGVycy5nZXRXaXRo
VW5kZWZpbmVkT3JOdWxsQ2hlY2soInR5cGUiLCB0eXBlKTsKKyAgICBTdHJpbmcgc2VydmljZTsK
KyAgICBwYXJhbWV0ZXJzLmdldCgic2VydmljZSIsIHNlcnZpY2UpOworCisgICAgaWYgKCFhY3Rp
b25FeGlzdHMgfHwgYWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAodHlwZS5pc0VtcHR5KCkpIHsKKyAg
ICBpZiAoIXR5cGVFeGlzdHMgfHwgdHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZWMgPSBTWU5U
QVhfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMo
JnBvcnRzLCBlYyk7CisgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0czsKKyAgICBib29sIHBvcnRz
RXhpc3RzID0gcGFyYW1ldGVycy5nZXQoInRyYW5zZmVyIiwgcG9ydHMpOworICAgIE93blB0cjxN
ZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHM7CisgICAgaWYgKHBvcnRzRXhpc3RzKQor
ICAgICAgICBjaGFubmVscyA9IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywg
ZWMpOworCisgICAgU2NyaXB0VmFsdWUgZGF0YVZhbHVlOworICAgIGJvb2wgZGF0YUV4aXN0cyA9
IHBhcmFtZXRlcnMuZ2V0KCJkYXRhIiwgZGF0YVZhbHVlKTsKKyAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkRGF0YTsKKyAgICBpZiAoZGF0YUV4aXN0cykgeworICAg
ICAgYm9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAgICAgc2VyaWFsaXplZERhdGEgPSBkYXRhVmFs
dWUuc2VyaWFsaXplKHNjcmlwdFN0YXRlLCAmcG9ydHMsIDAsIGRpZFRocm93KTsKKyAgICAgIGlm
IChkaWRUaHJvdykgeworICAgICAgICAgIGVjID0gREFUQV9DTE9ORV9FUlI7CisgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICB9CisgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRl
bnQoYWN0aW9uLCB0eXBlLCBkYXRhLCBjaGFubmVscy5yZWxlYXNlKCkpKTsKLX0KKyAgICBXVEY6
Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJhczsKKyAgICBEaWN0aW9uYXJ5IGV4dHJhc0Rp
Y3Rpb25hcnk7CisgICAgYm9vbCBleHRyYXNFeGlzdHMgPSBwYXJhbWV0ZXJzLmdldCgiZXh0cmFz
IiwgZXh0cmFzRGljdGlvbmFyeSk7CisgICAgaWYgKGV4dHJhc0V4aXN0cykgeworICAgICAgICAv
LyBUT0RPOiBmaWxsIGluIGV4dHJhcyBIYXNoTWFwIHdpdGggZXh0cmFzRGljdGlvbmFyeS4gSXMg
dGhlcmUgYSBoZWxwZXIgZm9yCisgICAgICAgIC8vIHRoaXM/CisgICAgfQogCi1JbnRlbnQ6Oklu
dGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSkKLSAgICA6IG1fYWN0aW9uKGFjdGlvbikKLSAg
ICAsIG1fdHlwZSh0eXBlKQotewotICAgIGlmIChkYXRhKQotICAgICAgICBtX2RhdGEgPSBkYXRh
OwotICAgIGVsc2UKLSAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxs
VmFsdWUoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIHNl
cmlhbGl6ZWREYXRhLnJlbGVhc2UoKSwgY2hhbm5lbHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZp
Y2UpKTsKIH0KIAotSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0
cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKQorSW50ZW50OjpJbnRlbnQoY29u
c3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAgICAgICAgICAgIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQ
b3J0Q2hhbm5lbEFycmF5PiBwb3J0cywKKyAgICAgICAgICAgICAgIGNvbnN0IFdURjo6SGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhcywgY29uc3QgU3RyaW5nJiBzZXJ2aWNlKQogICAgIDog
bV9hY3Rpb24oYWN0aW9uKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3BvcnRzKHBvcnRz
KQorICAgICwgbV9zZXJ2aWNlKHNlcnZpY2UpCisgICAgLCBtX2V4dHJhcyhleHRyYXMpCiB7CiAg
ICAgaWYgKGRhdGEpCiAgICAgICAgIG1fZGF0YSA9IGRhdGE7CkBAIC05OCw2ICsxMjksMTEgQEAg
Y29uc3QgU3RyaW5nJiBJbnRlbnQ6OnR5cGUoKSBjb25zdAogICAgIHJldHVybiBtX3R5cGU7CiB9
CiAKK2NvbnN0IFN0cmluZyYgSW50ZW50OjpzZXJ2aWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zZXJ2aWNlOworfQorCiBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEludGVudDo6ZGF0YSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS5nZXQoKTsKQEAgLTEwOCw2ICsxNDQsMTEgQEAgTWVz
c2FnZVBvcnRDaGFubmVsQXJyYXkqIEludGVudDo6bWVzc2FnZVBvcnRzKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9wb3J0cy5nZXQoKTsKIH0KIAorY29uc3QgV1RGOjpIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiYgSW50ZW50OjpleHRyYXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2V4dHJhczsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCmluZGV4IDMzZWY2OWUwNDQx
MDU5NmUyNDE1MzM0ODVlZmJjOWY1YzRlNmI2ZDQuLmVkM2MyN2E4NjcyMjNiYTEwODZiNjBlMjdj
M2U3NjI4NmNmODRlYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgK
QEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShXRUJfSU5URU5UUykKIAorI2luY2x1ZGUg
IkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC00MSwzMiArNDIs
NDAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTY3JpcHRTdGF0ZTsKIGNsYXNz
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAog
Y2xhc3MgSW50ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW50PiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEs
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYgcG9ydHMsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShTY3Jp
cHRTdGF0ZSosIGNvbnN0IERpY3Rpb25hcnkmLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBjb25z
dCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0
OwogICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0OwogCi0gICAgaW50IGlk
ZW50aWZpZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldElkZW50aWZpZXIoaW50KTsKLQogICAgIE1l
c3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBtZXNzYWdlUG9ydHMoKSBjb25zdDsKKyAgICBjb25zdCBT
dHJpbmcmIHNlcnZpY2UoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEludGVudChjb25zdCBT
dHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLAorICAgICAgICAgICBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheT4gcG9ydHMsCisgICAgICAgICAgIGNvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mIGV4dHJhcywgY29uc3QgU3RyaW5nJiBzZXJ2aWNlKTsKKworICAgIGNvbnN0IFdURjo6
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhcygpIGNvbnN0OwogCiBwcml2YXRlOgotICAg
IEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSk7Ci0gICAgSW50ZW50KGNvbnN0IFN0cmlu
ZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cyk7
CiAKICAgICBTdHJpbmcgbV9hY3Rpb247CiAgICAgU3RyaW5nIG1fdHlwZTsKKwogICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fZGF0YTsKICAgICBPd25QdHI8TWVzc2FnZVBvcnRD
aGFubmVsQXJyYXk+IG1fcG9ydHM7CisKKyAgICBTdHJpbmcgbV9zZXJ2aWNlOworICAgIFdURjo6
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9leHRyYXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCmluZGV4IGVm
MDgyNTA3MzRmZmM3OWIxOTQ5ODBlYzgyNDNlZWIzNDQ4YWM1MmUuLjdiZTU4NmE3NjMyMjRjMTM3
MWQyNmRjOGM1MjAxY2UxNjBmZGFjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW50ZW50cy9JbnRlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnQuaWRsCkBAIC0yNiw3ICsyNiw5IEBACiBtb2R1bGUgd2luZG93IHsKICAgaW50ZXJm
YWNlIFsKICAgICAgIENvbmRpdGlvbmFsPVdFQl9JTlRFTlRTLAorICAgICAgQ3VzdG9tQ29uc3Ry
dWN0b3IsCiAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgYWN0aW9uLCBpbiBET01TdHJp
bmcgdHlwZSwgaW4gW09wdGlvbmFsPURlZmF1bHRJc051bGxTdHJpbmcsIFRyYW5zZmVyTGlzdD10
cmFuc2Zlckxpc3RdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRhLCBpbiBbT3B0aW9uYWw9RGVm
YXVsdElzVW5kZWZpbmVkXSBBcnJheSB0cmFuc2Zlckxpc3QpLAorICAgICAgQ29uc3RydWN0b3Io
aW4gRGljdGlvbmFyeSBwYXJhbWV0ZXJzKSwKICAgICAgIENvbnN0cnVjdG9yUmFpc2VzRXhjZXB0
aW9uCiAgIF0gSW50ZW50IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBh
Y3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjViNGIxNzE1NDY5MThjZTU0OTg0OWIwMmNhZTFl
ZDc1OWNkMGQ3Zi4uZjEzZGE0YTgyMzY1ZDBjMmRiODRmZmQ0NTI2NTQzNDBjNTc5MzVjMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMjI3Nyw2ICsyMjc3LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9jdXN0b20vVjhJbnQxNkFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SW50MzJBcnJheUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEludDhBcnJheUN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcAppbmRleCBmZDRkYTFm
YjAwNmNmY2Y2NDE4OWY4MjM5ZDhlNmNiMjBmMWM2YWVhLi5hN2Q2NWE1NjdjZjc3Njg3MGM0ZmNi
MDg0ZDM1NDRiZDZkMDE4ZGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9EaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9u
YXJ5LmNwcApAQCAtNDEyLDQgKzQxMiwxNiBAQCBib29sIERpY3Rpb25hcnk6OmdldChjb25zdCBT
dHJpbmcmIGtleSwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mIHZhbAogCiAj
ZW5kaWYKIAorYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIERpY3Rpb25h
cnkmIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7Cisg
ICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKHY4VmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgIHZhbHVlID0gRGljdGlvbmFyeSh2
OFZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgKaW5kZXggMzIxNjRiOGNiYjIz
YTU0YWJjNTg0OTc5OTYyNTk2YzVmZDJmZjgzMS4uZmMzYTQzNWU5MjFkYzljNzFkZDU0YTlhNzNl
Y2E5ZjAyMjE2YzIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGlj
dGlvbmFyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaApA
QCAtODEsNiArODEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVm
UHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mKSBjb25zdDsKICNlbmRpZgogICAgIGJv
b2wgZ2V0KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYpIGNvbnN0OworICAg
IGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIERpY3Rpb25hcnkmKSBjb25zdDsKIAogICAgIGJvb2wg
Z2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IFN0cmluZyYsIFN0cmluZyYpIGNvbnN0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKaW5kZXggZWNj
MzY3MzYyYTgzOGI3Zjk4OTI4ZWQwNTk5ZDYzNzY5ZjA5N2NiNy4uY2E1NThjN2M3NDk3ZTY5Y2Iw
Mzc3Y2Y5MTY4MmFkOWVkMmEyZjhlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFZhbHVlLmNwcApAQCAtNDQsNiArNDQsMTMgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXQK
ICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgpKTsKIH0K
IAorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxp
emUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBv
cnRzLCBBcnJheUJ1ZmZlckFycmF5KiBhcnJheUJ1ZmZlcnMsIGJvb2wmIGRpZFRocm93KQorewor
ICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKKyAgICByZXR1cm4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgpLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVy
cywgZGlkVGhyb3cpOworfQorCiBTY3JpcHRWYWx1ZSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUo
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQog
ewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRWYWx1ZS5oCmluZGV4IGQ0MTI5MDFmZGFkOTUwZWU4NmY4YjlkZWVkY2Ix
NzgyZDE1YTAxMWUuLmY2MjMzOTQ1NGM1MzI1Yjg2MjYxNGM4ZTg2NDhlYmQ2ODMyZmZkMjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaApAQCAtMzYsMTQgKzM2LDIw
IEBACiAKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWZuZGVmIE5ERUJVRwogI2luY2x1ZGUgIlY4UHJveHku
aCIgIC8vIGZvciByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBnbG9iYWwgaGFuZGxlcy4KICNlbmRp
ZgogCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIEFycmF5QnVmZmVyOworfQorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEluc3BlY3RvclZhbHVlOworY2xhc3MgTWVzc2FnZVBvcnQ7CiBj
bGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIGNsYXNzIFNjcmlwdFZhbHVlIHsKQEAgLTEz
MSw2ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSopOworICAgIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBNZXNzYWdlUG9ydEFy
cmF5KiwgQXJyYXlCdWZmZXJBcnJheSosIGJvb2wmKTsKICAgICBzdGF0aWMgU2NyaXB0VmFsdWUg
ZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqKTsKIAogICAg
IHN0YXRpYyBTY3JpcHRWYWx1ZSB1bmRlZmluZWQoKSB7IHJldHVybiBTY3JpcHRWYWx1ZSh2ODo6
VW5kZWZpbmVkKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQxYWNmMDJlMGEz
MWI2MzAyZjU0ZWVkZjA4YzhlNjIzOTA5OGY4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcApAQCAtMCww
ICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdP
T0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVudC5oIgorCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNs
dWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNs
dWRlICJWOEludGVudC5oIgorI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJW
OFByb3h5LmgiCisjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZW50Ojpjb25zdHJ1Y3RvckNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uSW50
ZW50LkNvbnN0cnVjdG9yIik7CisKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBi
ZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisgICAgaWYg
KENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0
aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKyAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3Vt
ZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMSkg
eworICAgICAgICAvLyBVc2UgdGhlIGRpY3Rpb25hcnkgY29uc3RydWN0b3IuIFRoaXMgYmxvY2sg
d2lsbCByZXR1cm4gaWYgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50IGlzbid0IGEgdmFsaWQgRGlj
dGlvbmFyeS4KKyAgICAgICAgRVhDRVBUSU9OX0JMT0NLKERpY3Rpb25hcnksIG9wdGlvbnMsIGFy
Z3NbMF0pOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPElu
dGVudD4gaW1wbCA9IEludGVudDo6Y3JlYXRlKFNjcmlwdFN0YXRlOjpjdXJyZW50KCksIG9wdGlv
bnMsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZWMpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwg
JmluZm8sIGltcGwuZ2V0KCkpOworICAgICAgICByZXR1cm4gdG9WOChpbXBsLnJlbGVhc2UoKSwg
YXJncy5Ib2xkZXIoKSk7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
U1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBhY3Rp
b24sIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkp
OworICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8
PiwgdHlwZSwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZp
bmVkKSk7CisgICAgTWVzc2FnZVBvcnRBcnJheSBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0
OworICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdDsKKyAg
ICBpZiAoYXJncy5MZW5ndGgoKSA+IDMpIHsKKyAgICAgICAgaWYgKCFleHRyYWN0VHJhbnNmZXJh
YmxlcyhhcmdzWzNdLCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCBhcnJheUJ1ZmZlckFy
cmF5VHJhbnNmZXJMaXN0KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBu
b3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB9Cisg
ICAgYm9vbCBkYXRhRGlkVGhyb3cgPSBmYWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1syXSwgJm1l
c3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsICZhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0
LCBkYXRhRGlkVGhyb3cpOworICAgIGlmIChkYXRhRGlkVGhyb3cpCisgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CisKKyAgICBSZWZQdHI8SW50ZW50PiBpbXBsID0gSW50ZW50OjpjcmVh
dGUoYWN0aW9uLCB0eXBlLCBkYXRhLCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCBlYyk7
CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKKyAg
ICBpZiAoZWMpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKworICAgIFY4RE9NV3Jh
cHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCAmaW5mbywgaW1wbC5nZXQoKSk7CisgICAgVjhE
T01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbC5yZWxlYXNlKCksIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikpOworICAgIHJldHVybiBhcmdzLkhv
bGRlcigpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dAppbmRleCA3NjZjZmQw
YTRkMDQ3YjU3NjRjODgzM2I5MDRjYWRmNWM5YTRjNTY3Li5iZmYwYTY2YzQyZjdkMzc0M2UxZjAy
MzZiYzQ2MWJiZjQyNDg0MTM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dl
Yi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93
ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0CkBAIC0xLDYgKzEsNiBAQAogUEFTUyBuYXZpZ2F0
b3Iud2Via2l0U3RhcnRBY3Rpdml0eSBpcyBkZWZpbmVkLgogUEFTUyB2YXIgaW50ZW50ID0gbmV3
IFdlYktpdEludGVudCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJn
dW1lbnRzLgotUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdhJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJ2EnKSB0
aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCiBQQVNT
IG5ldyBXZWJLaXRJbnRlbnQoJycsJycsJycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFY
X0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KIFBBU1MgbmV3IFdlYktpdEludGVudCgnJywnYicsJ2Mn
KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCiBQ
QVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJycsJ2MnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZ
TlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJp
bnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWIt
aW50ZW50cy1hcGkuaHRtbAppbmRleCAxZGUxN2EwOTZlMWU4MTVmZmJiYWEzOGYxNzNhZDc1ZDVl
MTM1NWQzLi4yNjJjYTBkYTBmYzE0MTYzZTcxMGE4ODM2OWQ5ZTEzNzYzMzA0ZmMzIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKQEAgLTgsNyArOCw3IEBA
CiAgICAgICBzaG91bGRCZURlZmluZWQoIm5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5Iik7
CiAgICAgICAKICAgICAgIHNob3VsZFRocm93KCJ2YXIgaW50ZW50ID0gbmV3IFdlYktpdEludGVu
dCgpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzJyIpOzsKLSAgICAgIHNob3Vs
ZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogTm90IGVub3VnaCBh
cmd1bWVudHMnIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnYScpIiwg
IidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKICAgICAgIHNob3VsZFRo
cm93KCJuZXcgV2ViS2l0SW50ZW50KCcnLCcnLCcnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgn
JywnYicsJ2MnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CiAg
ICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnJywnJywnYycpIiwgIidFcnJvcjog
U1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lYTU3NWI5ZDRlYmQ5ZDBjMjY2NzE0YTQ1NjJhZTMzMjdjNzI2ODNj
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1v
YmotY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNiBAQAorUmVjZWl2ZWQgV2Vi
IEludGVudDogYWN0aW9uPWFjdGlvbjEgdHlwZT10ZXh0L3BsYWluCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyogc2VudCBvYmplY3QgaW50ZW50CisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0
cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25z
dHJ1Y3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiNzYwNDA1MjAwNTNiNmQwOTIwZDczZjJhZjExZGI3
YWY5Mzg1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1p
bnRlbnRzLW9iai1jb25zdHJ1Y3Rvci5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzxodG1sPgorICA8
aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViLWludGVudHMtdGVz
dGluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgIGZ1bmN0aW9uIGJ1dHRvbkNs
aWNrZWQoKSB7CisgICAgICAgIHZhciBpbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAg
ICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxh
aW4iLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSJ9KTsKKyAgICAgICAgbmF2aWdhdG9y
LndlYmtpdFN0YXJ0QWN0aXZpdHkoaW50ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBvYmpl
Y3QgaW50ZW50Iik7CisgICAgICB9CisgICAgPC9zY3JpcHQ+CisgIDwvaGVhZD4KKzxib2R5IG9u
bG9hZD0ic2ltdWxhdGVCdXR0b25QcmVzcygpIj4KKzxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJi
dXR0b24iIHZhbHVlPSJTdGFydCBXZWIgSW50ZW50IiBvbm1vdXNldXA9ImJ1dHRvbkNsaWNrZWQo
KSI+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137707</attachid>
            <date>2012-04-18 09:33:38 -0700</date>
            <delta_ts>2012-04-18 16:58:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120418093337.patch</filename>
            <type>text/plain</type>
            <size>23443</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0MzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmIyZTIzNWQ1MTcyNDU2
YTE5YWQzZDljN2YwYmRkMTBlMmJmMmJhMy4uMmJlYzUyZTRmMmYzZGU3OGMyNDljM2Y4YzA1M2Zi
ZTZmNjYyMjEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4gVGhpcyB3aWxsCisgICAg
ICAgIGhvcGVmdWxseSBiZSB0ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2lu
ZyB0aGlzIGNvbnN0cnVjdG9yLAorICAgICAgICB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4K
KyAgICAgICAgQWRkZWQgbGF5b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAg
ICAgIHdlYmludGVudHMvd2ViLWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDIyMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMTYgIEhhamltZSBNb3Jy
aXRhICA8bW9ycml0YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgaW5zZXJ0ZWRJbnRvRG9jdW1l
bnQgYW5kIGluc2VydGVkSW50b1RyZWUgc2hvdWxkIGJlIHVuaXRpZmVkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcAppbmRleCAwNTNkNDI5Y2ZhMWM5NzIzZjk2MzZj
Mzc5ZjNhMzkxODVkZDQ5NGJlLi5hZmNjNmYzNGIzZjQxNTQ5OTM3ZjdhZDQxMzBkMWE3NGYyZjI3
YzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcApAQCAtMzMs
MTEgKzMzLDEyIEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTWVz
c2FnZVBvcnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SW50
ZW50PiBJbnRlbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0
eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCitQYXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGRhdGEsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9F
UlI7CkBAIC00OCwzOSArNDksNjkgQEAgUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3MKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9u
LCB0eXBlLCBkYXRhKSk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFu
bmVscyA9IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywgZWMpOworCisgICAg
V1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBleHRyYXM7CisgICAgU3RyaW5nIHNlcnZpY2U7
CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEsIGNo
YW5uZWxzLnJlbGVhc2UoKSwgZXh0cmFzLCBzZXJ2aWNlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW50
ZW50PiBJbnRlbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0
eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2Fn
ZVBvcnRBcnJheSYgcG9ydHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJbnRlbnQ+
IEludGVudDo6Y3JlYXRlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgRGljdGlvbmFy
eSYgcGFyYW1ldGVycywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKGFjdGlvbi5pc0Vt
cHR5KCkpIHsKKyAgICBTdHJpbmcgYWN0aW9uOworICAgIGJvb2wgYWN0aW9uRXhpc3RzID0gcGFy
YW1ldGVycy5nZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soImFjdGlvbiIsIGFjdGlvbik7Cisg
ICAgU3RyaW5nIHR5cGU7CisgICAgYm9vbCB0eXBlRXhpc3RzID0gcGFyYW1ldGVycy5nZXRXaXRo
VW5kZWZpbmVkT3JOdWxsQ2hlY2soInR5cGUiLCB0eXBlKTsKKyAgICBTdHJpbmcgc2VydmljZTsK
KyAgICBwYXJhbWV0ZXJzLmdldCgic2VydmljZSIsIHNlcnZpY2UpOworCisgICAgaWYgKCFhY3Rp
b25FeGlzdHMgfHwgYWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAodHlwZS5pc0VtcHR5KCkpIHsKKyAg
ICBpZiAoIXR5cGVFeGlzdHMgfHwgdHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZWMgPSBTWU5U
QVhfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMo
JnBvcnRzLCBlYyk7CisgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0czsKKyAgICBib29sIHBvcnRz
RXhpc3RzID0gcGFyYW1ldGVycy5nZXQoInRyYW5zZmVyIiwgcG9ydHMpOworICAgIE93blB0cjxN
ZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHM7CisgICAgaWYgKHBvcnRzRXhpc3RzKQor
ICAgICAgICBjaGFubmVscyA9IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywg
ZWMpOworCisgICAgU2NyaXB0VmFsdWUgZGF0YVZhbHVlOworICAgIGJvb2wgZGF0YUV4aXN0cyA9
IHBhcmFtZXRlcnMuZ2V0KCJkYXRhIiwgZGF0YVZhbHVlKTsKKyAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkRGF0YTsKKyAgICBpZiAoZGF0YUV4aXN0cykgeworICAg
ICAgYm9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAgICAgc2VyaWFsaXplZERhdGEgPSBkYXRhVmFs
dWUuc2VyaWFsaXplKHNjcmlwdFN0YXRlLCAmcG9ydHMsIDAsIGRpZFRocm93KTsKKyAgICAgIGlm
IChkaWRUaHJvdykgeworICAgICAgICAgIGVjID0gREFUQV9DTE9ORV9FUlI7CisgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICB9CisgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRl
bnQoYWN0aW9uLCB0eXBlLCBkYXRhLCBjaGFubmVscy5yZWxlYXNlKCkpKTsKLX0KKyAgICBXVEY6
Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJhczsKKyAgICBEaWN0aW9uYXJ5IGV4dHJhc0Rp
Y3Rpb25hcnk7CisgICAgYm9vbCBleHRyYXNFeGlzdHMgPSBwYXJhbWV0ZXJzLmdldCgiZXh0cmFz
IiwgZXh0cmFzRGljdGlvbmFyeSk7CisgICAgaWYgKGV4dHJhc0V4aXN0cykgeworICAgICAgICAv
LyBUT0RPOiBmaWxsIGluIGV4dHJhcyBIYXNoTWFwIHdpdGggZXh0cmFzRGljdGlvbmFyeS4gSXMg
dGhlcmUgYSBoZWxwZXIgZm9yCisgICAgICAgIC8vIHRoaXM/CisgICAgfQogCi1JbnRlbnQ6Oklu
dGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSkKLSAgICA6IG1fYWN0aW9uKGFjdGlvbikKLSAg
ICAsIG1fdHlwZSh0eXBlKQotewotICAgIGlmIChkYXRhKQotICAgICAgICBtX2RhdGEgPSBkYXRh
OwotICAgIGVsc2UKLSAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxs
VmFsdWUoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIHNl
cmlhbGl6ZWREYXRhLnJlbGVhc2UoKSwgY2hhbm5lbHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZp
Y2UpKTsKIH0KIAotSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0
cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKQorSW50ZW50OjpJbnRlbnQoY29u
c3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAgICAgICAgICAgIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQ
b3J0Q2hhbm5lbEFycmF5PiBwb3J0cywKKyAgICAgICAgICAgICAgIGNvbnN0IFdURjo6SGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhcywgY29uc3QgU3RyaW5nJiBzZXJ2aWNlKQogICAgIDog
bV9hY3Rpb24oYWN0aW9uKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3BvcnRzKHBvcnRz
KQorICAgICwgbV9zZXJ2aWNlKHNlcnZpY2UpCisgICAgLCBtX2V4dHJhcyhleHRyYXMpCiB7CiAg
ICAgaWYgKGRhdGEpCiAgICAgICAgIG1fZGF0YSA9IGRhdGE7CkBAIC05OCw2ICsxMjksMTEgQEAg
Y29uc3QgU3RyaW5nJiBJbnRlbnQ6OnR5cGUoKSBjb25zdAogICAgIHJldHVybiBtX3R5cGU7CiB9
CiAKK2NvbnN0IFN0cmluZyYgSW50ZW50OjpzZXJ2aWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zZXJ2aWNlOworfQorCiBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEludGVudDo6ZGF0YSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS5nZXQoKTsKQEAgLTEwOCw2ICsxNDQsMTEgQEAgTWVz
c2FnZVBvcnRDaGFubmVsQXJyYXkqIEludGVudDo6bWVzc2FnZVBvcnRzKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9wb3J0cy5nZXQoKTsKIH0KIAorY29uc3QgV1RGOjpIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiYgSW50ZW50OjpleHRyYXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2V4dHJhczsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCmluZGV4IDMzZWY2OWUwNDQx
MDU5NmUyNDE1MzM0ODVlZmJjOWY1YzRlNmI2ZDQuLmVkM2MyN2E4NjcyMjNiYTEwODZiNjBlMjdj
M2U3NjI4NmNmODRlYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgK
QEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShXRUJfSU5URU5UUykKIAorI2luY2x1ZGUg
IkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC00MSwzMiArNDIs
NDAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTY3JpcHRTdGF0ZTsKIGNsYXNz
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAog
Y2xhc3MgSW50ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW50PiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEs
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYgcG9ydHMsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShTY3Jp
cHRTdGF0ZSosIGNvbnN0IERpY3Rpb25hcnkmLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBjb25z
dCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0
OwogICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0OwogCi0gICAgaW50IGlk
ZW50aWZpZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldElkZW50aWZpZXIoaW50KTsKLQogICAgIE1l
c3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBtZXNzYWdlUG9ydHMoKSBjb25zdDsKKyAgICBjb25zdCBT
dHJpbmcmIHNlcnZpY2UoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEludGVudChjb25zdCBT
dHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLAorICAgICAgICAgICBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheT4gcG9ydHMsCisgICAgICAgICAgIGNvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mIGV4dHJhcywgY29uc3QgU3RyaW5nJiBzZXJ2aWNlKTsKKworICAgIGNvbnN0IFdURjo6
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhcygpIGNvbnN0OwogCiBwcml2YXRlOgotICAg
IEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSk7Ci0gICAgSW50ZW50KGNvbnN0IFN0cmlu
ZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cyk7
CiAKICAgICBTdHJpbmcgbV9hY3Rpb247CiAgICAgU3RyaW5nIG1fdHlwZTsKKwogICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fZGF0YTsKICAgICBPd25QdHI8TWVzc2FnZVBvcnRD
aGFubmVsQXJyYXk+IG1fcG9ydHM7CisKKyAgICBTdHJpbmcgbV9zZXJ2aWNlOworICAgIFdURjo6
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9leHRyYXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCmluZGV4IGVm
MDgyNTA3MzRmZmM3OWIxOTQ5ODBlYzgyNDNlZWIzNDQ4YWM1MmUuLjdiZTU4NmE3NjMyMjRjMTM3
MWQyNmRjOGM1MjAxY2UxNjBmZGFjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW50ZW50cy9JbnRlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnQuaWRsCkBAIC0yNiw3ICsyNiw5IEBACiBtb2R1bGUgd2luZG93IHsKICAgaW50ZXJm
YWNlIFsKICAgICAgIENvbmRpdGlvbmFsPVdFQl9JTlRFTlRTLAorICAgICAgQ3VzdG9tQ29uc3Ry
dWN0b3IsCiAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgYWN0aW9uLCBpbiBET01TdHJp
bmcgdHlwZSwgaW4gW09wdGlvbmFsPURlZmF1bHRJc051bGxTdHJpbmcsIFRyYW5zZmVyTGlzdD10
cmFuc2Zlckxpc3RdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRhLCBpbiBbT3B0aW9uYWw9RGVm
YXVsdElzVW5kZWZpbmVkXSBBcnJheSB0cmFuc2Zlckxpc3QpLAorICAgICAgQ29uc3RydWN0b3Io
aW4gRGljdGlvbmFyeSBwYXJhbWV0ZXJzKSwKICAgICAgIENvbnN0cnVjdG9yUmFpc2VzRXhjZXB0
aW9uCiAgIF0gSW50ZW50IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBh
Y3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjViNGIxNzE1NDY5MThjZTU0OTg0OWIwMmNhZTFl
ZDc1OWNkMGQ3Zi4uZjEzZGE0YTgyMzY1ZDBjMmRiODRmZmQ0NTI2NTQzNDBjNTc5MzVjMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMjI3Nyw2ICsyMjc3LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9jdXN0b20vVjhJbnQxNkFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SW50MzJBcnJheUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEludDhBcnJheUN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcAppbmRleCBmZDRkYTFm
YjAwNmNmY2Y2NDE4OWY4MjM5ZDhlNmNiMjBmMWM2YWVhLi5hN2Q2NWE1NjdjZjc3Njg3MGM0ZmNi
MDg0ZDM1NDRiZDZkMDE4ZGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9EaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9u
YXJ5LmNwcApAQCAtNDEyLDQgKzQxMiwxNiBAQCBib29sIERpY3Rpb25hcnk6OmdldChjb25zdCBT
dHJpbmcmIGtleSwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mIHZhbAogCiAj
ZW5kaWYKIAorYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIERpY3Rpb25h
cnkmIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7Cisg
ICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKHY4VmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgIHZhbHVlID0gRGljdGlvbmFyeSh2
OFZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgKaW5kZXggMzIxNjRiOGNiYjIz
YTU0YWJjNTg0OTc5OTYyNTk2YzVmZDJmZjgzMS4uZmMzYTQzNWU5MjFkYzljNzFkZDU0YTlhNzNl
Y2E5ZjAyMjE2YzIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGlj
dGlvbmFyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaApA
QCAtODEsNiArODEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVm
UHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mKSBjb25zdDsKICNlbmRpZgogICAgIGJv
b2wgZ2V0KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYpIGNvbnN0OworICAg
IGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIERpY3Rpb25hcnkmKSBjb25zdDsKIAogICAgIGJvb2wg
Z2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IFN0cmluZyYsIFN0cmluZyYpIGNvbnN0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKaW5kZXggZWNj
MzY3MzYyYTgzOGI3Zjk4OTI4ZWQwNTk5ZDYzNzY5ZjA5N2NiNy4uY2E1NThjN2M3NDk3ZTY5Y2Iw
Mzc3Y2Y5MTY4MmFkOWVkMmEyZjhlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFZhbHVlLmNwcApAQCAtNDQsNiArNDQsMTMgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXQK
ICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgpKTsKIH0K
IAorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxp
emUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBv
cnRzLCBBcnJheUJ1ZmZlckFycmF5KiBhcnJheUJ1ZmZlcnMsIGJvb2wmIGRpZFRocm93KQorewor
ICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKKyAgICByZXR1cm4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgpLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVy
cywgZGlkVGhyb3cpOworfQorCiBTY3JpcHRWYWx1ZSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUo
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQog
ewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRWYWx1ZS5oCmluZGV4IGQ0MTI5MDFmZGFkOTUwZWU4NmY4YjlkZWVkY2Ix
NzgyZDE1YTAxMWUuLmY2MjMzOTQ1NGM1MzI1Yjg2MjYxNGM4ZTg2NDhlYmQ2ODMyZmZkMjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaApAQCAtMzYsMTQgKzM2LDIw
IEBACiAKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWZuZGVmIE5ERUJVRwogI2luY2x1ZGUgIlY4UHJveHku
aCIgIC8vIGZvciByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBnbG9iYWwgaGFuZGxlcy4KICNlbmRp
ZgogCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIEFycmF5QnVmZmVyOworfQorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEluc3BlY3RvclZhbHVlOworY2xhc3MgTWVzc2FnZVBvcnQ7CiBj
bGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIGNsYXNzIFNjcmlwdFZhbHVlIHsKQEAgLTEz
MSw2ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSopOworICAgIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBNZXNzYWdlUG9ydEFy
cmF5KiwgQXJyYXlCdWZmZXJBcnJheSosIGJvb2wmKTsKICAgICBzdGF0aWMgU2NyaXB0VmFsdWUg
ZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqKTsKIAogICAg
IHN0YXRpYyBTY3JpcHRWYWx1ZSB1bmRlZmluZWQoKSB7IHJldHVybiBTY3JpcHRWYWx1ZSh2ODo6
VW5kZWZpbmVkKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQxYWNmMDJlMGEz
MWI2MzAyZjU0ZWVkZjA4YzhlNjIzOTA5OGY4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcApAQCAtMCww
ICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdP
T0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVudC5oIgorCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNs
dWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNs
dWRlICJWOEludGVudC5oIgorI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJW
OFByb3h5LmgiCisjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZW50Ojpjb25zdHJ1Y3RvckNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uSW50
ZW50LkNvbnN0cnVjdG9yIik7CisKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBi
ZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisgICAgaWYg
KENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0
aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKyAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3Vt
ZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMSkg
eworICAgICAgICAvLyBVc2UgdGhlIGRpY3Rpb25hcnkgY29uc3RydWN0b3IuIFRoaXMgYmxvY2sg
d2lsbCByZXR1cm4gaWYgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50IGlzbid0IGEgdmFsaWQgRGlj
dGlvbmFyeS4KKyAgICAgICAgRVhDRVBUSU9OX0JMT0NLKERpY3Rpb25hcnksIG9wdGlvbnMsIGFy
Z3NbMF0pOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPElu
dGVudD4gaW1wbCA9IEludGVudDo6Y3JlYXRlKFNjcmlwdFN0YXRlOjpjdXJyZW50KCksIG9wdGlv
bnMsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZWMpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwg
JmluZm8sIGltcGwuZ2V0KCkpOworICAgICAgICByZXR1cm4gdG9WOChpbXBsLnJlbGVhc2UoKSwg
YXJncy5Ib2xkZXIoKSk7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
U1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBhY3Rp
b24sIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkp
OworICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8
PiwgdHlwZSwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZp
bmVkKSk7CisgICAgTWVzc2FnZVBvcnRBcnJheSBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0
OworICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdDsKKyAg
ICBpZiAoYXJncy5MZW5ndGgoKSA+IDMpIHsKKyAgICAgICAgaWYgKCFleHRyYWN0VHJhbnNmZXJh
YmxlcyhhcmdzWzNdLCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCBhcnJheUJ1ZmZlckFy
cmF5VHJhbnNmZXJMaXN0KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBu
b3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB9Cisg
ICAgYm9vbCBkYXRhRGlkVGhyb3cgPSBmYWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1syXSwgJm1l
c3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsICZhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0
LCBkYXRhRGlkVGhyb3cpOworICAgIGlmIChkYXRhRGlkVGhyb3cpCisgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CisKKyAgICBSZWZQdHI8SW50ZW50PiBpbXBsID0gSW50ZW50OjpjcmVh
dGUoYWN0aW9uLCB0eXBlLCBkYXRhLCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCBlYyk7
CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKKyAg
ICBpZiAoZWMpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKworICAgIFY4RE9NV3Jh
cHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCAmaW5mbywgaW1wbC5nZXQoKSk7CisgICAgVjhE
T01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbC5yZWxlYXNlKCksIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikpOworICAgIHJldHVybiBhcmdzLkhv
bGRlcigpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSW50ZW50LmgKaW5kZXggNzNhNjIxMzJhZDYzMzljNTZkNDU2M2U0MjRk
YjZmNThkZmQwMzM4Mi4uNjcwODg1ODJhZjQxMTMzYTdiMzk1NDA5NGQ1OWU1Yjk0MjY4MTRiNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmgKQEAgLTYzLDYgKzYz
LDcgQEAgcHVibGljOgogICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGFjdGlvbigpIGNvbnN0
OwogICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIHR5cGUoKSBjb25zdDsKICAgICBXRUJLSVRf
RVhQT1JUIFdlYlN0cmluZyBkYXRhKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJp
bmcgc2VydmljZSgpIGNvbnN0OwogCiAgICAgLy8gQ2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZiB0
aGUgcG9ydHMuCiAgICAgV0VCS0lUX0VYUE9SVCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSog
bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJbnRlbnQuY3BwCmluZGV4IDhhN2Q2YWFjNTQzYmQ5OTk5OWI4ZmE3OTg0M2EzNDAz
YWU1NjdjOWUuLmU3ZjAwMjRlNzk1NTI0N2Q4NDg0MTI1Y2I3MmI3ZDVkNWUzZTg2OTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcApAQCAtMTAzLDYgKzEwMywxNSBA
QCBXZWJTdHJpbmcgV2ViSW50ZW50OjpkYXRhKCkgY29uc3QKICNlbmRpZgogfQogCitXZWJTdHJp
bmcgV2ViSW50ZW50OjpzZXJ2aWNlKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMp
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2VydmljZSgpOworI2Vsc2UKKyAgICByZXR1cm4gV2Vi
U3RyaW5nKCk7CisjZW5kaWYKK30KKwogV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdlYklu
dGVudDo6bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogewogICAgIC8vIE5vdGU6
IHNlZSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZS4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRleCBiNjVl
NmIwMTA4YWYzYmE2ZDAzOWM0MDg0OGMzODAwMDA2NDMyNGU4Li4yNDllMmZhNWY5OTFmNWM2ODc3
MjQwODRkOWJkYjA5NGNhYTBlMDAzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViVmlld0hvc3QuY3BwCkBAIC0xMzM1LDYgKzEzMzUsOCBAQCB2b2lkIFdlYlZpZXdIb3N0
OjpkaXNwYXRjaEludGVudChXZWJGcmFtZSogc291cmNlLCBjb25zdCBXZWJJbnRlbnRSZXF1ZXN0
JiByZXF1ZQogICAgICAgICAgICAgKCpwb3J0cylbaV0tPmRlc3Ryb3koKTsKICAgICAgICAgZGVs
ZXRlIHBvcnRzOwogICAgIH0KKyAgICBpZiAoIXJlcXVlc3QuaW50ZW50KCkuc2VydmljZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcHJpbnRmKCJFeHBsaWNpdCBpbnRlbnQgc2VydmljZTogJXNcbiIs
IHJlcXVlc3QuaW50ZW50KCkuc2VydmljZSgpLnV0ZjgoKS5kYXRhKCkpOwogfQogCiAvLyBQdWJs
aWMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1p
bnRlbnRzLWFwaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRl
bnRzLWFwaS1leHBlY3RlZC50eHQKaW5kZXggNzY2Y2ZkMGE0ZDA0N2I1NzY0Yzg4MzNiOTA0Y2Fk
ZjVjOWE0YzU2Ny4uYmZmMGE2NmM0MmY3ZDM3NDNlMWYwMjM2YmM0NjFiYmY0MjQ4NDEzNCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVk
LnR4dApAQCAtMSw2ICsxLDYgQEAKIFBBU1MgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkg
aXMgZGVmaW5lZC4KIFBBU1MgdmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgbmV3IFdlYktp
dEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1l
bnRzLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdhJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2ViS2l0SW50ZW50KCcnLCcn
LCcnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIu
CiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJykgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2ViS2l0SW50ZW50KCcn
LCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGku
aHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKaW5kZXgg
MWRlMTdhMDk2ZTFlODE1ZmZiYmFhMzhmMTczYWQ3NWQ1ZTEzNTVkMy4uMjYyY2EwZGEwZmMxNDE2
M2U3MTBhODgzNjlkOWUxMzc2MzMwNGZjMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViaW50
ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dl
Yi1pbnRlbnRzLWFwaS5odG1sCkBAIC04LDcgKzgsNyBAQAogICAgICAgc2hvdWxkQmVEZWZpbmVk
KCJuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eSIpOwogICAgICAgCiAgICAgICBzaG91bGRU
aHJvdygidmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoKSIsICInVHlwZUVycm9yOiBOb3Qg
ZW5vdWdoIGFyZ3VtZW50cyciKTs7Ci0gICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVu
dCgnYScpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzJyIpOworICAgICAgc2hv
dWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJ2EnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgn
JywnJywnJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAg
ICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJykiLCAiJ0Vycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAgICAgc2hvdWxkVGhyb3coIm5ldyBX
ZWJLaXRJbnRlbnQoJycsJycsJ2MnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRp
b24gMTInIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRz
LW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dl
Yi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGU3NDk0
N2E0NTRiZjQwZjhjMWE4YzQ2ZmJlZjhmNTFmZTkwNDM0ZAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDExIEBACitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rpb249YWN0aW9u
MSB0eXBlPXRleHQvcGxhaW4KK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlvbj1hY3Rpb24xIHR5
cGU9dGV4dC9wbGFpbitleHBsaWNpdAorRXhwbGljaXQgaW50ZW50IHNlcnZpY2U6IGV4cGxpY2l0
CitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rpb249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4rZXh0
cmFzCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyog
c2VudCBvYmplY3QgaW50ZW50CisqIHNlbnQgZXhwbGljaXQgaW50ZW50CisqIHNlbnQgaW50ZW50
IHdpdGggZXh0cmFzCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWlu
dGVudHMtb2JqLWNvbnN0cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1p
bnRlbnRzLW9iai1jb25zdHJ1Y3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwYzc0ZDI1ZTAzMTg3NjI3
NDA0OTM0ODU0ZTQ5MGEyY2NjYWMxNTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci5odG1sCkBAIC0wLDAgKzEsMzYg
QEAKKzxodG1sPgorICA8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
d2ViLWludGVudHMtdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgIGZ1
bmN0aW9uIGJ1dHRvbkNsaWNrZWQoKSB7CisgICAgICAgIHZhciBzaW1wbGVJbnRlbnQgPSBuZXcg
V2ViS2l0SW50ZW50KAorICAgICAgICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAg
ICAgICAidHlwZSI6InRleHQvcGxhaW4iLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSJ9
KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoc2ltcGxlSW50ZW50KTsK
KyAgICAgICAgZGVidWcoIiogc2VudCBvYmplY3QgaW50ZW50Iik7CisKKyAgICAgICAgdmFyIGV4
cGxpY2l0SW50ZW50ID0gbmV3IFdlYktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoi
YWN0aW9uMSIsCisgICAgICAgICAgICAgInR5cGUiOiJ0ZXh0L3BsYWluK2V4cGxpY2l0IiwKKyAg
ICAgICAgICAgICAiZGF0YSI6Im1lc3NhZ2UiLAorICAgICAgICAgICAgICJzZXJ2aWNlIiA6ICJl
eHBsaWNpdCJ9KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoZXhwbGlj
aXRJbnRlbnQpOworICAgICAgICBkZWJ1ZygiKiBzZW50IGV4cGxpY2l0IGludGVudCIpOworCisg
ICAgICAgIHZhciBleHRyYXNJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAgICAgICAg
eyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxhaW4rZXh0
cmFzIiwKKyAgICAgICAgICAgICAiZGF0YSI6Im1lc3NhZ2UiLAorICAgICAgICAgICAgICJleHRy
YXMiOnsiYSI6ImIifX0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShl
eHRyYXNJbnRlbnQpOworICAgICAgICBkZWJ1ZygiKiBzZW50IGludGVudCB3aXRoIGV4dHJhcyIp
OworICAgICAgfQorICAgIDwvc2NyaXB0PgorICA8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InNpbXVs
YXRlQnV0dG9uUHJlc3MoKSI+Cis8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iYnV0dG9uIiB2YWx1
ZT0iU3RhcnQgV2ViIEludGVudCIgb25tb3VzZXVwPSJidXR0b25DbGlja2VkKCkiPgorPHNjcmlw
dCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137804</attachid>
            <date>2012-04-18 16:58:26 -0700</date>
            <delta_ts>2012-04-18 18:20:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120418165825.patch</filename>
            <type>text/plain</type>
            <size>24819</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODZkNzk0NjM2YWUxNmI2
MDE1ZWNlY2UxMGY2NDAzMWY4OGVjNDI1ZC4uY2E1ZTRkODkyYTU4ZGViZWRmMjhlYjU1YWI4ZTdm
YWViNzNmYzU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGhvcGVmdWxseSBiZSB0
ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2luZyB0aGlzCisgICAgICAgIGNv
bnN0cnVjdG9yLCB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4KKyAgICAgICAgQWRkZWQgbGF5
b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAgICAgIHdlYmludGVudHMvd2Vi
LWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMTggIExldmkgV2VpbnRy
YXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dENHJ3Mg
cm91bmRUb0RldmljZVBpeGVscyBzaG91bGQgcm91bmQgZXZlbiB3aGVuIHRoZXJlJ3Mgbm8gdHJh
bnNmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwCmluZGV4IDA1
M2Q0MjljZmExYzk3MjNmOTYzNmMzNzlmM2EzOTE4NWRkNDk0YmUuLmI1NTkyZGI1MDJmMzRkMjNh
MDY1Y2U4ZTRkYzQ4NWQxYmQ5MDUyNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW50ZW50cy9JbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnQuY3BwCkBAIC0zMywxMSArMzMsMTIgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgi
CiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6OmNy
ZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYgcG9y
dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChhY3Rpb24uaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKQEAgLTQ4LDM5ICs0OSw2NyBAQCBQYXNzUmVmUHRyPElu
dGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dHlwZSwgUGFzcwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEpKTsKKyAgICBPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMo
JnBvcnRzLCBlYyk7CisKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJhczsK
KyAgICBTdHJpbmcgc2VydmljZTsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFj
dGlvbiwgdHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2UpKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMp
CitQYXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLCBjb25zdCBEaWN0aW9uYXJ5JiBwYXJhbWV0ZXJzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkgeworICAgIFN0cmluZyBhY3Rpb247CisgICAgYm9v
bCBhY3Rpb25FeGlzdHMgPSBwYXJhbWV0ZXJzLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygi
YWN0aW9uIiwgYWN0aW9uKTsKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBib29sIHR5cGVFeGlzdHMg
PSBwYXJhbWV0ZXJzLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygidHlwZSIsIHR5cGUpOwor
ICAgIFN0cmluZyBzZXJ2aWNlOworICAgIHBhcmFtZXRlcnMuZ2V0KCJzZXJ2aWNlIiwgc2Vydmlj
ZSk7CisKKyAgICBpZiAoIWFjdGlvbkV4aXN0cyB8fCBhY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICh0
eXBlLmlzRW1wdHkoKSkgeworICAgIGlmICghdHlwZUV4aXN0cyB8fCB0eXBlLmlzRW1wdHkoKSkg
ewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMgPSBNZXNzYWdlUG9y
dDo6ZGlzZW50YW5nbGVQb3J0cygmcG9ydHMsIGVjKTsKKyAgICBNZXNzYWdlUG9ydEFycmF5IHBv
cnRzOworICAgIGJvb2wgcG9ydHNFeGlzdHMgPSBwYXJhbWV0ZXJzLmdldCgidHJhbnNmZXIiLCBw
b3J0cyk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVsczsKKyAg
ICBpZiAocG9ydHNFeGlzdHMpCisgICAgICAgIGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2Vu
dGFuZ2xlUG9ydHMoJnBvcnRzLCBlYyk7CisKKyAgICBTY3JpcHRWYWx1ZSBkYXRhVmFsdWU7Cisg
ICAgYm9vbCBkYXRhRXhpc3RzID0gcGFyYW1ldGVycy5nZXQoImRhdGEiLCBkYXRhVmFsdWUpOwor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWREYXRhOworICAgIGlm
IChkYXRhRXhpc3RzKSB7CisgICAgICBib29sIGRpZFRocm93ID0gZmFsc2U7CisgICAgICBzZXJp
YWxpemVkRGF0YSA9IGRhdGFWYWx1ZS5zZXJpYWxpemUoc2NyaXB0U3RhdGUsICZwb3J0cywgMCwg
ZGlkVGhyb3cpOworICAgICAgaWYgKGRpZFRocm93KSB7CisgICAgICAgICAgZWMgPSBEQVRBX0NM
T05FX0VSUjsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CiAKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEsIGNoYW5uZWxzLnJlbGVh
c2UoKSkpOwotfQorICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZXh0cmFzOworICAg
IERpY3Rpb25hcnkgZXh0cmFzRGljdGlvbmFyeTsKKyAgICBib29sIGV4dHJhc0V4aXN0cyA9IHBh
cmFtZXRlcnMuZ2V0KCJleHRyYXMiLCBleHRyYXNEaWN0aW9uYXJ5KTsKKyAgICBpZiAoZXh0cmFz
RXhpc3RzKQorICAgICAgICBleHRyYXNEaWN0aW9uYXJ5LmdldE93blByb3BlcnRpZXNBc1N0cmlu
Z0hhc2hNYXAoZXh0cmFzKTsKIAotSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24s
IGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRh
dGEpCi0gICAgOiBtX2FjdGlvbihhY3Rpb24pCi0gICAgLCBtX3R5cGUodHlwZSkKLXsKLSAgICBp
ZiAoZGF0YSkKLSAgICAgICAgbV9kYXRhID0gZGF0YTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGF0
YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBlLCBzZXJpYWxpemVkRGF0YS5yZWxlYXNlKCksIGNo
YW5uZWxzLnJlbGVhc2UoKSwgZXh0cmFzLCBzZXJ2aWNlKSk7CiB9CiAKLUludGVudDo6SW50ZW50
KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5PiBwb3J0cykKK0ludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBT
dHJpbmcmIHR5cGUsCisgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMsCisg
ICAgICAgICAgICAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMs
IGNvbnN0IFN0cmluZyYgc2VydmljZSkKICAgICA6IG1fYWN0aW9uKGFjdGlvbikKICAgICAsIG1f
dHlwZSh0eXBlKQogICAgICwgbV9wb3J0cyhwb3J0cykKKyAgICAsIG1fc2VydmljZShzZXJ2aWNl
KQorICAgICwgbV9leHRyYXMoZXh0cmFzKQogewogICAgIGlmIChkYXRhKQogICAgICAgICBtX2Rh
dGEgPSBkYXRhOwpAQCAtOTgsNiArMTI3LDExIEBAIGNvbnN0IFN0cmluZyYgSW50ZW50Ojp0eXBl
KCkgY29uc3QKICAgICByZXR1cm4gbV90eXBlOwogfQogCitjb25zdCBTdHJpbmcmIEludGVudDo6
c2VydmljZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VydmljZTsKK30KKwogU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiBJbnRlbnQ6OmRhdGEoKSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEu
Z2V0KCk7CkBAIC0xMDgsNiArMTQyLDExIEBAIE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBJbnRl
bnQ6Om1lc3NhZ2VQb3J0cygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcG9ydHMuZ2V0KCk7CiB9CiAK
K2NvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIEludGVudDo6ZXh0cmFzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9leHRyYXM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5URU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9JbnRlbnQuaAppbmRleCAzM2VmNjllMDQ0MTA1OTZlMjQxNTMzNDg1ZWZiYzlmNWM0ZTZi
NmQ0Li5lZDNjMjdhODY3MjIzYmExMDg2YjYwZTI3YzNlNzYyODZjZjg0ZWM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpZiBF
TkFCTEUoV0VCX0lOVEVOVFMpCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAi
TWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydENoYW5uZWwuaCIKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgpAQCAtNDEsMzIgKzQyLDQwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgU2NyaXB0U3RhdGU7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAK
IHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNzIEludGVudCA6IHB1YmxpYyBSZWZD
b3VudGVkPEludGVudD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludGVudD4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIGNv
bnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoU2NyaXB0U3RhdGUqLCBjb25zdCBEaWN0aW9uYXJ5
JiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgY29uc3QgU3RyaW5nJiBhY3Rpb24oKSBjb25zdDsK
ICAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdDsKICAgICBTZXJpYWxpemVkU2NyaXB0VmFs
dWUqIGRhdGEoKSBjb25zdDsKIAotICAgIGludCBpZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRJZGVudGlmaWVyKGludCk7Ci0KICAgICBNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogbWVz
c2FnZVBvcnRzKCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiBzZXJ2aWNlKCkgY29uc3Q7CisK
K3Byb3RlY3RlZDoKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgdHlwZSwKKyAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRh
dGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzLAorICAgICAgICAg
ICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMsIGNvbnN0IFN0cmlu
ZyYgc2VydmljZSk7CisKKyAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBl
eHRyYXMoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rp
b24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IGRhdGEpOwotICAgIEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0
eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFzc093blB0cjxN
ZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMpOwogCiAgICAgU3RyaW5nIG1fYWN0aW9uOwog
ICAgIFN0cmluZyBtX3R5cGU7CisKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBt
X2RhdGE7CiAgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX3BvcnRzOworCisg
ICAgU3RyaW5nIG1fc2VydmljZTsKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1f
ZXh0cmFzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ludGVudHMvSW50ZW50LmlkbAppbmRleCBlZjA4MjUwNzM0ZmZjNzliMTk0OTgwZWM4MjQz
ZWViMzQ0OGFjNTJlLi43YmU1ODZhNzYzMjI0YzEzNzFkMjZkYzhjNTIwMWNlMTYwZmRhY2UyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbApAQCAtMjYsNyArMjYs
OSBAQAogbW9kdWxlIHdpbmRvdyB7CiAgIGludGVyZmFjZSBbCiAgICAgICBDb25kaXRpb25hbD1X
RUJfSU5URU5UUywKKyAgICAgIEN1c3RvbUNvbnN0cnVjdG9yLAogICAgICAgQ29uc3RydWN0b3Io
aW4gRE9NU3RyaW5nIGFjdGlvbiwgaW4gRE9NU3RyaW5nIHR5cGUsIGluIFtPcHRpb25hbD1EZWZh
dWx0SXNOdWxsU3RyaW5nLCBUcmFuc2Zlckxpc3Q9dHJhbnNmZXJMaXN0XSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUgZGF0YSwgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gQXJyYXkgdHJh
bnNmZXJMaXN0KSwKKyAgICAgIENvbnN0cnVjdG9yKGluIERpY3Rpb25hcnkgcGFyYW1ldGVycyks
CiAgICAgICBDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbgogICBdIEludGVudCB7CiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgYWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDQ5YTcyMWMwNzBiYmIwOTZjN2JhYmM1NDY2ZDdhZDNlZDAzOTI2M2UuLmZmYTZiMTM4YzI2Y2Nm
OGFkZmIwOWFjZWMwYjU2OTE2MmRhOGUzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIyNzgsNiAr
MjI3OCw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50MTZBcnJheUN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDMyQXJyYXlD
dXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQ4QXJyYXlD
dXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25z
dHJ1Y3Rvci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEphdmFTY3Jp
cHRDYWxsRnJhbWVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhMb2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvRGljdGlvbmFyeS5jcHAKaW5kZXggZmQ0ZGExZmIwMDZjZmNmNjQxODlmODIzOWQ4ZTZjYjIw
ZjFjNmFlYS4uMTQ5Mzg0YjMzMjc1YzhmMWU5NzU2M2Q1MDZmNWU1Mzc0MTI5YTE1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAKQEAgLTk4LDcgKzk4LDcgQEAg
Ym9vbCBEaWN0aW9uYXJ5OjpnZXRLZXkoY29uc3QgU3RyaW5nJiBrZXksIHY4OjpMb2NhbDx2ODo6
VmFsdWU+JiB2YWx1ZSkgY29uc3QKICAgICBBU1NFUlQoIW9wdGlvbnMuSXNFbXB0eSgpKTsKIAog
ICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhLZXkgPSB2OFN0cmluZyhrZXkpOwotICAgIGlm
ICghb3B0aW9ucy0+SGFzKHY4S2V5KSkKKyAgICBpZiAoIW9wdGlvbnMtPkhhcyh2OEtleS0+VG9T
dHJpbmcoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB2YWx1ZSA9IG9wdGlvbnMtPkdl
dCh2OEtleSk7CiAgICAgaWYgKHZhbHVlLklzRW1wdHkoKSkKQEAgLTQxMiw0ICs0MTIsMzggQEAg
Ym9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIFJlZlB0cjxTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdExpc3Q+JiB2YWwKIAogI2VuZGlmCiAKK2Jvb2wgRGljdGlvbmFyeTo6Z2V0
KGNvbnN0IFN0cmluZyYga2V5LCBEaWN0aW9uYXJ5JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2OFZhbHVlLT5Jc09iamVjdCgpKQor
ICAgICAgICB2YWx1ZSA9IERpY3Rpb25hcnkodjhWYWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworCitib29sIERpY3Rpb25hcnk6OmdldE93blByb3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAo
V1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaGFzaE1hcCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fb3B0aW9ucy0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChtX29wdGlvbnMpOworICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHByb3BlcnRpZXMgPSB3cmFw
cGVyLT5HZXRPd25Qcm9wZXJ0eU5hbWVzKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IHByb3BlcnRpZXMtPkxlbmd0aCgpOyArK2kpIHsKKyAgICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBrZXkgPSBwcm9wZXJ0aWVzLT5HZXQoaSktPlRvU3RyaW5nKCk7CisgICAgICBpZiAoa2V5Lklz
RW1wdHkoKSB8fCAha2V5LT5MZW5ndGgoKSB8fCAhd3JhcHBlci0+SGFzKGtleSkpCisgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gd3JhcHBl
ci0+R2V0KGtleSk7CisgICAgICBTdHJpbmcgc3RyaW5nS2V5ID0gdjhWYWx1ZVRvV2ViQ29yZVN0
cmluZyhrZXkpOworICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdjhWYWx1ZVRvV2ViQ29yZVN0
cmluZyh2YWx1ZSk7CisgICAgICBpZiAoIXN0cmluZ0tleS5pc0VtcHR5KCkpCisgICAgICAgICAg
aGFzaE1hcC5zZXQoc3RyaW5nS2V5LCBzdHJpbmdWYWx1ZSk7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9EaWN0aW9uYXJ5LmgKaW5kZXggMzIxNjRiOGNiYjIzYTU0YWJjNTg0OTc5OTYyNTk2YzVmZDJm
ZjgzMS4uYTFkNTZlZmE3YzVjNDA0ZTlmOWM4YTAyMTgxMTg3NjVlMGIzYmM4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRl
IDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApAQCAtODEsNiArODIsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPFNwZWVjaFJlY29n
bml0aW9uUmVzdWx0TGlzdD4mKSBjb25zdDsKICNlbmRpZgogICAgIGJvb2wgZ2V0KGNvbnN0IFN0
cmluZyYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0
IFN0cmluZyYsIERpY3Rpb25hcnkmKSBjb25zdDsKKyAgICBib29sIGdldE93blByb3BlcnRpZXNB
c1N0cmluZ0hhc2hNYXAoV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpIGNvbnN0OwogCiAg
ICAgYm9vbCBnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiwgU3RyaW5n
JikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcApp
bmRleCBlY2MzNjczNjJhODM4YjdmOTg5MjhlZDA1OTlkNjM3NjlmMDk3Y2I3Li5jYTU1OGM3Yzc0
OTdlNjljYjAzNzdjZjkxNjgyYWQ5ZWQyYTJmOGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0VmFsdWUuY3BwCkBAIC00NCw2ICs0NCwxMyBAQCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0VmFsdWU6OnNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdAogICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2OFZhbHVl
KCkpOwogfQogCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0VmFsdWU6
OnNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBt
ZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQXJyYXkqIGFycmF5QnVmZmVycywgYm9vbCYgZGlkVGhy
b3cpCit7CisgICAgU2NyaXB0U2NvcGUgc2NvcGUoc2NyaXB0U3RhdGUpOworICAgIHJldHVybiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2OFZhbHVlKCksIG1lc3NhZ2VQb3J0cywgYXJy
YXlCdWZmZXJzLCBkaWRUaHJvdyk7Cit9CisKIFNjcmlwdFZhbHVlIFNjcmlwdFZhbHVlOjpkZXNl
cmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSog
dmFsdWUpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUoc2NyaXB0U3RhdGUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKaW5kZXggZDQxMjkwMWZkYWQ5NTBlZTg2Zjhi
OWRlZWRjYjE3ODJkMTVhMDExZS4uZjYyMzM5NDU0YzUzMjViODYyNjE0YzhlODY0OGViZDY4MzJm
ZmQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCkBAIC0zNiwx
NCArMzYsMjAgQEAKIAogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSAi
VjhQcm94eS5oIiAgLy8gZm9yIHJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVyIGdsb2JhbCBoYW5kbGVz
LgogI2VuZGlmCiAKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgQXJyYXlCdWZmZXI7Cit9CisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5zcGVjdG9yVmFsdWU7CitjbGFzcyBNZXNzYWdl
UG9ydDsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogY2xhc3MgU2NyaXB0VmFsdWUg
ewpAQCAtMTMxLDYgKzEzNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlwdFN0YXRlKik7CisgICAgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIE1lc3Nh
Z2VQb3J0QXJyYXkqLCBBcnJheUJ1ZmZlckFycmF5KiwgYm9vbCYpOwogICAgIHN0YXRpYyBTY3Jp
cHRWYWx1ZSBkZXNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSop
OwogCiAgICAgc3RhdGljIFNjcmlwdFZhbHVlIHVuZGVmaW5lZCgpIHsgcmV0dXJuIFNjcmlwdFZh
bHVlKHY4OjpVbmRlZmluZWQoKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZDFh
Y2YwMmUwYTMxYjYzMDJmNTRlZWRmMDhjOGU2MjM5MDk4ZjgwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29uc3RydWN0b3IuY3Bw
CkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZW50LmgiCisK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5o
IgorI2luY2x1ZGUgIlY4SW50ZW50LmgiCisjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgorI2lu
Y2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbnRlbnQ6OmNvbnN0cnVj
dG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5JbnRlbnQuQ29uc3RydWN0b3IiKTsKKworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENh
bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3Ig
Y2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisK
KyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2RlOjpX
cmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworICAgIGlm
IChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91
Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICBpZiAoYXJncy5MZW5ndGgo
KSA9PSAxKSB7CisgICAgICAgIC8vIFVzZSB0aGUgZGljdGlvbmFyeSBjb25zdHJ1Y3Rvci4gVGhp
cyBibG9jayB3aWxsIHJldHVybiBpZiB0aGUKKyAgICAgICAgLy8gYXJndW1lbnQgaXNuJ3QgYSB2
YWxpZCBEaWN0aW9uYXJ5LgorICAgICAgICBFWENFUFRJT05fQkxPQ0soRGljdGlvbmFyeSwgb3B0
aW9ucywgYXJnc1swXSk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBS
ZWZQdHI8SW50ZW50PiBpbXBsID0gSW50ZW50OjpjcmVhdGUoU2NyaXB0U3RhdGU6OmN1cnJlbnQo
KSwgb3B0aW9ucywgZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihlYyk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhv
bGRlcigpLCAmaW5mbywgaW1wbC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGltcGwucmVs
ZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVy
PD4sIGFjdGlvbiwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5k
ZWZpbmVkKSk7CisgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBh
cmFtZXRlcjw+LCB0eXBlLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZhdWx0
SXNVbmRlZmluZWQpKTsKKyAgICBNZXNzYWdlUG9ydEFycmF5IG1lc3NhZ2VQb3J0QXJyYXlUcmFu
c2Zlckxpc3Q7CisgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJM
aXN0OworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMykgeworICAgICAgICBpZiAoIWV4dHJhY3RU
cmFuc2ZlcmFibGVzKGFyZ3NbM10sIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsIGFycmF5
QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3QpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
IkNvdWxkIG5vdCBleHRyYWN0IHRyYW5zZmVyYWJsZXMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOwor
ICAgIH0KKyAgICBib29sIGRhdGFEaWRUaHJvdyA9IGZhbHNlOworICAgIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdz
WzJdLCAmbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgJmFycmF5QnVmZmVyQXJyYXlUcmFu
c2Zlckxpc3QsIGRhdGFEaWRUaHJvdyk7CisgICAgaWYgKGRhdGFEaWRUaHJvdykKKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIFJlZlB0cjxJbnRlbnQ+IGltcGwgPSBJbnRl
bnQ6OmNyZWF0ZShhY3Rpb24sIHR5cGUsIGRhdGEsIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxp
c3QsIGVjKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRl
cigpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOworCisgICAg
VjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHdyYXBwZXIsICZpbmZvLCBpbXBsLmdldCgpKTsK
KyAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLnJlbGVhc2Uo
KSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKSk7CisgICAgcmV0dXJu
IGFyZ3MuSG9sZGVyKCk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaAppbmRleCA3M2E2MjEzMmFkNjMzOWM1NmQ0
NTYzZTQyNGRiNmY1OGRmZDAzMzgyLi42NzA4ODU4MmFmNDExMzNhN2IzOTU0MDk0ZDU5ZTViOTQy
NjgxNGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRl
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaApAQCAt
NjMsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgYWN0aW9u
KCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgdHlwZSgpIGNvbnN0OwogICAg
IFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGRhdGEoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JU
IFdlYlN0cmluZyBzZXJ2aWNlKCkgY29uc3Q7CiAKICAgICAvLyBDYWxsZXIgdGFrZXMgb3duZXJz
aGlwIG9mIHRoZSBwb3J0cy4KICAgICBXRUJLSVRfRVhQT1JUIFdlYk1lc3NhZ2VQb3J0Q2hhbm5l
bEFycmF5KiBtZXNzYWdlUG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAKaW5kZXggOGE3ZDZhYWM1NDNiZDk5OTk5YjhmYTc5
ODQzYTM0MDNhZTU2N2M5ZS4uZTdmMDAyNGU3OTU1MjQ3ZDg0ODQxMjVjYjcyYjdkNWQ1ZTNlODY5
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0xMDMsNiAr
MTAzLDE1IEBAIFdlYlN0cmluZyBXZWJJbnRlbnQ6OmRhdGEoKSBjb25zdAogI2VuZGlmCiB9CiAK
K1dlYlN0cmluZyBXZWJJbnRlbnQ6OnNlcnZpY2UoKSBjb25zdAoreworI2lmIEVOQUJMRShXRUJf
SU5URU5UUykKKyAgICByZXR1cm4gbV9wcml2YXRlLT5zZXJ2aWNlKCk7CisjZWxzZQorICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKKyNlbmRpZgorfQorCiBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eSogV2ViSW50ZW50OjptZXNzYWdlUG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0CiB7CiAgICAg
Ly8gTm90ZTogc2VlIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0TWVzc2FnZVRvUmVt
b3RlLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hv
c3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmlu
ZGV4IGI2NWU2YjAxMDhhZjNiYTZkMDM5YzQwODQ4YzM4MDAwMDY0MzI0ZTguLjI0OWUyZmE1Zjk5
MWY1YzY4NzcyNDA4NGQ5YmRiMDk0Y2FhMGUwMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAgLTEzMzUsNiArMTMzNSw4IEBAIHZvaWQgV2Vi
Vmlld0hvc3Q6OmRpc3BhdGNoSW50ZW50KFdlYkZyYW1lKiBzb3VyY2UsIGNvbnN0IFdlYkludGVu
dFJlcXVlc3QmIHJlcXVlCiAgICAgICAgICAgICAoKnBvcnRzKVtpXS0+ZGVzdHJveSgpOwogICAg
ICAgICBkZWxldGUgcG9ydHM7CiAgICAgfQorICAgIGlmICghcmVxdWVzdC5pbnRlbnQoKS5zZXJ2
aWNlKCkuaXNFbXB0eSgpKQorICAgICAgICBwcmludGYoIkV4cGxpY2l0IGludGVudCBzZXJ2aWNl
OiAlc1xuIiwgcmVxdWVzdC5pbnRlbnQoKS5zZXJ2aWNlKCkudXRmOCgpLmRhdGEoKSk7CiB9CiAK
IC8vIFB1YmxpYyBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVu
dHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmludGVudHMv
d2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dAppbmRleCA3NjZjZmQwYTRkMDQ3YjU3NjRjODgz
M2I5MDRjYWRmNWM5YTRjNTY3Li5iZmYwYTY2YzQyZjdkMzc0M2UxZjAyMzZiYzQ2MWJiZjQyNDg0
MTM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkt
ZXhwZWN0ZWQudHh0CkBAIC0xLDYgKzEsNiBAQAogUEFTUyBuYXZpZ2F0b3Iud2Via2l0U3RhcnRB
Y3Rpdml0eSBpcyBkZWZpbmVkLgogUEFTUyB2YXIgaW50ZW50ID0gbmV3IFdlYktpdEludGVudCgp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyBu
ZXcgV2ViS2l0SW50ZW50KCdhJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3Vn
aCBhcmd1bWVudHMuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJ2EnKSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCiBQQVNTIG5ldyBXZWJLaXRJbnRl
bnQoJycsJycsJycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMi4KIFBBU1MgbmV3IFdlYktpdEludGVudCgnJywnYicsJ2MnKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCiBQQVNTIG5ldyBXZWJLaXRJ
bnRlbnQoJycsJycsJ2MnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBF
eGNlcHRpb24gMTIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRl
bnRzLWFwaS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRt
bAppbmRleCAxZGUxN2EwOTZlMWU4MTVmZmJiYWEzOGYxNzNhZDc1ZDVlMTM1NWQzLi4yNjJjYTBk
YTBmYzE0MTYzZTcxMGE4ODM2OWQ5ZTEzNzYzMzA0ZmMzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmlu
dGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKQEAgLTgsNyArOCw3IEBACiAgICAgICBzaG91bGRC
ZURlZmluZWQoIm5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5Iik7CiAgICAgICAKICAgICAg
IHNob3VsZFRocm93KCJ2YXIgaW50ZW50ID0gbmV3IFdlYktpdEludGVudCgpIiwgIidUeXBlRXJy
b3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzJyIpOzsKLSAgICAgIHNob3VsZFRocm93KCJuZXcgV2Vi
S2l0SW50ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMnIik7Cisg
ICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnYScpIiwgIidFcnJvcjogU1lOVEFY
X0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0
SW50ZW50KCcnLCcnLCcnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIn
Iik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnJywnYicsJ2MnKSIsICIn
RXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJv
dygibmV3IFdlYktpdEludGVudCgnJywnJywnYycpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9N
IEV4Y2VwdGlvbiAxMiciKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2Vi
LWludGVudHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmlu
dGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kZTc0OTQ3YTQ1NGJmNDBmOGMxYThjNDZmYmVmOGY1MWZlOTA0MzRkCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3It
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlv
bj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbgorUmVjZWl2ZWQgV2ViIEludGVudDogYWN0aW9uPWFj
dGlvbjEgdHlwZT10ZXh0L3BsYWluK2V4cGxpY2l0CitFeHBsaWNpdCBpbnRlbnQgc2VydmljZTog
ZXhwbGljaXQKK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlvbj1hY3Rpb24xIHR5cGU9dGV4dC9w
bGFpbitleHRyYXMKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorKiBzZW50IG9iamVjdCBpbnRlbnQKKyogc2VudCBleHBsaWNpdCBpbnRlbnQKKyogc2Vu
dCBpbnRlbnQgd2l0aCBleHRyYXMKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50
cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVu
dHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzBjNzRkMjVl
MDMxODc2Mjc0MDQ5MzQ4NTRlNDkwYTJjY2NhYzE1NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTAs
MCArMSwzNiBAQAorPGh0bWw+CisgIDxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJl
c291cmNlcy93ZWItaW50ZW50cy10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0Pgor
ICAgICAgZnVuY3Rpb24gYnV0dG9uQ2xpY2tlZCgpIHsKKyAgICAgICAgdmFyIHNpbXBsZUludGVu
dCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAgICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEiLAor
ICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9wbGFpbiIsCisgICAgICAgICAgICAgImRhdGEiOiJt
ZXNzYWdlIn0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShzaW1wbGVJ
bnRlbnQpOworICAgICAgICBkZWJ1ZygiKiBzZW50IG9iamVjdCBpbnRlbnQiKTsKKworICAgICAg
ICB2YXIgZXhwbGljaXRJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAgICAgICAgeyJh
Y3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxhaW4rZXhwbGlj
aXQiLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSIsCisgICAgICAgICAgICAgInNlcnZp
Y2UiIDogImV4cGxpY2l0In0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0
eShleHBsaWNpdEludGVudCk7CisgICAgICAgIGRlYnVnKCIqIHNlbnQgZXhwbGljaXQgaW50ZW50
Iik7CisKKyAgICAgICAgdmFyIGV4dHJhc0ludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAg
ICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEiLAorICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9w
bGFpbitleHRyYXMiLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSIsCisgICAgICAgICAg
ICAgImV4dHJhcyI6eyJhIjoiYiJ9fSk7CisgICAgICAgIG5hdmlnYXRvci53ZWJraXRTdGFydEFj
dGl2aXR5KGV4dHJhc0ludGVudCk7CisgICAgICAgIGRlYnVnKCIqIHNlbnQgaW50ZW50IHdpdGgg
ZXh0cmFzIik7CisgICAgICB9CisgICAgPC9zY3JpcHQ+CisgIDwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0ic2ltdWxhdGVCdXR0b25QcmVzcygpIj4KKzxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJidXR0
b24iIHZhbHVlPSJTdGFydCBXZWIgSW50ZW50IiBvbm1vdXNldXA9ImJ1dHRvbkNsaWNrZWQoKSI+
Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137812</attachid>
            <date>2012-04-18 18:20:12 -0700</date>
            <delta_ts>2012-04-19 18:13:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120418182011.patch</filename>
            <type>text/plain</type>
            <size>26684</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODZkNzk0NjM2YWUxNmI2
MDE1ZWNlY2UxMGY2NDAzMWY4OGVjNDI1ZC4uY2E1ZTRkODkyYTU4ZGViZWRmMjhlYjU1YWI4ZTdm
YWViNzNmYzU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGhvcGVmdWxseSBiZSB0
ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2luZyB0aGlzCisgICAgICAgIGNv
bnN0cnVjdG9yLCB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4KKyAgICAgICAgQWRkZWQgbGF5
b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAgICAgIHdlYmludGVudHMvd2Vi
LWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMTggIExldmkgV2VpbnRy
YXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dENHJ3Mg
cm91bmRUb0RldmljZVBpeGVscyBzaG91bGQgcm91bmQgZXZlbiB3aGVuIHRoZXJlJ3Mgbm8gdHJh
bnNmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwCmluZGV4IDA1
M2Q0MjljZmExYzk3MjNmOTYzNmMzNzlmM2EzOTE4NWRkNDk0YmUuLmI1NTkyZGI1MDJmMzRkMjNh
MDY1Y2U4ZTRkYzQ4NWQxYmQ5MDUyNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW50ZW50cy9JbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnQuY3BwCkBAIC0zMywxMSArMzMsMTIgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgi
CiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6OmNy
ZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYgcG9y
dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChhY3Rpb24uaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKQEAgLTQ4LDM5ICs0OSw2NyBAQCBQYXNzUmVmUHRyPElu
dGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dHlwZSwgUGFzcwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEpKTsKKyAgICBPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMo
JnBvcnRzLCBlYyk7CisKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJhczsK
KyAgICBTdHJpbmcgc2VydmljZTsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFj
dGlvbiwgdHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2UpKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMp
CitQYXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLCBjb25zdCBEaWN0aW9uYXJ5JiBwYXJhbWV0ZXJzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkgeworICAgIFN0cmluZyBhY3Rpb247CisgICAgYm9v
bCBhY3Rpb25FeGlzdHMgPSBwYXJhbWV0ZXJzLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygi
YWN0aW9uIiwgYWN0aW9uKTsKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBib29sIHR5cGVFeGlzdHMg
PSBwYXJhbWV0ZXJzLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygidHlwZSIsIHR5cGUpOwor
ICAgIFN0cmluZyBzZXJ2aWNlOworICAgIHBhcmFtZXRlcnMuZ2V0KCJzZXJ2aWNlIiwgc2Vydmlj
ZSk7CisKKyAgICBpZiAoIWFjdGlvbkV4aXN0cyB8fCBhY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICh0
eXBlLmlzRW1wdHkoKSkgeworICAgIGlmICghdHlwZUV4aXN0cyB8fCB0eXBlLmlzRW1wdHkoKSkg
ewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMgPSBNZXNzYWdlUG9y
dDo6ZGlzZW50YW5nbGVQb3J0cygmcG9ydHMsIGVjKTsKKyAgICBNZXNzYWdlUG9ydEFycmF5IHBv
cnRzOworICAgIGJvb2wgcG9ydHNFeGlzdHMgPSBwYXJhbWV0ZXJzLmdldCgidHJhbnNmZXIiLCBw
b3J0cyk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVsczsKKyAg
ICBpZiAocG9ydHNFeGlzdHMpCisgICAgICAgIGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2Vu
dGFuZ2xlUG9ydHMoJnBvcnRzLCBlYyk7CisKKyAgICBTY3JpcHRWYWx1ZSBkYXRhVmFsdWU7Cisg
ICAgYm9vbCBkYXRhRXhpc3RzID0gcGFyYW1ldGVycy5nZXQoImRhdGEiLCBkYXRhVmFsdWUpOwor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWREYXRhOworICAgIGlm
IChkYXRhRXhpc3RzKSB7CisgICAgICBib29sIGRpZFRocm93ID0gZmFsc2U7CisgICAgICBzZXJp
YWxpemVkRGF0YSA9IGRhdGFWYWx1ZS5zZXJpYWxpemUoc2NyaXB0U3RhdGUsICZwb3J0cywgMCwg
ZGlkVGhyb3cpOworICAgICAgaWYgKGRpZFRocm93KSB7CisgICAgICAgICAgZWMgPSBEQVRBX0NM
T05FX0VSUjsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CiAKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEsIGNoYW5uZWxzLnJlbGVh
c2UoKSkpOwotfQorICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZXh0cmFzOworICAg
IERpY3Rpb25hcnkgZXh0cmFzRGljdGlvbmFyeTsKKyAgICBib29sIGV4dHJhc0V4aXN0cyA9IHBh
cmFtZXRlcnMuZ2V0KCJleHRyYXMiLCBleHRyYXNEaWN0aW9uYXJ5KTsKKyAgICBpZiAoZXh0cmFz
RXhpc3RzKQorICAgICAgICBleHRyYXNEaWN0aW9uYXJ5LmdldE93blByb3BlcnRpZXNBc1N0cmlu
Z0hhc2hNYXAoZXh0cmFzKTsKIAotSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24s
IGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRh
dGEpCi0gICAgOiBtX2FjdGlvbihhY3Rpb24pCi0gICAgLCBtX3R5cGUodHlwZSkKLXsKLSAgICBp
ZiAoZGF0YSkKLSAgICAgICAgbV9kYXRhID0gZGF0YTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGF0
YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBlLCBzZXJpYWxpemVkRGF0YS5yZWxlYXNlKCksIGNo
YW5uZWxzLnJlbGVhc2UoKSwgZXh0cmFzLCBzZXJ2aWNlKSk7CiB9CiAKLUludGVudDo6SW50ZW50
KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5PiBwb3J0cykKK0ludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBT
dHJpbmcmIHR5cGUsCisgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMsCisg
ICAgICAgICAgICAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMs
IGNvbnN0IFN0cmluZyYgc2VydmljZSkKICAgICA6IG1fYWN0aW9uKGFjdGlvbikKICAgICAsIG1f
dHlwZSh0eXBlKQogICAgICwgbV9wb3J0cyhwb3J0cykKKyAgICAsIG1fc2VydmljZShzZXJ2aWNl
KQorICAgICwgbV9leHRyYXMoZXh0cmFzKQogewogICAgIGlmIChkYXRhKQogICAgICAgICBtX2Rh
dGEgPSBkYXRhOwpAQCAtOTgsNiArMTI3LDExIEBAIGNvbnN0IFN0cmluZyYgSW50ZW50Ojp0eXBl
KCkgY29uc3QKICAgICByZXR1cm4gbV90eXBlOwogfQogCitjb25zdCBTdHJpbmcmIEludGVudDo6
c2VydmljZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VydmljZTsKK30KKwogU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiBJbnRlbnQ6OmRhdGEoKSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEu
Z2V0KCk7CkBAIC0xMDgsNiArMTQyLDExIEBAIE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBJbnRl
bnQ6Om1lc3NhZ2VQb3J0cygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcG9ydHMuZ2V0KCk7CiB9CiAK
K2NvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIEludGVudDo6ZXh0cmFzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9leHRyYXM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5URU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9JbnRlbnQuaAppbmRleCAzM2VmNjllMDQ0MTA1OTZlMjQxNTMzNDg1ZWZiYzlmNWM0ZTZi
NmQ0Li41OTMyMWFlYzZjYTc3ZjJkYWU1NDIyZDliZmY2ZmIzODcyYmNiNDZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpZiBF
TkFCTEUoV0VCX0lOVEVOVFMpCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAi
TWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydENoYW5uZWwuaCIKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgpAQCAtNDEsMzIgKzQyLDM5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgU2NyaXB0U3RhdGU7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAK
IHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNzIEludGVudCA6IHB1YmxpYyBSZWZD
b3VudGVkPEludGVudD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludGVudD4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIGNv
bnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoU2NyaXB0U3RhdGUqLCBjb25zdCBEaWN0aW9uYXJ5
JiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgY29uc3QgU3RyaW5nJiBhY3Rpb24oKSBjb25zdDsK
ICAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdDsKICAgICBTZXJpYWxpemVkU2NyaXB0VmFs
dWUqIGRhdGEoKSBjb25zdDsKIAotICAgIGludCBpZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRJZGVudGlmaWVyKGludCk7Ci0KICAgICBNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogbWVz
c2FnZVBvcnRzKCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiBzZXJ2aWNlKCkgY29uc3Q7Cisg
ICAgY29uc3QgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZXh0cmFzKCkgY29uc3Q7CisK
K3Byb3RlY3RlZDoKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgdHlwZSwKKyAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRh
dGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzLAorICAgICAgICAg
ICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMsIGNvbnN0IFN0cmlu
ZyYgc2VydmljZSk7CiAKIHByaXZhdGU6Ci0gICAgSW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9u
LCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBk
YXRhKTsKLSAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlw
ZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKTsKIAogICAgIFN0cmluZyBtX2FjdGlvbjsKICAg
ICBTdHJpbmcgbV90eXBlOworCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbV9k
YXRhOwogICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gbV9wb3J0czsKKworICAg
IFN0cmluZyBtX3NlcnZpY2U7CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2V4
dHJhczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbnRlbnRzL0ludGVudC5pZGwKaW5kZXggZWYwODI1MDczNGZmYzc5YjE5NDk4MGVjODI0M2Vl
YjM0NDhhYzUyZS4uN2JlNTg2YTc2MzIyNGMxMzcxZDI2ZGM4YzUyMDFjZTE2MGZkYWNlMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKQEAgLTI2LDcgKzI2LDkg
QEAKIG1vZHVsZSB3aW5kb3cgewogICBpbnRlcmZhY2UgWwogICAgICAgQ29uZGl0aW9uYWw9V0VC
X0lOVEVOVFMsCisgICAgICBDdXN0b21Db25zdHJ1Y3RvciwKICAgICAgIENvbnN0cnVjdG9yKGlu
IERPTVN0cmluZyBhY3Rpb24sIGluIERPTVN0cmluZyB0eXBlLCBpbiBbT3B0aW9uYWw9RGVmYXVs
dElzTnVsbFN0cmluZywgVHJhbnNmZXJMaXN0PXRyYW5zZmVyTGlzdF0gU2VyaWFsaXplZFNjcmlw
dFZhbHVlIGRhdGEsIGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIEFycmF5IHRyYW5z
ZmVyTGlzdCksCisgICAgICBDb25zdHJ1Y3RvcihpbiBEaWN0aW9uYXJ5IHBhcmFtZXRlcnMpLAog
ICAgICAgQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24KICAgXSBJbnRlbnQgewogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0
OWE3MjFjMDcwYmJiMDk2YzdiYWJjNTQ2NmQ3YWQzZWQwMzkyNjNlLi5mZmE2YjEzOGMyNmNjZjhh
ZGZiMDlhY2VjMGI1NjkxNjJkYThlMzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMjc4LDYgKzIy
NzgsNyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDE2QXJyYXlDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQzMkFycmF5Q3Vz
dG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50OEFycmF5Q3Vz
dG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29uc3Ry
dWN0b3IuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0
Q2FsbEZyYW1lQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
TG9jYXRpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhN
ZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuY3BwCmluZGV4IGZkNGRhMWZiMDA2Y2ZjZjY0MTg5ZjgyMzlkOGU2Y2IyMGYx
YzZhZWEuLjE0OTM4NGIzMzI3NWM4ZjFlOTc1NjNkNTA2ZjVlNTM3NDEyOWExNWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwCkBAIC05OCw3ICs5OCw3IEBAIGJv
b2wgRGljdGlvbmFyeTo6Z2V0S2V5KGNvbnN0IFN0cmluZyYga2V5LCB2ODo6TG9jYWw8djg6OlZh
bHVlPiYgdmFsdWUpIGNvbnN0CiAgICAgQVNTRVJUKCFvcHRpb25zLklzRW1wdHkoKSk7CiAKICAg
ICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4S2V5ID0gdjhTdHJpbmcoa2V5KTsKLSAgICBpZiAo
IW9wdGlvbnMtPkhhcyh2OEtleSkpCisgICAgaWYgKCFvcHRpb25zLT5IYXModjhLZXktPlRvU3Ry
aW5nKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdmFsdWUgPSBvcHRpb25zLT5HZXQo
djhLZXkpOwogICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkpCkBAIC00MTIsNCArNDEyLDM4IEBAIGJv
b2wgRGljdGlvbmFyeTo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBSZWZQdHI8U3BlZWNoUmVjb2du
aXRpb25SZXN1bHRMaXN0PiYgdmFsCiAKICNlbmRpZgogCitib29sIERpY3Rpb25hcnk6OmdldChj
b25zdCBTdHJpbmcmIGtleSwgRGljdGlvbmFyeSYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodjhWYWx1ZS0+SXNPYmplY3QoKSkKKyAg
ICAgICAgdmFsdWUgPSBEaWN0aW9uYXJ5KHY4VmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKKworYm9vbCBEaWN0aW9uYXJ5OjpnZXRPd25Qcm9wZXJ0aWVzQXNTdHJpbmdIYXNoTWFwKFdU
Rjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGhhc2hNYXApIGNvbnN0Cit7CisgICAgaWYgKCFt
X29wdGlvbnMtPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
bV9vcHRpb25zKTsKKyAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBwcm9wZXJ0aWVzID0gd3JhcHBl
ci0+R2V0T3duUHJvcGVydHlOYW1lcygpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBw
cm9wZXJ0aWVzLT5MZW5ndGgoKTsgKytpKSB7CisgICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4g
a2V5ID0gcHJvcGVydGllcy0+R2V0KGkpLT5Ub1N0cmluZygpOworICAgICAgaWYgKGtleS5Jc0Vt
cHR5KCkgfHwgIWtleS0+TGVuZ3RoKCkgfHwgIXdyYXBwZXItPkhhcyhrZXkpKQorICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHdyYXBwZXIt
PkdldChrZXkpOworICAgICAgU3RyaW5nIHN0cmluZ0tleSA9IHY4VmFsdWVUb1dlYkNvcmVTdHJp
bmcoa2V5KTsKKyAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHY4VmFsdWVUb1dlYkNvcmVTdHJp
bmcodmFsdWUpOworICAgICAgaWYgKCFzdHJpbmdLZXkuaXNFbXB0eSgpKQorICAgICAgICAgIGhh
c2hNYXAuc2V0KHN0cmluZ0tleSwgc3RyaW5nVmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RGljdGlvbmFyeS5oCmluZGV4IDMyMTY0YjhjYmIyM2E1NGFiYzU4NDk3OTk2MjU5NmM1ZmQyZmY4
MzEuLmExZDU2ZWZhN2M1YzQwNGU5ZjljOGEwMjE4MTE4NzY1ZTBiM2JjODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8
djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKQEAgLTgxLDYgKzgyLDggQEAg
cHVibGljOgogICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFJlZlB0cjxTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdExpc3Q+JikgY29uc3Q7CiAjZW5kaWYKICAgICBib29sIGdldChjb25zdCBTdHJp
bmcmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mKSBjb25zdDsKKyAgICBib29sIGdldChjb25zdCBT
dHJpbmcmLCBEaWN0aW9uYXJ5JikgY29uc3Q7CisgICAgYm9vbCBnZXRPd25Qcm9wZXJ0aWVzQXNT
dHJpbmdIYXNoTWFwKFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKSBjb25zdDsKIAogICAg
IGJvb2wgZ2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IFN0cmluZyYsIFN0cmluZyYp
IGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRW
YWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKaW5k
ZXggZWNjMzY3MzYyYTgzOGI3Zjk4OTI4ZWQwNTk5ZDYzNzY5ZjA5N2NiNy4uY2E1NThjN2M3NDk3
ZTY5Y2IwMzc3Y2Y5MTY4MmFkOWVkMmEyZjhlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcApAQCAtNDQsNiArNDQsMTMgQEAgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXQKICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgp
KTsKIH0KIAorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpz
ZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSogbWVz
c2FnZVBvcnRzLCBBcnJheUJ1ZmZlckFycmF5KiBhcnJheUJ1ZmZlcnMsIGJvb2wmIGRpZFRocm93
KQoreworICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKKyAgICByZXR1cm4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgpLCBtZXNzYWdlUG9ydHMsIGFycmF5
QnVmZmVycywgZGlkVGhyb3cpOworfQorCiBTY3JpcHRWYWx1ZSBTY3JpcHRWYWx1ZTo6ZGVzZXJp
YWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZh
bHVlKQogewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCmluZGV4IGQ0MTI5MDFmZGFkOTUwZWU4NmY4Yjlk
ZWVkY2IxNzgyZDE1YTAxMWUuLmY2MjMzOTQ1NGM1MzI1Yjg2MjYxNGM4ZTg2NDhlYmQ2ODMyZmZk
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaApAQCAtMzYsMTQg
KzM2LDIwIEBACiAKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWZuZGVmIE5ERUJVRwogI2luY2x1ZGUgIlY4
UHJveHkuaCIgIC8vIGZvciByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBnbG9iYWwgaGFuZGxlcy4K
ICNlbmRpZgogCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIEFycmF5QnVmZmVyOworfQorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc3BlY3RvclZhbHVlOworY2xhc3MgTWVzc2FnZVBv
cnQ7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIGNsYXNzIFNjcmlwdFZhbHVlIHsK
QEAgLTEzMSw2ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSopOworICAgIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBNZXNzYWdl
UG9ydEFycmF5KiwgQXJyYXlCdWZmZXJBcnJheSosIGJvb2wmKTsKICAgICBzdGF0aWMgU2NyaXB0
VmFsdWUgZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqKTsK
IAogICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSB1bmRlZmluZWQoKSB7IHJldHVybiBTY3JpcHRWYWx1
ZSh2ODo6VW5kZWZpbmVkKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQxYWNm
MDJlMGEzMWI2MzAyZjU0ZWVkZjA4YzhlNjIzOTA5OGY4MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcApA
QCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVudC5oIgorCisj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5j
bHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
KyNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIK
KyNpbmNsdWRlICJWOEludGVudC5oIgorI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKKyNpbmNs
dWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZW50Ojpjb25zdHJ1Y3Rv
ckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJE
T00uSW50ZW50LkNvbnN0cnVjdG9yIik7CisKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNh
bm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisg
ICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3Jh
cEV4aXN0aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKyAgICBpZiAo
YXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdo
IGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PT0gMSkgeworICAgICAgICAvLyBVc2UgdGhlIGRpY3Rpb25hcnkgY29uc3RydWN0b3IuIFRoaXMg
YmxvY2sgd2lsbCByZXR1cm4gaWYgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50IGlzbid0IGEgdmFs
aWQgRGljdGlvbmFyeS4KKyAgICAgICAgRVhDRVBUSU9OX0JMT0NLKERpY3Rpb25hcnksIG9wdGlv
bnMsIGFyZ3NbMF0pOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVm
UHRyPEludGVudD4gaW1wbCA9IEludGVudDo6Y3JlYXRlKFNjcmlwdFN0YXRlOjpjdXJyZW50KCks
IG9wdGlvbnMsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZWMpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xk
ZXIoKSwgJmluZm8sIGltcGwuZ2V0KCkpOworICAgICAgICByZXR1cm4gdG9WOChpbXBsLnJlbGVh
c2UoKSwgYXJncy5Ib2xkZXIoKSk7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+
LCBhY3Rpb24sIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVm
aW5lZCkpOworICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJh
bWV0ZXI8PiwgdHlwZSwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElz
VW5kZWZpbmVkKSk7CisgICAgTWVzc2FnZVBvcnRBcnJheSBtZXNzYWdlUG9ydEFycmF5VHJhbnNm
ZXJMaXN0OworICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlz
dDsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDMpIHsKKyAgICAgICAgaWYgKCFleHRyYWN0VHJh
bnNmZXJhYmxlcyhhcmdzWzNdLCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCBhcnJheUJ1
ZmZlckFycmF5VHJhbnNmZXJMaXN0KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJD
b3VsZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAg
ICB9CisgICAgYm9vbCBkYXRhRGlkVGhyb3cgPSBmYWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1sy
XSwgJm1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsICZhcnJheUJ1ZmZlckFycmF5VHJhbnNm
ZXJMaXN0LCBkYXRhRGlkVGhyb3cpOworICAgIGlmIChkYXRhRGlkVGhyb3cpCisgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBSZWZQdHI8SW50ZW50PiBpbXBsID0gSW50ZW50
OjpjcmVhdGUoYWN0aW9uLCB0eXBlLCBkYXRhLCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0
LCBlYyk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIo
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKworICAgIFY4
RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCAmaW5mbywgaW1wbC5nZXQoKSk7Cisg
ICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbC5yZWxlYXNlKCks
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikpOworICAgIHJldHVybiBh
cmdzLkhvbGRlcigpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmgKaW5kZXggNzNhNjIxMzJhZDYzMzljNTZkNDU2
M2U0MjRkYjZmNThkZmQwMzM4Mi4uNTdhOTU2MmZhMjViNWMwNjA1NWNjM2Q3YzZkYzZjNWY0OWQy
MDczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmgKQEAgLTYz
LDYgKzYzLDkgQEAgcHVibGljOgogICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGFjdGlvbigp
IGNvbnN0OwogICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIHR5cGUoKSBjb25zdDsKICAgICBX
RUJLSVRfRVhQT1JUIFdlYlN0cmluZyBkYXRhKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBX
ZWJTdHJpbmcgc2VydmljZSgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgV2ViVmVjdG9yPFdl
YlN0cmluZz4gZXh0cmFzTmFtZXMoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmlu
ZyBleHRyYXNWYWx1ZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKIAogICAgIC8vIENhbGxlciB0
YWtlcyBvd25lcnNoaXAgb2YgdGhlIHBvcnRzLgogICAgIFdFQktJVF9FWFBPUlQgV2ViTWVzc2Fn
ZVBvcnRDaGFubmVsQXJyYXkqIG1lc3NhZ2VQb3J0Q2hhbm5lbHNSZWxlYXNlKCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAppbmRleCA4YTdkNmFhYzU0M2Jk
OTk5OTliOGZhNzk4NDNhMzQwM2FlNTY3YzllLi41MDk5ZDczMTZkY2FhMGQ0MjdjNDM0MDNiYzA4
Y2ZlODczZmQwYzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
bnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJbnRlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC0x
MDMsNiArMTA0LDE1IEBAIFdlYlN0cmluZyBXZWJJbnRlbnQ6OmRhdGEoKSBjb25zdAogI2VuZGlm
CiB9CiAKK1dlYlN0cmluZyBXZWJJbnRlbnQ6OnNlcnZpY2UoKSBjb25zdAoreworI2lmIEVOQUJM
RShXRUJfSU5URU5UUykKKyAgICByZXR1cm4gbV9wcml2YXRlLT5zZXJ2aWNlKCk7CisjZWxzZQor
ICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyNlbmRpZgorfQorCiBXZWJNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheSogV2ViSW50ZW50OjptZXNzYWdlUG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0CiB7
CiAgICAgLy8gTm90ZTogc2VlIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0TWVzc2Fn
ZVRvUmVtb3RlLgpAQCAtMTIwLDQgKzEzMCwzMCBAQCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eSogV2ViSW50ZW50OjptZXNzYWdlUG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0CiAgICAgcmV0
dXJuIHdlYkNoYW5uZWxzOwogfQogCitXZWJWZWN0b3I8V2ViU3RyaW5nPiBXZWJJbnRlbnQ6OmV4
dHJhc05hbWVzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgc2l6ZV90
IG51bUV4dHJhcyA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuc2l6ZSgpOworICAgIFdlYlZlY3RvcjxX
ZWJTdHJpbmc+IGtleVN0cmluZ3MobnVtRXh0cmFzKTsKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvcjo6S2V5cyBrZXlJdGVyID0gbV9wcml2YXRlLT5leHRy
YXMoKS5iZWdpbigpLmtleXMoKTsKKyAgICBmb3IgKGludCBpID0gMDsga2V5SXRlciAhPSBtX3By
aXZhdGUtPmV4dHJhcygpLmVuZCgpLmtleXMoKTsgKytrZXlJdGVyLCArK2kpCisgICAgICAgIGtl
eVN0cmluZ3NbaV0gPSAqa2V5SXRlcjsKKyAgICByZXR1cm4ga2V5U3RyaW5nczsKKyNlbHNlCisg
ICAgcmV0dXJuIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCk7CisjZW5kaWYKK30KKworV2ViU3RyaW5n
IFdlYkludGVudDo6ZXh0cmFzVmFsdWUoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdAorewor
I2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciB2YWwgPSBtX3ByaXZhdGUtPmV4dHJhcygpLmZpbmQobmFtZSk7Cisg
ICAgaWYgKHZhbCA9PSBtX3ByaXZhdGUtPmV4dHJhcygpLmVuZCgpKQorICAgICAgICByZXR1cm4g
V2ViU3RyaW5nKCk7CisgICAgcmV0dXJuIHZhbC0+c2Vjb25kOworI2Vsc2UKKyAgICByZXR1cm4g
V2ViU3RyaW5nKCk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggYjY1ZTZiMDEw
OGFmM2JhNmQwMzljNDA4NDhjMzgwMDAwNjQzMjRlOC4uNWNmNzU1ZTNiY2IzNzJmOThmNzNiOTAw
MzM3ZmE0OTQ3ZDliYzJlNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViVmlld0hvc3QuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlZpZXdIb3N0LmNwcApAQCAtMTMzNSw2ICsxMzM1LDEzIEBAIHZvaWQgV2ViVmlld0hvc3Q6OmRp
c3BhdGNoSW50ZW50KFdlYkZyYW1lKiBzb3VyY2UsIGNvbnN0IFdlYkludGVudFJlcXVlc3QmIHJl
cXVlCiAgICAgICAgICAgICAoKnBvcnRzKVtpXS0+ZGVzdHJveSgpOwogICAgICAgICBkZWxldGUg
cG9ydHM7CiAgICAgfQorICAgIGlmICghcmVxdWVzdC5pbnRlbnQoKS5zZXJ2aWNlKCkuaXNFbXB0
eSgpKQorICAgICAgICBwcmludGYoIkV4cGxpY2l0IGludGVudCBzZXJ2aWNlOiAlc1xuIiwgcmVx
dWVzdC5pbnRlbnQoKS5zZXJ2aWNlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgV2ViVmVjdG9yPFdl
YlN0cmluZz4gZXh0cmFzID0gcmVxdWVzdC5pbnRlbnQoKS5leHRyYXNOYW1lcygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZXh0cmFzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHByaW50
ZigiRXh0cmFzWyVzXSA9ICVzXG4iLCBleHRyYXNbaV0udXRmOCgpLmRhdGEoKSwKKyAgICAgICAg
ICAgICAgIHJlcXVlc3QuaW50ZW50KCkuZXh0cmFzVmFsdWUoZXh0cmFzW2ldKS51dGY4KCkuZGF0
YSgpKTsKKyAgICB9CiB9CiAKIC8vIFB1YmxpYyBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dAppbmRleCA3NjZj
ZmQwYTRkMDQ3YjU3NjRjODgzM2I5MDRjYWRmNWM5YTRjNTY3Li5iZmYwYTY2YzQyZjdkMzc0M2Ux
ZjAyMzZiYzQ2MWJiZjQyNDg0MTM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRz
L3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50
cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0CkBAIC0xLDYgKzEsNiBAQAogUEFTUyBuYXZp
Z2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eSBpcyBkZWZpbmVkLgogUEFTUyB2YXIgaW50ZW50ID0g
bmV3IFdlYktpdEludGVudCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2gg
YXJndW1lbnRzLgotUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdhJykgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJ2En
KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCiBQ
QVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJycsJycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lO
VEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KIFBBU1MgbmV3IFdlYktpdEludGVudCgnJywnYics
J2MnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIu
CiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJycsJ2MnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93
ZWItaW50ZW50cy1hcGkuaHRtbAppbmRleCAxZGUxN2EwOTZlMWU4MTVmZmJiYWEzOGYxNzNhZDc1
ZDVlMTM1NWQzLi4yNjJjYTBkYTBmYzE0MTYzZTcxMGE4ODM2OWQ5ZTEzNzYzMzA0ZmMzIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisrKyBi
L0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKQEAgLTgsNyArOCw3
IEBACiAgICAgICBzaG91bGRCZURlZmluZWQoIm5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5
Iik7CiAgICAgICAKICAgICAgIHNob3VsZFRocm93KCJ2YXIgaW50ZW50ID0gbmV3IFdlYktpdElu
dGVudCgpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzJyIpOzsKLSAgICAgIHNo
b3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogTm90IGVub3Vn
aCBhcmd1bWVudHMnIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnYScp
IiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKICAgICAgIHNob3Vs
ZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KCcnLCcnLCcnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6
IERPTSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVu
dCgnJywnYicsJ2MnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7
CiAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnJywnJywnYycpIiwgIidFcnJv
cjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xM2Y2ZDUwYWYxZjliNzcwMTA2NzI1MjFiN2M4NTVmNjkxNDFk
YTVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50
cy1vYmotY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1JlY2VpdmVk
IFdlYiBJbnRlbnQ6IGFjdGlvbj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbgorUmVjZWl2ZWQgV2Vi
IEludGVudDogYWN0aW9uPWFjdGlvbjEgdHlwZT10ZXh0L3BsYWluK2V4cGxpY2l0CitFeHBsaWNp
dCBpbnRlbnQgc2VydmljZTogZXhwbGljaXQKK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlvbj1h
Y3Rpb24xIHR5cGU9dGV4dC9wbGFpbitleHRyYXMKK0V4dHJhc1thXSA9IGIKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorUEFTUyBuZXcgV2ViS2l0SW50
ZW50KHt9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24g
MTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhJzonYid9KSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCisqIHNlbnQgb2JqZWN0IGludGVudAor
KiBzZW50IGV4cGxpY2l0IGludGVudAorKiBzZW50IGludGVudCB3aXRoIGV4dHJhcworCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rv
ci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0
b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44OWEzYTFhZjFhMWI2ZGI3M2E3OTE5MTYyYzdjMDcwNGExMjY5
N2M2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50
cy1vYmotY29uc3RydWN0b3IuaHRtbApAQCAtMCwwICsxLDM5IEBACis8aHRtbD4KKyAgPGhlYWQ+
CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYi1pbnRlbnRzLXRlc3Rpbmcu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICBmdW5jdGlvbiBidXR0b25DbGlja2Vk
KCkgeworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7fSkiLCAiJ0Vycm9y
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygi
bmV3IFdlYktpdEludGVudCh7J2EnOidiJ30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4
Y2VwdGlvbiAxMiciKTsKKworICAgICAgICB2YXIgc2ltcGxlSW50ZW50ID0gbmV3IFdlYktpdElu
dGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisgICAgICAgICAgICAgInR5
cGUiOiJ0ZXh0L3BsYWluIiwKKyAgICAgICAgICAgICAiZGF0YSI6Im1lc3NhZ2UifSk7CisgICAg
ICAgIG5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5KHNpbXBsZUludGVudCk7CisgICAgICAg
IGRlYnVnKCIqIHNlbnQgb2JqZWN0IGludGVudCIpOworCisgICAgICAgIHZhciBleHBsaWNpdElu
dGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAgICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEi
LAorICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9wbGFpbitleHBsaWNpdCIsCisgICAgICAgICAg
ICAgImRhdGEiOiJtZXNzYWdlIiwKKyAgICAgICAgICAgICAic2VydmljZSIgOiAiZXhwbGljaXQi
fSk7CisgICAgICAgIG5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5KGV4cGxpY2l0SW50ZW50
KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBleHBsaWNpdCBpbnRlbnQiKTsKKworICAgICAgICB2
YXIgZXh0cmFzSW50ZW50ID0gbmV3IFdlYktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9u
IjoiYWN0aW9uMSIsCisgICAgICAgICAgICAgInR5cGUiOiJ0ZXh0L3BsYWluK2V4dHJhcyIsCisg
ICAgICAgICAgICAgImRhdGEiOiJtZXNzYWdlIiwKKyAgICAgICAgICAgICAiZXh0cmFzIjp7ImEi
OiJiIn19KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoZXh0cmFzSW50
ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBpbnRlbnQgd2l0aCBleHRyYXMiKTsKKyAgICAg
IH0KKyAgICA8L3NjcmlwdD4KKyAgPC9oZWFkPgorPGJvZHkgb25sb2FkPSJzaW11bGF0ZUJ1dHRv
blByZXNzKCkiPgorPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9ImJ1dHRvbiIgdmFsdWU9IlN0YXJ0
IFdlYiBJbnRlbnQiIG9ubW91c2V1cD0iYnV0dG9uQ2xpY2tlZCgpIj4KKzxzY3JpcHQgc3JjPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138017</attachid>
            <date>2012-04-19 18:05:29 -0700</date>
            <delta_ts>2012-04-19 18:12:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120419180528.patch</filename>
            <type>text/plain</type>
            <size>26945</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODZkNzk0NjM2YWUxNmI2
MDE1ZWNlY2UxMGY2NDAzMWY4OGVjNDI1ZC4uY2E1ZTRkODkyYTU4ZGViZWRmMjhlYjU1YWI4ZTdm
YWViNzNmYzU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGhvcGVmdWxseSBiZSB0
ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2luZyB0aGlzCisgICAgICAgIGNv
bnN0cnVjdG9yLCB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4KKyAgICAgICAgQWRkZWQgbGF5
b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAgICAgIHdlYmludGVudHMvd2Vi
LWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMTggIExldmkgV2VpbnRy
YXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dENHJ3Mg
cm91bmRUb0RldmljZVBpeGVscyBzaG91bGQgcm91bmQgZXZlbiB3aGVuIHRoZXJlJ3Mgbm8gdHJh
bnNmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwCmluZGV4IDA1
M2Q0MjljZmExYzk3MjNmOTYzNmMzNzlmM2EzOTE4NWRkNDk0YmUuLmQwNTQwOTU4NjZjYWE2ZmM4
YzY0NDhmNDFkNTFkNzE3NzNiMjgxYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW50ZW50cy9JbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnQuY3BwCkBAIC0zMywxMSArMzMsMTIgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgi
CiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6OmNy
ZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYgcG9y
dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChhY3Rpb24uaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKQEAgLTQ4LDM5ICs0OSw3MSBAQCBQYXNzUmVmUHRyPElu
dGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dHlwZSwgUGFzcwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEpKTsKKyAgICBPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMo
JnBvcnRzLCBlYyk7CisKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJhczsK
KyAgICBTdHJpbmcgc2VydmljZTsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFj
dGlvbiwgdHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2UpKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMp
CitQYXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLCBjb25zdCBEaWN0aW9uYXJ5JiBwYXJhbWV0ZXJzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkgeworICAgIFN0cmluZyBhY3Rpb247CisgICAgYm9v
bCBhY3Rpb25FeGlzdHMgPSBwYXJhbWV0ZXJzLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygi
YWN0aW9uIiwgYWN0aW9uKTsKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBib29sIHR5cGVFeGlzdHMg
PSBwYXJhbWV0ZXJzLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygidHlwZSIsIHR5cGUpOwor
ICAgIFN0cmluZyBzZXJ2aWNlOworICAgIGlmIChwYXJhbWV0ZXJzLmdldCgic2VydmljZSIsIHNl
cnZpY2UpCisgICAgICAgICYmIChzZXJ2aWNlLmlzTnVsbCgpIHx8IHNlcnZpY2UuaXNFbXB0eSgp
KSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
LSAgICBpZiAodHlwZS5pc0VtcHR5KCkpIHsKKworICAgIGlmICghYWN0aW9uRXhpc3RzIHx8IGFj
dGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgaWYgKCF0eXBlRXhpc3RzIHx8IHR5cGUuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
T3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyA9IE1lc3NhZ2VQb3J0Ojpk
aXNlbnRhbmdsZVBvcnRzKCZwb3J0cywgZWMpOworICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9ydHM7
CisgICAgYm9vbCBwb3J0c0V4aXN0cyA9IHBhcmFtZXRlcnMuZ2V0KCJ0cmFuc2ZlciIsIHBvcnRz
KTsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzOworICAgIGlm
IChwb3J0c0V4aXN0cykKKyAgICAgICAgY2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlzZW50YW5n
bGVQb3J0cygmcG9ydHMsIGVjKTsKKworICAgIFNjcmlwdFZhbHVlIGRhdGFWYWx1ZTsKKyAgICBi
b29sIGRhdGFFeGlzdHMgPSBwYXJhbWV0ZXJzLmdldCgiZGF0YSIsIGRhdGFWYWx1ZSk7CisgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZERhdGE7CisgICAgaWYgKGRh
dGFFeGlzdHMpIHsKKyAgICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICAgIHNlcmlhbGl6
ZWREYXRhID0gZGF0YVZhbHVlLnNlcmlhbGl6ZShzY3JpcHRTdGF0ZSwgJnBvcnRzLCAwLCBkaWRU
aHJvdyk7CisgICAgICBpZiAoZGlkVGhyb3cpIHsKKyAgICAgICAgICBlYyA9IERBVEFfQ0xPTkVf
RVJSOworICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW50ZW50KGFjdGlvbiwgdHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgp
KSk7Ci19CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBleHRyYXM7CisgICAgRGlj
dGlvbmFyeSBleHRyYXNEaWN0aW9uYXJ5OworICAgIGJvb2wgZXh0cmFzRXhpc3RzID0gcGFyYW1l
dGVycy5nZXQoImV4dHJhcyIsIGV4dHJhc0RpY3Rpb25hcnkpOworICAgIGlmIChleHRyYXNFeGlz
dHMpCisgICAgICAgIGV4dHJhc0RpY3Rpb25hcnkuZ2V0T3duUHJvcGVydGllc0FzU3RyaW5nSGFz
aE1hcChleHRyYXMpOwogCi1JbnRlbnQ6OkludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29u
c3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSkK
LSAgICA6IG1fYWN0aW9uKGFjdGlvbikKLSAgICAsIG1fdHlwZSh0eXBlKQotewotICAgIGlmIChk
YXRhKQotICAgICAgICBtX2RhdGEgPSBkYXRhOwotICAgIGVsc2UKLSAgICAgICAgbV9kYXRhID0g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEludGVudChhY3Rpb24sIHR5cGUsIHNlcmlhbGl6ZWREYXRhLnJlbGVhc2UoKSwgY2hhbm5l
bHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2UpKTsKIH0KIAotSW50ZW50OjpJbnRlbnQoY29u
c3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+
IHBvcnRzKQorSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgdHlwZSwKKyAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cywKKyAgICAg
ICAgICAgICAgIGNvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhcywgY29u
c3QgU3RyaW5nJiBzZXJ2aWNlKQogICAgIDogbV9hY3Rpb24oYWN0aW9uKQogICAgICwgbV90eXBl
KHR5cGUpCiAgICAgLCBtX3BvcnRzKHBvcnRzKQorICAgICwgbV9zZXJ2aWNlKHNlcnZpY2UpCisg
ICAgLCBtX2V4dHJhcyhleHRyYXMpCiB7CiAgICAgaWYgKGRhdGEpCiAgICAgICAgIG1fZGF0YSA9
IGRhdGE7CkBAIC05OCw2ICsxMzEsMTEgQEAgY29uc3QgU3RyaW5nJiBJbnRlbnQ6OnR5cGUoKSBj
b25zdAogICAgIHJldHVybiBtX3R5cGU7CiB9CiAKK2NvbnN0IFN0cmluZyYgSW50ZW50OjpzZXJ2
aWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZXJ2aWNlOworfQorCiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqIEludGVudDo6ZGF0YSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS5nZXQo
KTsKQEAgLTEwOCw2ICsxNDYsMTEgQEAgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIEludGVudDo6
bWVzc2FnZVBvcnRzKCkgY29uc3QKICAgICByZXR1cm4gbV9wb3J0cy5nZXQoKTsKIH0KIAorY29u
c3QgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgSW50ZW50OjpleHRyYXMoKSBjb25zdAor
eworICAgIHJldHVybiBtX2V4dHJhczsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRz
L0ludGVudC5oCmluZGV4IDMzZWY2OWUwNDQxMDU5NmUyNDE1MzM0ODVlZmJjOWY1YzRlNmI2ZDQu
LjU5MzIxYWVjNmNhNzdmMmRhZTU0MjJkOWJmZjZmYjM4NzJiY2I0NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJM
RShXRUJfSU5URU5UUykKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJNZXNz
YWdlUG9ydC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CkBAIC00MSwzMiArNDIsMzkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBTY3JpcHRTdGF0ZTsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgSW50ZW50IDogcHVibGljIFJlZkNvdW50
ZWQ8SW50ZW50PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3Ry
aW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3Qg
TWVzc2FnZVBvcnRBcnJheSYgcG9ydHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShTY3JpcHRTdGF0ZSosIGNvbnN0IERpY3Rpb25hcnkmLCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OwogICAg
IGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0OwogICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSog
ZGF0YSgpIGNvbnN0OwogCi0gICAgaW50IGlkZW50aWZpZXIoKSBjb25zdDsKLSAgICB2b2lkIHNl
dElkZW50aWZpZXIoaW50KTsKLQogICAgIE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBtZXNzYWdl
UG9ydHMoKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcmIHNlcnZpY2UoKSBjb25zdDsKKyAgICBj
b25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMoKSBjb25zdDsKKworcHJv
dGVjdGVkOgorICAgIEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0
eXBlLAorICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwg
UGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMsCisgICAgICAgICAgIGNv
bnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhcywgY29uc3QgU3RyaW5nJiBz
ZXJ2aWNlKTsKIAogcHJpdmF0ZToKLSAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEp
OwotICAgIEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdl
UG9ydENoYW5uZWxBcnJheT4gcG9ydHMpOwogCiAgICAgU3RyaW5nIG1fYWN0aW9uOwogICAgIFN0
cmluZyBtX3R5cGU7CisKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX2RhdGE7
CiAgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX3BvcnRzOworCisgICAgU3Ry
aW5nIG1fc2VydmljZTsKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fZXh0cmFz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50LmlkbAppbmRleCBlZjA4MjUwNzM0ZmZjNzliMTk0OTgwZWM4MjQzZWViMzQ0
OGFjNTJlLi45MjY1N2I0ZTZjZTYwZjA3OTk1MjQ2NDAxNjM2NWI4NzA5MTQ5NWU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbApAQCAtMjYsNiArMjYsNyBAQAog
bW9kdWxlIHdpbmRvdyB7CiAgIGludGVyZmFjZSBbCiAgICAgICBDb25kaXRpb25hbD1XRUJfSU5U
RU5UUywKKyAgICAgIEN1c3RvbUNvbnN0cnVjdG9yLAogICAgICAgQ29uc3RydWN0b3IoaW4gRE9N
U3RyaW5nIGFjdGlvbiwgaW4gRE9NU3RyaW5nIHR5cGUsIGluIFtPcHRpb25hbD1EZWZhdWx0SXNO
dWxsU3RyaW5nLCBUcmFuc2Zlckxpc3Q9dHJhbnNmZXJMaXN0XSBTZXJpYWxpemVkU2NyaXB0VmFs
dWUgZGF0YSwgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gQXJyYXkgdHJhbnNmZXJM
aXN0KSwKICAgICAgIENvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uCiAgIF0gSW50ZW50IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCA0OWE3MjFjMDcwYmJiMDk2YzdiYWJjNTQ2NmQ3YWQzZWQwMzkyNjNl
Li5mZmE2YjEzOGMyNmNjZjhhZGZiMDlhY2VjMGI1NjkxNjJkYThlMzY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0yMjc4LDYgKzIyNzgsNyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEludDE2QXJyYXlDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhJbnQzMkFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW50OEFycmF5Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwCmluZGV4IGZkNGRhMWZiMDA2Y2ZjZjY0
MTg5ZjgyMzlkOGU2Y2IyMGYxYzZhZWEuLmNkYzI4MjBiZDQ1ZjI0MmNhYmZhZDYwZDM4MDU0NWEw
MDc3OTYzN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25h
cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwCkBA
IC00MTIsNCArNDEyLDM4IEBAIGJvb2wgRGljdGlvbmFyeTo6Z2V0KGNvbnN0IFN0cmluZyYga2V5
LCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiYgdmFsCiAKICNlbmRpZgogCiti
b29sIERpY3Rpb25hcnk6OmdldChjb25zdCBTdHJpbmcmIGtleSwgRGljdGlvbmFyeSYgdmFsdWUp
IGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdl
dEtleShrZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodjhW
YWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgdmFsdWUgPSBEaWN0aW9uYXJ5KHY4VmFsdWUpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBEaWN0aW9uYXJ5OjpnZXRPd25Qcm9wZXJ0
aWVzQXNTdHJpbmdIYXNoTWFwKFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGhhc2hNYXAp
IGNvbnN0Cit7CisgICAgaWYgKCFtX29wdGlvbnMtPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QobV9vcHRpb25zKTsKKyAgICB2ODo6TG9jYWw8djg6OkFycmF5
PiBwcm9wZXJ0aWVzID0gd3JhcHBlci0+R2V0T3duUHJvcGVydHlOYW1lcygpOworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLT5MZW5ndGgoKTsgKytpKSB7CisgICAgICB2
ODo6TG9jYWw8djg6OlN0cmluZz4ga2V5ID0gcHJvcGVydGllcy0+R2V0KGkpLT5Ub1N0cmluZygp
OworICAgICAgaWYgKCF3cmFwcGVyLT5IYXMoa2V5KSkKKyAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSB3cmFwcGVyLT5HZXQoa2V5KTsKKyAg
ICAgIFN0cmluZyBzdHJpbmdLZXkgPSB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGtleSk7CisgICAg
ICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKKyAg
ICAgIGlmICghc3RyaW5nS2V5LmlzRW1wdHkoKSkKKyAgICAgICAgICBoYXNoTWFwLnNldChzdHJp
bmdLZXksIHN0cmluZ1ZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaApp
bmRleCAzMjE2NGI4Y2JiMjNhNTRhYmM1ODQ5Nzk5NjI1OTZjNWZkMmZmODMxLi5hMWQ1NmVmYTdj
NWM0MDRlOWY5YzhhMDIxODExODc2NWUwYjNiYzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvRGljdGlvbmFyeS5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCkBAIC04MSw2ICs4Miw4IEBAIHB1YmxpYzoKICAgICBi
b29sIGdldChjb25zdCBTdHJpbmcmLCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0
PiYpIGNvbnN0OwogI2VuZGlmCiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgSGFzaFNldDxB
dG9taWNTdHJpbmc+JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgRGljdGlv
bmFyeSYpIGNvbnN0OworICAgIGJvb2wgZ2V0T3duUHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcChX
VEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JikgY29uc3Q7CiAKICAgICBib29sIGdldFdpdGhV
bmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmLCBTdHJpbmcmKSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwCmluZGV4IGVjYzM2NzM2MmE4
MzhiN2Y5ODkyOGVkMDU5OWQ2Mzc2OWYwOTdjYjcuLmNhNTU4YzdjNzQ5N2U2OWNiMDM3N2NmOTE2
ODJhZDllZDJhMmY4ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1
ZS5jcHAKQEAgLTQ0LDYgKzQ0LDEzIEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBTY3JpcHRWYWx1ZTo6c2VyaWFsaXplKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0CiAgICAgcmV0
dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4VmFsdWUoKSk7CiB9CiAKK1Bhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTY3JpcHRWYWx1ZTo6c2VyaWFsaXplKFNjcmlw
dFN0YXRlKiBzY3JpcHRTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJy
YXlCdWZmZXJBcnJheSogYXJyYXlCdWZmZXJzLCBib29sJiBkaWRUaHJvdykKK3sKKyAgICBTY3Jp
cHRTY29wZSBzY29wZShzY3JpcHRTdGF0ZSk7CisgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKHY4VmFsdWUoKSwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlcnMsIGRpZFRo
cm93KTsKK30KKwogU2NyaXB0VmFsdWUgU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKIHsKICAgICBT
Y3JpcHRTY29wZSBzY29wZShzY3JpcHRTdGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0VmFsdWUuaAppbmRleCBkNDEyOTAxZmRhZDk1MGVlODZmOGI5ZGVlZGNiMTc4MmQxNWEw
MTFlLi5mNjIzMzk0NTRjNTMyNWI4NjI2MTRjOGU4NjQ4ZWJkNjgzMmZmZDIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKQEAgLTM2LDE0ICszNiwyMCBAQAogCiAj
aW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogI2lmbmRlZiBOREVCVUcKICNpbmNsdWRlICJWOFByb3h5LmgiICAvLyBm
b3IgcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgZ2xvYmFsIGhhbmRsZXMuCiAjZW5kaWYKIAorbmFt
ZXNwYWNlIFdURiB7CitjbGFzcyBBcnJheUJ1ZmZlcjsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKK2NsYXNzIE1lc3NhZ2VQb3J0OwogY2xhc3MgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOwogCiBjbGFzcyBTY3JpcHRWYWx1ZSB7CkBAIC0xMzEsNiArMTM3
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUqKTsKKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlwdFN0YXRlKiwgTWVzc2FnZVBvcnRBcnJheSosIEFy
cmF5QnVmZmVyQXJyYXkqLCBib29sJik7CiAgICAgc3RhdGljIFNjcmlwdFZhbHVlIGRlc2VyaWFs
aXplKFNjcmlwdFN0YXRlKiwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKik7CiAKICAgICBzdGF0aWMg
U2NyaXB0VmFsdWUgdW5kZWZpbmVkKCkgeyByZXR1cm4gU2NyaXB0VmFsdWUodjg6OlVuZGVmaW5l
ZCgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SW50ZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyMDhhMDk0NGEzN2JkMzk1MmQ2
MDUzMzQ5MDBiMDQwZjQ0ZjgzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSw5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
LCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRlbnQuaCIKKworI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhC
aW5kaW5nTWFjcm9zLmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhJ
bnRlbnQuaCIKKyNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiVjhQcm94eS5o
IgorI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLkludGVudC5Db25z
dHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVk
IGFzIGEgZnVuY3Rpb24uIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKworICAgIGlmIChDb25zdHJ1
Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rvck1vZGU6OldyYXBFeGlzdGluZ09iamVj
dCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBW
OFByb3h5OjpUeXBlRXJyb3IpOworICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDEpIHsKKyAgICAg
ICAgLy8gVXNlIHRoZSBkaWN0aW9uYXJ5IGNvbnN0cnVjdG9yLiBUaGlzIGJsb2NrIHdpbGwgcmV0
dXJuIGlmIHRoZQorICAgICAgICAvLyBhcmd1bWVudCBpc24ndCBhIHZhbGlkIERpY3Rpb25hcnku
CisgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhEaWN0aW9uYXJ5LCBvcHRpb25zLCBhcmdzWzBdKTsK
KyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxJbnRlbnQ+IGlt
cGwgPSBJbnRlbnQ6OmNyZWF0ZShTY3JpcHRTdGF0ZTo6Y3VycmVudCgpLCBvcHRpb25zLCBlYyk7
CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKyAg
ICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBp
bXBsLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoaW1wbC5yZWxlYXNlKCksIGFyZ3MuSG9s
ZGVyKCkpOworICAgIH0KKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFNUUklOR19U
T19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8PiwgYWN0aW9uLCBNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBT
VFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHR5cGUs
IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwor
ICAgIE1lc3NhZ2VQb3J0QXJyYXkgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdDsKKyAgICBB
cnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3Q7CisgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPiAzKSB7CisgICAgICAgIGlmICghZXh0cmFjdFRyYW5zZmVyYWJsZXMoYXJn
c1szXSwgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgYXJyYXlCdWZmZXJBcnJheVRyYW5z
ZmVyTGlzdCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGV4dHJh
Y3QgdHJhbnNmZXJhYmxlcyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgfQorICAgIGJvb2wg
ZGF0YURpZFRocm93ID0gZmFsc2U7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
ZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMl0sICZtZXNzYWdlUG9y
dEFycmF5VHJhbnNmZXJMaXN0LCAmYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdCwgZGF0YURp
ZFRocm93KTsKKyAgICBpZiAoZGF0YURpZFRocm93KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOworCisgICAgUmVmUHRyPEludGVudD4gaW1wbCA9IEludGVudDo6Y3JlYXRlKGFjdGlv
biwgdHlwZSwgZGF0YSwgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgZWMpOworICAgIGlm
IChlYykKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CisKKyAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIod3JhcHBlciwgJmluZm8sIGltcGwuZ2V0KCkpOworICAgIFY4RE9NV3JhcHBl
cjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGltcGwucmVsZWFzZSgpLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKKyAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkludGVudC5oCmluZGV4IDczYTYyMTMyYWQ2MzM5YzU2ZDQ1NjNlNDI0ZGI2ZjU4ZGZk
MDMzODIuLjU3YTk1NjJmYTI1YjVjMDYwNTVjYzNkN2M2ZGM2YzVmNDlkMjA3MzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCkBAIC02Myw2ICs2Myw5IEBAIHB1
YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBhY3Rpb24oKSBjb25zdDsKICAgICBX
RUJLSVRfRVhQT1JUIFdlYlN0cmluZyB0eXBlKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCBX
ZWJTdHJpbmcgZGF0YSgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIHNlcnZp
Y2UoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGV4dHJh
c05hbWVzKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgZXh0cmFzVmFsdWUo
Y29uc3QgV2ViU3RyaW5nJikgY29uc3Q7CiAKICAgICAvLyBDYWxsZXIgdGFrZXMgb3duZXJzaGlw
IG9mIHRoZSBwb3J0cy4KICAgICBXRUJLSVRfRVhQT1JUIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5KiBtZXNzYWdlUG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkludGVudC5jcHAKaW5kZXggOGE3ZDZhYWM1NDNiZDk5OTk5YjhmYTc5ODQz
YTM0MDNhZTU2N2M5ZS4uNTA5OWQ3MzE2ZGNhYTBkNDI3YzQzNDAzYmMwOGNmZTg3M2ZkMGMwZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiSW50ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWwuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMTAzLDYgKzEwNCwxNSBA
QCBXZWJTdHJpbmcgV2ViSW50ZW50OjpkYXRhKCkgY29uc3QKICNlbmRpZgogfQogCitXZWJTdHJp
bmcgV2ViSW50ZW50OjpzZXJ2aWNlKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMp
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2VydmljZSgpOworI2Vsc2UKKyAgICByZXR1cm4gV2Vi
U3RyaW5nKCk7CisjZW5kaWYKK30KKwogV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdlYklu
dGVudDo6bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogewogICAgIC8vIE5vdGU6
IHNlZSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZS4KQEAg
LTEyMCw0ICsxMzAsMzAgQEAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdlYkludGVudDo6
bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogICAgIHJldHVybiB3ZWJDaGFubmVs
czsKIH0KIAorV2ViVmVjdG9yPFdlYlN0cmluZz4gV2ViSW50ZW50OjpleHRyYXNOYW1lcygpIGNv
bnN0Cit7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIHNpemVfdCBudW1FeHRyYXMgPSBt
X3ByaXZhdGUtPmV4dHJhcygpLnNpemUoKTsKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiBrZXlT
dHJpbmdzKG51bUV4dHJhcyk7CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3I6OktleXMga2V5SXRlciA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuYmVnaW4oKS5r
ZXlzKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGtleUl0ZXIgIT0gbV9wcml2YXRlLT5leHRyYXMo
KS5lbmQoKS5rZXlzKCk7ICsra2V5SXRlciwgKytpKQorICAgICAgICBrZXlTdHJpbmdzW2ldID0g
KmtleUl0ZXI7CisgICAgcmV0dXJuIGtleVN0cmluZ3M7CisjZWxzZQorICAgIHJldHVybiBXZWJW
ZWN0b3I8V2ViU3RyaW5nPigpOworI2VuZGlmCit9CisKK1dlYlN0cmluZyBXZWJJbnRlbnQ6OmV4
dHJhc1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VC
X0lOVEVOVFMpCisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgdmFsID0gbV9wcml2YXRlLT5leHRyYXMoKS5maW5kKG5hbWUpOworICAgIGlmICh2YWwgPT0g
bV9wcml2YXRlLT5leHRyYXMoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwor
ICAgIHJldHVybiB2YWwtPnNlY29uZDsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlN0cmluZygpOwor
I2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IGI2NWU2YjAxMDhhZjNiYTZkMDM5YzQw
ODQ4YzM4MDAwMDY0MzI0ZTguLjVjZjc1NWUzYmNiMzcyZjk4ZjczYjkwMDMzN2ZhNDk0N2Q5YmMy
ZTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAK
QEAgLTEzMzUsNiArMTMzNSwxMyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpkaXNwYXRjaEludGVudChX
ZWJGcmFtZSogc291cmNlLCBjb25zdCBXZWJJbnRlbnRSZXF1ZXN0JiByZXF1ZQogICAgICAgICAg
ICAgKCpwb3J0cylbaV0tPmRlc3Ryb3koKTsKICAgICAgICAgZGVsZXRlIHBvcnRzOwogICAgIH0K
KyAgICBpZiAoIXJlcXVlc3QuaW50ZW50KCkuc2VydmljZSgpLmlzRW1wdHkoKSkKKyAgICAgICAg
cHJpbnRmKCJFeHBsaWNpdCBpbnRlbnQgc2VydmljZTogJXNcbiIsIHJlcXVlc3QuaW50ZW50KCku
c2VydmljZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGV4dHJh
cyA9IHJlcXVlc3QuaW50ZW50KCkuZXh0cmFzTmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGV4dHJhcy5zaXplKCk7ICsraSkgeworICAgICAgICBwcmludGYoIkV4dHJhc1slc10g
PSAlc1xuIiwgZXh0cmFzW2ldLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICByZXF1ZXN0
LmludGVudCgpLmV4dHJhc1ZhbHVlKGV4dHJhc1tpXSkudXRmOCgpLmRhdGEoKSk7CisgICAgfQog
fQogCiAvLyBQdWJsaWMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJp
bnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJpbnRl
bnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKaW5kZXggNzY2Y2ZkMGE0ZDA0N2I1NzY0
Yzg4MzNiOTA0Y2FkZjVjOWE0YzU2Ny4uYmZmMGE2NmM0MmY3ZDM3NDNlMWYwMjM2YmM0NjFiYmY0
MjQ4NDEzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1h
cGktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMt
YXBpLWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDYgQEAKIFBBU1MgbmF2aWdhdG9yLndlYmtpdFN0
YXJ0QWN0aXZpdHkgaXMgZGVmaW5lZC4KIFBBU1MgdmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRl
bnQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBB
U1MgbmV3IFdlYktpdEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBl
bm91Z2ggYXJndW1lbnRzLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdhJykgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2ViS2l0
SW50ZW50KCcnLCcnLCcnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBF
eGNlcHRpb24gMTIuCiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJykgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2Vi
S2l0SW50ZW50KCcnLCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBE
T00gRXhjZXB0aW9uIDEyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWIt
aW50ZW50cy1hcGkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBp
Lmh0bWwKaW5kZXggMWRlMTdhMDk2ZTFlODE1ZmZiYmFhMzhmMTczYWQ3NWQ1ZTEzNTVkMy4uMjYy
Y2EwZGEwZmMxNDE2M2U3MTBhODgzNjlkOWUxMzc2MzMwNGZjMyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCkBAIC04LDcgKzgsNyBAQAogICAgICAgc2hv
dWxkQmVEZWZpbmVkKCJuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eSIpOwogICAgICAgCiAg
ICAgICBzaG91bGRUaHJvdygidmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoKSIsICInVHlw
ZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTs7Ci0gICAgICBzaG91bGRUaHJvdygibmV3
IFdlYktpdEludGVudCgnYScpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzJyIp
OworICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJ2EnKSIsICInRXJyb3I6IFNZ
TlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IFdl
YktpdEludGVudCgnJywnJywnJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyJyIpOwogICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJyki
LCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAgICAgc2hvdWxk
VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJycsJ2MnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6
IERPTSBFeGNlcHRpb24gMTInIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRz
L3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWZiYzRlOGQ5YTg0OTllY2EzMDA0YTRlZmUzZTIwYjNhOTc3ZTYyNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVj
dG9yLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitSZWNlaXZlZCBXZWIgSW50ZW50OiBh
Y3Rpb249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4KK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlv
bj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbitleHBsaWNpdAorRXhwbGljaXQgaW50ZW50IHNlcnZp
Y2U6IGV4cGxpY2l0CitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rpb249YWN0aW9uMSB0eXBlPXRl
eHQvcGxhaW4rZXh0cmFzCitFeHRyYXNbYV0gPSBiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgbmV3IFdlYktpdEludGVudCh7fSkgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcg
V2ViS2l0SW50ZW50KHsnYSc6J2InfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYid9
KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQ
QVNTIG5ldyBXZWJLaXRJbnRlbnQoeyd0eXBlJzonYid9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydh
Y3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzonJ30pIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KKyogc2VudCBvYmplY3QgaW50ZW50Cisq
IHNlbnQgZXhwbGljaXQgaW50ZW50CisqIHNlbnQgaW50ZW50IHdpdGggZXh0cmFzCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9y
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rv
ci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjVlMTRhZDViMzBiMjNhNjU5Y2IzYTczNDM4NjIwMDJjOThlMWY3
ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRz
LW9iai1jb25zdHJ1Y3Rvci5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzxodG1sPgorICA8aGVhZD4K
KyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViLWludGVudHMtdGVzdGluZy5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgIGZ1bmN0aW9uIGJ1dHRvbkNsaWNrZWQo
KSB7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHt9KSIsICInRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJu
ZXcgV2ViS2l0SW50ZW50KHsnYSc6J2InfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhj
ZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J2Fj
dGlvbic6J2InfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwor
ICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J3R5cGUnOidiJ30pIiwgIidF
cnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhy
b3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzon
J30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKworICAgICAg
ICB2YXIgc2ltcGxlSW50ZW50ID0gbmV3IFdlYktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0
aW9uIjoiYWN0aW9uMSIsCisgICAgICAgICAgICAgInR5cGUiOiJ0ZXh0L3BsYWluIiwKKyAgICAg
ICAgICAgICAiZGF0YSI6Im1lc3NhZ2UifSk7CisgICAgICAgIG5hdmlnYXRvci53ZWJraXRTdGFy
dEFjdGl2aXR5KHNpbXBsZUludGVudCk7CisgICAgICAgIGRlYnVnKCIqIHNlbnQgb2JqZWN0IGlu
dGVudCIpOworCisgICAgICAgIHZhciBleHBsaWNpdEludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQo
CisgICAgICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEiLAorICAgICAgICAgICAgICJ0eXBlIjoi
dGV4dC9wbGFpbitleHBsaWNpdCIsCisgICAgICAgICAgICAgImRhdGEiOiJtZXNzYWdlIiwKKyAg
ICAgICAgICAgICAic2VydmljZSIgOiAiZXhwbGljaXQifSk7CisgICAgICAgIG5hdmlnYXRvci53
ZWJraXRTdGFydEFjdGl2aXR5KGV4cGxpY2l0SW50ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2Vu
dCBleHBsaWNpdCBpbnRlbnQiKTsKKworICAgICAgICB2YXIgZXh0cmFzSW50ZW50ID0gbmV3IFdl
YktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisgICAgICAgICAg
ICAgInR5cGUiOiJ0ZXh0L3BsYWluK2V4dHJhcyIsCisgICAgICAgICAgICAgImRhdGEiOiJtZXNz
YWdlIiwKKyAgICAgICAgICAgICAiZXh0cmFzIjp7ImEiOiJiIn19KTsKKyAgICAgICAgbmF2aWdh
dG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoZXh0cmFzSW50ZW50KTsKKyAgICAgICAgZGVidWcoIiog
c2VudCBpbnRlbnQgd2l0aCBleHRyYXMiKTsKKyAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgPC9o
ZWFkPgorPGJvZHkgb25sb2FkPSJzaW11bGF0ZUJ1dHRvblByZXNzKCkiPgorPGlucHV0IHR5cGU9
ImJ1dHRvbiIgaWQ9ImJ1dHRvbiIgdmFsdWU9IlN0YXJ0IFdlYiBJbnRlbnQiIG9ubW91c2V1cD0i
YnV0dG9uQ2xpY2tlZCgpIj4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138020</attachid>
            <date>2012-04-19 18:12:19 -0700</date>
            <delta_ts>2012-04-20 09:03:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120419181218.patch</filename>
            <type>text/plain</type>
            <size>27477</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODZkNzk0NjM2YWUxNmI2
MDE1ZWNlY2UxMGY2NDAzMWY4OGVjNDI1ZC4uY2E1ZTRkODkyYTU4ZGViZWRmMjhlYjU1YWI4ZTdm
YWViNzNmYzU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGhvcGVmdWxseSBiZSB0
ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2luZyB0aGlzCisgICAgICAgIGNv
bnN0cnVjdG9yLCB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4KKyAgICAgICAgQWRkZWQgbGF5
b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAgICAgIHdlYmludGVudHMvd2Vi
LWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMTggIExldmkgV2VpbnRy
YXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dENHJ3Mg
cm91bmRUb0RldmljZVBpeGVscyBzaG91bGQgcm91bmQgZXZlbiB3aGVuIHRoZXJlJ3Mgbm8gdHJh
bnNmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwCmluZGV4IDA1
M2Q0MjljZmExYzk3MjNmOTYzNmMzNzlmM2EzOTE4NWRkNDk0YmUuLmQwNTQwOTU4NjZjYWE2ZmM4
YzY0NDhmNDFkNTFkNzE3NzNiMjgxYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW50ZW50cy9JbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnQuY3BwCkBAIC0zMywxMSArMzMsMTIgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgi
CiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6OmNy
ZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYgcG9y
dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChhY3Rpb24uaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKQEAgLTQ4LDM5ICs0OSw3MSBAQCBQYXNzUmVmUHRyPElu
dGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dHlwZSwgUGFzcwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEpKTsKKyAgICBPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMo
JnBvcnRzLCBlYyk7CisKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJhczsK
KyAgICBTdHJpbmcgc2VydmljZTsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFj
dGlvbiwgdHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2UpKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMp
CitQYXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLCBjb25zdCBEaWN0aW9uYXJ5JiBwYXJhbWV0ZXJzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkgeworICAgIFN0cmluZyBhY3Rpb247CisgICAgYm9v
bCBhY3Rpb25FeGlzdHMgPSBwYXJhbWV0ZXJzLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygi
YWN0aW9uIiwgYWN0aW9uKTsKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBib29sIHR5cGVFeGlzdHMg
PSBwYXJhbWV0ZXJzLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygidHlwZSIsIHR5cGUpOwor
ICAgIFN0cmluZyBzZXJ2aWNlOworICAgIGlmIChwYXJhbWV0ZXJzLmdldCgic2VydmljZSIsIHNl
cnZpY2UpCisgICAgICAgICYmIChzZXJ2aWNlLmlzTnVsbCgpIHx8IHNlcnZpY2UuaXNFbXB0eSgp
KSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
LSAgICBpZiAodHlwZS5pc0VtcHR5KCkpIHsKKworICAgIGlmICghYWN0aW9uRXhpc3RzIHx8IGFj
dGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgaWYgKCF0eXBlRXhpc3RzIHx8IHR5cGUuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
T3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyA9IE1lc3NhZ2VQb3J0Ojpk
aXNlbnRhbmdsZVBvcnRzKCZwb3J0cywgZWMpOworICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9ydHM7
CisgICAgYm9vbCBwb3J0c0V4aXN0cyA9IHBhcmFtZXRlcnMuZ2V0KCJ0cmFuc2ZlciIsIHBvcnRz
KTsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzOworICAgIGlm
IChwb3J0c0V4aXN0cykKKyAgICAgICAgY2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlzZW50YW5n
bGVQb3J0cygmcG9ydHMsIGVjKTsKKworICAgIFNjcmlwdFZhbHVlIGRhdGFWYWx1ZTsKKyAgICBi
b29sIGRhdGFFeGlzdHMgPSBwYXJhbWV0ZXJzLmdldCgiZGF0YSIsIGRhdGFWYWx1ZSk7CisgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZERhdGE7CisgICAgaWYgKGRh
dGFFeGlzdHMpIHsKKyAgICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICAgIHNlcmlhbGl6
ZWREYXRhID0gZGF0YVZhbHVlLnNlcmlhbGl6ZShzY3JpcHRTdGF0ZSwgJnBvcnRzLCAwLCBkaWRU
aHJvdyk7CisgICAgICBpZiAoZGlkVGhyb3cpIHsKKyAgICAgICAgICBlYyA9IERBVEFfQ0xPTkVf
RVJSOworICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW50ZW50KGFjdGlvbiwgdHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgp
KSk7Ci19CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBleHRyYXM7CisgICAgRGlj
dGlvbmFyeSBleHRyYXNEaWN0aW9uYXJ5OworICAgIGJvb2wgZXh0cmFzRXhpc3RzID0gcGFyYW1l
dGVycy5nZXQoImV4dHJhcyIsIGV4dHJhc0RpY3Rpb25hcnkpOworICAgIGlmIChleHRyYXNFeGlz
dHMpCisgICAgICAgIGV4dHJhc0RpY3Rpb25hcnkuZ2V0T3duUHJvcGVydGllc0FzU3RyaW5nSGFz
aE1hcChleHRyYXMpOwogCi1JbnRlbnQ6OkludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29u
c3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSkK
LSAgICA6IG1fYWN0aW9uKGFjdGlvbikKLSAgICAsIG1fdHlwZSh0eXBlKQotewotICAgIGlmIChk
YXRhKQotICAgICAgICBtX2RhdGEgPSBkYXRhOwotICAgIGVsc2UKLSAgICAgICAgbV9kYXRhID0g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEludGVudChhY3Rpb24sIHR5cGUsIHNlcmlhbGl6ZWREYXRhLnJlbGVhc2UoKSwgY2hhbm5l
bHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2UpKTsKIH0KIAotSW50ZW50OjpJbnRlbnQoY29u
c3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+
IHBvcnRzKQorSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgdHlwZSwKKyAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cywKKyAgICAg
ICAgICAgICAgIGNvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhcywgY29u
c3QgU3RyaW5nJiBzZXJ2aWNlKQogICAgIDogbV9hY3Rpb24oYWN0aW9uKQogICAgICwgbV90eXBl
KHR5cGUpCiAgICAgLCBtX3BvcnRzKHBvcnRzKQorICAgICwgbV9zZXJ2aWNlKHNlcnZpY2UpCisg
ICAgLCBtX2V4dHJhcyhleHRyYXMpCiB7CiAgICAgaWYgKGRhdGEpCiAgICAgICAgIG1fZGF0YSA9
IGRhdGE7CkBAIC05OCw2ICsxMzEsMTEgQEAgY29uc3QgU3RyaW5nJiBJbnRlbnQ6OnR5cGUoKSBj
b25zdAogICAgIHJldHVybiBtX3R5cGU7CiB9CiAKK2NvbnN0IFN0cmluZyYgSW50ZW50OjpzZXJ2
aWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZXJ2aWNlOworfQorCiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqIEludGVudDo6ZGF0YSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS5nZXQo
KTsKQEAgLTEwOCw2ICsxNDYsMTEgQEAgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIEludGVudDo6
bWVzc2FnZVBvcnRzKCkgY29uc3QKICAgICByZXR1cm4gbV9wb3J0cy5nZXQoKTsKIH0KIAorY29u
c3QgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgSW50ZW50OjpleHRyYXMoKSBjb25zdAor
eworICAgIHJldHVybiBtX2V4dHJhczsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRz
L0ludGVudC5oCmluZGV4IDMzZWY2OWUwNDQxMDU5NmUyNDE1MzM0ODVlZmJjOWY1YzRlNmI2ZDQu
LjU5MzIxYWVjNmNhNzdmMmRhZTU0MjJkOWJmZjZmYjM4NzJiY2I0NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJM
RShXRUJfSU5URU5UUykKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJNZXNz
YWdlUG9ydC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CkBAIC00MSwzMiArNDIsMzkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBTY3JpcHRTdGF0ZTsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgSW50ZW50IDogcHVibGljIFJlZkNvdW50
ZWQ8SW50ZW50PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3Ry
aW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3Qg
TWVzc2FnZVBvcnRBcnJheSYgcG9ydHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShTY3JpcHRTdGF0ZSosIGNvbnN0IERpY3Rpb25hcnkmLCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OwogICAg
IGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0OwogICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSog
ZGF0YSgpIGNvbnN0OwogCi0gICAgaW50IGlkZW50aWZpZXIoKSBjb25zdDsKLSAgICB2b2lkIHNl
dElkZW50aWZpZXIoaW50KTsKLQogICAgIE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBtZXNzYWdl
UG9ydHMoKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcmIHNlcnZpY2UoKSBjb25zdDsKKyAgICBj
b25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMoKSBjb25zdDsKKworcHJv
dGVjdGVkOgorICAgIEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0
eXBlLAorICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwg
UGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMsCisgICAgICAgICAgIGNv
bnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhcywgY29uc3QgU3RyaW5nJiBz
ZXJ2aWNlKTsKIAogcHJpdmF0ZToKLSAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEp
OwotICAgIEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdl
UG9ydENoYW5uZWxBcnJheT4gcG9ydHMpOwogCiAgICAgU3RyaW5nIG1fYWN0aW9uOwogICAgIFN0
cmluZyBtX3R5cGU7CisKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX2RhdGE7
CiAgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX3BvcnRzOworCisgICAgU3Ry
aW5nIG1fc2VydmljZTsKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fZXh0cmFz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50LmlkbAppbmRleCBlZjA4MjUwNzM0ZmZjNzliMTk0OTgwZWM4MjQzZWViMzQ0
OGFjNTJlLi45MjY1N2I0ZTZjZTYwZjA3OTk1MjQ2NDAxNjM2NWI4NzA5MTQ5NWU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbApAQCAtMjYsNiArMjYsNyBAQAog
bW9kdWxlIHdpbmRvdyB7CiAgIGludGVyZmFjZSBbCiAgICAgICBDb25kaXRpb25hbD1XRUJfSU5U
RU5UUywKKyAgICAgIEN1c3RvbUNvbnN0cnVjdG9yLAogICAgICAgQ29uc3RydWN0b3IoaW4gRE9N
U3RyaW5nIGFjdGlvbiwgaW4gRE9NU3RyaW5nIHR5cGUsIGluIFtPcHRpb25hbD1EZWZhdWx0SXNO
dWxsU3RyaW5nLCBUcmFuc2Zlckxpc3Q9dHJhbnNmZXJMaXN0XSBTZXJpYWxpemVkU2NyaXB0VmFs
dWUgZGF0YSwgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gQXJyYXkgdHJhbnNmZXJM
aXN0KSwKICAgICAgIENvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uCiAgIF0gSW50ZW50IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCA0OWE3MjFjMDcwYmJiMDk2YzdiYWJjNTQ2NmQ3YWQzZWQwMzkyNjNl
Li5mZmE2YjEzOGMyNmNjZjhhZGZiMDlhY2VjMGI1NjkxNjJkYThlMzY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0yMjc4LDYgKzIyNzgsNyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEludDE2QXJyYXlDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhJbnQzMkFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW50OEFycmF5Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwCmluZGV4IGZkNGRhMWZiMDA2Y2ZjZjY0
MTg5ZjgyMzlkOGU2Y2IyMGYxYzZhZWEuLmNkYzI4MjBiZDQ1ZjI0MmNhYmZhZDYwZDM4MDU0NWEw
MDc3OTYzN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25h
cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwCkBA
IC00MTIsNCArNDEyLDM4IEBAIGJvb2wgRGljdGlvbmFyeTo6Z2V0KGNvbnN0IFN0cmluZyYga2V5
LCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiYgdmFsCiAKICNlbmRpZgogCiti
b29sIERpY3Rpb25hcnk6OmdldChjb25zdCBTdHJpbmcmIGtleSwgRGljdGlvbmFyeSYgdmFsdWUp
IGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdl
dEtleShrZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodjhW
YWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgdmFsdWUgPSBEaWN0aW9uYXJ5KHY4VmFsdWUpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBEaWN0aW9uYXJ5OjpnZXRPd25Qcm9wZXJ0
aWVzQXNTdHJpbmdIYXNoTWFwKFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGhhc2hNYXAp
IGNvbnN0Cit7CisgICAgaWYgKCFtX29wdGlvbnMtPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QobV9vcHRpb25zKTsKKyAgICB2ODo6TG9jYWw8djg6OkFycmF5
PiBwcm9wZXJ0aWVzID0gd3JhcHBlci0+R2V0T3duUHJvcGVydHlOYW1lcygpOworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLT5MZW5ndGgoKTsgKytpKSB7CisgICAgICB2
ODo6TG9jYWw8djg6OlN0cmluZz4ga2V5ID0gcHJvcGVydGllcy0+R2V0KGkpLT5Ub1N0cmluZygp
OworICAgICAgaWYgKCF3cmFwcGVyLT5IYXMoa2V5KSkKKyAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSB3cmFwcGVyLT5HZXQoa2V5KTsKKyAg
ICAgIFN0cmluZyBzdHJpbmdLZXkgPSB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGtleSk7CisgICAg
ICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKKyAg
ICAgIGlmICghc3RyaW5nS2V5LmlzRW1wdHkoKSkKKyAgICAgICAgICBoYXNoTWFwLnNldChzdHJp
bmdLZXksIHN0cmluZ1ZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaApp
bmRleCAzMjE2NGI4Y2JiMjNhNTRhYmM1ODQ5Nzk5NjI1OTZjNWZkMmZmODMxLi5hMWQ1NmVmYTdj
NWM0MDRlOWY5YzhhMDIxODExODc2NWUwYjNiYzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvRGljdGlvbmFyeS5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCkBAIC04MSw2ICs4Miw4IEBAIHB1YmxpYzoKICAgICBi
b29sIGdldChjb25zdCBTdHJpbmcmLCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0
PiYpIGNvbnN0OwogI2VuZGlmCiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgSGFzaFNldDxB
dG9taWNTdHJpbmc+JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgRGljdGlv
bmFyeSYpIGNvbnN0OworICAgIGJvb2wgZ2V0T3duUHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcChX
VEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JikgY29uc3Q7CiAKICAgICBib29sIGdldFdpdGhV
bmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmLCBTdHJpbmcmKSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwCmluZGV4IGVjYzM2NzM2MmE4
MzhiN2Y5ODkyOGVkMDU5OWQ2Mzc2OWYwOTdjYjcuLmNhNTU4YzdjNzQ5N2U2OWNiMDM3N2NmOTE2
ODJhZDllZDJhMmY4ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1
ZS5jcHAKQEAgLTQ0LDYgKzQ0LDEzIEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBTY3JpcHRWYWx1ZTo6c2VyaWFsaXplKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0CiAgICAgcmV0
dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4VmFsdWUoKSk7CiB9CiAKK1Bhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTY3JpcHRWYWx1ZTo6c2VyaWFsaXplKFNjcmlw
dFN0YXRlKiBzY3JpcHRTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJy
YXlCdWZmZXJBcnJheSogYXJyYXlCdWZmZXJzLCBib29sJiBkaWRUaHJvdykKK3sKKyAgICBTY3Jp
cHRTY29wZSBzY29wZShzY3JpcHRTdGF0ZSk7CisgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKHY4VmFsdWUoKSwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlcnMsIGRpZFRo
cm93KTsKK30KKwogU2NyaXB0VmFsdWUgU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKIHsKICAgICBT
Y3JpcHRTY29wZSBzY29wZShzY3JpcHRTdGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0VmFsdWUuaAppbmRleCBkNDEyOTAxZmRhZDk1MGVlODZmOGI5ZGVlZGNiMTc4MmQxNWEw
MTFlLi5mNjIzMzk0NTRjNTMyNWI4NjI2MTRjOGU4NjQ4ZWJkNjgzMmZmZDIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKQEAgLTM2LDE0ICszNiwyMCBAQAogCiAj
aW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogI2lmbmRlZiBOREVCVUcKICNpbmNsdWRlICJWOFByb3h5LmgiICAvLyBm
b3IgcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgZ2xvYmFsIGhhbmRsZXMuCiAjZW5kaWYKIAorbmFt
ZXNwYWNlIFdURiB7CitjbGFzcyBBcnJheUJ1ZmZlcjsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKK2NsYXNzIE1lc3NhZ2VQb3J0OwogY2xhc3MgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOwogCiBjbGFzcyBTY3JpcHRWYWx1ZSB7CkBAIC0xMzEsNiArMTM3
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUqKTsKKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlwdFN0YXRlKiwgTWVzc2FnZVBvcnRBcnJheSosIEFy
cmF5QnVmZmVyQXJyYXkqLCBib29sJik7CiAgICAgc3RhdGljIFNjcmlwdFZhbHVlIGRlc2VyaWFs
aXplKFNjcmlwdFN0YXRlKiwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKik7CiAKICAgICBzdGF0aWMg
U2NyaXB0VmFsdWUgdW5kZWZpbmVkKCkgeyByZXR1cm4gU2NyaXB0VmFsdWUodjg6OlVuZGVmaW5l
ZCgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SW50ZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyMDhhMDk0NGEzN2JkMzk1MmQ2
MDUzMzQ5MDBiMDQwZjQ0ZjgzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSw5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
LCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRlbnQuaCIKKworI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhC
aW5kaW5nTWFjcm9zLmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhJ
bnRlbnQuaCIKKyNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiVjhQcm94eS5o
IgorI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLkludGVudC5Db25z
dHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVk
IGFzIGEgZnVuY3Rpb24uIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKworICAgIGlmIChDb25zdHJ1
Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rvck1vZGU6OldyYXBFeGlzdGluZ09iamVj
dCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBW
OFByb3h5OjpUeXBlRXJyb3IpOworICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDEpIHsKKyAgICAg
ICAgLy8gVXNlIHRoZSBkaWN0aW9uYXJ5IGNvbnN0cnVjdG9yLiBUaGlzIGJsb2NrIHdpbGwgcmV0
dXJuIGlmIHRoZQorICAgICAgICAvLyBhcmd1bWVudCBpc24ndCBhIHZhbGlkIERpY3Rpb25hcnku
CisgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhEaWN0aW9uYXJ5LCBvcHRpb25zLCBhcmdzWzBdKTsK
KyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxJbnRlbnQ+IGlt
cGwgPSBJbnRlbnQ6OmNyZWF0ZShTY3JpcHRTdGF0ZTo6Y3VycmVudCgpLCBvcHRpb25zLCBlYyk7
CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKyAg
ICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBp
bXBsLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoaW1wbC5yZWxlYXNlKCksIGFyZ3MuSG9s
ZGVyKCkpOworICAgIH0KKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFNUUklOR19U
T19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8PiwgYWN0aW9uLCBNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBT
VFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHR5cGUs
IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwor
ICAgIE1lc3NhZ2VQb3J0QXJyYXkgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdDsKKyAgICBB
cnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3Q7CisgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPiAzKSB7CisgICAgICAgIGlmICghZXh0cmFjdFRyYW5zZmVyYWJsZXMoYXJn
c1szXSwgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgYXJyYXlCdWZmZXJBcnJheVRyYW5z
ZmVyTGlzdCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGV4dHJh
Y3QgdHJhbnNmZXJhYmxlcyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgfQorICAgIGJvb2wg
ZGF0YURpZFRocm93ID0gZmFsc2U7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
ZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMl0sICZtZXNzYWdlUG9y
dEFycmF5VHJhbnNmZXJMaXN0LCAmYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdCwgZGF0YURp
ZFRocm93KTsKKyAgICBpZiAoZGF0YURpZFRocm93KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOworCisgICAgUmVmUHRyPEludGVudD4gaW1wbCA9IEludGVudDo6Y3JlYXRlKGFjdGlv
biwgdHlwZSwgZGF0YSwgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgZWMpOworICAgIGlm
IChlYykKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CisKKyAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIod3JhcHBlciwgJmluZm8sIGltcGwuZ2V0KCkpOworICAgIFY4RE9NV3JhcHBl
cjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGltcGwucmVsZWFzZSgpLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKKyAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkludGVudC5oCmluZGV4IDczYTYyMTMyYWQ2MzM5YzU2ZDQ1NjNlNDI0ZGI2ZjU4ZGZk
MDMzODIuLjU3YTk1NjJmYTI1YjVjMDYwNTVjYzNkN2M2ZGM2YzVmNDlkMjA3MzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCkBAIC02Myw2ICs2Myw5IEBAIHB1
YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBhY3Rpb24oKSBjb25zdDsKICAgICBX
RUJLSVRfRVhQT1JUIFdlYlN0cmluZyB0eXBlKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCBX
ZWJTdHJpbmcgZGF0YSgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIHNlcnZp
Y2UoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGV4dHJh
c05hbWVzKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgZXh0cmFzVmFsdWUo
Y29uc3QgV2ViU3RyaW5nJikgY29uc3Q7CiAKICAgICAvLyBDYWxsZXIgdGFrZXMgb3duZXJzaGlw
IG9mIHRoZSBwb3J0cy4KICAgICBXRUJLSVRfRVhQT1JUIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5KiBtZXNzYWdlUG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkludGVudC5jcHAKaW5kZXggOGE3ZDZhYWM1NDNiZDk5OTk5YjhmYTc5ODQz
YTM0MDNhZTU2N2M5ZS4uNTA5OWQ3MzE2ZGNhYTBkNDI3YzQzNDAzYmMwOGNmZTg3M2ZkMGMwZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiSW50ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWwuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMTAzLDYgKzEwNCwxNSBA
QCBXZWJTdHJpbmcgV2ViSW50ZW50OjpkYXRhKCkgY29uc3QKICNlbmRpZgogfQogCitXZWJTdHJp
bmcgV2ViSW50ZW50OjpzZXJ2aWNlKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMp
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2VydmljZSgpOworI2Vsc2UKKyAgICByZXR1cm4gV2Vi
U3RyaW5nKCk7CisjZW5kaWYKK30KKwogV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdlYklu
dGVudDo6bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogewogICAgIC8vIE5vdGU6
IHNlZSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZS4KQEAg
LTEyMCw0ICsxMzAsMzAgQEAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdlYkludGVudDo6
bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogICAgIHJldHVybiB3ZWJDaGFubmVs
czsKIH0KIAorV2ViVmVjdG9yPFdlYlN0cmluZz4gV2ViSW50ZW50OjpleHRyYXNOYW1lcygpIGNv
bnN0Cit7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIHNpemVfdCBudW1FeHRyYXMgPSBt
X3ByaXZhdGUtPmV4dHJhcygpLnNpemUoKTsKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiBrZXlT
dHJpbmdzKG51bUV4dHJhcyk7CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3I6OktleXMga2V5SXRlciA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuYmVnaW4oKS5r
ZXlzKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGtleUl0ZXIgIT0gbV9wcml2YXRlLT5leHRyYXMo
KS5lbmQoKS5rZXlzKCk7ICsra2V5SXRlciwgKytpKQorICAgICAgICBrZXlTdHJpbmdzW2ldID0g
KmtleUl0ZXI7CisgICAgcmV0dXJuIGtleVN0cmluZ3M7CisjZWxzZQorICAgIHJldHVybiBXZWJW
ZWN0b3I8V2ViU3RyaW5nPigpOworI2VuZGlmCit9CisKK1dlYlN0cmluZyBXZWJJbnRlbnQ6OmV4
dHJhc1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VC
X0lOVEVOVFMpCisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgdmFsID0gbV9wcml2YXRlLT5leHRyYXMoKS5maW5kKG5hbWUpOworICAgIGlmICh2YWwgPT0g
bV9wcml2YXRlLT5leHRyYXMoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwor
ICAgIHJldHVybiB2YWwtPnNlY29uZDsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlN0cmluZygpOwor
I2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IGI2NWU2YjAxMDhhZjNiYTZkMDM5YzQw
ODQ4YzM4MDAwMDY0MzI0ZTguLjVjZjc1NWUzYmNiMzcyZjk4ZjczYjkwMDMzN2ZhNDk0N2Q5YmMy
ZTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAK
QEAgLTEzMzUsNiArMTMzNSwxMyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpkaXNwYXRjaEludGVudChX
ZWJGcmFtZSogc291cmNlLCBjb25zdCBXZWJJbnRlbnRSZXF1ZXN0JiByZXF1ZQogICAgICAgICAg
ICAgKCpwb3J0cylbaV0tPmRlc3Ryb3koKTsKICAgICAgICAgZGVsZXRlIHBvcnRzOwogICAgIH0K
KyAgICBpZiAoIXJlcXVlc3QuaW50ZW50KCkuc2VydmljZSgpLmlzRW1wdHkoKSkKKyAgICAgICAg
cHJpbnRmKCJFeHBsaWNpdCBpbnRlbnQgc2VydmljZTogJXNcbiIsIHJlcXVlc3QuaW50ZW50KCku
c2VydmljZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGV4dHJh
cyA9IHJlcXVlc3QuaW50ZW50KCkuZXh0cmFzTmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGV4dHJhcy5zaXplKCk7ICsraSkgeworICAgICAgICBwcmludGYoIkV4dHJhc1slc10g
PSAlc1xuIiwgZXh0cmFzW2ldLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICByZXF1ZXN0
LmludGVudCgpLmV4dHJhc1ZhbHVlKGV4dHJhc1tpXSkudXRmOCgpLmRhdGEoKSk7CisgICAgfQog
fQogCiAvLyBQdWJsaWMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJp
bnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJpbnRl
bnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKaW5kZXggNzY2Y2ZkMGE0ZDA0N2I1NzY0
Yzg4MzNiOTA0Y2FkZjVjOWE0YzU2Ny4uYmZmMGE2NmM0MmY3ZDM3NDNlMWYwMjM2YmM0NjFiYmY0
MjQ4NDEzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1h
cGktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMt
YXBpLWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDYgQEAKIFBBU1MgbmF2aWdhdG9yLndlYmtpdFN0
YXJ0QWN0aXZpdHkgaXMgZGVmaW5lZC4KIFBBU1MgdmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRl
bnQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBB
U1MgbmV3IFdlYktpdEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBl
bm91Z2ggYXJndW1lbnRzLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdhJykgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2ViS2l0
SW50ZW50KCcnLCcnLCcnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBF
eGNlcHRpb24gMTIuCiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJykgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2Vi
S2l0SW50ZW50KCcnLCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBE
T00gRXhjZXB0aW9uIDEyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWIt
aW50ZW50cy1hcGkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBp
Lmh0bWwKaW5kZXggMWRlMTdhMDk2ZTFlODE1ZmZiYmFhMzhmMTczYWQ3NWQ1ZTEzNTVkMy4uMjYy
Y2EwZGEwZmMxNDE2M2U3MTBhODgzNjlkOWUxMzc2MzMwNGZjMyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCkBAIC04LDcgKzgsNyBAQAogICAgICAgc2hv
dWxkQmVEZWZpbmVkKCJuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eSIpOwogICAgICAgCiAg
ICAgICBzaG91bGRUaHJvdygidmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoKSIsICInVHlw
ZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTs7Ci0gICAgICBzaG91bGRUaHJvdygibmV3
IFdlYktpdEludGVudCgnYScpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzJyIp
OworICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJ2EnKSIsICInRXJyb3I6IFNZ
TlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IFdl
YktpdEludGVudCgnJywnJywnJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyJyIpOwogICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJyki
LCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAgICAgc2hvdWxk
VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJycsJ2MnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6
IERPTSBFeGNlcHRpb24gMTInIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRz
L3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWQ3MmJlNDAxMTYwZjAwZDc3NzVjZmJjYWZmMjY5MmEzNmQ5MDZlMwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVj
dG9yLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIwIEBACitSZWNlaXZlZCBXZWIgSW50ZW50OiBh
Y3Rpb249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4KK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlv
bj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbitleHBsaWNpdAorRXhwbGljaXQgaW50ZW50IHNlcnZp
Y2U6IGV4cGxpY2l0CitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rpb249YWN0aW9uMSB0eXBlPXRl
eHQvcGxhaW4rZXh0cmFzCitFeHRyYXNbYV0gPSBiCitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rp
b249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4rcG9ydAorSGF2ZSAxIHBvcnRzCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgbmV3IFdlYktpdElu
dGVudCh7fSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYSc6J2InfSkgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50
KHsnYWN0aW9uJzonYid9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBF
eGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeyd0eXBlJzonYid9KSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBX
ZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzonJ30pIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KKyogc2VudCBv
YmplY3QgaW50ZW50CisqIHNlbnQgZXhwbGljaXQgaW50ZW50CisqIHNlbnQgaW50ZW50IHdpdGgg
ZXh0cmFzCisqIHNlbnQgaW50ZW50IHdpdGggcG9ydAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3IuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yYTU5ZjMwYWMwMGE3M2RjNmQzYzk5NDQ2YmEyYjMxNThiODk2NmRiCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3Iu
aHRtbApAQCAtMCwwICsxLDU0IEBACis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9
Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3dlYi1pbnRlbnRzLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQ+CisgICAgICBmdW5jdGlvbiBidXR0b25DbGlja2VkKCkgeworICAgICAgICBzaG91
bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7fSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00g
RXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7
J2EnOidiJ30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAg
ICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidiJ30pIiwgIidF
cnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhy
b3coIm5ldyBXZWJLaXRJbnRlbnQoeyd0eXBlJzonYid9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6
IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50
ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6Jyd9KSIsICInRXJyb3I6IFNZ
TlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisKKyAgICAgICAgdmFyIHNpbXBsZUludGVu
dCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAgICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEiLAor
ICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9wbGFpbiIsCisgICAgICAgICAgICAgImRhdGEiOiJt
ZXNzYWdlIn0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShzaW1wbGVJ
bnRlbnQpOworICAgICAgICBkZWJ1ZygiKiBzZW50IG9iamVjdCBpbnRlbnQiKTsKKworICAgICAg
ICB2YXIgZXhwbGljaXRJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAgICAgICAgeyJh
Y3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxhaW4rZXhwbGlj
aXQiLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSIsCisgICAgICAgICAgICAgInNlcnZp
Y2UiIDogImV4cGxpY2l0In0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0
eShleHBsaWNpdEludGVudCk7CisgICAgICAgIGRlYnVnKCIqIHNlbnQgZXhwbGljaXQgaW50ZW50
Iik7CisKKyAgICAgICAgdmFyIGV4dHJhc0ludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAg
ICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEiLAorICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9w
bGFpbitleHRyYXMiLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSIsCisgICAgICAgICAg
ICAgImV4dHJhcyI6eyJhIjoiYiJ9fSk7CisgICAgICAgIG5hdmlnYXRvci53ZWJraXRTdGFydEFj
dGl2aXR5KGV4dHJhc0ludGVudCk7CisgICAgICAgIGRlYnVnKCIqIHNlbnQgaW50ZW50IHdpdGgg
ZXh0cmFzIik7CisKKyAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsK
KyAgICAgICAgY2hhbm5lbC5wb3J0Mi5vbk1lc3NhZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICBkZWJ1ZygiKiBnb3QgbWVzc2FnZSIpOworICAgICAgICB9OworICAgICAgICB2YXIgcG9ydElu
dGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAgICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEi
LAorICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9wbGFpbitwb3J0IiwKKyAgICAgICAgICAgICAi
ZGF0YSI6Y2hhbm5lbC5wb3J0MSwKKyAgICAgICAgICAgICAidHJhbnNmZXIiOltjaGFubmVsLnBv
cnQxXX0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShwb3J0SW50ZW50
KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBpbnRlbnQgd2l0aCBwb3J0Iik7CisgICAgICB9Cisg
ICAgPC9zY3JpcHQ+CisgIDwvaGVhZD4KKzxib2R5IG9ubG9hZD0ic2ltdWxhdGVCdXR0b25QcmVz
cygpIj4KKzxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJidXR0b24iIHZhbHVlPSJTdGFydCBXZWIg
SW50ZW50IiBvbm1vdXNldXA9ImJ1dHRvbkNsaWNrZWQoKSI+Cis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138102</attachid>
            <date>2012-04-20 09:04:01 -0700</date>
            <delta_ts>2012-04-20 10:36:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120420090400.patch</filename>
            <type>text/plain</type>
            <size>27685</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjVjODU0ZjgyMzhkYTNh
YTVmOWIwMDdhMzIwNzA4MDg1OWNjYzkyMy4uMWY4MzBkOWZlMDQxNWJhNGZiNGEyZmFhNWFmNGMw
ODgzNDllZTAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGhvcGVmdWxseSBiZSB0
ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2luZyB0aGlzCisgICAgICAgIGNv
bnN0cnVjdG9yLCB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4KKyAgICAgICAgQWRkZWQgbGF5
b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAgICAgIHdlYmludGVudHMvd2Vi
LWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMTkgIFhpbmduYW4gV2Fu
ZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CiAKICAgICAgICAgT3B0aW1pemUgZm9yIERBUldJ
TiBpbiBEaXJlY3RDb252b2x2ZXI6OnByb2Nlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50LmNwcAppbmRleCAwNTNkNDI5Y2ZhMWM5NzIzZjk2MzZjMzc5ZjNhMzkxODVk
ZDQ5NGJlLi5kMDU0MDk1ODY2Y2FhNmZjOGM2NDQ4ZjQxZDUxZDcxNzczYjI4MWMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcApAQCAtMzMsMTEgKzMzLDEyIEBA
CiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIK
KyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNz
UmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIGNv
bnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBp
ZiAoYWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CkBAIC00OCwz
OSArNDksNzEgQEAgUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3MKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBlLCBkYXRh
KSk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyA9IE1lc3Nh
Z2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywgZWMpOworCisgICAgV1RGOjpIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBleHRyYXM7CisgICAgU3RyaW5nIHNlcnZpY2U7CisKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEsIGNoYW5uZWxzLnJlbGVh
c2UoKSwgZXh0cmFzLCBzZXJ2aWNlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYg
cG9ydHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3Jl
YXRlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgRGljdGlvbmFyeSYgcGFyYW1ldGVy
cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpIHsKKyAg
ICBTdHJpbmcgYWN0aW9uOworICAgIGJvb2wgYWN0aW9uRXhpc3RzID0gcGFyYW1ldGVycy5nZXRX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soImFjdGlvbiIsIGFjdGlvbik7CisgICAgU3RyaW5nIHR5
cGU7CisgICAgYm9vbCB0eXBlRXhpc3RzID0gcGFyYW1ldGVycy5nZXRXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soInR5cGUiLCB0eXBlKTsKKyAgICBTdHJpbmcgc2VydmljZTsKKyAgICBpZiAocGFy
YW1ldGVycy5nZXQoInNlcnZpY2UiLCBzZXJ2aWNlKQorICAgICAgICAmJiAoc2VydmljZS5pc051
bGwoKSB8fCBzZXJ2aWNlLmlzRW1wdHkoKSkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKHR5cGUuaXNFbXB0eSgpKSB7CisKKyAg
ICBpZiAoIWFjdGlvbkV4aXN0cyB8fCBhY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghdHlwZUV4aXN0
cyB8fCB0eXBlLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4g
Y2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGVQb3J0cygmcG9ydHMsIGVjKTsKKyAg
ICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzOworICAgIGJvb2wgcG9ydHNFeGlzdHMgPSBwYXJhbWV0
ZXJzLmdldCgidHJhbnNmZXIiLCBwb3J0cyk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5l
bEFycmF5PiBjaGFubmVsczsKKyAgICBpZiAocG9ydHNFeGlzdHMpCisgICAgICAgIGNoYW5uZWxz
ID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMoJnBvcnRzLCBlYyk7CisKKyAgICBTY3Jp
cHRWYWx1ZSBkYXRhVmFsdWU7CisgICAgYm9vbCBkYXRhRXhpc3RzID0gcGFyYW1ldGVycy5nZXQo
ImRhdGEiLCBkYXRhVmFsdWUpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWREYXRhOworICAgIGlmIChkYXRhRXhpc3RzKSB7CisgICAgICBib29sIGRpZFRocm93
ID0gZmFsc2U7CisgICAgICBzZXJpYWxpemVkRGF0YSA9IGRhdGFWYWx1ZS5zZXJpYWxpemUoc2Ny
aXB0U3RhdGUsICZwb3J0cywgMCwgZGlkVGhyb3cpOworICAgICAgaWYgKGRpZFRocm93KSB7Cisg
ICAgICAgICAgZWMgPSBEQVRBX0NMT05FX0VSUjsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
IH0KKyAgICB9CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUs
IGRhdGEsIGNoYW5uZWxzLnJlbGVhc2UoKSkpOwotfQorICAgIFdURjo6SGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gZXh0cmFzOworICAgIERpY3Rpb25hcnkgZXh0cmFzRGljdGlvbmFyeTsKKyAgICBi
b29sIGV4dHJhc0V4aXN0cyA9IHBhcmFtZXRlcnMuZ2V0KCJleHRyYXMiLCBleHRyYXNEaWN0aW9u
YXJ5KTsKKyAgICBpZiAoZXh0cmFzRXhpc3RzKQorICAgICAgICBleHRyYXNEaWN0aW9uYXJ5Lmdl
dE93blByb3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAoZXh0cmFzKTsKIAotSW50ZW50OjpJbnRlbnQo
Y29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCi0gICAgOiBtX2FjdGlvbihhY3Rpb24pCi0gICAgLCBt
X3R5cGUodHlwZSkKLXsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgbV9kYXRhID0gZGF0YTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVl
KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBlLCBzZXJpYWxp
emVkRGF0YS5yZWxlYXNlKCksIGNoYW5uZWxzLnJlbGVhc2UoKSwgZXh0cmFzLCBzZXJ2aWNlKSk7
CiB9CiAKLUludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcm
IHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQYXNzT3duUHRy
PE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cykKK0ludGVudDo6SW50ZW50KGNvbnN0IFN0
cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsCisgICAgICAgICAgICAgICBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENo
YW5uZWxBcnJheT4gcG9ydHMsCisgICAgICAgICAgICAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+JiBleHRyYXMsIGNvbnN0IFN0cmluZyYgc2VydmljZSkKICAgICA6IG1fYWN0
aW9uKGFjdGlvbikKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9wb3J0cyhwb3J0cykKKyAg
ICAsIG1fc2VydmljZShzZXJ2aWNlKQorICAgICwgbV9leHRyYXMoZXh0cmFzKQogewogICAgIGlm
IChkYXRhKQogICAgICAgICBtX2RhdGEgPSBkYXRhOwpAQCAtOTgsNiArMTMxLDExIEBAIGNvbnN0
IFN0cmluZyYgSW50ZW50Ojp0eXBlKCkgY29uc3QKICAgICByZXR1cm4gbV90eXBlOwogfQogCitj
b25zdCBTdHJpbmcmIEludGVudDo6c2VydmljZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Vy
dmljZTsKK30KKwogU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBJbnRlbnQ6OmRhdGEoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2RhdGEuZ2V0KCk7CkBAIC0xMDgsNiArMTQ2LDExIEBAIE1lc3NhZ2VQ
b3J0Q2hhbm5lbEFycmF5KiBJbnRlbnQ6Om1lc3NhZ2VQb3J0cygpIGNvbnN0CiAgICAgcmV0dXJu
IG1fcG9ydHMuZ2V0KCk7CiB9CiAKK2NvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4m
IEludGVudDo6ZXh0cmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9leHRyYXM7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5URU5UUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaAppbmRleCAzM2VmNjllMDQ0MTA1OTZl
MjQxNTMzNDg1ZWZiYzlmNWM0ZTZiNmQ0Li41OTMyMWFlYzZjYTc3ZjJkYWU1NDIyZDliZmY2ZmIz
ODcyYmNiNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCkBAIC0z
MSw2ICszMSw3IEBACiAKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCiAKKyNpbmNsdWRlICJEaWN0
aW9uYXJ5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9y
dENoYW5uZWwuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNDEsMzIgKzQyLDM5IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2NyaXB0U3RhdGU7CiBjbGFzcyBTZXJp
YWxpemVkU2NyaXB0VmFsdWU7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNz
IEludGVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVudD4gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEludGVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBT
dHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGRhdGEsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRp
b25Db2RlJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoU2NyaXB0U3Rh
dGUqLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgY29uc3QgU3Ry
aW5nJiBhY3Rpb24oKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdDsKICAg
ICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEoKSBjb25zdDsKIAotICAgIGludCBpZGVudGlm
aWVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRJZGVudGlmaWVyKGludCk7Ci0KICAgICBNZXNzYWdl
UG9ydENoYW5uZWxBcnJheSogbWVzc2FnZVBvcnRzKCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5n
JiBzZXJ2aWNlKCkgY29uc3Q7CisgICAgY29uc3QgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgZXh0cmFzKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5n
JiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJy
YXk+IHBvcnRzLAorICAgICAgICAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiBleHRyYXMsIGNvbnN0IFN0cmluZyYgc2VydmljZSk7CiAKIHByaXZhdGU6Ci0gICAgSW50ZW50
KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKTsKLSAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rp
b24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKTsKIAogICAg
IFN0cmluZyBtX2FjdGlvbjsKICAgICBTdHJpbmcgbV90eXBlOworCiAgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gbV9kYXRhOwogICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxB
cnJheT4gbV9wb3J0czsKKworICAgIFN0cmluZyBtX3NlcnZpY2U7CisgICAgV1RGOjpIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBtX2V4dHJhczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKaW5kZXggZWYwODI1MDcz
NGZmYzc5YjE5NDk4MGVjODI0M2VlYjM0NDhhYzUyZS4uOTI2NTdiNGU2Y2U2MGYwNzk5NTI0NjQw
MTYzNjViODcwOTE0OTVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dC5pZGwKQEAgLTI2LDYgKzI2LDcgQEAKIG1vZHVsZSB3aW5kb3cgewogICBpbnRlcmZhY2UgWwog
ICAgICAgQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFMsCisgICAgICBDdXN0b21Db25zdHJ1Y3RvciwK
ICAgICAgIENvbnN0cnVjdG9yKGluIERPTVN0cmluZyBhY3Rpb24sIGluIERPTVN0cmluZyB0eXBl
LCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzTnVsbFN0cmluZywgVHJhbnNmZXJMaXN0PXRyYW5zZmVy
TGlzdF0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRhdGEsIGluIFtPcHRpb25hbD1EZWZhdWx0SXNV
bmRlZmluZWRdIEFycmF5IHRyYW5zZmVyTGlzdCksCiAgICAgICBDb25zdHJ1Y3RvclJhaXNlc0V4
Y2VwdGlvbgogICBdIEludGVudCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjU1NmU4MDBhYTIzMjEy
MzUyYmFjZTBkMzhhZmQyMjNkMzQxMWViNS4uOGUyYmQ5OWY2OGRkOThlMDg2MTIwYTU0OTdjYmRm
YTRmNDQ5YWM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjI3OCw2ICsyMjc4LDcgQEAKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQxNkFycmF5Q3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50MzJBcnJheUN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDhBcnJheUN1c3RvbS5jcHAnLAorICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SmF2YVNjcmlwdENhbGxGcmFtZUN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RGljdGlvbmFyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNw
cAppbmRleCBmZDRkYTFmYjAwNmNmY2Y2NDE4OWY4MjM5ZDhlNmNiMjBmMWM2YWVhLi5jZGMyODIw
YmQ0NWYyNDJjYWJmYWQ2MGQzODA1NDVhMDA3Nzk2MzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9EaWN0aW9uYXJ5LmNwcApAQCAtNDEyLDQgKzQxMiwzOCBAQCBib29sIERpY3Rpb25h
cnk6OmdldChjb25zdCBTdHJpbmcmIGtleSwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0
TGlzdD4mIHZhbAogCiAjZW5kaWYKIAorYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5n
JiBrZXksIERpY3Rpb25hcnkmIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKHY4VmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgIHZhbHVl
ID0gRGljdGlvbmFyeSh2OFZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wg
RGljdGlvbmFyeTo6Z2V0T3duUHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcChXVEY6Okhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiBoYXNoTWFwKSBjb25zdAoreworICAgIGlmICghbV9vcHRpb25zLT5J
c09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG1fb3B0aW9ucyk7
CisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IHdyYXBwZXItPkdldE93blBy
b3BlcnR5TmFtZXMoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgcHJvcGVydGllcy0+
TGVuZ3RoKCk7ICsraSkgeworICAgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IGtleSA9IHByb3Bl
cnRpZXMtPkdldChpKS0+VG9TdHJpbmcoKTsKKyAgICAgIGlmICghd3JhcHBlci0+SGFzKGtleSkp
CisgICAgICAgICAgY29udGludWU7CisKKyAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
ID0gd3JhcHBlci0+R2V0KGtleSk7CisgICAgICBTdHJpbmcgc3RyaW5nS2V5ID0gdjhWYWx1ZVRv
V2ViQ29yZVN0cmluZyhrZXkpOworICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdjhWYWx1ZVRv
V2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgICBpZiAoIXN0cmluZ0tleS5pc0VtcHR5KCkpCisg
ICAgICAgICAgaGFzaE1hcC5zZXQoc3RyaW5nS2V5LCBzdHJpbmdWYWx1ZSk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgKaW5kZXggMzIxNjRiOGNiYjIzYTU0YWJjNTg0OTc5OTYy
NTk2YzVmZDJmZjgzMS4uYTFkNTZlZmE3YzVjNDA0ZTlmOWM4YTAyMTgxMTg3NjVlMGIzYmM4OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApAQCAtODEs
NiArODIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mKSBjb25zdDsKICNlbmRpZgogICAgIGJvb2wgZ2V0
KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYpIGNvbnN0OworICAgIGJvb2wg
Z2V0KGNvbnN0IFN0cmluZyYsIERpY3Rpb25hcnkmKSBjb25zdDsKKyAgICBib29sIGdldE93blBy
b3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAoV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpIGNv
bnN0OwogCiAgICAgYm9vbCBnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5n
JiwgU3RyaW5nJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZh
bHVlLmNwcAppbmRleCBlY2MzNjczNjJhODM4YjdmOTg5MjhlZDA1OTlkNjM3NjlmMDk3Y2I3Li42
MTJkZWU1ZjNjNWQ0Mjg3MDY4ZDgwMjk3Y2ExNWE1ZDM4YjMwY2M4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwCkBAIC0zMiw5ICszMiwxMSBAQAogI2luY2x1
ZGUgIlNjcmlwdFZhbHVlLmgiCiAKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNs
dWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNjcmlwdFNjb3BlLmgiCiAjaW5jbHVkZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVjhVdGlsaXRpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCw2ICs0Niwx
MyBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0VmFsdWU6OnNlcmlh
bGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdAogICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZSh2OFZhbHVlKCkpOwogfQogCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gU2NyaXB0VmFsdWU6OnNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQXJyYXkqIGFycmF5
QnVmZmVycywgYm9vbCYgZGlkVGhyb3cpCit7CisgICAgU2NyaXB0U2NvcGUgc2NvcGUoc2NyaXB0
U3RhdGUpOworICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2OFZhbHVl
KCksIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzLCBkaWRUaHJvdyk7Cit9CisKIFNjcmlwdFZh
bHVlIFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUoc2Ny
aXB0U3RhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKaW5kZXgg
ZDQxMjkwMWZkYWQ5NTBlZTg2ZjhiOWRlZWRjYjE3ODJkMTVhMDExZS4uZjYyMzM5NDU0YzUzMjVi
ODYyNjE0YzhlODY0OGViZDY4MzJmZmQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRWYWx1ZS5oCkBAIC0zNiwxNCArMzYsMjAgQEAKIAogI2luY2x1ZGUgPHY4Lmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZm5k
ZWYgTkRFQlVHCiAjaW5jbHVkZSAiVjhQcm94eS5oIiAgLy8gZm9yIHJlZ2lzdGVyIGFuZCB1bnJl
Z2lzdGVyIGdsb2JhbCBoYW5kbGVzLgogI2VuZGlmCiAKK25hbWVzcGFjZSBXVEYgeworY2xhc3Mg
QXJyYXlCdWZmZXI7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5zcGVjdG9y
VmFsdWU7CitjbGFzcyBNZXNzYWdlUG9ydDsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsK
IAogY2xhc3MgU2NyaXB0VmFsdWUgewpAQCAtMTMxLDYgKzEzNyw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlw
dFN0YXRlKik7CisgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6
ZShTY3JpcHRTdGF0ZSosIE1lc3NhZ2VQb3J0QXJyYXkqLCBBcnJheUJ1ZmZlckFycmF5KiwgYm9v
bCYpOwogICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSopOwogCiAgICAgc3RhdGljIFNjcmlwdFZhbHVlIHVuZGVmaW5l
ZCgpIHsgcmV0dXJuIFNjcmlwdFZhbHVlKHY4OjpVbmRlZmluZWQoKSk7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9y
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44MjA4YTA5NDRhMzdiZDM5NTJkNjA1MzM0OTAwYjA0MGY0NGY4MzFi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SW50ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW50ZW50LmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKwor
I2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgorI2lu
Y2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SW50ZW50LmgiCisjaW5jbHVkZSAi
VjhNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvQXJy
YXlCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhJbnRlbnQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5JbnRlbnQuQ29uc3RydWN0b3IiKTsKKworICAgIGlm
ICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRP
TSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIFY4
UHJveHk6OlR5cGVFcnJvcik7CisKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkg
PT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBh
cmdzLkhvbGRlcigpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsK
KyAgICBpZiAoYXJncy5MZW5ndGgoKSA9PSAxKSB7CisgICAgICAgIC8vIFVzZSB0aGUgZGljdGlv
bmFyeSBjb25zdHJ1Y3Rvci4gVGhpcyBibG9jayB3aWxsIHJldHVybiBpZiB0aGUKKyAgICAgICAg
Ly8gYXJndW1lbnQgaXNuJ3QgYSB2YWxpZCBEaWN0aW9uYXJ5LgorICAgICAgICBFWENFUFRJT05f
QkxPQ0soRGljdGlvbmFyeSwgb3B0aW9ucywgYXJnc1swXSk7CisgICAgICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgICAgICBSZWZQdHI8SW50ZW50PiBpbXBsID0gSW50ZW50OjpjcmVhdGUo
U2NyaXB0U3RhdGU6OmN1cnJlbnQoKSwgb3B0aW9ucywgZWMpOworICAgICAgICBpZiAoZWMpCisg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6
c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmaW5mbywgaW1wbC5nZXQoKSk7CisgICAgICAg
IHJldHVybiB0b1Y4KGltcGwucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKKyAgICB9CisKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBU
SU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIGFjdGlvbiwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CisgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVS
X0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCB0eXBlLCBNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBNZXNzYWdlUG9ydEFycmF5
IG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3Q7CisgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJh
eUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0OworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMykgewor
ICAgICAgICBpZiAoIWV4dHJhY3RUcmFuc2ZlcmFibGVzKGFyZ3NbM10sIG1lc3NhZ2VQb3J0QXJy
YXlUcmFuc2Zlckxpc3QsIGFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3QpKQorICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBleHRyYWN0IHRyYW5zZmVyYWJsZXMiLCBW
OFByb3h5OjpUeXBlRXJyb3IpOworICAgIH0KKyAgICBib29sIGRhdGFEaWRUaHJvdyA9IGZhbHNl
OworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShhcmdzWzJdLCAmbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwg
JmFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3QsIGRhdGFEaWRUaHJvdyk7CisgICAgaWYgKGRh
dGFEaWRUaHJvdykKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIFJlZlB0
cjxJbnRlbnQ+IGltcGwgPSBJbnRlbnQ6OmNyZWF0ZShhY3Rpb24sIHR5cGUsIGRhdGEsIG1lc3Nh
Z2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGVjKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBh
cmdzLkhvbGRlcigpOworCisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHdyYXBwZXIs
ICZpbmZvLCBpbXBsLmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRP
TU9iamVjdChpbXBsLnJlbGVhc2UoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3
cmFwcGVyKSk7CisgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7Cit9CisKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
SW50ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaAppbmRl
eCA3M2E2MjEzMmFkNjMzOWM1NmQ0NTYzZTQyNGRiNmY1OGRmZDAzMzgyLi41N2E5NTYyZmEyNWI1
YzA2MDU1Y2MzZDdjNmRjNmM1ZjQ5ZDIwNzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJJbnRlbnQuaApAQCAtNjMsNiArNjMsOSBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VY
UE9SVCBXZWJTdHJpbmcgYWN0aW9uKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJp
bmcgdHlwZSgpIGNvbnN0OwogICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGRhdGEoKSBjb25z
dDsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBzZXJ2aWNlKCkgY29uc3Q7CisgICAgV0VC
S0lUX0VYUE9SVCBXZWJWZWN0b3I8V2ViU3RyaW5nPiBleHRyYXNOYW1lcygpIGNvbnN0OworICAg
IFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGV4dHJhc1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYpIGNv
bnN0OwogCiAgICAgLy8gQ2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcG9ydHMuCiAgICAg
V0VCS0lUX0VYUE9SVCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogbWVzc2FnZVBvcnRDaGFu
bmVsc1JlbGVhc2UoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkludGVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQu
Y3BwCmluZGV4IDhhN2Q2YWFjNTQzYmQ5OTk5OWI4ZmE3OTg0M2EzNDAzYWU1NjdjOWUuLjUwOTlk
NzMxNmRjYWEwZDQyN2M0MzQwM2JjMDhjZmU4NzNmZDBjMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSW50ZW50LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkludGVu
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgiCiAjaW5jbHVkZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKQEAgLTEwMyw2ICsxMDQsMTUgQEAgV2ViU3RyaW5nIFdlYkludGVu
dDo6ZGF0YSgpIGNvbnN0CiAjZW5kaWYKIH0KIAorV2ViU3RyaW5nIFdlYkludGVudDo6c2Vydmlj
ZSgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIHJldHVybiBtX3ByaXZh
dGUtPnNlcnZpY2UoKTsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlN0cmluZygpOworI2VuZGlmCit9
CisKIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBXZWJJbnRlbnQ6Om1lc3NhZ2VQb3J0Q2hh
bm5lbHNSZWxlYXNlKCkgY29uc3QKIHsKICAgICAvLyBOb3RlOiBzZWUgUGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWw6OnBvc3RNZXNzYWdlVG9SZW1vdGUuCkBAIC0xMjAsNCArMTMwLDMwIEBAIFdl
Yk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBXZWJJbnRlbnQ6Om1lc3NhZ2VQb3J0Q2hhbm5lbHNS
ZWxlYXNlKCkgY29uc3QKICAgICByZXR1cm4gd2ViQ2hhbm5lbHM7CiB9CiAKK1dlYlZlY3RvcjxX
ZWJTdHJpbmc+IFdlYkludGVudDo6ZXh0cmFzTmFtZXMoKSBjb25zdAoreworI2lmIEVOQUJMRShX
RUJfSU5URU5UUykKKyAgICBzaXplX3QgbnVtRXh0cmFzID0gbV9wcml2YXRlLT5leHRyYXMoKS5z
aXplKCk7CisgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4ga2V5U3RyaW5ncyhudW1FeHRyYXMpOwor
ICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGtl
eUl0ZXIgPSBtX3ByaXZhdGUtPmV4dHJhcygpLmJlZ2luKCkua2V5cygpOworICAgIGZvciAoaW50
IGkgPSAwOyBrZXlJdGVyICE9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuZW5kKCkua2V5cygpOyArK2tl
eUl0ZXIsICsraSkKKyAgICAgICAga2V5U3RyaW5nc1tpXSA9ICprZXlJdGVyOworICAgIHJldHVy
biBrZXlTdHJpbmdzOworI2Vsc2UKKyAgICByZXR1cm4gV2ViVmVjdG9yPFdlYlN0cmluZz4oKTsK
KyNlbmRpZgorfQorCitXZWJTdHJpbmcgV2ViSW50ZW50OjpleHRyYXNWYWx1ZShjb25zdCBXZWJT
dHJpbmcmIG5hbWUpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIFdURjo6
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHZhbCA9IG1fcHJpdmF0ZS0+
ZXh0cmFzKCkuZmluZChuYW1lKTsKKyAgICBpZiAodmFsID09IG1fcHJpdmF0ZS0+ZXh0cmFzKCku
ZW5kKCkpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICByZXR1cm4gdmFsLT5zZWNv
bmQ7CisjZWxzZQorICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyNlbmRpZgorfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdI
b3N0LmNwcAppbmRleCA4YjkzZDQ1M2U1Y2QzNWQyNzFhMjYxYmYzZjk1MDc0NzVhYzE4N2M5Li42
ODQyOTM5ZjJmZmMyODgyNzNiMTllZDMzZTk4MGVmODRlMWQ5NWIwIDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCkBAIC0xMzM1LDYgKzEzMzUsMTMg
QEAgdm9pZCBXZWJWaWV3SG9zdDo6ZGlzcGF0Y2hJbnRlbnQoV2ViRnJhbWUqIHNvdXJjZSwgY29u
c3QgV2ViSW50ZW50UmVxdWVzdCYgcmVxdWUKICAgICAgICAgICAgICgqcG9ydHMpW2ldLT5kZXN0
cm95KCk7CiAgICAgICAgIGRlbGV0ZSBwb3J0czsKICAgICB9CisgICAgaWYgKCFyZXF1ZXN0Lmlu
dGVudCgpLnNlcnZpY2UoKS5pc0VtcHR5KCkpCisgICAgICAgIHByaW50ZigiRXhwbGljaXQgaW50
ZW50IHNlcnZpY2U6ICVzXG4iLCByZXF1ZXN0LmludGVudCgpLnNlcnZpY2UoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiBleHRyYXMgPSByZXF1ZXN0LmludGVudCgp
LmV4dHJhc05hbWVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRyYXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgcHJpbnRmKCJFeHRyYXNbJXNdID0gJXNcbiIsIGV4dHJhc1tpXS51
dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgICAgcmVxdWVzdC5pbnRlbnQoKS5leHRyYXNWYWx1
ZShleHRyYXNbaV0pLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KIH0KIAogLy8gUHVibGljIGZ1bmN0
aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1h
cGktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkt
ZXhwZWN0ZWQudHh0CmluZGV4IDc2NmNmZDBhNGQwNDdiNTc2NGM4ODMzYjkwNGNhZGY1YzlhNGM1
NjcuLmJmZjBhNjZjNDJmN2QzNzQzZTFmMDIzNmJjNDYxYmJmNDI0ODQxMzQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKQEAg
LTEsNiArMSw2IEBACiBQQVNTIG5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5IGlzIGRlZmlu
ZWQuCiBQQVNTIHZhciBpbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KCkgdGhyZXcgZXhjZXB0aW9u
IFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCi1QQVNTIG5ldyBXZWJLaXRJbnRlbnQo
J2EnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KK1BB
U1MgbmV3IFdlYktpdEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VS
UjogRE9NIEV4Y2VwdGlvbiAxMi4KIFBBU1MgbmV3IFdlYktpdEludGVudCgnJywnJywnJykgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBu
ZXcgV2ViS2l0SW50ZW50KCcnLCdiJywnYycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFY
X0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KIFBBU1MgbmV3IFdlYktpdEludGVudCgnJywnJywnYycp
IHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCmluZGV4IDFkZTE3YTA5
NmUxZTgxNWZmYmJhYTM4ZjE3M2FkNzVkNWUxMzU1ZDMuLjI2MmNhMGRhMGZjMTQxNjNlNzEwYTg4
MzY5ZDllMTM3NjMzMDRmYzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2Vi
LWludGVudHMtYXBpLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50
cy1hcGkuaHRtbApAQCAtOCw3ICs4LDcgQEAKICAgICAgIHNob3VsZEJlRGVmaW5lZCgibmF2aWdh
dG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkiKTsKICAgICAgIAogICAgICAgc2hvdWxkVGhyb3coInZh
ciBpbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KCkiLCAiJ1R5cGVFcnJvcjogTm90IGVub3VnaCBh
cmd1bWVudHMnIik7OwotICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJ2EnKSIs
ICInVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTsKKyAgICAgIHNob3VsZFRocm93
KCJuZXcgV2ViS2l0SW50ZW50KCdhJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0
aW9uIDEyJyIpOwogICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJycsJycp
IiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKICAgICAgIHNob3Vs
ZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KCcnLCdiJywnYycpIiwgIidFcnJvcjogU1lOVEFYX0VS
UjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50
ZW50KCcnLCcnLCdjJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29u
c3RydWN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50
cy1vYmotY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkNzJiZTQwMTE2MGYw
MGQ3Nzc1Y2ZiY2FmZjI2OTJhMzZkOTA2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwyMCBAQAorUmVjZWl2ZWQgV2ViIEludGVudDogYWN0aW9uPWFjdGlvbjEgdHlwZT10
ZXh0L3BsYWluCitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rpb249YWN0aW9uMSB0eXBlPXRleHQv
cGxhaW4rZXhwbGljaXQKK0V4cGxpY2l0IGludGVudCBzZXJ2aWNlOiBleHBsaWNpdAorUmVjZWl2
ZWQgV2ViIEludGVudDogYWN0aW9uPWFjdGlvbjEgdHlwZT10ZXh0L3BsYWluK2V4dHJhcworRXh0
cmFzW2FdID0gYgorUmVjZWl2ZWQgV2ViIEludGVudDogYWN0aW9uPWFjdGlvbjEgdHlwZT10ZXh0
L3BsYWluK3BvcnQKK0hhdmUgMSBwb3J0cworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoe30pIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktp
dEludGVudCh7J2EnOidiJ30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9N
IEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2InfSkgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBu
ZXcgV2ViS2l0SW50ZW50KHsndHlwZSc6J2InfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5U
QVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9u
JzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6Jyd9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZ
TlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCisqIHNlbnQgb2JqZWN0IGludGVudAorKiBzZW50
IGV4cGxpY2l0IGludGVudAorKiBzZW50IGludGVudCB3aXRoIGV4dHJhcworKiBzZW50IGludGVu
dCB3aXRoIHBvcnQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50
ZW50cy1vYmotY29uc3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWlu
dGVudHMtb2JqLWNvbnN0cnVjdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmE1OWYzMGFjMDBhNzNkYzZk
M2M5OTQ0NmJhMmIzMTU4Yjg5NjZkYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTAsMCArMSw1NCBA
QAorPGh0bWw+CisgIDxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93
ZWItaW50ZW50cy10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgZnVu
Y3Rpb24gYnV0dG9uQ2xpY2tlZCgpIHsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJ
bnRlbnQoe30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAg
ICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhJzonYid9KSIsICInRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJu
ZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYid9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50
KHsndHlwZSc6J2InfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIp
OworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0
eXBlJzonYicsJ3NlcnZpY2UnOicnfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0
aW9uIDEyJyIpOworCisgICAgICAgIHZhciBzaW1wbGVJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50
KAorICAgICAgICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6
InRleHQvcGxhaW4iLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSJ9KTsKKyAgICAgICAg
bmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoc2ltcGxlSW50ZW50KTsKKyAgICAgICAgZGVi
dWcoIiogc2VudCBvYmplY3QgaW50ZW50Iik7CisKKyAgICAgICAgdmFyIGV4cGxpY2l0SW50ZW50
ID0gbmV3IFdlYktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisg
ICAgICAgICAgICAgInR5cGUiOiJ0ZXh0L3BsYWluK2V4cGxpY2l0IiwKKyAgICAgICAgICAgICAi
ZGF0YSI6Im1lc3NhZ2UiLAorICAgICAgICAgICAgICJzZXJ2aWNlIiA6ICJleHBsaWNpdCJ9KTsK
KyAgICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoZXhwbGljaXRJbnRlbnQpOwor
ICAgICAgICBkZWJ1ZygiKiBzZW50IGV4cGxpY2l0IGludGVudCIpOworCisgICAgICAgIHZhciBl
eHRyYXNJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAgICAgICAgeyJhY3Rpb24iOiJh
Y3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxhaW4rZXh0cmFzIiwKKyAgICAg
ICAgICAgICAiZGF0YSI6Im1lc3NhZ2UiLAorICAgICAgICAgICAgICJleHRyYXMiOnsiYSI6ImIi
fX0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShleHRyYXNJbnRlbnQp
OworICAgICAgICBkZWJ1ZygiKiBzZW50IGludGVudCB3aXRoIGV4dHJhcyIpOworCisgICAgICAg
IHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CisgICAgICAgIGNoYW5uZWwucG9y
dDIub25NZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgZGVidWcoIiogZ290IG1lc3Nh
Z2UiKTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHBvcnRJbnRlbnQgPSBuZXcgV2ViS2l0SW50
ZW50KAorICAgICAgICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlw
ZSI6InRleHQvcGxhaW4rcG9ydCIsCisgICAgICAgICAgICAgImRhdGEiOmNoYW5uZWwucG9ydDEs
CisgICAgICAgICAgICAgInRyYW5zZmVyIjpbY2hhbm5lbC5wb3J0MV19KTsKKyAgICAgICAgbmF2
aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkocG9ydEludGVudCk7CisgICAgICAgIGRlYnVnKCIq
IHNlbnQgaW50ZW50IHdpdGggcG9ydCIpOworICAgICAgfQorICAgIDwvc2NyaXB0PgorICA8L2hl
YWQ+Cis8Ym9keSBvbmxvYWQ9InNpbXVsYXRlQnV0dG9uUHJlc3MoKSI+Cis8aW5wdXQgdHlwZT0i
YnV0dG9uIiBpZD0iYnV0dG9uIiB2YWx1ZT0iU3RhcnQgV2ViIEludGVudCIgb25tb3VzZXVwPSJi
dXR0b25DbGlja2VkKCkiPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138116</attachid>
            <date>2012-04-20 10:37:02 -0700</date>
            <delta_ts>2012-04-23 09:14:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120420103701.patch</filename>
            <type>text/plain</type>
            <size>27844</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjVjODU0ZjgyMzhkYTNh
YTVmOWIwMDdhMzIwNzA4MDg1OWNjYzkyMy4uMWY4MzBkOWZlMDQxNWJhNGZiNGEyZmFhNWFmNGMw
ODgzNDllZTAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGhvcGVmdWxseSBiZSB0
ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2luZyB0aGlzCisgICAgICAgIGNv
bnN0cnVjdG9yLCB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4KKyAgICAgICAgQWRkZWQgbGF5
b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAgICAgIHdlYmludGVudHMvd2Vi
LWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMTkgIFhpbmduYW4gV2Fu
ZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CiAKICAgICAgICAgT3B0aW1pemUgZm9yIERBUldJ
TiBpbiBEaXJlY3RDb252b2x2ZXI6OnByb2Nlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50LmNwcAppbmRleCAwNTNkNDI5Y2ZhMWM5NzIzZjk2MzZjMzc5ZjNhMzkxODVk
ZDQ5NGJlLi5kMDU0MDk1ODY2Y2FhNmZjOGM2NDQ4ZjQxZDUxZDcxNzczYjI4MWMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcApAQCAtMzMsMTEgKzMzLDEyIEBA
CiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIK
KyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNz
UmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIGNv
bnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBp
ZiAoYWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CkBAIC00OCwz
OSArNDksNzEgQEAgUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3MKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBlLCBkYXRh
KSk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyA9IE1lc3Nh
Z2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywgZWMpOworCisgICAgV1RGOjpIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBleHRyYXM7CisgICAgU3RyaW5nIHNlcnZpY2U7CisKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEsIGNoYW5uZWxzLnJlbGVh
c2UoKSwgZXh0cmFzLCBzZXJ2aWNlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYg
cG9ydHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3Jl
YXRlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgRGljdGlvbmFyeSYgcGFyYW1ldGVy
cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpIHsKKyAg
ICBTdHJpbmcgYWN0aW9uOworICAgIGJvb2wgYWN0aW9uRXhpc3RzID0gcGFyYW1ldGVycy5nZXRX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soImFjdGlvbiIsIGFjdGlvbik7CisgICAgU3RyaW5nIHR5
cGU7CisgICAgYm9vbCB0eXBlRXhpc3RzID0gcGFyYW1ldGVycy5nZXRXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soInR5cGUiLCB0eXBlKTsKKyAgICBTdHJpbmcgc2VydmljZTsKKyAgICBpZiAocGFy
YW1ldGVycy5nZXQoInNlcnZpY2UiLCBzZXJ2aWNlKQorICAgICAgICAmJiAoc2VydmljZS5pc051
bGwoKSB8fCBzZXJ2aWNlLmlzRW1wdHkoKSkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKHR5cGUuaXNFbXB0eSgpKSB7CisKKyAg
ICBpZiAoIWFjdGlvbkV4aXN0cyB8fCBhY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghdHlwZUV4aXN0
cyB8fCB0eXBlLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4g
Y2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGVQb3J0cygmcG9ydHMsIGVjKTsKKyAg
ICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzOworICAgIGJvb2wgcG9ydHNFeGlzdHMgPSBwYXJhbWV0
ZXJzLmdldCgidHJhbnNmZXIiLCBwb3J0cyk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5l
bEFycmF5PiBjaGFubmVsczsKKyAgICBpZiAocG9ydHNFeGlzdHMpCisgICAgICAgIGNoYW5uZWxz
ID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMoJnBvcnRzLCBlYyk7CisKKyAgICBTY3Jp
cHRWYWx1ZSBkYXRhVmFsdWU7CisgICAgYm9vbCBkYXRhRXhpc3RzID0gcGFyYW1ldGVycy5nZXQo
ImRhdGEiLCBkYXRhVmFsdWUpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWREYXRhOworICAgIGlmIChkYXRhRXhpc3RzKSB7CisgICAgICBib29sIGRpZFRocm93
ID0gZmFsc2U7CisgICAgICBzZXJpYWxpemVkRGF0YSA9IGRhdGFWYWx1ZS5zZXJpYWxpemUoc2Ny
aXB0U3RhdGUsICZwb3J0cywgMCwgZGlkVGhyb3cpOworICAgICAgaWYgKGRpZFRocm93KSB7Cisg
ICAgICAgICAgZWMgPSBEQVRBX0NMT05FX0VSUjsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
IH0KKyAgICB9CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUs
IGRhdGEsIGNoYW5uZWxzLnJlbGVhc2UoKSkpOwotfQorICAgIFdURjo6SGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gZXh0cmFzOworICAgIERpY3Rpb25hcnkgZXh0cmFzRGljdGlvbmFyeTsKKyAgICBi
b29sIGV4dHJhc0V4aXN0cyA9IHBhcmFtZXRlcnMuZ2V0KCJleHRyYXMiLCBleHRyYXNEaWN0aW9u
YXJ5KTsKKyAgICBpZiAoZXh0cmFzRXhpc3RzKQorICAgICAgICBleHRyYXNEaWN0aW9uYXJ5Lmdl
dE93blByb3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAoZXh0cmFzKTsKIAotSW50ZW50OjpJbnRlbnQo
Y29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCi0gICAgOiBtX2FjdGlvbihhY3Rpb24pCi0gICAgLCBt
X3R5cGUodHlwZSkKLXsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgbV9kYXRhID0gZGF0YTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVl
KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBlLCBzZXJpYWxp
emVkRGF0YS5yZWxlYXNlKCksIGNoYW5uZWxzLnJlbGVhc2UoKSwgZXh0cmFzLCBzZXJ2aWNlKSk7
CiB9CiAKLUludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcm
IHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQYXNzT3duUHRy
PE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cykKK0ludGVudDo6SW50ZW50KGNvbnN0IFN0
cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsCisgICAgICAgICAgICAgICBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENo
YW5uZWxBcnJheT4gcG9ydHMsCisgICAgICAgICAgICAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+JiBleHRyYXMsIGNvbnN0IFN0cmluZyYgc2VydmljZSkKICAgICA6IG1fYWN0
aW9uKGFjdGlvbikKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9wb3J0cyhwb3J0cykKKyAg
ICAsIG1fc2VydmljZShzZXJ2aWNlKQorICAgICwgbV9leHRyYXMoZXh0cmFzKQogewogICAgIGlm
IChkYXRhKQogICAgICAgICBtX2RhdGEgPSBkYXRhOwpAQCAtOTgsNiArMTMxLDExIEBAIGNvbnN0
IFN0cmluZyYgSW50ZW50Ojp0eXBlKCkgY29uc3QKICAgICByZXR1cm4gbV90eXBlOwogfQogCitj
b25zdCBTdHJpbmcmIEludGVudDo6c2VydmljZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Vy
dmljZTsKK30KKwogU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBJbnRlbnQ6OmRhdGEoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2RhdGEuZ2V0KCk7CkBAIC0xMDgsNiArMTQ2LDExIEBAIE1lc3NhZ2VQ
b3J0Q2hhbm5lbEFycmF5KiBJbnRlbnQ6Om1lc3NhZ2VQb3J0cygpIGNvbnN0CiAgICAgcmV0dXJu
IG1fcG9ydHMuZ2V0KCk7CiB9CiAKK2NvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4m
IEludGVudDo6ZXh0cmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9leHRyYXM7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5URU5UUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaAppbmRleCAzM2VmNjllMDQ0MTA1OTZl
MjQxNTMzNDg1ZWZiYzlmNWM0ZTZiNmQ0Li41OTMyMWFlYzZjYTc3ZjJkYWU1NDIyZDliZmY2ZmIz
ODcyYmNiNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCkBAIC0z
MSw2ICszMSw3IEBACiAKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCiAKKyNpbmNsdWRlICJEaWN0
aW9uYXJ5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9y
dENoYW5uZWwuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNDEsMzIgKzQyLDM5IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2NyaXB0U3RhdGU7CiBjbGFzcyBTZXJp
YWxpemVkU2NyaXB0VmFsdWU7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNz
IEludGVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVudD4gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEludGVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBT
dHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGRhdGEsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRp
b25Db2RlJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoU2NyaXB0U3Rh
dGUqLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgY29uc3QgU3Ry
aW5nJiBhY3Rpb24oKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdDsKICAg
ICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEoKSBjb25zdDsKIAotICAgIGludCBpZGVudGlm
aWVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRJZGVudGlmaWVyKGludCk7Ci0KICAgICBNZXNzYWdl
UG9ydENoYW5uZWxBcnJheSogbWVzc2FnZVBvcnRzKCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5n
JiBzZXJ2aWNlKCkgY29uc3Q7CisgICAgY29uc3QgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgZXh0cmFzKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5n
JiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJy
YXk+IHBvcnRzLAorICAgICAgICAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiBleHRyYXMsIGNvbnN0IFN0cmluZyYgc2VydmljZSk7CiAKIHByaXZhdGU6Ci0gICAgSW50ZW50
KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKTsKLSAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rp
b24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKTsKIAogICAg
IFN0cmluZyBtX2FjdGlvbjsKICAgICBTdHJpbmcgbV90eXBlOworCiAgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gbV9kYXRhOwogICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxB
cnJheT4gbV9wb3J0czsKKworICAgIFN0cmluZyBtX3NlcnZpY2U7CisgICAgV1RGOjpIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBtX2V4dHJhczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKaW5kZXggZWYwODI1MDcz
NGZmYzc5YjE5NDk4MGVjODI0M2VlYjM0NDhhYzUyZS4uOTI2NTdiNGU2Y2U2MGYwNzk5NTI0NjQw
MTYzNjViODcwOTE0OTVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dC5pZGwKQEAgLTI2LDYgKzI2LDcgQEAKIG1vZHVsZSB3aW5kb3cgewogICBpbnRlcmZhY2UgWwog
ICAgICAgQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFMsCisgICAgICBDdXN0b21Db25zdHJ1Y3RvciwK
ICAgICAgIENvbnN0cnVjdG9yKGluIERPTVN0cmluZyBhY3Rpb24sIGluIERPTVN0cmluZyB0eXBl
LCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzTnVsbFN0cmluZywgVHJhbnNmZXJMaXN0PXRyYW5zZmVy
TGlzdF0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRhdGEsIGluIFtPcHRpb25hbD1EZWZhdWx0SXNV
bmRlZmluZWRdIEFycmF5IHRyYW5zZmVyTGlzdCksCiAgICAgICBDb25zdHJ1Y3RvclJhaXNlc0V4
Y2VwdGlvbgogICBdIEludGVudCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjU1NmU4MDBhYTIzMjEy
MzUyYmFjZTBkMzhhZmQyMjNkMzQxMWViNS4uOGUyYmQ5OWY2OGRkOThlMDg2MTIwYTU0OTdjYmRm
YTRmNDQ5YWM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjI3OCw2ICsyMjc4LDcgQEAKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQxNkFycmF5Q3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50MzJBcnJheUN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDhBcnJheUN1c3RvbS5jcHAnLAorICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SmF2YVNjcmlwdENhbGxGcmFtZUN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RGljdGlvbmFyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNw
cAppbmRleCBmZDRkYTFmYjAwNmNmY2Y2NDE4OWY4MjM5ZDhlNmNiMjBmMWM2YWVhLi5jZGMyODIw
YmQ0NWYyNDJjYWJmYWQ2MGQzODA1NDVhMDA3Nzk2MzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9EaWN0aW9uYXJ5LmNwcApAQCAtNDEyLDQgKzQxMiwzOCBAQCBib29sIERpY3Rpb25h
cnk6OmdldChjb25zdCBTdHJpbmcmIGtleSwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0
TGlzdD4mIHZhbAogCiAjZW5kaWYKIAorYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5n
JiBrZXksIERpY3Rpb25hcnkmIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKHY4VmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgIHZhbHVl
ID0gRGljdGlvbmFyeSh2OFZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wg
RGljdGlvbmFyeTo6Z2V0T3duUHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcChXVEY6Okhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiBoYXNoTWFwKSBjb25zdAoreworICAgIGlmICghbV9vcHRpb25zLT5J
c09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG1fb3B0aW9ucyk7
CisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IHdyYXBwZXItPkdldE93blBy
b3BlcnR5TmFtZXMoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgcHJvcGVydGllcy0+
TGVuZ3RoKCk7ICsraSkgeworICAgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IGtleSA9IHByb3Bl
cnRpZXMtPkdldChpKS0+VG9TdHJpbmcoKTsKKyAgICAgIGlmICghd3JhcHBlci0+SGFzKGtleSkp
CisgICAgICAgICAgY29udGludWU7CisKKyAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
ID0gd3JhcHBlci0+R2V0KGtleSk7CisgICAgICBTdHJpbmcgc3RyaW5nS2V5ID0gdjhWYWx1ZVRv
V2ViQ29yZVN0cmluZyhrZXkpOworICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdjhWYWx1ZVRv
V2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgICBpZiAoIXN0cmluZ0tleS5pc0VtcHR5KCkpCisg
ICAgICAgICAgaGFzaE1hcC5zZXQoc3RyaW5nS2V5LCBzdHJpbmdWYWx1ZSk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgKaW5kZXggMzIxNjRiOGNiYjIzYTU0YWJjNTg0OTc5OTYy
NTk2YzVmZDJmZjgzMS4uYTFkNTZlZmE3YzVjNDA0ZTlmOWM4YTAyMTgxMTg3NjVlMGIzYmM4OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApAQCAtODEs
NiArODIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mKSBjb25zdDsKICNlbmRpZgogICAgIGJvb2wgZ2V0
KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYpIGNvbnN0OworICAgIGJvb2wg
Z2V0KGNvbnN0IFN0cmluZyYsIERpY3Rpb25hcnkmKSBjb25zdDsKKyAgICBib29sIGdldE93blBy
b3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAoV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpIGNv
bnN0OwogCiAgICAgYm9vbCBnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5n
JiwgU3RyaW5nJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZh
bHVlLmNwcAppbmRleCBlY2MzNjczNjJhODM4YjdmOTg5MjhlZDA1OTlkNjM3NjlmMDk3Y2I3Li4z
MWJjZDIzZWU5YTM3ZDcwZmRlNTE3YjQyOWE0NTgwZTFkM2YxMzY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwCkBAIC0zMiw5ICszMiwxMSBAQAogI2luY2x1
ZGUgIlNjcmlwdFZhbHVlLmgiCiAKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNs
dWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNjcmlwdFNjb3BlLmgiCiAjaW5jbHVkZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL0FycmF5QnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsNiAr
NDYsMTMgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpz
ZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXQKICAgICByZXR1cm4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgpKTsKIH0KIAorUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckFycmF5KiBh
cnJheUJ1ZmZlcnMsIGJvb2wmIGRpZFRocm93KQoreworICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNj
cmlwdFN0YXRlKTsKKyAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhW
YWx1ZSgpLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycywgZGlkVGhyb3cpOworfQorCiBTY3Jp
cHRWYWx1ZSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRl
LCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQogewogICAgIFNjcmlwdFNjb3BlIHNjb3Bl
KHNjcmlwdFN0YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCmlu
ZGV4IGQ0MTI5MDFmZGFkOTUwZWU4NmY4YjlkZWVkY2IxNzgyZDE1YTAxMWUuLjhmMWQyOGU2MDE1
MTQ1OTc4NTViZTkwOTc0NTNmMmEyOGQ0ZjlmNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0VmFsdWUuaApAQCAtMzYsMTUgKzM2LDI0IEBACiAKICNpbmNsdWRlIDx2OC5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmbmRlZiBOREVCVUcKICNpbmNsdWRlICJWOFByb3h5
LmgiICAvLyBmb3IgcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgZ2xvYmFsIGhhbmRsZXMuCiAjZW5k
aWYKIAorbmFtZXNwYWNlIFdURiB7CitjbGFzcyBBcnJheUJ1ZmZlcjsKK30KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKK2NsYXNzIE1lc3NhZ2VQb3J0Owog
Y2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPE1lc3Nh
Z2VQb3J0PiwgMT4gTWVzc2FnZVBvcnRBcnJheTsKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxXVEY6
OkFycmF5QnVmZmVyPiwgMT4gQXJyYXlCdWZmZXJBcnJheTsKIAogY2xhc3MgU2NyaXB0VmFsdWUg
ewogcHVibGljOgpAQCAtMTMxLDYgKzE0MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlwdFN0YXRlKik7Cisg
ICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0
ZSosIE1lc3NhZ2VQb3J0QXJyYXkqLCBBcnJheUJ1ZmZlckFycmF5KiwgYm9vbCYpOwogICAgIHN0
YXRpYyBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSopOwogCiAgICAgc3RhdGljIFNjcmlwdFZhbHVlIHVuZGVmaW5lZCgpIHsgcmV0dXJu
IFNjcmlwdFZhbHVlKHY4OjpVbmRlZmluZWQoKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44MjA4YTA5NDRhMzdiZDM5NTJkNjA1MzM0OTAwYjA0MGY0NGY4MzFiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29uc3Ry
dWN0b3IuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50
ZW50LmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBv
cnQuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworI2luY2x1ZGUgIlY4
QmluZGluZy5oIgorI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgorI2luY2x1ZGUgIlY4RE9N
V3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SW50ZW50LmgiCisjaW5jbHVkZSAiVjhNZXNzYWdlUG9y
dC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbnRlbnQ6
OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJ
TkNfU1RBVFMoIkRPTS5JbnRlbnQuQ29uc3RydWN0b3IiKTsKKworICAgIGlmICghYXJncy5Jc0Nv
bnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29u
c3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIFY4UHJveHk6OlR5cGVF
cnJvcik7CisKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0
b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigp
OworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
Ik5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICBpZiAoYXJn
cy5MZW5ndGgoKSA9PSAxKSB7CisgICAgICAgIC8vIFVzZSB0aGUgZGljdGlvbmFyeSBjb25zdHJ1
Y3Rvci4gVGhpcyBibG9jayB3aWxsIHJldHVybiBpZiB0aGUKKyAgICAgICAgLy8gYXJndW1lbnQg
aXNuJ3QgYSB2YWxpZCBEaWN0aW9uYXJ5LgorICAgICAgICBFWENFUFRJT05fQkxPQ0soRGljdGlv
bmFyeSwgb3B0aW9ucywgYXJnc1swXSk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgICAgICBSZWZQdHI8SW50ZW50PiBpbXBsID0gSW50ZW50OjpjcmVhdGUoU2NyaXB0U3RhdGU6
OmN1cnJlbnQoKSwgb3B0aW9ucywgZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihlYyk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBl
cihhcmdzLkhvbGRlcigpLCAmaW5mbywgaW1wbC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0b1Y4
KGltcGwucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4
UGFyYW1ldGVyPD4sIGFjdGlvbiwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVm
YXVsdElzVW5kZWZpbmVkKSk7CisgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9C
TE9DSyhWOFBhcmFtZXRlcjw+LCB0eXBlLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAx
LCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBNZXNzYWdlUG9ydEFycmF5IG1lc3NhZ2VQb3J0
QXJyYXlUcmFuc2Zlckxpc3Q7CisgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5
VHJhbnNmZXJMaXN0OworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMykgeworICAgICAgICBpZiAo
IWV4dHJhY3RUcmFuc2ZlcmFibGVzKGFyZ3NbM10sIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxp
c3QsIGFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3QpKQorICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoIkNvdWxkIG5vdCBleHRyYWN0IHRyYW5zZmVyYWJsZXMiLCBWOFByb3h5OjpUeXBl
RXJyb3IpOworICAgIH0KKyAgICBib29sIGRhdGFEaWRUaHJvdyA9IGZhbHNlOworICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShhcmdzWzJdLCAmbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgJmFycmF5QnVmZmVy
QXJyYXlUcmFuc2Zlckxpc3QsIGRhdGFEaWRUaHJvdyk7CisgICAgaWYgKGRhdGFEaWRUaHJvdykK
KyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIFJlZlB0cjxJbnRlbnQ+IGlt
cGwgPSBJbnRlbnQ6OmNyZWF0ZShhY3Rpb24sIHR5cGUsIGRhdGEsIG1lc3NhZ2VQb3J0QXJyYXlU
cmFuc2Zlckxpc3QsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGVjKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRlcigp
OworCisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHdyYXBwZXIsICZpbmZvLCBpbXBs
LmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBs
LnJlbGVhc2UoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKSk7Cisg
ICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaAppbmRleCA3M2E2MjEzMmFk
NjMzOWM1NmQ0NTYzZTQyNGRiNmY1OGRmZDAzMzgyLi41N2E5NTYyZmEyNWI1YzA2MDU1Y2MzZDdj
NmRjNmM1ZjQ5ZDIwNzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJJbnRlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRl
bnQuaApAQCAtNjMsNiArNjMsOSBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJp
bmcgYWN0aW9uKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgdHlwZSgpIGNv
bnN0OwogICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGRhdGEoKSBjb25zdDsKKyAgICBXRUJL
SVRfRVhQT1JUIFdlYlN0cmluZyBzZXJ2aWNlKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBX
ZWJWZWN0b3I8V2ViU3RyaW5nPiBleHRyYXNOYW1lcygpIGNvbnN0OworICAgIFdFQktJVF9FWFBP
UlQgV2ViU3RyaW5nIGV4dHJhc1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogCiAgICAg
Ly8gQ2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcG9ydHMuCiAgICAgV0VCS0lUX0VYUE9S
VCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogbWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2Uo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCmluZGV4IDhh
N2Q2YWFjNTQzYmQ5OTk5OWI4ZmE3OTg0M2EzNDAzYWU1NjdjOWUuLjUwOTlkNzMxNmRjYWEwZDQy
N2M0MzQwM2JjMDhjZmU4NzNmZDBjMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkludGVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SW50ZW50LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkludGVudC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKQEAgLTEwMyw2ICsxMDQsMTUgQEAgV2ViU3RyaW5nIFdlYkludGVudDo6ZGF0YSgpIGNv
bnN0CiAjZW5kaWYKIH0KIAorV2ViU3RyaW5nIFdlYkludGVudDo6c2VydmljZSgpIGNvbnN0Cit7
CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIHJldHVybiBtX3ByaXZhdGUtPnNlcnZpY2Uo
KTsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlN0cmluZygpOworI2VuZGlmCit9CisKIFdlYk1lc3Nh
Z2VQb3J0Q2hhbm5lbEFycmF5KiBXZWJJbnRlbnQ6Om1lc3NhZ2VQb3J0Q2hhbm5lbHNSZWxlYXNl
KCkgY29uc3QKIHsKICAgICAvLyBOb3RlOiBzZWUgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6
OnBvc3RNZXNzYWdlVG9SZW1vdGUuCkBAIC0xMjAsNCArMTMwLDMwIEBAIFdlYk1lc3NhZ2VQb3J0
Q2hhbm5lbEFycmF5KiBXZWJJbnRlbnQ6Om1lc3NhZ2VQb3J0Q2hhbm5lbHNSZWxlYXNlKCkgY29u
c3QKICAgICByZXR1cm4gd2ViQ2hhbm5lbHM7CiB9CiAKK1dlYlZlY3RvcjxXZWJTdHJpbmc+IFdl
YkludGVudDo6ZXh0cmFzTmFtZXMoKSBjb25zdAoreworI2lmIEVOQUJMRShXRUJfSU5URU5UUykK
KyAgICBzaXplX3QgbnVtRXh0cmFzID0gbV9wcml2YXRlLT5leHRyYXMoKS5zaXplKCk7CisgICAg
V2ViVmVjdG9yPFdlYlN0cmluZz4ga2V5U3RyaW5ncyhudW1FeHRyYXMpOworICAgIFdURjo6SGFz
aE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGtleUl0ZXIgPSBtX3By
aXZhdGUtPmV4dHJhcygpLmJlZ2luKCkua2V5cygpOworICAgIGZvciAoaW50IGkgPSAwOyBrZXlJ
dGVyICE9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuZW5kKCkua2V5cygpOyArK2tleUl0ZXIsICsraSkK
KyAgICAgICAga2V5U3RyaW5nc1tpXSA9ICprZXlJdGVyOworICAgIHJldHVybiBrZXlTdHJpbmdz
OworI2Vsc2UKKyAgICByZXR1cm4gV2ViVmVjdG9yPFdlYlN0cmluZz4oKTsKKyNlbmRpZgorfQor
CitXZWJTdHJpbmcgV2ViSW50ZW50OjpleHRyYXNWYWx1ZShjb25zdCBXZWJTdHJpbmcmIG5hbWUp
IGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIFdURjo6SGFzaE1hcDxTdHJp
bmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHZhbCA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuZmlu
ZChuYW1lKTsKKyAgICBpZiAodmFsID09IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuZW5kKCkpCisgICAg
ICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICByZXR1cm4gdmFsLT5zZWNvbmQ7CisjZWxzZQor
ICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRl
eCA4YjkzZDQ1M2U1Y2QzNWQyNzFhMjYxYmYzZjk1MDc0NzVhYzE4N2M5Li42ODQyOTM5ZjJmZmMy
ODgyNzNiMTllZDMzZTk4MGVmODRlMWQ5NWIwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCkBAIC0xMzM1LDYgKzEzMzUsMTMgQEAgdm9pZCBXZWJW
aWV3SG9zdDo6ZGlzcGF0Y2hJbnRlbnQoV2ViRnJhbWUqIHNvdXJjZSwgY29uc3QgV2ViSW50ZW50
UmVxdWVzdCYgcmVxdWUKICAgICAgICAgICAgICgqcG9ydHMpW2ldLT5kZXN0cm95KCk7CiAgICAg
ICAgIGRlbGV0ZSBwb3J0czsKICAgICB9CisgICAgaWYgKCFyZXF1ZXN0LmludGVudCgpLnNlcnZp
Y2UoKS5pc0VtcHR5KCkpCisgICAgICAgIHByaW50ZigiRXhwbGljaXQgaW50ZW50IHNlcnZpY2U6
ICVzXG4iLCByZXF1ZXN0LmludGVudCgpLnNlcnZpY2UoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBX
ZWJWZWN0b3I8V2ViU3RyaW5nPiBleHRyYXMgPSByZXF1ZXN0LmludGVudCgpLmV4dHJhc05hbWVz
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRyYXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgcHJpbnRmKCJFeHRyYXNbJXNdID0gJXNcbiIsIGV4dHJhc1tpXS51dGY4KCkuZGF0YSgp
LAorICAgICAgICAgICAgICAgcmVxdWVzdC5pbnRlbnQoKS5leHRyYXNWYWx1ZShleHRyYXNbaV0p
LnV0ZjgoKS5kYXRhKCkpOworICAgIH0KIH0KIAogLy8gUHVibGljIGZ1bmN0aW9ucyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0
CmluZGV4IDc2NmNmZDBhNGQwNDdiNTc2NGM4ODMzYjkwNGNhZGY1YzlhNGM1NjcuLmJmZjBhNjZj
NDJmN2QzNzQzZTFmMDIzNmJjNDYxYmJmNDI0ODQxMzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKQEAgLTEsNiArMSw2IEBA
CiBQQVNTIG5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5IGlzIGRlZmluZWQuCiBQQVNTIHZh
ciBpbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
Tm90IGVub3VnaCBhcmd1bWVudHMuCi1QQVNTIG5ldyBXZWJLaXRJbnRlbnQoJ2EnKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KK1BBU1MgbmV3IFdlYktp
dEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMi4KIFBBU1MgbmV3IFdlYktpdEludGVudCgnJywnJywnJykgdGhyZXcgZXhjZXB0aW9u
IEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2ViS2l0SW50
ZW50KCcnLCdiJywnYycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4
Y2VwdGlvbiAxMi4KIFBBU1MgbmV3IFdlYktpdEludGVudCgnJywnJywnYycpIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCmluZGV4IDFkZTE3YTA5NmUxZTgxNWZmYmJh
YTM4ZjE3M2FkNzVkNWUxMzU1ZDMuLjI2MmNhMGRhMGZjMTQxNjNlNzEwYTg4MzY5ZDllMTM3NjMz
MDRmYzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBp
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbApA
QCAtOCw3ICs4LDcgQEAKICAgICAgIHNob3VsZEJlRGVmaW5lZCgibmF2aWdhdG9yLndlYmtpdFN0
YXJ0QWN0aXZpdHkiKTsKICAgICAgIAogICAgICAgc2hvdWxkVGhyb3coInZhciBpbnRlbnQgPSBu
ZXcgV2ViS2l0SW50ZW50KCkiLCAiJ1R5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMnIik7
OwotICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJ2EnKSIsICInVHlwZUVycm9y
OiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0
SW50ZW50KCdhJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwog
ICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJycsJycpIiwgIidFcnJvcjog
U1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKICAgICAgIHNob3VsZFRocm93KCJuZXcg
V2ViS2l0SW50ZW50KCcnLCdiJywnYycpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMiciKTsKICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KCcnLCcnLCdj
JykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3ItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3Ry
dWN0b3ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkNzJiZTQwMTE2MGYwMGQ3Nzc1Y2ZiY2Fm
ZjI2OTJhMzZkOTA2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRz
L3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMCBA
QAorUmVjZWl2ZWQgV2ViIEludGVudDogYWN0aW9uPWFjdGlvbjEgdHlwZT10ZXh0L3BsYWluCitS
ZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rpb249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4rZXhwbGlj
aXQKK0V4cGxpY2l0IGludGVudCBzZXJ2aWNlOiBleHBsaWNpdAorUmVjZWl2ZWQgV2ViIEludGVu
dDogYWN0aW9uPWFjdGlvbjEgdHlwZT10ZXh0L3BsYWluK2V4dHJhcworRXh0cmFzW2FdID0gYgor
UmVjZWl2ZWQgV2ViIEludGVudDogYWN0aW9uPWFjdGlvbjEgdHlwZT10ZXh0L3BsYWluK3BvcnQK
K0hhdmUgMSBwb3J0cworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoe30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjog
U1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2En
OidiJ30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
Mi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2InfSkgdGhyZXcgZXhjZXB0aW9u
IEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50
ZW50KHsndHlwZSc6J2InfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00g
RXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUn
OidiJywnc2VydmljZSc6Jyd9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTIuCisqIHNlbnQgb2JqZWN0IGludGVudAorKiBzZW50IGV4cGxpY2l0IGlu
dGVudAorKiBzZW50IGludGVudCB3aXRoIGV4dHJhcworKiBzZW50IGludGVudCB3aXRoIHBvcnQK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29u
c3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNv
bnN0cnVjdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmE1OWYzMGFjMDBhNzNkYzZkM2M5OTQ0NmJhMmIz
MTU4Yjg5NjZkYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2Vi
LWludGVudHMtb2JqLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPGh0bWw+Cisg
IDxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWItaW50ZW50cy10
ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgZnVuY3Rpb24gYnV0dG9u
Q2xpY2tlZCgpIHsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoe30pIiwg
IidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxk
VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhJzonYid9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6
IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50
ZW50KHsnYWN0aW9uJzonYid9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24g
MTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsndHlwZSc6J2In
fSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBz
aG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ3Nl
cnZpY2UnOicnfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwor
CisgICAgICAgIHZhciBzaW1wbGVJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAgICAg
ICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxhaW4i
LAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSJ9KTsKKyAgICAgICAgbmF2aWdhdG9yLndl
YmtpdFN0YXJ0QWN0aXZpdHkoc2ltcGxlSW50ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBv
YmplY3QgaW50ZW50Iik7CisKKyAgICAgICAgdmFyIGV4cGxpY2l0SW50ZW50ID0gbmV3IFdlYktp
dEludGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisgICAgICAgICAgICAg
InR5cGUiOiJ0ZXh0L3BsYWluK2V4cGxpY2l0IiwKKyAgICAgICAgICAgICAiZGF0YSI6Im1lc3Nh
Z2UiLAorICAgICAgICAgICAgICJzZXJ2aWNlIiA6ICJleHBsaWNpdCJ9KTsKKyAgICAgICAgbmF2
aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoZXhwbGljaXRJbnRlbnQpOworICAgICAgICBkZWJ1
ZygiKiBzZW50IGV4cGxpY2l0IGludGVudCIpOworCisgICAgICAgIHZhciBleHRyYXNJbnRlbnQg
PSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAgICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAg
ICAgICAgICAgICAidHlwZSI6InRleHQvcGxhaW4rZXh0cmFzIiwKKyAgICAgICAgICAgICAiZGF0
YSI6Im1lc3NhZ2UiLAorICAgICAgICAgICAgICJleHRyYXMiOnsiYSI6ImIifX0pOworICAgICAg
ICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShleHRyYXNJbnRlbnQpOworICAgICAgICBk
ZWJ1ZygiKiBzZW50IGludGVudCB3aXRoIGV4dHJhcyIpOworCisgICAgICAgIHZhciBjaGFubmVs
ID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CisgICAgICAgIGNoYW5uZWwucG9ydDIub25NZXNzYWdl
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgZGVidWcoIiogZ290IG1lc3NhZ2UiKTsKKyAgICAg
ICAgfTsKKyAgICAgICAgdmFyIHBvcnRJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAg
ICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxh
aW4rcG9ydCIsCisgICAgICAgICAgICAgImRhdGEiOmNoYW5uZWwucG9ydDEsCisgICAgICAgICAg
ICAgInRyYW5zZmVyIjpbY2hhbm5lbC5wb3J0MV19KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtp
dFN0YXJ0QWN0aXZpdHkocG9ydEludGVudCk7CisgICAgICAgIGRlYnVnKCIqIHNlbnQgaW50ZW50
IHdpdGggcG9ydCIpOworICAgICAgfQorICAgIDwvc2NyaXB0PgorICA8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9InNpbXVsYXRlQnV0dG9uUHJlc3MoKSI+Cis8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0i
YnV0dG9uIiB2YWx1ZT0iU3RhcnQgV2ViIEludGVudCIgb25tb3VzZXVwPSJidXR0b25DbGlja2Vk
KCkiPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138360</attachid>
            <date>2012-04-23 09:14:22 -0700</date>
            <delta_ts>2012-04-23 12:17:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120423091421.patch</filename>
            <type>text/plain</type>
            <size>28161</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjVjODU0ZjgyMzhkYTNh
YTVmOWIwMDdhMzIwNzA4MDg1OWNjYzkyMy4uMWY4MzBkOWZlMDQxNWJhNGZiNGEyZmFhNWFmNGMw
ODgzNDllZTAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGhvcGVmdWxseSBiZSB0
ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2luZyB0aGlzCisgICAgICAgIGNv
bnN0cnVjdG9yLCB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4KKyAgICAgICAgQWRkZWQgbGF5
b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAgICAgIHdlYmludGVudHMvd2Vi
LWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMTkgIFhpbmduYW4gV2Fu
ZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CiAKICAgICAgICAgT3B0aW1pemUgZm9yIERBUldJ
TiBpbiBEaXJlY3RDb252b2x2ZXI6OnByb2Nlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50LmNwcAppbmRleCAwNTNkNDI5Y2ZhMWM5NzIzZjk2MzZjMzc5ZjNhMzkxODVk
ZDQ5NGJlLi45MzhkYmM2YTIzNjYwNjgwNDkxOTAwYjQ5ZjhlOTU1NzQ3MzE2NDA0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcApAQCAtMzMsMTEgKzMzLDEyIEBA
CiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIK
KyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNz
UmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIGNv
bnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBp
ZiAoYWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CkBAIC00OCwz
OSArNDksNzEgQEAgUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3MKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBlLCBkYXRh
KSk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyA9IE1lc3Nh
Z2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywgZWMpOworCisgICAgV1RGOjpIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBleHRyYXM7CisgICAgU3RyaW5nIHNlcnZpY2U7CisKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEsIGNoYW5uZWxzLnJlbGVh
c2UoKSwgZXh0cmFzLCBzZXJ2aWNlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYg
cG9ydHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3Jl
YXRlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgRGljdGlvbmFyeSYgcGFyYW1ldGVy
cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpIHsKKyAg
ICBTdHJpbmcgYWN0aW9uOworICAgIGJvb2wgYWN0aW9uRXhpc3RzID0gcGFyYW1ldGVycy5nZXRX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soImFjdGlvbiIsIGFjdGlvbik7CisgICAgU3RyaW5nIHR5
cGU7CisgICAgYm9vbCB0eXBlRXhpc3RzID0gcGFyYW1ldGVycy5nZXRXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soInR5cGUiLCB0eXBlKTsKKyAgICBTdHJpbmcgc2VydmljZTsKKyAgICBpZiAocGFy
YW1ldGVycy5nZXQoInNlcnZpY2UiLCBzZXJ2aWNlKQorICAgICAgICAmJiAoc2VydmljZS5pc051
bGwoKSB8fCBzZXJ2aWNlLmlzRW1wdHkoKSkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKHR5cGUuaXNFbXB0eSgpKSB7CisKKyAg
ICBpZiAoIWFjdGlvbkV4aXN0cyB8fCBhY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghdHlwZUV4aXN0
cyB8fCB0eXBlLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4g
Y2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGVQb3J0cygmcG9ydHMsIGVjKTsKKyAg
ICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzOworICAgIGJvb2wgcG9ydHNFeGlzdHMgPSBwYXJhbWV0
ZXJzLmdldCgidHJhbnNmZXIiLCBwb3J0cyk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5l
bEFycmF5PiBjaGFubmVsczsKKyAgICBpZiAocG9ydHNFeGlzdHMpCisgICAgICAgIGNoYW5uZWxz
ID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMoJnBvcnRzLCBlYyk7CisKKyAgICBTY3Jp
cHRWYWx1ZSBkYXRhVmFsdWU7CisgICAgYm9vbCBkYXRhRXhpc3RzID0gcGFyYW1ldGVycy5nZXQo
ImRhdGEiLCBkYXRhVmFsdWUpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWREYXRhOworICAgIGlmIChkYXRhRXhpc3RzKSB7CisgICAgICAgIGJvb2wgZGlkVGhy
b3cgPSBmYWxzZTsKKyAgICAgICAgc2VyaWFsaXplZERhdGEgPSBkYXRhVmFsdWUuc2VyaWFsaXpl
KHNjcmlwdFN0YXRlLCAmcG9ydHMsIDAsIGRpZFRocm93KTsKKyAgICAgICAgaWYgKGRpZFRocm93
KSB7CisgICAgICAgICAgICBlYyA9IERBVEFfQ0xPTkVfRVJSOworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChh
Y3Rpb24sIHR5cGUsIGRhdGEsIGNoYW5uZWxzLnJlbGVhc2UoKSkpOwotfQorICAgIFdURjo6SGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gZXh0cmFzOworICAgIERpY3Rpb25hcnkgZXh0cmFzRGljdGlv
bmFyeTsKKyAgICBib29sIGV4dHJhc0V4aXN0cyA9IHBhcmFtZXRlcnMuZ2V0KCJleHRyYXMiLCBl
eHRyYXNEaWN0aW9uYXJ5KTsKKyAgICBpZiAoZXh0cmFzRXhpc3RzKQorICAgICAgICBleHRyYXNE
aWN0aW9uYXJ5LmdldE93blByb3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAoZXh0cmFzKTsKIAotSW50
ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCi0gICAgOiBtX2FjdGlvbihhY3Rp
b24pCi0gICAgLCBtX3R5cGUodHlwZSkKLXsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgbV9kYXRh
ID0gZGF0YTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6bnVsbFZhbHVlKCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0
eXBlLCBzZXJpYWxpemVkRGF0YS5yZWxlYXNlKCksIGNoYW5uZWxzLnJlbGVhc2UoKSwgZXh0cmFz
LCBzZXJ2aWNlKSk7CiB9CiAKLUludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBj
b25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRh
LCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cykKK0ludGVudDo6SW50
ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsCisgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFzc093blB0cjxN
ZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMsCisgICAgICAgICAgICAgICBjb25zdCBXVEY6
Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMsIGNvbnN0IFN0cmluZyYgc2VydmljZSkK
ICAgICA6IG1fYWN0aW9uKGFjdGlvbikKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9wb3J0
cyhwb3J0cykKKyAgICAsIG1fc2VydmljZShzZXJ2aWNlKQorICAgICwgbV9leHRyYXMoZXh0cmFz
KQogewogICAgIGlmIChkYXRhKQogICAgICAgICBtX2RhdGEgPSBkYXRhOwpAQCAtOTgsNiArMTMx
LDExIEBAIGNvbnN0IFN0cmluZyYgSW50ZW50Ojp0eXBlKCkgY29uc3QKICAgICByZXR1cm4gbV90
eXBlOwogfQogCitjb25zdCBTdHJpbmcmIEludGVudDo6c2VydmljZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc2VydmljZTsKK30KKwogU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBJbnRlbnQ6OmRh
dGEoKSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEuZ2V0KCk7CkBAIC0xMDgsNiArMTQ2LDEx
IEBAIE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBJbnRlbnQ6Om1lc3NhZ2VQb3J0cygpIGNvbnN0
CiAgICAgcmV0dXJuIG1fcG9ydHMuZ2V0KCk7CiB9CiAKK2NvbnN0IFdURjo6SGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIEludGVudDo6ZXh0cmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9leHRy
YXM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJf
SU5URU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaAppbmRleCAzM2Vm
NjllMDQ0MTA1OTZlMjQxNTMzNDg1ZWZiYzlmNWM0ZTZiNmQ0Li41OTMyMWFlYzZjYTc3ZjJkYWU1
NDIyZDliZmY2ZmIzODcyYmNiNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ludGVudHMvSW50ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0lu
dGVudC5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCiAKKyNp
bmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRl
ICJNZXNzYWdlUG9ydENoYW5uZWwuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNDEs
MzIgKzQyLDM5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2NyaXB0U3RhdGU7
CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNv
ZGU7CiAKIGNsYXNzIEludGVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVudD4gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludGVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBv
cnRzLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVh
dGUoU2NyaXB0U3RhdGUqLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZSYpOwogCiAg
ICAgY29uc3QgU3RyaW5nJiBhY3Rpb24oKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIHR5cGUo
KSBjb25zdDsKICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEoKSBjb25zdDsKIAotICAg
IGludCBpZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRJZGVudGlmaWVyKGludCk7Ci0K
ICAgICBNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogbWVzc2FnZVBvcnRzKCkgY29uc3Q7CisgICAg
Y29uc3QgU3RyaW5nJiBzZXJ2aWNlKCkgY29uc3Q7CisgICAgY29uc3QgV1RGOjpIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYgZXh0cmFzKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBJbnRlbnQo
Y29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAgICAgICAgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+IHBvcnRzLAorICAgICAgICAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+JiBleHRyYXMsIGNvbnN0IFN0cmluZyYgc2VydmljZSk7CiAKIHByaXZhdGU6
Ci0gICAgSW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKTsKLSAgICBJbnRlbnQoY29uc3Qg
U3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBv
cnRzKTsKIAogICAgIFN0cmluZyBtX2FjdGlvbjsKICAgICBTdHJpbmcgbV90eXBlOworCiAgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbV9kYXRhOwogICAgIE93blB0cjxNZXNzYWdl
UG9ydENoYW5uZWxBcnJheT4gbV9wb3J0czsKKworICAgIFN0cmluZyBtX3NlcnZpY2U7CisgICAg
V1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2V4dHJhczsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9J
bnRlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKaW5k
ZXggZWYwODI1MDczNGZmYzc5YjE5NDk4MGVjODI0M2VlYjM0NDhhYzUyZS4uOTI2NTdiNGU2Y2U2
MGYwNzk5NTI0NjQwMTYzNjViODcwOTE0OTVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bnRlbnRzL0ludGVudC5pZGwKQEAgLTI2LDYgKzI2LDcgQEAKIG1vZHVsZSB3aW5kb3cgewogICBp
bnRlcmZhY2UgWwogICAgICAgQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFMsCisgICAgICBDdXN0b21D
b25zdHJ1Y3RvciwKICAgICAgIENvbnN0cnVjdG9yKGluIERPTVN0cmluZyBhY3Rpb24sIGluIERP
TVN0cmluZyB0eXBlLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzTnVsbFN0cmluZywgVHJhbnNmZXJM
aXN0PXRyYW5zZmVyTGlzdF0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRhdGEsIGluIFtPcHRpb25h
bD1EZWZhdWx0SXNVbmRlZmluZWRdIEFycmF5IHRyYW5zZmVyTGlzdCksCiAgICAgICBDb25zdHJ1
Y3RvclJhaXNlc0V4Y2VwdGlvbgogICBdIEludGVudCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjU1
NmU4MDBhYTIzMjEyMzUyYmFjZTBkMzhhZmQyMjNkMzQxMWViNS4uOGUyYmQ5OWY2OGRkOThlMDg2
MTIwYTU0OTdjYmRmYTRmNDQ5YWM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjI3OCw2ICsyMjc4
LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQxNkFycmF5Q3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50MzJBcnJheUN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDhBcnJheUN1c3Rv
bS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVj
dG9yLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SmF2YVNjcmlwdENh
bGxGcmFtZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExv
Y2F0aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVz
c2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9E
aWN0aW9uYXJ5LmNwcAppbmRleCBmZDRkYTFmYjAwNmNmY2Y2NDE4OWY4MjM5ZDhlNmNiMjBmMWM2
YWVhLi5hOGRiNDA0YmNjODhmY2YwMjlhMTMwYjJiNWVmMDllOTJhZDZhODU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcApAQCAtNDEyLDQgKzQxMiwzOSBAQCBi
b29sIERpY3Rpb25hcnk6OmdldChjb25zdCBTdHJpbmcmIGtleSwgUmVmUHRyPFNwZWVjaFJlY29n
bml0aW9uUmVzdWx0TGlzdD4mIHZhbAogCiAjZW5kaWYKIAorYm9vbCBEaWN0aW9uYXJ5OjpnZXQo
Y29uc3QgU3RyaW5nJiBrZXksIERpY3Rpb25hcnkmIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHY4VmFsdWUtPklzT2JqZWN0KCkpCisg
ICAgICAgIHZhbHVlID0gRGljdGlvbmFyeSh2OFZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCisKK2Jvb2wgRGljdGlvbmFyeTo6Z2V0T3duUHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcChX
VEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBoYXNoTWFwKSBjb25zdAoreworICAgIGlmICgh
bV9vcHRpb25zLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KG1fb3B0aW9ucyk7CisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IHdyYXBw
ZXItPkdldE93blByb3BlcnR5TmFtZXMoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
cHJvcGVydGllcy0+TGVuZ3RoKCk7ICsraSkgeworICAgICAgICB2ODo6TG9jYWw8djg6OlN0cmlu
Zz4ga2V5ID0gcHJvcGVydGllcy0+R2V0KGkpLT5Ub1N0cmluZygpOworICAgICAgICBpZiAoIXdy
YXBwZXItPkhhcyhrZXkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSB3cmFwcGVyLT5HZXQoa2V5KTsKKyAgICAgICAgU3RyaW5n
IHN0cmluZ0tleSA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoa2V5KTsKKyAgICAgICAgU3RyaW5n
IHN0cmluZ1ZhbHVlID0gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgICAgIGlm
ICghc3RyaW5nS2V5LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGhhc2hNYXAuc2V0KHN0cmluZ0tl
eSwgc3RyaW5nVmFsdWUpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9E
aWN0aW9uYXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgKaW5k
ZXggMzIxNjRiOGNiYjIzYTU0YWJjNTg0OTc5OTYyNTk2YzVmZDJmZjgzMS4uYTFkNTZlZmE3YzVj
NDA0ZTlmOWM4YTAyMTgxMTg3NjVlMGIzYmM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvRGljdGlvbmFyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmcuaD4KIApAQCAtODEsNiArODIsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4m
KSBjb25zdDsKICNlbmRpZgogICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRv
bWljU3RyaW5nPiYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIERpY3Rpb25h
cnkmKSBjb25zdDsKKyAgICBib29sIGdldE93blByb3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAoV1RG
OjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpIGNvbnN0OwogCiAgICAgYm9vbCBnZXRXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiwgU3RyaW5nJikgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcAppbmRleCBlY2MzNjczNjJhODM4
YjdmOTg5MjhlZDA1OTlkNjM3NjlmMDk3Y2I3Li4zMWJjZDIzZWU5YTM3ZDcwZmRlNTE3YjQyOWE0
NTgwZTFkM2YxMzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUu
Y3BwCkBAIC0zMiw5ICszMiwxMSBAQAogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAKICNpbmNs
dWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1
ZGUgIlNjcmlwdFNjb3BlLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAj
aW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsNiArNDYsMTMgQEAgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXQKICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgp
KTsKIH0KIAorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpz
ZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSogbWVz
c2FnZVBvcnRzLCBBcnJheUJ1ZmZlckFycmF5KiBhcnJheUJ1ZmZlcnMsIGJvb2wmIGRpZFRocm93
KQoreworICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKKyAgICByZXR1cm4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgpLCBtZXNzYWdlUG9ydHMsIGFycmF5
QnVmZmVycywgZGlkVGhyb3cpOworfQorCiBTY3JpcHRWYWx1ZSBTY3JpcHRWYWx1ZTo6ZGVzZXJp
YWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZh
bHVlKQogewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCmluZGV4IGQ0MTI5MDFmZGFkOTUwZWU4NmY4Yjlk
ZWVkY2IxNzgyZDE1YTAxMWUuLjhmMWQyOGU2MDE1MTQ1OTc4NTViZTkwOTc0NTNmMmEyOGQ0Zjlm
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaApAQCAtMzYsMTUg
KzM2LDI0IEBACiAKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lm
bmRlZiBOREVCVUcKICNpbmNsdWRlICJWOFByb3h5LmgiICAvLyBmb3IgcmVnaXN0ZXIgYW5kIHVu
cmVnaXN0ZXIgZ2xvYmFsIGhhbmRsZXMuCiAjZW5kaWYKIAorbmFtZXNwYWNlIFdURiB7CitjbGFz
cyBBcnJheUJ1ZmZlcjsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnNwZWN0
b3JWYWx1ZTsKK2NsYXNzIE1lc3NhZ2VQb3J0OwogY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVl
OwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0PiwgMT4gTWVzc2FnZVBvcnRBcnJh
eTsKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxXVEY6OkFycmF5QnVmZmVyPiwgMT4gQXJyYXlCdWZm
ZXJBcnJheTsKIAogY2xhc3MgU2NyaXB0VmFsdWUgewogcHVibGljOgpAQCAtMTMxLDYgKzE0MCw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gc2VyaWFsaXplKFNjcmlwdFN0YXRlKik7CisgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIE1lc3NhZ2VQb3J0QXJyYXkqLCBBcnJh
eUJ1ZmZlckFycmF5KiwgYm9vbCYpOwogICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6
ZShTY3JpcHRTdGF0ZSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSopOwogCiAgICAgc3RhdGljIFNj
cmlwdFZhbHVlIHVuZGVmaW5lZCgpIHsgcmV0dXJuIFNjcmlwdFZhbHVlKHY4OjpVbmRlZmluZWQo
KSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElu
dGVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEludGVudENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjA4YTA5NDRhMzdiZDM5NTJkNjA1
MzM0OTAwYjA0MGY0NGY4MzFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsOTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwg
SW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZW50LmgiCisKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Qmlu
ZGluZ01hY3Jvcy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SW50
ZW50LmgiCisjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIK
KyNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbnRlbnQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5JbnRlbnQuQ29uc3Ry
dWN0b3IiKTsKKworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBh
cyBhIGZ1bmN0aW9uLiIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisKKyAgICBpZiAoQ29uc3RydWN0
b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3Qp
CisgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwg
MSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQ
cm94eTo6VHlwZUVycm9yKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA9PSAxKSB7CisgICAgICAg
IC8vIFVzZSB0aGUgZGljdGlvbmFyeSBjb25zdHJ1Y3Rvci4gVGhpcyBibG9jayB3aWxsIHJldHVy
biBpZiB0aGUKKyAgICAgICAgLy8gYXJndW1lbnQgaXNuJ3QgYSB2YWxpZCBEaWN0aW9uYXJ5Lgor
ICAgICAgICBFWENFUFRJT05fQkxPQ0soRGljdGlvbmFyeSwgb3B0aW9ucywgYXJnc1swXSk7Cisg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBSZWZQdHI8SW50ZW50PiBpbXBs
ID0gSW50ZW50OjpjcmVhdGUoU2NyaXB0U3RhdGU6OmN1cnJlbnQoKSwgb3B0aW9ucywgZWMpOwor
ICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CisgICAg
ICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmaW5mbywgaW1w
bC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGltcGwucmVsZWFzZSgpLCBhcmdzLkhvbGRl
cigpKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTVFJJTkdfVE9f
VjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIGFjdGlvbiwgTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CisgICAgU1RS
SU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCB0eXBlLCBN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAg
ICBNZXNzYWdlUG9ydEFycmF5IG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3Q7CisgICAgQXJy
YXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0OworICAgIGlmIChhcmdz
Lkxlbmd0aCgpID4gMykgeworICAgICAgICBpZiAoIWV4dHJhY3RUcmFuc2ZlcmFibGVzKGFyZ3Nb
M10sIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsIGFycmF5QnVmZmVyQXJyYXlUcmFuc2Zl
ckxpc3QpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBleHRyYWN0
IHRyYW5zZmVyYWJsZXMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworICAgIH0KKyAgICBib29sIGRh
dGFEaWRUaHJvdyA9IGZhbHNlOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRh
dGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzJdLCAmbWVzc2FnZVBvcnRB
cnJheVRyYW5zZmVyTGlzdCwgJmFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3QsIGRhdGFEaWRU
aHJvdyk7CisgICAgaWYgKGRhdGFEaWRUaHJvdykKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKKworICAgIFJlZlB0cjxJbnRlbnQ+IGltcGwgPSBJbnRlbnQ6OmNyZWF0ZShhY3Rpb24s
IHR5cGUsIGRhdGEsIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsIGVjKTsKKyAgICBpZiAo
ZWMpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRlcigpOworCisgICAgVjhET01XcmFwcGVyOjpzZXRE
T01XcmFwcGVyKHdyYXBwZXIsICZpbmZvLCBpbXBsLmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLnJlbGVhc2UoKSwgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKSk7CisgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7Cit9
CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJJbnRlbnQuaAppbmRleCA3M2E2MjEzMmFkNjMzOWM1NmQ0NTYzZTQyNGRiNmY1OGRmZDAz
MzgyLi5kMmRhMmU5ZGRmZDcwMWQ5ZjYyZTYyNDY1MTFjMmI3NzMxNGRkOGM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaApAQCAtNjMsNiArNjMsMTYgQEAgcHVi
bGljOgogICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGFjdGlvbigpIGNvbnN0OwogICAgIFdF
QktJVF9FWFBPUlQgV2ViU3RyaW5nIHR5cGUoKSBjb25zdDsKICAgICBXRUJLSVRfRVhQT1JUIFdl
YlN0cmluZyBkYXRhKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgc2Vydmlj
ZSgpIGNvbnN0OworCisgICAgLy8gUmV0cmlldmUgYSBsaXN0IG9mIHRoZSBuYW1lcyBvZiBleHRy
YSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgLy8gaW50ZW50LgorICAgIFdFQktJ
VF9FWFBPUlQgV2ViVmVjdG9yPFdlYlN0cmluZz4gZXh0cmFzTmFtZXMoKSBjb25zdDsKKworICAg
IC8vIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhbiBleHRyYSBtZXRhZGF0YSBlbGVtZW50LiBUaGUg
YXJndW1lbnQgc2hvdWxkCisgICAgLy8gYmUgb25lIG9mIHRoZSBuYW1lcyByZXRyaWV2ZWQgd2l0
aCB8ZXh0cmFzTmFtZXN8LiBSZXR1cm5zIGFuIGVtcHR5CisgICAgLy8gc3RyaW5nIGlmIHRoZSBu
YW1lIGlzIGludmFsaWQuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgZXh0cmFzVmFsdWUo
Y29uc3QgV2ViU3RyaW5nJikgY29uc3Q7CiAKICAgICAvLyBDYWxsZXIgdGFrZXMgb3duZXJzaGlw
IG9mIHRoZSBwb3J0cy4KICAgICBXRUJLSVRfRVhQT1JUIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5KiBtZXNzYWdlUG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkludGVudC5jcHAKaW5kZXggOGE3ZDZhYWM1NDNiZDk5OTk5YjhmYTc5ODQz
YTM0MDNhZTU2N2M5ZS4uNTA5OWQ3MzE2ZGNhYTBkNDI3YzQzNDAzYmMwOGNmZTg3M2ZkMGMwZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiSW50ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWwuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMTAzLDYgKzEwNCwxNSBA
QCBXZWJTdHJpbmcgV2ViSW50ZW50OjpkYXRhKCkgY29uc3QKICNlbmRpZgogfQogCitXZWJTdHJp
bmcgV2ViSW50ZW50OjpzZXJ2aWNlKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMp
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2VydmljZSgpOworI2Vsc2UKKyAgICByZXR1cm4gV2Vi
U3RyaW5nKCk7CisjZW5kaWYKK30KKwogV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdlYklu
dGVudDo6bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogewogICAgIC8vIE5vdGU6
IHNlZSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZS4KQEAg
LTEyMCw0ICsxMzAsMzAgQEAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdlYkludGVudDo6
bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogICAgIHJldHVybiB3ZWJDaGFubmVs
czsKIH0KIAorV2ViVmVjdG9yPFdlYlN0cmluZz4gV2ViSW50ZW50OjpleHRyYXNOYW1lcygpIGNv
bnN0Cit7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIHNpemVfdCBudW1FeHRyYXMgPSBt
X3ByaXZhdGUtPmV4dHJhcygpLnNpemUoKTsKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiBrZXlT
dHJpbmdzKG51bUV4dHJhcyk7CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3I6OktleXMga2V5SXRlciA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuYmVnaW4oKS5r
ZXlzKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGtleUl0ZXIgIT0gbV9wcml2YXRlLT5leHRyYXMo
KS5lbmQoKS5rZXlzKCk7ICsra2V5SXRlciwgKytpKQorICAgICAgICBrZXlTdHJpbmdzW2ldID0g
KmtleUl0ZXI7CisgICAgcmV0dXJuIGtleVN0cmluZ3M7CisjZWxzZQorICAgIHJldHVybiBXZWJW
ZWN0b3I8V2ViU3RyaW5nPigpOworI2VuZGlmCit9CisKK1dlYlN0cmluZyBXZWJJbnRlbnQ6OmV4
dHJhc1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VC
X0lOVEVOVFMpCisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgdmFsID0gbV9wcml2YXRlLT5leHRyYXMoKS5maW5kKG5hbWUpOworICAgIGlmICh2YWwgPT0g
bV9wcml2YXRlLT5leHRyYXMoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwor
ICAgIHJldHVybiB2YWwtPnNlY29uZDsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlN0cmluZygpOwor
I2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IDhiOTNkNDUzZTVjZDM1ZDI3MWEyNjFi
ZjNmOTUwNzQ3NWFjMTg3YzkuLjY4NDI5MzlmMmZmYzI4ODI3M2IxOWVkMzNlOTgwZWY4NGUxZDk1
YjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAK
QEAgLTEzMzUsNiArMTMzNSwxMyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpkaXNwYXRjaEludGVudChX
ZWJGcmFtZSogc291cmNlLCBjb25zdCBXZWJJbnRlbnRSZXF1ZXN0JiByZXF1ZQogICAgICAgICAg
ICAgKCpwb3J0cylbaV0tPmRlc3Ryb3koKTsKICAgICAgICAgZGVsZXRlIHBvcnRzOwogICAgIH0K
KyAgICBpZiAoIXJlcXVlc3QuaW50ZW50KCkuc2VydmljZSgpLmlzRW1wdHkoKSkKKyAgICAgICAg
cHJpbnRmKCJFeHBsaWNpdCBpbnRlbnQgc2VydmljZTogJXNcbiIsIHJlcXVlc3QuaW50ZW50KCku
c2VydmljZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGV4dHJh
cyA9IHJlcXVlc3QuaW50ZW50KCkuZXh0cmFzTmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGV4dHJhcy5zaXplKCk7ICsraSkgeworICAgICAgICBwcmludGYoIkV4dHJhc1slc10g
PSAlc1xuIiwgZXh0cmFzW2ldLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICByZXF1ZXN0
LmludGVudCgpLmV4dHJhc1ZhbHVlKGV4dHJhc1tpXSkudXRmOCgpLmRhdGEoKSk7CisgICAgfQog
fQogCiAvLyBQdWJsaWMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJp
bnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJpbnRl
bnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKaW5kZXggNzY2Y2ZkMGE0ZDA0N2I1NzY0
Yzg4MzNiOTA0Y2FkZjVjOWE0YzU2Ny4uYmZmMGE2NmM0MmY3ZDM3NDNlMWYwMjM2YmM0NjFiYmY0
MjQ4NDEzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1h
cGktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMt
YXBpLWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDYgQEAKIFBBU1MgbmF2aWdhdG9yLndlYmtpdFN0
YXJ0QWN0aXZpdHkgaXMgZGVmaW5lZC4KIFBBU1MgdmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRl
bnQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBB
U1MgbmV3IFdlYktpdEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBl
bm91Z2ggYXJndW1lbnRzLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdhJykgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2ViS2l0
SW50ZW50KCcnLCcnLCcnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBF
eGNlcHRpb24gMTIuCiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJykgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2Vi
S2l0SW50ZW50KCcnLCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBE
T00gRXhjZXB0aW9uIDEyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWIt
aW50ZW50cy1hcGkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBp
Lmh0bWwKaW5kZXggMWRlMTdhMDk2ZTFlODE1ZmZiYmFhMzhmMTczYWQ3NWQ1ZTEzNTVkMy4uMjYy
Y2EwZGEwZmMxNDE2M2U3MTBhODgzNjlkOWUxMzc2MzMwNGZjMyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCkBAIC04LDcgKzgsNyBAQAogICAgICAgc2hv
dWxkQmVEZWZpbmVkKCJuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eSIpOwogICAgICAgCiAg
ICAgICBzaG91bGRUaHJvdygidmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoKSIsICInVHlw
ZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTs7Ci0gICAgICBzaG91bGRUaHJvdygibmV3
IFdlYktpdEludGVudCgnYScpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzJyIp
OworICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJ2EnKSIsICInRXJyb3I6IFNZ
TlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IFdl
YktpdEludGVudCgnJywnJywnJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyJyIpOwogICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJyki
LCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAgICAgc2hvdWxk
VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJycsJ2MnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6
IERPTSBFeGNlcHRpb24gMTInIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRz
L3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWQ3MmJlNDAxMTYwZjAwZDc3NzVjZmJjYWZmMjY5MmEzNmQ5MDZlMwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVj
dG9yLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIwIEBACitSZWNlaXZlZCBXZWIgSW50ZW50OiBh
Y3Rpb249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4KK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlv
bj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbitleHBsaWNpdAorRXhwbGljaXQgaW50ZW50IHNlcnZp
Y2U6IGV4cGxpY2l0CitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rpb249YWN0aW9uMSB0eXBlPXRl
eHQvcGxhaW4rZXh0cmFzCitFeHRyYXNbYV0gPSBiCitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rp
b249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4rcG9ydAorSGF2ZSAxIHBvcnRzCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgbmV3IFdlYktpdElu
dGVudCh7fSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYSc6J2InfSkgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50
KHsnYWN0aW9uJzonYid9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBF
eGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeyd0eXBlJzonYid9KSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBX
ZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzonJ30pIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KKyogc2VudCBv
YmplY3QgaW50ZW50CisqIHNlbnQgZXhwbGljaXQgaW50ZW50CisqIHNlbnQgaW50ZW50IHdpdGgg
ZXh0cmFzCisqIHNlbnQgaW50ZW50IHdpdGggcG9ydAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3IuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yYTU5ZjMwYWMwMGE3M2RjNmQzYzk5NDQ2YmEyYjMxNThiODk2NmRiCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3Iu
aHRtbApAQCAtMCwwICsxLDU0IEBACis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9
Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3dlYi1pbnRlbnRzLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQ+CisgICAgICBmdW5jdGlvbiBidXR0b25DbGlja2VkKCkgeworICAgICAgICBzaG91
bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7fSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00g
RXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7
J2EnOidiJ30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAg
ICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidiJ30pIiwgIidF
cnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhy
b3coIm5ldyBXZWJLaXRJbnRlbnQoeyd0eXBlJzonYid9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6
IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50
ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6Jyd9KSIsICInRXJyb3I6IFNZ
TlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisKKyAgICAgICAgdmFyIHNpbXBsZUludGVu
dCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAgICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEiLAor
ICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9wbGFpbiIsCisgICAgICAgICAgICAgImRhdGEiOiJt
ZXNzYWdlIn0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShzaW1wbGVJ
bnRlbnQpOworICAgICAgICBkZWJ1ZygiKiBzZW50IG9iamVjdCBpbnRlbnQiKTsKKworICAgICAg
ICB2YXIgZXhwbGljaXRJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAgICAgICAgeyJh
Y3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxhaW4rZXhwbGlj
aXQiLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSIsCisgICAgICAgICAgICAgInNlcnZp
Y2UiIDogImV4cGxpY2l0In0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0
eShleHBsaWNpdEludGVudCk7CisgICAgICAgIGRlYnVnKCIqIHNlbnQgZXhwbGljaXQgaW50ZW50
Iik7CisKKyAgICAgICAgdmFyIGV4dHJhc0ludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAg
ICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEiLAorICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9w
bGFpbitleHRyYXMiLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSIsCisgICAgICAgICAg
ICAgImV4dHJhcyI6eyJhIjoiYiJ9fSk7CisgICAgICAgIG5hdmlnYXRvci53ZWJraXRTdGFydEFj
dGl2aXR5KGV4dHJhc0ludGVudCk7CisgICAgICAgIGRlYnVnKCIqIHNlbnQgaW50ZW50IHdpdGgg
ZXh0cmFzIik7CisKKyAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsK
KyAgICAgICAgY2hhbm5lbC5wb3J0Mi5vbk1lc3NhZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICBkZWJ1ZygiKiBnb3QgbWVzc2FnZSIpOworICAgICAgICB9OworICAgICAgICB2YXIgcG9ydElu
dGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAgICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEi
LAorICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9wbGFpbitwb3J0IiwKKyAgICAgICAgICAgICAi
ZGF0YSI6Y2hhbm5lbC5wb3J0MSwKKyAgICAgICAgICAgICAidHJhbnNmZXIiOltjaGFubmVsLnBv
cnQxXX0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShwb3J0SW50ZW50
KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBpbnRlbnQgd2l0aCBwb3J0Iik7CisgICAgICB9Cisg
ICAgPC9zY3JpcHQ+CisgIDwvaGVhZD4KKzxib2R5IG9ubG9hZD0ic2ltdWxhdGVCdXR0b25QcmVz
cygpIj4KKzxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJidXR0b24iIHZhbHVlPSJTdGFydCBXZWIg
SW50ZW50IiBvbm1vdXNldXA9ImJ1dHRvbkNsaWNrZWQoKSI+Cis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138397</attachid>
            <date>2012-04-23 12:17:23 -0700</date>
            <delta_ts>2012-04-24 13:27:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120423121723.patch</filename>
            <type>text/plain</type>
            <size>28214</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjVjODU0ZjgyMzhkYTNh
YTVmOWIwMDdhMzIwNzA4MDg1OWNjYzkyMy4uMWY4MzBkOWZlMDQxNWJhNGZiNGEyZmFhNWFmNGMw
ODgzNDllZTAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGhvcGVmdWxseSBiZSB0
ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2luZyB0aGlzCisgICAgICAgIGNv
bnN0cnVjdG9yLCB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4KKyAgICAgICAgQWRkZWQgbGF5
b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAgICAgIHdlYmludGVudHMvd2Vi
LWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMTkgIFhpbmduYW4gV2Fu
ZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CiAKICAgICAgICAgT3B0aW1pemUgZm9yIERBUldJ
TiBpbiBEaXJlY3RDb252b2x2ZXI6OnByb2Nlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50LmNwcAppbmRleCAwNTNkNDI5Y2ZhMWM5NzIzZjk2MzZjMzc5ZjNhMzkxODVk
ZDQ5NGJlLi4zMjcxZjRlM2I3NmQxYTdhZTUwM2NhM2YwZGIyMTQ4MWYxNmI0Yjc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcApAQCAtMzMsMTEgKzMzLDEyIEBA
CiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIK
KyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNz
UmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIGNv
bnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBp
ZiAoYWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CkBAIC00OCwz
OSArNDksNjYgQEAgUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3MKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBlLCBkYXRh
KSk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyA9IE1lc3Nh
Z2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywgZWMpOworCisgICAgV1RGOjpIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBleHRyYXM7CisgICAgU3RyaW5nIHNlcnZpY2U7CisKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEsIGNoYW5uZWxzLnJlbGVh
c2UoKSwgZXh0cmFzLCBzZXJ2aWNlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYg
cG9ydHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3Jl
YXRlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgRGljdGlvbmFyeSYgcGFyYW1ldGVy
cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpIHsKKyAg
ICBTdHJpbmcgYWN0aW9uOworICAgIGlmICghcGFyYW1ldGVycy5nZXRXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soImFjdGlvbiIsIGFjdGlvbikgfHwgYWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAg
ICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAodHlw
ZS5pc0VtcHR5KCkpIHsKKworICAgIFN0cmluZyB0eXBlOworICAgIGlmICghcGFyYW1ldGVycy5n
ZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soInR5cGUiLCB0eXBlKSB8fCB0eXBlLmlzRW1wdHko
KSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMgPSBNZXNzYWdl
UG9ydDo6ZGlzZW50YW5nbGVQb3J0cygmcG9ydHMsIGVjKTsKKyAgICBTdHJpbmcgc2VydmljZTsK
KyAgICBpZiAocGFyYW1ldGVycy5nZXQoInNlcnZpY2UiLCBzZXJ2aWNlKSAmJiAoc2VydmljZS5p
c051bGwoKSB8fCBzZXJ2aWNlLmlzRW1wdHkoKSkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElu
dGVudChhY3Rpb24sIHR5cGUsIGRhdGEsIGNoYW5uZWxzLnJlbGVhc2UoKSkpOwotfQorICAgIE1l
c3NhZ2VQb3J0QXJyYXkgcG9ydHM7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5
PiBjaGFubmVsczsKKyAgICBpZiAocGFyYW1ldGVycy5nZXQoInRyYW5zZmVyIiwgcG9ydHMpKQor
ICAgICAgICBjaGFubmVscyA9IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywg
ZWMpOworCisgICAgU2NyaXB0VmFsdWUgZGF0YVZhbHVlOworICAgIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWREYXRhOworICAgIGlmIChwYXJhbWV0ZXJzLmdldCgiZGF0
YSIsIGRhdGFWYWx1ZSkpIHsKKyAgICAgICAgYm9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAgICAg
ICBzZXJpYWxpemVkRGF0YSA9IGRhdGFWYWx1ZS5zZXJpYWxpemUoc2NyaXB0U3RhdGUsICZwb3J0
cywgMCwgZGlkVGhyb3cpOworICAgICAgICBpZiAoZGlkVGhyb3cpIHsKKyAgICAgICAgICAgIGVj
ID0gREFUQV9DTE9ORV9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg
IH0KIAotSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCi0gICAgOiBtX2Fj
dGlvbihhY3Rpb24pCi0gICAgLCBtX3R5cGUodHlwZSkKLXsKLSAgICBpZiAoZGF0YSkKLSAgICAg
ICAgbV9kYXRhID0gZGF0YTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCk7CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBleHRyYXM7CisgICAgRGljdGlvbmFyeSBleHRyYXNEaWN0aW9uYXJ5OworICAgIGlmIChwYXJh
bWV0ZXJzLmdldCgiZXh0cmFzIiwgZXh0cmFzRGljdGlvbmFyeSkpCisgICAgICAgIGV4dHJhc0Rp
Y3Rpb25hcnkuZ2V0T3duUHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcChleHRyYXMpOworCisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBlLCBzZXJpYWxpemVkRGF0YS5y
ZWxlYXNlKCksIGNoYW5uZWxzLnJlbGVhc2UoKSwgZXh0cmFzLCBzZXJ2aWNlKSk7CiB9CiAKLUlu
dGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQ
b3J0Q2hhbm5lbEFycmF5PiBwb3J0cykKK0ludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsCisgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eT4gcG9ydHMsCisgICAgICAgICAgICAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+JiBleHRyYXMsIGNvbnN0IFN0cmluZyYgc2VydmljZSkKICAgICA6IG1fYWN0aW9uKGFjdGlv
bikKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9wb3J0cyhwb3J0cykKKyAgICAsIG1fc2Vy
dmljZShzZXJ2aWNlKQorICAgICwgbV9leHRyYXMoZXh0cmFzKQogewogICAgIGlmIChkYXRhKQog
ICAgICAgICBtX2RhdGEgPSBkYXRhOwpAQCAtOTgsNiArMTI2LDExIEBAIGNvbnN0IFN0cmluZyYg
SW50ZW50Ojp0eXBlKCkgY29uc3QKICAgICByZXR1cm4gbV90eXBlOwogfQogCitjb25zdCBTdHJp
bmcmIEludGVudDo6c2VydmljZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VydmljZTsKK30K
KwogU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBJbnRlbnQ6OmRhdGEoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2RhdGEuZ2V0KCk7CkBAIC0xMDgsNiArMTQxLDExIEBAIE1lc3NhZ2VQb3J0Q2hhbm5l
bEFycmF5KiBJbnRlbnQ6Om1lc3NhZ2VQb3J0cygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcG9ydHMu
Z2V0KCk7CiB9CiAKK2NvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIEludGVudDo6
ZXh0cmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9leHRyYXM7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5URU5UUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaAppbmRleCAzM2VmNjllMDQ0MTA1OTZlMjQxNTMzNDg1
ZWZiYzlmNWM0ZTZiNmQ0Li43YmViZjQxMGQ5OTAyNGQ2NDM2OTM5ZjIyOTFjYWQxMjdmY2M2NmRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCkBAIC0zMSw2ICszMSw3
IEBACiAKICNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5Lmgi
CiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydENoYW5uZWwu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNDEsMzIgKzQyLDM3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2NyaXB0U3RhdGU7CiBjbGFzcyBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNzIEludGVudCA6
IHB1YmxpYyBSZWZDb3VudGVkPEludGVudD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEludGVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5
cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGRhdGEsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRpb25Db2RlJik7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoU2NyaXB0U3RhdGUqLCBjb25z
dCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgY29uc3QgU3RyaW5nJiBhY3Rp
b24oKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdDsKICAgICBTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIGRhdGEoKSBjb25zdDsKIAotICAgIGludCBpZGVudGlmaWVyKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRJZGVudGlmaWVyKGludCk7Ci0KICAgICBNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheSogbWVzc2FnZVBvcnRzKCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiBzZXJ2aWNl
KCkgY29uc3Q7CisgICAgY29uc3QgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZXh0cmFz
KCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24s
IGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRz
LAorICAgICAgICAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMs
IGNvbnN0IFN0cmluZyYgc2VydmljZSk7CiAKIHByaXZhdGU6Ci0gICAgSW50ZW50KGNvbnN0IFN0
cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBkYXRhKTsKLSAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBh
c3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKTsKIAogICAgIFN0cmluZyBt
X2FjdGlvbjsKICAgICBTdHJpbmcgbV90eXBlOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IG1fZGF0YTsKICAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IG1fcG9y
dHM7CisgICAgU3RyaW5nIG1fc2VydmljZTsKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IG1fZXh0cmFzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbAppbmRleCBlZjA4MjUwNzM0ZmZjNzliMTk0OTgw
ZWM4MjQzZWViMzQ0OGFjNTJlLi45MjY1N2I0ZTZjZTYwZjA3OTk1MjQ2NDAxNjM2NWI4NzA5MTQ5
NWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50Lmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbApAQCAtMjYs
NiArMjYsNyBAQAogbW9kdWxlIHdpbmRvdyB7CiAgIGludGVyZmFjZSBbCiAgICAgICBDb25kaXRp
b25hbD1XRUJfSU5URU5UUywKKyAgICAgIEN1c3RvbUNvbnN0cnVjdG9yLAogICAgICAgQ29uc3Ry
dWN0b3IoaW4gRE9NU3RyaW5nIGFjdGlvbiwgaW4gRE9NU3RyaW5nIHR5cGUsIGluIFtPcHRpb25h
bD1EZWZhdWx0SXNOdWxsU3RyaW5nLCBUcmFuc2Zlckxpc3Q9dHJhbnNmZXJMaXN0XSBTZXJpYWxp
emVkU2NyaXB0VmFsdWUgZGF0YSwgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gQXJy
YXkgdHJhbnNmZXJMaXN0KSwKICAgICAgIENvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uCiAgIF0g
SW50ZW50IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2NTU2ZTgwMGFhMjMyMTIzNTJiYWNlMGQzOGFm
ZDIyM2QzNDExZWI1Li44ZTJiZDk5ZjY4ZGQ5OGUwODYxMjBhNTQ5N2NiZGZhNGY0NDlhYzRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0yMjc4LDYgKzIyNzgsNyBAQAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEludDE2QXJyYXlDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhJbnQzMkFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW50OEFycmF5Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwCmluZGV4IGZkNGRh
MWZiMDA2Y2ZjZjY0MTg5ZjgyMzlkOGU2Y2IyMGYxYzZhZWEuLmE4ZGI0MDRiY2M4OGZjZjAyOWEx
MzBiMmI1ZWYwOWU5MmFkNmE4NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RpY3Rpb25hcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rp
b25hcnkuY3BwCkBAIC00MTIsNCArNDEyLDM5IEBAIGJvb2wgRGljdGlvbmFyeTo6Z2V0KGNvbnN0
IFN0cmluZyYga2V5LCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiYgdmFsCiAK
ICNlbmRpZgogCitib29sIERpY3Rpb25hcnk6OmdldChjb25zdCBTdHJpbmcmIGtleSwgRGljdGlv
bmFyeSYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsK
KyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAodjhWYWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgdmFsdWUgPSBEaWN0aW9uYXJ5
KHY4VmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBEaWN0aW9uYXJ5Ojpn
ZXRPd25Qcm9wZXJ0aWVzQXNTdHJpbmdIYXNoTWFwKFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mIGhhc2hNYXApIGNvbnN0Cit7CisgICAgaWYgKCFtX29wdGlvbnMtPklzT2JqZWN0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
ciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QobV9vcHRpb25zKTsKKyAgICB2ODo6TG9j
YWw8djg6OkFycmF5PiBwcm9wZXJ0aWVzID0gd3JhcHBlci0+R2V0T3duUHJvcGVydHlOYW1lcygp
OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLT5MZW5ndGgoKTsgKytp
KSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBrZXkgPSBwcm9wZXJ0aWVzLT5HZXQo
aSktPlRvU3RyaW5nKCk7CisgICAgICAgIGlmICghd3JhcHBlci0+SGFzKGtleSkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHdy
YXBwZXItPkdldChrZXkpOworICAgICAgICBTdHJpbmcgc3RyaW5nS2V5ID0gdjhWYWx1ZVRvV2Vi
Q29yZVN0cmluZyhrZXkpOworICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2OFZhbHVlVG9X
ZWJDb3JlU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgaWYgKCFzdHJpbmdLZXkuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgaGFzaE1hcC5zZXQoc3RyaW5nS2V5LCBzdHJpbmdWYWx1ZSk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaAppbmRleCAzMjE2NGI4Y2JiMjNhNTRhYmM1ODQ5
Nzk5NjI1OTZjNWZkMmZmODMxLi5hMWQ1NmVmYTdjNWM0MDRlOWY5YzhhMDIxODExODc2NWUwYjNi
Yzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5oCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1
ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCkBA
IC04MSw2ICs4Miw4IEBAIHB1YmxpYzoKICAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBSZWZQ
dHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiYpIGNvbnN0OwogI2VuZGlmCiAgICAgYm9v
bCBnZXQoY29uc3QgU3RyaW5nJiwgSGFzaFNldDxBdG9taWNTdHJpbmc+JikgY29uc3Q7CisgICAg
Ym9vbCBnZXQoY29uc3QgU3RyaW5nJiwgRGljdGlvbmFyeSYpIGNvbnN0OworICAgIGJvb2wgZ2V0
T3duUHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcChXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JikgY29uc3Q7CiAKICAgICBib29sIGdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBT
dHJpbmcmLCBTdHJpbmcmKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0VmFsdWUuY3BwCmluZGV4IGVjYzM2NzM2MmE4MzhiN2Y5ODkyOGVkMDU5OWQ2Mzc2OWYwOTdj
YjcuLjMxYmNkMjNlZTlhMzdkNzBmZGU1MTdiNDI5YTQ1ODBlMWQzZjEzNjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKQEAgLTMyLDkgKzMyLDExIEBACiAj
aW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKIAogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U2NvcGUuaCIKICNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
NCw2ICs0NiwxMyBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0VmFs
dWU6OnNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdAogICAgIHJldHVybiBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2OFZhbHVlKCkpOwogfQogCitQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0VmFsdWU6OnNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQXJy
YXkqIGFycmF5QnVmZmVycywgYm9vbCYgZGlkVGhyb3cpCit7CisgICAgU2NyaXB0U2NvcGUgc2Nv
cGUoc2NyaXB0U3RhdGUpOworICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZSh2OFZhbHVlKCksIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzLCBkaWRUaHJvdyk7Cit9CisK
IFNjcmlwdFZhbHVlIFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUpCiB7CiAgICAgU2NyaXB0U2NvcGUg
c2NvcGUoc2NyaXB0U3RhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVl
LmgKaW5kZXggZDQxMjkwMWZkYWQ5NTBlZTg2ZjhiOWRlZWRjYjE3ODJkMTVhMDExZS4uOGYxZDI4
ZTYwMTUxNDU5Nzg1NWJlOTA5NzQ1M2YyYTI4ZDRmOWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRWYWx1ZS5oCkBAIC0zNiwxNSArMzYsMjQgQEAKIAogI2luY2x1ZGUgPHY4
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWZuZGVmIE5ERUJVRwogI2luY2x1ZGUgIlY4
UHJveHkuaCIgIC8vIGZvciByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBnbG9iYWwgaGFuZGxlcy4K
ICNlbmRpZgogCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIEFycmF5QnVmZmVyOworfQorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc3BlY3RvclZhbHVlOworY2xhc3MgTWVzc2FnZVBv
cnQ7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Cit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8
TWVzc2FnZVBvcnQ+LCAxPiBNZXNzYWdlUG9ydEFycmF5OwordHlwZWRlZiBWZWN0b3I8UmVmUHRy
PFdURjo6QXJyYXlCdWZmZXI+LCAxPiBBcnJheUJ1ZmZlckFycmF5OwogCiBjbGFzcyBTY3JpcHRW
YWx1ZSB7CiBwdWJsaWM6CkBAIC0xMzEsNiArMTQwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUq
KTsKKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlw
dFN0YXRlKiwgTWVzc2FnZVBvcnRBcnJheSosIEFycmF5QnVmZmVyQXJyYXkqLCBib29sJik7CiAg
ICAgc3RhdGljIFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplKFNjcmlwdFN0YXRlKiwgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKik7CiAKICAgICBzdGF0aWMgU2NyaXB0VmFsdWUgdW5kZWZpbmVkKCkgeyBy
ZXR1cm4gU2NyaXB0VmFsdWUodjg6OlVuZGVmaW5lZCgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjgyMDhhMDk0NGEzN2JkMzk1MmQ2MDUzMzQ5MDBiMDQwZjQ0ZjgzMWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRD
b25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnRlbnQuaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJNZXNz
YWdlUG9ydC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCisjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCisjaW5jbHVkZSAi
VjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhJbnRlbnQuaCIKKyNpbmNsdWRlICJWOE1lc3Nh
Z2VQb3J0LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZl
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOElu
dGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorewor
ICAgIElOQ19TVEFUUygiRE9NLkludGVudC5Db25zdHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdz
LklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVj
dCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwgVjhQcm94eTo6
VHlwZUVycm9yKTsKKworICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25z
dHJ1Y3Rvck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9s
ZGVyKCk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworICAgIGlm
IChhcmdzLkxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBkaWN0aW9uYXJ5IGNv
bnN0cnVjdG9yLiBUaGlzIGJsb2NrIHdpbGwgcmV0dXJuIGlmIHRoZQorICAgICAgICAvLyBhcmd1
bWVudCBpc24ndCBhIHZhbGlkIERpY3Rpb25hcnkuCisgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhE
aWN0aW9uYXJ5LCBvcHRpb25zLCBhcmdzWzBdKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgICAgIFJlZlB0cjxJbnRlbnQ+IGltcGwgPSBJbnRlbnQ6OmNyZWF0ZShTY3JpcHRT
dGF0ZTo6Y3VycmVudCgpLCBvcHRpb25zLCBlYyk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01X
cmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBpbXBsLmdldCgpKTsKKyAgICAgICAgcmV0dXJu
IHRvVjgoaW1wbC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAgIH0KKworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxP
Q0soVjhQYXJhbWV0ZXI8PiwgYWN0aW9uLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAw
LCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBU
SU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHR5cGUsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFy
Z3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIE1lc3NhZ2VQb3J0QXJyYXkgbWVzc2Fn
ZVBvcnRBcnJheVRyYW5zZmVyTGlzdDsKKyAgICBBcnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVy
QXJyYXlUcmFuc2Zlckxpc3Q7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAzKSB7CisgICAgICAg
IGlmICghZXh0cmFjdFRyYW5zZmVyYWJsZXMoYXJnc1szXSwgbWVzc2FnZVBvcnRBcnJheVRyYW5z
ZmVyTGlzdCwgYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdCkpCisgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGV4dHJhY3QgdHJhbnNmZXJhYmxlcyIsIFY4UHJveHk6
OlR5cGVFcnJvcik7CisgICAgfQorICAgIGJvb2wgZGF0YURpZFRocm93ID0gZmFsc2U7CisgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKGFyZ3NbMl0sICZtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCAmYXJyYXlC
dWZmZXJBcnJheVRyYW5zZmVyTGlzdCwgZGF0YURpZFRocm93KTsKKyAgICBpZiAoZGF0YURpZFRo
cm93KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgUmVmUHRyPEludGVu
dD4gaW1wbCA9IEludGVudDo6Y3JlYXRlKGFjdGlvbiwgdHlwZSwgZGF0YSwgbWVzc2FnZVBvcnRB
cnJheVRyYW5zZmVyTGlzdCwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZWMpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9s
ZGVyKCk7CisKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIod3JhcHBlciwgJmluZm8s
IGltcGwuZ2V0KCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0
KGltcGwucmVsZWFzZSgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIp
KTsKKyAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCmluZGV4IDczYTYy
MTMyYWQ2MzM5YzU2ZDQ1NjNlNDI0ZGI2ZjU4ZGZkMDMzODIuLmQyZGEyZTlkZGZkNzAxZDlmNjJl
NjI0NjUxMWMyYjc3MzE0ZGQ4YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkludGVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkludGVudC5oCkBAIC02Myw2ICs2MywxNiBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBX
ZWJTdHJpbmcgYWN0aW9uKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgdHlw
ZSgpIGNvbnN0OwogICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGRhdGEoKSBjb25zdDsKKyAg
ICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBzZXJ2aWNlKCkgY29uc3Q7CisKKyAgICAvLyBSZXRy
aWV2ZSBhIGxpc3Qgb2YgdGhlIG5hbWVzIG9mIGV4dHJhIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0
aCB0aGUKKyAgICAvLyBpbnRlbnQuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJWZWN0b3I8V2ViU3Ry
aW5nPiBleHRyYXNOYW1lcygpIGNvbnN0OworCisgICAgLy8gUmV0cmlldmUgdGhlIHZhbHVlIG9m
IGFuIGV4dHJhIG1ldGFkYXRhIGVsZW1lbnQuIFRoZSBhcmd1bWVudCBzaG91bGQKKyAgICAvLyBi
ZSBvbmUgb2YgdGhlIG5hbWVzIHJldHJpZXZlZCB3aXRoIHxleHRyYXNOYW1lc3wuIFJldHVybnMg
YW4gZW1wdHkKKyAgICAvLyBzdHJpbmcgaWYgdGhlIG5hbWUgaXMgaW52YWxpZC4KKyAgICBXRUJL
SVRfRVhQT1JUIFdlYlN0cmluZyBleHRyYXNWYWx1ZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsK
IAogICAgIC8vIENhbGxlciB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHBvcnRzLgogICAgIFdFQktJ
VF9FWFBPUlQgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIG1lc3NhZ2VQb3J0Q2hhbm5lbHNS
ZWxlYXNlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJbnRlbnQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcApp
bmRleCA4YTdkNmFhYzU0M2JkOTk5OTliOGZhNzk4NDNhMzQwM2FlNTY3YzllLi41MDk5ZDczMTZk
Y2FhMGQ0MjdjNDM0MDNiYzA4Y2ZlODczZmQwYzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkludGVudC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJbnRlbnQuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCkBAIC0xMDMsNiArMTA0LDE1IEBAIFdlYlN0cmluZyBXZWJJbnRlbnQ6OmRh
dGEoKSBjb25zdAogI2VuZGlmCiB9CiAKK1dlYlN0cmluZyBXZWJJbnRlbnQ6OnNlcnZpY2UoKSBj
b25zdAoreworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICByZXR1cm4gbV9wcml2YXRlLT5z
ZXJ2aWNlKCk7CisjZWxzZQorICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyNlbmRpZgorfQorCiBX
ZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogV2ViSW50ZW50OjptZXNzYWdlUG9ydENoYW5uZWxz
UmVsZWFzZSgpIGNvbnN0CiB7CiAgICAgLy8gTm90ZTogc2VlIFBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsOjpwb3N0TWVzc2FnZVRvUmVtb3RlLgpAQCAtMTIwLDQgKzEzMCwzMCBAQCBXZWJNZXNz
YWdlUG9ydENoYW5uZWxBcnJheSogV2ViSW50ZW50OjptZXNzYWdlUG9ydENoYW5uZWxzUmVsZWFz
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHdlYkNoYW5uZWxzOwogfQogCitXZWJWZWN0b3I8V2ViU3Ry
aW5nPiBXZWJJbnRlbnQ6OmV4dHJhc05hbWVzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX0lO
VEVOVFMpCisgICAgc2l6ZV90IG51bUV4dHJhcyA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuc2l6ZSgp
OworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGtleVN0cmluZ3MobnVtRXh0cmFzKTsKKyAgICBX
VEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvcjo6S2V5cyBrZXlJdGVy
ID0gbV9wcml2YXRlLT5leHRyYXMoKS5iZWdpbigpLmtleXMoKTsKKyAgICBmb3IgKGludCBpID0g
MDsga2V5SXRlciAhPSBtX3ByaXZhdGUtPmV4dHJhcygpLmVuZCgpLmtleXMoKTsgKytrZXlJdGVy
LCArK2kpCisgICAgICAgIGtleVN0cmluZ3NbaV0gPSAqa2V5SXRlcjsKKyAgICByZXR1cm4ga2V5
U3RyaW5nczsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCk7CisjZW5k
aWYKK30KKworV2ViU3RyaW5nIFdlYkludGVudDo6ZXh0cmFzVmFsdWUoY29uc3QgV2ViU3RyaW5n
JiBuYW1lKSBjb25zdAoreworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICBXVEY6Okhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciB2YWwgPSBtX3ByaXZhdGUtPmV4dHJh
cygpLmZpbmQobmFtZSk7CisgICAgaWYgKHZhbCA9PSBtX3ByaXZhdGUtPmV4dHJhcygpLmVuZCgp
KQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgcmV0dXJuIHZhbC0+c2Vjb25kOwor
I2Vsc2UKKyAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJW
aWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5j
cHAKaW5kZXggOGI5M2Q0NTNlNWNkMzVkMjcxYTI2MWJmM2Y5NTA3NDc1YWMxODdjOS4uNjg0Mjkz
OWYyZmZjMjg4MjczYjE5ZWQzM2U5ODBlZjg0ZTFkOTViMCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApAQCAtMTMzNSw2ICsxMzM1LDEzIEBAIHZv
aWQgV2ViVmlld0hvc3Q6OmRpc3BhdGNoSW50ZW50KFdlYkZyYW1lKiBzb3VyY2UsIGNvbnN0IFdl
YkludGVudFJlcXVlc3QmIHJlcXVlCiAgICAgICAgICAgICAoKnBvcnRzKVtpXS0+ZGVzdHJveSgp
OwogICAgICAgICBkZWxldGUgcG9ydHM7CiAgICAgfQorICAgIGlmICghcmVxdWVzdC5pbnRlbnQo
KS5zZXJ2aWNlKCkuaXNFbXB0eSgpKQorICAgICAgICBwcmludGYoIkV4cGxpY2l0IGludGVudCBz
ZXJ2aWNlOiAlc1xuIiwgcmVxdWVzdC5pbnRlbnQoKS5zZXJ2aWNlKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gZXh0cmFzID0gcmVxdWVzdC5pbnRlbnQoKS5leHRy
YXNOYW1lcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXh0cmFzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHByaW50ZigiRXh0cmFzWyVzXSA9ICVzXG4iLCBleHRyYXNbaV0udXRmOCgp
LmRhdGEoKSwKKyAgICAgICAgICAgICAgIHJlcXVlc3QuaW50ZW50KCkuZXh0cmFzVmFsdWUoZXh0
cmFzW2ldKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9CiB9CiAKIC8vIFB1YmxpYyBmdW5jdGlvbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVj
dGVkLnR4dAppbmRleCA3NjZjZmQwYTRkMDQ3YjU3NjRjODgzM2I5MDRjYWRmNWM5YTRjNTY3Li5i
ZmYwYTY2YzQyZjdkMzc0M2UxZjAyMzZiYzQ2MWJiZjQyNDg0MTM0IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0CkBAIC0xLDYg
KzEsNiBAQAogUEFTUyBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eSBpcyBkZWZpbmVkLgog
UEFTUyB2YXIgaW50ZW50ID0gbmV3IFdlYktpdEludGVudCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdhJykg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCitQQVNTIG5l
dyBXZWJLaXRJbnRlbnQoJ2EnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTIuCiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJycsJycpIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KIFBBU1MgbmV3IFdl
YktpdEludGVudCgnJywnYicsJ2MnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6
IERPTSBFeGNlcHRpb24gMTIuCiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJycsJ2MnKSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sIGIvTGF5b3V0
VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAppbmRleCAxZGUxN2EwOTZlMWU4
MTVmZmJiYWEzOGYxNzNhZDc1ZDVlMTM1NWQzLi4yNjJjYTBkYTBmYzE0MTYzZTcxMGE4ODM2OWQ5
ZTEzNzYzMzA0ZmMzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRl
bnRzLWFwaS5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBp
Lmh0bWwKQEAgLTgsNyArOCw3IEBACiAgICAgICBzaG91bGRCZURlZmluZWQoIm5hdmlnYXRvci53
ZWJraXRTdGFydEFjdGl2aXR5Iik7CiAgICAgICAKICAgICAgIHNob3VsZFRocm93KCJ2YXIgaW50
ZW50ID0gbmV3IFdlYktpdEludGVudCgpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1l
bnRzJyIpOzsKLSAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KCdhJykiLCAiJ1R5
cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMnIik7CisgICAgICBzaG91bGRUaHJvdygibmV3
IFdlYktpdEludGVudCgnYScpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
MiciKTsKICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KCcnLCcnLCcnKSIsICIn
RXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJv
dygibmV3IFdlYktpdEludGVudCgnJywnYicsJ2MnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgn
JywnJywnYycpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVj
dG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2Jq
LWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Njk0ZGRhMDAzNWRjZmYzMGMz
OGY3MTZjZDQ5YmViY2FkNjA0NWVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
aW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMjEgQEAKK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlvbj1hY3Rpb24xIHR5cGU9dGV4dC9w
bGFpbgorUmVjZWl2ZWQgV2ViIEludGVudDogYWN0aW9uPWFjdGlvbjEgdHlwZT10ZXh0L3BsYWlu
K2V4cGxpY2l0CitFeHBsaWNpdCBpbnRlbnQgc2VydmljZTogZXhwbGljaXQKK1JlY2VpdmVkIFdl
YiBJbnRlbnQ6IGFjdGlvbj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbitleHRyYXMKK0V4dHJhc1th
XSA9IGIKK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlvbj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFp
bitwb3J0CitIYXZlIDEgcG9ydHMKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHt9KSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRl
bnQoeydhJzonYid9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNl
cHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidiJ30pIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdl
YktpdEludGVudCh7J3R5cGUnOidiJ30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VS
UjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2En
LCd0eXBlJzonYicsJ3NlcnZpY2UnOicnfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhf
RVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzon
YScsJ3R5cGUnOidiJywnZGF0YSc6d2luZG93fSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBEQVRB
X0NMT05FX0VSUjogRE9NIEV4Y2VwdGlvbiAyNS4KKyogc2VudCBvYmplY3QgaW50ZW50CisqIHNl
bnQgZXhwbGljaXQgaW50ZW50CisqIHNlbnQgaW50ZW50IHdpdGggZXh0cmFzCisqIHNlbnQgaW50
ZW50IHdpdGggcG9ydAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1p
bnRlbnRzLW9iai1jb25zdHJ1Y3Rvci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWIt
aW50ZW50cy1vYmotY29uc3RydWN0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzkxMDdjYWQzNjMwNzU3
NWU5NWY0YmEwZjI1ZjM1NDI3ZmI1MDRjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3IuaHRtbApAQCAtMCwwICsxLDU1
IEBACis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3dlYi1pbnRlbnRzLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICBm
dW5jdGlvbiBidXR0b25DbGlja2VkKCkgeworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktp
dEludGVudCh7fSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwor
ICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J2EnOidiJ30pIiwgIidFcnJv
cjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3co
Im5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidiJ30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjog
RE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRl
bnQoeyd0eXBlJzonYid9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIn
Iik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScs
J3R5cGUnOidiJywnc2VydmljZSc6Jyd9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNl
cHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0
aW9uJzonYScsJ3R5cGUnOidiJywnZGF0YSc6d2luZG93fSkiLCAiJ0Vycm9yOiBEQVRBX0NMT05F
X0VSUjogRE9NIEV4Y2VwdGlvbiAyNSciKTsKKworICAgICAgICB2YXIgc2ltcGxlSW50ZW50ID0g
bmV3IFdlYktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisgICAg
ICAgICAgICAgInR5cGUiOiJ0ZXh0L3BsYWluIiwKKyAgICAgICAgICAgICAiZGF0YSI6Im1lc3Nh
Z2UifSk7CisgICAgICAgIG5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5KHNpbXBsZUludGVu
dCk7CisgICAgICAgIGRlYnVnKCIqIHNlbnQgb2JqZWN0IGludGVudCIpOworCisgICAgICAgIHZh
ciBleHBsaWNpdEludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAgICAgICAgICB7ImFjdGlv
biI6ImFjdGlvbjEiLAorICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9wbGFpbitleHBsaWNpdCIs
CisgICAgICAgICAgICAgImRhdGEiOiJtZXNzYWdlIiwKKyAgICAgICAgICAgICAic2VydmljZSIg
OiAiZXhwbGljaXQifSk7CisgICAgICAgIG5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5KGV4
cGxpY2l0SW50ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBleHBsaWNpdCBpbnRlbnQiKTsK
KworICAgICAgICB2YXIgZXh0cmFzSW50ZW50ID0gbmV3IFdlYktpdEludGVudCgKKyAgICAgICAg
ICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisgICAgICAgICAgICAgInR5cGUiOiJ0ZXh0L3BsYWlu
K2V4dHJhcyIsCisgICAgICAgICAgICAgImRhdGEiOiJtZXNzYWdlIiwKKyAgICAgICAgICAgICAi
ZXh0cmFzIjp7ImEiOiJiIn19KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZp
dHkoZXh0cmFzSW50ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBpbnRlbnQgd2l0aCBleHRy
YXMiKTsKKworICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOworICAg
ICAgICBjaGFubmVsLnBvcnQyLm9uTWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgIGRl
YnVnKCIqIGdvdCBtZXNzYWdlIik7CisgICAgICAgIH07CisgICAgICAgIHZhciBwb3J0SW50ZW50
ID0gbmV3IFdlYktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisg
ICAgICAgICAgICAgInR5cGUiOiJ0ZXh0L3BsYWluK3BvcnQiLAorICAgICAgICAgICAgICJkYXRh
IjpjaGFubmVsLnBvcnQxLAorICAgICAgICAgICAgICJ0cmFuc2ZlciI6W2NoYW5uZWwucG9ydDFd
fSk7CisgICAgICAgIG5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5KHBvcnRJbnRlbnQpOwor
ICAgICAgICBkZWJ1ZygiKiBzZW50IGludGVudCB3aXRoIHBvcnQiKTsKKyAgICAgIH0KKyAgICA8
L3NjcmlwdD4KKyAgPC9oZWFkPgorPGJvZHkgb25sb2FkPSJzaW11bGF0ZUJ1dHRvblByZXNzKCki
PgorPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9ImJ1dHRvbiIgdmFsdWU9IlN0YXJ0IFdlYiBJbnRl
bnQiIG9ubW91c2V1cD0iYnV0dG9uQ2xpY2tlZCgpIj4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138629</attachid>
            <date>2012-04-24 13:27:35 -0700</date>
            <delta_ts>2012-04-25 08:24:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120424132734.patch</filename>
            <type>text/plain</type>
            <size>33958</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0OTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjBmODYxNzdiNWM3N2Qy
NzIwNDMyODI0ZTVjNjljM2RlMjY2ODg1OS4uYjAwNWQxNjkzMjU5MzY1MmVjYTkyNDI4MTlmM2Vj
Yjg1MTU0MWU4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGhvcGVmdWxseSBiZSB0
ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2luZyB0aGlzCisgICAgICAgIGNv
bnN0cnVjdG9yLCB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4KKyAgICAgICAgQWRkZWQgbGF5
b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAgICAgIHdlYmludGVudHMvd2Vi
LWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMjMgIE1pY2hhxYIgUGFr
dcWCYSB2ZWwgUnV0a2EgIDxtLnBha3VsYUBzYW1zdW5nLmNvbT4KICAgICAgICAgW0VGTF1bV0sy
XSBGaXggYnVpbGQgYnJlYWsgd2hlbiBub24tY3Jvc3MgcGxhdGZvcm0gQ09OVEVYVF9NRU5VUyBh
cmUgZW5hYmxlZC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg0MTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwCmluZGV4
IDA1M2Q0MjljZmExYzk3MjNmOTYzNmMzNzlmM2EzOTE4NWRkNDk0YmUuLmEzZjU3NzIwNWI0MTdj
MmQ3MTk0YTU0Zjg5Y2Q5MmVlZjNmMzYzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9JbnRlbnQuY3BwCkBAIC0zMywxMSArMzMsMTIgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRl
LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYg
YWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYg
cG9ydHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChhY3Rpb24uaXNFbXB0eSgpKSB7
CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKQEAgLTQ4LDM5ICs0OSw3MSBAQCBQYXNzUmVmUHRy
PEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgUGFzcwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEpKTsKKyAgICBPd25QdHI8TWVzc2Fn
ZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9y
dHMoJnBvcnRzLCBlYyk7CisKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJh
czsKKyAgICBLVVJMIHNlcnZpY2VVcmw7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVu
dChhY3Rpb24sIHR5cGUsIGRhdGEsIGNoYW5uZWxzLnJlbGVhc2UoKSwgZXh0cmFzLCBzZXJ2aWNl
VXJsKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYgcG9ydHMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZSwgY29uc3QgRGljdGlvbmFyeSYgcGFyYW1ldGVycywgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICBTdHJpbmcgYWN0aW9uOwor
ICAgIGlmICghcGFyYW1ldGVycy5nZXQoImFjdGlvbiIsIGFjdGlvbikgfHwgYWN0aW9uLmlzRW1w
dHkoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLSAgICBpZiAodHlwZS5pc0VtcHR5KCkpIHsKKworICAgIFN0cmluZyB0eXBlOworICAgIGlm
ICghcGFyYW1ldGVycy5nZXQoInR5cGUiLCB0eXBlKSB8fCB0eXBlLmlzRW1wdHkoKSkgewogICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIE93
blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlz
ZW50YW5nbGVQb3J0cygmcG9ydHMsIGVjKTsKKyAgICBTdHJpbmcgc2VydmljZTsKKyAgICBLVVJM
IHNlcnZpY2VVcmw7CisgICAgcGFyYW1ldGVycy5nZXQoInNlcnZpY2UiLCBzZXJ2aWNlKTsKKyAg
ICBpZiAoIXNlcnZpY2UuaXNFbXB0eSgpKSB7CisgICAgICBzZXJ2aWNlVXJsID0gS1VSTChLVVJM
KCksIHNlcnZpY2UpOworICAgICAgaWYgKCFzZXJ2aWNlVXJsLmlzVmFsaWQoKSkgeworICAgICAg
ICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9
CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEsIGNo
YW5uZWxzLnJlbGVhc2UoKSkpOwotfQorICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9ydHM7CisgICAg
T3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVsczsKKyAgICBpZiAocGFyYW1l
dGVycy5nZXQoInRyYW5zZmVyIiwgcG9ydHMpKQorICAgICAgICBjaGFubmVscyA9IE1lc3NhZ2VQ
b3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywgZWMpOworCisgICAgU2NyaXB0VmFsdWUgZGF0
YVZhbHVlOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWREYXRh
OworICAgIGlmIChwYXJhbWV0ZXJzLmdldCgiZGF0YSIsIGRhdGFWYWx1ZSkpIHsKKyAgICAgICAg
Ym9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAgICAgICBzZXJpYWxpemVkRGF0YSA9IGRhdGFWYWx1
ZS5zZXJpYWxpemUoc2NyaXB0U3RhdGUsICZwb3J0cywgMCwgZGlkVGhyb3cpOworICAgICAgICBp
ZiAoZGlkVGhyb3cpIHsKKyAgICAgICAgICAgIGVjID0gREFUQV9DTE9ORV9FUlI7CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KIAotSW50ZW50OjpJbnRlbnQoY29uc3Qg
U3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGRhdGEpCi0gICAgOiBtX2FjdGlvbihhY3Rpb24pCi0gICAgLCBtX3R5cGUo
dHlwZSkKLXsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgbV9kYXRhID0gZGF0YTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCk7Cisg
ICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBleHRyYXM7CisgICAgRGljdGlvbmFyeSBl
eHRyYXNEaWN0aW9uYXJ5OworICAgIGlmIChwYXJhbWV0ZXJzLmdldCgiZXh0cmFzIiwgZXh0cmFz
RGljdGlvbmFyeSkpCisgICAgICAgIGV4dHJhc0RpY3Rpb25hcnkuZ2V0T3duUHJvcGVydGllc0Fz
U3RyaW5nSGFzaE1hcChleHRyYXMpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQo
YWN0aW9uLCB0eXBlLCBzZXJpYWxpemVkRGF0YS5yZWxlYXNlKCksIGNoYW5uZWxzLnJlbGVhc2Uo
KSwgZXh0cmFzLCBzZXJ2aWNlVXJsKSk7CiB9CiAKLUludGVudDo6SW50ZW50KGNvbnN0IFN0cmlu
ZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cykK
K0ludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUs
CisgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwg
UGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMsCisgICAgICAgICAgICAg
ICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMsIGNvbnN0IEtVUkwm
IHNlcnZpY2UpCiAgICAgOiBtX2FjdGlvbihhY3Rpb24pCiAgICAgLCBtX3R5cGUodHlwZSkKICAg
ICAsIG1fcG9ydHMocG9ydHMpCisgICAgLCBtX3NlcnZpY2Uoc2VydmljZSkKKyAgICAsIG1fZXh0
cmFzKGV4dHJhcykKIHsKICAgICBpZiAoZGF0YSkKICAgICAgICAgbV9kYXRhID0gZGF0YTsKQEAg
LTk4LDYgKzEzMSwxMSBAQCBjb25zdCBTdHJpbmcmIEludGVudDo6dHlwZSgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fdHlwZTsKIH0KIAorY29uc3QgS1VSTCYgSW50ZW50OjpzZXJ2aWNlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zZXJ2aWNlOworfQorCiBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIElu
dGVudDo6ZGF0YSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS5nZXQoKTsKQEAgLTEwOCw2
ICsxNDYsMTEgQEAgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIEludGVudDo6bWVzc2FnZVBvcnRz
KCkgY29uc3QKICAgICByZXR1cm4gbV9wb3J0cy5nZXQoKTsKIH0KIAorY29uc3QgV1RGOjpIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiYgSW50ZW50OjpleHRyYXMoKSBjb25zdAoreworICAgIHJldHVy
biBtX2V4dHJhczsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCmlu
ZGV4IDMzZWY2OWUwNDQxMDU5NmUyNDE1MzM0ODVlZmJjOWY1YzRlNmI2ZDQuLjQ5NzdjODkyYWNi
NzhjZTNjMTkyNGVmOTI3NzNlZTUwZWU2YTI1OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShXRUJfSU5URU5U
UykKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CkBAIC00MSwzMiArNDIsMzcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTY3Jp
cHRTdGF0ZTsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogdHlwZWRlZiBpbnQgRXhj
ZXB0aW9uQ29kZTsKIAogY2xhc3MgSW50ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW50PiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnRlbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRB
cnJheSYgcG9ydHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRl
bnQ+IGNyZWF0ZShTY3JpcHRTdGF0ZSosIGNvbnN0IERpY3Rpb25hcnkmLCBFeGNlcHRpb25Db2Rl
Jik7CiAKICAgICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OwogICAgIGNvbnN0IFN0cmlu
ZyYgdHlwZSgpIGNvbnN0OwogICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0
OwogCi0gICAgaW50IGlkZW50aWZpZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldElkZW50aWZpZXIo
aW50KTsKLQogICAgIE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBtZXNzYWdlUG9ydHMoKSBjb25z
dDsKKyAgICBjb25zdCBLVVJMJiBzZXJ2aWNlKCkgY29uc3Q7CisgICAgY29uc3QgV1RGOjpIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiYgZXh0cmFzKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBJ
bnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAgICAg
ICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzLAorICAgICAgICAgICBjb25zdCBXVEY6Okhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMsIGNvbnN0IEtVUkwmIHNlcnZpY2UpOwogCiBwcml2
YXRlOgotICAgIEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBl
LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSk7Ci0gICAgSW50ZW50KGNv
bnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5
PiBwb3J0cyk7CiAKICAgICBTdHJpbmcgbV9hY3Rpb247CiAgICAgU3RyaW5nIG1fdHlwZTsKICAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX2RhdGE7CiAgICAgT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbEFycmF5PiBtX3BvcnRzOworICAgIEtVUkwgbV9zZXJ2aWNlOworICAgIFdU
Rjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9leHRyYXM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50
ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCmluZGV4
IGVmMDgyNTA3MzRmZmM3OWIxOTQ5ODBlYzgyNDNlZWIzNDQ4YWM1MmUuLjkyNjU3YjRlNmNlNjBm
MDc5OTUyNDY0MDE2MzY1Yjg3MDkxNDk1ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9JbnRlbnQuaWRsCkBAIC0yNiw2ICsyNiw3IEBACiBtb2R1bGUgd2luZG93IHsKICAgaW50
ZXJmYWNlIFsKICAgICAgIENvbmRpdGlvbmFsPVdFQl9JTlRFTlRTLAorICAgICAgQ3VzdG9tQ29u
c3RydWN0b3IsCiAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgYWN0aW9uLCBpbiBET01T
dHJpbmcgdHlwZSwgaW4gW09wdGlvbmFsPURlZmF1bHRJc051bGxTdHJpbmcsIFRyYW5zZmVyTGlz
dD10cmFuc2Zlckxpc3RdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRhLCBpbiBbT3B0aW9uYWw9
RGVmYXVsdElzVW5kZWZpbmVkXSBBcnJheSB0cmFuc2Zlckxpc3QpLAogICAgICAgQ29uc3RydWN0
b3JSYWlzZXNFeGNlcHRpb24KICAgXSBJbnRlbnQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGMzM2Fj
YWU5MzBhNDAxYjY2ZjM2NjRmYzFlZWQ2YzA3NDYwMWJiZDIuLmJhZTFhMGM1MzIwNDk5MGI3NDIz
YWY4MGZiNmQ3NWU0MWVhZWFmMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIyODAsNiArMjI4MCw3
IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50MTZBcnJheUN1c3RvbS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDMyQXJyYXlDdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQ4QXJyYXlDdXN0b20u
Y3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rv
ci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEphdmFTY3JpcHRDYWxs
RnJhbWVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhMb2Nh
dGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3Nh
Z2VDaGFubmVsQ29uc3RydWN0b3IuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGlj
dGlvbmFyeS5jcHAKaW5kZXggZmQ0ZGExZmIwMDZjZmNmNjQxODlmODIzOWQ4ZTZjYjIwZjFjNmFl
YS4uMGM0YjA0MjI1N2U5YjFkYzkwYjM1NDY3YjIzOGIyYTE3MjFhZGJlZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAKQEAgLTQxMiw0ICs0MTIsNDYgQEAgYm9v
bCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIFJlZlB0cjxTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdExpc3Q+JiB2YWwKIAogI2VuZGlmCiAKK2Jvb2wgRGljdGlvbmFyeTo6Z2V0KGNv
bnN0IFN0cmluZyYga2V5LCBEaWN0aW9uYXJ5JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2OFZhbHVlLT5Jc09iamVjdCgpKQorICAg
ICAgICB2YWx1ZSA9IERpY3Rpb25hcnkodjhWYWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworCitib29sIERpY3Rpb25hcnk6OmdldE93blByb3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAoV1RG
OjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaGFzaE1hcCkgY29uc3QKK3sKKyAgICBpZiAoaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9vcHRp
b25zLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IG9wdGlvbnMgPSBtX29wdGlvbnMtPlRvT2JqZWN0KCk7CisgICAgaWYgKG9w
dGlvbnMuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6TG9jYWw8
djg6OkFycmF5PiBwcm9wZXJ0aWVzID0gb3B0aW9ucy0+R2V0T3duUHJvcGVydHlOYW1lcygpOwor
ICAgIGlmIChwcm9wZXJ0aWVzLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHByb3BlcnRpZXMtPkxlbmd0aCgpOyArK2kpIHsKKyAg
ICAgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IGtleSA9IHByb3BlcnRpZXMtPkdldChpKS0+VG9T
dHJpbmcoKTsKKyAgICAgICAgaWYgKCFvcHRpb25zLT5IYXMoa2V5KSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gb3B0aW9ucy0+
R2V0KGtleSk7CisgICAgICAgIFN0cmluZyBzdHJpbmdLZXkgPSB2OFZhbHVlVG9XZWJDb3JlU3Ry
aW5nKGtleSk7CisgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHY4VmFsdWVUb1dlYkNvcmVT
dHJpbmcodmFsdWUpOworICAgICAgICBpZiAoIXN0cmluZ0tleS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBoYXNoTWFwLnNldChzdHJpbmdLZXksIHN0cmluZ1ZhbHVlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRGljdGlvbmFyeS5oCmluZGV4IGU1ODg5MGU1OWZiMjUyMTY1MjA3MWNmODVmNjAx
NTkxMzAxOTg3MGEuLmM0YzMzYjFiYjIwOGU5NjQwZGZmYjg0MDZkODkzYjQxMjgzMjc5ZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAj
aW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKQEAgLTgzLDYg
Kzg0LDggQEAgcHVibGljOgogICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFJlZlB0cjxTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+JikgY29uc3Q7CiAjZW5kaWYKICAgICBib29sIGdldChj
b25zdCBTdHJpbmcmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mKSBjb25zdDsKKyAgICBib29sIGdl
dChjb25zdCBTdHJpbmcmLCBEaWN0aW9uYXJ5JikgY29uc3Q7CisgICAgYm9vbCBnZXRPd25Qcm9w
ZXJ0aWVzQXNTdHJpbmdIYXNoTWFwKFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKSBjb25z
dDsKIAogICAgIGJvb2wgZ2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IFN0cmluZyYs
IFN0cmluZyYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1
ZS5jcHAKaW5kZXggZWNjMzY3MzYyYTgzOGI3Zjk4OTI4ZWQwNTk5ZDYzNzY5ZjA5N2NiNy4uMzFi
Y2QyM2VlOWEzN2Q3MGZkZTUxN2I0MjlhNDU4MGUxZDNmMTM2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcApAQCAtMzIsOSArMzIsMTEgQEAKICNpbmNsdWRl
ICJTY3JpcHRWYWx1ZS5oIgogCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVk
ZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJTY3JpcHRTY29wZS5oIgogI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUg
PHd0Zi9BcnJheUJ1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDYgKzQ2
LDEzIEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTY3JpcHRWYWx1ZTo6c2Vy
aWFsaXplKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0CiAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKHY4VmFsdWUoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBTY3JpcHRWYWx1ZTo6c2VyaWFsaXplKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJBcnJheSogYXJy
YXlCdWZmZXJzLCBib29sJiBkaWRUaHJvdykKK3sKKyAgICBTY3JpcHRTY29wZSBzY29wZShzY3Jp
cHRTdGF0ZSk7CisgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4VmFs
dWUoKSwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlcnMsIGRpZFRocm93KTsKK30KKwogU2NyaXB0
VmFsdWUgU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwg
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKIHsKICAgICBTY3JpcHRTY29wZSBzY29wZShz
Y3JpcHRTdGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaAppbmRl
eCBkNDEyOTAxZmRhZDk1MGVlODZmOGI5ZGVlZGNiMTc4MmQxNWEwMTFlLi44ZjFkMjhlNjAxNTE0
NTk3ODU1YmU5MDk3NDUzZjJhMjhkNGY5ZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdFZhbHVlLmgKQEAgLTM2LDE1ICszNiwyNCBAQAogCiAjaW5jbHVkZSA8djguaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSAiVjhQcm94eS5o
IiAgLy8gZm9yIHJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVyIGdsb2JhbCBoYW5kbGVzLgogI2VuZGlm
CiAKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgQXJyYXlCdWZmZXI7Cit9CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgSW5zcGVjdG9yVmFsdWU7CitjbGFzcyBNZXNzYWdlUG9ydDsKIGNs
YXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxNZXNzYWdl
UG9ydD4sIDE+IE1lc3NhZ2VQb3J0QXJyYXk7Cit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8V1RGOjpB
cnJheUJ1ZmZlcj4sIDE+IEFycmF5QnVmZmVyQXJyYXk7CiAKIGNsYXNzIFNjcmlwdFZhbHVlIHsK
IHB1YmxpYzoKQEAgLTEzMSw2ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSopOworICAg
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUq
LCBNZXNzYWdlUG9ydEFycmF5KiwgQXJyYXlCdWZmZXJBcnJheSosIGJvb2wmKTsKICAgICBzdGF0
aWMgU2NyaXB0VmFsdWUgZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBTZXJpYWxpemVkU2NyaXB0
VmFsdWUqKTsKIAogICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSB1bmRlZmluZWQoKSB7IHJldHVybiBT
Y3JpcHRWYWx1ZSh2ODo6VW5kZWZpbmVkKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGI1ODRjY2M5YTI2ZDI0ZjdhNGJjNzBjM2VkNTBhYjQwMzc3NTFhNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVj
dG9yLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVu
dC5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0
LmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKKyNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKKyNpbmNsdWRlICJWOERPTVdy
YXBwZXIuaCIKKyNpbmNsdWRlICJWOEludGVudC5oIgorI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQu
aCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZW50Ojpj
b25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5D
X1NUQVRTKCJET00uSW50ZW50LkNvbnN0cnVjdG9yIik7CisKKyAgICBpZiAoIWFyZ3MuSXNDb25z
dHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0
cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBlRXJy
b3IpOworCisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9y
TW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsK
KyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJO
b3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAvLyBVc2UgdGhlIGRpY3Rpb25hcnkgY29uc3RydWN0
b3IuIFRoaXMgYmxvY2sgd2lsbCByZXR1cm4gaWYgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50IGlz
bid0IGEgdmFsaWQgRGljdGlvbmFyeS4KKyAgICAgICAgRVhDRVBUSU9OX0JMT0NLKERpY3Rpb25h
cnksIG9wdGlvbnMsIGFyZ3NbMF0pOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICAgICAgUmVmUHRyPEludGVudD4gaW1wbCA9IEludGVudDo6Y3JlYXRlKFNjcmlwdFN0YXRlOjpj
dXJyZW50KCksIG9wdGlvbnMsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZWMpOworCisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBl
cihhcmdzLkhvbGRlcigpLCAmaW5mbywgaW1wbC5nZXQoKSk7CisgICAgICAgIFY4RE9NV3JhcHBl
cjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGltcGwucmVsZWFzZSgpLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVy
KCk7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU1RSSU5HX1RPX1Y4
UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBhY3Rpb24sIE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIFNUUklO
R19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8PiwgdHlwZSwgTUFZ
QkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CisgICAg
TWVzc2FnZVBvcnRBcnJheSBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0OworICAgIEFycmF5
QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdDsKKyAgICBpZiAoYXJncy5M
ZW5ndGgoKSA+IDMpIHsKKyAgICAgICAgaWYgKCFleHRyYWN0VHJhbnNmZXJhYmxlcyhhcmdzWzNd
LCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCBhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJM
aXN0KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgZXh0cmFjdCB0
cmFuc2ZlcmFibGVzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB9CisgICAgYm9vbCBkYXRh
RGlkVGhyb3cgPSBmYWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRh
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1syXSwgJm1lc3NhZ2VQb3J0QXJy
YXlUcmFuc2Zlckxpc3QsICZhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0LCBkYXRhRGlkVGhy
b3cpOworICAgIGlmIChkYXRhRGlkVGhyb3cpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKERB
VEFfQ0xPTkVfRVJSKTsKKworICAgIFJlZlB0cjxJbnRlbnQ+IGltcGwgPSBJbnRlbnQ6OmNyZWF0
ZShhY3Rpb24sIHR5cGUsIGRhdGEsIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsIGVjKTsK
KyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKworICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgVjhET01XcmFw
cGVyOjpzZXRET01XcmFwcGVyKHdyYXBwZXIsICZpbmZvLCBpbXBsLmdldCgpKTsKKyAgICBWOERP
TVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLnJlbGVhc2UoKSwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKSk7CisgICAgcmV0dXJuIGFyZ3MuSG9s
ZGVyKCk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJbnRlbnQuaAppbmRleCA3M2E2MjEzMmFkNjMzOWM1NmQ0NTYzZTQyNGRi
NmY1OGRmZDAzMzgyLi5jYzA4MGFkOTljNTQ5ZmUyZjI1MjIyODUwYTdiMDhjNjhmN2QwZDQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaApAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgogI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlByaXZhdGVQdHIuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKKyNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBJbnRlbnQ7IH0KQEAgLTYzLDYgKzY0LDE2IEBA
IHB1YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBhY3Rpb24oKSBjb25zdDsKICAg
ICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyB0eXBlKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9S
VCBXZWJTdHJpbmcgZGF0YSgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgV2ViVVJMIHNlcnZp
Y2UoKSBjb25zdDsKKworICAgIC8vIFJldHJpZXZlIGEgbGlzdCBvZiB0aGUgbmFtZXMgb2YgZXh0
cmEgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgIC8vIGludGVudC4KKyAgICBXRUJL
SVRfRVhQT1JUIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGV4dHJhc05hbWVzKCkgY29uc3Q7CisKKyAg
ICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYW4gZXh0cmEgbWV0YWRhdGEgZWxlbWVudC4gVGhl
IGFyZ3VtZW50IHNob3VsZAorICAgIC8vIGJlIG9uZSBvZiB0aGUgbmFtZXMgcmV0cmlldmVkIHdp
dGggfGV4dHJhc05hbWVzfC4gUmV0dXJucyBhbiBlbXB0eQorICAgIC8vIHN0cmluZyBpZiB0aGUg
bmFtZSBpcyBpbnZhbGlkLgorICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGV4dHJhc1ZhbHVl
KGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogCiAgICAgLy8gQ2FsbGVyIHRha2VzIG93bmVyc2hp
cCBvZiB0aGUgcG9ydHMuCiAgICAgV0VCS0lUX0VYUE9SVCBXZWJNZXNzYWdlUG9ydENoYW5uZWxB
cnJheSogbWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCmluZGV4IDhhN2Q2YWFjNTQzYmQ5OTk5OWI4ZmE3OTg0
M2EzNDAzYWU1NjdjOWUuLjgzZTgzNjFkY2IyMjRhYzdmNmM5NDVlMDdjNDE2NTQwZDIxY2Q5ZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkludGVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTEwMyw2ICsxMDQsMTUg
QEAgV2ViU3RyaW5nIFdlYkludGVudDo6ZGF0YSgpIGNvbnN0CiAjZW5kaWYKIH0KIAorV2ViVVJM
IFdlYkludGVudDo6c2VydmljZSgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQor
ICAgIHJldHVybiBXZWJVUkwobV9wcml2YXRlLT5zZXJ2aWNlKCkpOworI2Vsc2UKKyAgICByZXR1
cm4gV2ViVVJMKCk7CisjZW5kaWYKK30KKwogV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdl
YkludGVudDo6bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogewogICAgIC8vIE5v
dGU6IHNlZSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZS4K
QEAgLTEyMCw0ICsxMzAsMzAgQEAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdlYkludGVu
dDo6bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogICAgIHJldHVybiB3ZWJDaGFu
bmVsczsKIH0KIAorV2ViVmVjdG9yPFdlYlN0cmluZz4gV2ViSW50ZW50OjpleHRyYXNOYW1lcygp
IGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIHNpemVfdCBudW1FeHRyYXMg
PSBtX3ByaXZhdGUtPmV4dHJhcygpLnNpemUoKTsKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiBr
ZXlTdHJpbmdzKG51bUV4dHJhcyk7CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3I6OktleXMga2V5SXRlciA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuYmVnaW4o
KS5rZXlzKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGtleUl0ZXIgIT0gbV9wcml2YXRlLT5leHRy
YXMoKS5lbmQoKS5rZXlzKCk7ICsra2V5SXRlciwgKytpKQorICAgICAgICBrZXlTdHJpbmdzW2ld
ID0gKmtleUl0ZXI7CisgICAgcmV0dXJuIGtleVN0cmluZ3M7CisjZWxzZQorICAgIHJldHVybiBX
ZWJWZWN0b3I8V2ViU3RyaW5nPigpOworI2VuZGlmCit9CisKK1dlYlN0cmluZyBXZWJJbnRlbnQ6
OmV4dHJhc1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyNpZiBFTkFCTEUo
V0VCX0lOVEVOVFMpCisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgdmFsID0gbV9wcml2YXRlLT5leHRyYXMoKS5maW5kKG5hbWUpOworICAgIGlmICh2YWwg
PT0gbV9wcml2YXRlLT5leHRyYXMoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygp
OworICAgIHJldHVybiB2YWwtPnNlY29uZDsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlN0cmluZygp
OworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IDZmZjk1YzU2MjQxNzA4YmNhMzMx
Y2IwYzJjMmRjYTlkN2RlODBkMWIuLmQ4NDViN2VjMDUwN2Y5NGNkMGY3Mzc0ZWE2NTZlMjhkNGY1
YWIyOTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdI
b3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5j
cHAKQEAgLTEzMzUsNiArMTMzNSwxMyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpkaXNwYXRjaEludGVu
dChXZWJGcmFtZSogc291cmNlLCBjb25zdCBXZWJJbnRlbnRSZXF1ZXN0JiByZXF1ZQogICAgICAg
ICAgICAgKCpwb3J0cylbaV0tPmRlc3Ryb3koKTsKICAgICAgICAgZGVsZXRlIHBvcnRzOwogICAg
IH0KKyAgICBpZiAoIXJlcXVlc3QuaW50ZW50KCkuc2VydmljZSgpLmlzRW1wdHkoKSkKKyAgICAg
ICAgcHJpbnRmKCJFeHBsaWNpdCBpbnRlbnQgc2VydmljZTogJXNcbiIsIHJlcXVlc3QuaW50ZW50
KCkuc2VydmljZSgpLnNwZWMoKS5kYXRhKCkpOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGV4
dHJhcyA9IHJlcXVlc3QuaW50ZW50KCkuZXh0cmFzTmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGV4dHJhcy5zaXplKCk7ICsraSkgeworICAgICAgICBwcmludGYoIkV4dHJhc1sl
c10gPSAlc1xuIiwgZXh0cmFzW2ldLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICByZXF1
ZXN0LmludGVudCgpLmV4dHJhc1ZhbHVlKGV4dHJhc1tpXSkudXRmOCgpLmRhdGEoKSk7CisgICAg
fQogfQogCiAvLyBQdWJsaWMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJp
bnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKaW5kZXggNzY2Y2ZkMGE0ZDA0N2I1
NzY0Yzg4MzNiOTA0Y2FkZjVjOWE0YzU2Ny4uYmZmMGE2NmM0MmY3ZDM3NDNlMWYwMjM2YmM0NjFi
YmY0MjQ4NDEzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50
cy1hcGktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVu
dHMtYXBpLWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDYgQEAKIFBBU1MgbmF2aWdhdG9yLndlYmtp
dFN0YXJ0QWN0aXZpdHkgaXMgZGVmaW5lZC4KIFBBU1MgdmFyIGludGVudCA9IG5ldyBXZWJLaXRJ
bnRlbnQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4K
LVBBU1MgbmV3IFdlYktpdEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5v
dCBlbm91Z2ggYXJndW1lbnRzLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdhJykgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2Vi
S2l0SW50ZW50KCcnLCcnLCcnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTIuCiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJykgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcg
V2ViS2l0SW50ZW50KCcnLCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93
ZWItaW50ZW50cy1hcGkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMt
YXBpLmh0bWwKaW5kZXggMWRlMTdhMDk2ZTFlODE1ZmZiYmFhMzhmMTczYWQ3NWQ1ZTEzNTVkMy4u
MjYyY2EwZGEwZmMxNDE2M2U3MTBhODgzNjlkOWUxMzc2MzMwNGZjMyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCkBAIC04LDcgKzgsNyBAQAogICAgICAg
c2hvdWxkQmVEZWZpbmVkKCJuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eSIpOwogICAgICAg
CiAgICAgICBzaG91bGRUaHJvdygidmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoKSIsICIn
VHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTs7Ci0gICAgICBzaG91bGRUaHJvdygi
bmV3IFdlYktpdEludGVudCgnYScpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRz
JyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJ2EnKSIsICInRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3
IFdlYktpdEludGVudCgnJywnJywnJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0
aW9uIDEyJyIpOwogICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdj
JykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAgICAgc2hv
dWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJycsJ2MnKSIsICInRXJyb3I6IFNZTlRBWF9F
UlI6IERPTSBFeGNlcHRpb24gMTInIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRl
bnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2Q0ODgyNmY2ZjAwYzgxMWIwNzVhZTRjODRmNGE3ZmQ3MDE0ZDgzMAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0
cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ1IEBACitSZWNlaXZlZCBXZWIgSW50ZW50
OiBhY3Rpb249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4KK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFj
dGlvbj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbitleHBsaWNpdAorRXhwbGljaXQgaW50ZW50IHNl
cnZpY2U6IGh0dHA6Ly9leHBsaWNpdC5jb20vCitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rpb249
YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4rZXh0cmFzCitFeHRyYXNbYV0gPSBiCitSZWNlaXZlZCBX
ZWIgSW50ZW50OiBhY3Rpb249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4rcG9ydAorSGF2ZSAxIHBv
cnRzCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BB
U1MgbmV3IFdlYktpdEludGVudCh7fSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KGR1bW15KSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBX
ZWJLaXRJbnRlbnQobnVsbCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00g
RXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHVuZGVmaW5lZCkgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2Vi
S2l0SW50ZW50KDUpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudCgnc2l4JykgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50
KFsnc2l4J10pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlv
biAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2EnOidiJ30pIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVu
dCh7J2FjdGlvbic6J2InfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00g
RXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsndHlwZSc6J2InfSkgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcg
V2ViS2l0SW50ZW50KHsnYWN0aW9uJzonJywgJ3R5cGUnOidiJ30pIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVu
dCh7J2FjdGlvbic6J2EnLCAndHlwZSc6Jyd9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRB
WF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24n
OidhJywndHlwZSc6J2InfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5ldyBXZWJL
aXRJbnRlbnQoeydhY3Rpb24nOm51bGwsJ3R5cGUnOidiJ30pIGRpZCBub3QgdGhyb3cgZXhjZXB0
aW9uLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzp1bmRlZmluZWQsJ3R5cGUnOidi
J30pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0
aW9uJzonYScsJ3R5cGUnOm51bGx9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmV3
IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzp1bmRlZmluZWR9KSBkaWQgbm90IHRo
cm93IGV4Y2VwdGlvbi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBl
JzonYicsJ3NlcnZpY2UnOicnfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5ldyBX
ZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzpudWxsfSkgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBu
ZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6dW5kZWZp
bmVkfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEy
LgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2Vydmlj
ZSc6J25vdCBhIHVybCd9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBF
eGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6
J2InLCdzZXJ2aWNlJzondXJsOi8vYSB1cmwnfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQ
QVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzon
aHR0dHA6Ly9hIHVybCd9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmV3IFdlYktp
dEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ2RhdGEnOndpbmRvd30pIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogREFUQV9DTE9ORV9FUlI6IERPTSBFeGNlcHRpb24gMjUuCitQQVNTIG5l
dyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMnOm51bGx9KSBk
aWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6
J2EnLCd0eXBlJzonYicsJ2V4dHJhcyc6dW5kZWZpbmVkfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRp
b24uCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRy
YXMnOicnfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQo
eydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMnOidub3QgYSBkaWN0J30pIGRpZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5
cGUnOidiJywnZXh0cmFzJzo0Mn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuZXcg
V2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzpbJ2EnLCdiJ119
KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KKyogc2VudCBvYmplY3QgaW50ZW50CisqIHNlbnQg
ZXhwbGljaXQgaW50ZW50CisqIHNlbnQgaW50ZW50IHdpdGggZXh0cmFzCisqIHNlbnQgaW50ZW50
IHdpdGggcG9ydAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRl
bnRzLW9iai1jb25zdHJ1Y3Rvci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50
ZW50cy1vYmotY29uc3RydWN0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzJhYWE1ZTU1NzUxY2I0OGRl
NDYyZTA1MzYxNzJhYjZiYWI5ZjQwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
aW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3IuaHRtbApAQCAtMCwwICsxLDEwMSBA
QAorPGh0bWw+CisgIDxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93
ZWItaW50ZW50cy10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgZnVu
Y3Rpb24gc2hvdWxkTm90VGhyb3coZXhwcmVzc2lvbikKKyAgICAgIHsKKyAgICAgICAgdHJ5IHsK
KyAgICAgICAgICBldmFsKGV4cHJlc3Npb24pOworICAgICAgICAgIHRlc3RQYXNzZWQoZXhwcmVz
c2lvbiArICIgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uIik7CisgICAgICAgIH0gY2F0Y2goZSkg
eworICAgICAgICAgIHRlc3RGYWlsZWQoZXhwcmVzc2lvbiArICIgc2hvdWxkIG5vdCB0aHJvdyBl
eGNlcHRpb24uIFRocmV3IGV4Y2VwdGlvbiAiICsgZSk7CisgICAgICAgIH0KKyAgICAgIH0KKwor
ICAgICAgZnVuY3Rpb24gZHVtbXkoKSB7fQorCisgICAgICBmdW5jdGlvbiBidXR0b25DbGlja2Vk
KCkgeworICAgICAgICAvLyB8YWN0aW9ufCBhbmQgfHR5cGV8IGFyZSByZXF1aXJlZCB0byBiZSBw
cmVzZW50IGFuZCBub24tZW1wdHkuCisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50
ZW50KHt9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAg
ICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KGR1bW15KSIsICInRXJyb3I6IFNZTlRB
WF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2Vi
S2l0SW50ZW50KG51bGwpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMici
KTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQodW5kZWZpbmVkKSIsICIn
RXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRo
cm93KCJuZXcgV2ViS2l0SW50ZW50KDUpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJ3NpeCcp
IiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hv
dWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoWydzaXgnXSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdElu
dGVudCh7J2EnOidiJ30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMici
KTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidiJ30p
IiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hv
dWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeyd0eXBlJzonYid9KSIsICInRXJyb3I6IFNZTlRB
WF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2Vi
S2l0SW50ZW50KHsnYWN0aW9uJzonJywgJ3R5cGUnOidiJ30pIiwgIidFcnJvcjogU1lOVEFYX0VS
UjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJ
bnRlbnQoeydhY3Rpb24nOidhJywgJ3R5cGUnOicnfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBE
T00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGROb3RUaHJvdygibmV3IFdlYktpdElu
dGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYid9KSIpOworCisgICAgICAgIC8vIFRoZXNlIHdp
bGwgZ2V0IGNvbnZlcnRlZCB0byBsaXRlcmFscyAibnVsbCIgYW5kICJ1bmRlZmluZWQiLiBBd2t3
YXJkCisgICAgICAgIC8vIG5hbWVzLCBidXQgaWRpb21hdGljIHVzYWdlLgorICAgICAgICBzaG91
bGROb3RUaHJvdygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6bnVsbCwndHlwZSc6J2InfSki
KTsKKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOnVu
ZGVmaW5lZCwndHlwZSc6J2InfSkiKTsKKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJL
aXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6bnVsbH0pIik7CisgICAgICAgIHNob3VsZE5v
dFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOnVuZGVmaW5lZH0p
Iik7CisKKyAgICAgICAgLy8gfHNlcnZpY2V8LCBpZiBwcmVzZW50LCBtdXN0IGJlIGEgdmFsaWQg
dXJsLgorICAgICAgICBzaG91bGROb3RUaHJvdygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6
J2EnLCd0eXBlJzonYicsJ3NlcnZpY2UnOicnfSkiKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5l
dyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzpudWxsfSki
LCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91
bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ3NlcnZp
Y2UnOnVuZGVmaW5lZH0pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMici
KTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywn
dHlwZSc6J2InLCdzZXJ2aWNlJzonbm90IGEgdXJsJ30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjog
RE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJ
bnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzondXJsOi8vYSB1cmwnfSki
KTsKKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidh
JywndHlwZSc6J2InLCdzZXJ2aWNlJzonaHR0dHA6Ly9hIHVybCd9KSIpOworCisgICAgICAgIC8v
IHxkYXRhfCBtdXN0IGJlIGNsb25lYWJsZS4KKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJL
aXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdkYXRhJzp3aW5kb3d9KSIsICInRXJy
b3I6IERBVEFfQ0xPTkVfRVJSOiBET00gRXhjZXB0aW9uIDI1JyIpOworCisgICAgICAgIC8vIHxl
eHRyYXN8LCBpZiBwcmVzZW50LCBtdXN0IGJlIGEgZGljdGlvbmFyeS4KKyAgICAgICAgc2hvdWxk
Tm90VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRy
YXMnOm51bGx9KSIpOworICAgICAgICBzaG91bGROb3RUaHJvdygibmV3IFdlYktpdEludGVudCh7
J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ2V4dHJhcyc6dW5kZWZpbmVkfSkiKTsKKyAgICAgICAg
c2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2In
LCdleHRyYXMnOicnfSkiKTsKKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJbnRl
bnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMnOidub3QgYSBkaWN0J30pIik7Cisg
ICAgICAgIHNob3VsZE5vdFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5
cGUnOidiJywnZXh0cmFzJzo0Mn0pIik7CisgICAgICAgIHNob3VsZE5vdFRocm93KCJuZXcgV2Vi
S2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzpbJ2EnLCdiJ119KSIp
OworCisgICAgICAgIHZhciBzaW1wbGVJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAg
ICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxh
aW4iLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSJ9KTsKKyAgICAgICAgbmF2aWdhdG9y
LndlYmtpdFN0YXJ0QWN0aXZpdHkoc2ltcGxlSW50ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2Vu
dCBvYmplY3QgaW50ZW50Iik7CisKKyAgICAgICAgdmFyIGV4cGxpY2l0SW50ZW50ID0gbmV3IFdl
YktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisgICAgICAgICAg
ICAgInR5cGUiOiJ0ZXh0L3BsYWluK2V4cGxpY2l0IiwKKyAgICAgICAgICAgICAiZGF0YSI6Im1l
c3NhZ2UiLAorICAgICAgICAgICAgICJzZXJ2aWNlIiA6ICJodHRwOi8vZXhwbGljaXQuY29tLyJ9
KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoZXhwbGljaXRJbnRlbnQp
OworICAgICAgICBkZWJ1ZygiKiBzZW50IGV4cGxpY2l0IGludGVudCIpOworCisgICAgICAgIHZh
ciBleHRyYXNJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAgICAgICAgeyJhY3Rpb24i
OiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxhaW4rZXh0cmFzIiwKKyAg
ICAgICAgICAgICAiZGF0YSI6Im1lc3NhZ2UiLAorICAgICAgICAgICAgICJleHRyYXMiOnsiYSI6
ImIifX0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShleHRyYXNJbnRl
bnQpOworICAgICAgICBkZWJ1ZygiKiBzZW50IGludGVudCB3aXRoIGV4dHJhcyIpOworCisgICAg
ICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CisgICAgICAgIGNoYW5uZWwu
cG9ydDIub25NZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgZGVidWcoIiogZ290IG1l
c3NhZ2UiKTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHBvcnRJbnRlbnQgPSBuZXcgV2ViS2l0
SW50ZW50KAorICAgICAgICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAi
dHlwZSI6InRleHQvcGxhaW4rcG9ydCIsCisgICAgICAgICAgICAgImRhdGEiOmNoYW5uZWwucG9y
dDEsCisgICAgICAgICAgICAgInRyYW5zZmVyIjpbY2hhbm5lbC5wb3J0MV19KTsKKyAgICAgICAg
bmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkocG9ydEludGVudCk7CisgICAgICAgIGRlYnVn
KCIqIHNlbnQgaW50ZW50IHdpdGggcG9ydCIpOworICAgICAgfQorICAgIDwvc2NyaXB0PgorICA8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InNpbXVsYXRlQnV0dG9uUHJlc3MoKSI+Cis8aW5wdXQgdHlw
ZT0iYnV0dG9uIiBpZD0iYnV0dG9uIiB2YWx1ZT0iU3RhcnQgV2ViIEludGVudCIgb25tb3VzZXVw
PSJidXR0b25DbGlja2VkKCkiPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138814</attachid>
            <date>2012-04-25 08:24:33 -0700</date>
            <delta_ts>2012-04-25 08:28:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120425082431.patch</filename>
            <type>text/plain</type>
            <size>34306</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTFkODdhODZlZmM5ZjNj
OTIzNTBiOWJhNDEyMDgwZmM0MzhlMWJjNS4uZTZiOGI4OTZmOTQ4NzM1ZDcwZTgxNzQ1ODY4ZjY2
Zjg2ZTMxNjk1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGhvcGVmdWxseSBiZSB0
ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2luZyB0aGlzCisgICAgICAgIGNv
bnN0cnVjdG9yLCB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4KKyAgICAgICAgQWRkZWQgbGF5
b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAgICAgIHdlYmludGVudHMvd2Vi
LWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMjUgIFl1cnkgU2VtaWto
YXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdXNl
IGNvbXBvc2l0ZSBub2RlIHByb3ZpZGVyIGZvciBkaWZmIG5vZGVzIGluIGhlYXAgcHJvZmlsZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAKaW5kZXggMDUzZDQyOWNm
YTFjOTcyM2Y5NjM2YzM3OWYzYTM5MTg1ZGQ0OTRiZS4uOGY0NDU5MGUxOGY0MjdhMjA4ZTU5MGQz
OTRmZDdmZTRiMmIyNzY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dC5jcHAKQEAgLTMzLDExICszMywxMiBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBkYXRhLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAg
ZWMgPSBTWU5UQVhfRVJSOwpAQCAtNDgsMzkgKzQ5LDcxIEBAIFBhc3NSZWZQdHI8SW50ZW50PiBJ
bnRlbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQ
YXNzCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW50ZW50KGFjdGlvbiwgdHlwZSwgZGF0YSkpOworICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheT4gY2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGVQb3J0cygmcG9ydHMs
IGVjKTsKKworICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZXh0cmFzOworICAgIEtV
Ukwgc2VydmljZVVybDsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFjdGlvbiwg
dHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2VVcmwpKTsKIH0K
IAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9u
LCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBk
YXRhLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMpCitQ
YXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRl
LCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBp
ZiAoYWN0aW9uLmlzRW1wdHkoKSkgeworICAgIFN0cmluZyBhY3Rpb247CisgICAgaWYgKCFvcHRp
b25zLmdldCgiYWN0aW9uIiwgYWN0aW9uKSB8fCBhY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAg
IGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICh0eXBl
LmlzRW1wdHkoKSkgeworCisgICAgU3RyaW5nIHR5cGU7CisgICAgaWYgKCFvcHRpb25zLmdldCgi
dHlwZSIsIHR5cGUpIHx8IHR5cGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VS
UjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hh
bm5lbEFycmF5PiBjaGFubmVscyA9IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0
cywgZWMpOworICAgIFN0cmluZyBzZXJ2aWNlOworICAgIEtVUkwgc2VydmljZVVybDsKKyAgICBv
cHRpb25zLmdldCgic2VydmljZSIsIHNlcnZpY2UpOworICAgIGlmICghc2VydmljZS5pc0VtcHR5
KCkpIHsKKyAgICAgIHNlcnZpY2VVcmwgPSBLVVJMKEtVUkwoKSwgc2VydmljZSk7CisgICAgICBp
ZiAoIXNlcnZpY2VVcmwuaXNWYWxpZCgpKSB7CisgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwor
ICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW50ZW50KGFjdGlvbiwgdHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgpKSk7Ci19
CisgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0czsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFu
bmVsQXJyYXk+IGNoYW5uZWxzOworICAgIGlmIChvcHRpb25zLmdldCgidHJhbnNmZXIiLCBwb3J0
cykpCisgICAgICAgIGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMoJnBv
cnRzLCBlYyk7CisKKyAgICBTY3JpcHRWYWx1ZSBkYXRhVmFsdWU7CisgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZERhdGE7CisgICAgaWYgKG9wdGlvbnMuZ2V0KCJk
YXRhIiwgZGF0YVZhbHVlKSkgeworICAgICAgICBib29sIGRpZFRocm93ID0gZmFsc2U7CisgICAg
ICAgIHNlcmlhbGl6ZWREYXRhID0gZGF0YVZhbHVlLnNlcmlhbGl6ZShzY3JpcHRTdGF0ZSwgJnBv
cnRzLCAwLCBkaWRUaHJvdyk7CisgICAgICAgIGlmIChkaWRUaHJvdykgeworICAgICAgICAgICAg
ZWMgPSBEQVRBX0NMT05FX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgfQogCi1JbnRlbnQ6OkludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5n
JiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSkKLSAgICA6IG1f
YWN0aW9uKGFjdGlvbikKLSAgICAsIG1fdHlwZSh0eXBlKQotewotICAgIGlmIChkYXRhKQotICAg
ICAgICBtX2RhdGEgPSBkYXRhOwotICAgIGVsc2UKLSAgICAgICAgbV9kYXRhID0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKTsKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IGV4dHJhczsKKyAgICBEaWN0aW9uYXJ5IGV4dHJhc0RpY3Rpb25hcnk7CisgICAgaWYgKG9w
dGlvbnMuZ2V0KCJleHRyYXMiLCBleHRyYXNEaWN0aW9uYXJ5KSkKKyAgICAgICAgZXh0cmFzRGlj
dGlvbmFyeS5nZXRPd25Qcm9wZXJ0aWVzQXNTdHJpbmdIYXNoTWFwKGV4dHJhcyk7CisKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIHNlcmlhbGl6ZWREYXRhLnJl
bGVhc2UoKSwgY2hhbm5lbHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2VVcmwpKTsKIH0KIAot
SW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2Fn
ZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKQorSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5PiBwb3J0cywKKyAgICAgICAgICAgICAgIGNvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mIGV4dHJhcywgY29uc3QgS1VSTCYgc2VydmljZSkKICAgICA6IG1fYWN0aW9uKGFjdGlv
bikKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9wb3J0cyhwb3J0cykKKyAgICAsIG1fc2Vy
dmljZShzZXJ2aWNlKQorICAgICwgbV9leHRyYXMoZXh0cmFzKQogewogICAgIGlmIChkYXRhKQog
ICAgICAgICBtX2RhdGEgPSBkYXRhOwpAQCAtODgsMjYgKzEyMSw2IEBAIEludGVudDo6SW50ZW50
KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjCiAgICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZh
bHVlKCk7CiB9CiAKLWNvbnN0IFN0cmluZyYgSW50ZW50OjphY3Rpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtX2FjdGlvbjsKLX0KLQotY29uc3QgU3RyaW5nJiBJbnRlbnQ6OnR5cGUoKSBjb25z
dAotewotICAgIHJldHVybiBtX3R5cGU7Ci19Ci0KLVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogSW50
ZW50OjpkYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLmdldCgpOwotfQotCi1NZXNz
YWdlUG9ydENoYW5uZWxBcnJheSogSW50ZW50OjptZXNzYWdlUG9ydHMoKSBjb25zdAotewotICAg
IHJldHVybiBtX3BvcnRzLmdldCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ludGVudHMvSW50ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMv
SW50ZW50LmgKaW5kZXggMzNlZjY5ZTA0NDEwNTk2ZTI0MTUzMzQ4NWVmYmM5ZjVjNGU2YjZkNC4u
MmJjOTU1NWRlYjM3ZTdhMTkwMDE2ZDVhNTYyMzFjMmI0OTRkY2E1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaApAQCAtMzEsNiArMzEsNyBAQAogCiAjaWYgRU5BQkxF
KFdFQl9JTlRFTlRTKQogCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VQb3J0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KQEAgLTQxLDMyICs0MiwzNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIFNjcmlwdFN0YXRlOwogY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogCiB0eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBJbnRlbnQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxJbnRlbnQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEludGVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJp
bmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBjb25zdCBN
ZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEludGVudD4gY3JlYXRlKFNjcmlwdFN0YXRlKiwgY29uc3QgRGljdGlvbmFyeSYsIEV4
Y2VwdGlvbkNvZGUmKTsKIAotICAgIGNvbnN0IFN0cmluZyYgYWN0aW9uKCkgY29uc3Q7Ci0gICAg
Y29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3Q7Ci0gICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBk
YXRhKCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiBhY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X2FjdGlvbjsgfQorICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQorICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS5nZXQoKTsgfQogCi0gICAgaW50IGlkZW50aWZpZXIoKSBjb25zdDsKLSAgICB2b2lkIHNl
dElkZW50aWZpZXIoaW50KTsKKyAgICBNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogbWVzc2FnZVBv
cnRzKCkgY29uc3QgeyByZXR1cm4gbV9wb3J0cy5nZXQoKTsgfQorICAgIGNvbnN0IEtVUkwmIHNl
cnZpY2UoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2U7IH0KKyAgICBjb25zdCBXVEY6Okhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMoKSBjb25zdCB7IHJldHVybiBtX2V4dHJhczsgfQog
Ci0gICAgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIG1lc3NhZ2VQb3J0cygpIGNvbnN0OworcHJv
dGVjdGVkOgorICAgIEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0
eXBlLAorICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwg
UGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMsCisgICAgICAgICAgIGNv
bnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhcywgY29uc3QgS1VSTCYgc2Vy
dmljZSk7CiAKIHByaXZhdGU6Ci0gICAgSW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25z
dCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKTsK
LSAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+IHBvcnRzKTsKIAogICAgIFN0cmluZyBtX2FjdGlvbjsKICAgICBTdHJp
bmcgbV90eXBlOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fZGF0YTsKICAg
ICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IG1fcG9ydHM7CisgICAgS1VSTCBtX3Nl
cnZpY2U7CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2V4dHJhczsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW50ZW50cy9JbnRlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0lu
dGVudC5pZGwKaW5kZXggZWYwODI1MDczNGZmYzc5YjE5NDk4MGVjODI0M2VlYjM0NDhhYzUyZS4u
OTI2NTdiNGU2Y2U2MGYwNzk5NTI0NjQwMTYzNjViODcwOTE0OTVlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKQEAgLTI2LDYgKzI2LDcgQEAKIG1vZHVsZSB3
aW5kb3cgewogICBpbnRlcmZhY2UgWwogICAgICAgQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFMsCisg
ICAgICBDdXN0b21Db25zdHJ1Y3RvciwKICAgICAgIENvbnN0cnVjdG9yKGluIERPTVN0cmluZyBh
Y3Rpb24sIGluIERPTVN0cmluZyB0eXBlLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzTnVsbFN0cmlu
ZywgVHJhbnNmZXJMaXN0PXRyYW5zZmVyTGlzdF0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRhdGEs
IGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIEFycmF5IHRyYW5zZmVyTGlzdCksCiAg
ICAgICBDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbgogICBdIEludGVudCB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNWIyODhmODg3ZDRkZGU0NjQwYTAxMjcwODkwMDQ2YmI4ODZhNzVlMi4uMjg5Njc5
NTUxYTBjZjM0NmUzMjk1MTI3ODRlZTdjNDNlZjY3NTcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MjI4Miw2ICsyMjgyLDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQx
NkFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50
MzJBcnJheUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElu
dDhBcnJheUN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElu
dGVudENvbnN0cnVjdG9yLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcAppbmRleCBmZDRkYTFmYjAwNmNmY2Y2NDE4OWY4MjM5
ZDhlNmNiMjBmMWM2YWVhLi4xMGFhZmU4ZGM2YzI4MWVmZTcxZDQ5ZmI5MmY0YmI5NTY3NTg3NTE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcApAQCAtNDEyLDQg
KzQxMiw0NCBAQCBib29sIERpY3Rpb25hcnk6OmdldChjb25zdCBTdHJpbmcmIGtleSwgUmVmUHRy
PFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mIHZhbAogCiAjZW5kaWYKIAorYm9vbCBEaWN0
aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIERpY3Rpb25hcnkmIHZhbHVlKSBjb25zdAor
eworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5
LCB2OFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHY4VmFsdWUtPklz
T2JqZWN0KCkpCisgICAgICAgIHZhbHVlID0gRGljdGlvbmFyeSh2OFZhbHVlKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCisKK2Jvb2wgRGljdGlvbmFyeTo6Z2V0T3duUHJvcGVydGllc0FzU3Ry
aW5nSGFzaE1hcChXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBoYXNoTWFwKSBjb25zdAor
eworICAgIGlmICghaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBvcHRpb25zID0gbV9vcHRpb25zLT5Ub09iamVjdCgpOworICAg
IGlmIChvcHRpb25zLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdjg6
OkxvY2FsPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IG9wdGlvbnMtPkdldE93blByb3BlcnR5TmFt
ZXMoKTsKKyAgICBpZiAocHJvcGVydGllcy5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLT5MZW5ndGgoKTsgKytp
KSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBrZXkgPSBwcm9wZXJ0aWVzLT5HZXQo
aSktPlRvU3RyaW5nKCk7CisgICAgICAgIGlmICghb3B0aW9ucy0+SGFzKGtleSkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IG9w
dGlvbnMtPkdldChrZXkpOworICAgICAgICBTdHJpbmcgc3RyaW5nS2V5ID0gdjhWYWx1ZVRvV2Vi
Q29yZVN0cmluZyhrZXkpOworICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2OFZhbHVlVG9X
ZWJDb3JlU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgaWYgKCFzdHJpbmdLZXkuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgaGFzaE1hcC5zZXQoc3RyaW5nS2V5LCBzdHJpbmdWYWx1ZSk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaAppbmRleCBlNTg4OTBlNTlmYjI1MjE2NTIwNzFj
Zjg1ZjYwMTU5MTMwMTk4NzBhLi5jNGMzM2IxYmIyMDhlOTY0MGRmZmI4NDA2ZDg5M2I0MTI4MzI3
OWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5oCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1
ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCkBA
IC04Myw2ICs4NCw4IEBAIHB1YmxpYzoKICAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBSZWZQ
dHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiYpIGNvbnN0OwogI2VuZGlmCiAgICAgYm9v
bCBnZXQoY29uc3QgU3RyaW5nJiwgSGFzaFNldDxBdG9taWNTdHJpbmc+JikgY29uc3Q7CisgICAg
Ym9vbCBnZXQoY29uc3QgU3RyaW5nJiwgRGljdGlvbmFyeSYpIGNvbnN0OworICAgIGJvb2wgZ2V0
T3duUHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcChXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JikgY29uc3Q7CiAKICAgICBib29sIGdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBT
dHJpbmcmLCBTdHJpbmcmKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0VmFsdWUuY3BwCmluZGV4IGVjYzM2NzM2MmE4MzhiN2Y5ODkyOGVkMDU5OWQ2Mzc2OWYwOTdj
YjcuLjMxYmNkMjNlZTlhMzdkNzBmZGU1MTdiNDI5YTQ1ODBlMWQzZjEzNjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKQEAgLTMyLDkgKzMyLDExIEBACiAj
aW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKIAogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U2NvcGUuaCIKICNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
NCw2ICs0NiwxMyBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0VmFs
dWU6OnNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdAogICAgIHJldHVybiBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2OFZhbHVlKCkpOwogfQogCitQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0VmFsdWU6OnNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQXJy
YXkqIGFycmF5QnVmZmVycywgYm9vbCYgZGlkVGhyb3cpCit7CisgICAgU2NyaXB0U2NvcGUgc2Nv
cGUoc2NyaXB0U3RhdGUpOworICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZSh2OFZhbHVlKCksIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzLCBkaWRUaHJvdyk7Cit9CisK
IFNjcmlwdFZhbHVlIFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUpCiB7CiAgICAgU2NyaXB0U2NvcGUg
c2NvcGUoc2NyaXB0U3RhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVl
LmgKaW5kZXggOTEzNTZkNGM3ZjFiYzQ1YTc1MTU3NDc5ZjI2NzE3MjEzN2MwMmY2NC4uZmFhMWY2
MzhlYTc2MGFjZmIyM2Q4NDZjOWJmNGZmYmM1N2JhYjJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRWYWx1ZS5oCkBAIC0zNiwxNSArMzYsMjQgQEAKIAogI2luY2x1ZGUgPHY4
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWZuZGVmIE5ERUJVRwogI2luY2x1ZGUgIlY4
UHJveHkuaCIgIC8vIGZvciByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBnbG9iYWwgaGFuZGxlcy4K
ICNlbmRpZgogCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIEFycmF5QnVmZmVyOworfQorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc3BlY3RvclZhbHVlOworY2xhc3MgTWVzc2FnZVBv
cnQ7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Cit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8
TWVzc2FnZVBvcnQ+LCAxPiBNZXNzYWdlUG9ydEFycmF5OwordHlwZWRlZiBWZWN0b3I8UmVmUHRy
PFdURjo6QXJyYXlCdWZmZXI+LCAxPiBBcnJheUJ1ZmZlckFycmF5OwogCiBjbGFzcyBTY3JpcHRW
YWx1ZSB7CiBwdWJsaWM6CkBAIC0xMzEsNiArMTQwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUq
KTsKKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlw
dFN0YXRlKiwgTWVzc2FnZVBvcnRBcnJheSosIEFycmF5QnVmZmVyQXJyYXkqLCBib29sJik7CiAg
ICAgc3RhdGljIFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplKFNjcmlwdFN0YXRlKiwgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKik7CiAKICAgICB2b2lkIGNsZWFyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hODU5OTAxNGQ2YTBmMWU0ZWY2NDQ1YzZkMWYwMzIyZjU5OTdjMWZhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29u
c3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW50ZW50LmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTWVzc2Fn
ZVBvcnQuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworI2luY2x1ZGUg
IlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgorI2luY2x1ZGUgIlY4
RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SW50ZW50LmgiCisjaW5jbHVkZSAiVjhNZXNzYWdl
UG9ydC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbnRl
bnQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAg
ICBJTkNfU1RBVFMoIkRPTS5JbnRlbnQuQ29uc3RydWN0b3IiKTsKKworICAgIGlmICghYXJncy5J
c0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3Qg
Y29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIFY4UHJveHk6OlR5
cGVFcnJvcik7CisKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3Ry
dWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBhcmdzLkhvbGRl
cigpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICBpZiAo
YXJncy5MZW5ndGgoKSA9PSAxKSB7CisgICAgICAgIC8vIFVzZSB0aGUgZGljdGlvbmFyeSBjb25z
dHJ1Y3Rvci4gVGhpcyBibG9jayB3aWxsIHJldHVybiBpZiB0aGUKKyAgICAgICAgLy8gYXJndW1l
bnQgaXNuJ3QgYSB2YWxpZCBEaWN0aW9uYXJ5LgorICAgICAgICBFWENFUFRJT05fQkxPQ0soRGlj
dGlvbmFyeSwgb3B0aW9ucywgYXJnc1swXSk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgICAgICBSZWZQdHI8SW50ZW50PiBpbXBsID0gSW50ZW50OjpjcmVhdGUoU2NyaXB0U3Rh
dGU6OmN1cnJlbnQoKSwgb3B0aW9ucywgZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CisKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01X
cmFwcGVyKHdyYXBwZXIsICZpbmZvLCBpbXBsLmdldCgpKTsKKyAgICAgICAgVjhET01XcmFwcGVy
OjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbC5yZWxlYXNlKCksIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikpOworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAg
ICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTVFJJTkdfVE9fVjhQQVJBTUVU
RVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIGFjdGlvbiwgTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CisgICAgU1RSSU5HX1RPX1Y4
UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCB0eXBlLCBNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBNZXNzYWdl
UG9ydEFycmF5IG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3Q7CisgICAgQXJyYXlCdWZmZXJB
cnJheSBhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0OworICAgIGlmIChhcmdzLkxlbmd0aCgp
ID4gMykgeworICAgICAgICBpZiAoIWV4dHJhY3RUcmFuc2ZlcmFibGVzKGFyZ3NbM10sIG1lc3Nh
Z2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsIGFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3QpKQor
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBleHRyYWN0IHRyYW5zZmVy
YWJsZXMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworICAgIH0KKyAgICBib29sIGRhdGFEaWRUaHJv
dyA9IGZhbHNlOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzJdLCAmbWVzc2FnZVBvcnRBcnJheVRyYW5z
ZmVyTGlzdCwgJmFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3QsIGRhdGFEaWRUaHJvdyk7Cisg
ICAgaWYgKGRhdGFEaWRUaHJvdykKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoREFUQV9DTE9O
RV9FUlIpOworCisgICAgUmVmUHRyPEludGVudD4gaW1wbCA9IEludGVudDo6Y3JlYXRlKGFjdGlv
biwgdHlwZSwgZGF0YSwgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgZWMpOworICAgIGlm
IChlYykKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOworCisgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIod3JhcHBlciwgJmluZm8sIGltcGwuZ2V0KCkpOworICAgIFY4RE9NV3JhcHBl
cjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGltcGwucmVsZWFzZSgpLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJbnRlbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkludGVudC5oCmluZGV4IDczYTYyMTMyYWQ2MzM5YzU2ZDQ1NjNlNDI0ZGI2ZjU4ZGZkMDMzODIu
LmNjMDgwYWQ5OWM1NDlmZTJmMjUyMjI4NTBhN2IwOGM2OGY3ZDBkNDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViUHJpdmF0ZVB0
ci5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlVSTC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7IGNsYXNzIEludGVudDsgfQpAQCAtNjMsNiArNjQsMTYgQEAgcHVibGljOgogICAg
IFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGFjdGlvbigpIGNvbnN0OwogICAgIFdFQktJVF9FWFBP
UlQgV2ViU3RyaW5nIHR5cGUoKSBjb25zdDsKICAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBk
YXRhKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJVUkwgc2VydmljZSgpIGNvbnN0Owor
CisgICAgLy8gUmV0cmlldmUgYSBsaXN0IG9mIHRoZSBuYW1lcyBvZiBleHRyYSBtZXRhZGF0YSBh
c3NvY2lhdGVkIHdpdGggdGhlCisgICAgLy8gaW50ZW50LgorICAgIFdFQktJVF9FWFBPUlQgV2Vi
VmVjdG9yPFdlYlN0cmluZz4gZXh0cmFzTmFtZXMoKSBjb25zdDsKKworICAgIC8vIFJldHJpZXZl
IHRoZSB2YWx1ZSBvZiBhbiBleHRyYSBtZXRhZGF0YSBlbGVtZW50LiBUaGUgYXJndW1lbnQgc2hv
dWxkCisgICAgLy8gYmUgb25lIG9mIHRoZSBuYW1lcyByZXRyaWV2ZWQgd2l0aCB8ZXh0cmFzTmFt
ZXN8LiBSZXR1cm5zIGFuIGVtcHR5CisgICAgLy8gc3RyaW5nIGlmIHRoZSBuYW1lIGlzIGludmFs
aWQuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgZXh0cmFzVmFsdWUoY29uc3QgV2ViU3Ry
aW5nJikgY29uc3Q7CiAKICAgICAvLyBDYWxsZXIgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBwb3J0
cy4KICAgICBXRUJLSVRfRVhQT1JUIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBtZXNzYWdl
UG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkludGVudC5jcHAKaW5kZXggOGE3ZDZhYWM1NDNiZDk5OTk5YjhmYTc5ODQzYTM0MDNhZTU2N2M5
ZS4uODNlODM2MWRjYjIyNGFjN2Y2Yzk0NWUwN2M0MTY1NDBkMjFjZDlkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiSW50ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCIKICNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMTAzLDYgKzEwNCwxNSBAQCBXZWJTdHJpbmcg
V2ViSW50ZW50OjpkYXRhKCkgY29uc3QKICNlbmRpZgogfQogCitXZWJVUkwgV2ViSW50ZW50Ojpz
ZXJ2aWNlKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgcmV0dXJuIFdl
YlVSTChtX3ByaXZhdGUtPnNlcnZpY2UoKSk7CisjZWxzZQorICAgIHJldHVybiBXZWJVUkwoKTsK
KyNlbmRpZgorfQorCiBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogV2ViSW50ZW50OjptZXNz
YWdlUG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0CiB7CiAgICAgLy8gTm90ZTogc2VlIFBsYXRm
b3JtTWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0TWVzc2FnZVRvUmVtb3RlLgpAQCAtMTIwLDQgKzEz
MCwzMCBAQCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogV2ViSW50ZW50OjptZXNzYWdlUG9y
dENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0CiAgICAgcmV0dXJuIHdlYkNoYW5uZWxzOwogfQogCitX
ZWJWZWN0b3I8V2ViU3RyaW5nPiBXZWJJbnRlbnQ6OmV4dHJhc05hbWVzKCkgY29uc3QKK3sKKyNp
ZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgc2l6ZV90IG51bUV4dHJhcyA9IG1fcHJpdmF0ZS0+
ZXh0cmFzKCkuc2l6ZSgpOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGtleVN0cmluZ3MobnVt
RXh0cmFzKTsKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
cjo6S2V5cyBrZXlJdGVyID0gbV9wcml2YXRlLT5leHRyYXMoKS5iZWdpbigpLmtleXMoKTsKKyAg
ICBmb3IgKGludCBpID0gMDsga2V5SXRlciAhPSBtX3ByaXZhdGUtPmV4dHJhcygpLmVuZCgpLmtl
eXMoKTsgKytrZXlJdGVyLCArK2kpCisgICAgICAgIGtleVN0cmluZ3NbaV0gPSAqa2V5SXRlcjsK
KyAgICByZXR1cm4ga2V5U3RyaW5nczsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlZlY3RvcjxXZWJT
dHJpbmc+KCk7CisjZW5kaWYKK30KKworV2ViU3RyaW5nIFdlYkludGVudDo6ZXh0cmFzVmFsdWUo
Y29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdAoreworI2lmIEVOQUJMRShXRUJfSU5URU5UUykK
KyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciB2YWwgPSBt
X3ByaXZhdGUtPmV4dHJhcygpLmZpbmQobmFtZSk7CisgICAgaWYgKHZhbCA9PSBtX3ByaXZhdGUt
PmV4dHJhcygpLmVuZCgpKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgcmV0dXJu
IHZhbC0+c2Vjb25kOworI2Vsc2UKKyAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisjZW5kaWYKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggNmZmOTVjNTYyNDE3MDhiY2EzMzFjYjBjMmMyZGNhOWQ3
ZGU4MGQxYi4uZDg0NWI3ZWMwNTA3Zjk0Y2QwZjczNzRlYTY1NmUyOGQ0ZjVhYjI5MSAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApAQCAtMTMzNSw2
ICsxMzM1LDEzIEBAIHZvaWQgV2ViVmlld0hvc3Q6OmRpc3BhdGNoSW50ZW50KFdlYkZyYW1lKiBz
b3VyY2UsIGNvbnN0IFdlYkludGVudFJlcXVlc3QmIHJlcXVlCiAgICAgICAgICAgICAoKnBvcnRz
KVtpXS0+ZGVzdHJveSgpOwogICAgICAgICBkZWxldGUgcG9ydHM7CiAgICAgfQorICAgIGlmICgh
cmVxdWVzdC5pbnRlbnQoKS5zZXJ2aWNlKCkuaXNFbXB0eSgpKQorICAgICAgICBwcmludGYoIkV4
cGxpY2l0IGludGVudCBzZXJ2aWNlOiAlc1xuIiwgcmVxdWVzdC5pbnRlbnQoKS5zZXJ2aWNlKCku
c3BlYygpLmRhdGEoKSk7CisgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gZXh0cmFzID0gcmVxdWVz
dC5pbnRlbnQoKS5leHRyYXNOYW1lcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXh0
cmFzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHByaW50ZigiRXh0cmFzWyVzXSA9ICVzXG4iLCBl
eHRyYXNbaV0udXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgIHJlcXVlc3QuaW50ZW50KCku
ZXh0cmFzVmFsdWUoZXh0cmFzW2ldKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9CiB9CiAKIC8vIFB1
YmxpYyBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2Vi
LWludGVudHMtYXBpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWlu
dGVudHMtYXBpLWV4cGVjdGVkLnR4dAppbmRleCA3NjZjZmQwYTRkMDQ3YjU3NjRjODgzM2I5MDRj
YWRmNWM5YTRjNTY3Li5iZmYwYTY2YzQyZjdkMzc0M2UxZjAyMzZiYzQ2MWJiZjQyNDg0MTM0IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0
ZWQudHh0CkBAIC0xLDYgKzEsNiBAQAogUEFTUyBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0
eSBpcyBkZWZpbmVkLgogUEFTUyB2YXIgaW50ZW50ID0gbmV3IFdlYktpdEludGVudCgpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyBuZXcgV2Vi
S2l0SW50ZW50KCdhJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1
bWVudHMuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJ2EnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJycs
JycsJycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
Mi4KIFBBU1MgbmV3IFdlYktpdEludGVudCgnJywnYicsJ2MnKSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQo
JycsJycsJ2MnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRp
b24gMTIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFw
aS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAppbmRl
eCAxZGUxN2EwOTZlMWU4MTVmZmJiYWEzOGYxNzNhZDc1ZDVlMTM1NWQzLi4yNjJjYTBkYTBmYzE0
MTYzZTcxMGE4ODM2OWQ5ZTEzNzYzMzA0ZmMzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJp
bnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMv
d2ViLWludGVudHMtYXBpLmh0bWwKQEAgLTgsNyArOCw3IEBACiAgICAgICBzaG91bGRCZURlZmlu
ZWQoIm5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5Iik7CiAgICAgICAKICAgICAgIHNob3Vs
ZFRocm93KCJ2YXIgaW50ZW50ID0gbmV3IFdlYktpdEludGVudCgpIiwgIidUeXBlRXJyb3I6IE5v
dCBlbm91Z2ggYXJndW1lbnRzJyIpOzsKLSAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50
ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMnIik7CisgICAgICBz
aG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnYScpIiwgIidFcnJvcjogU1lOVEFYX0VSUjog
RE9NIEV4Y2VwdGlvbiAxMiciKTsKICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50
KCcnLCcnLCcnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CiAg
ICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnJywnYicsJ2MnKSIsICInRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3
IFdlYktpdEludGVudCgnJywnJywnYycpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMiciKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVu
dHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmludGVudHMv
d2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjI5
YTI5NWJjZDVjYzYzMmFlNmJkNGM2YzFiYTA0ZDYxOWQzMTQxCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3ItZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlvbj1hY3Rp
b24xIHR5cGU9dGV4dC9wbGFpbgorUmVjZWl2ZWQgV2ViIEludGVudDogYWN0aW9uPWFjdGlvbjEg
dHlwZT10ZXh0L3BsYWluK2V4cGxpY2l0CitFeHBsaWNpdCBpbnRlbnQgc2VydmljZTogaHR0cDov
L2V4cGxpY2l0LmNvbS8KK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlvbj1hY3Rpb24xIHR5cGU9
dGV4dC9wbGFpbitleHRyYXMKK0V4dHJhc1thXSA9IGIKK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFj
dGlvbj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbitwb3J0CitIYXZlIDEgcG9ydHMKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorUEFTUyBuZXcgV2ViS2l0
SW50ZW50KHt9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRp
b24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoZHVtbXkpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudChu
dWxsKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIu
CitQQVNTIG5ldyBXZWJLaXRJbnRlbnQodW5kZWZpbmVkKSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoNSkg
dGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFT
UyBuZXcgV2ViS2l0SW50ZW50KCdzaXgnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9F
UlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoWydzaXgnXSkgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBu
ZXcgV2ViS2l0SW50ZW50KHsnYSc6J2InfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhf
RVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzon
Yid9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIu
CitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeyd0eXBlJzonYid9KSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQo
eydhY3Rpb24nOicnLCAndHlwZSc6J2InfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhf
RVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzon
YScsICd0eXBlJzonJ30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4
Y2VwdGlvbiAxMi4KK1BBU1MgKG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6
J2InfSkpLmFjdGlvbiBpcyAiYSIKK1BBU1MgKG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidh
JywndHlwZSc6J2InfSkpLnR5cGUgaXMgImIiCitQQVNTIChuZXcgV2ViS2l0SW50ZW50KHsnYWN0
aW9uJzpudWxsLCd0eXBlJzonYid9KSkuYWN0aW9uIGlzICJudWxsIgorUEFTUyAobmV3IFdlYktp
dEludGVudCh7J2FjdGlvbic6dW5kZWZpbmVkLCd0eXBlJzonYid9KSkuYWN0aW9uIGlzICJ1bmRl
ZmluZWQiCitQQVNTIChuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOm51bGx9
KSkudHlwZSBpcyAibnVsbCIKK1BBU1MgKG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywn
dHlwZSc6dW5kZWZpbmVkfSkpLnR5cGUgaXMgInVuZGVmaW5lZCIKK1BBU1MgbmV3IFdlYktpdElu
dGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ3NlcnZpY2UnOicnfSkgZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6
J2InLCdzZXJ2aWNlJzpudWxsfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBE
T00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5
cGUnOidiJywnc2VydmljZSc6dW5kZWZpbmVkfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5U
QVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9u
JzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6J25vdCBhIHVybCd9KSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRl
bnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzondXJsOi8vYSB1cmwnfSkgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidh
JywndHlwZSc6J2InLCdzZXJ2aWNlJzonaHR0dHA6Ly9hIHVybCd9KSBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYics
J2RhdGEnOndpbmRvd30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogREFUQV9DTE9ORV9FUlI6IERP
TSBFeGNlcHRpb24gMjUuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlw
ZSc6J2InLCdleHRyYXMnOm51bGx9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmV3
IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ2V4dHJhcyc6dW5kZWZpbmVk
fSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rp
b24nOidhJywndHlwZSc6J2InLCdleHRyYXMnOicnfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24u
CitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMn
Oidub3QgYSBkaWN0J30pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuZXcgV2ViS2l0
SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzo0Mn0pIGRpZCBub3QgdGhy
b3cgZXhjZXB0aW9uLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUn
OidiJywnZXh0cmFzJzpbJ2EnLCdiJ119KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KKyogc2Vu
dCBvYmplY3QgaW50ZW50CisqIHNlbnQgZXhwbGljaXQgaW50ZW50CisqIHNlbnQgaW50ZW50IHdp
dGggZXh0cmFzCisqIHNlbnQgaW50ZW50IHdpdGggcG9ydAorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci5odG1sIGIvTGF5b3V0
VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3IuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wZDA2NjIyYmIxN2ZiN2M5MDUyNWEzZGIxYzMxMGUzNjA4M2M4ZGM0Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0
b3IuaHRtbApAQCAtMCwwICsxLDEwMiBAQAorPGh0bWw+CisgIDxoZWFkPgorICAgIDxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWItaW50ZW50cy10ZXN0aW5nLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHNob3VsZE5vdFRocm93KGV4cHJlc3Npb24pCisg
ICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZXZhbChleHByZXNzaW9uKTsKKyAgICAg
ICAgICAgIHRlc3RQYXNzZWQoZXhwcmVzc2lvbiArICIgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24u
Iik7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZChleHByZXNz
aW9uICsgIiBzaG91bGQgbm90IHRocm93IGV4Y2VwdGlvbi4gVGhyZXcgZXhjZXB0aW9uICIgKyBl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGR1bW15KCkge30KKworICAgIGZ1
bmN0aW9uIGJ1dHRvbkNsaWNrZWQoKSB7CisgICAgICAgIC8vIHxhY3Rpb258IGFuZCB8dHlwZXwg
YXJlIHJlcXVpcmVkIHRvIGJlIHByZXNlbnQgYW5kIG5vbi1lbXB0eS4KKyAgICAgICAgc2hvdWxk
VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoe30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4
Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoZHVt
bXkpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAg
c2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQobnVsbCkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdElu
dGVudCh1bmRlZmluZWQpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMici
KTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoNSkiLCAiJ0Vycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3
IFdlYktpdEludGVudCgnc2l4JykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudChbJ3NpeCddKSIs
ICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3Vs
ZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYSc6J2InfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdElu
dGVudCh7J2FjdGlvbic6J2InfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J3R5cGUnOidi
J30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAg
c2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOicnLCAndHlwZSc6J2InfSki
LCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91
bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCAndHlwZSc6Jyd9KSIsICIn
RXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygiKG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2In
fSkpLmFjdGlvbiIsICJhIik7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiKG5ldyBX
ZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InfSkpLnR5cGUiLCAiYiIpOworCisg
ICAgICAgIC8vIFRoZXNlIHdpbGwgZ2V0IGNvbnZlcnRlZCB0byBsaXRlcmFscyAibnVsbCIgYW5k
ICJ1bmRlZmluZWQiLiBBd2t3YXJkCisgICAgICAgIC8vIG5hbWVzLCBidXQgaWRpb21hdGljIHVz
YWdlLgorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIihuZXcgV2ViS2l0SW50ZW50KHsn
YWN0aW9uJzpudWxsLCd0eXBlJzonYid9KSkuYWN0aW9uIiwgIm51bGwiKTsKKyAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCIobmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6dW5kZWZpbmVk
LCd0eXBlJzonYid9KSkuYWN0aW9uIiwgInVuZGVmaW5lZCIpOworICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoIihuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOm51bGx9
KSkudHlwZSIsICJudWxsIik7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiKG5ldyBX
ZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6dW5kZWZpbmVkfSkpLnR5cGUiLCAidW5k
ZWZpbmVkIik7CisKKyAgICAgICAgLy8gfHNlcnZpY2V8LCBpZiBwcmVzZW50LCBtdXN0IGJlIGEg
dmFsaWQgdXJsLgorICAgICAgICBzaG91bGROb3RUaHJvdygibmV3IFdlYktpdEludGVudCh7J2Fj
dGlvbic6J2EnLCd0eXBlJzonYicsJ3NlcnZpY2UnOicnfSkiKTsKKyAgICAgICAgc2hvdWxkVGhy
b3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzpu
dWxsfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAg
ICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYics
J3NlcnZpY2UnOnVuZGVmaW5lZH0pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlv
biAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24n
OidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzonbm90IGEgdXJsJ30pIiwgIidFcnJvcjogU1lOVEFY
X0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBX
ZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzondXJsOi8vYSB1
cmwnfSkiKTsKKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rp
b24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzonaHR0dHA6Ly9hIHVybCd9KSIpOworCisgICAg
ICAgIC8vIHxkYXRhfCBtdXN0IGJlIGNsb25lYWJsZS4KKyAgICAgICAgc2hvdWxkVGhyb3coIm5l
dyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdkYXRhJzp3aW5kb3d9KSIs
ICInRXJyb3I6IERBVEFfQ0xPTkVfRVJSOiBET00gRXhjZXB0aW9uIDI1JyIpOworCisgICAgICAg
IC8vIHxleHRyYXN8LCBpZiBwcmVzZW50LCBtdXN0IGJlIGEgZGljdGlvbmFyeS4KKyAgICAgICAg
c2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2In
LCdleHRyYXMnOm51bGx9KSIpOworICAgICAgICBzaG91bGROb3RUaHJvdygibmV3IFdlYktpdElu
dGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ2V4dHJhcyc6dW5kZWZpbmVkfSkiKTsKKyAg
ICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlw
ZSc6J2InLCdleHRyYXMnOicnfSkiKTsKKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJL
aXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMnOidub3QgYSBkaWN0J30p
Iik7CisgICAgICAgIHNob3VsZE5vdFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzon
YScsJ3R5cGUnOidiJywnZXh0cmFzJzo0Mn0pIik7CisgICAgICAgIHNob3VsZE5vdFRocm93KCJu
ZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzpbJ2EnLCdi
J119KSIpOworCisgICAgICAgIHZhciBzaW1wbGVJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAor
ICAgICAgICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRl
eHQvcGxhaW4iLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSJ9KTsKKyAgICAgICAgbmF2
aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoc2ltcGxlSW50ZW50KTsKKyAgICAgICAgZGVidWco
Iiogc2VudCBvYmplY3QgaW50ZW50Iik7CisKKyAgICAgICAgdmFyIGV4cGxpY2l0SW50ZW50ID0g
bmV3IFdlYktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisgICAg
ICAgICAgICAgInR5cGUiOiJ0ZXh0L3BsYWluK2V4cGxpY2l0IiwKKyAgICAgICAgICAgICAiZGF0
YSI6Im1lc3NhZ2UiLAorICAgICAgICAgICAgICJzZXJ2aWNlIiA6ICJodHRwOi8vZXhwbGljaXQu
Y29tLyJ9KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoZXhwbGljaXRJ
bnRlbnQpOworICAgICAgICBkZWJ1ZygiKiBzZW50IGV4cGxpY2l0IGludGVudCIpOworCisgICAg
ICAgIHZhciBleHRyYXNJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAgICAgICAgeyJh
Y3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxhaW4rZXh0cmFz
IiwKKyAgICAgICAgICAgICAiZGF0YSI6Im1lc3NhZ2UiLAorICAgICAgICAgICAgICJleHRyYXMi
OnsiYSI6ImIifX0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShleHRy
YXNJbnRlbnQpOworICAgICAgICBkZWJ1ZygiKiBzZW50IGludGVudCB3aXRoIGV4dHJhcyIpOwor
CisgICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CisgICAgICAgIGNo
YW5uZWwucG9ydDIub25NZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1Zygi
KiBnb3QgbWVzc2FnZSIpOworICAgICAgICB9OworICAgICAgICB2YXIgcG9ydEludGVudCA9IG5l
dyBXZWJLaXRJbnRlbnQoCisgICAgICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEiLAorICAgICAg
ICAgICAgICJ0eXBlIjoidGV4dC9wbGFpbitwb3J0IiwKKyAgICAgICAgICAgICAiZGF0YSI6Y2hh
bm5lbC5wb3J0MSwKKyAgICAgICAgICAgICAidHJhbnNmZXIiOltjaGFubmVsLnBvcnQxXX0pOwor
ICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShwb3J0SW50ZW50KTsKKyAgICAg
ICAgZGVidWcoIiogc2VudCBpbnRlbnQgd2l0aCBwb3J0Iik7CisgICAgfQorICAgIDwvc2NyaXB0
PgorICA8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InNpbXVsYXRlQnV0dG9uUHJlc3MoKSI+Cis8aW5w
dXQgdHlwZT0iYnV0dG9uIiBpZD0iYnV0dG9uIiB2YWx1ZT0iU3RhcnQgV2ViIEludGVudCIgb25t
b3VzZXVwPSJidXR0b25DbGlja2VkKCkiPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138817</attachid>
            <date>2012-04-25 08:28:12 -0700</date>
            <delta_ts>2012-04-25 09:56:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120425082811.patch</filename>
            <type>text/plain</type>
            <size>34325</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTFkODdhODZlZmM5ZjNj
OTIzNTBiOWJhNDEyMDgwZmM0MzhlMWJjNS4uZTZiOGI4OTZmOTQ4NzM1ZDcwZTgxNzQ1ODY4ZjY2
Zjg2ZTMxNjk1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGhvcGVmdWxseSBiZSB0
ZW1wb3JhcnksIGFzIHdlJ2xsIGNvbnZlcnQgdG8ganVzdCB1c2luZyB0aGlzCisgICAgICAgIGNv
bnN0cnVjdG9yLCB3aGljaCBjYW4gdGhlbiB1c2UgY29kZWdlbi4KKyAgICAgICAgQWRkZWQgbGF5
b3V0IHRlc3RzIGZvciBvYmplY3QgY29uc3RydWN0b3I6CisgICAgICAgIHdlYmludGVudHMvd2Vi
LWludGVudC1vYmotY29uc3RydWN0b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6c2VydmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6ZXh0cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlj
dGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1
Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMjUgIFl1cnkgU2VtaWto
YXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdXNl
IGNvbXBvc2l0ZSBub2RlIHByb3ZpZGVyIGZvciBkaWZmIG5vZGVzIGluIGhlYXAgcHJvZmlsZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAKaW5kZXggMDUzZDQyOWNm
YTFjOTcyM2Y5NjM2YzM3OWYzYTM5MTg1ZGQ0OTRiZS4uOGY0NDU5MGUxOGY0MjdhMjA4ZTU5MGQz
OTRmZDdmZTRiMmIyNzY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dC5jcHAKQEAgLTMzLDExICszMywxMiBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBkYXRhLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAg
ZWMgPSBTWU5UQVhfRVJSOwpAQCAtNDgsMzkgKzQ5LDcxIEBAIFBhc3NSZWZQdHI8SW50ZW50PiBJ
bnRlbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQ
YXNzCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW50ZW50KGFjdGlvbiwgdHlwZSwgZGF0YSkpOworICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheT4gY2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGVQb3J0cygmcG9ydHMs
IGVjKTsKKworICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZXh0cmFzOworICAgIEtV
Ukwgc2VydmljZVVybDsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFjdGlvbiwg
dHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2VVcmwpKTsKIH0K
IAotUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9u
LCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBk
YXRhLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMpCitQ
YXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRl
LCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBp
ZiAoYWN0aW9uLmlzRW1wdHkoKSkgeworICAgIFN0cmluZyBhY3Rpb247CisgICAgaWYgKCFvcHRp
b25zLmdldCgiYWN0aW9uIiwgYWN0aW9uKSB8fCBhY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAg
IGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICh0eXBl
LmlzRW1wdHkoKSkgeworCisgICAgU3RyaW5nIHR5cGU7CisgICAgaWYgKCFvcHRpb25zLmdldCgi
dHlwZSIsIHR5cGUpIHx8IHR5cGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VS
UjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hh
bm5lbEFycmF5PiBjaGFubmVscyA9IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0
cywgZWMpOworICAgIFN0cmluZyBzZXJ2aWNlOworICAgIEtVUkwgc2VydmljZVVybDsKKyAgICBv
cHRpb25zLmdldCgic2VydmljZSIsIHNlcnZpY2UpOworICAgIGlmICghc2VydmljZS5pc0VtcHR5
KCkpIHsKKyAgICAgIHNlcnZpY2VVcmwgPSBLVVJMKEtVUkwoKSwgc2VydmljZSk7CisgICAgICBp
ZiAoIXNlcnZpY2VVcmwuaXNWYWxpZCgpKSB7CisgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwor
ICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW50ZW50KGFjdGlvbiwgdHlwZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgpKSk7Ci19
CisgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0czsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFu
bmVsQXJyYXk+IGNoYW5uZWxzOworICAgIGlmIChvcHRpb25zLmdldCgidHJhbnNmZXIiLCBwb3J0
cykpCisgICAgICAgIGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMoJnBv
cnRzLCBlYyk7CisKKyAgICBTY3JpcHRWYWx1ZSBkYXRhVmFsdWU7CisgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZERhdGE7CisgICAgaWYgKG9wdGlvbnMuZ2V0KCJk
YXRhIiwgZGF0YVZhbHVlKSkgeworICAgICAgICBib29sIGRpZFRocm93ID0gZmFsc2U7CisgICAg
ICAgIHNlcmlhbGl6ZWREYXRhID0gZGF0YVZhbHVlLnNlcmlhbGl6ZShzY3JpcHRTdGF0ZSwgJnBv
cnRzLCAwLCBkaWRUaHJvdyk7CisgICAgICAgIGlmIChkaWRUaHJvdykgeworICAgICAgICAgICAg
ZWMgPSBEQVRBX0NMT05FX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgfQogCi1JbnRlbnQ6OkludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5n
JiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSkKLSAgICA6IG1f
YWN0aW9uKGFjdGlvbikKLSAgICAsIG1fdHlwZSh0eXBlKQotewotICAgIGlmIChkYXRhKQotICAg
ICAgICBtX2RhdGEgPSBkYXRhOwotICAgIGVsc2UKLSAgICAgICAgbV9kYXRhID0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKTsKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IGV4dHJhczsKKyAgICBEaWN0aW9uYXJ5IGV4dHJhc0RpY3Rpb25hcnk7CisgICAgaWYgKG9w
dGlvbnMuZ2V0KCJleHRyYXMiLCBleHRyYXNEaWN0aW9uYXJ5KSkKKyAgICAgICAgZXh0cmFzRGlj
dGlvbmFyeS5nZXRPd25Qcm9wZXJ0aWVzQXNTdHJpbmdIYXNoTWFwKGV4dHJhcyk7CisKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIHNlcmlhbGl6ZWREYXRhLnJl
bGVhc2UoKSwgY2hhbm5lbHMucmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2VVcmwpKTsKIH0KIAot
SW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2Fn
ZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKQorSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5PiBwb3J0cywKKyAgICAgICAgICAgICAgIGNvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mIGV4dHJhcywgY29uc3QgS1VSTCYgc2VydmljZSkKICAgICA6IG1fYWN0aW9uKGFjdGlv
bikKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9wb3J0cyhwb3J0cykKKyAgICAsIG1fc2Vy
dmljZShzZXJ2aWNlKQorICAgICwgbV9leHRyYXMoZXh0cmFzKQogewogICAgIGlmIChkYXRhKQog
ICAgICAgICBtX2RhdGEgPSBkYXRhOwpAQCAtODgsMjYgKzEyMSw2IEBAIEludGVudDo6SW50ZW50
KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjCiAgICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZh
bHVlKCk7CiB9CiAKLWNvbnN0IFN0cmluZyYgSW50ZW50OjphY3Rpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtX2FjdGlvbjsKLX0KLQotY29uc3QgU3RyaW5nJiBJbnRlbnQ6OnR5cGUoKSBjb25z
dAotewotICAgIHJldHVybiBtX3R5cGU7Ci19Ci0KLVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogSW50
ZW50OjpkYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLmdldCgpOwotfQotCi1NZXNz
YWdlUG9ydENoYW5uZWxBcnJheSogSW50ZW50OjptZXNzYWdlUG9ydHMoKSBjb25zdAotewotICAg
IHJldHVybiBtX3BvcnRzLmdldCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ludGVudHMvSW50ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMv
SW50ZW50LmgKaW5kZXggMzNlZjY5ZTA0NDEwNTk2ZTI0MTUzMzQ4NWVmYmM5ZjVjNGU2YjZkNC4u
NDUwOTA5NjUyZTQ3YjUyNTI0YWMwZjZiNzViMGIyYzk0MGYwNzAwMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaApAQCAtMzEsNiArMzEsOCBAQAogCiAjaWYgRU5BQkxF
KFdFQl9JTlRFTlRTKQogCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5l
bC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC00MSwzMiArNDMsMzcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTY3JpcHRTdGF0ZTsKIGNsYXNzIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgSW50ZW50
IDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW50PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gZGF0YSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSYgcG9ydHMsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShTY3JpcHRTdGF0ZSosIGNv
bnN0IERpY3Rpb25hcnkmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBjb25zdCBTdHJpbmcmIGFj
dGlvbigpIGNvbnN0OwotICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0OwotICAgIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgYWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9hY3Rpb247IH0KKyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEo
KSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KIAotICAgIGludCBpZGVudGlmaWVyKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRJZGVudGlmaWVyKGludCk7CisgICAgTWVzc2FnZVBvcnRDaGFu
bmVsQXJyYXkqIG1lc3NhZ2VQb3J0cygpIGNvbnN0IHsgcmV0dXJuIG1fcG9ydHMuZ2V0KCk7IH0K
KyAgICBjb25zdCBLVVJMJiBzZXJ2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2aWNlOyB9Cisg
ICAgY29uc3QgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZXh0cmFzKCkgY29uc3QgeyBy
ZXR1cm4gbV9leHRyYXM7IH0KIAotICAgIE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBtZXNzYWdl
UG9ydHMoKSBjb25zdDsKK3Byb3RlY3RlZDoKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rp
b24sIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBv
cnRzLAorICAgICAgICAgICBjb25zdCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRy
YXMsIGNvbnN0IEtVUkwmIHNlcnZpY2UpOwogCiBwcml2YXRlOgotICAgIEludGVudChjb25zdCBT
dHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gZGF0YSk7Ci0gICAgSW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25z
dCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cyk7CiAKICAgICBTdHJpbmcg
bV9hY3Rpb247CiAgICAgU3RyaW5nIG1fdHlwZTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBtX2RhdGE7CiAgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX3Bv
cnRzOworICAgIEtVUkwgbV9zZXJ2aWNlOworICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gbV9leHRyYXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCmluZGV4IGVmMDgyNTA3MzRmZmM3OWIxOTQ5ODBl
YzgyNDNlZWIzNDQ4YWM1MmUuLjkyNjU3YjRlNmNlNjBmMDc5OTUyNDY0MDE2MzY1Yjg3MDkxNDk1
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCkBAIC0yNiw2
ICsyNiw3IEBACiBtb2R1bGUgd2luZG93IHsKICAgaW50ZXJmYWNlIFsKICAgICAgIENvbmRpdGlv
bmFsPVdFQl9JTlRFTlRTLAorICAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCiAgICAgICBDb25zdHJ1
Y3RvcihpbiBET01TdHJpbmcgYWN0aW9uLCBpbiBET01TdHJpbmcgdHlwZSwgaW4gW09wdGlvbmFs
PURlZmF1bHRJc051bGxTdHJpbmcsIFRyYW5zZmVyTGlzdD10cmFuc2Zlckxpc3RdIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSBkYXRhLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBBcnJh
eSB0cmFuc2Zlckxpc3QpLAogICAgICAgQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24KICAgXSBJ
bnRlbnQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDViMjg4Zjg4N2Q0ZGRlNDY0MGEwMTI3MDg5MDA0
NmJiODg2YTc1ZTIuLjI4OTY3OTU1MWEwY2YzNDZlMzI5NTEyNzg0ZWU3YzQzZWY2NzU3MmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTIyODIsNiArMjI4Miw3IEBACiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SW50MTZBcnJheUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEludDMyQXJyYXlDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhJbnQ4QXJyYXlDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEphdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAKaW5kZXggZmQ0ZGEx
ZmIwMDZjZmNmNjQxODlmODIzOWQ4ZTZjYjIwZjFjNmFlYS4uMTBhYWZlOGRjNmMyODFlZmU3MWQ0
OWZiOTJmNGJiOTU2NzU4NzUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvRGljdGlvbmFyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlv
bmFyeS5jcHAKQEAgLTQxMiw0ICs0MTIsNDQgQEAgYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3Qg
U3RyaW5nJiBrZXksIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+JiB2YWwKIAog
I2VuZGlmCiAKK2Jvb2wgRGljdGlvbmFyeTo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBEaWN0aW9u
YXJ5JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOwor
ICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICh2OFZhbHVlLT5Jc09iamVjdCgpKQorICAgICAgICB2YWx1ZSA9IERpY3Rpb25hcnko
djhWYWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIERpY3Rpb25hcnk6Omdl
dE93blByb3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAoV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgaGFzaE1hcCkgY29uc3QKK3sKKyAgICBpZiAoIWlzT2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb3B0aW9ucyA9IG1fb3B0aW9u
cy0+VG9PYmplY3QoKTsKKyAgICBpZiAob3B0aW9ucy5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHByb3BlcnRpZXMgPSBvcHRpb25z
LT5HZXRPd25Qcm9wZXJ0eU5hbWVzKCk7CisgICAgaWYgKHByb3BlcnRpZXMuSXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgcHJvcGVy
dGllcy0+TGVuZ3RoKCk7ICsraSkgeworICAgICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4ga2V5
ID0gcHJvcGVydGllcy0+R2V0KGkpLT5Ub1N0cmluZygpOworICAgICAgICBpZiAoIW9wdGlvbnMt
PkhhcyhrZXkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUgPSBvcHRpb25zLT5HZXQoa2V5KTsKKyAgICAgICAgU3RyaW5nIHN0cmlu
Z0tleSA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoa2V5KTsKKyAgICAgICAgU3RyaW5nIHN0cmlu
Z1ZhbHVlID0gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgICAgIGlmICghc3Ry
aW5nS2V5LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGhhc2hNYXAuc2V0KHN0cmluZ0tleSwgc3Ry
aW5nVmFsdWUpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9u
YXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgKaW5kZXggZTU4
ODkwZTU5ZmIyNTIxNjUyMDcxY2Y4NWY2MDE1OTEzMDE5ODcwYS4uYzRjMzNiMWJiMjA4ZTk2NDBk
ZmZiODQwNmQ4OTNiNDEyODMyNzllZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvRGljdGlvbmFyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rp
b25hcnkuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KIApAQCAtODMsNiArODQsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBnZXQo
Y29uc3QgU3RyaW5nJiwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mKSBjb25z
dDsKICNlbmRpZgogICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRvbWljU3Ry
aW5nPiYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIERpY3Rpb25hcnkmKSBj
b25zdDsKKyAgICBib29sIGdldE93blByb3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAoV1RGOjpIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiYpIGNvbnN0OwogCiAgICAgYm9vbCBnZXRXaXRoVW5kZWZpbmVk
T3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiwgU3RyaW5nJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcAppbmRleCBlY2MzNjczNjJhODM4YjdmOTg5
MjhlZDA1OTlkNjM3NjlmMDk3Y2I3Li4zMWJjZDIzZWU5YTM3ZDcwZmRlNTE3YjQyOWE0NTgwZTFk
M2YxMzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwCkBA
IC0zMiw5ICszMiwxMSBAQAogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAKICNpbmNsdWRlICJJ
bnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNj
cmlwdFNjb3BlLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDQsNiArNDYsMTMgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXQK
ICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgpKTsKIH0K
IAorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxp
emUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBv
cnRzLCBBcnJheUJ1ZmZlckFycmF5KiBhcnJheUJ1ZmZlcnMsIGJvb2wmIGRpZFRocm93KQorewor
ICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKKyAgICByZXR1cm4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgpLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVy
cywgZGlkVGhyb3cpOworfQorCiBTY3JpcHRWYWx1ZSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUo
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQog
ewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRWYWx1ZS5oCmluZGV4IDkxMzU2ZDRjN2YxYmM0NWE3NTE1NzQ3OWYyNjcx
NzIxMzdjMDJmNjQuLmZhYTFmNjM4ZWE3NjBhY2ZiMjNkODQ2YzliZjRmZmJjNTdiYWIyZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaApAQCAtMzYsMTUgKzM2LDI0
IEBACiAKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmbmRlZiBO
REVCVUcKICNpbmNsdWRlICJWOFByb3h5LmgiICAvLyBmb3IgcmVnaXN0ZXIgYW5kIHVucmVnaXN0
ZXIgZ2xvYmFsIGhhbmRsZXMuCiAjZW5kaWYKIAorbmFtZXNwYWNlIFdURiB7CitjbGFzcyBBcnJh
eUJ1ZmZlcjsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnNwZWN0b3JWYWx1
ZTsKK2NsYXNzIE1lc3NhZ2VQb3J0OwogY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwordHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0PiwgMT4gTWVzc2FnZVBvcnRBcnJheTsKK3R5
cGVkZWYgVmVjdG9yPFJlZlB0cjxXVEY6OkFycmF5QnVmZmVyPiwgMT4gQXJyYXlCdWZmZXJBcnJh
eTsKIAogY2xhc3MgU2NyaXB0VmFsdWUgewogcHVibGljOgpAQCAtMTMxLDYgKzE0MCw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Vy
aWFsaXplKFNjcmlwdFN0YXRlKik7CisgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIE1lc3NhZ2VQb3J0QXJyYXkqLCBBcnJheUJ1ZmZl
ckFycmF5KiwgYm9vbCYpOwogICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZShTY3Jp
cHRTdGF0ZSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSopOwogCiAgICAgdm9pZCBjbGVhcigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRD
b25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTg1OTkwMTRkNmEwZjFlNGVmNjQ0NWM2ZDFmMDMy
MmY1OTk3YzFmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gKCJH
b29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkludGVudC5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdNYWNy
b3MuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOEludGVudC5oIgor
I2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVk
ZSA8d3RmL0FycmF5QnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4SW50ZW50Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uSW50ZW50LkNvbnN0cnVjdG9yIik7
CisKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5j
dGlvbi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6
Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAg
ICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5
cGVFcnJvcik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAvLyBVc2Ug
dGhlIGRpY3Rpb25hcnkgY29uc3RydWN0b3IuIFRoaXMgYmxvY2sgd2lsbCByZXR1cm4gaWYgdGhl
CisgICAgICAgIC8vIGFyZ3VtZW50IGlzbid0IGEgdmFsaWQgRGljdGlvbmFyeS4KKyAgICAgICAg
RVhDRVBUSU9OX0JMT0NLKERpY3Rpb25hcnksIG9wdGlvbnMsIGFyZ3NbMF0pOworICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPEludGVudD4gaW1wbCA9IEludGVu
dDo6Y3JlYXRlKFNjcmlwdFN0YXRlOjpjdXJyZW50KCksIG9wdGlvbnMsIGVjKTsKKyAgICAgICAg
aWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOworCisgICAgICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgICAgIFY4
RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCAmaW5mbywgaW1wbC5nZXQoKSk7Cisg
ICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGltcGwucmVsZWFz
ZSgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKKyAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
U1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBhY3Rp
b24sIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkp
OworICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8
PiwgdHlwZSwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZp
bmVkKSk7CisgICAgTWVzc2FnZVBvcnRBcnJheSBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0
OworICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdDsKKyAg
ICBpZiAoYXJncy5MZW5ndGgoKSA+IDMpIHsKKyAgICAgICAgaWYgKCFleHRyYWN0VHJhbnNmZXJh
YmxlcyhhcmdzWzNdLCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCBhcnJheUJ1ZmZlckFy
cmF5VHJhbnNmZXJMaXN0KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBu
b3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB9Cisg
ICAgYm9vbCBkYXRhRGlkVGhyb3cgPSBmYWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1syXSwgJm1l
c3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsICZhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0
LCBkYXRhRGlkVGhyb3cpOworICAgIGlmIChkYXRhRGlkVGhyb3cpCisgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKERBVEFfQ0xPTkVfRVJSKTsKKworICAgIFJlZlB0cjxJbnRlbnQ+IGltcGwgPSBJ
bnRlbnQ6OmNyZWF0ZShhY3Rpb24sIHR5cGUsIGRhdGEsIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zl
ckxpc3QsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsK
KworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7Cisg
ICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHdyYXBwZXIsICZpbmZvLCBpbXBsLmdldCgp
KTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLnJlbGVh
c2UoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKSk7CisgICAgcmV0
dXJuIHdyYXBwZXI7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaAppbmRleCA3M2E2MjEzMmFkNjMzOWM1NmQ0NTYz
ZTQyNGRiNmY1OGRmZDAzMzgyLi5jYzA4MGFkOTljNTQ5ZmUyZjI1MjIyODUwYTdiMDhjNjhmN2Qw
ZDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgogI2luY2x1ZGUgInBs
YXRmb3JtL1dlYlByaXZhdGVQdHIuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIK
KyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0
b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBJbnRlbnQ7IH0KQEAgLTYzLDYgKzY0
LDE2IEBAIHB1YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBhY3Rpb24oKSBjb25z
dDsKICAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyB0eXBlKCkgY29uc3Q7CiAgICAgV0VCS0lU
X0VYUE9SVCBXZWJTdHJpbmcgZGF0YSgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgV2ViVVJM
IHNlcnZpY2UoKSBjb25zdDsKKworICAgIC8vIFJldHJpZXZlIGEgbGlzdCBvZiB0aGUgbmFtZXMg
b2YgZXh0cmEgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgIC8vIGludGVudC4KKyAg
ICBXRUJLSVRfRVhQT1JUIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGV4dHJhc05hbWVzKCkgY29uc3Q7
CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYW4gZXh0cmEgbWV0YWRhdGEgZWxlbWVu
dC4gVGhlIGFyZ3VtZW50IHNob3VsZAorICAgIC8vIGJlIG9uZSBvZiB0aGUgbmFtZXMgcmV0cmll
dmVkIHdpdGggfGV4dHJhc05hbWVzfC4gUmV0dXJucyBhbiBlbXB0eQorICAgIC8vIHN0cmluZyBp
ZiB0aGUgbmFtZSBpcyBpbnZhbGlkLgorICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGV4dHJh
c1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogCiAgICAgLy8gQ2FsbGVyIHRha2VzIG93
bmVyc2hpcCBvZiB0aGUgcG9ydHMuCiAgICAgV0VCS0lUX0VYUE9SVCBXZWJNZXNzYWdlUG9ydENo
YW5uZWxBcnJheSogbWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCmluZGV4IDhhN2Q2YWFjNTQzYmQ5OTk5OWI4
ZmE3OTg0M2EzNDAzYWU1NjdjOWUuLjgzZTgzNjFkY2IyMjRhYzdmNmM5NDVlMDdjNDE2NTQwZDIx
Y2Q5ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcApAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgIkludGVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTEwMyw2ICsx
MDQsMTUgQEAgV2ViU3RyaW5nIFdlYkludGVudDo6ZGF0YSgpIGNvbnN0CiAjZW5kaWYKIH0KIAor
V2ViVVJMIFdlYkludGVudDo6c2VydmljZSgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9JTlRF
TlRTKQorICAgIHJldHVybiBXZWJVUkwobV9wcml2YXRlLT5zZXJ2aWNlKCkpOworI2Vsc2UKKyAg
ICByZXR1cm4gV2ViVVJMKCk7CisjZW5kaWYKK30KKwogV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJy
YXkqIFdlYkludGVudDo6bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogewogICAg
IC8vIE5vdGU6IHNlZSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1Jl
bW90ZS4KQEAgLTEyMCw0ICsxMzAsMzAgQEAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdl
YkludGVudDo6bWVzc2FnZVBvcnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogICAgIHJldHVybiB3
ZWJDaGFubmVsczsKIH0KIAorV2ViVmVjdG9yPFdlYlN0cmluZz4gV2ViSW50ZW50OjpleHRyYXNO
YW1lcygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIHNpemVfdCBudW1F
eHRyYXMgPSBtX3ByaXZhdGUtPmV4dHJhcygpLnNpemUoKTsKKyAgICBXZWJWZWN0b3I8V2ViU3Ry
aW5nPiBrZXlTdHJpbmdzKG51bUV4dHJhcyk7CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3I6OktleXMga2V5SXRlciA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCku
YmVnaW4oKS5rZXlzKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGtleUl0ZXIgIT0gbV9wcml2YXRl
LT5leHRyYXMoKS5lbmQoKS5rZXlzKCk7ICsra2V5SXRlciwgKytpKQorICAgICAgICBrZXlTdHJp
bmdzW2ldID0gKmtleUl0ZXI7CisgICAgcmV0dXJuIGtleVN0cmluZ3M7CisjZWxzZQorICAgIHJl
dHVybiBXZWJWZWN0b3I8V2ViU3RyaW5nPigpOworI2VuZGlmCit9CisKK1dlYlN0cmluZyBXZWJJ
bnRlbnQ6OmV4dHJhc1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyNpZiBF
TkFCTEUoV0VCX0lOVEVOVFMpCisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgdmFsID0gbV9wcml2YXRlLT5leHRyYXMoKS5maW5kKG5hbWUpOworICAgIGlm
ICh2YWwgPT0gbV9wcml2YXRlLT5leHRyYXMoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0
cmluZygpOworICAgIHJldHVybiB2YWwtPnNlY29uZDsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlN0
cmluZygpOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IDZmZjk1YzU2MjQxNzA4
YmNhMzMxY2IwYzJjMmRjYTlkN2RlODBkMWIuLmQ4NDViN2VjMDUwN2Y5NGNkMGY3Mzc0ZWE2NTZl
MjhkNGY1YWIyOTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlZpZXdIb3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3
SG9zdC5jcHAKQEAgLTEzMzUsNiArMTMzNSwxMyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpkaXNwYXRj
aEludGVudChXZWJGcmFtZSogc291cmNlLCBjb25zdCBXZWJJbnRlbnRSZXF1ZXN0JiByZXF1ZQog
ICAgICAgICAgICAgKCpwb3J0cylbaV0tPmRlc3Ryb3koKTsKICAgICAgICAgZGVsZXRlIHBvcnRz
OwogICAgIH0KKyAgICBpZiAoIXJlcXVlc3QuaW50ZW50KCkuc2VydmljZSgpLmlzRW1wdHkoKSkK
KyAgICAgICAgcHJpbnRmKCJFeHBsaWNpdCBpbnRlbnQgc2VydmljZTogJXNcbiIsIHJlcXVlc3Qu
aW50ZW50KCkuc2VydmljZSgpLnNwZWMoKS5kYXRhKCkpOworICAgIFdlYlZlY3RvcjxXZWJTdHJp
bmc+IGV4dHJhcyA9IHJlcXVlc3QuaW50ZW50KCkuZXh0cmFzTmFtZXMoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGV4dHJhcy5zaXplKCk7ICsraSkgeworICAgICAgICBwcmludGYoIkV4
dHJhc1slc10gPSAlc1xuIiwgZXh0cmFzW2ldLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAg
ICByZXF1ZXN0LmludGVudCgpLmV4dHJhc1ZhbHVlKGV4dHJhc1tpXSkudXRmOCgpLmRhdGEoKSk7
CisgICAgfQogfQogCiAvLyBQdWJsaWMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKaW5kZXggNzY2Y2ZkMGE0
ZDA0N2I1NzY0Yzg4MzNiOTA0Y2FkZjVjOWE0YzU2Ny4uYmZmMGE2NmM0MmY3ZDM3NDNlMWYwMjM2
YmM0NjFiYmY0MjQ4NDEzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWIt
aW50ZW50cy1hcGktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2Vi
LWludGVudHMtYXBpLWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDYgQEAKIFBBU1MgbmF2aWdhdG9y
LndlYmtpdFN0YXJ0QWN0aXZpdHkgaXMgZGVmaW5lZC4KIFBBU1MgdmFyIGludGVudCA9IG5ldyBX
ZWJLaXRJbnRlbnQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3Vt
ZW50cy4KLVBBU1MgbmV3IFdlYktpdEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdhJykgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBu
ZXcgV2ViS2l0SW50ZW50KCcnLCcnLCcnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9F
UlI6IERPTSBFeGNlcHRpb24gMTIuCiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJykg
dGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFT
UyBuZXcgV2ViS2l0SW50ZW50KCcnLCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5U
QVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50
ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWlu
dGVudHMtYXBpLmh0bWwKaW5kZXggMWRlMTdhMDk2ZTFlODE1ZmZiYmFhMzhmMTczYWQ3NWQ1ZTEz
NTVkMy4uMjYyY2EwZGEwZmMxNDE2M2U3MTBhODgzNjlkOWUxMzc2MzMwNGZjMyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCkBAIC04LDcgKzgsNyBAQAog
ICAgICAgc2hvdWxkQmVEZWZpbmVkKCJuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eSIpOwog
ICAgICAgCiAgICAgICBzaG91bGRUaHJvdygidmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQo
KSIsICInVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTs7Ci0gICAgICBzaG91bGRU
aHJvdygibmV3IFdlYktpdEludGVudCgnYScpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJn
dW1lbnRzJyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJ2EnKSIsICIn
RXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJv
dygibmV3IFdlYktpdEludGVudCgnJywnJywnJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00g
RXhjZXB0aW9uIDEyJyIpOwogICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycs
J2InLCdjJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAg
ICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJycsJ2MnKSIsICInRXJyb3I6IFNZ
TlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmYyOWEyOTViY2Q1Y2M2MzJhZTZiZDRjNmMxYmEwNGQ2MTlkMzE0MQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2Jq
LWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ2IEBACitSZWNlaXZlZCBXZWIg
SW50ZW50OiBhY3Rpb249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4KK1JlY2VpdmVkIFdlYiBJbnRl
bnQ6IGFjdGlvbj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbitleHBsaWNpdAorRXhwbGljaXQgaW50
ZW50IHNlcnZpY2U6IGh0dHA6Ly9leHBsaWNpdC5jb20vCitSZWNlaXZlZCBXZWIgSW50ZW50OiBh
Y3Rpb249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4rZXh0cmFzCitFeHRyYXNbYV0gPSBiCitSZWNl
aXZlZCBXZWIgSW50ZW50OiBhY3Rpb249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4rcG9ydAorSGF2
ZSAxIHBvcnRzCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKK1BBU1MgbmV3IFdlYktpdEludGVudCh7fSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5U
QVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KGR1bW15KSB0
aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNT
IG5ldyBXZWJLaXRJbnRlbnQobnVsbCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHVuZGVmaW5lZCkgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBu
ZXcgV2ViS2l0SW50ZW50KDUpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9N
IEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudCgnc2l4JykgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0
SW50ZW50KFsnc2l4J10pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4
Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2EnOidiJ30pIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktp
dEludGVudCh7J2FjdGlvbic6J2InfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsndHlwZSc6J2InfSkg
dGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFT
UyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonJywgJ3R5cGUnOidiJ30pIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktp
dEludGVudCh7J2FjdGlvbic6J2EnLCAndHlwZSc6Jyd9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIChuZXcgV2ViS2l0SW50ZW50KHsn
YWN0aW9uJzonYScsJ3R5cGUnOidiJ30pKS5hY3Rpb24gaXMgImEiCitQQVNTIChuZXcgV2ViS2l0
SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJ30pKS50eXBlIGlzICJiIgorUEFTUyAobmV3
IFdlYktpdEludGVudCh7J2FjdGlvbic6bnVsbCwndHlwZSc6J2InfSkpLmFjdGlvbiBpcyAibnVs
bCIKK1BBU1MgKG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOnVuZGVmaW5lZCwndHlwZSc6J2In
fSkpLmFjdGlvbiBpcyAidW5kZWZpbmVkIgorUEFTUyAobmV3IFdlYktpdEludGVudCh7J2FjdGlv
bic6J2EnLCd0eXBlJzpudWxsfSkpLnR5cGUgaXMgIm51bGwiCitQQVNTIChuZXcgV2ViS2l0SW50
ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOnVuZGVmaW5lZH0pKS50eXBlIGlzICJ1bmRlZmluZWQi
CitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNl
JzonJ30pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsn
YWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6bnVsbH0pIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVu
dCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ3NlcnZpY2UnOnVuZGVmaW5lZH0pIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdl
YktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ3NlcnZpY2UnOidub3QgYSB1cmwn
fSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgor
UEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6
J3VybDovL2EgdXJsJ30pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuZXcgV2ViS2l0
SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6J2h0dHRwOi8vYSB1cmwn
fSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rp
b24nOidhJywndHlwZSc6J2InLCdkYXRhJzp3aW5kb3d9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IERBVEFfQ0xPTkVfRVJSOiBET00gRXhjZXB0aW9uIDI1LgorUEFTUyBuZXcgV2ViS2l0SW50ZW50
KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzpudWxsfSkgZGlkIG5vdCB0aHJvdyBl
eGNlcHRpb24uCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2In
LCdleHRyYXMnOnVuZGVmaW5lZH0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuZXcg
V2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzonJ30pIGRpZCBu
b3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScs
J3R5cGUnOidiJywnZXh0cmFzJzonbm90IGEgZGljdCd9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlv
bi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ2V4dHJh
cyc6NDJ9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7
J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ2V4dHJhcyc6WydhJywnYiddfSkgZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uCisqIHNlbnQgb2JqZWN0IGludGVudAorKiBzZW50IGV4cGxpY2l0IGludGVu
dAorKiBzZW50IGludGVudCB3aXRoIGV4dHJhcworKiBzZW50IGludGVudCB3aXRoIHBvcnQKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3Ry
dWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0
cnVjdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQwNjYyMmJiMTdmYjdjOTA1MjVhM2RiMWMzMTBlMzYw
ODNjOGRjNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWlu
dGVudHMtb2JqLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTAsMCArMSwxMDIgQEAKKzxodG1sPgorICA8
aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViLWludGVudHMtdGVz
dGluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBzaG91bGROb3RU
aHJvdyhleHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGV2YWwo
ZXhwcmVzc2lvbik7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKGV4cHJlc3Npb24gKyAiIGRpZCBu
b3QgdGhyb3cgZXhjZXB0aW9uLiIpOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoZXhwcmVzc2lvbiArICIgc2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb24uIFRo
cmV3IGV4Y2VwdGlvbiAiICsgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBk
dW1teSgpIHt9CisKKyAgICBmdW5jdGlvbiBidXR0b25DbGlja2VkKCkgeworICAgICAgICAvLyB8
YWN0aW9ufCBhbmQgfHR5cGV8IGFyZSByZXF1aXJlZCB0byBiZSBwcmVzZW50IGFuZCBub24tZW1w
dHkuCisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHt9KSIsICInRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJu
ZXcgV2ViS2l0SW50ZW50KGR1bW15KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRp
b24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KG51bGwpIiwg
IidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxk
VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQodW5kZWZpbmVkKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6
IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50
ZW50KDUpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAg
ICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJ3NpeCcpIiwgIidFcnJvcjogU1lOVEFY
X0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJL
aXRJbnRlbnQoWydzaXgnXSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEy
JyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J2EnOidiJ30pIiwg
IidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxk
VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidiJ30pIiwgIidFcnJvcjogU1lOVEFY
X0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJL
aXRJbnRlbnQoeyd0eXBlJzonYid9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRp
b24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9u
JzonJywgJ3R5cGUnOidiJ30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
MiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidh
JywgJ3R5cGUnOicnfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIp
OworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIihuZXcgV2ViS2l0SW50ZW50KHsnYWN0
aW9uJzonYScsJ3R5cGUnOidiJ30pKS5hY3Rpb24iLCAiYSIpOworICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoIihuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJ30p
KS50eXBlIiwgImIiKTsKKworICAgICAgICAvLyBUaGVzZSB3aWxsIGdldCBjb252ZXJ0ZWQgdG8g
bGl0ZXJhbHMgIm51bGwiIGFuZCAidW5kZWZpbmVkIi4gQXdrd2FyZAorICAgICAgICAvLyBuYW1l
cywgYnV0IGlkaW9tYXRpYyB1c2FnZS4KKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCIo
bmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6bnVsbCwndHlwZSc6J2InfSkpLmFjdGlvbiIsICJu
dWxsIik7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiKG5ldyBXZWJLaXRJbnRlbnQo
eydhY3Rpb24nOnVuZGVmaW5lZCwndHlwZSc6J2InfSkpLmFjdGlvbiIsICJ1bmRlZmluZWQiKTsK
KyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCIobmV3IFdlYktpdEludGVudCh7J2FjdGlv
bic6J2EnLCd0eXBlJzpudWxsfSkpLnR5cGUiLCAibnVsbCIpOworICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoIihuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOnVuZGVm
aW5lZH0pKS50eXBlIiwgInVuZGVmaW5lZCIpOworCisgICAgICAgIC8vIHxzZXJ2aWNlfCwgaWYg
cHJlc2VudCwgbXVzdCBiZSBhIHZhbGlkIHVybC4KKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5l
dyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzonJ30pIik7
CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5
cGUnOidiJywnc2VydmljZSc6bnVsbH0pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rp
b24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzp1bmRlZmluZWR9KSIsICInRXJyb3I6IFNZTlRB
WF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2Vi
S2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6J25vdCBhIHVybCd9
KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNo
b3VsZE5vdFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywn
c2VydmljZSc6J3VybDovL2EgdXJsJ30pIik7CisgICAgICAgIHNob3VsZE5vdFRocm93KCJuZXcg
V2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6J2h0dHRwOi8v
YSB1cmwnfSkiKTsKKworICAgICAgICAvLyB8ZGF0YXwgbXVzdCBiZSBjbG9uZWFibGUuCisgICAg
ICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidi
JywnZGF0YSc6d2luZG93fSkiLCAiJ0Vycm9yOiBEQVRBX0NMT05FX0VSUjogRE9NIEV4Y2VwdGlv
biAyNSciKTsKKworICAgICAgICAvLyB8ZXh0cmFzfCwgaWYgcHJlc2VudCwgbXVzdCBiZSBhIGRp
Y3Rpb25hcnkuCisgICAgICAgIHNob3VsZE5vdFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0
aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzpudWxsfSkiKTsKKyAgICAgICAgc2hvdWxkTm90
VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMn
OnVuZGVmaW5lZH0pIik7CisgICAgICAgIHNob3VsZE5vdFRocm93KCJuZXcgV2ViS2l0SW50ZW50
KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzonJ30pIik7CisgICAgICAgIHNob3Vs
ZE5vdFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0
cmFzJzonbm90IGEgZGljdCd9KSIpOworICAgICAgICBzaG91bGROb3RUaHJvdygibmV3IFdlYktp
dEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ2V4dHJhcyc6NDJ9KSIpOworICAgICAg
ICBzaG91bGROb3RUaHJvdygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzon
YicsJ2V4dHJhcyc6WydhJywnYiddfSkiKTsKKworICAgICAgICB2YXIgc2ltcGxlSW50ZW50ID0g
bmV3IFdlYktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisgICAg
ICAgICAgICAgInR5cGUiOiJ0ZXh0L3BsYWluIiwKKyAgICAgICAgICAgICAiZGF0YSI6Im1lc3Nh
Z2UifSk7CisgICAgICAgIG5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5KHNpbXBsZUludGVu
dCk7CisgICAgICAgIGRlYnVnKCIqIHNlbnQgb2JqZWN0IGludGVudCIpOworCisgICAgICAgIHZh
ciBleHBsaWNpdEludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAgICAgICAgICB7ImFjdGlv
biI6ImFjdGlvbjEiLAorICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9wbGFpbitleHBsaWNpdCIs
CisgICAgICAgICAgICAgImRhdGEiOiJtZXNzYWdlIiwKKyAgICAgICAgICAgICAic2VydmljZSIg
OiAiaHR0cDovL2V4cGxpY2l0LmNvbS8ifSk7CisgICAgICAgIG5hdmlnYXRvci53ZWJraXRTdGFy
dEFjdGl2aXR5KGV4cGxpY2l0SW50ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBleHBsaWNp
dCBpbnRlbnQiKTsKKworICAgICAgICB2YXIgZXh0cmFzSW50ZW50ID0gbmV3IFdlYktpdEludGVu
dCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisgICAgICAgICAgICAgInR5cGUi
OiJ0ZXh0L3BsYWluK2V4dHJhcyIsCisgICAgICAgICAgICAgImRhdGEiOiJtZXNzYWdlIiwKKyAg
ICAgICAgICAgICAiZXh0cmFzIjp7ImEiOiJiIn19KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtp
dFN0YXJ0QWN0aXZpdHkoZXh0cmFzSW50ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBpbnRl
bnQgd2l0aCBleHRyYXMiKTsKKworICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hh
bm5lbCgpOworICAgICAgICBjaGFubmVsLnBvcnQyLm9uTWVzc2FnZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgZGVidWcoIiogZ290IG1lc3NhZ2UiKTsKKyAgICAgICAgfTsKKyAgICAgICAg
dmFyIHBvcnRJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAorICAgICAgICAgICAgeyJhY3Rpb24i
OiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRleHQvcGxhaW4rcG9ydCIsCisgICAg
ICAgICAgICAgImRhdGEiOmNoYW5uZWwucG9ydDEsCisgICAgICAgICAgICAgInRyYW5zZmVyIjpb
Y2hhbm5lbC5wb3J0MV19KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHko
cG9ydEludGVudCk7CisgICAgICAgIGRlYnVnKCIqIHNlbnQgaW50ZW50IHdpdGggcG9ydCIpOwor
ICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgPC9oZWFkPgorPGJvZHkgb25sb2FkPSJzaW11bGF0ZUJ1
dHRvblByZXNzKCkiPgorPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9ImJ1dHRvbiIgdmFsdWU9IlN0
YXJ0IFdlYiBJbnRlbnQiIG9ubW91c2V1cD0iYnV0dG9uQ2xpY2tlZCgpIj4KKzxzY3JpcHQgc3Jj
PSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138827</attachid>
            <date>2012-04-25 09:56:49 -0700</date>
            <delta_ts>2012-04-25 10:43:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120425095648.patch</filename>
            <type>text/plain</type>
            <size>34418</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTFkODdhODZlZmM5ZjNj
OTIzNTBiOWJhNDEyMDgwZmM0MzhlMWJjNS4uNzY0NDBhYjRiYmE1YTc0ODJjMWRlODNlOTliODBh
N2Q4OTY2OGY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgSW50ZW50IG9iamVjdC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgaG9wZWZ1bGx5IGJl
IHRlbXBvcmFyeSwgYXMgd2UnbGwgY29udmVydCB0byBqdXN0IHVzaW5nIHRoaXMKKyAgICAgICAg
Y29uc3RydWN0b3IsIHdoaWNoIGNhbiB0aGVuIHVzZSBjb2RlZ2VuLgorICAgICAgICBTZWUgc3Bl
YzogaHR0cDovL2R2Y3MudzMub3JnL2hnL3dlYi1pbnRlbnRzL3Jhdy1maWxlL3RpcC9zcGVjL092
ZXJ2aWV3Lmh0bWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg0MjIwCisgICAgICAgIEFkZGVkIGxheW91dCB0ZXN0cyBmb3Igb2JqZWN0IGNvbnN0cnVj
dG9yLgorCisgICAgICAgIFRlc3Q6IHdlYmludGVudHMvd2ViLWludGVudC1vYmotY29uc3RydWN0
b3IuaHRtbAorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMv
SW50ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2Vy
dmljZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6ZXh0
cmFzKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50Lmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKEludGVudCk6CisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVu
dC5pZGw6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0Rp
Y3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeTo6Z2V0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaDoKKyAgICAg
ICAgKERpY3Rpb25hcnkpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpzZXJpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcmlwdFZhbHVlKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEludGVudDo6Y29uc3RydWN0b3JD
YWxsYmFjayk6CisKIDIwMTItMDQtMjUgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdXNlIGNvbXBvc2l0ZSBub2RlIHByb3Zp
ZGVyIGZvciBkaWZmIG5vZGVzIGluIGhlYXAgcHJvZmlsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbnRlbnRzL0ludGVudC5jcHAKaW5kZXggMDUzZDQyOWNmYTFjOTcyM2Y5NjM2YzM3OWYzYTM5
MTg1ZGQ0OTRiZS4uYmZlYmE2NWUzZDg0NzkyMzQ3YjMxMzRiOGMxODE0YjQ1NWZiOTRjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAKQEAgLTMzLDExICszMywx
MiBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0
LmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEludGVudD4gSW50
ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
UGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBj
b25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRh
LCBjb25zdCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwpAQCAt
NDgsMzkgKzQ5LDcwIEBAIFBhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6OmNyZWF0ZShjb25zdCBT
dHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFjdGlvbiwgdHlwZSwg
ZGF0YSkpOworICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMgPSBN
ZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGVQb3J0cygmcG9ydHMsIGVjKTsKKworICAgIFdURjo6SGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gZXh0cmFzOworICAgIEtVUkwgc2VydmljZVVybDsKKworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFjdGlvbiwgdHlwZSwgZGF0YSwgY2hhbm5lbHMu
cmVsZWFzZSgpLCBleHRyYXMsIHNlcnZpY2VVcmwpKTsKIH0KIAotUGFzc1JlZlB0cjxJbnRlbnQ+
IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUs
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBjb25zdCBNZXNzYWdlUG9y
dEFycmF5JiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPEludGVudD4gSW50
ZW50OjpjcmVhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBEaWN0aW9uYXJ5JiBv
cHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkg
eworICAgIFN0cmluZyBhY3Rpb247CisgICAgaWYgKCFvcHRpb25zLmdldCgiYWN0aW9uIiwgYWN0
aW9uKSB8fCBhY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICh0eXBlLmlzRW1wdHkoKSkgeworCisgICAg
U3RyaW5nIHR5cGU7CisgICAgaWYgKCFvcHRpb25zLmdldCgidHlwZSIsIHR5cGUpIHx8IHR5cGUu
aXNFbXB0eSgpKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyA9
IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywgZWMpOworICAgIFN0cmluZyBz
ZXJ2aWNlOworICAgIEtVUkwgc2VydmljZVVybDsKKyAgICBpZiAob3B0aW9ucy5nZXQoInNlcnZp
Y2UiLCBzZXJ2aWNlKSAmJiAhc2VydmljZS5pc0VtcHR5KCkpIHsKKyAgICAgIHNlcnZpY2VVcmwg
PSBLVVJMKEtVUkwoKSwgc2VydmljZSk7CisgICAgICBpZiAoIXNlcnZpY2VVcmwuaXNWYWxpZCgp
KSB7CisgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICAgIHJldHVybiAwOworICAg
ICAgfQorICAgIH0KIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFjdGlvbiwgdHlw
ZSwgZGF0YSwgY2hhbm5lbHMucmVsZWFzZSgpKSk7Ci19CisgICAgTWVzc2FnZVBvcnRBcnJheSBw
b3J0czsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzOworICAg
IGlmIChvcHRpb25zLmdldCgidHJhbnNmZXIiLCBwb3J0cykpCisgICAgICAgIGNoYW5uZWxzID0g
TWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMoJnBvcnRzLCBlYyk7CisKKyAgICBTY3JpcHRW
YWx1ZSBkYXRhVmFsdWU7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFs
aXplZERhdGE7CisgICAgaWYgKG9wdGlvbnMuZ2V0KCJkYXRhIiwgZGF0YVZhbHVlKSkgeworICAg
ICAgICBib29sIGRpZFRocm93ID0gZmFsc2U7CisgICAgICAgIHNlcmlhbGl6ZWREYXRhID0gZGF0
YVZhbHVlLnNlcmlhbGl6ZShzY3JpcHRTdGF0ZSwgJnBvcnRzLCAwLCBkaWRUaHJvdyk7CisgICAg
ICAgIGlmIChkaWRUaHJvdykgeworICAgICAgICAgICAgZWMgPSBEQVRBX0NMT05FX0VSUjsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQogCi1JbnRlbnQ6OkludGVudChj
b25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSkKLSAgICA6IG1fYWN0aW9uKGFjdGlvbikKLSAgICAsIG1f
dHlwZSh0eXBlKQotewotICAgIGlmIChkYXRhKQotICAgICAgICBtX2RhdGEgPSBkYXRhOwotICAg
IGVsc2UKLSAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUo
KTsKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJhczsKKyAgICBEaWN0aW9u
YXJ5IGV4dHJhc0RpY3Rpb25hcnk7CisgICAgaWYgKG9wdGlvbnMuZ2V0KCJleHRyYXMiLCBleHRy
YXNEaWN0aW9uYXJ5KSkKKyAgICAgICAgZXh0cmFzRGljdGlvbmFyeS5nZXRPd25Qcm9wZXJ0aWVz
QXNTdHJpbmdIYXNoTWFwKGV4dHJhcyk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVu
dChhY3Rpb24sIHR5cGUsIHNlcmlhbGl6ZWREYXRhLnJlbGVhc2UoKSwgY2hhbm5lbHMucmVsZWFz
ZSgpLCBleHRyYXMsIHNlcnZpY2VVcmwpKTsKIH0KIAotSW50ZW50OjpJbnRlbnQoY29uc3QgU3Ry
aW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRz
KQorSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlw
ZSwKKyAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRh
LCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cywKKyAgICAgICAgICAg
ICAgIGNvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhcywgY29uc3QgS1VS
TCYgc2VydmljZSkKICAgICA6IG1fYWN0aW9uKGFjdGlvbikKICAgICAsIG1fdHlwZSh0eXBlKQog
ICAgICwgbV9wb3J0cyhwb3J0cykKKyAgICAsIG1fc2VydmljZShzZXJ2aWNlKQorICAgICwgbV9l
eHRyYXMoZXh0cmFzKQogewogICAgIGlmIChkYXRhKQogICAgICAgICBtX2RhdGEgPSBkYXRhOwpA
QCAtODgsMjYgKzEyMCw2IEBAIEludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBj
b25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjCiAgICAgICAgIG1fZGF0
YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCk7CiB9CiAKLWNvbnN0IFN0cmlu
ZyYgSW50ZW50OjphY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX2FjdGlvbjsKLX0KLQot
Y29uc3QgU3RyaW5nJiBJbnRlbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3R5cGU7
Ci19Ci0KLVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogSW50ZW50OjpkYXRhKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9kYXRhLmdldCgpOwotfQotCi1NZXNzYWdlUG9ydENoYW5uZWxBcnJheSogSW50
ZW50OjptZXNzYWdlUG9ydHMoKSBjb25zdAotewotICAgIHJldHVybiBtX3BvcnRzLmdldCgpOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVO
VFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKaW5kZXggMzNlZjY5ZTA0
NDEwNTk2ZTI0MTUzMzQ4NWVmYmM5ZjVjNGU2YjZkNC4uNDUwOTA5NjUyZTQ3YjUyNTI0YWMwZjZi
NzViMGIyYzk0MGYwNzAwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQu
aApAQCAtMzEsNiArMzEsOCBAQAogCiAjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQogCisjaW5jbHVk
ZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9y
dC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CkBAIC00MSwzMiArNDMsMzcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBTY3JpcHRTdGF0ZTsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogdHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgSW50ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW50
ZW50PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnRlbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0
eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgTWVzc2Fn
ZVBvcnRBcnJheSYgcG9ydHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbnRlbnQ+IGNyZWF0ZShTY3JpcHRTdGF0ZSosIGNvbnN0IERpY3Rpb25hcnkmLCBFeGNlcHRp
b25Db2RlJik7CiAKLSAgICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OwotICAgIGNvbnN0
IFN0cmluZyYgdHlwZSgpIGNvbnN0OwotICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgp
IGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
b247IH0KKyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
KyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
Z2V0KCk7IH0KIAotICAgIGludCBpZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRJZGVu
dGlmaWVyKGludCk7CisgICAgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIG1lc3NhZ2VQb3J0cygp
IGNvbnN0IHsgcmV0dXJuIG1fcG9ydHMuZ2V0KCk7IH0KKyAgICBjb25zdCBLVVJMJiBzZXJ2aWNl
KCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2aWNlOyB9CisgICAgY29uc3QgV1RGOjpIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYgZXh0cmFzKCkgY29uc3QgeyByZXR1cm4gbV9leHRyYXM7IH0KIAotICAg
IE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KiBtZXNzYWdlUG9ydHMoKSBjb25zdDsKK3Byb3RlY3Rl
ZDoKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwK
KyAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzLAorICAgICAgICAgICBjb25zdCBX
VEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMsIGNvbnN0IEtVUkwmIHNlcnZpY2Up
OwogCiBwcml2YXRlOgotICAgIEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3Ry
aW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSk7Ci0gICAg
SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hh
bm5lbEFycmF5PiBwb3J0cyk7CiAKICAgICBTdHJpbmcgbV9hY3Rpb247CiAgICAgU3RyaW5nIG1f
dHlwZTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX2RhdGE7CiAgICAgT3du
UHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX3BvcnRzOworICAgIEtVUkwgbV9zZXJ2aWNl
OworICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9leHRyYXM7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQu
aWRsCmluZGV4IGVmMDgyNTA3MzRmZmM3OWIxOTQ5ODBlYzgyNDNlZWIzNDQ4YWM1MmUuLjkyNjU3
YjRlNmNlNjBmMDc5OTUyNDY0MDE2MzY1Yjg3MDkxNDk1ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCkBAIC0yNiw2ICsyNiw3IEBACiBtb2R1bGUgd2luZG93
IHsKICAgaW50ZXJmYWNlIFsKICAgICAgIENvbmRpdGlvbmFsPVdFQl9JTlRFTlRTLAorICAgICAg
Q3VzdG9tQ29uc3RydWN0b3IsCiAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgYWN0aW9u
LCBpbiBET01TdHJpbmcgdHlwZSwgaW4gW09wdGlvbmFsPURlZmF1bHRJc051bGxTdHJpbmcsIFRy
YW5zZmVyTGlzdD10cmFuc2Zlckxpc3RdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRhLCBpbiBb
T3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBBcnJheSB0cmFuc2Zlckxpc3QpLAogICAgICAg
Q29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24KICAgXSBJbnRlbnQgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDViMjg4Zjg4N2Q0ZGRlNDY0MGEwMTI3MDg5MDA0NmJiODg2YTc1ZTIuLjI4OTY3OTU1MWEw
Y2YzNDZlMzI5NTEyNzg0ZWU3YzQzZWY2NzU3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIyODIs
NiArMjI4Miw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50MTZBcnJh
eUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDMyQXJy
YXlDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQ4QXJy
YXlDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRD
b25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEphdmFT
Y3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvRGljdGlvbmFyeS5jcHAKaW5kZXggZmQ0ZGExZmIwMDZjZmNmNjQxODlmODIzOWQ4ZTZj
YjIwZjFjNmFlYS4uMTBhYWZlOGRjNmMyODFlZmU3MWQ0OWZiOTJmNGJiOTU2NzU4NzUxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAKQEAgLTQxMiw0ICs0MTIs
NDQgQEAgYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIFJlZlB0cjxTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+JiB2YWwKIAogI2VuZGlmCiAKK2Jvb2wgRGljdGlvbmFy
eTo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBEaWN0aW9uYXJ5JiB2YWx1ZSkgY29uc3QKK3sKKyAg
ICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhW
YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2OFZhbHVlLT5Jc09iamVj
dCgpKQorICAgICAgICB2YWx1ZSA9IERpY3Rpb25hcnkodjhWYWx1ZSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworCitib29sIERpY3Rpb25hcnk6OmdldE93blByb3BlcnRpZXNBc1N0cmluZ0hh
c2hNYXAoV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaGFzaE1hcCkgY29uc3QKK3sKKyAg
ICBpZiAoIWlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gb3B0aW9ucyA9IG1fb3B0aW9ucy0+VG9PYmplY3QoKTsKKyAgICBpZiAo
b3B0aW9ucy5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpMb2Nh
bDx2ODo6QXJyYXk+IHByb3BlcnRpZXMgPSBvcHRpb25zLT5HZXRPd25Qcm9wZXJ0eU5hbWVzKCk7
CisgICAgaWYgKHByb3BlcnRpZXMuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgcHJvcGVydGllcy0+TGVuZ3RoKCk7ICsraSkgewor
ICAgICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4ga2V5ID0gcHJvcGVydGllcy0+R2V0KGkpLT5U
b1N0cmluZygpOworICAgICAgICBpZiAoIW9wdGlvbnMtPkhhcyhrZXkpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSBvcHRpb25z
LT5HZXQoa2V5KTsKKyAgICAgICAgU3RyaW5nIHN0cmluZ0tleSA9IHY4VmFsdWVUb1dlYkNvcmVT
dHJpbmcoa2V5KTsKKyAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdjhWYWx1ZVRvV2ViQ29y
ZVN0cmluZyh2YWx1ZSk7CisgICAgICAgIGlmICghc3RyaW5nS2V5LmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIGhhc2hNYXAuc2V0KHN0cmluZ0tleSwgc3RyaW5nVmFsdWUpOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgKaW5kZXggZTU4ODkwZTU5ZmIyNTIxNjUyMDcxY2Y4NWY2
MDE1OTEzMDE5ODcwYS4uYzRjMzNiMWJiMjA4ZTk2NDBkZmZiODQwNmQ4OTNiNDEyODMyNzllZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApAQCAtODMs
NiArODQsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mKSBjb25zdDsKICNlbmRpZgogICAgIGJvb2wgZ2V0
KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYpIGNvbnN0OworICAgIGJvb2wg
Z2V0KGNvbnN0IFN0cmluZyYsIERpY3Rpb25hcnkmKSBjb25zdDsKKyAgICBib29sIGdldE93blBy
b3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAoV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpIGNv
bnN0OwogCiAgICAgYm9vbCBnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5n
JiwgU3RyaW5nJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZh
bHVlLmNwcAppbmRleCBlY2MzNjczNjJhODM4YjdmOTg5MjhlZDA1OTlkNjM3NjlmMDk3Y2I3Li4z
MWJjZDIzZWU5YTM3ZDcwZmRlNTE3YjQyOWE0NTgwZTFkM2YxMzY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwCkBAIC0zMiw5ICszMiwxMSBAQAogI2luY2x1
ZGUgIlNjcmlwdFZhbHVlLmgiCiAKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNs
dWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNjcmlwdFNjb3BlLmgiCiAjaW5jbHVkZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL0FycmF5QnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsNiAr
NDYsMTMgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpz
ZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXQKICAgICByZXR1cm4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSgpKTsKIH0KIAorUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IFNjcmlwdFZhbHVlOjpzZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckFycmF5KiBh
cnJheUJ1ZmZlcnMsIGJvb2wmIGRpZFRocm93KQoreworICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNj
cmlwdFN0YXRlKTsKKyAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhW
YWx1ZSgpLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycywgZGlkVGhyb3cpOworfQorCiBTY3Jp
cHRWYWx1ZSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRl
LCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQogewogICAgIFNjcmlwdFNjb3BlIHNjb3Bl
KHNjcmlwdFN0YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCmlu
ZGV4IDkxMzU2ZDRjN2YxYmM0NWE3NTE1NzQ3OWYyNjcxNzIxMzdjMDJmNjQuLmZhYTFmNjM4ZWE3
NjBhY2ZiMjNkODQ2YzliZjRmZmJjNTdiYWIyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0VmFsdWUuaApAQCAtMzYsMTUgKzM2LDI0IEBACiAKICNpbmNsdWRlIDx2OC5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmbmRlZiBOREVCVUcKICNpbmNsdWRlICJWOFByb3h5
LmgiICAvLyBmb3IgcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgZ2xvYmFsIGhhbmRsZXMuCiAjZW5k
aWYKIAorbmFtZXNwYWNlIFdURiB7CitjbGFzcyBBcnJheUJ1ZmZlcjsKK30KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKK2NsYXNzIE1lc3NhZ2VQb3J0Owog
Y2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPE1lc3Nh
Z2VQb3J0PiwgMT4gTWVzc2FnZVBvcnRBcnJheTsKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxXVEY6
OkFycmF5QnVmZmVyPiwgMT4gQXJyYXlCdWZmZXJBcnJheTsKIAogY2xhc3MgU2NyaXB0VmFsdWUg
ewogcHVibGljOgpAQCAtMTMxLDYgKzE0MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlwdFN0YXRlKik7Cisg
ICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0
ZSosIE1lc3NhZ2VQb3J0QXJyYXkqLCBBcnJheUJ1ZmZlckFycmF5KiwgYm9vbCYpOwogICAgIHN0
YXRpYyBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSopOwogCiAgICAgdm9pZCBjbGVhcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTg1OTkwMTRkNmEwZjFlNGVmNjQ0NWM2ZDFmMDMyMmY1OTk3YzFmYQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVj
dG9yLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVu
dC5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0
LmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKKyNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKKyNpbmNsdWRlICJWOERPTVdy
YXBwZXIuaCIKKyNpbmNsdWRlICJWOEludGVudC5oIgorI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQu
aCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZW50Ojpj
b25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5D
X1NUQVRTKCJET00uSW50ZW50LkNvbnN0cnVjdG9yIik7CisKKyAgICBpZiAoIWFyZ3MuSXNDb25z
dHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0
cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBlRXJy
b3IpOworCisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9y
TW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsK
KyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJO
b3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAvLyBVc2UgdGhlIGRpY3Rpb25hcnkgY29uc3RydWN0
b3IuIFRoaXMgYmxvY2sgd2lsbCByZXR1cm4gaWYgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50IGlz
bid0IGEgdmFsaWQgRGljdGlvbmFyeS4KKyAgICAgICAgRVhDRVBUSU9OX0JMT0NLKERpY3Rpb25h
cnksIG9wdGlvbnMsIGFyZ3NbMF0pOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICAgICAgUmVmUHRyPEludGVudD4gaW1wbCA9IEludGVudDo6Y3JlYXRlKFNjcmlwdFN0YXRlOjpj
dXJyZW50KCksIG9wdGlvbnMsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZWMpOworCisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBl
cih3cmFwcGVyLCAmaW5mbywgaW1wbC5nZXQoKSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0
SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGltcGwucmVsZWFzZSgpLCB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfQor
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VY
Q0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBhY3Rpb24sIE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIFNUUklOR19UT19WOFBBUkFN
RVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8PiwgdHlwZSwgTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CisgICAgTWVzc2FnZVBvcnRB
cnJheSBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0OworICAgIEFycmF5QnVmZmVyQXJyYXkg
YXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdDsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDMp
IHsKKyAgICAgICAgaWYgKCFleHRyYWN0VHJhbnNmZXJhYmxlcyhhcmdzWzNdLCBtZXNzYWdlUG9y
dEFycmF5VHJhbnNmZXJMaXN0LCBhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0KSkKKyAgICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVz
IiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB9CisgICAgYm9vbCBkYXRhRGlkVGhyb3cgPSBm
YWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhID0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1syXSwgJm1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxp
c3QsICZhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0LCBkYXRhRGlkVGhyb3cpOworICAgIGlm
IChkYXRhRGlkVGhyb3cpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKERBVEFfQ0xPTkVfRVJS
KTsKKworICAgIFJlZlB0cjxJbnRlbnQ+IGltcGwgPSBJbnRlbnQ6OmNyZWF0ZShhY3Rpb24sIHR5
cGUsIGRhdGEsIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsIGVjKTsKKyAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgVjhET01XcmFwcGVyOjpzZXRET01X
cmFwcGVyKHdyYXBwZXIsICZpbmZvLCBpbXBsLmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNl
dEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLnJlbGVhc2UoKSwgdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD46Ok5ldyh3cmFwcGVyKSk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSW50ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRl
bnQuaAppbmRleCA3M2E2MjEzMmFkNjMzOWM1NmQ0NTYzZTQyNGRiNmY1OGRmZDAzMzgyLi5jYzA4
MGFkOTljNTQ5ZmUyZjI1MjIyODUwYTdiMDhjNjhmN2QwZDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgInBs
YXRmb3JtL1dlYkNvbW1vbi5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlByaXZhdGVQdHIuaCIK
ICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJV
UkwuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgeyBjbGFzcyBJbnRlbnQ7IH0KQEAgLTYzLDYgKzY0LDE2IEBAIHB1YmxpYzoKICAgICBXRUJL
SVRfRVhQT1JUIFdlYlN0cmluZyBhY3Rpb24oKSBjb25zdDsKICAgICBXRUJLSVRfRVhQT1JUIFdl
YlN0cmluZyB0eXBlKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgZGF0YSgp
IGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgV2ViVVJMIHNlcnZpY2UoKSBjb25zdDsKKworICAg
IC8vIFJldHJpZXZlIGEgbGlzdCBvZiB0aGUgbmFtZXMgb2YgZXh0cmEgbWV0YWRhdGEgYXNzb2Np
YXRlZCB3aXRoIHRoZQorICAgIC8vIGludGVudC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlZlY3Rv
cjxXZWJTdHJpbmc+IGV4dHJhc05hbWVzKCkgY29uc3Q7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUg
dmFsdWUgb2YgYW4gZXh0cmEgbWV0YWRhdGEgZWxlbWVudC4gVGhlIGFyZ3VtZW50IHNob3VsZAor
ICAgIC8vIGJlIG9uZSBvZiB0aGUgbmFtZXMgcmV0cmlldmVkIHdpdGggfGV4dHJhc05hbWVzfC4g
UmV0dXJucyBhbiBlbXB0eQorICAgIC8vIHN0cmluZyBpZiB0aGUgbmFtZSBpcyBpbnZhbGlkLgor
ICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGV4dHJhc1ZhbHVlKGNvbnN0IFdlYlN0cmluZyYp
IGNvbnN0OwogCiAgICAgLy8gQ2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcG9ydHMuCiAg
ICAgV0VCS0lUX0VYUE9SVCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogbWVzc2FnZVBvcnRD
aGFubmVsc1JlbGVhc2UoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkludGVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRl
bnQuY3BwCmluZGV4IDhhN2Q2YWFjNTQzYmQ5OTk5OWI4ZmE3OTg0M2EzNDAzYWU1NjdjOWUuLmNl
NGUxNWJkNmVjNjJiNTdmZTU5MjJmNjk1YjViZGYyYTljNDgyMWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIklu
dGVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgiCiAjaW5jbHVk
ZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTEwMyw2ICsxMDQsMTUgQEAgV2ViU3RyaW5nIFdlYklu
dGVudDo6ZGF0YSgpIGNvbnN0CiAjZW5kaWYKIH0KIAorV2ViVVJMIFdlYkludGVudDo6c2Vydmlj
ZSgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIHJldHVybiBXZWJVUkwo
bV9wcml2YXRlLT5zZXJ2aWNlKCkpOworI2Vsc2UKKyAgICByZXR1cm4gV2ViVVJMKCk7CisjZW5k
aWYKK30KKwogV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdlYkludGVudDo6bWVzc2FnZVBv
cnRDaGFubmVsc1JlbGVhc2UoKSBjb25zdAogewogICAgIC8vIE5vdGU6IHNlZSBQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZS4KQEAgLTEyMCw0ICsxMzAsMzAg
QEAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIFdlYkludGVudDo6bWVzc2FnZVBvcnRDaGFu
bmVsc1JlbGVhc2UoKSBjb25zdAogICAgIHJldHVybiB3ZWJDaGFubmVsczsKIH0KIAorV2ViVmVj
dG9yPFdlYlN0cmluZz4gV2ViSW50ZW50OjpleHRyYXNOYW1lcygpIGNvbnN0Cit7CisjaWYgRU5B
QkxFKFdFQl9JTlRFTlRTKQorICAgIHNpemVfdCBudW1FeHRyYXMgPSBtX3ByaXZhdGUtPmV4dHJh
cygpLnNpemUoKTsKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiBrZXlTdHJpbmdzKG51bUV4dHJh
cyk7CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3I6Oktl
eXMga2V5SXRlciA9IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuYmVnaW4oKS5rZXlzKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGtleUl0ZXIgIT0gbV9wcml2YXRlLT5leHRyYXMoKS5lbmQoKS5rZXlz
KCk7ICsra2V5SXRlciwgKytpKQorICAgICAgICBrZXlTdHJpbmdzW2ldID0gKmtleUl0ZXI7Cisg
ICAgcmV0dXJuIGtleVN0cmluZ3M7CisjZWxzZQorICAgIHJldHVybiBXZWJWZWN0b3I8V2ViU3Ry
aW5nPigpOworI2VuZGlmCit9CisKK1dlYlN0cmluZyBXZWJJbnRlbnQ6OmV4dHJhc1ZhbHVlKGNv
bnN0IFdlYlN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisg
ICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgdmFsID0gbV9w
cml2YXRlLT5leHRyYXMoKS5maW5kKG5hbWUpOworICAgIGlmICh2YWwgPT0gbV9wcml2YXRlLT5l
eHRyYXMoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAgIHJldHVybiB2
YWwtPnNlY29uZDsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlN0cmluZygpOworI2VuZGlmCit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViVmlld0hvc3QuY3BwCmluZGV4IDZmZjk1YzU2MjQxNzA4YmNhMzMxY2IwYzJjMmRjYTlkN2Rl
ODBkMWIuLmQ4NDViN2VjMDUwN2Y5NGNkMGY3Mzc0ZWE2NTZlMjhkNGY1YWIyOTEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAgLTEzMzUsNiAr
MTMzNSwxMyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpkaXNwYXRjaEludGVudChXZWJGcmFtZSogc291
cmNlLCBjb25zdCBXZWJJbnRlbnRSZXF1ZXN0JiByZXF1ZQogICAgICAgICAgICAgKCpwb3J0cylb
aV0tPmRlc3Ryb3koKTsKICAgICAgICAgZGVsZXRlIHBvcnRzOwogICAgIH0KKyAgICBpZiAoIXJl
cXVlc3QuaW50ZW50KCkuc2VydmljZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcHJpbnRmKCJFeHBs
aWNpdCBpbnRlbnQgc2VydmljZTogJXNcbiIsIHJlcXVlc3QuaW50ZW50KCkuc2VydmljZSgpLnNw
ZWMoKS5kYXRhKCkpOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGV4dHJhcyA9IHJlcXVlc3Qu
aW50ZW50KCkuZXh0cmFzTmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4dHJh
cy5zaXplKCk7ICsraSkgeworICAgICAgICBwcmludGYoIkV4dHJhc1slc10gPSAlc1xuIiwgZXh0
cmFzW2ldLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICByZXF1ZXN0LmludGVudCgpLmV4
dHJhc1ZhbHVlKGV4dHJhc1tpXSkudXRmOCgpLmRhdGEoKSk7CisgICAgfQogfQogCiAvLyBQdWJs
aWMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1p
bnRlbnRzLWFwaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRl
bnRzLWFwaS1leHBlY3RlZC50eHQKaW5kZXggNzY2Y2ZkMGE0ZDA0N2I1NzY0Yzg4MzNiOTA0Y2Fk
ZjVjOWE0YzU2Ny4uYmZmMGE2NmM0MmY3ZDM3NDNlMWYwMjM2YmM0NjFiYmY0MjQ4NDEzNCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVk
LnR4dApAQCAtMSw2ICsxLDYgQEAKIFBBU1MgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkg
aXMgZGVmaW5lZC4KIFBBU1MgdmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgbmV3IFdlYktp
dEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1l
bnRzLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdhJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2ViS2l0SW50ZW50KCcnLCcn
LCcnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIu
CiBQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJykgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBuZXcgV2ViS2l0SW50ZW50KCcn
LCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGku
aHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKaW5kZXgg
MWRlMTdhMDk2ZTFlODE1ZmZiYmFhMzhmMTczYWQ3NWQ1ZTEzNTVkMy4uMjYyY2EwZGEwZmMxNDE2
M2U3MTBhODgzNjlkOWUxMzc2MzMwNGZjMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViaW50
ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dl
Yi1pbnRlbnRzLWFwaS5odG1sCkBAIC04LDcgKzgsNyBAQAogICAgICAgc2hvdWxkQmVEZWZpbmVk
KCJuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eSIpOwogICAgICAgCiAgICAgICBzaG91bGRU
aHJvdygidmFyIGludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoKSIsICInVHlwZUVycm9yOiBOb3Qg
ZW5vdWdoIGFyZ3VtZW50cyciKTs7Ci0gICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVu
dCgnYScpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzJyIpOworICAgICAgc2hv
dWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJ2EnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgn
JywnJywnJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAg
ICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoJycsJ2InLCdjJykiLCAiJ0Vycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAgICAgc2hvdWxkVGhyb3coIm5ldyBX
ZWJLaXRJbnRlbnQoJycsJycsJ2MnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRp
b24gMTInIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRz
LW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dl
Yi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmYyOWEy
OTViY2Q1Y2M2MzJhZTZiZDRjNmMxYmEwNGQ2MTlkMzE0MQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDQ2IEBACitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rpb249YWN0aW9u
MSB0eXBlPXRleHQvcGxhaW4KK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlvbj1hY3Rpb24xIHR5
cGU9dGV4dC9wbGFpbitleHBsaWNpdAorRXhwbGljaXQgaW50ZW50IHNlcnZpY2U6IGh0dHA6Ly9l
eHBsaWNpdC5jb20vCitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rpb249YWN0aW9uMSB0eXBlPXRl
eHQvcGxhaW4rZXh0cmFzCitFeHRyYXNbYV0gPSBiCitSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rp
b249YWN0aW9uMSB0eXBlPXRleHQvcGxhaW4rcG9ydAorSGF2ZSAxIHBvcnRzCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgbmV3IFdlYktpdElu
dGVudCh7fSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KGR1bW15KSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQobnVs
bCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgor
UEFTUyBuZXcgV2ViS2l0SW50ZW50KHVuZGVmaW5lZCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KDUpIHRo
cmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1Mg
bmV3IFdlYktpdEludGVudCgnc2l4JykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KFsnc2l4J10pIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3
IFdlYktpdEludGVudCh7J2EnOidiJ30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VS
UjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2In
fSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgor
UEFTUyBuZXcgV2ViS2l0SW50ZW50KHsndHlwZSc6J2InfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsn
YWN0aW9uJzonJywgJ3R5cGUnOidiJ30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VS
UjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2En
LCAndHlwZSc6Jyd9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNl
cHRpb24gMTIuCitQQVNTIChuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidi
J30pKS5hY3Rpb24gaXMgImEiCitQQVNTIChuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScs
J3R5cGUnOidiJ30pKS50eXBlIGlzICJiIgorUEFTUyAobmV3IFdlYktpdEludGVudCh7J2FjdGlv
bic6bnVsbCwndHlwZSc6J2InfSkpLmFjdGlvbiBpcyAibnVsbCIKK1BBU1MgKG5ldyBXZWJLaXRJ
bnRlbnQoeydhY3Rpb24nOnVuZGVmaW5lZCwndHlwZSc6J2InfSkpLmFjdGlvbiBpcyAidW5kZWZp
bmVkIgorUEFTUyAobmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzpudWxsfSkp
LnR5cGUgaXMgIm51bGwiCitQQVNTIChuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5
cGUnOnVuZGVmaW5lZH0pKS50eXBlIGlzICJ1bmRlZmluZWQiCitQQVNTIG5ldyBXZWJLaXRJbnRl
bnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzonJ30pIGRpZCBub3QgdGhyb3cg
ZXhjZXB0aW9uLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidi
Jywnc2VydmljZSc6bnVsbH0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9N
IEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBl
JzonYicsJ3NlcnZpY2UnOnVuZGVmaW5lZH0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFY
X0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6
J2EnLCd0eXBlJzonYicsJ3NlcnZpY2UnOidub3QgYSB1cmwnfSkgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50
KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6J3VybDovL2EgdXJsJ30pIGRpZCBu
b3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScs
J3R5cGUnOidiJywnc2VydmljZSc6J2h0dHRwOi8vYSB1cmwnfSkgZGlkIG5vdCB0aHJvdyBleGNl
cHRpb24uCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdk
YXRhJzp3aW5kb3d9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IERBVEFfQ0xPTkVfRVJSOiBET00g
RXhjZXB0aW9uIDI1LgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUn
OidiJywnZXh0cmFzJzpudWxsfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5ldyBX
ZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMnOnVuZGVmaW5lZH0p
IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9u
JzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzonJ30pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgor
UEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzon
bm90IGEgZGljdCd9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmV3IFdlYktpdElu
dGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ2V4dHJhcyc6NDJ9KSBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzon
YicsJ2V4dHJhcyc6WydhJywnYiddfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCisqIHNlbnQg
b2JqZWN0IGludGVudAorKiBzZW50IGV4cGxpY2l0IGludGVudAorKiBzZW50IGludGVudCB3aXRo
IGV4dHJhcworKiBzZW50IGludGVudCB3aXRoIHBvcnQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0b3IuaHRtbCBiL0xheW91dFRl
c3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGQwNjYyMmJiMTdmYjdjOTA1MjVhM2RiMWMzMTBlMzYwODNjOGRjNAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9y
Lmh0bWwKQEAgLTAsMCArMSwxMDIgQEAKKzxodG1sPgorICA8aGVhZD4KKyAgICA8c2NyaXB0IHNy
Yz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViLWludGVudHMtdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBzaG91bGROb3RUaHJvdyhleHByZXNzaW9uKQorICAg
IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGV2YWwoZXhwcmVzc2lvbik7CisgICAgICAg
ICAgICB0ZXN0UGFzc2VkKGV4cHJlc3Npb24gKyAiIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLiIp
OworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoZXhwcmVzc2lv
biArICIgc2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb24uIFRocmV3IGV4Y2VwdGlvbiAiICsgZSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBkdW1teSgpIHt9CisKKyAgICBmdW5j
dGlvbiBidXR0b25DbGlja2VkKCkgeworICAgICAgICAvLyB8YWN0aW9ufCBhbmQgfHR5cGV8IGFy
ZSByZXF1aXJlZCB0byBiZSBwcmVzZW50IGFuZCBub24tZW1wdHkuCisgICAgICAgIHNob3VsZFRo
cm93KCJuZXcgV2ViS2l0SW50ZW50KHt9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNl
cHRpb24gMTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KGR1bW15
KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNo
b3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KG51bGwpIiwgIidFcnJvcjogU1lOVEFYX0VSUjog
RE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRl
bnQodW5kZWZpbmVkKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7
CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KDUpIiwgIidFcnJvcjogU1lO
VEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBX
ZWJLaXRJbnRlbnQoJ3NpeCcpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
MiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoWydzaXgnXSkiLCAi
J0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRU
aHJvdygibmV3IFdlYktpdEludGVudCh7J2EnOidiJ30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjog
RE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRl
bnQoeydhY3Rpb24nOidiJ30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
MiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeyd0eXBlJzonYid9
KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNo
b3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonJywgJ3R5cGUnOidiJ30pIiwg
IidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxk
VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywgJ3R5cGUnOicnfSkiLCAiJ0Vy
cm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoIihuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJ30p
KS5hY3Rpb24iLCAiYSIpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIihuZXcgV2Vi
S2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJ30pKS50eXBlIiwgImIiKTsKKworICAg
ICAgICAvLyBUaGVzZSB3aWxsIGdldCBjb252ZXJ0ZWQgdG8gbGl0ZXJhbHMgIm51bGwiIGFuZCAi
dW5kZWZpbmVkIi4gQXdrd2FyZAorICAgICAgICAvLyBuYW1lcywgYnV0IGlkaW9tYXRpYyB1c2Fn
ZS4KKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCIobmV3IFdlYktpdEludGVudCh7J2Fj
dGlvbic6bnVsbCwndHlwZSc6J2InfSkpLmFjdGlvbiIsICJudWxsIik7CisgICAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygiKG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOnVuZGVmaW5lZCwn
dHlwZSc6J2InfSkpLmFjdGlvbiIsICJ1bmRlZmluZWQiKTsKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCIobmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzpudWxsfSkp
LnR5cGUiLCAibnVsbCIpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIihuZXcgV2Vi
S2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOnVuZGVmaW5lZH0pKS50eXBlIiwgInVuZGVm
aW5lZCIpOworCisgICAgICAgIC8vIHxzZXJ2aWNlfCwgaWYgcHJlc2VudCwgbXVzdCBiZSBhIHZh
bGlkIHVybC4KKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rp
b24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzonJ30pIik7CisgICAgICAgIHNob3VsZFRocm93
KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6bnVs
bH0pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAg
c2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdz
ZXJ2aWNlJzp1bmRlZmluZWR9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24g
MTInIik7CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzon
YScsJ3R5cGUnOidiJywnc2VydmljZSc6J25vdCBhIHVybCd9KSIsICInRXJyb3I6IFNZTlRBWF9F
UlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICAgIHNob3VsZE5vdFRocm93KCJuZXcgV2Vi
S2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6J3VybDovL2EgdXJs
J30pIik7CisgICAgICAgIHNob3VsZE5vdFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9u
JzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6J2h0dHRwOi8vYSB1cmwnfSkiKTsKKworICAgICAg
ICAvLyB8ZGF0YXwgbXVzdCBiZSBjbG9uZWFibGUuCisgICAgICAgIHNob3VsZFRocm93KCJuZXcg
V2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZGF0YSc6d2luZG93fSkiLCAi
J0Vycm9yOiBEQVRBX0NMT05FX0VSUjogRE9NIEV4Y2VwdGlvbiAyNSciKTsKKworICAgICAgICAv
LyB8ZXh0cmFzfCwgaWYgcHJlc2VudCwgbXVzdCBiZSBhIGRpY3Rpb25hcnkuCisgICAgICAgIHNo
b3VsZE5vdFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywn
ZXh0cmFzJzpudWxsfSkiKTsKKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJbnRl
bnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMnOnVuZGVmaW5lZH0pIik7CisgICAg
ICAgIHNob3VsZE5vdFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUn
OidiJywnZXh0cmFzJzonJ30pIik7CisgICAgICAgIHNob3VsZE5vdFRocm93KCJuZXcgV2ViS2l0
SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzonbm90IGEgZGljdCd9KSIp
OworICAgICAgICBzaG91bGROb3RUaHJvdygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2En
LCd0eXBlJzonYicsJ2V4dHJhcyc6NDJ9KSIpOworICAgICAgICBzaG91bGROb3RUaHJvdygibmV3
IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ2V4dHJhcyc6WydhJywnYidd
fSkiKTsKKworICAgICAgICB2YXIgc2ltcGxlSW50ZW50ID0gbmV3IFdlYktpdEludGVudCgKKyAg
ICAgICAgICAgIHsiYWN0aW9uIjoiYWN0aW9uMSIsCisgICAgICAgICAgICAgInR5cGUiOiJ0ZXh0
L3BsYWluIiwKKyAgICAgICAgICAgICAiZGF0YSI6Im1lc3NhZ2UifSk7CisgICAgICAgIG5hdmln
YXRvci53ZWJraXRTdGFydEFjdGl2aXR5KHNpbXBsZUludGVudCk7CisgICAgICAgIGRlYnVnKCIq
IHNlbnQgb2JqZWN0IGludGVudCIpOworCisgICAgICAgIHZhciBleHBsaWNpdEludGVudCA9IG5l
dyBXZWJLaXRJbnRlbnQoCisgICAgICAgICAgICB7ImFjdGlvbiI6ImFjdGlvbjEiLAorICAgICAg
ICAgICAgICJ0eXBlIjoidGV4dC9wbGFpbitleHBsaWNpdCIsCisgICAgICAgICAgICAgImRhdGEi
OiJtZXNzYWdlIiwKKyAgICAgICAgICAgICAic2VydmljZSIgOiAiaHR0cDovL2V4cGxpY2l0LmNv
bS8ifSk7CisgICAgICAgIG5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5KGV4cGxpY2l0SW50
ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBleHBsaWNpdCBpbnRlbnQiKTsKKworICAgICAg
ICB2YXIgZXh0cmFzSW50ZW50ID0gbmV3IFdlYktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0
aW9uIjoiYWN0aW9uMSIsCisgICAgICAgICAgICAgInR5cGUiOiJ0ZXh0L3BsYWluK2V4dHJhcyIs
CisgICAgICAgICAgICAgImRhdGEiOiJtZXNzYWdlIiwKKyAgICAgICAgICAgICAiZXh0cmFzIjp7
ImEiOiJiIn19KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoZXh0cmFz
SW50ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBpbnRlbnQgd2l0aCBleHRyYXMiKTsKKwor
ICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOworICAgICAgICBjaGFu
bmVsLnBvcnQyLm9uTWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoIiog
Z290IG1lc3NhZ2UiKTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHBvcnRJbnRlbnQgPSBuZXcg
V2ViS2l0SW50ZW50KAorICAgICAgICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAg
ICAgICAidHlwZSI6InRleHQvcGxhaW4rcG9ydCIsCisgICAgICAgICAgICAgImRhdGEiOmNoYW5u
ZWwucG9ydDEsCisgICAgICAgICAgICAgInRyYW5zZmVyIjpbY2hhbm5lbC5wb3J0MV19KTsKKyAg
ICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkocG9ydEludGVudCk7CisgICAgICAg
IGRlYnVnKCIqIHNlbnQgaW50ZW50IHdpdGggcG9ydCIpOworICAgIH0KKyAgICA8L3NjcmlwdD4K
KyAgPC9oZWFkPgorPGJvZHkgb25sb2FkPSJzaW11bGF0ZUJ1dHRvblByZXNzKCkiPgorPGlucHV0
IHR5cGU9ImJ1dHRvbiIgaWQ9ImJ1dHRvbiIgdmFsdWU9IlN0YXJ0IFdlYiBJbnRlbnQiIG9ubW91
c2V1cD0iYnV0dG9uQ2xpY2tlZCgpIj4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138841</attachid>
            <date>2012-04-25 10:43:59 -0700</date>
            <delta_ts>2012-04-25 17:28:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84220-20120425104358.patch</filename>
            <type>text/plain</type>
            <size>34720</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTFkODdhODZlZmM5ZjNj
OTIzNTBiOWJhNDEyMDgwZmM0MzhlMWJjNS4uMTkxZDg3OTJmY2IxZGFhMWNkY2RkNmU2NTdlNTk5
YTQ3NWU0ZTVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTA0LTE3ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBvYmpl
Y3QtbGl0ZXJhbCBjb25zdHJ1Y3RvciBmb3IgdGhlIEludGVudCBvYmplY3QuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDIyMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSB1c2Ugb2YgdGhlIGN1c3Rv
bSBjb25zdHJ1Y3RvciB3aWxsIGhvcGVmdWxseSBiZSB0ZW1wb3JhcnksIGFzIHdlIHBsYW4KKyAg
ICAgICAgdG8gY29udmVydCB0byBqdXN0IHVzaW5nIHRoZSBvYmplY3QgbGl0ZXJhbCBjb25zdHJ1
Y3Rvciwgd2hpY2ggY2FuIHRoZW4gdXNlIGNvZGVnZW4uCisgICAgICAgIFNlZSBzcGVjOiBodHRw
Oi8vZHZjcy53My5vcmcvaGcvd2ViLWludGVudHMvcmF3LWZpbGUvdGlwL3NwZWMvT3ZlcnZpZXcu
aHRtbAorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBzZXJ2aWNlIGFuZCBleHRyYXMg
cGFyYW1ldGVycyBpbiB0aGUgSW50ZW50CisgICAgICAgIG9iamVjdCB0byBzdXBwb3J0IHRoZSBz
cGVjZWQgbWVtYmVycyBpbiB0aGUgb2JqZWN0IGxpdGVyYWwgY29uc3RydWN0b3IuCisKKyAgICAg
ICAgQWRkZWQgc3VwcG9ydGluZyBhY2Nlc3NvciB0byBEaWN0aW9uYXJ5IHRvIHJldHJpZXZlIGEg
c3ViLURpY3Rpb25hcnksCisgICAgICAgIGFuZCBhIHV0aWxpdHkgdG8gU2NyaXB0VmFsdWUgdG8g
c2VyaWFsaXplIHdpdGggcG9ydHMuCisKKyAgICAgICAgVGVzdDogd2ViaW50ZW50cy93ZWItaW50
ZW50LW9iai1jb25zdHJ1Y3Rvci5odG1sCisKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpJbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZW50OjpzZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZW50OjpleHRyYXMpOgorICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW50ZW50KToKKyAgICAgICAgKiBNb2R1
bGVzL2ludGVudHMvSW50ZW50LmlkbDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9u
YXJ5OjpnZXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvRGlj
dGlvbmFyeS5oOgorICAgICAgICAoRGljdGlvbmFyeSk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OnNlcmlhbGl6
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRWYWx1
ZS5oOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2NyaXB0
VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9y
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SW50
ZW50Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKwogMjAxMi0wNC0yNSAgWXVyeSBTZW1pa2hhdHNr
eSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB1c2UgY29t
cG9zaXRlIG5vZGUgcHJvdmlkZXIgZm9yIGRpZmYgbm9kZXMgaW4gaGVhcCBwcm9maWxlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcAppbmRleCAwNTNkNDI5Y2ZhMWM5
NzIzZjk2MzZjMzc5ZjNhMzkxODVkZDQ5NGJlLi5iZmViYTY1ZTNkODQ3OTIzNDdiMzEzNGI4YzE4
MTRiNDU1ZmI5NGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMv
SW50ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNw
cApAQCAtMzMsMTEgKzMzLDEyIEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NS
ZWZQdHI8SW50ZW50PiBJbnRlbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3Qg
U3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGRhdGEsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9
IFNZTlRBWF9FUlI7CkBAIC00OCwzOSArNDksNzAgQEAgUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVu
dDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3MK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRl
bnQoYWN0aW9uLCB0eXBlLCBkYXRhKSk7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5PiBjaGFubmVscyA9IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKCZwb3J0cywgZWMp
OworCisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBleHRyYXM7CisgICAgS1VSTCBz
ZXJ2aWNlVXJsOworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBl
LCBkYXRhLCBjaGFubmVscy5yZWxlYXNlKCksIGV4dHJhcywgc2VydmljZVVybCkpOwogfQogCi1Q
YXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEs
IGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NS
ZWZQdHI8SW50ZW50PiBJbnRlbnQ6OmNyZWF0ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNv
bnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChh
Y3Rpb24uaXNFbXB0eSgpKSB7CisgICAgU3RyaW5nIGFjdGlvbjsKKyAgICBpZiAoIW9wdGlvbnMu
Z2V0KCJhY3Rpb24iLCBhY3Rpb24pIHx8IGFjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgZWMg
PSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKHR5cGUuaXNF
bXB0eSgpKSB7CisKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBpZiAoIW9wdGlvbnMuZ2V0KCJ0eXBl
IiwgdHlwZSkgfHwgdHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVs
QXJyYXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMoJnBvcnRzLCBl
Yyk7CisgICAgU3RyaW5nIHNlcnZpY2U7CisgICAgS1VSTCBzZXJ2aWNlVXJsOworICAgIGlmIChv
cHRpb25zLmdldCgic2VydmljZSIsIHNlcnZpY2UpICYmICFzZXJ2aWNlLmlzRW1wdHkoKSkgewor
ICAgICAgc2VydmljZVVybCA9IEtVUkwoS1VSTCgpLCBzZXJ2aWNlKTsKKyAgICAgIGlmICghc2Vy
dmljZVVybC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bnRlbnQoYWN0aW9uLCB0eXBlLCBkYXRhLCBjaGFubmVscy5yZWxlYXNlKCkpKTsKLX0KKyAgICBN
ZXNzYWdlUG9ydEFycmF5IHBvcnRzOworICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eT4gY2hhbm5lbHM7CisgICAgaWYgKG9wdGlvbnMuZ2V0KCJ0cmFuc2ZlciIsIHBvcnRzKSkKKyAg
ICAgICAgY2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGVQb3J0cygmcG9ydHMsIGVj
KTsKKworICAgIFNjcmlwdFZhbHVlIGRhdGFWYWx1ZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBzZXJpYWxpemVkRGF0YTsKKyAgICBpZiAob3B0aW9ucy5nZXQoImRhdGEiLCBk
YXRhVmFsdWUpKSB7CisgICAgICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICAgICAgc2Vy
aWFsaXplZERhdGEgPSBkYXRhVmFsdWUuc2VyaWFsaXplKHNjcmlwdFN0YXRlLCAmcG9ydHMsIDAs
IGRpZFRocm93KTsKKyAgICAgICAgaWYgKGRpZFRocm93KSB7CisgICAgICAgICAgICBlYyA9IERB
VEFfQ0xPTkVfRVJSOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CiAK
LUludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUs
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKQotICAgIDogbV9hY3Rpb24o
YWN0aW9uKQotICAgICwgbV90eXBlKHR5cGUpCi17Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIG1f
ZGF0YSA9IGRhdGE7Ci0gICAgZWxzZQotICAgICAgICBtX2RhdGEgPSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6Om51bGxWYWx1ZSgpOworICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZXh0
cmFzOworICAgIERpY3Rpb25hcnkgZXh0cmFzRGljdGlvbmFyeTsKKyAgICBpZiAob3B0aW9ucy5n
ZXQoImV4dHJhcyIsIGV4dHJhc0RpY3Rpb25hcnkpKQorICAgICAgICBleHRyYXNEaWN0aW9uYXJ5
LmdldE93blByb3BlcnRpZXNBc1N0cmluZ0hhc2hNYXAoZXh0cmFzKTsKKworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW50ZW50KGFjdGlvbiwgdHlwZSwgc2VyaWFsaXplZERhdGEucmVsZWFzZSgp
LCBjaGFubmVscy5yZWxlYXNlKCksIGV4dHJhcywgc2VydmljZVVybCkpOwogfQogCi1JbnRlbnQ6
OkludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENo
YW5uZWxBcnJheT4gcG9ydHMpCitJbnRlbnQ6OkludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwg
Y29uc3QgU3RyaW5nJiB0eXBlLAorICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBv
cnRzLAorICAgICAgICAgICAgICAgY29uc3QgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYg
ZXh0cmFzLCBjb25zdCBLVVJMJiBzZXJ2aWNlKQogICAgIDogbV9hY3Rpb24oYWN0aW9uKQogICAg
ICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3BvcnRzKHBvcnRzKQorICAgICwgbV9zZXJ2aWNlKHNl
cnZpY2UpCisgICAgLCBtX2V4dHJhcyhleHRyYXMpCiB7CiAgICAgaWYgKGRhdGEpCiAgICAgICAg
IG1fZGF0YSA9IGRhdGE7CkBAIC04OCwyNiArMTIwLDYgQEAgSW50ZW50OjpJbnRlbnQoY29uc3Qg
U3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2MKICAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKTsK
IH0KIAotY29uc3QgU3RyaW5nJiBJbnRlbnQ6OmFjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fYWN0aW9uOwotfQotCi1jb25zdCBTdHJpbmcmIEludGVudDo6dHlwZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fdHlwZTsKLX0KLQotU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBJbnRlbnQ6OmRh
dGEoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEuZ2V0KCk7Ci19Ci0KLU1lc3NhZ2VQb3J0
Q2hhbm5lbEFycmF5KiBJbnRlbnQ6Om1lc3NhZ2VQb3J0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcG9ydHMuZ2V0KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJfSU5URU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW50ZW50cy9JbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQu
aAppbmRleCAzM2VmNjllMDQ0MTA1OTZlMjQxNTMzNDg1ZWZiYzlmNWM0ZTZiNmQ0Li40NTA5MDk2
NTJlNDdiNTI1MjRhYzBmNmI3NWIwYjJjOTQwZjA3MDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbnRlbnRzL0ludGVudC5oCkBAIC0zMSw2ICszMSw4IEBACiAKICNpZiBFTkFCTEUoV0VCX0lO
VEVOVFMpCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTQxLDMyICs0MywzNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIFNjcmlwdFN0YXRlOwogY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZh
bHVlOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBJbnRlbnQgOiBwdWJs
aWMgUmVmQ291bnRlZDxJbnRlbnQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnRlbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludGVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9u
LCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBk
YXRhLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0cywgRXhjZXB0aW9uQ29kZSYpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEludGVudD4gY3JlYXRlKFNjcmlwdFN0YXRlKiwgY29uc3QgRGlj
dGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIGNvbnN0IFN0cmluZyYgYWN0aW9uKCkg
Y29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3Q7Ci0gICAgU2VyaWFsaXplZFNj
cmlwdFZhbHVlKiBkYXRhKCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiBhY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2FjdGlvbjsgfQorICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQorICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQogCi0gICAgaW50IGlkZW50aWZpZXIoKSBjb25zdDsK
LSAgICB2b2lkIHNldElkZW50aWZpZXIoaW50KTsKKyAgICBNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eSogbWVzc2FnZVBvcnRzKCkgY29uc3QgeyByZXR1cm4gbV9wb3J0cy5nZXQoKTsgfQorICAgIGNv
bnN0IEtVUkwmIHNlcnZpY2UoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2U7IH0KKyAgICBjb25z
dCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBleHRyYXMoKSBjb25zdCB7IHJldHVybiBt
X2V4dHJhczsgfQogCi0gICAgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkqIG1lc3NhZ2VQb3J0cygp
IGNvbnN0OworcHJvdGVjdGVkOgorICAgIEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29u
c3QgU3RyaW5nJiB0eXBlLAorICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gZGF0YSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMsCisg
ICAgICAgICAgIGNvbnN0IFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhcywgY29u
c3QgS1VSTCYgc2VydmljZSk7CiAKIHByaXZhdGU6Ci0gICAgSW50ZW50KGNvbnN0IFN0cmluZyYg
YWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBkYXRhKTsKLSAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIFBhc3NPd25Q
dHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKTsKIAogICAgIFN0cmluZyBtX2FjdGlv
bjsKICAgICBTdHJpbmcgbV90eXBlOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IG1fZGF0YTsKICAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IG1fcG9ydHM7Cisg
ICAgS1VSTCBtX3NlcnZpY2U7CisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2V4
dHJhczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbnRlbnRzL0ludGVudC5pZGwKaW5kZXggZWYwODI1MDczNGZmYzc5YjE5NDk4MGVjODI0M2Vl
YjM0NDhhYzUyZS4uOTI2NTdiNGU2Y2U2MGYwNzk5NTI0NjQwMTYzNjViODcwOTE0OTVlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKQEAgLTI2LDYgKzI2LDcg
QEAKIG1vZHVsZSB3aW5kb3cgewogICBpbnRlcmZhY2UgWwogICAgICAgQ29uZGl0aW9uYWw9V0VC
X0lOVEVOVFMsCisgICAgICBDdXN0b21Db25zdHJ1Y3RvciwKICAgICAgIENvbnN0cnVjdG9yKGlu
IERPTVN0cmluZyBhY3Rpb24sIGluIERPTVN0cmluZyB0eXBlLCBpbiBbT3B0aW9uYWw9RGVmYXVs
dElzTnVsbFN0cmluZywgVHJhbnNmZXJMaXN0PXRyYW5zZmVyTGlzdF0gU2VyaWFsaXplZFNjcmlw
dFZhbHVlIGRhdGEsIGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIEFycmF5IHRyYW5z
ZmVyTGlzdCksCiAgICAgICBDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbgogICBdIEludGVudCB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggNWIyODhmODg3ZDRkZGU0NjQwYTAxMjcwODkwMDQ2YmI4ODZh
NzVlMi4uMjg5Njc5NTUxYTBjZjM0NmUzMjk1MTI3ODRlZTdjNDNlZjY3NTcyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMjI4Miw2ICsyMjgyLDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhJbnQxNkFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SW50MzJBcnJheUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEludDhBcnJheUN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcAppbmRleCBmZDRkYTFmYjAwNmNm
Y2Y2NDE4OWY4MjM5ZDhlNmNiMjBmMWM2YWVhLi4xMGFhZmU4ZGM2YzI4MWVmZTcxZDQ5ZmI5MmY0
YmI5NTY3NTg3NTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0
aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNw
cApAQCAtNDEyLDQgKzQxMiw0NCBAQCBib29sIERpY3Rpb25hcnk6OmdldChjb25zdCBTdHJpbmcm
IGtleSwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mIHZhbAogCiAjZW5kaWYK
IAorYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIERpY3Rpb25hcnkmIHZh
bHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYg
KCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KHY4VmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgIHZhbHVlID0gRGljdGlvbmFyeSh2OFZhbHVl
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgRGljdGlvbmFyeTo6Z2V0T3duUHJv
cGVydGllc0FzU3RyaW5nSGFzaE1hcChXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBoYXNo
TWFwKSBjb25zdAoreworICAgIGlmICghaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvcHRpb25zID0gbV9vcHRpb25zLT5Ub09i
amVjdCgpOworICAgIGlmIChvcHRpb25zLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IG9wdGlvbnMtPkdldE93
blByb3BlcnR5TmFtZXMoKTsKKyAgICBpZiAocHJvcGVydGllcy5Jc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLT5M
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBrZXkgPSBwcm9w
ZXJ0aWVzLT5HZXQoaSktPlRvU3RyaW5nKCk7CisgICAgICAgIGlmICghb3B0aW9ucy0+SGFzKGtl
eSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVl
PiB2YWx1ZSA9IG9wdGlvbnMtPkdldChrZXkpOworICAgICAgICBTdHJpbmcgc3RyaW5nS2V5ID0g
djhWYWx1ZVRvV2ViQ29yZVN0cmluZyhrZXkpOworICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWUg
PSB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgaWYgKCFzdHJpbmdLZXku
aXNFbXB0eSgpKQorICAgICAgICAgICAgaGFzaE1hcC5zZXQoc3RyaW5nS2V5LCBzdHJpbmdWYWx1
ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaAppbmRleCBlNTg4OTBlNTlm
YjI1MjE2NTIwNzFjZjg1ZjYwMTU5MTMwMTk4NzBhLi5jNGMzM2IxYmIyMDhlOTY0MGRmZmI4NDA2
ZDg5M2I0MTI4MzI3OWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9E
aWN0aW9uYXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5o
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
ICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0
cmluZy5oPgogCkBAIC04Myw2ICs4NCw4IEBAIHB1YmxpYzoKICAgICBib29sIGdldChjb25zdCBT
dHJpbmcmLCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiYpIGNvbnN0OwogI2Vu
ZGlmCiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgSGFzaFNldDxBdG9taWNTdHJpbmc+Jikg
Y29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgRGljdGlvbmFyeSYpIGNvbnN0Owor
ICAgIGJvb2wgZ2V0T3duUHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcChXVEY6Okhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+JikgY29uc3Q7CiAKICAgICBib29sIGdldFdpdGhVbmRlZmluZWRPck51bGxD
aGVjayhjb25zdCBTdHJpbmcmLCBTdHJpbmcmKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwCmluZGV4IGVjYzM2NzM2MmE4MzhiN2Y5ODkyOGVkMDU5
OWQ2Mzc2OWYwOTdjYjcuLjMxYmNkMjNlZTlhMzdkNzBmZGU1MTdiNDI5YTQ1ODBlMWQzZjEzNjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKQEAgLTMyLDkg
KzMyLDExIEBACiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKIAogI2luY2x1ZGUgIkluc3BlY3Rv
clZhbHVlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U2Nv
cGUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKKyNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00NCw2ICs0NiwxMyBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gU2NyaXB0VmFsdWU6OnNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdAogICAgIHJl
dHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2OFZhbHVlKCkpOwogfQogCitQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0VmFsdWU6OnNlcmlhbGl6ZShTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEFy
cmF5QnVmZmVyQXJyYXkqIGFycmF5QnVmZmVycywgYm9vbCYgZGlkVGhyb3cpCit7CisgICAgU2Ny
aXB0U2NvcGUgc2NvcGUoc2NyaXB0U3RhdGUpOworICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZSh2OFZhbHVlKCksIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzLCBkaWRU
aHJvdyk7Cit9CisKIFNjcmlwdFZhbHVlIFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUpCiB7CiAgICAg
U2NyaXB0U2NvcGUgc2NvcGUoc2NyaXB0U3RhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdFZhbHVlLmgKaW5kZXggOTEzNTZkNGM3ZjFiYzQ1YTc1MTU3NDc5ZjI2NzE3MjEzN2Mw
MmY2NC4uZmFhMWY2MzhlYTc2MGFjZmIyM2Q4NDZjOWJmNGZmYmM1N2JhYjJmMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCkBAIC0zNiwxNSArMzYsMjQgQEAKIAog
I2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWZuZGVmIE5ERUJVRwog
I2luY2x1ZGUgIlY4UHJveHkuaCIgIC8vIGZvciByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBnbG9i
YWwgaGFuZGxlcy4KICNlbmRpZgogCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIEFycmF5QnVmZmVy
OworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc3BlY3RvclZhbHVlOworY2xh
c3MgTWVzc2FnZVBvcnQ7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Cit0eXBlZGVmIFZl
Y3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+LCAxPiBNZXNzYWdlUG9ydEFycmF5OwordHlwZWRlZiBW
ZWN0b3I8UmVmUHRyPFdURjo6QXJyYXlCdWZmZXI+LCAxPiBBcnJheUJ1ZmZlckFycmF5OwogCiBj
bGFzcyBTY3JpcHRWYWx1ZSB7CiBwdWJsaWM6CkBAIC0xMzEsNiArMTQwLDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUo
U2NyaXB0U3RhdGUqKTsKKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Vy
aWFsaXplKFNjcmlwdFN0YXRlKiwgTWVzc2FnZVBvcnRBcnJheSosIEFycmF5QnVmZmVyQXJyYXkq
LCBib29sJik7CiAgICAgc3RhdGljIFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplKFNjcmlwdFN0YXRl
KiwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKik7CiAKICAgICB2b2lkIGNsZWFyKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVj
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hODU5OTAxNGQ2YTBmMWU0ZWY2NDQ1YzZkMWYwMzIyZjU5OTdj
MWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW50ZW50LmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIK
KworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgor
I2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SW50ZW50LmgiCisjaW5jbHVk
ZSAiVjhNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYv
QXJyYXlCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhJbnRlbnQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5JbnRlbnQuQ29uc3RydWN0b3IiKTsKKworICAg
IGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
IkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIs
IFY4UHJveHk6OlR5cGVFcnJvcik7CisKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50
KCkgPT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVy
biBhcmdzLkhvbGRlcigpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9y
KTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA9PSAxKSB7CisgICAgICAgIC8vIFVzZSB0aGUgZGlj
dGlvbmFyeSBjb25zdHJ1Y3Rvci4gVGhpcyBibG9jayB3aWxsIHJldHVybiBpZiB0aGUKKyAgICAg
ICAgLy8gYXJndW1lbnQgaXNuJ3QgYSB2YWxpZCBEaWN0aW9uYXJ5LgorICAgICAgICBFWENFUFRJ
T05fQkxPQ0soRGljdGlvbmFyeSwgb3B0aW9ucywgYXJnc1swXSk7CisgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgICAgICBSZWZQdHI8SW50ZW50PiBpbXBsID0gSW50ZW50OjpjcmVh
dGUoU2NyaXB0U3RhdGU6OmN1cnJlbnQoKSwgb3B0aW9ucywgZWMpOworICAgICAgICBpZiAoZWMp
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CisKKyAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICAgICAgVjhET01XcmFw
cGVyOjpzZXRET01XcmFwcGVyKHdyYXBwZXIsICZpbmZvLCBpbXBsLmdldCgpKTsKKyAgICAgICAg
VjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbC5yZWxlYXNlKCksIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikpOworICAgICAgICByZXR1cm4g
d3JhcHBlcjsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTVFJJTkdf
VE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIGFjdGlvbiwgTUFZ
QkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CisgICAg
U1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCB0eXBl
LCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsK
KyAgICBNZXNzYWdlUG9ydEFycmF5IG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3Q7CisgICAg
QXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0OworICAgIGlmIChh
cmdzLkxlbmd0aCgpID4gMykgeworICAgICAgICBpZiAoIWV4dHJhY3RUcmFuc2ZlcmFibGVzKGFy
Z3NbM10sIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsIGFycmF5QnVmZmVyQXJyYXlUcmFu
c2Zlckxpc3QpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBleHRy
YWN0IHRyYW5zZmVyYWJsZXMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworICAgIH0KKyAgICBib29s
IGRhdGFEaWRUaHJvdyA9IGZhbHNlOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzJdLCAmbWVzc2FnZVBv
cnRBcnJheVRyYW5zZmVyTGlzdCwgJmFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3QsIGRhdGFE
aWRUaHJvdyk7CisgICAgaWYgKGRhdGFEaWRUaHJvdykKKyAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoREFUQV9DTE9ORV9FUlIpOworCisgICAgUmVmUHRyPEludGVudD4gaW1wbCA9IEludGVudDo6
Y3JlYXRlKGFjdGlvbiwgdHlwZSwgZGF0YSwgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwg
ZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOworCisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBWOERP
TVdyYXBwZXI6OnNldERPTVdyYXBwZXIod3JhcHBlciwgJmluZm8sIGltcGwuZ2V0KCkpOworICAg
IFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGltcGwucmVsZWFzZSgpLCB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKKyAgICByZXR1cm4gd3Jh
cHBlcjsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkludGVudC5oCmluZGV4IDczYTYyMTMyYWQ2MzM5YzU2ZDQ1NjNlNDI0ZGI2
ZjU4ZGZkMDMzODIuLmNjMDgwYWQ5OWM1NDlmZTJmMjUyMjI4NTBhN2IwOGM2OGY3ZDBkNDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0v
V2ViUHJpdmF0ZVB0ci5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorI2luY2x1
ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEludGVudDsgfQpAQCAtNjMsNiArNjQsMTYgQEAg
cHVibGljOgogICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGFjdGlvbigpIGNvbnN0OwogICAg
IFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIHR5cGUoKSBjb25zdDsKICAgICBXRUJLSVRfRVhQT1JU
IFdlYlN0cmluZyBkYXRhKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJVUkwgc2Vydmlj
ZSgpIGNvbnN0OworCisgICAgLy8gUmV0cmlldmUgYSBsaXN0IG9mIHRoZSBuYW1lcyBvZiBleHRy
YSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgLy8gaW50ZW50LgorICAgIFdFQktJ
VF9FWFBPUlQgV2ViVmVjdG9yPFdlYlN0cmluZz4gZXh0cmFzTmFtZXMoKSBjb25zdDsKKworICAg
IC8vIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhbiBleHRyYSBtZXRhZGF0YSBlbGVtZW50LiBUaGUg
YXJndW1lbnQgc2hvdWxkCisgICAgLy8gYmUgb25lIG9mIHRoZSBuYW1lcyByZXRyaWV2ZWQgd2l0
aCB8ZXh0cmFzTmFtZXN8LiBSZXR1cm5zIGFuIGVtcHR5CisgICAgLy8gc3RyaW5nIGlmIHRoZSBu
YW1lIGlzIGludmFsaWQuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgZXh0cmFzVmFsdWUo
Y29uc3QgV2ViU3RyaW5nJikgY29uc3Q7CiAKICAgICAvLyBDYWxsZXIgdGFrZXMgb3duZXJzaGlw
IG9mIHRoZSBwb3J0cy4KICAgICBXRUJLSVRfRVhQT1JUIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5KiBtZXNzYWdlUG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkludGVudC5jcHAKaW5kZXggOGE3ZDZhYWM1NDNiZDk5OTk5YjhmYTc5ODQz
YTM0MDNhZTU2N2M5ZS4uY2U0ZTE1YmQ2ZWM2MmI1N2ZlNTkyMmY2OTViNWJkZjJhOWM0ODIxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiSW50ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWwuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMTAzLDYgKzEwNCwxNSBA
QCBXZWJTdHJpbmcgV2ViSW50ZW50OjpkYXRhKCkgY29uc3QKICNlbmRpZgogfQogCitXZWJVUkwg
V2ViSW50ZW50OjpzZXJ2aWNlKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisg
ICAgcmV0dXJuIFdlYlVSTChtX3ByaXZhdGUtPnNlcnZpY2UoKSk7CisjZWxzZQorICAgIHJldHVy
biBXZWJVUkwoKTsKKyNlbmRpZgorfQorCiBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogV2Vi
SW50ZW50OjptZXNzYWdlUG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0CiB7CiAgICAgLy8gTm90
ZTogc2VlIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0TWVzc2FnZVRvUmVtb3RlLgpA
QCAtMTIwLDQgKzEzMCwzMCBAQCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogV2ViSW50ZW50
OjptZXNzYWdlUG9ydENoYW5uZWxzUmVsZWFzZSgpIGNvbnN0CiAgICAgcmV0dXJuIHdlYkNoYW5u
ZWxzOwogfQogCitXZWJWZWN0b3I8V2ViU3RyaW5nPiBXZWJJbnRlbnQ6OmV4dHJhc05hbWVzKCkg
Y29uc3QKK3sKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgc2l6ZV90IG51bUV4dHJhcyA9
IG1fcHJpdmF0ZS0+ZXh0cmFzKCkuc2l6ZSgpOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGtl
eVN0cmluZ3MobnVtRXh0cmFzKTsKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvcjo6S2V5cyBrZXlJdGVyID0gbV9wcml2YXRlLT5leHRyYXMoKS5iZWdpbigp
LmtleXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsga2V5SXRlciAhPSBtX3ByaXZhdGUtPmV4
dHJhcygpLmVuZCgpLmtleXMoKTsgKytrZXlJdGVyLCArK2kpCisgICAgICAgIGtleVN0cmluZ3Nb
aV0gPSAqa2V5SXRlcjsKKyAgICByZXR1cm4ga2V5U3RyaW5nczsKKyNlbHNlCisgICAgcmV0dXJu
IFdlYlZlY3RvcjxXZWJTdHJpbmc+KCk7CisjZW5kaWYKK30KKworV2ViU3RyaW5nIFdlYkludGVu
dDo6ZXh0cmFzVmFsdWUoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdAoreworI2lmIEVOQUJM
RShXRUJfSU5URU5UUykKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciB2YWwgPSBtX3ByaXZhdGUtPmV4dHJhcygpLmZpbmQobmFtZSk7CisgICAgaWYgKHZh
bCA9PSBtX3ByaXZhdGUtPmV4dHJhcygpLmVuZCgpKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5n
KCk7CisgICAgcmV0dXJuIHZhbC0+c2Vjb25kOworI2Vsc2UKKyAgICByZXR1cm4gV2ViU3RyaW5n
KCk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggNmZmOTVjNTYyNDE3MDhiY2Ez
MzFjYjBjMmMyZGNhOWQ3ZGU4MGQxYi4uZDg0NWI3ZWMwNTA3Zjk0Y2QwZjczNzRlYTY1NmUyOGQ0
ZjVhYjI5MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmll
d0hvc3QuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0
LmNwcApAQCAtMTMzNSw2ICsxMzM1LDEzIEBAIHZvaWQgV2ViVmlld0hvc3Q6OmRpc3BhdGNoSW50
ZW50KFdlYkZyYW1lKiBzb3VyY2UsIGNvbnN0IFdlYkludGVudFJlcXVlc3QmIHJlcXVlCiAgICAg
ICAgICAgICAoKnBvcnRzKVtpXS0+ZGVzdHJveSgpOwogICAgICAgICBkZWxldGUgcG9ydHM7CiAg
ICAgfQorICAgIGlmICghcmVxdWVzdC5pbnRlbnQoKS5zZXJ2aWNlKCkuaXNFbXB0eSgpKQorICAg
ICAgICBwcmludGYoIkV4cGxpY2l0IGludGVudCBzZXJ2aWNlOiAlc1xuIiwgcmVxdWVzdC5pbnRl
bnQoKS5zZXJ2aWNlKCkuc3BlYygpLmRhdGEoKSk7CisgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4g
ZXh0cmFzID0gcmVxdWVzdC5pbnRlbnQoKS5leHRyYXNOYW1lcygpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZXh0cmFzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHByaW50ZigiRXh0cmFz
WyVzXSA9ICVzXG4iLCBleHRyYXNbaV0udXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgIHJl
cXVlc3QuaW50ZW50KCkuZXh0cmFzVmFsdWUoZXh0cmFzW2ldKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICB9CiB9CiAKIC8vIFB1YmxpYyBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dAppbmRleCA3NjZjZmQwYTRkMDQ3
YjU3NjRjODgzM2I5MDRjYWRmNWM5YTRjNTY3Li5iZmYwYTY2YzQyZjdkMzc0M2UxZjAyMzZiYzQ2
MWJiZjQyNDg0MTM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRl
bnRzLWFwaS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50
ZW50cy1hcGktZXhwZWN0ZWQudHh0CkBAIC0xLDYgKzEsNiBAQAogUEFTUyBuYXZpZ2F0b3Iud2Vi
a2l0U3RhcnRBY3Rpdml0eSBpcyBkZWZpbmVkLgogUEFTUyB2YXIgaW50ZW50ID0gbmV3IFdlYktp
dEludGVudCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRz
LgotUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdhJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
Tm90IGVub3VnaCBhcmd1bWVudHMuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoJ2EnKSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCiBQQVNTIG5ldyBX
ZWJLaXRJbnRlbnQoJycsJycsJycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjog
RE9NIEV4Y2VwdGlvbiAxMi4KIFBBU1MgbmV3IFdlYktpdEludGVudCgnJywnYicsJ2MnKSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCiBQQVNTIG5l
dyBXZWJLaXRJbnRlbnQoJycsJycsJ2MnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9F
UlI6IERPTSBFeGNlcHRpb24gMTIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRz
L3dlYi1pbnRlbnRzLWFwaS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50
cy1hcGkuaHRtbAppbmRleCAxZGUxN2EwOTZlMWU4MTVmZmJiYWEzOGYxNzNhZDc1ZDVlMTM1NWQz
Li4yNjJjYTBkYTBmYzE0MTYzZTcxMGE4ODM2OWQ5ZTEzNzYzMzA0ZmMzIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisrKyBiL0xheW91dFRl
c3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKQEAgLTgsNyArOCw3IEBACiAgICAg
ICBzaG91bGRCZURlZmluZWQoIm5hdmlnYXRvci53ZWJraXRTdGFydEFjdGl2aXR5Iik7CiAgICAg
ICAKICAgICAgIHNob3VsZFRocm93KCJ2YXIgaW50ZW50ID0gbmV3IFdlYktpdEludGVudCgpIiwg
IidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzJyIpOzsKLSAgICAgIHNob3VsZFRocm93
KCJuZXcgV2ViS2l0SW50ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVu
dHMnIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnYScpIiwgIidFcnJv
cjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKICAgICAgIHNob3VsZFRocm93KCJu
ZXcgV2ViS2l0SW50ZW50KCcnLCcnLCcnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNl
cHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnJywnYics
J2MnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CiAgICAgICBz
aG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnJywnJywnYycpIiwgIidFcnJvcjogU1lOVEFY
X0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmlu
dGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmludGVudHMvd2ViLWludGVudHMtb2JqLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yZjI5YTI5NWJjZDVjYzYzMmFlNmJkNGM2YzFiYTA0ZDYxOWQzMTQxCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29u
c3RydWN0b3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1JlY2VpdmVkIFdlYiBJbnRl
bnQ6IGFjdGlvbj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbgorUmVjZWl2ZWQgV2ViIEludGVudDog
YWN0aW9uPWFjdGlvbjEgdHlwZT10ZXh0L3BsYWluK2V4cGxpY2l0CitFeHBsaWNpdCBpbnRlbnQg
c2VydmljZTogaHR0cDovL2V4cGxpY2l0LmNvbS8KK1JlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlv
bj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbitleHRyYXMKK0V4dHJhc1thXSA9IGIKK1JlY2VpdmVk
IFdlYiBJbnRlbnQ6IGFjdGlvbj1hY3Rpb24xIHR5cGU9dGV4dC9wbGFpbitwb3J0CitIYXZlIDEg
cG9ydHMKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
UEFTUyBuZXcgV2ViS2l0SW50ZW50KHt9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9F
UlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoZHVtbXkpIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3
IFdlYktpdEludGVudChudWxsKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQodW5kZWZpbmVkKSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBX
ZWJLaXRJbnRlbnQoNSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhj
ZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KCdzaXgnKSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRl
bnQoWydzaXgnXSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0
aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYSc6J2InfSkgdGhyZXcgZXhjZXB0aW9u
IEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50
ZW50KHsnYWN0aW9uJzonYid9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeyd0eXBlJzonYid9KSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5l
dyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOicnLCAndHlwZSc6J2InfSkgdGhyZXcgZXhjZXB0aW9u
IEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50
ZW50KHsnYWN0aW9uJzonYScsICd0eXBlJzonJ30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lO
VEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgKG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rp
b24nOidhJywndHlwZSc6J2InfSkpLmFjdGlvbiBpcyAiYSIKK1BBU1MgKG5ldyBXZWJLaXRJbnRl
bnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InfSkpLnR5cGUgaXMgImIiCitQQVNTIChuZXcgV2Vi
S2l0SW50ZW50KHsnYWN0aW9uJzpudWxsLCd0eXBlJzonYid9KSkuYWN0aW9uIGlzICJudWxsIgor
UEFTUyAobmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6dW5kZWZpbmVkLCd0eXBlJzonYid9KSku
YWN0aW9uIGlzICJ1bmRlZmluZWQiCitQQVNTIChuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzon
YScsJ3R5cGUnOm51bGx9KSkudHlwZSBpcyAibnVsbCIKK1BBU1MgKG5ldyBXZWJLaXRJbnRlbnQo
eydhY3Rpb24nOidhJywndHlwZSc6dW5kZWZpbmVkfSkpLnR5cGUgaXMgInVuZGVmaW5lZCIKK1BB
U1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ3NlcnZpY2UnOicn
fSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rp
b24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzpudWxsfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsn
YWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6dW5kZWZpbmVkfSkgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViS2l0
SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnc2VydmljZSc6J25vdCBhIHVybCd9KSB0
aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNT
IG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzondXJs
Oi8vYSB1cmwnfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5ldyBXZWJLaXRJbnRl
bnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzonaHR0dHA6Ly9hIHVybCd9KSBk
aWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6
J2EnLCd0eXBlJzonYicsJ2RhdGEnOndpbmRvd30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogREFU
QV9DTE9ORV9FUlI6IERPTSBFeGNlcHRpb24gMjUuCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydh
Y3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMnOm51bGx9KSBkaWQgbm90IHRocm93IGV4Y2Vw
dGlvbi4KK1BBU1MgbmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ2V4
dHJhcyc6dW5kZWZpbmVkfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5ldyBXZWJL
aXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMnOicnfSkgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uCitQQVNTIG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlw
ZSc6J2InLCdleHRyYXMnOidub3QgYSBkaWN0J30pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgor
UEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzo0
Mn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuZXcgV2ViS2l0SW50ZW50KHsnYWN0
aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzpbJ2EnLCdiJ119KSBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4KKyogc2VudCBvYmplY3QgaW50ZW50CisqIHNlbnQgZXhwbGljaXQgaW50ZW50Cisq
IHNlbnQgaW50ZW50IHdpdGggZXh0cmFzCisqIHNlbnQgaW50ZW50IHdpdGggcG9ydAorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLW9iai1jb25zdHJ1Y3Rv
ci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1vYmotY29uc3RydWN0
b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wZDA2NjIyYmIxN2ZiN2M5MDUyNWEzZGIxYzMxMGUzNjA4M2M4
ZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50
cy1vYmotY29uc3RydWN0b3IuaHRtbApAQCAtMCwwICsxLDEwMiBAQAorPGh0bWw+CisgIDxoZWFk
PgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWItaW50ZW50cy10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHNob3VsZE5vdFRocm93
KGV4cHJlc3Npb24pCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZXZhbChleHBy
ZXNzaW9uKTsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoZXhwcmVzc2lvbiArICIgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uIik7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdGVz
dEZhaWxlZChleHByZXNzaW9uICsgIiBzaG91bGQgbm90IHRocm93IGV4Y2VwdGlvbi4gVGhyZXcg
ZXhjZXB0aW9uICIgKyBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGR1bW15
KCkge30KKworICAgIGZ1bmN0aW9uIGJ1dHRvbkNsaWNrZWQoKSB7CisgICAgICAgIC8vIHxhY3Rp
b258IGFuZCB8dHlwZXwgYXJlIHJlcXVpcmVkIHRvIGJlIHByZXNlbnQgYW5kIG5vbi1lbXB0eS4K
KyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoe30pIiwgIidFcnJvcjogU1lO
VEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBX
ZWJLaXRJbnRlbnQoZHVtbXkpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
MiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQobnVsbCkiLCAiJ0Vy
cm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJv
dygibmV3IFdlYktpdEludGVudCh1bmRlZmluZWQpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9N
IEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQo
NSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBz
aG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCgnc2l4JykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdElu
dGVudChbJ3NpeCddKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7
CisgICAgICAgIHNob3VsZFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYSc6J2InfSkiLCAiJ0Vy
cm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJv
dygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2InfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdElu
dGVudCh7J3R5cGUnOidiJ30pIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
MiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOicn
LCAndHlwZSc6J2InfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIp
OworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCAn
dHlwZSc6Jyd9KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7Cisg
ICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiKG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24n
OidhJywndHlwZSc6J2InfSkpLmFjdGlvbiIsICJhIik7CisgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygiKG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InfSkpLnR5
cGUiLCAiYiIpOworCisgICAgICAgIC8vIFRoZXNlIHdpbGwgZ2V0IGNvbnZlcnRlZCB0byBsaXRl
cmFscyAibnVsbCIgYW5kICJ1bmRlZmluZWQiLiBBd2t3YXJkCisgICAgICAgIC8vIG5hbWVzLCBi
dXQgaWRpb21hdGljIHVzYWdlLgorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIihuZXcg
V2ViS2l0SW50ZW50KHsnYWN0aW9uJzpudWxsLCd0eXBlJzonYid9KSkuYWN0aW9uIiwgIm51bGwi
KTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCIobmV3IFdlYktpdEludGVudCh7J2Fj
dGlvbic6dW5kZWZpbmVkLCd0eXBlJzonYid9KSkuYWN0aW9uIiwgInVuZGVmaW5lZCIpOworICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIihuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzon
YScsJ3R5cGUnOm51bGx9KSkudHlwZSIsICJudWxsIik7CisgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygiKG5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6dW5kZWZpbmVk
fSkpLnR5cGUiLCAidW5kZWZpbmVkIik7CisKKyAgICAgICAgLy8gfHNlcnZpY2V8LCBpZiBwcmVz
ZW50LCBtdXN0IGJlIGEgdmFsaWQgdXJsLgorICAgICAgICBzaG91bGROb3RUaHJvdygibmV3IFdl
YktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ3NlcnZpY2UnOicnfSkiKTsKKyAg
ICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6
J2InLCdzZXJ2aWNlJzpudWxsfSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyJyIpOworICAgICAgICBzaG91bGRUaHJvdygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6
J2EnLCd0eXBlJzonYicsJ3NlcnZpY2UnOnVuZGVmaW5lZH0pIiwgIidFcnJvcjogU1lOVEFYX0VS
UjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJ
bnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzonbm90IGEgdXJsJ30pIiwg
IidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgICAgc2hvdWxk
Tm90VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2
aWNlJzondXJsOi8vYSB1cmwnfSkiKTsKKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJL
aXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdzZXJ2aWNlJzonaHR0dHA6Ly9hIHVy
bCd9KSIpOworCisgICAgICAgIC8vIHxkYXRhfCBtdXN0IGJlIGNsb25lYWJsZS4KKyAgICAgICAg
c2hvdWxkVGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdk
YXRhJzp3aW5kb3d9KSIsICInRXJyb3I6IERBVEFfQ0xPTkVfRVJSOiBET00gRXhjZXB0aW9uIDI1
JyIpOworCisgICAgICAgIC8vIHxleHRyYXN8LCBpZiBwcmVzZW50LCBtdXN0IGJlIGEgZGljdGlv
bmFyeS4KKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24n
OidhJywndHlwZSc6J2InLCdleHRyYXMnOm51bGx9KSIpOworICAgICAgICBzaG91bGROb3RUaHJv
dygibmV3IFdlYktpdEludGVudCh7J2FjdGlvbic6J2EnLCd0eXBlJzonYicsJ2V4dHJhcyc6dW5k
ZWZpbmVkfSkiKTsKKyAgICAgICAgc2hvdWxkTm90VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydh
Y3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMnOicnfSkiKTsKKyAgICAgICAgc2hvdWxkTm90
VGhyb3coIm5ldyBXZWJLaXRJbnRlbnQoeydhY3Rpb24nOidhJywndHlwZSc6J2InLCdleHRyYXMn
Oidub3QgYSBkaWN0J30pIik7CisgICAgICAgIHNob3VsZE5vdFRocm93KCJuZXcgV2ViS2l0SW50
ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywnZXh0cmFzJzo0Mn0pIik7CisgICAgICAgIHNo
b3VsZE5vdFRocm93KCJuZXcgV2ViS2l0SW50ZW50KHsnYWN0aW9uJzonYScsJ3R5cGUnOidiJywn
ZXh0cmFzJzpbJ2EnLCdiJ119KSIpOworCisgICAgICAgIHZhciBzaW1wbGVJbnRlbnQgPSBuZXcg
V2ViS2l0SW50ZW50KAorICAgICAgICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAg
ICAgICAidHlwZSI6InRleHQvcGxhaW4iLAorICAgICAgICAgICAgICJkYXRhIjoibWVzc2FnZSJ9
KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0aXZpdHkoc2ltcGxlSW50ZW50KTsK
KyAgICAgICAgZGVidWcoIiogc2VudCBvYmplY3QgaW50ZW50Iik7CisKKyAgICAgICAgdmFyIGV4
cGxpY2l0SW50ZW50ID0gbmV3IFdlYktpdEludGVudCgKKyAgICAgICAgICAgIHsiYWN0aW9uIjoi
YWN0aW9uMSIsCisgICAgICAgICAgICAgInR5cGUiOiJ0ZXh0L3BsYWluK2V4cGxpY2l0IiwKKyAg
ICAgICAgICAgICAiZGF0YSI6Im1lc3NhZ2UiLAorICAgICAgICAgICAgICJzZXJ2aWNlIiA6ICJo
dHRwOi8vZXhwbGljaXQuY29tLyJ9KTsKKyAgICAgICAgbmF2aWdhdG9yLndlYmtpdFN0YXJ0QWN0
aXZpdHkoZXhwbGljaXRJbnRlbnQpOworICAgICAgICBkZWJ1ZygiKiBzZW50IGV4cGxpY2l0IGlu
dGVudCIpOworCisgICAgICAgIHZhciBleHRyYXNJbnRlbnQgPSBuZXcgV2ViS2l0SW50ZW50KAor
ICAgICAgICAgICAgeyJhY3Rpb24iOiJhY3Rpb24xIiwKKyAgICAgICAgICAgICAidHlwZSI6InRl
eHQvcGxhaW4rZXh0cmFzIiwKKyAgICAgICAgICAgICAiZGF0YSI6Im1lc3NhZ2UiLAorICAgICAg
ICAgICAgICJleHRyYXMiOnsiYSI6ImIifX0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3Rh
cnRBY3Rpdml0eShleHRyYXNJbnRlbnQpOworICAgICAgICBkZWJ1ZygiKiBzZW50IGludGVudCB3
aXRoIGV4dHJhcyIpOworCisgICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVs
KCk7CisgICAgICAgIGNoYW5uZWwucG9ydDIub25NZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBkZWJ1ZygiKiBnb3QgbWVzc2FnZSIpOworICAgICAgICB9OworICAgICAgICB2YXIg
cG9ydEludGVudCA9IG5ldyBXZWJLaXRJbnRlbnQoCisgICAgICAgICAgICB7ImFjdGlvbiI6ImFj
dGlvbjEiLAorICAgICAgICAgICAgICJ0eXBlIjoidGV4dC9wbGFpbitwb3J0IiwKKyAgICAgICAg
ICAgICAiZGF0YSI6Y2hhbm5lbC5wb3J0MSwKKyAgICAgICAgICAgICAidHJhbnNmZXIiOltjaGFu
bmVsLnBvcnQxXX0pOworICAgICAgICBuYXZpZ2F0b3Iud2Via2l0U3RhcnRBY3Rpdml0eShwb3J0
SW50ZW50KTsKKyAgICAgICAgZGVidWcoIiogc2VudCBpbnRlbnQgd2l0aCBwb3J0Iik7CisgICAg
fQorICAgIDwvc2NyaXB0PgorICA8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InNpbXVsYXRlQnV0dG9u
UHJlc3MoKSI+Cis8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iYnV0dG9uIiB2YWx1ZT0iU3RhcnQg
V2ViIEludGVudCIgb25tb3VzZXVwPSJidXR0b25DbGlja2VkKCkiPgorPHNjcmlwdCBzcmM9Ii4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>