<?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>156777</bug_id>
          
          <creation_ts>2016-04-19 19:23:24 -0700</creation_ts>
          <short_desc>Drop [UsePointersEvenForNonNullableObjectArguments] from WebAudio</short_desc>
          <delta_ts>2016-04-21 05:01:49 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1185294</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-19 19:23:24 -0700</bug_when>
    <thetext>Drop [UsePointersEvenForNonNullableObjectArguments] from WebAudio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185315</commentid>
    <comment_count>1</comment_count>
      <attachid>276797</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-19 20:23:24 -0700</bug_when>
    <thetext>Created attachment 276797
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185316</commentid>
    <comment_count>2</comment_count>
      <attachid>276798</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-19 20:31:05 -0700</bug_when>
    <thetext>Created attachment 276798
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185322</commentid>
    <comment_count>3</comment_count>
      <attachid>276799</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-19 21:01:35 -0700</bug_when>
    <thetext>Created attachment 276799
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185398</commentid>
    <comment_count>4</comment_count>
      <attachid>276799</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-20 05:56:22 -0700</bug_when>
    <thetext>Comment on attachment 276799
Patch

Patch seems almost good to me.
I have some questions (see below) before going r+.

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        No new tests, no intended Web-exposed behavioral change.

There are some changes to AudioContext.idl which can be observed by web content.
DO we want to add some tests to track these changes?

&gt; Source/WebCore/Modules/webaudio/AsyncAudioDecoder.cpp:54
&gt; +void AsyncAudioDecoder::decodeAsync(Ref&lt;ArrayBuffer&gt;&amp;&amp; audioData, float sampleRate, RefPtr&lt;AudioBufferCallback&gt;&amp;&amp; successCallback, RefPtr&lt;AudioBufferCallback&gt;&amp;&amp; errorCallback)

I guess successCallback should not be null, contrary to errorCallback that is probably optional.
Do we want to make that visible in the signature and binding generator by making successCallback a Ref&amp;&amp;.
Or just add an ASSERT(successCallback).

&gt; Source/WebCore/Modules/webaudio/AudioContext.idl:64
&gt; +    [RaisesException] AudioBuffer createBuffer(ArrayBuffer buffer, boolean mixToMono);

This is observable by the JS layer although probably ok not to test.

&gt; Source/WebCore/Modules/webaudio/AudioContext.idl:69
&gt;  

Do we really need that change?
This seems strange to have successCallback nullable or even optional.
How are we supposed to get the result of decodeAudioData then?

&gt; Source/WebCore/Modules/webaudio/OscillatorNode.idl:58
&gt; +    void setPeriodicWave(PeriodicWave? wave);

I am a bit reluctant to change the IDL since it is probably not conforming to the spec.
Is it complex to fix setPeriodicWave? Should we leave that to another bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185425</commentid>
    <comment_count>5</comment_count>
      <attachid>276799</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 09:12:35 -0700</bug_when>
    <thetext>Comment on attachment 276799
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        No new tests, no intended Web-exposed behavioral change.
&gt; 
&gt; There are some changes to AudioContext.idl which can be observed by web content.
&gt; DO we want to add some tests to track these changes?

After double-checking, the only change I see is the type of the exception being thrown when passing null.

&gt;&gt; Source/WebCore/Modules/webaudio/AsyncAudioDecoder.cpp:54
&gt;&gt; +void AsyncAudioDecoder::decodeAsync(Ref&lt;ArrayBuffer&gt;&amp;&amp; audioData, float sampleRate, RefPtr&lt;AudioBufferCallback&gt;&amp;&amp; successCallback, RefPtr&lt;AudioBufferCallback&gt;&amp;&amp; errorCallback)
&gt; 
&gt; I guess successCallback should not be null, contrary to errorCallback that is probably optional.
&gt; Do we want to make that visible in the signature and binding generator by making successCallback a Ref&amp;&amp;.
&gt; Or just add an ASSERT(successCallback).

The currently implementation correctly handles a null success callback at the moment. I do not want to change the Web-Exposed behavior in this patch.
Also note that in the spec, both callback are optional and the operation returns a Promise.

&gt;&gt; Source/WebCore/Modules/webaudio/AudioContext.idl:64
&gt;&gt; +    [RaisesException] AudioBuffer createBuffer(ArrayBuffer buffer, boolean mixToMono);
&gt; 
&gt; This is observable by the JS layer although probably ok not to test.

Hmm, the implementation was doing:
ASSERT(arrayBuffer);
394     if (!arrayBuffer) {
395         ec = SYNTAX_ERR;
396         return nullptr;
397     }

So we still throw an exception when passing null. However, we now throw a TypeError instead of a SyntaxError. The new behavior is compliant with Web IDL. Would you like me to write a test to make sure the exception thrown is indeed a TypeError?

&gt;&gt; Source/WebCore/Modules/webaudio/AudioContext.idl:69
&gt;&gt;  
&gt; 
&gt; Do we really need that change?
&gt; This seems strange to have successCallback nullable or even optional.
&gt; How are we supposed to get the result of decodeAudioData then?

We need this change if we want to maintain the previous behavior. I did not want to change the Web-Exposed behavior.

&gt;&gt; Source/WebCore/Modules/webaudio/OscillatorNode.idl:58
&gt;&gt; +    void setPeriodicWave(PeriodicWave? wave);
&gt; 
&gt; I am a bit reluctant to change the IDL since it is probably not conforming to the spec.
&gt; Is it complex to fix setPeriodicWave? Should we leave that to another bug?

Well, it is not complex but it is a web-exposed behavior change, which is something I do not want to do in this patch. Starting to throw an exception in a case where we previously did not is always a compatibility risk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185427</commentid>
    <comment_count>6</comment_count>
      <attachid>276828</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 09:20:55 -0700</bug_when>
    <thetext>Created attachment 276828
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185428</commentid>
    <comment_count>7</comment_count>
      <attachid>276799</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-20 09:21:39 -0700</bug_when>
    <thetext>Comment on attachment 276799
Patch

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

&gt;&gt; Source/WebCore/Modules/webaudio/AsyncAudioDecoder.cpp:54
&gt;&gt; +void AsyncAudioDecoder::decodeAsync(Ref&lt;ArrayBuffer&gt;&amp;&amp; audioData, float sampleRate, RefPtr&lt;AudioBufferCallback&gt;&amp;&amp; successCallback, RefPtr&lt;AudioBufferCallback&gt;&amp;&amp; errorCallback)
&gt; 
&gt; I guess successCallback should not be null, contrary to errorCallback that is probably optional.
&gt; Do we want to make that visible in the signature and binding generator by making successCallback a Ref&amp;&amp;.
&gt; Or just add an ASSERT(successCallback).

Yes, that’s something worthwhile to return here and do later, with compatibility and test coverage in mind, but it’s fine that this patch does not change behavior right now.

&gt;&gt; Source/WebCore/Modules/webaudio/AudioContext.idl:64
&gt;&gt; +    [RaisesException] AudioBuffer createBuffer(ArrayBuffer buffer, boolean mixToMono);
&gt; 
&gt; This is observable by the JS layer although probably ok not to test.

The change is that a null will result in TypeError instead of SYNTAX_ERR. Not sure how important test coverage would be, but seems it would be easy to add to some existing test.

&gt;&gt; Source/WebCore/Modules/webaudio/AudioContext.idl:69
&gt;&gt;  
&gt; 
&gt; Do we really need that change?
&gt; This seems strange to have successCallback nullable or even optional.
&gt; How are we supposed to get the result of decodeAudioData then?

Same change here where we would get TypeError instead of SYNTAX_ERR when audioData is null. Same thinking on test coverage.

And yes, we should come back here and fix the callback nullability later; but I think it’s smart to correctly express what the code is currently doing without making a behavior change at the moment. We can come back and deal with the FIXME, considering the impact of changing web-visible behavior, later. See my comment below about why I think this is the right thing to do.

It’s urgent to get the UsePointersEvenForNonNullableObjectArguments flag removed and it’s fine to just have correctly document our current incorrect nullability behavior on various arguments that we can then carefully fix one-by-one.

&gt; Source/WebCore/Modules/webaudio/AudioContext.idl:73
&gt; +    [Conditional=VIDEO, RaisesException] MediaElementAudioSourceNode createMediaElementSource(HTMLMediaElement mediaElement);

Here null will result in TypeError instead of INVALID_STATE_ERR. Not critical to test, but not hard either.

&gt; Source/WebCore/Modules/webaudio/AudioContext.idl:75
&gt; +    [Conditional=MEDIA_STREAM, RaisesException] MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream);

Here null will result in TypeError instead of INVALID_STATE_ERR. Not critical to test, but not hard either.

&gt;&gt; Source/WebCore/Modules/webaudio/OscillatorNode.idl:58
&gt;&gt; +    void setPeriodicWave(PeriodicWave? wave);
&gt; 
&gt; I am a bit reluctant to change the IDL since it is probably not conforming to the spec.
&gt; Is it complex to fix setPeriodicWave? Should we leave that to another bug?

I don’t agree with your reluctance. I think Chris is handling this right.

A function that correctly states in the IDL how it currently behaves, with a FIXME explaining that the nullability behavior is wrong, is much better than a class with UsePointersEvenForNonNullableObjectArguments modifying the whole class, which can have an effect on future functions added to the class and that could affect multiple attributes and functions in a way that’s likely unclear to someone looking at the source file.

I don’t think we need a separate bug in bugs.webkit.org for each of these &quot;FIXME: should not be nullable&quot; and other FIXMEs about how our implementation doesn’t match the specifications. We can create those bugs with grep if we want to, but I think what Chris is doing here is the best practice; we should definitely come through and change behavior, but we should be very careful about changes that fail when the old code didn’t fail.

I think Chris is drawing the line in the right place where he’s OK changing exactly which exception is raised, but not adding new exceptions in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185429</commentid>
    <comment_count>8</comment_count>
      <attachid>276828</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-20 09:23:29 -0700</bug_when>
    <thetext>Comment on attachment 276828
Patch

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

&gt; Source/WebCore/Modules/webaudio/OscillatorNode.idl:58
&gt; +    // FIXME: The parameter should not be nullable.
&gt; +    void setPeriodicWave(PeriodicWave? wave);

I’ve been putting these FIXMEs at the end of the line rather than before the function. I think that’s clearer when there are multiple functions.

&gt; LayoutTests/webaudio/audiobuffer-expected.txt:15
&gt; +PASS context.createBuffer(null, false) threw exception TypeError: Type error.

I’d like to see these for the others cases where we changed the type of the exception, too. But I don’t think this has to be in the same check-in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185435</commentid>
    <comment_count>9</comment_count>
      <attachid>276829</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 09:37:56 -0700</bug_when>
    <thetext>Created attachment 276829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185436</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 09:38:44 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 276828 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=276828&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/webaudio/OscillatorNode.idl:58
&gt; &gt; +    // FIXME: The parameter should not be nullable.
&gt; &gt; +    void setPeriodicWave(PeriodicWave? wave);
&gt; 
&gt; I’ve been putting these FIXMEs at the end of the line rather than before the
&gt; function. I think that’s clearer when there are multiple functions.

Ok, Done.

&gt; 
&gt; &gt; LayoutTests/webaudio/audiobuffer-expected.txt:15
&gt; &gt; +PASS context.createBuffer(null, false) threw exception TypeError: Type error.
&gt; 
&gt; I’d like to see these for the others cases where we changed the type of the
&gt; exception, too. But I don’t think this has to be in the same check-in.

Ok, I added test cases for the others as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185448</commentid>
    <comment_count>11</comment_count>
      <attachid>276829</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-20 10:27:20 -0700</bug_when>
    <thetext>Comment on attachment 276829
Patch

Clearing flags on attachment: 276829

Committed r199775: &lt;http://trac.webkit.org/changeset/199775&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185449</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-20 10:27:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185560</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-20 15:15:46 -0700</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/Modules/webaudio/OscillatorNode.idl:58
&gt; &gt;&gt; +    void setPeriodicWave(PeriodicWave? wave);
&gt; &gt; 
&gt; &gt; I am a bit reluctant to change the IDL since it is probably not conforming to the spec.
&gt; &gt; Is it complex to fix setPeriodicWave? Should we leave that to another bug?
&gt; 
&gt; I don’t agree with your reluctance. I think Chris is handling this right.

I would find it better to:
1. remove UsePointersEvenForNonNullableObjectArguments from all interfaces
2. mark individually each method causing issues as UsePointersEvenForNonNullableObjectArguments.
That said, I can live with the FIXME approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185746</commentid>
    <comment_count>14</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-21 05:01:49 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; &gt;&gt; Source/WebCore/Modules/webaudio/OscillatorNode.idl:58
&gt; &gt; &gt;&gt; +    void setPeriodicWave(PeriodicWave? wave);
&gt; &gt; &gt; 
&gt; &gt; &gt; I am a bit reluctant to change the IDL since it is probably not conforming to the spec.
&gt; &gt; &gt; Is it complex to fix setPeriodicWave? Should we leave that to another bug?
&gt; &gt; 
&gt; &gt; I don’t agree with your reluctance. I think Chris is handling this right.
&gt; 
&gt; I would find it better to:
&gt; 1. remove UsePointersEvenForNonNullableObjectArguments from all interfaces
&gt; 2. mark individually each method causing issues as
&gt; UsePointersEvenForNonNullableObjectArguments.
&gt; That said, I can live with the FIXME approach.

I filed bug 156844</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276797</attachid>
            <date>2016-04-19 20:23:24 -0700</date>
            <delta_ts>2016-04-19 20:31:05 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>WebAudio_wip.patch</filename>
            <type>text/plain</type>
            <size>29748</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0Rl
Y29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVj
b2Rlci5jcHAKaW5kZXggNmQ3MjgxZi4uMjkyZjA1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKQEAgLTUxLDE0ICs1
MSwxMSBAQCBBc3luY0F1ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKICAgICBtX3Ro
cmVhZElEID0gMDsKIH0KIAotdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6ZGVjb2RlQXN5bmMoQXJy
YXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRpb0J1
ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaykKK3ZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OmRlY29kZUFzeW5j
KFJlZjxBcnJheUJ1ZmZlcj4mJiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFJlZlB0cjxB
dWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFjaywgUmVmUHRyPEF1ZGlvQnVmZmVy
Q2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIEFTU0VSVChhdWRpb0RhdGEpOwotICAgIGlmICghYXVkaW9EYXRhKQotICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIGRlY29kaW5nVGFzayA9IHN0ZDo6bWFrZV91bmlxdWU8RGVjb2Rp
bmdUYXNrPihhdWRpb0RhdGEsIHNhbXBsZVJhdGUsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxs
YmFjayk7CisgICAgYXV0byBkZWNvZGluZ1Rhc2sgPSBzdGQ6Om1ha2VfdW5pcXVlPERlY29kaW5n
VGFzaz4oV1RGTW92ZShhdWRpb0RhdGEpLCBzYW1wbGVSYXRlLCBXVEZNb3ZlKHN1Y2Nlc3NDYWxs
YmFjayksIFdURk1vdmUoZXJyb3JDYWxsYmFjaykpOwogICAgIG1fcXVldWUuYXBwZW5kKFdURk1v
dmUoZGVjb2RpbmdUYXNrKSk7IC8vIG5vdGUgdGhhdCBvd25lcnNoaXAgb2YgdGhlIHRhc2sgaXMg
ZWZmZWN0aXZlbHkgdGFrZW4gYnkgdGhlIHF1ZXVlLgogfQogCkBAIC04NywyMCArODQsMTYgQEAg
dm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6cnVuTG9vcCgpCiAgICAgfQogfQogCi1Bc3luY0F1ZGlv
RGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpEZWNvZGluZ1Rhc2soQXJyYXlCdWZmZXIqIGF1ZGlvRGF0
YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
aykKLSAgICA6IG1fYXVkaW9EYXRhKGF1ZGlvRGF0YSkKK0FzeW5jQXVkaW9EZWNvZGVyOjpEZWNv
ZGluZ1Rhc2s6OkRlY29kaW5nVGFzayhSZWY8QXJyYXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBmbG9h
dCBzYW1wbGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJh
Y2ssIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIGVycm9yQ2FsbGJhY2spCisgICAgOiBt
X2F1ZGlvRGF0YShXVEZNb3ZlKGF1ZGlvRGF0YSkpCiAgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxl
UmF0ZSkKLSAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxsYmFjaykKLSAgICAsIG1f
ZXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQorICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soV1RG
TW92ZShzdWNjZXNzQ2FsbGJhY2spKQorICAgICwgbV9lcnJvckNhbGxiYWNrKFdURk1vdmUoZXJy
b3JDYWxsYmFjaykpCiB7CiB9CiAKIHZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFz
azo6ZGVjb2RlKCkKIHsKLSAgICBBU1NFUlQobV9hdWRpb0RhdGEuZ2V0KCkpOwotICAgIGlmICgh
bV9hdWRpb0RhdGEuZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIERvIHRoZSBhY3R1
YWwgZGVjb2RpbmcgYW5kIGludm9rZSB0aGUgY2FsbGJhY2suCiAgICAgbV9hdWRpb0J1ZmZlciA9
IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShtX2F1ZGlvRGF0YS0+ZGF0YSgp
LCBtX2F1ZGlvRGF0YS0+Ynl0ZUxlbmd0aCgpLCBmYWxzZSwgc2FtcGxlUmF0ZSgpKTsKICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0Rl
Y29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29k
ZXIuaAppbmRleCA4NzMwZDllLi4yM2U3ZmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oCkBAIC01MSwxNyArNTEsMTcgQEAg
cHVibGljOgogICAgIH5Bc3luY0F1ZGlvRGVjb2RlcigpOwogCiAgICAgLy8gTXVzdCBiZSBjYWxs
ZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHZvaWQgZGVjb2RlQXN5bmMoSlNDOjpBcnJheUJ1
ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVy
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrKTsKKyAgICB2b2lkIGRlY29kZUFzeW5jKFJlZjxKU0M6OkFycmF5QnVm
ZmVyPiYmIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2Fs
bGJhY2s+JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBl
cnJvckNhbGxiYWNrKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBEZWNvZGluZ1Rhc2sgewogICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWNvZGluZ1Rhc2spOwogICAgIHB1YmxpYzoKLSAg
ICAgICAgRGVjb2RpbmdUYXNrKEpTQzo6QXJyYXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2Ft
cGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
IFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7CisgICAgICAg
IERlY29kaW5nVGFzayhSZWY8SlNDOjpBcnJheUJ1ZmZlcj4mJiBhdWRpb0RhdGEsIGZsb2F0IHNh
bXBsZVJhdGUsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFjaywg
UmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgIHZv
aWQgZGVjb2RlKCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTQzo6QXJyYXlC
dWZmZXIqIGF1ZGlvRGF0YSgpIHsgcmV0dXJuIG1fYXVkaW9EYXRhLmdldCgpOyB9CisgICAgICAg
IEpTQzo6QXJyYXlCdWZmZXImIGF1ZGlvRGF0YSgpIHsgcmV0dXJuIG1fYXVkaW9EYXRhOyB9CiAg
ICAgICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0K
ICAgICAgICAgQXVkaW9CdWZmZXJDYWxsYmFjayogc3VjY2Vzc0NhbGxiYWNrKCkgeyByZXR1cm4g
bV9zdWNjZXNzQ2FsbGJhY2suZ2V0KCk7IH0KICAgICAgICAgQXVkaW9CdWZmZXJDYWxsYmFjayog
ZXJyb3JDYWxsYmFjaygpIHsgcmV0dXJuIG1fZXJyb3JDYWxsYmFjay5nZXQoKTsgfQpAQCAtNjks
NyArNjksNyBAQCBwcml2YXRlOgogCiAgICAgICAgIHZvaWQgbm90aWZ5Q29tcGxldGUoKTsKIAot
ICAgICAgICBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4gbV9hdWRpb0RhdGE7CisgICAgICAgIFJl
ZjxKU0M6OkFycmF5QnVmZmVyPiBtX2F1ZGlvRGF0YTsKICAgICAgICAgZmxvYXQgbV9zYW1wbGVS
YXRlOwogICAgICAgICBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJh
Y2s7CiAgICAgICAgIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2s7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAK
aW5kZXggYTdmZTYxMy4uYjQ4OWE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgQXVkaW9D
b250ZXh0OjpsYXp5SW5pdGlhbGl6ZSgpCiAgICAgaWYgKG1faXNBdWRpb1RocmVhZEZpbmlzaGVk
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9kZXN0aW5hdGlvbk5vZGUuZ2V0KCkpIHsK
KyAgICBpZiAobV9kZXN0aW5hdGlvbk5vZGUpIHsKICAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUt
PmluaXRpYWxpemUoKTsKIAogICAgICAgICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSkgewpAQCAt
Mzc3LDEwICszNzcsMTAgQEAgY29uc3QgRG9jdW1lbnQqIEF1ZGlvQ29udGV4dDo6aG9zdGluZ0Rv
Y3VtZW50KCkgY29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk7CiB9CiAKLVBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJP
ZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8QXVk
aW9CdWZmZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBhdWRpb0J1ZmZlciA9IEF1ZGlv
QnVmZmVyOjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFtZXMsIHNhbXBsZVJh
dGUpOwotICAgIGlmICghYXVkaW9CdWZmZXIuZ2V0KCkpIHsKKyAgICBpZiAoIWF1ZGlvQnVmZmVy
KSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KQEAgLTM4OCwxNiArMzg4LDEwIEBAIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+
IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNp
CiAgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOwogfQogCi1QYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBB
dWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIsIGJvb2wg
bWl4VG9Nb25vLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9D
b250ZXh0OjpjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXImIGFycmF5QnVmZmVyLCBib29sIG1peFRv
TW9ubywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKGFycmF5QnVmZmVyKTsKLSAg
ICBpZiAoIWFycmF5QnVmZmVyKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBhdWRpb0J1
ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShhcnJheUJ1ZmZlci0+
ZGF0YSgpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCBtaXhUb01vbm8sIHNhbXBsZVJhdGUo
KSk7Ci0gICAgaWYgKCFhdWRpb0J1ZmZlci5nZXQoKSkgeworICAgIFJlZlB0cjxBdWRpb0J1ZmZl
cj4gYXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlRnJvbUF1ZGlvRmlsZURhdGEoYXJy
YXlCdWZmZXIuZGF0YSgpLCBhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKCksIG1peFRvTW9ubywgc2Ft
cGxlUmF0ZSgpKTsKKyAgICBpZiAoIWF1ZGlvQnVmZmVyKSB7CiAgICAgICAgIGVjID0gU1lOVEFY
X0VSUjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNDA1LDY3ICszOTksNTEg
QEAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIoQXJy
YXlCdWZmZXIqIGFycmF5QnVmZmVyLCBib28KICAgICByZXR1cm4gYXVkaW9CdWZmZXI7CiB9CiAK
LXZvaWQgQXVkaW9Db250ZXh0OjpkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIqIGF1ZGlvRGF0
YSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYg
ZWMpCit2b2lkIEF1ZGlvQ29udGV4dDo6ZGVjb2RlQXVkaW9EYXRhKFJlZjxBcnJheUJ1ZmZlcj4m
JiBhdWRpb0RhdGEsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFj
aywgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjaykKIHsKLSAgICBp
ZiAoIWF1ZGlvRGF0YSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV9hdWRpb0RlY29kZXIuZGVjb2RlQXN5bmMoYXVkaW9EYXRhLCBzYW1w
bGVSYXRlKCksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CisgICAgbV9hdWRpb0Rl
Y29kZXIuZGVjb2RlQXN5bmMoV1RGTW92ZShhdWRpb0RhdGEpLCBzYW1wbGVSYXRlKCksIFdURk1v
dmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShlcnJvckNhbGxiYWNrKSk7CiB9CiAKLVBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlclNv
dXJjZSgpCitSZWY8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1
ZmZlclNvdXJjZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBsYXp5SW5p
dGlhbGl6ZSgpOwotICAgIFJlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IG5vZGUgPSBBdWRp
b0J1ZmZlclNvdXJjZU5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBs
ZVJhdGUoKSk7CisgICAgUmVmPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gbm9kZSA9IEF1ZGlvQnVm
ZmVyU291cmNlTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0
ZSgpKTsKIAogICAgIC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBBdWRpb1NjaGVkdWxlZFNvdXJjZU5v
ZGUsIHRoZSBjb250ZXh0IGtlZXBzIGEgcmVmZXJlbmNlIHVudGlsIGl0IGhhcyBmaW5pc2hlZCBw
bGF5aW5nLgogICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBBdWRpb1NjaGVkdWxlZFNvdXJjZU5v
ZGU6OmZpbmlzaCgpIGNhbGxzIEF1ZGlvQ29udGV4dDo6bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vz
c2luZygpLgotICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7CisgICAgcmVmTm9kZShub2RlKTsKIAog
ICAgIHJldHVybiBub2RlOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotUGFzc1JlZlB0cjxNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50
U291cmNlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
CitSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZU1lZGlhRWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtZWRpYUVsZW1lbnQpOwotICAgIGlmICghbWVk
aWFFbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICAgICAgCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogICAgIAogICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRo
aXMgbWVkaWEgZWxlbWVudCBhbHJlYWR5IGhhcyBhIHNvdXJjZSBub2RlLgotICAgIGlmIChtZWRp
YUVsZW1lbnQtPmF1ZGlvU291cmNlTm9kZSgpKSB7CisgICAgaWYgKG1lZGlhRWxlbWVudC5hdWRp
b1NvdXJjZU5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgICAgIAotICAgIFJlZlB0cjxNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGU+IG5vZGUgPSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmNy
ZWF0ZSgqdGhpcywgbWVkaWFFbGVtZW50KTsKKyAgICBSZWY8TWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlPiBub2RlID0gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUoKnRoaXMs
IG1lZGlhRWxlbWVudCk7CiAKLSAgICBtZWRpYUVsZW1lbnQtPnNldEF1ZGlvU291cmNlTm9kZShu
b2RlLmdldCgpKTsKKyAgICBtZWRpYUVsZW1lbnQuc2V0QXVkaW9Tb3VyY2VOb2RlKG5vZGUucHRy
KCkpOwogCiAgICAgcmVmTm9kZShub2RlLmdldCgpKTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVu
Y2UgdW50aWwgbm9kZSBpcyBkaXNjb25uZWN0ZWQKLSAgICByZXR1cm4gbm9kZTsKKyAgICByZXR1
cm4gV1RGTW92ZShub2RlKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LVBhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3Jl
YXRlTWVkaWFTdHJlYW1Tb3VyY2UoTWVkaWFTdHJlYW0qIG1lZGlhU3RyZWFtLCBFeGNlcHRpb25D
b2RlJiBlYykKK1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gQXVkaW9Db250ZXh0
OjpjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWRpYVN0cmVhbSYgbWVkaWFTdHJlYW0sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBBU1NF
UlQobWVkaWFTdHJlYW0pOwotICAgIGlmICghbWVkaWFTdHJlYW0pIHsKLSAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
YXV0byBhdWRpb1RyYWNrcyA9IG1lZGlhU3RyZWFtLT5nZXRBdWRpb1RyYWNrcygpOworICAgIGF1
dG8gYXVkaW9UcmFja3MgPSBtZWRpYVN0cmVhbS5nZXRBdWRpb1RyYWNrcygpOwogICAgIGlmIChh
dWRpb1RyYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC00ODYsMTQgKzQ2NCwxNCBAQCBQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3Ry
ZWFtU291cmNlKE1lZAogCiAgICAgbGF6eUluaXRpYWxpemUoKTsKIAotICAgIGF1dG8gbm9kZSA9
IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUoKnRoaXMsICptZWRpYVN0cmVhbSwg
KnByb3ZpZGVyVHJhY2spOworICAgIGF1dG8gbm9kZSA9IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VO
b2RlOjpjcmVhdGUoKnRoaXMsIG1lZGlhU3RyZWFtLCAqcHJvdmlkZXJUcmFjayk7CiAgICAgbm9k
ZS0+c2V0Rm9ybWF0KDIsIHNhbXBsZVJhdGUoKSk7CiAKLSAgICByZWZOb2RlKCZub2RlLmdldCgp
KTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgbm9kZSBpcyBkaXNjb25uZWN0ZWQK
LSAgICByZXR1cm4gJm5vZGUuZ2V0KCk7CisgICAgcmVmTm9kZShub2RlKTsgLy8gY29udGV4dCBr
ZWVwcyByZWZlcmVuY2UgdW50aWwgbm9kZSBpcyBkaXNjb25uZWN0ZWQKKyAgICByZXR1cm4gV1RG
TW92ZShub2RlKTsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25O
b2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKQorUmVmPE1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFT
dHJlYW1EZXN0aW5hdGlvbigpCiB7CiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBhbiBv
cHRpb25hbCBhcmd1bWVudCB3aGljaCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjaGFubmVscy4K
ICAgICAvLyBGSVhNRTogVGhlIGRlZmF1bHQgc2hvdWxkIHByb2JhYmx5IGJlIHN0ZXJlbyBpbnN0
ZWFkIG9mIG1vbm8uCkBAIC01MDIsMTEyICs0ODAsMTEyIEBAIFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbURl
c3RpCiAKICNlbmRpZgogCi1QYXNzUmVmUHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+IEF1ZGlvQ29u
dGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKK1JlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgLy8gU2V0IG51bWJlciBvZiBpbnB1dC9vdXRwdXQgY2hhbm5lbHMgdG8gc3RlcmVvIGJ5
IGRlZmF1bHQuCiAgICAgcmV0dXJuIGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihidWZmZXJTaXplLCAy
LCAyLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gQXVkaW9Db250
ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCBudW1i
ZXJPZklucHV0Q2hhbm5lbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPFNjcmlwdFByb2Nl
c3Nvck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZm
ZXJTaXplLCBzaXplX3QgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICAvLyBTZXQgbnVtYmVyIG9mIG91dHB1dCBjaGFubmVscyB0byBzdGVyZW8gYnkgZGVm
YXVsdC4KICAgICByZXR1cm4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKGJ1ZmZlclNpemUsIG51bWJl
ck9mSW5wdXRDaGFubmVscywgMiwgZWMpOwogfQogCi1QYXNzUmVmUHRyPFNjcmlwdFByb2Nlc3Nv
ck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJT
aXplLCBzaXplX3QgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZPdXRwdXRD
aGFubmVscywgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNp
emVfdCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZk91dHB1dENoYW5uZWxz
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IGxhenlJbml0aWFsaXplKCk7CiAgICAgUmVmUHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+IG5vZGUg
PSBTY3JpcHRQcm9jZXNzb3JOb2RlOjpjcmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5z
YW1wbGVSYXRlKCksIGJ1ZmZlclNpemUsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZP
dXRwdXRDaGFubmVscyk7CiAKLSAgICBpZiAoIW5vZGUuZ2V0KCkpIHsKKyAgICBpZiAoIW5vZGUp
IHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCi0gICAgcmVmTm9kZShub2RlLmdldCgpKTsgLy8gY29udGV4dCBrZWVwcyByZWZl
cmVuY2UgdW50aWwgd2Ugc3RvcCBtYWtpbmcgamF2YXNjcmlwdCByZW5kZXJpbmcgY2FsbGJhY2tz
CisgICAgcmVmTm9kZSgqbm9kZSk7IC8vIGNvbnRleHQga2VlcHMgcmVmZXJlbmNlIHVudGlsIHdl
IHN0b3AgbWFraW5nIGphdmFzY3JpcHQgcmVuZGVyaW5nIGNhbGxiYWNrcwogICAgIHJldHVybiBu
b2RlOwogfQogCi1QYXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3Jl
YXRlQmlxdWFkRmlsdGVyKCkKK1JlZjxCaXF1YWRGaWx0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNy
ZWF0ZUJpcXVhZEZpbHRlcigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBs
YXp5SW5pdGlhbGl6ZSgpOwogICAgIHJldHVybiBCaXF1YWRGaWx0ZXJOb2RlOjpjcmVhdGUoKnRo
aXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwogfQogCi1QYXNzUmVmUHRyPFdh
dmVTaGFwZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVdhdmVTaGFwZXIoKQorUmVmPFdhdmVT
aGFwZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVdhdmVTaGFwZXIoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAgICByZXR1cm4gV2F2
ZVNoYXBlck5vZGU6OmNyZWF0ZSgqdGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8UGFubmVyTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVQYW5uZXIoKQorUmVmPFBhbm5lck5vZGU+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlUGFubmVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxh
enlJbml0aWFsaXplKCk7CiAgICAgcmV0dXJuIFBhbm5lck5vZGU6OmNyZWF0ZSgqdGhpcywgbV9k
ZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7CiB9CiAKLVBhc3NSZWZQdHI8Q29udm9sdmVy
Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVDb252b2x2ZXIoKQorUmVmPENvbnZvbHZlck5vZGU+
IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ29udm9sdmVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAgICAgcmV0dXJuIENvbnZvbHZlck5vZGU6
OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7CiB9CiAKLVBh
c3NSZWZQdHI8RHluYW1pY3NDb21wcmVzc29yTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVEeW5h
bWljc0NvbXByZXNzb3IoKQorUmVmPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAgICAgcmV0dXJuIER5bmFtaWNzQ29tcHJlc3Nv
ck5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7CiB9
CiAKLVBhc3NSZWZQdHI8QW5hbHlzZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUFuYWx5c2Vy
KCkKK1JlZjxBbmFseXNlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQW5hbHlzZXIoKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAgICBy
ZXR1cm4gQW5hbHlzZXJOb2RlOjpjcmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1w
bGVSYXRlKCkpOwogfQogCi1QYXNzUmVmUHRyPEdhaW5Ob2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZUdhaW4oKQorUmVmPEdhaW5Ob2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUdhaW4oKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAgICByZXR1
cm4gR2Fpbk5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUo
KSk7CiB9CiAKLVBhc3NSZWZQdHI8RGVsYXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5
KEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPERlbGF5Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVh
dGVEZWxheShFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBjb25zdCBkb3VibGUgZGVmYXVsdE1h
eERlbGF5VGltZSA9IDE7CiAgICAgcmV0dXJuIGNyZWF0ZURlbGF5KGRlZmF1bHRNYXhEZWxheVRp
bWUsIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxEZWxheU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
RGVsYXkoZG91YmxlIG1heERlbGF5VGltZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8RGVs
YXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5KGRvdWJsZSBtYXhEZWxheVRpbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6
eUluaXRpYWxpemUoKTsKLSAgICBSZWZQdHI8RGVsYXlOb2RlPiBub2RlID0gRGVsYXlOb2RlOjpj
cmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCksIG1heERlbGF5VGlt
ZSwgZWMpOworICAgIFJlZjxEZWxheU5vZGU+IG5vZGUgPSBEZWxheU5vZGU6OmNyZWF0ZSgqdGhp
cywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwgbWF4RGVsYXlUaW1lLCBlYyk7CiAg
ICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gbm9kZTsKKyAg
ICByZXR1cm4gV1RGTW92ZShub2RlKTsKIH0KIAotUGFzc1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJO
b2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxTcGxpdHRlcihFeGNlcHRpb25Db2RlJiBl
YykKK1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5u
ZWxTcGxpdHRlcihFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBjb25zdCB1bnNpZ25lZCBDaGFu
bmVsU3BsaXR0ZXJEZWZhdWx0TnVtYmVyT2ZPdXRwdXRzID0gNjsKICAgICByZXR1cm4gY3JlYXRl
Q2hhbm5lbFNwbGl0dGVyKENoYW5uZWxTcGxpdHRlckRlZmF1bHROdW1iZXJPZk91dHB1dHMsIGVj
KTsKIH0KIAotUGFzc1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNy
ZWF0ZUNoYW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzLCBFeGNlcHRpb25Db2Rl
JiBlYykKK1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNo
YW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAK
ICAgICBSZWZQdHI8Q2hhbm5lbFNwbGl0dGVyTm9kZT4gbm9kZSA9IENoYW5uZWxTcGxpdHRlck5v
ZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwgbnVtYmVy
T2ZPdXRwdXRzKTsKIAotICAgIGlmICghbm9kZS5nZXQoKSkgeworICAgIGlmICghbm9kZSkgewog
ICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CkBAIC02MTUsMjAgKzU5MywyMCBAQCBQYXNzUmVmUHRyPENoYW5uZWxTcGxpdHRlck5vZGU+
IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKHNpemVfdCBudW1iZQogICAgIHJl
dHVybiBub2RlOwogfQogCi1QYXNzUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBBdWRpb0NvbnRl
eHQ6OmNyZWF0ZUNoYW5uZWxNZXJnZXIoRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8Q2hhbm5l
bE1lcmdlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcihFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBjb25zdCB1bnNpZ25lZCBDaGFubmVsTWVyZ2VyRGVmYXVsdE51bWJl
ck9mSW5wdXRzID0gNjsKICAgICByZXR1cm4gY3JlYXRlQ2hhbm5lbE1lcmdlcihDaGFubmVsTWVy
Z2VyRGVmYXVsdE51bWJlck9mSW5wdXRzLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8Q2hhbm5lbE1l
cmdlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcihzaXplX3QgbnVtYmVy
T2ZJbnB1dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBB
dWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxNZXJnZXIoc2l6ZV90IG51bWJlck9mSW5wdXRzLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxh
enlJbml0aWFsaXplKCk7CiAKICAgICBSZWZQdHI8Q2hhbm5lbE1lcmdlck5vZGU+IG5vZGUgPSBD
aGFubmVsTWVyZ2VyTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxl
UmF0ZSgpLCBudW1iZXJPZklucHV0cyk7CiAKLSAgICBpZiAoIW5vZGUuZ2V0KCkpIHsKKyAgICBp
ZiAoIW5vZGUpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQpAQCAtNjM2LDIxICs2MTQsMjEgQEAgUGFzc1JlZlB0cjxDaGFubmVs
TWVyZ2VyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVDaGFubmVsTWVyZ2VyKHNpemVfdCBudW1i
ZXJPZkkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotUGFzc1JlZlB0cjxPc2NpbGxhdG9yTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVPc2NpbGxhdG9yKCkKK1JlZjxPc2NpbGxhdG9yTm9kZT4gQXVk
aW9Db250ZXh0OjpjcmVhdGVPc2NpbGxhdG9yKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAKLSAgICBSZWZQdHI8T3NjaWxsYXRvck5vZGU+
IG5vZGUgPSBPc2NpbGxhdG9yTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+
c2FtcGxlUmF0ZSgpKTsKKyAgICBSZWY8T3NjaWxsYXRvck5vZGU+IG5vZGUgPSBPc2NpbGxhdG9y
Tm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKIAog
ICAgIC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUsIHRoZSBj
b250ZXh0IGtlZXBzIGEgcmVmZXJlbmNlIHVudGlsIGl0IGhhcyBmaW5pc2hlZCBwbGF5aW5nLgog
ICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6OmZpbmlz
aCgpIGNhbGxzIEF1ZGlvQ29udGV4dDo6bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZygpLgot
ICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7CisgICAgcmVmTm9kZShub2RlKTsKIAogICAgIHJldHVy
biBub2RlOwogfQogCi1QYXNzUmVmUHRyPFBlcmlvZGljV2F2ZT4gQXVkaW9Db250ZXh0OjpjcmVh
dGVQZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5KiByZWFsLCBGbG9hdDMyQXJyYXkqIGltYWcsIEV4
Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPFBlcmlvZGljV2F2ZT4gQXVkaW9Db250ZXh0OjpjcmVh
dGVQZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5KiByZWFsLCBGbG9hdDMyQXJyYXkqIGltYWcsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgCkBA
IC02NzQsMjggKzY1MiwyOCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZGaW5pc2hlZFNvdXJj
ZU5vZGVzKCkKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogICAgIEFTU0VSVChpc0F1ZGlv
VGhyZWFkKCkgfHwgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpOwogICAgIGZvciAoYXV0byYgbm9k
ZSA6IG1fZmluaXNoZWROb2RlcykKLSAgICAgICAgZGVyZWZOb2RlKG5vZGUpOworICAgICAgICBk
ZXJlZk5vZGUoKm5vZGUpOwogCiAgICAgbV9maW5pc2hlZE5vZGVzLmNsZWFyKCk7CiB9CiAKLXZv
aWQgQXVkaW9Db250ZXh0OjpyZWZOb2RlKEF1ZGlvTm9kZSogbm9kZSkKK3ZvaWQgQXVkaW9Db250
ZXh0OjpyZWZOb2RlKEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIEF1dG9Mb2NrZXIgbG9ja2VyKCp0aGlzKTsKICAgICAKLSAgICBub2RlLT5yZWYo
QXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0gICAgbV9yZWZlcmVuY2VkTm9kZXMuYXBw
ZW5kKG5vZGUpOworICAgIG5vZGUucmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwor
ICAgIG1fcmVmZXJlbmNlZE5vZGVzLmFwcGVuZCgmbm9kZSk7CiB9CiAKLXZvaWQgQXVkaW9Db250
ZXh0OjpkZXJlZk5vZGUoQXVkaW9Ob2RlKiBub2RlKQordm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVm
Tm9kZShBdWRpb05vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKICAg
ICAKLSAgICBub2RlLT5kZXJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsKKyAgICBu
b2RlLmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwogCi0gICAgQVNTRVJUKG1f
cmVmZXJlbmNlZE5vZGVzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICBtX3JlZmVyZW5jZWROb2Rlcy5y
ZW1vdmVGaXJzdChub2RlKTsKKyAgICBBU1NFUlQobV9yZWZlcmVuY2VkTm9kZXMuY29udGFpbnMo
Jm5vZGUpKTsKKyAgICBtX3JlZmVyZW5jZWROb2Rlcy5yZW1vdmVGaXJzdCgmbm9kZSk7CiB9CiAK
IHZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAppbmRleCA4ZDYxZTYx
Li5mZDVhYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmgKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxhdG9taWM+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CkBAIC0x
MDEsMTEgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNyZW1lbnRBY3RpdmVTb3VyY2VD
b3VudCgpOwogICAgIHZvaWQgZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsKICAgICAKLSAg
ICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlQnVmZmVyKEFycmF5
QnVmZmVyKiwgYm9vbCBtaXhUb01vbm8sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8QXVk
aW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3Qg
bnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBS
ZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciYsIGJvb2wgbWl4VG9N
b25vLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICAvLyBBc3luY2hyb25vdXMgYXVkaW8gZmlsZSBk
YXRhIGRlY29kaW5nLgotICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyKiwgUGFz
c1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxi
YWNrPiwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKFJlZjxB
cnJheUJ1ZmZlcj4mJiwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYsIFJlZlB0cjxBdWRp
b0J1ZmZlckNhbGxiYWNrPiYmKTsKIAogICAgIEF1ZGlvTGlzdGVuZXIqIGxpc3RlbmVyKCkgeyBy
ZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsgfQogCkBAIC0xMjEsMzIgKzEyMCwzMiBAQCBwdWJsaWM6
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGF0ZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlIEF1
ZGlvTm9kZSBjcmVhdGUgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCAoZnJv
bSBKYXZhU2NyaXB0KS4KLSAgICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gY3Jl
YXRlQnVmZmVyU291cmNlKCk7CisgICAgUmVmPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gY3JlYXRl
QnVmZmVyU291cmNlKCk7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIFBhc3NSZWZQdHI8TWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlh
RWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlPiBjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlhRWxlbWVudCYsIEV4
Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gY3JlYXRlTWVkaWFTdHJlYW1Tb3Vy
Y2UoTWVkaWFTdHJlYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7
CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGVNZWRpYVN0cmVh
bVNvdXJjZShNZWRpYVN0cmVhbSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWY8TWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpOwog
I2VuZGlmCi0gICAgUGFzc1JlZlB0cjxHYWluTm9kZT4gY3JlYXRlR2FpbigpOwotICAgIFBhc3NS
ZWZQdHI8QmlxdWFkRmlsdGVyTm9kZT4gY3JlYXRlQmlxdWFkRmlsdGVyKCk7Ci0gICAgUGFzc1Jl
ZlB0cjxXYXZlU2hhcGVyTm9kZT4gY3JlYXRlV2F2ZVNoYXBlcigpOwotICAgIFBhc3NSZWZQdHI8
RGVsYXlOb2RlPiBjcmVhdGVEZWxheShFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxE
ZWxheU5vZGU+IGNyZWF0ZURlbGF5KGRvdWJsZSBtYXhEZWxheVRpbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBQYXNzUmVmUHRyPFBhbm5lck5vZGU+IGNyZWF0ZVBhbm5lcigpOwotICAgIFBhc3NS
ZWZQdHI8Q29udm9sdmVyTm9kZT4gY3JlYXRlQ29udm9sdmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxE
eW5hbWljc0NvbXByZXNzb3JOb2RlPiBjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKTsgICAgCi0g
ICAgUGFzc1JlZlB0cjxBbmFseXNlck5vZGU+IGNyZWF0ZUFuYWx5c2VyKCk7Ci0gICAgUGFzc1Jl
ZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1
ZmZlclNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFNjcmlwdFByb2Nlc3Nv
ck5vZGU+IGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90IG51
bWJlck9mSW5wdXRDaGFubmVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8U2Ny
aXB0UHJvY2Vzc29yTm9kZT4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXpl
LCBzaXplX3QgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZPdXRwdXRDaGFu
bmVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8Q2hhbm5lbFNwbGl0dGVyTm9k
ZT4gY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRy
PENoYW5uZWxTcGxpdHRlck5vZGU+IGNyZWF0ZUNoYW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVy
T2ZPdXRwdXRzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxDaGFubmVsTWVyZ2Vy
Tm9kZT4gY3JlYXRlQ2hhbm5lbE1lcmdlcihFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0
cjxDaGFubmVsTWVyZ2VyTm9kZT4gY3JlYXRlQ2hhbm5lbE1lcmdlcihzaXplX3QgbnVtYmVyT2ZJ
bnB1dHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPE9zY2lsbGF0b3JOb2RlPiBj
cmVhdGVPc2NpbGxhdG9yKCk7Ci0gICAgUGFzc1JlZlB0cjxQZXJpb2RpY1dhdmU+IGNyZWF0ZVBl
cmlvZGljV2F2ZShGbG9hdDMyQXJyYXkqIHJlYWwsIEZsb2F0MzJBcnJheSogaW1hZywgRXhjZXB0
aW9uQ29kZSYpOworICAgIFJlZjxHYWluTm9kZT4gY3JlYXRlR2FpbigpOworICAgIFJlZjxCaXF1
YWRGaWx0ZXJOb2RlPiBjcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKyAgICBSZWY8V2F2ZVNoYXBlck5v
ZGU+IGNyZWF0ZVdhdmVTaGFwZXIoKTsKKyAgICBSZWZQdHI8RGVsYXlOb2RlPiBjcmVhdGVEZWxh
eShFeGNlcHRpb25Db2RlJik7CisgICAgUmVmUHRyPERlbGF5Tm9kZT4gY3JlYXRlRGVsYXkoZG91
YmxlIG1heERlbGF5VGltZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZjxQYW5uZXJOb2RlPiBj
cmVhdGVQYW5uZXIoKTsKKyAgICBSZWY8Q29udm9sdmVyTm9kZT4gY3JlYXRlQ29udm9sdmVyKCk7
CisgICAgUmVmPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+IGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3Nv
cigpOworICAgIFJlZjxBbmFseXNlck5vZGU+IGNyZWF0ZUFuYWx5c2VyKCk7CisgICAgUmVmUHRy
PFNjcmlwdFByb2Nlc3Nvck5vZGU+IGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVy
U2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBj
cmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCBudW1iZXJPZklu
cHV0Q2hhbm5lbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8U2NyaXB0UHJvY2Vzc29y
Tm9kZT4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QgbnVt
YmVyT2ZJbnB1dENoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgRXhjZXB0
aW9uQ29kZSYpOworICAgIFJlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBjcmVhdGVDaGFubmVs
U3BsaXR0ZXIoRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2Rl
PiBjcmVhdGVDaGFubmVsU3BsaXR0ZXIoc2l6ZV90IG51bWJlck9mT3V0cHV0cywgRXhjZXB0aW9u
Q29kZSYpOworICAgIFJlZlB0cjxDaGFubmVsTWVyZ2VyTm9kZT4gY3JlYXRlQ2hhbm5lbE1lcmdl
cihFeGNlcHRpb25Db2RlJik7CisgICAgUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBjcmVhdGVD
aGFubmVsTWVyZ2VyKHNpemVfdCBudW1iZXJPZklucHV0cywgRXhjZXB0aW9uQ29kZSYpOworICAg
IFJlZjxPc2NpbGxhdG9yTm9kZT4gY3JlYXRlT3NjaWxsYXRvcigpOworICAgIFJlZlB0cjxQZXJp
b2RpY1dhdmU+IGNyZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkqIHJlYWwsIEZsb2F0MzJB
cnJheSogaW1hZywgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgLy8gV2hlbiBhIHNvdXJjZSBub2Rl
IGhhcyBubyBtb3JlIHByb2Nlc3NpbmcgdG8gZG8gKGhhcyBmaW5pc2hlZCBwbGF5aW5nKSwgdGhl
biBpdCB0ZWxscyB0aGUgY29udGV4dCB0byBkZXJlZmVyZW5jZSBpdC4KICAgICB2b2lkIG5vdGlm
eU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcoQXVkaW9Ob2RlKik7CkBAIC0zMDMsOCArMzAyLDggQEAg
cHJpdmF0ZToKICAgICAvLyBJbiB0dXJuLCB0aGVzZSBub2RlcyByZWZlcmVuY2UgYWxsIG5vZGVz
IHRoZXkncmUgY29ubmVjdGVkIHRvLiAgQWxsIG5vZGVzIGFyZSB1bHRpbWF0ZWx5IGNvbm5lY3Rl
ZCB0byB0aGUgQXVkaW9EZXN0aW5hdGlvbk5vZGUuCiAgICAgLy8gV2hlbiB0aGUgY29udGV4dCBk
ZXJlZmVyZW5jZXMgYSBzb3VyY2Ugbm9kZSwgaXQgd2lsbCBiZSBkZWFjdGl2YXRlZCBmcm9tIHRo
ZSByZW5kZXJpbmcgZ3JhcGggYWxvbmcgd2l0aCBhbGwgb3RoZXIgbm9kZXMgaXQgaXMKICAgICAv
LyB1bmlxdWVseSBjb25uZWN0ZWQgdG8uICBTZWUgdGhlIEF1ZGlvTm9kZTo6cmVmKCkgYW5kIEF1
ZGlvTm9kZTo6ZGVyZWYoKSBtZXRob2RzIGZvciBtb3JlIGRldGFpbHMuCi0gICAgdm9pZCByZWZO
b2RlKEF1ZGlvTm9kZSopOwotICAgIHZvaWQgZGVyZWZOb2RlKEF1ZGlvTm9kZSopOworICAgIHZv
aWQgcmVmTm9kZShBdWRpb05vZGUmKTsKKyAgICB2b2lkIGRlcmVmTm9kZShBdWRpb05vZGUmKTsK
IAogICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCiAgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwK
aW5kZXggNDUxZjQ4NS4uM2UxOWZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbApAQCAtMzUsNyArMzUsNiBAQCBlbnVtIEF1ZGlvQ29u
dGV4dFN0YXRlIHsKICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCiAgICAgQWN0aXZlRE9NT2Jq
ZWN0LAogICAgIEN1c3RvbUNvbnN0cnVjdG9yLAotICAgIFVzZVBvaW50ZXJzRXZlbkZvck5vbk51
bGxhYmxlT2JqZWN0QXJndW1lbnRzLAogICAgIEludGVyZmFjZU5hbWU9d2Via2l0QXVkaW9Db250
ZXh0LAogICAgIEV4cG9ydE1hY3JvPVdFQkNPUkVfRVhQT1JULAogXSBpbnRlcmZhY2UgQXVkaW9D
b250ZXh0IDogRXZlbnRUYXJnZXQgewpAQCAtNjIsMTAgKzYxLDExIEBAIGVudW0gQXVkaW9Db250
ZXh0U3RhdGUgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGFjdGl2ZVNv
dXJjZUNvdW50OwogICAgIAogICAgIFtSYWlzZXNFeGNlcHRpb25dIEF1ZGlvQnVmZmVyIGNyZWF0
ZUJ1ZmZlcih1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhbm5lbHMsIHVuc2lnbmVkIGxvbmcgbnVt
YmVyT2ZGcmFtZXMsIHVucmVzdHJpY3RlZCBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICBbUmFpc2Vz
RXhjZXB0aW9uXSBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXI/IGJ1ZmZlciwg
Ym9vbGVhbiBtaXhUb01vbm8pOworICAgIFtSYWlzZXNFeGNlcHRpb25dIEF1ZGlvQnVmZmVyIGNy
ZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciBidWZmZXIsIGJvb2xlYW4gbWl4VG9Nb25vKTsKIAogICAg
IC8vIEFzeW5jaHJvbm91cyBhdWRpbyBmaWxlIGRhdGEgZGVjb2RpbmcuCi0gICAgW1JhaXNlc0V4
Y2VwdGlvbl0gdm9pZCBkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIgYXVkaW9EYXRhLCBBdWRp
b0J1ZmZlckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgb3B0aW9uYWwgQXVkaW9CdWZmZXJDYWxs
YmFjayBlcnJvckNhbGxiYWNrKTsKKyAgICAvLyBGSVhNRTogc3VjY2Vzc0NhbGxiYWNrIHNob3Vs
ZCBiZSBvcHRpb25hbCBhbmQgdGhlIGNhbGxiYWNrcyBzaG91bGQgbm90IGJlIG51bGxhYmxlLgor
ICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyIGF1ZGlvRGF0YSwgQXVkaW9CdWZm
ZXJDYWxsYmFjaz8gc3VjY2Vzc0NhbGxiYWNrLCBvcHRpb25hbCBBdWRpb0J1ZmZlckNhbGxiYWNr
PyBlcnJvckNhbGxiYWNrKTsKIAogICAgIC8vIFNvdXJjZXMKICAgICBBdWRpb0J1ZmZlclNvdXJj
ZU5vZGUgY3JlYXRlQnVmZmVyU291cmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAK
aW5kZXggMDEzOTFmZC4uNzdjN2ZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcApA
QCAtNDAsMTIgKzQwLDEyIEBAIGNvbnN0IHVuc2lnbmVkIG1heFNhbXBsZVJhdGUgPSAxOTIwMDA7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZT4gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUoQXVkaW9Db250ZXh0JiBjb250
ZXh0LCBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCitSZWY8TWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlPiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmNyZWF0ZShBdWRpb0Nv
bnRleHQmIGNvbnRleHQsIEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoY29udGV4dCwg
bWVkaWFFbGVtZW50KSk7CiB9CiAKLU1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6TWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29udGV4dCYgY29udGV4dCwgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50KQorTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0JiBjb250ZXh0LCBIVE1MTWVkaWFFbGVt
ZW50JiBtZWRpYUVsZW1lbnQpCiAgICAgOiBBdWRpb05vZGUoY29udGV4dCwgY29udGV4dC5zYW1w
bGVSYXRlKCkpCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpCiAgICAgLCBtX3Nv
dXJjZU51bWJlck9mQ2hhbm5lbHMoMCkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIE1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzcyhzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCiB7CiAg
ICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7CiAKLSAgICBpZiAoIW1l
ZGlhRWxlbWVudCgpIHx8ICFtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMgfHwgIW1fc291cmNlU2Ft
cGxlUmF0ZSkgeworICAgIGlmICghbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxzIHx8ICFtX3NvdXJj
ZVNhbXBsZVJhdGUpIHsKICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGU6OnByb2Nlc3Moc2l6ZV90IG51bWJlck9mRnJhbWVzKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKEF1ZGlvU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0gbWVkaWFFbGVt
ZW50KCktPmF1ZGlvU291cmNlUHJvdmlkZXIoKSkgeworICAgIGlmIChBdWRpb1NvdXJjZVByb3Zp
ZGVyKiBwcm92aWRlciA9IG1lZGlhRWxlbWVudCgpLmF1ZGlvU291cmNlUHJvdmlkZXIoKSkgewog
ICAgICAgICBpZiAobV9tdWx0aUNoYW5uZWxSZXNhbXBsZXIuZ2V0KCkpIHsKICAgICAgICAgICAg
IEFTU0VSVChtX3NvdXJjZVNhbXBsZVJhdGUgIT0gc2FtcGxlUmF0ZSgpKTsKICAgICAgICAgICAg
IG1fbXVsdGlDaGFubmVsUmVzYW1wbGVyLT5wcm9jZXNzKHByb3ZpZGVyLCBvdXRwdXRCdXMsIG51
bWJlck9mRnJhbWVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCmluZGV4IGMxODA0MmYuLmQz
MTExNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaApAQCAtNDEsMTEgKzQxLDExIEBAIGNs
YXNzIEF1ZGlvQ29udGV4dDsKICAgICAKIGNsYXNzIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZSA6IHB1YmxpYyBBdWRpb05vZGUsIHB1YmxpYyBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3Jl
YXRlKEF1ZGlvQ29udGV4dCYsIEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUmVmPE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCYsIFJlZjxIVE1M
TWVkaWFFbGVtZW50PiYmKTsKIAogICAgIHZpcnR1YWwgfk1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZSgpOwogCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgeyByZXR1cm4g
bV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgSFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KCkgeyByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQ7IH0KIAogICAgIC8vIEF1ZGlvTm9kZQogICAgIHZvaWQgcHJvY2VzcyhzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKSBvdmVycmlkZTsKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgdW5sb2NrKCk7CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlKEF1ZGlvQ29udGV4dCYsIEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0JiwgSFRNTE1lZGlhRWxlbWVudCYpOwogCiAg
ICAgZG91YmxlIHRhaWxUaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQogICAgIGRv
dWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KQEAgLTY2LDcg
KzY2LDcgQEAgcHJpdmF0ZToKICAgICAvLyBBcyBhbiBhdWRpbyBzb3VyY2UsIHdlIHdpbGwgbmV2
ZXIgcHJvcGFnYXRlIHNpbGVuY2UuCiAgICAgYm9vbCBwcm9wYWdhdGVzU2lsZW5jZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVu
dD4gbV9tZWRpYUVsZW1lbnQ7CisgICAgUmVmPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVt
ZW50OwogICAgIExvY2sgbV9wcm9jZXNzTXV0ZXg7CiAKICAgICB1bnNpZ25lZCBtX3NvdXJjZU51
bWJlck9mQ2hhbm5lbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL09zY2lsbGF0b3JOb2RlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
T3NjaWxsYXRvck5vZGUuaWRsCmluZGV4IDdjNmUxNDQuLjk0N2Y5Y2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCkBAIC0yNSw3
ICsyNSw2IEBACiAvLyBPc2NpbGxhdG9yTm9kZSBpcyBhbiBhdWRpbyBnZW5lcmF0b3Igb2YgcGVy
aW9kaWMgd2F2ZWZvcm1zLgogWwogICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICBVc2VQ
b2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50cywKICAgICBKU0dlbmVyYXRl
VG9KU09iamVjdCwKIF0gaW50ZXJmYWNlIE9zY2lsbGF0b3JOb2RlIDogQXVkaW9Ob2RlIHsKIApA
QCAtNTUsNyArNTQsOCBAQAogICAgIFtDb25kaXRpb25hbD1MRUdBQ1lfV0VCX0FVRElPLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgbm90ZU9uKHVucmVzdHJpY3RlZCBkb3VibGUgd2hlbik7CiAgICAg
W0NvbmRpdGlvbmFsPUxFR0FDWV9XRUJfQVVESU8sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBub3Rl
T2ZmKHVucmVzdHJpY3RlZCBkb3VibGUgd2hlbik7CiAKLSAgICB2b2lkIHNldFBlcmlvZGljV2F2
ZShQZXJpb2RpY1dhdmUgd2F2ZSk7CisgICAgLy8gRklYTUU6IFRoZSBwYXJhbWV0ZXIgc2hvdWxk
IG5vdCBiZSBudWxsYWJsZS4KKyAgICB2b2lkIHNldFBlcmlvZGljV2F2ZShQZXJpb2RpY1dhdmU/
IHdhdmUpOwogCiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmVuZGVkOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276798</attachid>
            <date>2016-04-19 20:31:05 -0700</date>
            <delta_ts>2016-04-19 21:01:32 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>WebAudio_wip.patch</filename>
            <type>text/plain</type>
            <size>29742</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0Rl
Y29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVj
b2Rlci5jcHAKaW5kZXggNmQ3MjgxZi4uMjkyZjA1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKQEAgLTUxLDE0ICs1
MSwxMSBAQCBBc3luY0F1ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKICAgICBtX3Ro
cmVhZElEID0gMDsKIH0KIAotdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6ZGVjb2RlQXN5bmMoQXJy
YXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRpb0J1
ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaykKK3ZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OmRlY29kZUFzeW5j
KFJlZjxBcnJheUJ1ZmZlcj4mJiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFJlZlB0cjxB
dWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFjaywgUmVmUHRyPEF1ZGlvQnVmZmVy
Q2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIEFTU0VSVChhdWRpb0RhdGEpOwotICAgIGlmICghYXVkaW9EYXRhKQotICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIGRlY29kaW5nVGFzayA9IHN0ZDo6bWFrZV91bmlxdWU8RGVjb2Rp
bmdUYXNrPihhdWRpb0RhdGEsIHNhbXBsZVJhdGUsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxs
YmFjayk7CisgICAgYXV0byBkZWNvZGluZ1Rhc2sgPSBzdGQ6Om1ha2VfdW5pcXVlPERlY29kaW5n
VGFzaz4oV1RGTW92ZShhdWRpb0RhdGEpLCBzYW1wbGVSYXRlLCBXVEZNb3ZlKHN1Y2Nlc3NDYWxs
YmFjayksIFdURk1vdmUoZXJyb3JDYWxsYmFjaykpOwogICAgIG1fcXVldWUuYXBwZW5kKFdURk1v
dmUoZGVjb2RpbmdUYXNrKSk7IC8vIG5vdGUgdGhhdCBvd25lcnNoaXAgb2YgdGhlIHRhc2sgaXMg
ZWZmZWN0aXZlbHkgdGFrZW4gYnkgdGhlIHF1ZXVlLgogfQogCkBAIC04NywyMCArODQsMTYgQEAg
dm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6cnVuTG9vcCgpCiAgICAgfQogfQogCi1Bc3luY0F1ZGlv
RGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpEZWNvZGluZ1Rhc2soQXJyYXlCdWZmZXIqIGF1ZGlvRGF0
YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
aykKLSAgICA6IG1fYXVkaW9EYXRhKGF1ZGlvRGF0YSkKK0FzeW5jQXVkaW9EZWNvZGVyOjpEZWNv
ZGluZ1Rhc2s6OkRlY29kaW5nVGFzayhSZWY8QXJyYXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBmbG9h
dCBzYW1wbGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJh
Y2ssIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIGVycm9yQ2FsbGJhY2spCisgICAgOiBt
X2F1ZGlvRGF0YShXVEZNb3ZlKGF1ZGlvRGF0YSkpCiAgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxl
UmF0ZSkKLSAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxsYmFjaykKLSAgICAsIG1f
ZXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQorICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soV1RG
TW92ZShzdWNjZXNzQ2FsbGJhY2spKQorICAgICwgbV9lcnJvckNhbGxiYWNrKFdURk1vdmUoZXJy
b3JDYWxsYmFjaykpCiB7CiB9CiAKIHZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFz
azo6ZGVjb2RlKCkKIHsKLSAgICBBU1NFUlQobV9hdWRpb0RhdGEuZ2V0KCkpOwotICAgIGlmICgh
bV9hdWRpb0RhdGEuZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIERvIHRoZSBhY3R1
YWwgZGVjb2RpbmcgYW5kIGludm9rZSB0aGUgY2FsbGJhY2suCiAgICAgbV9hdWRpb0J1ZmZlciA9
IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShtX2F1ZGlvRGF0YS0+ZGF0YSgp
LCBtX2F1ZGlvRGF0YS0+Ynl0ZUxlbmd0aCgpLCBmYWxzZSwgc2FtcGxlUmF0ZSgpKTsKICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0Rl
Y29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29k
ZXIuaAppbmRleCA4NzMwZDllLi4yM2U3ZmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oCkBAIC01MSwxNyArNTEsMTcgQEAg
cHVibGljOgogICAgIH5Bc3luY0F1ZGlvRGVjb2RlcigpOwogCiAgICAgLy8gTXVzdCBiZSBjYWxs
ZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHZvaWQgZGVjb2RlQXN5bmMoSlNDOjpBcnJheUJ1
ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVy
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrKTsKKyAgICB2b2lkIGRlY29kZUFzeW5jKFJlZjxKU0M6OkFycmF5QnVm
ZmVyPiYmIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2Fs
bGJhY2s+JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBl
cnJvckNhbGxiYWNrKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBEZWNvZGluZ1Rhc2sgewogICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWNvZGluZ1Rhc2spOwogICAgIHB1YmxpYzoKLSAg
ICAgICAgRGVjb2RpbmdUYXNrKEpTQzo6QXJyYXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2Ft
cGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
IFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7CisgICAgICAg
IERlY29kaW5nVGFzayhSZWY8SlNDOjpBcnJheUJ1ZmZlcj4mJiBhdWRpb0RhdGEsIGZsb2F0IHNh
bXBsZVJhdGUsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFjaywg
UmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgIHZv
aWQgZGVjb2RlKCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTQzo6QXJyYXlC
dWZmZXIqIGF1ZGlvRGF0YSgpIHsgcmV0dXJuIG1fYXVkaW9EYXRhLmdldCgpOyB9CisgICAgICAg
IEpTQzo6QXJyYXlCdWZmZXImIGF1ZGlvRGF0YSgpIHsgcmV0dXJuIG1fYXVkaW9EYXRhOyB9CiAg
ICAgICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0K
ICAgICAgICAgQXVkaW9CdWZmZXJDYWxsYmFjayogc3VjY2Vzc0NhbGxiYWNrKCkgeyByZXR1cm4g
bV9zdWNjZXNzQ2FsbGJhY2suZ2V0KCk7IH0KICAgICAgICAgQXVkaW9CdWZmZXJDYWxsYmFjayog
ZXJyb3JDYWxsYmFjaygpIHsgcmV0dXJuIG1fZXJyb3JDYWxsYmFjay5nZXQoKTsgfQpAQCAtNjks
NyArNjksNyBAQCBwcml2YXRlOgogCiAgICAgICAgIHZvaWQgbm90aWZ5Q29tcGxldGUoKTsKIAot
ICAgICAgICBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4gbV9hdWRpb0RhdGE7CisgICAgICAgIFJl
ZjxKU0M6OkFycmF5QnVmZmVyPiBtX2F1ZGlvRGF0YTsKICAgICAgICAgZmxvYXQgbV9zYW1wbGVS
YXRlOwogICAgICAgICBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJh
Y2s7CiAgICAgICAgIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2s7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAK
aW5kZXggYTdmZTYxMy4uYjQ4OWE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgQXVkaW9D
b250ZXh0OjpsYXp5SW5pdGlhbGl6ZSgpCiAgICAgaWYgKG1faXNBdWRpb1RocmVhZEZpbmlzaGVk
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9kZXN0aW5hdGlvbk5vZGUuZ2V0KCkpIHsK
KyAgICBpZiAobV9kZXN0aW5hdGlvbk5vZGUpIHsKICAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUt
PmluaXRpYWxpemUoKTsKIAogICAgICAgICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSkgewpAQCAt
Mzc3LDEwICszNzcsMTAgQEAgY29uc3QgRG9jdW1lbnQqIEF1ZGlvQ29udGV4dDo6aG9zdGluZ0Rv
Y3VtZW50KCkgY29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk7CiB9CiAKLVBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJP
ZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8QXVk
aW9CdWZmZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBhdWRpb0J1ZmZlciA9IEF1ZGlv
QnVmZmVyOjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFtZXMsIHNhbXBsZVJh
dGUpOwotICAgIGlmICghYXVkaW9CdWZmZXIuZ2V0KCkpIHsKKyAgICBpZiAoIWF1ZGlvQnVmZmVy
KSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KQEAgLTM4OCwxNiArMzg4LDEwIEBAIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+
IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNp
CiAgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOwogfQogCi1QYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBB
dWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIsIGJvb2wg
bWl4VG9Nb25vLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9D
b250ZXh0OjpjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXImIGFycmF5QnVmZmVyLCBib29sIG1peFRv
TW9ubywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKGFycmF5QnVmZmVyKTsKLSAg
ICBpZiAoIWFycmF5QnVmZmVyKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBhdWRpb0J1
ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShhcnJheUJ1ZmZlci0+
ZGF0YSgpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCBtaXhUb01vbm8sIHNhbXBsZVJhdGUo
KSk7Ci0gICAgaWYgKCFhdWRpb0J1ZmZlci5nZXQoKSkgeworICAgIFJlZlB0cjxBdWRpb0J1ZmZl
cj4gYXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlRnJvbUF1ZGlvRmlsZURhdGEoYXJy
YXlCdWZmZXIuZGF0YSgpLCBhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKCksIG1peFRvTW9ubywgc2Ft
cGxlUmF0ZSgpKTsKKyAgICBpZiAoIWF1ZGlvQnVmZmVyKSB7CiAgICAgICAgIGVjID0gU1lOVEFY
X0VSUjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNDA1LDY3ICszOTksNTEg
QEAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIoQXJy
YXlCdWZmZXIqIGFycmF5QnVmZmVyLCBib28KICAgICByZXR1cm4gYXVkaW9CdWZmZXI7CiB9CiAK
LXZvaWQgQXVkaW9Db250ZXh0OjpkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIqIGF1ZGlvRGF0
YSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYg
ZWMpCit2b2lkIEF1ZGlvQ29udGV4dDo6ZGVjb2RlQXVkaW9EYXRhKFJlZjxBcnJheUJ1ZmZlcj4m
JiBhdWRpb0RhdGEsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFj
aywgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjaykKIHsKLSAgICBp
ZiAoIWF1ZGlvRGF0YSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV9hdWRpb0RlY29kZXIuZGVjb2RlQXN5bmMoYXVkaW9EYXRhLCBzYW1w
bGVSYXRlKCksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CisgICAgbV9hdWRpb0Rl
Y29kZXIuZGVjb2RlQXN5bmMoV1RGTW92ZShhdWRpb0RhdGEpLCBzYW1wbGVSYXRlKCksIFdURk1v
dmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShlcnJvckNhbGxiYWNrKSk7CiB9CiAKLVBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlclNv
dXJjZSgpCitSZWY8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1
ZmZlclNvdXJjZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBsYXp5SW5p
dGlhbGl6ZSgpOwotICAgIFJlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IG5vZGUgPSBBdWRp
b0J1ZmZlclNvdXJjZU5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBs
ZVJhdGUoKSk7CisgICAgUmVmPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gbm9kZSA9IEF1ZGlvQnVm
ZmVyU291cmNlTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0
ZSgpKTsKIAogICAgIC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBBdWRpb1NjaGVkdWxlZFNvdXJjZU5v
ZGUsIHRoZSBjb250ZXh0IGtlZXBzIGEgcmVmZXJlbmNlIHVudGlsIGl0IGhhcyBmaW5pc2hlZCBw
bGF5aW5nLgogICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBBdWRpb1NjaGVkdWxlZFNvdXJjZU5v
ZGU6OmZpbmlzaCgpIGNhbGxzIEF1ZGlvQ29udGV4dDo6bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vz
c2luZygpLgotICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7CisgICAgcmVmTm9kZShub2RlKTsKIAog
ICAgIHJldHVybiBub2RlOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotUGFzc1JlZlB0cjxNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50
U291cmNlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
CitSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZU1lZGlhRWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtZWRpYUVsZW1lbnQpOwotICAgIGlmICghbWVk
aWFFbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICAgICAgCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogICAgIAogICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRo
aXMgbWVkaWEgZWxlbWVudCBhbHJlYWR5IGhhcyBhIHNvdXJjZSBub2RlLgotICAgIGlmIChtZWRp
YUVsZW1lbnQtPmF1ZGlvU291cmNlTm9kZSgpKSB7CisgICAgaWYgKG1lZGlhRWxlbWVudC5hdWRp
b1NvdXJjZU5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgICAgIAotICAgIFJlZlB0cjxNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGU+IG5vZGUgPSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmNy
ZWF0ZSgqdGhpcywgbWVkaWFFbGVtZW50KTsKKyAgICBSZWY8TWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlPiBub2RlID0gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUoKnRoaXMs
IG1lZGlhRWxlbWVudCk7CiAKLSAgICBtZWRpYUVsZW1lbnQtPnNldEF1ZGlvU291cmNlTm9kZShu
b2RlLmdldCgpKTsKKyAgICBtZWRpYUVsZW1lbnQuc2V0QXVkaW9Tb3VyY2VOb2RlKG5vZGUucHRy
KCkpOwogCiAgICAgcmVmTm9kZShub2RlLmdldCgpKTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVu
Y2UgdW50aWwgbm9kZSBpcyBkaXNjb25uZWN0ZWQKLSAgICByZXR1cm4gbm9kZTsKKyAgICByZXR1
cm4gV1RGTW92ZShub2RlKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LVBhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3Jl
YXRlTWVkaWFTdHJlYW1Tb3VyY2UoTWVkaWFTdHJlYW0qIG1lZGlhU3RyZWFtLCBFeGNlcHRpb25D
b2RlJiBlYykKK1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gQXVkaW9Db250ZXh0
OjpjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWRpYVN0cmVhbSYgbWVkaWFTdHJlYW0sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBBU1NF
UlQobWVkaWFTdHJlYW0pOwotICAgIGlmICghbWVkaWFTdHJlYW0pIHsKLSAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
YXV0byBhdWRpb1RyYWNrcyA9IG1lZGlhU3RyZWFtLT5nZXRBdWRpb1RyYWNrcygpOworICAgIGF1
dG8gYXVkaW9UcmFja3MgPSBtZWRpYVN0cmVhbS5nZXRBdWRpb1RyYWNrcygpOwogICAgIGlmIChh
dWRpb1RyYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC00ODYsMTQgKzQ2NCwxNCBAQCBQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3Ry
ZWFtU291cmNlKE1lZAogCiAgICAgbGF6eUluaXRpYWxpemUoKTsKIAotICAgIGF1dG8gbm9kZSA9
IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUoKnRoaXMsICptZWRpYVN0cmVhbSwg
KnByb3ZpZGVyVHJhY2spOworICAgIGF1dG8gbm9kZSA9IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VO
b2RlOjpjcmVhdGUoKnRoaXMsIG1lZGlhU3RyZWFtLCAqcHJvdmlkZXJUcmFjayk7CiAgICAgbm9k
ZS0+c2V0Rm9ybWF0KDIsIHNhbXBsZVJhdGUoKSk7CiAKLSAgICByZWZOb2RlKCZub2RlLmdldCgp
KTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgbm9kZSBpcyBkaXNjb25uZWN0ZWQK
LSAgICByZXR1cm4gJm5vZGUuZ2V0KCk7CisgICAgcmVmTm9kZShub2RlKTsgLy8gY29udGV4dCBr
ZWVwcyByZWZlcmVuY2UgdW50aWwgbm9kZSBpcyBkaXNjb25uZWN0ZWQKKyAgICByZXR1cm4gV1RG
TW92ZShub2RlKTsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25O
b2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKQorUmVmPE1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFT
dHJlYW1EZXN0aW5hdGlvbigpCiB7CiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBhbiBv
cHRpb25hbCBhcmd1bWVudCB3aGljaCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjaGFubmVscy4K
ICAgICAvLyBGSVhNRTogVGhlIGRlZmF1bHQgc2hvdWxkIHByb2JhYmx5IGJlIHN0ZXJlbyBpbnN0
ZWFkIG9mIG1vbm8uCkBAIC01MDIsMTEyICs0ODAsMTEyIEBAIFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbURl
c3RpCiAKICNlbmRpZgogCi1QYXNzUmVmUHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+IEF1ZGlvQ29u
dGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKK1JlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgLy8gU2V0IG51bWJlciBvZiBpbnB1dC9vdXRwdXQgY2hhbm5lbHMgdG8gc3RlcmVvIGJ5
IGRlZmF1bHQuCiAgICAgcmV0dXJuIGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihidWZmZXJTaXplLCAy
LCAyLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gQXVkaW9Db250
ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCBudW1i
ZXJPZklucHV0Q2hhbm5lbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPFNjcmlwdFByb2Nl
c3Nvck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZm
ZXJTaXplLCBzaXplX3QgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICAvLyBTZXQgbnVtYmVyIG9mIG91dHB1dCBjaGFubmVscyB0byBzdGVyZW8gYnkgZGVm
YXVsdC4KICAgICByZXR1cm4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKGJ1ZmZlclNpemUsIG51bWJl
ck9mSW5wdXRDaGFubmVscywgMiwgZWMpOwogfQogCi1QYXNzUmVmUHRyPFNjcmlwdFByb2Nlc3Nv
ck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJT
aXplLCBzaXplX3QgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZPdXRwdXRD
aGFubmVscywgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNp
emVfdCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZk91dHB1dENoYW5uZWxz
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IGxhenlJbml0aWFsaXplKCk7CiAgICAgUmVmUHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+IG5vZGUg
PSBTY3JpcHRQcm9jZXNzb3JOb2RlOjpjcmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5z
YW1wbGVSYXRlKCksIGJ1ZmZlclNpemUsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZP
dXRwdXRDaGFubmVscyk7CiAKLSAgICBpZiAoIW5vZGUuZ2V0KCkpIHsKKyAgICBpZiAoIW5vZGUp
IHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCi0gICAgcmVmTm9kZShub2RlLmdldCgpKTsgLy8gY29udGV4dCBrZWVwcyByZWZl
cmVuY2UgdW50aWwgd2Ugc3RvcCBtYWtpbmcgamF2YXNjcmlwdCByZW5kZXJpbmcgY2FsbGJhY2tz
CisgICAgcmVmTm9kZSgqbm9kZSk7IC8vIGNvbnRleHQga2VlcHMgcmVmZXJlbmNlIHVudGlsIHdl
IHN0b3AgbWFraW5nIGphdmFzY3JpcHQgcmVuZGVyaW5nIGNhbGxiYWNrcwogICAgIHJldHVybiBu
b2RlOwogfQogCi1QYXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3Jl
YXRlQmlxdWFkRmlsdGVyKCkKK1JlZjxCaXF1YWRGaWx0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNy
ZWF0ZUJpcXVhZEZpbHRlcigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBs
YXp5SW5pdGlhbGl6ZSgpOwogICAgIHJldHVybiBCaXF1YWRGaWx0ZXJOb2RlOjpjcmVhdGUoKnRo
aXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwogfQogCi1QYXNzUmVmUHRyPFdh
dmVTaGFwZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVdhdmVTaGFwZXIoKQorUmVmPFdhdmVT
aGFwZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVdhdmVTaGFwZXIoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAgICByZXR1cm4gV2F2
ZVNoYXBlck5vZGU6OmNyZWF0ZSgqdGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8UGFubmVyTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVQYW5uZXIoKQorUmVmPFBhbm5lck5vZGU+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlUGFubmVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxh
enlJbml0aWFsaXplKCk7CiAgICAgcmV0dXJuIFBhbm5lck5vZGU6OmNyZWF0ZSgqdGhpcywgbV9k
ZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7CiB9CiAKLVBhc3NSZWZQdHI8Q29udm9sdmVy
Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVDb252b2x2ZXIoKQorUmVmPENvbnZvbHZlck5vZGU+
IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ29udm9sdmVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAgICAgcmV0dXJuIENvbnZvbHZlck5vZGU6
OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7CiB9CiAKLVBh
c3NSZWZQdHI8RHluYW1pY3NDb21wcmVzc29yTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVEeW5h
bWljc0NvbXByZXNzb3IoKQorUmVmPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAgICAgcmV0dXJuIER5bmFtaWNzQ29tcHJlc3Nv
ck5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7CiB9
CiAKLVBhc3NSZWZQdHI8QW5hbHlzZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUFuYWx5c2Vy
KCkKK1JlZjxBbmFseXNlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQW5hbHlzZXIoKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAgICBy
ZXR1cm4gQW5hbHlzZXJOb2RlOjpjcmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1w
bGVSYXRlKCkpOwogfQogCi1QYXNzUmVmUHRyPEdhaW5Ob2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZUdhaW4oKQorUmVmPEdhaW5Ob2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUdhaW4oKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAgICByZXR1
cm4gR2Fpbk5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUo
KSk7CiB9CiAKLVBhc3NSZWZQdHI8RGVsYXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5
KEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPERlbGF5Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVh
dGVEZWxheShFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBjb25zdCBkb3VibGUgZGVmYXVsdE1h
eERlbGF5VGltZSA9IDE7CiAgICAgcmV0dXJuIGNyZWF0ZURlbGF5KGRlZmF1bHRNYXhEZWxheVRp
bWUsIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxEZWxheU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
RGVsYXkoZG91YmxlIG1heERlbGF5VGltZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8RGVs
YXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5KGRvdWJsZSBtYXhEZWxheVRpbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6
eUluaXRpYWxpemUoKTsKLSAgICBSZWZQdHI8RGVsYXlOb2RlPiBub2RlID0gRGVsYXlOb2RlOjpj
cmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCksIG1heERlbGF5VGlt
ZSwgZWMpOworICAgIFJlZjxEZWxheU5vZGU+IG5vZGUgPSBEZWxheU5vZGU6OmNyZWF0ZSgqdGhp
cywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwgbWF4RGVsYXlUaW1lLCBlYyk7CiAg
ICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gbm9kZTsKKyAg
ICByZXR1cm4gV1RGTW92ZShub2RlKTsKIH0KIAotUGFzc1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJO
b2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxTcGxpdHRlcihFeGNlcHRpb25Db2RlJiBl
YykKK1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5u
ZWxTcGxpdHRlcihFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBjb25zdCB1bnNpZ25lZCBDaGFu
bmVsU3BsaXR0ZXJEZWZhdWx0TnVtYmVyT2ZPdXRwdXRzID0gNjsKICAgICByZXR1cm4gY3JlYXRl
Q2hhbm5lbFNwbGl0dGVyKENoYW5uZWxTcGxpdHRlckRlZmF1bHROdW1iZXJPZk91dHB1dHMsIGVj
KTsKIH0KIAotUGFzc1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNy
ZWF0ZUNoYW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzLCBFeGNlcHRpb25Db2Rl
JiBlYykKK1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNo
YW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAK
ICAgICBSZWZQdHI8Q2hhbm5lbFNwbGl0dGVyTm9kZT4gbm9kZSA9IENoYW5uZWxTcGxpdHRlck5v
ZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwgbnVtYmVy
T2ZPdXRwdXRzKTsKIAotICAgIGlmICghbm9kZS5nZXQoKSkgeworICAgIGlmICghbm9kZSkgewog
ICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CkBAIC02MTUsMjAgKzU5MywyMCBAQCBQYXNzUmVmUHRyPENoYW5uZWxTcGxpdHRlck5vZGU+
IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKHNpemVfdCBudW1iZQogICAgIHJl
dHVybiBub2RlOwogfQogCi1QYXNzUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBBdWRpb0NvbnRl
eHQ6OmNyZWF0ZUNoYW5uZWxNZXJnZXIoRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8Q2hhbm5l
bE1lcmdlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcihFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBjb25zdCB1bnNpZ25lZCBDaGFubmVsTWVyZ2VyRGVmYXVsdE51bWJl
ck9mSW5wdXRzID0gNjsKICAgICByZXR1cm4gY3JlYXRlQ2hhbm5lbE1lcmdlcihDaGFubmVsTWVy
Z2VyRGVmYXVsdE51bWJlck9mSW5wdXRzLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8Q2hhbm5lbE1l
cmdlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcihzaXplX3QgbnVtYmVy
T2ZJbnB1dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBB
dWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxNZXJnZXIoc2l6ZV90IG51bWJlck9mSW5wdXRzLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxh
enlJbml0aWFsaXplKCk7CiAKICAgICBSZWZQdHI8Q2hhbm5lbE1lcmdlck5vZGU+IG5vZGUgPSBD
aGFubmVsTWVyZ2VyTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxl
UmF0ZSgpLCBudW1iZXJPZklucHV0cyk7CiAKLSAgICBpZiAoIW5vZGUuZ2V0KCkpIHsKKyAgICBp
ZiAoIW5vZGUpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQpAQCAtNjM2LDIxICs2MTQsMjEgQEAgUGFzc1JlZlB0cjxDaGFubmVs
TWVyZ2VyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVDaGFubmVsTWVyZ2VyKHNpemVfdCBudW1i
ZXJPZkkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotUGFzc1JlZlB0cjxPc2NpbGxhdG9yTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVPc2NpbGxhdG9yKCkKK1JlZjxPc2NpbGxhdG9yTm9kZT4gQXVk
aW9Db250ZXh0OjpjcmVhdGVPc2NpbGxhdG9yKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAKLSAgICBSZWZQdHI8T3NjaWxsYXRvck5vZGU+
IG5vZGUgPSBPc2NpbGxhdG9yTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+
c2FtcGxlUmF0ZSgpKTsKKyAgICBSZWY8T3NjaWxsYXRvck5vZGU+IG5vZGUgPSBPc2NpbGxhdG9y
Tm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKIAog
ICAgIC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUsIHRoZSBj
b250ZXh0IGtlZXBzIGEgcmVmZXJlbmNlIHVudGlsIGl0IGhhcyBmaW5pc2hlZCBwbGF5aW5nLgog
ICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6OmZpbmlz
aCgpIGNhbGxzIEF1ZGlvQ29udGV4dDo6bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZygpLgot
ICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7CisgICAgcmVmTm9kZShub2RlKTsKIAogICAgIHJldHVy
biBub2RlOwogfQogCi1QYXNzUmVmUHRyPFBlcmlvZGljV2F2ZT4gQXVkaW9Db250ZXh0OjpjcmVh
dGVQZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5KiByZWFsLCBGbG9hdDMyQXJyYXkqIGltYWcsIEV4
Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPFBlcmlvZGljV2F2ZT4gQXVkaW9Db250ZXh0OjpjcmVh
dGVQZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5KiByZWFsLCBGbG9hdDMyQXJyYXkqIGltYWcsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgCkBA
IC02NzQsMjggKzY1MiwyOCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZGaW5pc2hlZFNvdXJj
ZU5vZGVzKCkKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogICAgIEFTU0VSVChpc0F1ZGlv
VGhyZWFkKCkgfHwgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpOwogICAgIGZvciAoYXV0byYgbm9k
ZSA6IG1fZmluaXNoZWROb2RlcykKLSAgICAgICAgZGVyZWZOb2RlKG5vZGUpOworICAgICAgICBk
ZXJlZk5vZGUoKm5vZGUpOwogCiAgICAgbV9maW5pc2hlZE5vZGVzLmNsZWFyKCk7CiB9CiAKLXZv
aWQgQXVkaW9Db250ZXh0OjpyZWZOb2RlKEF1ZGlvTm9kZSogbm9kZSkKK3ZvaWQgQXVkaW9Db250
ZXh0OjpyZWZOb2RlKEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIEF1dG9Mb2NrZXIgbG9ja2VyKCp0aGlzKTsKICAgICAKLSAgICBub2RlLT5yZWYo
QXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0gICAgbV9yZWZlcmVuY2VkTm9kZXMuYXBw
ZW5kKG5vZGUpOworICAgIG5vZGUucmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwor
ICAgIG1fcmVmZXJlbmNlZE5vZGVzLmFwcGVuZCgmbm9kZSk7CiB9CiAKLXZvaWQgQXVkaW9Db250
ZXh0OjpkZXJlZk5vZGUoQXVkaW9Ob2RlKiBub2RlKQordm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVm
Tm9kZShBdWRpb05vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKICAg
ICAKLSAgICBub2RlLT5kZXJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsKKyAgICBu
b2RlLmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwogCi0gICAgQVNTRVJUKG1f
cmVmZXJlbmNlZE5vZGVzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICBtX3JlZmVyZW5jZWROb2Rlcy5y
ZW1vdmVGaXJzdChub2RlKTsKKyAgICBBU1NFUlQobV9yZWZlcmVuY2VkTm9kZXMuY29udGFpbnMo
Jm5vZGUpKTsKKyAgICBtX3JlZmVyZW5jZWROb2Rlcy5yZW1vdmVGaXJzdCgmbm9kZSk7CiB9CiAK
IHZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAppbmRleCA4ZDYxZTYx
Li5mZDVhYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmgKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxhdG9taWM+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CkBAIC0x
MDEsMTEgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNyZW1lbnRBY3RpdmVTb3VyY2VD
b3VudCgpOwogICAgIHZvaWQgZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsKICAgICAKLSAg
ICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlQnVmZmVyKEFycmF5
QnVmZmVyKiwgYm9vbCBtaXhUb01vbm8sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8QXVk
aW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3Qg
bnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBS
ZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciYsIGJvb2wgbWl4VG9N
b25vLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICAvLyBBc3luY2hyb25vdXMgYXVkaW8gZmlsZSBk
YXRhIGRlY29kaW5nLgotICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyKiwgUGFz
c1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxi
YWNrPiwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKFJlZjxB
cnJheUJ1ZmZlcj4mJiwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYsIFJlZlB0cjxBdWRp
b0J1ZmZlckNhbGxiYWNrPiYmKTsKIAogICAgIEF1ZGlvTGlzdGVuZXIqIGxpc3RlbmVyKCkgeyBy
ZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsgfQogCkBAIC0xMjEsMzIgKzEyMCwzMiBAQCBwdWJsaWM6
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGF0ZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlIEF1
ZGlvTm9kZSBjcmVhdGUgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCAoZnJv
bSBKYXZhU2NyaXB0KS4KLSAgICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gY3Jl
YXRlQnVmZmVyU291cmNlKCk7CisgICAgUmVmPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gY3JlYXRl
QnVmZmVyU291cmNlKCk7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIFBhc3NSZWZQdHI8TWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlh
RWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlPiBjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlhRWxlbWVudCYsIEV4
Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gY3JlYXRlTWVkaWFTdHJlYW1Tb3Vy
Y2UoTWVkaWFTdHJlYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7
CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGVNZWRpYVN0cmVh
bVNvdXJjZShNZWRpYVN0cmVhbSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWY8TWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpOwog
I2VuZGlmCi0gICAgUGFzc1JlZlB0cjxHYWluTm9kZT4gY3JlYXRlR2FpbigpOwotICAgIFBhc3NS
ZWZQdHI8QmlxdWFkRmlsdGVyTm9kZT4gY3JlYXRlQmlxdWFkRmlsdGVyKCk7Ci0gICAgUGFzc1Jl
ZlB0cjxXYXZlU2hhcGVyTm9kZT4gY3JlYXRlV2F2ZVNoYXBlcigpOwotICAgIFBhc3NSZWZQdHI8
RGVsYXlOb2RlPiBjcmVhdGVEZWxheShFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxE
ZWxheU5vZGU+IGNyZWF0ZURlbGF5KGRvdWJsZSBtYXhEZWxheVRpbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBQYXNzUmVmUHRyPFBhbm5lck5vZGU+IGNyZWF0ZVBhbm5lcigpOwotICAgIFBhc3NS
ZWZQdHI8Q29udm9sdmVyTm9kZT4gY3JlYXRlQ29udm9sdmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxE
eW5hbWljc0NvbXByZXNzb3JOb2RlPiBjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKTsgICAgCi0g
ICAgUGFzc1JlZlB0cjxBbmFseXNlck5vZGU+IGNyZWF0ZUFuYWx5c2VyKCk7Ci0gICAgUGFzc1Jl
ZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1
ZmZlclNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFNjcmlwdFByb2Nlc3Nv
ck5vZGU+IGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90IG51
bWJlck9mSW5wdXRDaGFubmVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8U2Ny
aXB0UHJvY2Vzc29yTm9kZT4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXpl
LCBzaXplX3QgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZPdXRwdXRDaGFu
bmVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8Q2hhbm5lbFNwbGl0dGVyTm9k
ZT4gY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRy
PENoYW5uZWxTcGxpdHRlck5vZGU+IGNyZWF0ZUNoYW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVy
T2ZPdXRwdXRzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxDaGFubmVsTWVyZ2Vy
Tm9kZT4gY3JlYXRlQ2hhbm5lbE1lcmdlcihFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0
cjxDaGFubmVsTWVyZ2VyTm9kZT4gY3JlYXRlQ2hhbm5lbE1lcmdlcihzaXplX3QgbnVtYmVyT2ZJ
bnB1dHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPE9zY2lsbGF0b3JOb2RlPiBj
cmVhdGVPc2NpbGxhdG9yKCk7Ci0gICAgUGFzc1JlZlB0cjxQZXJpb2RpY1dhdmU+IGNyZWF0ZVBl
cmlvZGljV2F2ZShGbG9hdDMyQXJyYXkqIHJlYWwsIEZsb2F0MzJBcnJheSogaW1hZywgRXhjZXB0
aW9uQ29kZSYpOworICAgIFJlZjxHYWluTm9kZT4gY3JlYXRlR2FpbigpOworICAgIFJlZjxCaXF1
YWRGaWx0ZXJOb2RlPiBjcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKyAgICBSZWY8V2F2ZVNoYXBlck5v
ZGU+IGNyZWF0ZVdhdmVTaGFwZXIoKTsKKyAgICBSZWZQdHI8RGVsYXlOb2RlPiBjcmVhdGVEZWxh
eShFeGNlcHRpb25Db2RlJik7CisgICAgUmVmUHRyPERlbGF5Tm9kZT4gY3JlYXRlRGVsYXkoZG91
YmxlIG1heERlbGF5VGltZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZjxQYW5uZXJOb2RlPiBj
cmVhdGVQYW5uZXIoKTsKKyAgICBSZWY8Q29udm9sdmVyTm9kZT4gY3JlYXRlQ29udm9sdmVyKCk7
CisgICAgUmVmPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+IGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3Nv
cigpOworICAgIFJlZjxBbmFseXNlck5vZGU+IGNyZWF0ZUFuYWx5c2VyKCk7CisgICAgUmVmUHRy
PFNjcmlwdFByb2Nlc3Nvck5vZGU+IGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVy
U2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBj
cmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCBudW1iZXJPZklu
cHV0Q2hhbm5lbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8U2NyaXB0UHJvY2Vzc29y
Tm9kZT4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QgbnVt
YmVyT2ZJbnB1dENoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgRXhjZXB0
aW9uQ29kZSYpOworICAgIFJlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBjcmVhdGVDaGFubmVs
U3BsaXR0ZXIoRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2Rl
PiBjcmVhdGVDaGFubmVsU3BsaXR0ZXIoc2l6ZV90IG51bWJlck9mT3V0cHV0cywgRXhjZXB0aW9u
Q29kZSYpOworICAgIFJlZlB0cjxDaGFubmVsTWVyZ2VyTm9kZT4gY3JlYXRlQ2hhbm5lbE1lcmdl
cihFeGNlcHRpb25Db2RlJik7CisgICAgUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBjcmVhdGVD
aGFubmVsTWVyZ2VyKHNpemVfdCBudW1iZXJPZklucHV0cywgRXhjZXB0aW9uQ29kZSYpOworICAg
IFJlZjxPc2NpbGxhdG9yTm9kZT4gY3JlYXRlT3NjaWxsYXRvcigpOworICAgIFJlZlB0cjxQZXJp
b2RpY1dhdmU+IGNyZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkqIHJlYWwsIEZsb2F0MzJB
cnJheSogaW1hZywgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgLy8gV2hlbiBhIHNvdXJjZSBub2Rl
IGhhcyBubyBtb3JlIHByb2Nlc3NpbmcgdG8gZG8gKGhhcyBmaW5pc2hlZCBwbGF5aW5nKSwgdGhl
biBpdCB0ZWxscyB0aGUgY29udGV4dCB0byBkZXJlZmVyZW5jZSBpdC4KICAgICB2b2lkIG5vdGlm
eU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcoQXVkaW9Ob2RlKik7CkBAIC0zMDMsOCArMzAyLDggQEAg
cHJpdmF0ZToKICAgICAvLyBJbiB0dXJuLCB0aGVzZSBub2RlcyByZWZlcmVuY2UgYWxsIG5vZGVz
IHRoZXkncmUgY29ubmVjdGVkIHRvLiAgQWxsIG5vZGVzIGFyZSB1bHRpbWF0ZWx5IGNvbm5lY3Rl
ZCB0byB0aGUgQXVkaW9EZXN0aW5hdGlvbk5vZGUuCiAgICAgLy8gV2hlbiB0aGUgY29udGV4dCBk
ZXJlZmVyZW5jZXMgYSBzb3VyY2Ugbm9kZSwgaXQgd2lsbCBiZSBkZWFjdGl2YXRlZCBmcm9tIHRo
ZSByZW5kZXJpbmcgZ3JhcGggYWxvbmcgd2l0aCBhbGwgb3RoZXIgbm9kZXMgaXQgaXMKICAgICAv
LyB1bmlxdWVseSBjb25uZWN0ZWQgdG8uICBTZWUgdGhlIEF1ZGlvTm9kZTo6cmVmKCkgYW5kIEF1
ZGlvTm9kZTo6ZGVyZWYoKSBtZXRob2RzIGZvciBtb3JlIGRldGFpbHMuCi0gICAgdm9pZCByZWZO
b2RlKEF1ZGlvTm9kZSopOwotICAgIHZvaWQgZGVyZWZOb2RlKEF1ZGlvTm9kZSopOworICAgIHZv
aWQgcmVmTm9kZShBdWRpb05vZGUmKTsKKyAgICB2b2lkIGRlcmVmTm9kZShBdWRpb05vZGUmKTsK
IAogICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCiAgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwK
aW5kZXggNDUxZjQ4NS4uM2UxOWZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbApAQCAtMzUsNyArMzUsNiBAQCBlbnVtIEF1ZGlvQ29u
dGV4dFN0YXRlIHsKICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCiAgICAgQWN0aXZlRE9NT2Jq
ZWN0LAogICAgIEN1c3RvbUNvbnN0cnVjdG9yLAotICAgIFVzZVBvaW50ZXJzRXZlbkZvck5vbk51
bGxhYmxlT2JqZWN0QXJndW1lbnRzLAogICAgIEludGVyZmFjZU5hbWU9d2Via2l0QXVkaW9Db250
ZXh0LAogICAgIEV4cG9ydE1hY3JvPVdFQkNPUkVfRVhQT1JULAogXSBpbnRlcmZhY2UgQXVkaW9D
b250ZXh0IDogRXZlbnRUYXJnZXQgewpAQCAtNjIsMTAgKzYxLDExIEBAIGVudW0gQXVkaW9Db250
ZXh0U3RhdGUgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGFjdGl2ZVNv
dXJjZUNvdW50OwogICAgIAogICAgIFtSYWlzZXNFeGNlcHRpb25dIEF1ZGlvQnVmZmVyIGNyZWF0
ZUJ1ZmZlcih1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhbm5lbHMsIHVuc2lnbmVkIGxvbmcgbnVt
YmVyT2ZGcmFtZXMsIHVucmVzdHJpY3RlZCBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICBbUmFpc2Vz
RXhjZXB0aW9uXSBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXI/IGJ1ZmZlciwg
Ym9vbGVhbiBtaXhUb01vbm8pOworICAgIFtSYWlzZXNFeGNlcHRpb25dIEF1ZGlvQnVmZmVyIGNy
ZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciBidWZmZXIsIGJvb2xlYW4gbWl4VG9Nb25vKTsKIAogICAg
IC8vIEFzeW5jaHJvbm91cyBhdWRpbyBmaWxlIGRhdGEgZGVjb2RpbmcuCi0gICAgW1JhaXNlc0V4
Y2VwdGlvbl0gdm9pZCBkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIgYXVkaW9EYXRhLCBBdWRp
b0J1ZmZlckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgb3B0aW9uYWwgQXVkaW9CdWZmZXJDYWxs
YmFjayBlcnJvckNhbGxiYWNrKTsKKyAgICAvLyBGSVhNRTogc3VjY2Vzc0NhbGxiYWNrIHNob3Vs
ZCBiZSBvcHRpb25hbCBhbmQgdGhlIGNhbGxiYWNrcyBzaG91bGQgbm90IGJlIG51bGxhYmxlLgor
ICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyIGF1ZGlvRGF0YSwgQXVkaW9CdWZm
ZXJDYWxsYmFjaz8gc3VjY2Vzc0NhbGxiYWNrLCBvcHRpb25hbCBBdWRpb0J1ZmZlckNhbGxiYWNr
PyBlcnJvckNhbGxiYWNrKTsKIAogICAgIC8vIFNvdXJjZXMKICAgICBBdWRpb0J1ZmZlclNvdXJj
ZU5vZGUgY3JlYXRlQnVmZmVyU291cmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAK
aW5kZXggMDEzOTFmZC4uNzdjN2ZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcApA
QCAtNDAsMTIgKzQwLDEyIEBAIGNvbnN0IHVuc2lnbmVkIG1heFNhbXBsZVJhdGUgPSAxOTIwMDA7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZT4gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUoQXVkaW9Db250ZXh0JiBjb250
ZXh0LCBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCitSZWY8TWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlPiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmNyZWF0ZShBdWRpb0Nv
bnRleHQmIGNvbnRleHQsIEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoY29udGV4dCwg
bWVkaWFFbGVtZW50KSk7CiB9CiAKLU1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6TWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29udGV4dCYgY29udGV4dCwgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50KQorTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0JiBjb250ZXh0LCBIVE1MTWVkaWFFbGVt
ZW50JiBtZWRpYUVsZW1lbnQpCiAgICAgOiBBdWRpb05vZGUoY29udGV4dCwgY29udGV4dC5zYW1w
bGVSYXRlKCkpCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpCiAgICAgLCBtX3Nv
dXJjZU51bWJlck9mQ2hhbm5lbHMoMCkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIE1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzcyhzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCiB7CiAg
ICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7CiAKLSAgICBpZiAoIW1l
ZGlhRWxlbWVudCgpIHx8ICFtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMgfHwgIW1fc291cmNlU2Ft
cGxlUmF0ZSkgeworICAgIGlmICghbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxzIHx8ICFtX3NvdXJj
ZVNhbXBsZVJhdGUpIHsKICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGU6OnByb2Nlc3Moc2l6ZV90IG51bWJlck9mRnJhbWVzKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKEF1ZGlvU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0gbWVkaWFFbGVt
ZW50KCktPmF1ZGlvU291cmNlUHJvdmlkZXIoKSkgeworICAgIGlmIChBdWRpb1NvdXJjZVByb3Zp
ZGVyKiBwcm92aWRlciA9IG1lZGlhRWxlbWVudCgpLmF1ZGlvU291cmNlUHJvdmlkZXIoKSkgewog
ICAgICAgICBpZiAobV9tdWx0aUNoYW5uZWxSZXNhbXBsZXIuZ2V0KCkpIHsKICAgICAgICAgICAg
IEFTU0VSVChtX3NvdXJjZVNhbXBsZVJhdGUgIT0gc2FtcGxlUmF0ZSgpKTsKICAgICAgICAgICAg
IG1fbXVsdGlDaGFubmVsUmVzYW1wbGVyLT5wcm9jZXNzKHByb3ZpZGVyLCBvdXRwdXRCdXMsIG51
bWJlck9mRnJhbWVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCmluZGV4IGMxODA0MmYuLjM1
YjBmNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaApAQCAtNDEsMTEgKzQxLDExIEBAIGNs
YXNzIEF1ZGlvQ29udGV4dDsKICAgICAKIGNsYXNzIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZSA6IHB1YmxpYyBBdWRpb05vZGUsIHB1YmxpYyBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3Jl
YXRlKEF1ZGlvQ29udGV4dCYsIEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUmVmPE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCYsIEhUTUxNZWRp
YUVsZW1lbnQmKTsKIAogICAgIHZpcnR1YWwgfk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSgp
OwogCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRp
YUVsZW1lbnQuZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgSFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRpYUVs
ZW1lbnQ7IH0KIAogICAgIC8vIEF1ZGlvTm9kZQogICAgIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKSBvdmVycmlkZTsKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHZv
aWQgdW5sb2NrKCk7CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
KEF1ZGlvQ29udGV4dCYsIEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBNZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0JiwgSFRNTE1lZGlhRWxlbWVudCYpOwogCiAgICAgZG91
YmxlIHRhaWxUaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQogICAgIGRvdWJsZSBs
YXRlbmN5VGltZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KQEAgLTY2LDcgKzY2LDcg
QEAgcHJpdmF0ZToKICAgICAvLyBBcyBhbiBhdWRpbyBzb3VyY2UsIHdlIHdpbGwgbmV2ZXIgcHJv
cGFnYXRlIHNpbGVuY2UuCiAgICAgYm9vbCBwcm9wYWdhdGVzU2lsZW5jZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9t
ZWRpYUVsZW1lbnQ7CisgICAgUmVmPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50Owog
ICAgIExvY2sgbV9wcm9jZXNzTXV0ZXg7CiAKICAgICB1bnNpZ25lZCBtX3NvdXJjZU51bWJlck9m
Q2hhbm5lbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09z
Y2lsbGF0b3JOb2RlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxs
YXRvck5vZGUuaWRsCmluZGV4IDdjNmUxNDQuLjk0N2Y5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCkBAIC0yNSw3ICsyNSw2
IEBACiAvLyBPc2NpbGxhdG9yTm9kZSBpcyBhbiBhdWRpbyBnZW5lcmF0b3Igb2YgcGVyaW9kaWMg
d2F2ZWZvcm1zLgogWwogICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICBVc2VQb2ludGVy
c0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50cywKICAgICBKU0dlbmVyYXRlVG9KU09i
amVjdCwKIF0gaW50ZXJmYWNlIE9zY2lsbGF0b3JOb2RlIDogQXVkaW9Ob2RlIHsKIApAQCAtNTUs
NyArNTQsOCBAQAogICAgIFtDb25kaXRpb25hbD1MRUdBQ1lfV0VCX0FVRElPLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgbm90ZU9uKHVucmVzdHJpY3RlZCBkb3VibGUgd2hlbik7CiAgICAgW0NvbmRp
dGlvbmFsPUxFR0FDWV9XRUJfQVVESU8sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBub3RlT2ZmKHVu
cmVzdHJpY3RlZCBkb3VibGUgd2hlbik7CiAKLSAgICB2b2lkIHNldFBlcmlvZGljV2F2ZShQZXJp
b2RpY1dhdmUgd2F2ZSk7CisgICAgLy8gRklYTUU6IFRoZSBwYXJhbWV0ZXIgc2hvdWxkIG5vdCBi
ZSBudWxsYWJsZS4KKyAgICB2b2lkIHNldFBlcmlvZGljV2F2ZShQZXJpb2RpY1dhdmU/IHdhdmUp
OwogCiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmVuZGVkOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276799</attachid>
            <date>2016-04-19 21:01:35 -0700</date>
            <delta_ts>2016-04-20 09:37:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156777-20160419210156.patch</filename>
            <type>text/plain</type>
            <size>35202</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5NzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNhM2I5ZmVlNDMxZTcw
MDRjMjNlYjYxNzkxMDU4MTNmNzU2NmUxZC4uZjIzZjNiYzhlYWZkNDIzMWRhOTE0M2Y1YWE0NzMx
YmRiOGM0YjQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYwIEBACiAyMDE2LTA0LTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgRHJvcCBbVXNlUG9pbnRlcnNF
dmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHNdIGZyb20gV2ViQXVkaW8KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Njc3NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERyb3AgW1VzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFdlYkF1ZGlvIGFuZAorICAg
ICAgICBtb2Rlcm5pemUgdGhlIGludGVyZmFjZSBhIGJpdC4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIG5vIGludGVuZGVkIFdlYi1leHBvc2VkIGJlaGF2aW9yYWwgY2hhbmdlLgorCisgICAgICAg
ICogTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBc3luY0F1ZGlvRGVjb2Rlcjo6ZGVjb2RlQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6
QXN5bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFzazo6RGVjb2RpbmdUYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFzazo6YXVkaW9EYXRh
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Q29udGV4dDo6ZGVjb2RlQXVkaW9EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6Y3JlYXRlQnVmZmVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6
Y3JlYXRlTWVkaWFFbGVtZW50U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6Y3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250
ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvQ29udGV4dDo6Y3JlYXRlQmlxdWFkRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Q29udGV4dDo6Y3JlYXRlV2F2ZVNoYXBlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6OmNyZWF0ZVBhbm5lcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0
ZUNvbnZvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZUR5bmFt
aWNzQ29tcHJlc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZUFu
YWx5c2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlR2Fpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcik6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZU9zY2lsbGF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Db250ZXh0OjpjcmVhdGVQZXJpb2RpY1dhdmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9Db250ZXh0OjpkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Db250ZXh0OjpyZWZOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6
ZGVyZWZOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bm90aWZ5Tm9kZUZp
bmlzaGVkUHJvY2Vzc2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6OmRlcmVmVW5maW5pc2hlZFNvdXJjZU5vZGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQ29udGV4dDo6bG9jayk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29u
dGV4dC5pZGw6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpwcm9jZXNzKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjptZWRpYUVsZW1lbnQpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsOgorCisyMDE2LTA0LTE5ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
LmJ1ZmZlciBzaG91bGQgYmUgbnVsbGFibGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1Njc2OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCmluZGV4IDZkNzI4MWY5M2U4MmQy
NzRiMDJjMDljODg1ZDc5OGE0NWQ0NmM5NTMuLjI5MmYwNWI4Y2Q1MDZlMjI5YWU2YjhiZDg2Mjlj
MDk1NGQxODQ1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXN5bmNBdWRpb0RlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCkBAIC01MSwxNCArNTEsMTEgQEAgQXN5bmNBdWRpb0Rl
Y29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCiAgICAgbV90aHJlYWRJRCA9IDA7CiB9CiAKLXZv
aWQgQXN5bmNBdWRpb0RlY29kZXI6OmRlY29kZUFzeW5jKEFycmF5QnVmZmVyKiBhdWRpb0RhdGEs
IGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sp
Cit2b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpkZWNvZGVBc3luYyhSZWY8QXJyYXlCdWZmZXI+JiYg
YXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4m
JiBzdWNjZXNzQ2FsbGJhY2ssIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIGVycm9yQ2Fs
bGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoYXVkaW9E
YXRhKTsKLSAgICBpZiAoIWF1ZGlvRGF0YSkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBk
ZWNvZGluZ1Rhc2sgPSBzdGQ6Om1ha2VfdW5pcXVlPERlY29kaW5nVGFzaz4oYXVkaW9EYXRhLCBz
YW1wbGVSYXRlLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOworICAgIGF1dG8gZGVj
b2RpbmdUYXNrID0gc3RkOjptYWtlX3VuaXF1ZTxEZWNvZGluZ1Rhc2s+KFdURk1vdmUoYXVkaW9E
YXRhKSwgc2FtcGxlUmF0ZSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGVycm9y
Q2FsbGJhY2spKTsKICAgICBtX3F1ZXVlLmFwcGVuZChXVEZNb3ZlKGRlY29kaW5nVGFzaykpOyAv
LyBub3RlIHRoYXQgb3duZXJzaGlwIG9mIHRoZSB0YXNrIGlzIGVmZmVjdGl2ZWx5IHRha2VuIGJ5
IHRoZSBxdWV1ZS4KIH0KIApAQCAtODcsMjAgKzg0LDE2IEBAIHZvaWQgQXN5bmNBdWRpb0RlY29k
ZXI6OnJ1bkxvb3AoKQogICAgIH0KIH0KIAotQXN5bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFz
azo6RGVjb2RpbmdUYXNrKEFycmF5QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUs
IFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVm
UHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi0gICAgOiBtX2F1ZGlvRGF0
YShhdWRpb0RhdGEpCitBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpEZWNvZGluZ1Rh
c2soUmVmPEFycmF5QnVmZmVyPiYmIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUmVmUHRy
PEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQdHI8QXVkaW9CdWZm
ZXJDYWxsYmFjaz4mJiBlcnJvckNhbGxiYWNrKQorICAgIDogbV9hdWRpb0RhdGEoV1RGTW92ZShh
dWRpb0RhdGEpKQogICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCi0gICAgLCBtX3N1Y2Nl
c3NDYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCi0gICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JD
YWxsYmFjaykKKyAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNr
KSkKKyAgICAsIG1fZXJyb3JDYWxsYmFjayhXVEZNb3ZlKGVycm9yQ2FsbGJhY2spKQogewogfQog
CiB2b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6OmRlY29kZSgpCiB7Ci0gICAg
QVNTRVJUKG1fYXVkaW9EYXRhLmdldCgpKTsKLSAgICBpZiAoIW1fYXVkaW9EYXRhLmdldCgpKQot
ICAgICAgICByZXR1cm47Ci0KICAgICAvLyBEbyB0aGUgYWN0dWFsIGRlY29kaW5nIGFuZCBpbnZv
a2UgdGhlIGNhbGxiYWNrLgogICAgIG1fYXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRl
RnJvbUF1ZGlvRmlsZURhdGEobV9hdWRpb0RhdGEtPmRhdGEoKSwgbV9hdWRpb0RhdGEtPmJ5dGVM
ZW5ndGgoKSwgZmFsc2UsIHNhbXBsZVJhdGUoKSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKaW5kZXggODczMGQ5ZTA1
NGZmZTRjMzZiMGU1MTAxZjEyNjdiMjQ1NWU0YWZjMi4uMjNlN2ZjMjg4NDQ4ZDRjYTQ0M2FmZjgx
MWFkOGI4NzhjZmExNzVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaApAQCAtNTEsMTcgKzUxLDE3IEBAIHB1YmxpYzoKICAg
ICB+QXN5bmNBdWRpb0RlY29kZXIoKTsKIAogICAgIC8vIE11c3QgYmUgY2FsbGVkIG9uIHRoZSBt
YWluIHRocmVhZC4KLSAgICB2b2lkIGRlY29kZUFzeW5jKEpTQzo6QXJyYXlCdWZmZXIqIGF1ZGlv
RGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjayk7CisgICAgdm9pZCBkZWNvZGVBc3luYyhSZWY8SlNDOjpBcnJheUJ1ZmZlcj4mJiBhdWRp
b0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1
Y2Nlc3NDYWxsYmFjaywgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFj
ayk7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgRGVjb2RpbmdUYXNrIHsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRGVjb2RpbmdUYXNrKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIERlY29k
aW5nVGFzayhKU0M6OkFycmF5QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBh
c3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRy
PEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spOworICAgICAgICBEZWNvZGluZ1Rh
c2soUmVmPEpTQzo6QXJyYXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBS
ZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ssIFJlZlB0cjxBdWRp
b0J1ZmZlckNhbGxiYWNrPiYmIGVycm9yQ2FsbGJhY2spOwogICAgICAgICB2b2lkIGRlY29kZSgp
OwogICAgICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBKU0M6OkFycmF5QnVmZmVyKiBhdWRp
b0RhdGEoKSB7IHJldHVybiBtX2F1ZGlvRGF0YS5nZXQoKTsgfQorICAgICAgICBKU0M6OkFycmF5
QnVmZmVyJiBhdWRpb0RhdGEoKSB7IHJldHVybiBtX2F1ZGlvRGF0YTsgfQogICAgICAgICBmbG9h
dCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAgICAgICAgIEF1
ZGlvQnVmZmVyQ2FsbGJhY2sqIHN1Y2Nlc3NDYWxsYmFjaygpIHsgcmV0dXJuIG1fc3VjY2Vzc0Nh
bGxiYWNrLmdldCgpOyB9CiAgICAgICAgIEF1ZGlvQnVmZmVyQ2FsbGJhY2sqIGVycm9yQ2FsbGJh
Y2soKSB7IHJldHVybiBtX2Vycm9yQ2FsbGJhY2suZ2V0KCk7IH0KQEAgLTY5LDcgKzY5LDcgQEAg
cHJpdmF0ZToKIAogICAgICAgICB2b2lkIG5vdGlmeUNvbXBsZXRlKCk7CiAKLSAgICAgICAgUmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXI+IG1fYXVkaW9EYXRhOworICAgICAgICBSZWY8SlNDOjpBcnJh
eUJ1ZmZlcj4gbV9hdWRpb0RhdGE7CiAgICAgICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKICAgICAg
ICAgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOwogICAgICAg
ICBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCmluZGV4IGE3ZmU2
MTM0NmVmYzYyMDAxNmFlZTI5ZTBiM2I1ZjMzZmVjZTBmZDYuLjVkZTdmNWQ4OGE3MjAzNDFkNWFj
MzYxMGVhNzIxY2JjNzEwMDc5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yMTIsNyArMjEzLDcgQEAgdm9pZCBBdWRpb0NvbnRleHQ6Omxh
enlJbml0aWFsaXplKCkKICAgICBpZiAobV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZS5nZXQoKSkgeworICAgIGlmICht
X2Rlc3RpbmF0aW9uTm9kZSkgewogICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+aW5pdGlhbGl6
ZSgpOwogCiAgICAgICAgIGlmICghaXNPZmZsaW5lQ29udGV4dCgpKSB7CkBAIC0zNzcsMTAgKzM3
OCwxMCBAQCBjb25zdCBEb2N1bWVudCogQXVkaW9Db250ZXh0Ojpob3N0aW5nRG9jdW1lbnQoKSBj
b25zdAogICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4obV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9Db250ZXh0OjpjcmVhdGVC
dWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBm
bG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxBdWRpb0J1ZmZlcj4g
QXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6
ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IGF1ZGlvQnVmZmVyID0gQXVkaW9CdWZmZXI6OmNy
ZWF0ZShudW1iZXJPZkNoYW5uZWxzLCBudW1iZXJPZkZyYW1lcywgc2FtcGxlUmF0ZSk7Ci0gICAg
aWYgKCFhdWRpb0J1ZmZlci5nZXQoKSkgeworICAgIGlmICghYXVkaW9CdWZmZXIpIHsKICAgICAg
ICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQpAQCAtMzg4LDE2ICszODksMTAgQEAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9Db250
ZXh0OjpjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2kKICAgICByZXR1
cm4gYXVkaW9CdWZmZXI7CiB9CiAKLVBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlciwgYm9vbCBtaXhUb01vbm8s
IEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPEF1ZGlvQnVmZmVyPiBBdWRpb0NvbnRleHQ6OmNy
ZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciYgYXJyYXlCdWZmZXIsIGJvb2wgbWl4VG9Nb25vLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICBBU1NFUlQoYXJyYXlCdWZmZXIpOwotICAgIGlmICghYXJy
YXlCdWZmZXIpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IGF1ZGlvQnVmZmVyID0gQXVk
aW9CdWZmZXI6OmNyZWF0ZUZyb21BdWRpb0ZpbGVEYXRhKGFycmF5QnVmZmVyLT5kYXRhKCksIGFy
cmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCksIG1peFRvTW9ubywgc2FtcGxlUmF0ZSgpKTsKLSAgICBp
ZiAoIWF1ZGlvQnVmZmVyLmdldCgpKSB7CisgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBhdWRpb0J1
ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShhcnJheUJ1ZmZlci5k
YXRhKCksIGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgoKSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlKCkp
OworICAgIGlmICghYXVkaW9CdWZmZXIpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC00MDUsNjcgKzQwMCw1MSBAQCBQYXNzUmVm
UHRyPEF1ZGlvQnVmZmVyPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciog
YXJyYXlCdWZmZXIsIGJvbwogICAgIHJldHVybiBhdWRpb0J1ZmZlcjsKIH0KIAotdm9pZCBBdWRp
b0NvbnRleHQ6OmRlY29kZUF1ZGlvRGF0YShBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBQYXNzUmVm
UHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRp
b0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
QXVkaW9Db250ZXh0OjpkZWNvZGVBdWRpb0RhdGEoUmVmPEFycmF5QnVmZmVyPiYmIGF1ZGlvRGF0
YSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQdHI8
QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBlcnJvckNhbGxiYWNrKQogewotICAgIGlmICghYXVkaW9E
YXRhKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBtX2F1ZGlvRGVjb2Rlci5kZWNvZGVBc3luYyhhdWRpb0RhdGEsIHNhbXBsZVJhdGUoKSwg
c3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKKyAgICBtX2F1ZGlvRGVjb2Rlci5kZWNv
ZGVBc3luYyhXVEZNb3ZlKGF1ZGlvRGF0YSksIHNhbXBsZVJhdGUoKSwgV1RGTW92ZShzdWNjZXNz
Q2FsbGJhY2spLCBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spKTsKIH0KIAotUGFzc1JlZlB0cjxBdWRp
b0J1ZmZlclNvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyU291cmNlKCkKK1Jl
ZjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyU291cmNl
KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7
Ci0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gbm9kZSA9IEF1ZGlvQnVmZmVyU291
cmNlTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsK
KyAgICBSZWY8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBub2RlID0gQXVkaW9CdWZmZXJTb3VyY2VO
b2RlOjpjcmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwogCiAg
ICAgLy8gQmVjYXVzZSB0aGlzIGlzIGFuIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZSwgdGhlIGNv
bnRleHQga2VlcHMgYSByZWZlcmVuY2UgdW50aWwgaXQgaGFzIGZpbmlzaGVkIHBsYXlpbmcuCiAg
ICAgLy8gV2hlbiB0aGlzIGhhcHBlbnMsIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6ZmluaXNo
KCkgY2FsbHMgQXVkaW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKCkuCi0g
ICAgcmVmTm9kZShub2RlLmdldCgpKTsKKyAgICByZWZOb2RlKG5vZGUpOwogCiAgICAgcmV0dXJu
IG5vZGU7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1QYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVt
ZW50U291cmNlKEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgQVNTRVJUKG1lZGlhRWxlbWVudCk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQp
IHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotICAgICAgICAKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxh
enlJbml0aWFsaXplKCk7CiAgICAgCiAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhpcyBtZWRpYSBl
bGVtZW50IGFscmVhZHkgaGFzIGEgc291cmNlIG5vZGUuCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+
YXVkaW9Tb3VyY2VOb2RlKCkpIHsKKyAgICBpZiAobWVkaWFFbGVtZW50LmF1ZGlvU291cmNlTm9k
ZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KICAgICAgICAgCi0gICAgUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZT4gbm9kZSA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6Y3JlYXRlKCp0aGlz
LCBtZWRpYUVsZW1lbnQpOworICAgIFJlZjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IG5v
ZGUgPSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmNyZWF0ZSgqdGhpcywgbWVkaWFFbGVt
ZW50KTsKIAotICAgIG1lZGlhRWxlbWVudC0+c2V0QXVkaW9Tb3VyY2VOb2RlKG5vZGUuZ2V0KCkp
OworICAgIG1lZGlhRWxlbWVudC5zZXRBdWRpb1NvdXJjZU5vZGUobm9kZS5wdHIoKSk7CiAKICAg
ICByZWZOb2RlKG5vZGUuZ2V0KCkpOyAvLyBjb250ZXh0IGtlZXBzIHJlZmVyZW5jZSB1bnRpbCBu
b2RlIGlzIGRpc2Nvbm5lY3RlZAotICAgIHJldHVybiBub2RlOworICAgIHJldHVybiBXVEZNb3Zl
KG5vZGUpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0
cmVhbVNvdXJjZShNZWRpYVN0cmVhbSogbWVkaWFTdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQor
UmVmUHRyPE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1l
ZGlhU3RyZWFtU291cmNlKE1lZGlhU3RyZWFtJiBtZWRpYVN0cmVhbSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIEFTU0VSVChtZWRpYVN0
cmVhbSk7Ci0gICAgaWYgKCFtZWRpYVN0cmVhbSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RB
VEVfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvIGF1ZGlv
VHJhY2tzID0gbWVkaWFTdHJlYW0tPmdldEF1ZGlvVHJhY2tzKCk7CisgICAgYXV0byBhdWRpb1Ry
YWNrcyA9IG1lZGlhU3RyZWFtLmdldEF1ZGlvVHJhY2tzKCk7CiAgICAgaWYgKGF1ZGlvVHJhY2tz
LmlzRW1wdHkoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTQ4NiwxNCArNDY1LDE0IEBAIFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1BdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2Uo
TWVkCiAKICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogCi0gICAgYXV0byBub2RlID0gTWVkaWFTdHJl
YW1BdWRpb1NvdXJjZU5vZGU6OmNyZWF0ZSgqdGhpcywgKm1lZGlhU3RyZWFtLCAqcHJvdmlkZXJU
cmFjayk7CisgICAgYXV0byBub2RlID0gTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU6OmNyZWF0
ZSgqdGhpcywgbWVkaWFTdHJlYW0sICpwcm92aWRlclRyYWNrKTsKICAgICBub2RlLT5zZXRGb3Jt
YXQoMiwgc2FtcGxlUmF0ZSgpKTsKIAotICAgIHJlZk5vZGUoJm5vZGUuZ2V0KCkpOyAvLyBjb250
ZXh0IGtlZXBzIHJlZmVyZW5jZSB1bnRpbCBub2RlIGlzIGRpc2Nvbm5lY3RlZAotICAgIHJldHVy
biAmbm9kZS5nZXQoKTsKKyAgICByZWZOb2RlKG5vZGUpOyAvLyBjb250ZXh0IGtlZXBzIHJlZmVy
ZW5jZSB1bnRpbCBub2RlIGlzIGRpc2Nvbm5lY3RlZAorICAgIHJldHVybiBXVEZNb3ZlKG5vZGUp
OwogfQogCi1QYXNzUmVmUHRyPE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+IEF1ZGlv
Q29udGV4dDo6Y3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpCitSZWY8TWVkaWFTdHJlYW1B
dWRpb0Rlc3RpbmF0aW9uTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbURlc3Rp
bmF0aW9uKCkKIHsKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGFuIG9wdGlvbmFsIGFy
Z3VtZW50IHdoaWNoIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgogICAgIC8vIEZJ
WE1FOiBUaGUgZGVmYXVsdCBzaG91bGQgcHJvYmFibHkgYmUgc3RlcmVvIGluc3RlYWQgb2YgbW9u
by4KQEAgLTUwMiwxMTIgKzQ4MSwxMTIgQEAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVz
dGluYXRpb25Ob2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGkKIAogI2Vu
ZGlmCiAKLVBhc3NSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVh
dGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
UmVmUHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0UHJv
Y2Vzc29yKHNpemVfdCBidWZmZXJTaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBT
ZXQgbnVtYmVyIG9mIGlucHV0L291dHB1dCBjaGFubmVscyB0byBzdGVyZW8gYnkgZGVmYXVsdC4K
ICAgICByZXR1cm4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKGJ1ZmZlclNpemUsIDIsIDIsIGVjKTsK
IH0KIAotUGFzc1JlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90IG51bWJlck9mSW5wdXRD
aGFubmVscywgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNp
emVfdCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8v
IFNldCBudW1iZXIgb2Ygb3V0cHV0IGNoYW5uZWxzIHRvIHN0ZXJlbyBieSBkZWZhdWx0LgogICAg
IHJldHVybiBjcmVhdGVTY3JpcHRQcm9jZXNzb3IoYnVmZmVyU2l6ZSwgbnVtYmVyT2ZJbnB1dENo
YW5uZWxzLCAyLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gQXVk
aW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVf
dCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBF
eGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBBdWRpb0NvbnRl
eHQ6OmNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90IG51bWJl
ck9mSW5wdXRDaGFubmVscywgc2l6ZV90IG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRp
YWxpemUoKTsKICAgICBSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gbm9kZSA9IFNjcmlwdFBy
b2Nlc3Nvck5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUo
KSwgYnVmZmVyU2l6ZSwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5u
ZWxzKTsKIAotICAgIGlmICghbm9kZS5nZXQoKSkgeworICAgIGlmICghbm9kZSkgewogICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
LSAgICByZWZOb2RlKG5vZGUuZ2V0KCkpOyAvLyBjb250ZXh0IGtlZXBzIHJlZmVyZW5jZSB1bnRp
bCB3ZSBzdG9wIG1ha2luZyBqYXZhc2NyaXB0IHJlbmRlcmluZyBjYWxsYmFja3MKKyAgICByZWZO
b2RlKCpub2RlKTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgd2Ugc3RvcCBtYWtp
bmcgamF2YXNjcmlwdCByZW5kZXJpbmcgY2FsbGJhY2tzCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAK
LVBhc3NSZWZQdHI8QmlxdWFkRmlsdGVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVCaXF1YWRG
aWx0ZXIoKQorUmVmPEJpcXVhZEZpbHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQmlxdWFk
RmlsdGVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFs
aXplKCk7CiAgICAgcmV0dXJuIEJpcXVhZEZpbHRlck5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0
aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7CiB9CiAKLVBhc3NSZWZQdHI8V2F2ZVNoYXBlck5v
ZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlV2F2ZVNoYXBlcigpCitSZWY8V2F2ZVNoYXBlck5vZGU+
IEF1ZGlvQ29udGV4dDo6Y3JlYXRlV2F2ZVNoYXBlcigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogICAgIHJldHVybiBXYXZlU2hhcGVyTm9k
ZTo6Y3JlYXRlKCp0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxQYW5uZXJOb2RlPiBBdWRpb0NvbnRl
eHQ6OmNyZWF0ZVBhbm5lcigpCitSZWY8UGFubmVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVQ
YW5uZXIoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxp
emUoKTsKICAgICByZXR1cm4gUGFubmVyTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9u
Tm9kZS0+c2FtcGxlUmF0ZSgpKTsKIH0KIAotUGFzc1JlZlB0cjxDb252b2x2ZXJOb2RlPiBBdWRp
b0NvbnRleHQ6OmNyZWF0ZUNvbnZvbHZlcigpCitSZWY8Q29udm9sdmVyTm9kZT4gQXVkaW9Db250
ZXh0OjpjcmVhdGVDb252b2x2ZXIoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgbGF6eUluaXRpYWxpemUoKTsKICAgICByZXR1cm4gQ29udm9sdmVyTm9kZTo6Y3JlYXRlKCp0
aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKIH0KIAotUGFzc1JlZlB0cjxE
eW5hbWljc0NvbXByZXNzb3JOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUR5bmFtaWNzQ29tcHJl
c3NvcigpCitSZWY8RHluYW1pY3NDb21wcmVzc29yTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVE
eW5hbWljc0NvbXByZXNzb3IoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
bGF6eUluaXRpYWxpemUoKTsKICAgICByZXR1cm4gRHluYW1pY3NDb21wcmVzc29yTm9kZTo6Y3Jl
YXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKIH0KIAotUGFzc1Jl
ZlB0cjxBbmFseXNlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQW5hbHlzZXIoKQorUmVmPEFu
YWx5c2VyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVBbmFseXNlcigpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogICAgIHJldHVybiBBbmFs
eXNlck5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7
CiB9CiAKLVBhc3NSZWZQdHI8R2Fpbk5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlR2FpbigpCitS
ZWY8R2Fpbk5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlR2FpbigpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogICAgIHJldHVybiBHYWluTm9k
ZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKIH0KIAot
UGFzc1JlZlB0cjxEZWxheU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlRGVsYXkoRXhjZXB0aW9u
Q29kZSYgZWMpCitSZWZQdHI8RGVsYXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5KEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGNvbnN0IGRvdWJsZSBkZWZhdWx0TWF4RGVsYXlUaW1l
ID0gMTsKICAgICByZXR1cm4gY3JlYXRlRGVsYXkoZGVmYXVsdE1heERlbGF5VGltZSwgZWMpOwog
fQogCi1QYXNzUmVmUHRyPERlbGF5Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVEZWxheShkb3Vi
bGUgbWF4RGVsYXlUaW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxEZWxheU5vZGU+IEF1
ZGlvQ29udGV4dDo6Y3JlYXRlRGVsYXkoZG91YmxlIG1heERlbGF5VGltZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBsYXp5SW5pdGlhbGl6
ZSgpOwotICAgIFJlZlB0cjxEZWxheU5vZGU+IG5vZGUgPSBEZWxheU5vZGU6OmNyZWF0ZSgqdGhp
cywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwgbWF4RGVsYXlUaW1lLCBlYyk7Cisg
ICAgUmVmPERlbGF5Tm9kZT4gbm9kZSA9IERlbGF5Tm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3Rp
bmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpLCBtYXhEZWxheVRpbWUsIGVjKTsKICAgICBpZiAoZWMp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBub2RlOworICAgIHJldHVybiBX
VEZNb3ZlKG5vZGUpOwogfQogCi1QYXNzUmVmUHRyPENoYW5uZWxTcGxpdHRlck5vZGU+IEF1ZGlv
Q29udGV4dDo6Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRy
PENoYW5uZWxTcGxpdHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbFNwbGl0dGVy
KEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGNvbnN0IHVuc2lnbmVkIENoYW5uZWxTcGxpdHRl
ckRlZmF1bHROdW1iZXJPZk91dHB1dHMgPSA2OwogICAgIHJldHVybiBjcmVhdGVDaGFubmVsU3Bs
aXR0ZXIoQ2hhbm5lbFNwbGl0dGVyRGVmYXVsdE51bWJlck9mT3V0cHV0cywgZWMpOwogfQogCi1Q
YXNzUmVmUHRyPENoYW5uZWxTcGxpdHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5l
bFNwbGl0dGVyKHNpemVfdCBudW1iZXJPZk91dHB1dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVm
UHRyPENoYW5uZWxTcGxpdHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbFNwbGl0
dGVyKHNpemVfdCBudW1iZXJPZk91dHB1dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKIAogICAgIFJlZlB0
cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBub2RlID0gQ2hhbm5lbFNwbGl0dGVyTm9kZTo6Y3JlYXRl
KCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpLCBudW1iZXJPZk91dHB1dHMp
OwogCi0gICAgaWYgKCFub2RlLmdldCgpKSB7CisgICAgaWYgKCFub2RlKSB7CiAgICAgICAgIGVj
ID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTYx
NSwyMCArNTk0LDIwIEBAIFBhc3NSZWZQdHI8Q2hhbm5lbFNwbGl0dGVyTm9kZT4gQXVkaW9Db250
ZXh0OjpjcmVhdGVDaGFubmVsU3BsaXR0ZXIoc2l6ZV90IG51bWJlCiAgICAgcmV0dXJuIG5vZGU7
CiB9CiAKLVBhc3NSZWZQdHI8Q2hhbm5lbE1lcmdlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
Q2hhbm5lbE1lcmdlcihFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxDaGFubmVsTWVyZ2VyTm9k
ZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVDaGFubmVsTWVyZ2VyKEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIGNvbnN0IHVuc2lnbmVkIENoYW5uZWxNZXJnZXJEZWZhdWx0TnVtYmVyT2ZJbnB1dHMg
PSA2OwogICAgIHJldHVybiBjcmVhdGVDaGFubmVsTWVyZ2VyKENoYW5uZWxNZXJnZXJEZWZhdWx0
TnVtYmVyT2ZJbnB1dHMsIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxDaGFubmVsTWVyZ2VyTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVDaGFubmVsTWVyZ2VyKHNpemVfdCBudW1iZXJPZklucHV0cywg
RXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8Q2hhbm5lbE1lcmdlck5vZGU+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcihzaXplX3QgbnVtYmVyT2ZJbnB1dHMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxp
emUoKTsKIAogICAgIFJlZlB0cjxDaGFubmVsTWVyZ2VyTm9kZT4gbm9kZSA9IENoYW5uZWxNZXJn
ZXJOb2RlOjpjcmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCksIG51
bWJlck9mSW5wdXRzKTsKIAotICAgIGlmICghbm9kZS5nZXQoKSkgeworICAgIGlmICghbm9kZSkg
ewogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CkBAIC02MzYsMjEgKzYxNSwyMSBAQCBQYXNzUmVmUHRyPENoYW5uZWxNZXJnZXJOb2Rl
PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxNZXJnZXIoc2l6ZV90IG51bWJlck9mSQogICAg
IHJldHVybiBub2RlOwogfQogCi1QYXNzUmVmUHRyPE9zY2lsbGF0b3JOb2RlPiBBdWRpb0NvbnRl
eHQ6OmNyZWF0ZU9zY2lsbGF0b3IoKQorUmVmPE9zY2lsbGF0b3JOb2RlPiBBdWRpb0NvbnRleHQ6
OmNyZWF0ZU9zY2lsbGF0b3IoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
bGF6eUluaXRpYWxpemUoKTsKIAotICAgIFJlZlB0cjxPc2NpbGxhdG9yTm9kZT4gbm9kZSA9IE9z
Y2lsbGF0b3JOb2RlOjpjcmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRl
KCkpOworICAgIFJlZjxPc2NpbGxhdG9yTm9kZT4gbm9kZSA9IE9zY2lsbGF0b3JOb2RlOjpjcmVh
dGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwogCiAgICAgLy8gQmVj
YXVzZSB0aGlzIGlzIGFuIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZSwgdGhlIGNvbnRleHQga2Vl
cHMgYSByZWZlcmVuY2UgdW50aWwgaXQgaGFzIGZpbmlzaGVkIHBsYXlpbmcuCiAgICAgLy8gV2hl
biB0aGlzIGhhcHBlbnMsIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6ZmluaXNoKCkgY2FsbHMg
QXVkaW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKCkuCi0gICAgcmVmTm9k
ZShub2RlLmdldCgpKTsKKyAgICByZWZOb2RlKG5vZGUpOwogCiAgICAgcmV0dXJuIG5vZGU7CiB9
CiAKLVBhc3NSZWZQdHI8UGVyaW9kaWNXYXZlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVBlcmlvZGlj
V2F2ZShGbG9hdDMyQXJyYXkqIHJlYWwsIEZsb2F0MzJBcnJheSogaW1hZywgRXhjZXB0aW9uQ29k
ZSYgZWMpCitSZWZQdHI8UGVyaW9kaWNXYXZlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVBlcmlvZGlj
V2F2ZShGbG9hdDMyQXJyYXkqIHJlYWwsIEZsb2F0MzJBcnJheSogaW1hZywgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAKQEAgLTY3NCwyOCAr
NjUzLDI4IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKQog
ICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CiAgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSB8
fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7CiAgICAgZm9yIChhdXRvJiBub2RlIDogbV9maW5p
c2hlZE5vZGVzKQotICAgICAgICBkZXJlZk5vZGUobm9kZSk7CisgICAgICAgIGRlcmVmTm9kZSgq
bm9kZSk7CiAKICAgICBtX2ZpbmlzaGVkTm9kZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBBdWRpb0Nv
bnRleHQ6OnJlZk5vZGUoQXVkaW9Ob2RlKiBub2RlKQordm9pZCBBdWRpb0NvbnRleHQ6OnJlZk5v
ZGUoQXVkaW9Ob2RlJiBub2RlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
QXV0b0xvY2tlciBsb2NrZXIoKnRoaXMpOwogICAgIAotICAgIG5vZGUtPnJlZihBdWRpb05vZGU6
OlJlZlR5cGVDb25uZWN0aW9uKTsKLSAgICBtX3JlZmVyZW5jZWROb2Rlcy5hcHBlbmQobm9kZSk7
CisgICAgbm9kZS5yZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7CisgICAgbV9yZWZl
cmVuY2VkTm9kZXMuYXBwZW5kKCZub2RlKTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVm
Tm9kZShBdWRpb05vZGUqIG5vZGUpCit2b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZOb2RlKEF1ZGlv
Tm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogICAgIAotICAgIG5v
ZGUtPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOworICAgIG5vZGUuZGVyZWYo
QXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7CiAKLSAgICBBU1NFUlQobV9yZWZlcmVuY2Vk
Tm9kZXMuY29udGFpbnMobm9kZSkpOwotICAgIG1fcmVmZXJlbmNlZE5vZGVzLnJlbW92ZUZpcnN0
KG5vZGUpOworICAgIEFTU0VSVChtX3JlZmVyZW5jZWROb2Rlcy5jb250YWlucygmbm9kZSkpOwor
ICAgIG1fcmVmZXJlbmNlZE5vZGVzLnJlbW92ZUZpcnN0KCZub2RlKTsKIH0KIAogdm9pZCBBdWRp
b0NvbnRleHQ6OmRlcmVmVW5maW5pc2hlZFNvdXJjZU5vZGVzKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IDhkNjFlNjEyZTllYzIyYWFh
ODdjMDI2ZWMwOTE3MzE2NmQ4NzljYzcuLjgwMDQ1ZDgzOTU0ZTgyNjdjYWY4OTZjYTk1NGVjYWRl
NWYzYTE0OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuaApAQCAtMSw1ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM4LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxhdG9taWM+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CkBAIC0xMDEsMTEgKzEw
MSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpOwog
ICAgIHZvaWQgZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsKICAgICAKLSAgICBQYXNzUmVm
UHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywg
c2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyKiwg
Ym9vbCBtaXhUb01vbm8sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8QXVkaW9CdWZmZXI+
IGNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZG
cmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8QXVk
aW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciYsIGJvb2wgbWl4VG9Nb25vLCBFeGNl
cHRpb25Db2RlJik7CiAKICAgICAvLyBBc3luY2hyb25vdXMgYXVkaW8gZmlsZSBkYXRhIGRlY29k
aW5nLgotICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyKiwgUGFzc1JlZlB0cjxB
dWRpb0J1ZmZlckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiwgRXhj
ZXB0aW9uQ29kZSYgZWMpOworICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKFJlZjxBcnJheUJ1ZmZl
cj4mJiwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYsIFJlZlB0cjxBdWRpb0J1ZmZlckNh
bGxiYWNrPiYmKTsKIAogICAgIEF1ZGlvTGlzdGVuZXIqIGxpc3RlbmVyKCkgeyByZXR1cm4gbV9s
aXN0ZW5lci5nZXQoKTsgfQogCkBAIC0xMjEsMzIgKzEyMSwzMiBAQCBwdWJsaWM6CiAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBzdGF0ZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlIEF1ZGlvTm9kZSBj
cmVhdGUgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCAoZnJvbSBKYXZhU2Ny
aXB0KS4KLSAgICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gY3JlYXRlQnVmZmVy
U291cmNlKCk7CisgICAgUmVmPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gY3JlYXRlQnVmZmVyU291
cmNlKCk7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIFBhc3NSZWZQdHI8TWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlPiBjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlhRWxlbWVudCos
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
PiBjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlhRWxlbWVudCYsIEV4Y2VwdGlvbkNv
ZGUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UoTWVkaWFT
dHJlYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlv
RGVzdGluYXRpb25Ob2RlPiBjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7CisgICAgUmVm
UHRyPE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShN
ZWRpYVN0cmVhbSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWY8TWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZT4gY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpOwogI2VuZGlmCi0g
ICAgUGFzc1JlZlB0cjxHYWluTm9kZT4gY3JlYXRlR2FpbigpOwotICAgIFBhc3NSZWZQdHI8Qmlx
dWFkRmlsdGVyTm9kZT4gY3JlYXRlQmlxdWFkRmlsdGVyKCk7Ci0gICAgUGFzc1JlZlB0cjxXYXZl
U2hhcGVyTm9kZT4gY3JlYXRlV2F2ZVNoYXBlcigpOwotICAgIFBhc3NSZWZQdHI8RGVsYXlOb2Rl
PiBjcmVhdGVEZWxheShFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxEZWxheU5vZGU+
IGNyZWF0ZURlbGF5KGRvdWJsZSBtYXhEZWxheVRpbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPFBhbm5lck5vZGU+IGNyZWF0ZVBhbm5lcigpOwotICAgIFBhc3NSZWZQdHI8Q29u
dm9sdmVyTm9kZT4gY3JlYXRlQ29udm9sdmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxEeW5hbWljc0Nv
bXByZXNzb3JOb2RlPiBjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKTsgICAgCi0gICAgUGFzc1Jl
ZlB0cjxBbmFseXNlck5vZGU+IGNyZWF0ZUFuYWx5c2VyKCk7Ci0gICAgUGFzc1JlZlB0cjxTY3Jp
cHRQcm9jZXNzb3JOb2RlPiBjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+IGNy
ZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90IG51bWJlck9mSW5w
dXRDaGFubmVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8U2NyaXB0UHJvY2Vz
c29yTm9kZT4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXplLCBzaXplX3Qg
bnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8Q2hhbm5lbFNwbGl0dGVyTm9kZT4gY3JlYXRl
Q2hhbm5lbFNwbGl0dGVyKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPENoYW5uZWxT
cGxpdHRlck5vZGU+IGNyZWF0ZUNoYW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRz
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxDaGFubmVsTWVyZ2VyTm9kZT4gY3Jl
YXRlQ2hhbm5lbE1lcmdlcihFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxDaGFubmVs
TWVyZ2VyTm9kZT4gY3JlYXRlQ2hhbm5lbE1lcmdlcihzaXplX3QgbnVtYmVyT2ZJbnB1dHMsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPE9zY2lsbGF0b3JOb2RlPiBjcmVhdGVPc2Np
bGxhdG9yKCk7Ci0gICAgUGFzc1JlZlB0cjxQZXJpb2RpY1dhdmU+IGNyZWF0ZVBlcmlvZGljV2F2
ZShGbG9hdDMyQXJyYXkqIHJlYWwsIEZsb2F0MzJBcnJheSogaW1hZywgRXhjZXB0aW9uQ29kZSYp
OworICAgIFJlZjxHYWluTm9kZT4gY3JlYXRlR2FpbigpOworICAgIFJlZjxCaXF1YWRGaWx0ZXJO
b2RlPiBjcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKyAgICBSZWY8V2F2ZVNoYXBlck5vZGU+IGNyZWF0
ZVdhdmVTaGFwZXIoKTsKKyAgICBSZWZQdHI8RGVsYXlOb2RlPiBjcmVhdGVEZWxheShFeGNlcHRp
b25Db2RlJik7CisgICAgUmVmUHRyPERlbGF5Tm9kZT4gY3JlYXRlRGVsYXkoZG91YmxlIG1heERl
bGF5VGltZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZjxQYW5uZXJOb2RlPiBjcmVhdGVQYW5u
ZXIoKTsKKyAgICBSZWY8Q29udm9sdmVyTm9kZT4gY3JlYXRlQ29udm9sdmVyKCk7CisgICAgUmVm
PER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+IGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpOworICAg
IFJlZjxBbmFseXNlck5vZGU+IGNyZWF0ZUFuYWx5c2VyKCk7CisgICAgUmVmUHRyPFNjcmlwdFBy
b2Nlc3Nvck5vZGU+IGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBjcmVhdGVTY3Jp
cHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCBudW1iZXJPZklucHV0Q2hhbm5l
bHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gY3Jl
YXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QgbnVtYmVyT2ZJbnB1
dENoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgRXhjZXB0aW9uQ29kZSYp
OworICAgIFJlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBjcmVhdGVDaGFubmVsU3BsaXR0ZXIo
RXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBjcmVhdGVD
aGFubmVsU3BsaXR0ZXIoc2l6ZV90IG51bWJlck9mT3V0cHV0cywgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFJlZlB0cjxDaGFubmVsTWVyZ2VyTm9kZT4gY3JlYXRlQ2hhbm5lbE1lcmdlcihFeGNlcHRp
b25Db2RlJik7CisgICAgUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBjcmVhdGVDaGFubmVsTWVy
Z2VyKHNpemVfdCBudW1iZXJPZklucHV0cywgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZjxPc2Np
bGxhdG9yTm9kZT4gY3JlYXRlT3NjaWxsYXRvcigpOworICAgIFJlZlB0cjxQZXJpb2RpY1dhdmU+
IGNyZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkqIHJlYWwsIEZsb2F0MzJBcnJheSogaW1h
ZywgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgLy8gV2hlbiBhIHNvdXJjZSBub2RlIGhhcyBubyBt
b3JlIHByb2Nlc3NpbmcgdG8gZG8gKGhhcyBmaW5pc2hlZCBwbGF5aW5nKSwgdGhlbiBpdCB0ZWxs
cyB0aGUgY29udGV4dCB0byBkZXJlZmVyZW5jZSBpdC4KICAgICB2b2lkIG5vdGlmeU5vZGVGaW5p
c2hlZFByb2Nlc3NpbmcoQXVkaW9Ob2RlKik7CkBAIC0zMDMsOCArMzAzLDggQEAgcHJpdmF0ZToK
ICAgICAvLyBJbiB0dXJuLCB0aGVzZSBub2RlcyByZWZlcmVuY2UgYWxsIG5vZGVzIHRoZXkncmUg
Y29ubmVjdGVkIHRvLiAgQWxsIG5vZGVzIGFyZSB1bHRpbWF0ZWx5IGNvbm5lY3RlZCB0byB0aGUg
QXVkaW9EZXN0aW5hdGlvbk5vZGUuCiAgICAgLy8gV2hlbiB0aGUgY29udGV4dCBkZXJlZmVyZW5j
ZXMgYSBzb3VyY2Ugbm9kZSwgaXQgd2lsbCBiZSBkZWFjdGl2YXRlZCBmcm9tIHRoZSByZW5kZXJp
bmcgZ3JhcGggYWxvbmcgd2l0aCBhbGwgb3RoZXIgbm9kZXMgaXQgaXMKICAgICAvLyB1bmlxdWVs
eSBjb25uZWN0ZWQgdG8uICBTZWUgdGhlIEF1ZGlvTm9kZTo6cmVmKCkgYW5kIEF1ZGlvTm9kZTo6
ZGVyZWYoKSBtZXRob2RzIGZvciBtb3JlIGRldGFpbHMuCi0gICAgdm9pZCByZWZOb2RlKEF1ZGlv
Tm9kZSopOwotICAgIHZvaWQgZGVyZWZOb2RlKEF1ZGlvTm9kZSopOworICAgIHZvaWQgcmVmTm9k
ZShBdWRpb05vZGUmKTsKKyAgICB2b2lkIGRlcmVmTm9kZShBdWRpb05vZGUmKTsKIAogICAgIC8v
IEFjdGl2ZURPTU9iamVjdCBBUEkuCiAgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKaW5kZXggNDUx
ZjQ4NWU2MWVlMjk2MGY5MThkZDBiMDY5MjMzMDQ2NjFmZjcyOS4uYTQzYjJhOGRlNWNjOWY1NjRl
OTE1NzgwN2YwYmQ5NTIxZjA2NjVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbApAQCAtMzEsMTMgKzMxLDEyIEBAIGVudW0gQXVkaW9D
b250ZXh0U3RhdGUgewogfTsKIAogWwotICAgIEVuYWJsZWRCeVNldHRpbmc9V2ViQXVkaW8sCi0g
ICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAogICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICBDb25k
aXRpb25hbD1XRUJfQVVESU8sCiAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCi0gICAgVXNlUG9pbnRl
cnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHMsCi0gICAgSW50ZXJmYWNlTmFtZT13
ZWJraXRBdWRpb0NvbnRleHQsCisgICAgRW5hYmxlZEJ5U2V0dGluZz1XZWJBdWRpbywKICAgICBF
eHBvcnRNYWNybz1XRUJDT1JFX0VYUE9SVCwKKyAgICBJbnRlcmZhY2VOYW1lPXdlYmtpdEF1ZGlv
Q29udGV4dCwKIF0gaW50ZXJmYWNlIEF1ZGlvQ29udGV4dCA6IEV2ZW50VGFyZ2V0IHsKICAgICAv
LyBBbGwgcmVuZGVyZWQgYXVkaW8gdWx0aW1hdGVseSBjb25uZWN0cyB0byBkZXN0aW5hdGlvbiwg
d2hpY2ggcmVwcmVzZW50cyB0aGUgYXVkaW8gaGFyZHdhcmUuCiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIEF1ZGlvRGVzdGluYXRpb25Ob2RlIGRlc3RpbmF0aW9uOwpAQCAtNjIsMjIgKzYxLDE5IEBA
IGVudW0gQXVkaW9Db250ZXh0U3RhdGUgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIGFjdGl2ZVNvdXJjZUNvdW50OwogICAgIAogICAgIFtSYWlzZXNFeGNlcHRpb25dIEF1
ZGlvQnVmZmVyIGNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhbm5lbHMsIHVu
c2lnbmVkIGxvbmcgbnVtYmVyT2ZGcmFtZXMsIHVucmVzdHJpY3RlZCBmbG9hdCBzYW1wbGVSYXRl
KTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoQXJyYXlC
dWZmZXI/IGJ1ZmZlciwgYm9vbGVhbiBtaXhUb01vbm8pOworICAgIFtSYWlzZXNFeGNlcHRpb25d
IEF1ZGlvQnVmZmVyIGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciBidWZmZXIsIGJvb2xlYW4gbWl4
VG9Nb25vKTsKIAogICAgIC8vIEFzeW5jaHJvbm91cyBhdWRpbyBmaWxlIGRhdGEgZGVjb2Rpbmcu
Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIg
YXVkaW9EYXRhLCBBdWRpb0J1ZmZlckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgb3B0aW9uYWwg
QXVkaW9CdWZmZXJDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKKyAgICAvLyBGSVhNRTogc3VjY2Vz
c0NhbGxiYWNrIHNob3VsZCBiZSBvcHRpb25hbCBhbmQgdGhlIGNhbGxiYWNrcyBzaG91bGQgbm90
IGJlIG51bGxhYmxlLgorICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyIGF1ZGlv
RGF0YSwgQXVkaW9CdWZmZXJDYWxsYmFjaz8gc3VjY2Vzc0NhbGxiYWNrLCBvcHRpb25hbCBBdWRp
b0J1ZmZlckNhbGxiYWNrPyBlcnJvckNhbGxiYWNrKTsKIAogICAgIC8vIFNvdXJjZXMKICAgICBB
dWRpb0J1ZmZlclNvdXJjZU5vZGUgY3JlYXRlQnVmZmVyU291cmNlKCk7CiAKLSNpZiBkZWZpbmVk
KEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShIVE1MTWVk
aWFFbGVtZW50IG1lZGlhRWxlbWVudCk7Ci0jZW5kaWYKKyAgICBbQ29uZGl0aW9uYWw9VklERU8s
IFJhaXNlc0V4Y2VwdGlvbl0gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlh
RWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50IG1lZGlhRWxlbWVudCk7CiAKLSNpZiBkZWZp
bmVkKEVOQUJMRV9NRURJQV9TVFJFQU0pICYmIEVOQUJMRV9NRURJQV9TVFJFQU0KLSAgICBbUmFp
c2VzRXhjZXB0aW9uXSBNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZSBjcmVhdGVNZWRpYVN0cmVh
bVNvdXJjZShNZWRpYVN0cmVhbSBtZWRpYVN0cmVhbSk7Ci0gICAgTWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZSBjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7Ci0jZW5kaWYKKyAg
ICBbQ29uZGl0aW9uYWw9TUVESUFfU1RSRUFNLCBSYWlzZXNFeGNlcHRpb25dIE1lZGlhU3RyZWFt
QXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKE1lZGlhU3RyZWFtIG1lZGlh
U3RyZWFtKTsKKyAgICBbQ29uZGl0aW9uYWw9TUVESUFfU1RSRUFNXSBNZWRpYVN0cmVhbUF1ZGlv
RGVzdGluYXRpb25Ob2RlIGNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKTsKIAogICAgIC8v
IFByb2Nlc3Npbmcgbm9kZXMKICAgICBHYWluTm9kZSBjcmVhdGVHYWluKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5jcHAKaW5kZXggMDEzOTFmZDNjMzZiODc2NDYxYTVjZTdmYzRmNmMzYmUx
ZTAyZDA5Ny4uNzdjN2ZiY2NmZDNlZGQ3ZTlhOTRkYWZmMTYzMWQxYWQ5MjNlNTk5ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcApAQCAtNDAsMTIgKzQwLDEyIEBAIGNvbnN0IHVuc2ln
bmVkIG1heFNhbXBsZVJhdGUgPSAxOTIwMDA7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVm
PE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
OjpjcmVhdGUoQXVkaW9Db250ZXh0JiBjb250ZXh0LCBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQpCitSZWY8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBNZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQmIGNvbnRleHQsIEhUTUxNZWRpYUVsZW1l
bnQmIG1lZGlhRWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUoY29udGV4dCwgbWVkaWFFbGVtZW50KSk7CiB9CiAKLU1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29u
dGV4dCYgY29udGV4dCwgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQorTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250
ZXh0JiBjb250ZXh0LCBIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCiAgICAgOiBBdWRp
b05vZGUoY29udGV4dCwgY29udGV4dC5zYW1wbGVSYXRlKCkpCiAgICAgLCBtX21lZGlhRWxlbWVu
dChtZWRpYUVsZW1lbnQpCiAgICAgLCBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMoMCkKQEAgLTEw
NCw3ICsxMDQsNyBAQCB2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2Vzcyhz
aXplX3QgbnVtYmVyT2ZGcmFtZXMpCiB7CiAgICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1
dCgwKS0+YnVzKCk7CiAKLSAgICBpZiAoIW1lZGlhRWxlbWVudCgpIHx8ICFtX3NvdXJjZU51bWJl
ck9mQ2hhbm5lbHMgfHwgIW1fc291cmNlU2FtcGxlUmF0ZSkgeworICAgIGlmICghbV9zb3VyY2VO
dW1iZXJPZkNoYW5uZWxzIHx8ICFtX3NvdXJjZVNhbXBsZVJhdGUpIHsKICAgICAgICAgb3V0cHV0
QnVzLT56ZXJvKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTksNyArMTE5LDcgQEAg
dm9pZCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OnByb2Nlc3Moc2l6ZV90IG51bWJlck9m
RnJhbWVzKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKEF1ZGlvU291cmNlUHJv
dmlkZXIqIHByb3ZpZGVyID0gbWVkaWFFbGVtZW50KCktPmF1ZGlvU291cmNlUHJvdmlkZXIoKSkg
eworICAgIGlmIChBdWRpb1NvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IG1lZGlhRWxlbWVudCgp
LmF1ZGlvU291cmNlUHJvdmlkZXIoKSkgewogICAgICAgICBpZiAobV9tdWx0aUNoYW5uZWxSZXNh
bXBsZXIuZ2V0KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChtX3NvdXJjZVNhbXBsZVJhdGUgIT0g
c2FtcGxlUmF0ZSgpKTsKICAgICAgICAgICAgIG1fbXVsdGlDaGFubmVsUmVzYW1wbGVyLT5wcm9j
ZXNzKHByb3ZpZGVyLCBvdXRwdXRCdXMsIG51bWJlck9mRnJhbWVzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZS5oCmluZGV4IGMxODA0MmZiY2UyOWI0ZDZjZTlkZDE3Mzg1ZDUwNDkxOTI0NTZjNzMu
LjM1YjBmNjUzY2ZlN2Y4MzNlODhlNDIxMjIwNzViODAyMGZlNmRmMjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGUuaApAQCAtNDEsMTEgKzQxLDExIEBAIGNsYXNzIEF1ZGlvQ29udGV4dDsKICAg
ICAKIGNsYXNzIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUs
IHB1YmxpYyBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCYsIEhU
TUxNZWRpYUVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUmVmPE1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCYsIEhUTUxNZWRpYUVsZW1lbnQmKTsKIAogICAgIHZp
cnR1YWwgfk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSgpOwogCi0gICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgSFRNTE1lZGlhRWxlbWVu
dCYgbWVkaWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQ7IH0KIAogICAgIC8vIEF1
ZGlvTm9kZQogICAgIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSBvdmVycmlk
ZTsKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5sb2NrKCk7CiAKIHByaXZh
dGU6Ci0gICAgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29udGV4dCYsIEhUTUxN
ZWRpYUVsZW1lbnQqKTsKKyAgICBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250
ZXh0JiwgSFRNTE1lZGlhRWxlbWVudCYpOwogCiAgICAgZG91YmxlIHRhaWxUaW1lKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gMDsgfQogICAgIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIDA7IH0KQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICAvLyBB
cyBhbiBhdWRpbyBzb3VyY2UsIHdlIHdpbGwgbmV2ZXIgcHJvcGFnYXRlIHNpbGVuY2UuCiAgICAg
Ym9vbCBwcm9wYWdhdGVzU2lsZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CiAKLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7CisgICAgUmVm
PEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OwogICAgIExvY2sgbV9wcm9jZXNzTXV0
ZXg7CiAKICAgICB1bnNpZ25lZCBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCmluZGV4IDdj
NmUxNDQ4ZDRjZTc0NGYzZWQ5NTVlOTE3MmQ3MDJkN2ZiYzczZWMuLjk0N2Y5Y2Q0M2MzZTU2YTE5
ZGJjNjgwMGZlNjdmYjYzMmFmN2Q4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCkBAIC0yNSw3ICsyNSw2IEBACiAvLyBPc2Np
bGxhdG9yTm9kZSBpcyBhbiBhdWRpbyBnZW5lcmF0b3Igb2YgcGVyaW9kaWMgd2F2ZWZvcm1zLgog
WwogICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICBVc2VQb2ludGVyc0V2ZW5Gb3JOb25O
dWxsYWJsZU9iamVjdEFyZ3VtZW50cywKICAgICBKU0dlbmVyYXRlVG9KU09iamVjdCwKIF0gaW50
ZXJmYWNlIE9zY2lsbGF0b3JOb2RlIDogQXVkaW9Ob2RlIHsKIApAQCAtNTUsNyArNTQsOCBAQAog
ICAgIFtDb25kaXRpb25hbD1MRUdBQ1lfV0VCX0FVRElPLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
bm90ZU9uKHVucmVzdHJpY3RlZCBkb3VibGUgd2hlbik7CiAgICAgW0NvbmRpdGlvbmFsPUxFR0FD
WV9XRUJfQVVESU8sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBub3RlT2ZmKHVucmVzdHJpY3RlZCBk
b3VibGUgd2hlbik7CiAKLSAgICB2b2lkIHNldFBlcmlvZGljV2F2ZShQZXJpb2RpY1dhdmUgd2F2
ZSk7CisgICAgLy8gRklYTUU6IFRoZSBwYXJhbWV0ZXIgc2hvdWxkIG5vdCBiZSBudWxsYWJsZS4K
KyAgICB2b2lkIHNldFBlcmlvZGljV2F2ZShQZXJpb2RpY1dhdmU/IHdhdmUpOwogCiAgICAgYXR0
cmlidXRlIEV2ZW50SGFuZGxlciBvbmVuZGVkOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276828</attachid>
            <date>2016-04-20 09:20:55 -0700</date>
            <delta_ts>2016-04-20 09:37:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156777-20160420092115.patch</filename>
            <type>text/plain</type>
            <size>37401</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5NzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNhM2I5ZmVlNDMxZTcw
MDRjMjNlYjYxNzkxMDU4MTNmNzU2NmUxZC4uNDJiOGFhNzI0MWU5MGJmNzVlNWU1ZTgxMTg0Yjhi
NDliMzYzYmVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYyIEBACiAyMDE2LTA0LTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgRHJvcCBbVXNlUG9pbnRlcnNF
dmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHNdIGZyb20gV2ViQXVkaW8KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Njc3NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERyb3AgW1VzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFdlYkF1ZGlvIGFuZAorICAg
ICAgICBtb2Rlcm5pemUgdGhlIGludGVyZmFjZSBhIGJpdC4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIG5vIGludGVuZGVkIFdlYi1leHBvc2VkIGJlaGF2aW9yYWwgY2hhbmdlIGV4Y2VwdCBmb3IK
KyAgICAgICAgdGhlIGV4Y2VwdGlvbiB0eXBlIHRocm93biB3aGVuIHBhc3NpbmcgbnVsbCAobm93
IGFsd2F5cyBUeXBlRXJyb3IpLgorICAgICAgICBVcGRhdGVkIHRoZSBmb2xsb3dpbmcgdGVzdDog
d2ViYXVkaW8vYXVkaW9idWZmZXIuaHRtbAorCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9B
c3luY0F1ZGlvRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0F1ZGlvRGVjb2Rl
cjo6ZGVjb2RlQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OkRl
Y29kaW5nVGFzazo6RGVjb2RpbmdUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9E
ZWNvZGVyOjpEZWNvZGluZ1Rhc2s6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNB
dWRpb0RlY29kZXI6OkRlY29kaW5nVGFzazo6YXVkaW9EYXRhKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6OmxhenlJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3Jl
YXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6ZGVjb2RlQXVkaW9E
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50U291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFTdHJlYW1T
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVh
bURlc3RpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlU2Ny
aXB0UHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlQmlx
dWFkRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlV2F2ZVNo
YXBlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZVBhbm5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZUNvbnZvbHZlcik6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZUR5bmFtaWNzQ29tcHJlc3Nvcik6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZUFuYWx5c2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlR2Fpbik6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0NvbnRleHQ6OmNyZWF0ZURlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6
Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6
Y3JlYXRlQ2hhbm5lbE1lcmdlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNy
ZWF0ZU9zY2lsbGF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpjcmVhdGVQ
ZXJpb2RpY1dhdmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJlZkZpbmlz
aGVkU291cmNlTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpyZWZOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6ZGVyZWZOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmRlcmVmVW5maW5pc2hlZFNv
dXJjZU5vZGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bG9j
ayk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGw6CisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpNZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlOjpwcm9jZXNzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlOjptZWRpYUVsZW1lbnQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vT3NjaWxs
YXRvck5vZGUuaWRsOgorCisyMDE2LTA0LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKICAgICAgICAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmJ1ZmZlciBzaG91bGQgYmUgbnVs
bGFibGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
Njc2OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5j
QXVkaW9EZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNB
dWRpb0RlY29kZXIuY3BwCmluZGV4IDZkNzI4MWY5M2U4MmQyNzRiMDJjMDljODg1ZDc5OGE0NWQ0
NmM5NTMuLjI5MmYwNWI4Y2Q1MDZlMjI5YWU2YjhiZDg2MjljMDk1NGQxODQ1OWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIu
Y3BwCkBAIC01MSwxNCArNTEsMTEgQEAgQXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVj
b2RlcigpCiAgICAgbV90aHJlYWRJRCA9IDA7CiB9CiAKLXZvaWQgQXN5bmNBdWRpb0RlY29kZXI6
OmRlY29kZUFzeW5jKEFycmF5QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBh
c3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRy
PEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit2b2lkIEFzeW5jQXVkaW9EZWNv
ZGVyOjpkZWNvZGVBc3luYyhSZWY8QXJyYXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBmbG9hdCBzYW1w
bGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ssIFJl
ZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIGVycm9yQ2FsbGJhY2spCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoYXVkaW9EYXRhKTsKLSAgICBpZiAoIWF1ZGlv
RGF0YSkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBkZWNvZGluZ1Rhc2sgPSBzdGQ6Om1h
a2VfdW5pcXVlPERlY29kaW5nVGFzaz4oYXVkaW9EYXRhLCBzYW1wbGVSYXRlLCBzdWNjZXNzQ2Fs
bGJhY2ssIGVycm9yQ2FsbGJhY2spOworICAgIGF1dG8gZGVjb2RpbmdUYXNrID0gc3RkOjptYWtl
X3VuaXF1ZTxEZWNvZGluZ1Rhc2s+KFdURk1vdmUoYXVkaW9EYXRhKSwgc2FtcGxlUmF0ZSwgV1RG
TW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spKTsKICAgICBtX3F1
ZXVlLmFwcGVuZChXVEZNb3ZlKGRlY29kaW5nVGFzaykpOyAvLyBub3RlIHRoYXQgb3duZXJzaGlw
IG9mIHRoZSB0YXNrIGlzIGVmZmVjdGl2ZWx5IHRha2VuIGJ5IHRoZSBxdWV1ZS4KIH0KIApAQCAt
ODcsMjAgKzg0LDE2IEBAIHZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3AoKQogICAgIH0K
IH0KIAotQXN5bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFzazo6RGVjb2RpbmdUYXNrKEFycmF5
QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVkaW9CdWZm
ZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJh
Y2s+IGVycm9yQ2FsbGJhY2spCi0gICAgOiBtX2F1ZGlvRGF0YShhdWRpb0RhdGEpCitBc3luY0F1
ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpEZWNvZGluZ1Rhc2soUmVmPEFycmF5QnVmZmVyPiYm
IGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+
JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBlcnJvckNh
bGxiYWNrKQorICAgIDogbV9hdWRpb0RhdGEoV1RGTW92ZShhdWRpb0RhdGEpKQogICAgICwgbV9z
YW1wbGVSYXRlKHNhbXBsZVJhdGUpCi0gICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2Fs
bGJhY2spCi0gICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKKyAgICAsIG1fc3Vj
Y2Vzc0NhbGxiYWNrKFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSkKKyAgICAsIG1fZXJyb3JDYWxs
YmFjayhXVEZNb3ZlKGVycm9yQ2FsbGJhY2spKQogewogfQogCiB2b2lkIEFzeW5jQXVkaW9EZWNv
ZGVyOjpEZWNvZGluZ1Rhc2s6OmRlY29kZSgpCiB7Ci0gICAgQVNTRVJUKG1fYXVkaW9EYXRhLmdl
dCgpKTsKLSAgICBpZiAoIW1fYXVkaW9EYXRhLmdldCgpKQotICAgICAgICByZXR1cm47Ci0KICAg
ICAvLyBEbyB0aGUgYWN0dWFsIGRlY29kaW5nIGFuZCBpbnZva2UgdGhlIGNhbGxiYWNrLgogICAg
IG1fYXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlRnJvbUF1ZGlvRmlsZURhdGEobV9h
dWRpb0RhdGEtPmRhdGEoKSwgbV9hdWRpb0RhdGEtPmJ5dGVMZW5ndGgoKSwgZmFsc2UsIHNhbXBs
ZVJhdGUoKSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0FzeW5jQXVkaW9EZWNvZGVyLmgKaW5kZXggODczMGQ5ZTA1NGZmZTRjMzZiMGU1MTAxZjEyNjdi
MjQ1NWU0YWZjMi4uMjNlN2ZjMjg4NDQ4ZDRjYTQ0M2FmZjgxMWFkOGI4NzhjZmExNzVlYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29k
ZXIuaApAQCAtNTEsMTcgKzUxLDE3IEBAIHB1YmxpYzoKICAgICB+QXN5bmNBdWRpb0RlY29kZXIo
KTsKIAogICAgIC8vIE11c3QgYmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICB2b2lk
IGRlY29kZUFzeW5jKEpTQzo6QXJyYXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0
ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7CisgICAgdm9pZCBkZWNv
ZGVBc3luYyhSZWY8SlNDOjpBcnJheUJ1ZmZlcj4mJiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJh
dGUsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFjaywgUmVmUHRy
PEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjayk7CiAKIHByaXZhdGU6CiAgICAg
Y2xhc3MgRGVjb2RpbmdUYXNrIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVjb2Rp
bmdUYXNrKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIERlY29kaW5nVGFzayhKU0M6OkFycmF5QnVm
ZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2spOworICAgICAgICBEZWNvZGluZ1Rhc2soUmVmPEpTQzo6QXJyYXlCdWZm
ZXI+JiYgYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxs
YmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ssIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIGVy
cm9yQ2FsbGJhY2spOwogICAgICAgICB2b2lkIGRlY29kZSgpOwogICAgICAgICAKICAgICBwcml2
YXRlOgotICAgICAgICBKU0M6OkFycmF5QnVmZmVyKiBhdWRpb0RhdGEoKSB7IHJldHVybiBtX2F1
ZGlvRGF0YS5nZXQoKTsgfQorICAgICAgICBKU0M6OkFycmF5QnVmZmVyJiBhdWRpb0RhdGEoKSB7
IHJldHVybiBtX2F1ZGlvRGF0YTsgfQogICAgICAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAgICAgICAgIEF1ZGlvQnVmZmVyQ2FsbGJhY2sqIHN1
Y2Nlc3NDYWxsYmFjaygpIHsgcmV0dXJuIG1fc3VjY2Vzc0NhbGxiYWNrLmdldCgpOyB9CiAgICAg
ICAgIEF1ZGlvQnVmZmVyQ2FsbGJhY2sqIGVycm9yQ2FsbGJhY2soKSB7IHJldHVybiBtX2Vycm9y
Q2FsbGJhY2suZ2V0KCk7IH0KQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICB2
b2lkIG5vdGlmeUNvbXBsZXRlKCk7CiAKLSAgICAgICAgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+
IG1fYXVkaW9EYXRhOworICAgICAgICBSZWY8SlNDOjpBcnJheUJ1ZmZlcj4gbV9hdWRpb0RhdGE7
CiAgICAgICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKICAgICAgICAgUmVmUHRyPEF1ZGlvQnVmZmVy
Q2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOwogICAgICAgICBSZWZQdHI8QXVkaW9CdWZmZXJD
YWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCmluZGV4IGE3ZmU2MTM0NmVmYzYyMDAxNmFlZTI5ZTBi
M2I1ZjMzZmVjZTBmZDYuLjVkZTdmNWQ4OGE3MjAzNDFkNWFjMzYxMGVhNzIxY2JjNzEwMDc5ZjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5j
cHAKQEAgLTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
MTIsNyArMjEzLDcgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKICAgICBp
ZiAobV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X2Rlc3RpbmF0aW9uTm9kZS5nZXQoKSkgeworICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZSkgewog
ICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+aW5pdGlhbGl6ZSgpOwogCiAgICAgICAgIGlmICgh
aXNPZmZsaW5lQ29udGV4dCgpKSB7CkBAIC0zNzcsMTAgKzM3OCwxMCBAQCBjb25zdCBEb2N1bWVu
dCogQXVkaW9Db250ZXh0Ojpob3N0aW5nRG9jdW1lbnQoKSBjb25zdAogICAgIHJldHVybiBkb3du
Y2FzdDxEb2N1bWVudD4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIH0KIAotUGFzc1JlZlB0
cjxBdWRpb0J1ZmZlcj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVy
T2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBFeGNl
cHRpb25Db2RlJiBlYykKK1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9Db250ZXh0OjpjcmVhdGVC
dWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBm
bG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8QXVkaW9C
dWZmZXI+IGF1ZGlvQnVmZmVyID0gQXVkaW9CdWZmZXI6OmNyZWF0ZShudW1iZXJPZkNoYW5uZWxz
LCBudW1iZXJPZkZyYW1lcywgc2FtcGxlUmF0ZSk7Ci0gICAgaWYgKCFhdWRpb0J1ZmZlci5nZXQo
KSkgeworICAgIGlmICghYXVkaW9CdWZmZXIpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVE
X0VSUjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMzg4LDE2ICszODksMTAg
QEAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIodW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2kKICAgICByZXR1cm4gYXVkaW9CdWZmZXI7CiB9CiAK
LVBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKEFycmF5
QnVmZmVyKiBhcnJheUJ1ZmZlciwgYm9vbCBtaXhUb01vbm8sIEV4Y2VwdGlvbkNvZGUmIGVjKQor
UmVmUHRyPEF1ZGlvQnVmZmVyPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZl
ciYgYXJyYXlCdWZmZXIsIGJvb2wgbWl4VG9Nb25vLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICBBU1NFUlQoYXJyYXlCdWZmZXIpOwotICAgIGlmICghYXJyYXlCdWZmZXIpIHsKLSAgICAgICAg
ZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8QXVkaW9CdWZmZXI+IGF1ZGlvQnVmZmVyID0gQXVkaW9CdWZmZXI6OmNyZWF0ZUZyb21B
dWRpb0ZpbGVEYXRhKGFycmF5QnVmZmVyLT5kYXRhKCksIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3Ro
KCksIG1peFRvTW9ubywgc2FtcGxlUmF0ZSgpKTsKLSAgICBpZiAoIWF1ZGlvQnVmZmVyLmdldCgp
KSB7CisgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBhdWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVyOjpj
cmVhdGVGcm9tQXVkaW9GaWxlRGF0YShhcnJheUJ1ZmZlci5kYXRhKCksIGFycmF5QnVmZmVyLmJ5
dGVMZW5ndGgoKSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlKCkpOworICAgIGlmICghYXVkaW9CdWZm
ZXIpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CkBAIC00MDUsNjcgKzQwMCw1MSBAQCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBBdWRp
b0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIsIGJvbwogICAg
IHJldHVybiBhdWRpb0J1ZmZlcjsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6OmRlY29kZUF1ZGlv
RGF0YShBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJv
ckNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQXVkaW9Db250ZXh0OjpkZWNvZGVB
dWRpb0RhdGEoUmVmPEFycmF5QnVmZmVyPiYmIGF1ZGlvRGF0YSwgUmVmUHRyPEF1ZGlvQnVmZmVy
Q2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4m
JiBlcnJvckNhbGxiYWNrKQogewotICAgIGlmICghYXVkaW9EYXRhKSB7Ci0gICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2F1ZGlvRGVjb2Rlci5k
ZWNvZGVBc3luYyhhdWRpb0RhdGEsIHNhbXBsZVJhdGUoKSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJv
ckNhbGxiYWNrKTsKKyAgICBtX2F1ZGlvRGVjb2Rlci5kZWNvZGVBc3luYyhXVEZNb3ZlKGF1ZGlv
RGF0YSksIHNhbXBsZVJhdGUoKSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGVy
cm9yQ2FsbGJhY2spKTsKIH0KIAotUGFzc1JlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IEF1
ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyU291cmNlKCkKK1JlZjxBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyU291cmNlKCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgUmVmUHRyPEF1ZGlvQnVm
ZmVyU291cmNlTm9kZT4gbm9kZSA9IEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6Y3JlYXRlKCp0aGlz
LCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKKyAgICBSZWY8QXVkaW9CdWZmZXJT
b3VyY2VOb2RlPiBub2RlID0gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUoKnRoaXMsIG1f
ZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwogCiAgICAgLy8gQmVjYXVzZSB0aGlzIGlz
IGFuIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZSwgdGhlIGNvbnRleHQga2VlcHMgYSByZWZlcmVu
Y2UgdW50aWwgaXQgaGFzIGZpbmlzaGVkIHBsYXlpbmcuCiAgICAgLy8gV2hlbiB0aGlzIGhhcHBl
bnMsIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6ZmluaXNoKCkgY2FsbHMgQXVkaW9Db250ZXh0
Ojpub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKCkuCi0gICAgcmVmTm9kZShub2RlLmdldCgp
KTsKKyAgICByZWZOb2RlKG5vZGUpOwogCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKICNpZiBFTkFC
TEUoVklERU8pCi1QYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gQXVkaW9D
b250ZXh0OjpjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFF
bGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50U291cmNlKEhUTUxNZWRpYUVs
ZW1lbnQmIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKG1l
ZGlhRWxlbWVudCk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgICAgICAK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAgICAg
CiAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhpcyBtZWRpYSBlbGVtZW50IGFscmVhZHkgaGFzIGEg
c291cmNlIG5vZGUuCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+YXVkaW9Tb3VyY2VOb2RlKCkpIHsK
KyAgICBpZiAobWVkaWFFbGVtZW50LmF1ZGlvU291cmNlTm9kZSgpKSB7CiAgICAgICAgIGVjID0g
SU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAg
ICAgCi0gICAgUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gbm9kZSA9IE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZTo6Y3JlYXRlKCp0aGlzLCBtZWRpYUVsZW1lbnQpOworICAg
IFJlZjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IG5vZGUgPSBNZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGU6OmNyZWF0ZSgqdGhpcywgbWVkaWFFbGVtZW50KTsKIAotICAgIG1lZGlhRWxl
bWVudC0+c2V0QXVkaW9Tb3VyY2VOb2RlKG5vZGUuZ2V0KCkpOworICAgIG1lZGlhRWxlbWVudC5z
ZXRBdWRpb1NvdXJjZU5vZGUobm9kZS5wdHIoKSk7CiAKICAgICByZWZOb2RlKG5vZGUuZ2V0KCkp
OyAvLyBjb250ZXh0IGtlZXBzIHJlZmVyZW5jZSB1bnRpbCBub2RlIGlzIGRpc2Nvbm5lY3RlZAot
ICAgIHJldHVybiBub2RlOworICAgIHJldHVybiBXVEZNb3ZlKG5vZGUpOwogfQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291
cmNlTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWRpYVN0cmVh
bSogbWVkaWFTdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPE1lZGlhU3RyZWFtQXVk
aW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKE1lZGlh
U3RyZWFtJiBtZWRpYVN0cmVhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAotICAgIEFTU0VSVChtZWRpYVN0cmVhbSk7Ci0gICAgaWYgKCFtZWRp
YVN0cmVhbSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvIGF1ZGlvVHJhY2tzID0gbWVkaWFTdHJlYW0t
PmdldEF1ZGlvVHJhY2tzKCk7CisgICAgYXV0byBhdWRpb1RyYWNrcyA9IG1lZGlhU3RyZWFtLmdl
dEF1ZGlvVHJhY2tzKCk7CiAgICAgaWYgKGF1ZGlvVHJhY2tzLmlzRW1wdHkoKSkgewogICAgICAg
ICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTQ4
NiwxNCArNDY1LDE0IEBAIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU+IEF1
ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UoTWVkCiAKICAgICBsYXp5SW5pdGlh
bGl6ZSgpOwogCi0gICAgYXV0byBub2RlID0gTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU6OmNy
ZWF0ZSgqdGhpcywgKm1lZGlhU3RyZWFtLCAqcHJvdmlkZXJUcmFjayk7CisgICAgYXV0byBub2Rl
ID0gTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU6OmNyZWF0ZSgqdGhpcywgbWVkaWFTdHJlYW0s
ICpwcm92aWRlclRyYWNrKTsKICAgICBub2RlLT5zZXRGb3JtYXQoMiwgc2FtcGxlUmF0ZSgpKTsK
IAotICAgIHJlZk5vZGUoJm5vZGUuZ2V0KCkpOyAvLyBjb250ZXh0IGtlZXBzIHJlZmVyZW5jZSB1
bnRpbCBub2RlIGlzIGRpc2Nvbm5lY3RlZAotICAgIHJldHVybiAmbm9kZS5nZXQoKTsKKyAgICBy
ZWZOb2RlKG5vZGUpOyAvLyBjb250ZXh0IGtlZXBzIHJlZmVyZW5jZSB1bnRpbCBub2RlIGlzIGRp
c2Nvbm5lY3RlZAorICAgIHJldHVybiBXVEZNb3ZlKG5vZGUpOwogfQogCi1QYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFT
dHJlYW1EZXN0aW5hdGlvbigpCitSZWY8TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCkKIHsKICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHdoaWNoIHNwZWNpZmll
cyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgogICAgIC8vIEZJWE1FOiBUaGUgZGVmYXVsdCBzaG91
bGQgcHJvYmFibHkgYmUgc3RlcmVvIGluc3RlYWQgb2YgbW9uby4KQEAgLTUwMiwxMTIgKzQ4MSwx
MTIgQEAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBBdWRpb0Nv
bnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGkKIAogI2VuZGlmCiAKLVBhc3NSZWZQdHI8U2Ny
aXB0UHJvY2Vzc29yTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6
ZV90IGJ1ZmZlclNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPFNjcmlwdFByb2Nlc3Nv
ck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJT
aXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBTZXQgbnVtYmVyIG9mIGlucHV0L291
dHB1dCBjaGFubmVscyB0byBzdGVyZW8gYnkgZGVmYXVsdC4KICAgICByZXR1cm4gY3JlYXRlU2Ny
aXB0UHJvY2Vzc29yKGJ1ZmZlclNpemUsIDIsIDIsIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxTY3Jp
cHRQcm9jZXNzb3JOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXpl
X3QgYnVmZmVyU2l6ZSwgc2l6ZV90IG51bWJlck9mSW5wdXRDaGFubmVscywgRXhjZXB0aW9uQ29k
ZSYgZWMpCitSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVT
Y3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCBudW1iZXJPZklucHV0Q2hh
bm5lbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIFNldCBudW1iZXIgb2Ygb3V0cHV0
IGNoYW5uZWxzIHRvIHN0ZXJlbyBieSBkZWZhdWx0LgogICAgIHJldHVybiBjcmVhdGVTY3JpcHRQ
cm9jZXNzb3IoYnVmZmVyU2l6ZSwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCAyLCBlYyk7CiB9CiAK
LVBhc3NSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVTY3Jp
cHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCBudW1iZXJPZklucHV0Q2hhbm5l
bHMsIHNpemVfdCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK1Jl
ZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVNjcmlwdFByb2Nl
c3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90IG51bWJlck9mSW5wdXRDaGFubmVscywgc2l6
ZV90IG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAgICBSZWZQdHI8
U2NyaXB0UHJvY2Vzc29yTm9kZT4gbm9kZSA9IFNjcmlwdFByb2Nlc3Nvck5vZGU6OmNyZWF0ZSgq
dGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwgYnVmZmVyU2l6ZSwgbnVtYmVy
T2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzKTsKIAotICAgIGlmICghbm9k
ZS5nZXQoKSkgeworICAgIGlmICghbm9kZSkgewogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJS
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICByZWZOb2RlKG5vZGUuZ2V0
KCkpOyAvLyBjb250ZXh0IGtlZXBzIHJlZmVyZW5jZSB1bnRpbCB3ZSBzdG9wIG1ha2luZyBqYXZh
c2NyaXB0IHJlbmRlcmluZyBjYWxsYmFja3MKKyAgICByZWZOb2RlKCpub2RlKTsgLy8gY29udGV4
dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgd2Ugc3RvcCBtYWtpbmcgamF2YXNjcmlwdCByZW5kZXJp
bmcgY2FsbGJhY2tzCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLVBhc3NSZWZQdHI8QmlxdWFkRmls
dGVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVCaXF1YWRGaWx0ZXIoKQorUmVmPEJpcXVhZEZp
bHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQmlxdWFkRmlsdGVyKCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAgICAgcmV0dXJuIEJp
cXVhZEZpbHRlck5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJh
dGUoKSk7CiB9CiAKLVBhc3NSZWZQdHI8V2F2ZVNoYXBlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3Jl
YXRlV2F2ZVNoYXBlcigpCitSZWY8V2F2ZVNoYXBlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
V2F2ZVNoYXBlcigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBsYXp5SW5p
dGlhbGl6ZSgpOwogICAgIHJldHVybiBXYXZlU2hhcGVyTm9kZTo6Y3JlYXRlKCp0aGlzKTsKIH0K
IAotUGFzc1JlZlB0cjxQYW5uZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVBhbm5lcigpCitS
ZWY8UGFubmVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVQYW5uZXIoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAgICByZXR1cm4gUGFu
bmVyTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsK
IH0KIAotUGFzc1JlZlB0cjxDb252b2x2ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNvbnZv
bHZlcigpCitSZWY8Q29udm9sdmVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVDb252b2x2ZXIo
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsK
ICAgICByZXR1cm4gQ29udm9sdmVyTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9k
ZS0+c2FtcGxlUmF0ZSgpKTsKIH0KIAotUGFzc1JlZlB0cjxEeW5hbWljc0NvbXByZXNzb3JOb2Rl
PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpCitSZWY8RHluYW1pY3ND
b21wcmVzc29yTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAg
ICByZXR1cm4gRHluYW1pY3NDb21wcmVzc29yTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0
aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKIH0KIAotUGFzc1JlZlB0cjxBbmFseXNlck5vZGU+IEF1
ZGlvQ29udGV4dDo6Y3JlYXRlQW5hbHlzZXIoKQorUmVmPEFuYWx5c2VyTm9kZT4gQXVkaW9Db250
ZXh0OjpjcmVhdGVBbmFseXNlcigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBsYXp5SW5pdGlhbGl6ZSgpOwogICAgIHJldHVybiBBbmFseXNlck5vZGU6OmNyZWF0ZSgqdGhp
cywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7CiB9CiAKLVBhc3NSZWZQdHI8R2Fp
bk5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlR2FpbigpCitSZWY8R2Fpbk5vZGU+IEF1ZGlvQ29u
dGV4dDo6Y3JlYXRlR2FpbigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBs
YXp5SW5pdGlhbGl6ZSgpOwogICAgIHJldHVybiBHYWluTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rl
c3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKIH0KIAotUGFzc1JlZlB0cjxEZWxheU5vZGU+
IEF1ZGlvQ29udGV4dDo6Y3JlYXRlRGVsYXkoRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8RGVs
YXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5KEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIGNvbnN0IGRvdWJsZSBkZWZhdWx0TWF4RGVsYXlUaW1lID0gMTsKICAgICByZXR1cm4gY3Jl
YXRlRGVsYXkoZGVmYXVsdE1heERlbGF5VGltZSwgZWMpOwogfQogCi1QYXNzUmVmUHRyPERlbGF5
Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVEZWxheShkb3VibGUgbWF4RGVsYXlUaW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKK1JlZlB0cjxEZWxheU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlRGVs
YXkoZG91YmxlIG1heERlbGF5VGltZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIFJlZlB0cjxEZWxh
eU5vZGU+IG5vZGUgPSBEZWxheU5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUt
PnNhbXBsZVJhdGUoKSwgbWF4RGVsYXlUaW1lLCBlYyk7CisgICAgUmVmPERlbGF5Tm9kZT4gbm9k
ZSA9IERlbGF5Tm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0
ZSgpLCBtYXhEZWxheVRpbWUsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBub2RlOworICAgIHJldHVybiBXVEZNb3ZlKG5vZGUpOwogfQogCi1Q
YXNzUmVmUHRyPENoYW5uZWxTcGxpdHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5l
bFNwbGl0dGVyKEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPENoYW5uZWxTcGxpdHRlck5vZGU+
IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIGNvbnN0IHVuc2lnbmVkIENoYW5uZWxTcGxpdHRlckRlZmF1bHROdW1iZXJPZk91dHB1
dHMgPSA2OwogICAgIHJldHVybiBjcmVhdGVDaGFubmVsU3BsaXR0ZXIoQ2hhbm5lbFNwbGl0dGVy
RGVmYXVsdE51bWJlck9mT3V0cHV0cywgZWMpOwogfQogCi1QYXNzUmVmUHRyPENoYW5uZWxTcGxp
dHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKHNpemVfdCBudW1i
ZXJPZk91dHB1dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPENoYW5uZWxTcGxpdHRlck5v
ZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKHNpemVfdCBudW1iZXJPZk91
dHB1dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgbGF6eUluaXRpYWxpemUoKTsKIAogICAgIFJlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2Rl
PiBub2RlID0gQ2hhbm5lbFNwbGl0dGVyTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9u
Tm9kZS0+c2FtcGxlUmF0ZSgpLCBudW1iZXJPZk91dHB1dHMpOwogCi0gICAgaWYgKCFub2RlLmdl
dCgpKSB7CisgICAgaWYgKCFub2RlKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTYxNSwyMCArNTk0LDIwIEBAIFBhc3NS
ZWZQdHI8Q2hhbm5lbFNwbGl0dGVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVDaGFubmVsU3Bs
aXR0ZXIoc2l6ZV90IG51bWJlCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLVBhc3NSZWZQdHI8Q2hh
bm5lbE1lcmdlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcihFeGNlcHRp
b25Db2RlJiBlYykKK1JlZlB0cjxDaGFubmVsTWVyZ2VyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVh
dGVDaGFubmVsTWVyZ2VyKEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGNvbnN0IHVuc2lnbmVk
IENoYW5uZWxNZXJnZXJEZWZhdWx0TnVtYmVyT2ZJbnB1dHMgPSA2OwogICAgIHJldHVybiBjcmVh
dGVDaGFubmVsTWVyZ2VyKENoYW5uZWxNZXJnZXJEZWZhdWx0TnVtYmVyT2ZJbnB1dHMsIGVjKTsK
IH0KIAotUGFzc1JlZlB0cjxDaGFubmVsTWVyZ2VyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVD
aGFubmVsTWVyZ2VyKHNpemVfdCBudW1iZXJPZklucHV0cywgRXhjZXB0aW9uQ29kZSYgZWMpCitS
ZWZQdHI8Q2hhbm5lbE1lcmdlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdl
cihzaXplX3QgbnVtYmVyT2ZJbnB1dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKIAogICAgIFJlZlB0cjxD
aGFubmVsTWVyZ2VyTm9kZT4gbm9kZSA9IENoYW5uZWxNZXJnZXJOb2RlOjpjcmVhdGUoKnRoaXMs
IG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCksIG51bWJlck9mSW5wdXRzKTsKIAotICAg
IGlmICghbm9kZS5nZXQoKSkgeworICAgIGlmICghbm9kZSkgewogICAgICAgICBlYyA9IElOREVY
X1NJWkVfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC02MzYsMjEgKzYx
NSwyMSBAQCBQYXNzUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZUNoYW5uZWxNZXJnZXIoc2l6ZV90IG51bWJlck9mSQogICAgIHJldHVybiBub2RlOwogfQogCi1Q
YXNzUmVmUHRyPE9zY2lsbGF0b3JOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU9zY2lsbGF0b3Io
KQorUmVmPE9zY2lsbGF0b3JOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU9zY2lsbGF0b3IoKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKIAot
ICAgIFJlZlB0cjxPc2NpbGxhdG9yTm9kZT4gbm9kZSA9IE9zY2lsbGF0b3JOb2RlOjpjcmVhdGUo
KnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOworICAgIFJlZjxPc2NpbGxh
dG9yTm9kZT4gbm9kZSA9IE9zY2lsbGF0b3JOb2RlOjpjcmVhdGUoKnRoaXMsIG1fZGVzdGluYXRp
b25Ob2RlLT5zYW1wbGVSYXRlKCkpOwogCiAgICAgLy8gQmVjYXVzZSB0aGlzIGlzIGFuIEF1ZGlv
U2NoZWR1bGVkU291cmNlTm9kZSwgdGhlIGNvbnRleHQga2VlcHMgYSByZWZlcmVuY2UgdW50aWwg
aXQgaGFzIGZpbmlzaGVkIHBsYXlpbmcuCiAgICAgLy8gV2hlbiB0aGlzIGhhcHBlbnMsIEF1ZGlv
U2NoZWR1bGVkU291cmNlTm9kZTo6ZmluaXNoKCkgY2FsbHMgQXVkaW9Db250ZXh0Ojpub3RpZnlO
b2RlRmluaXNoZWRQcm9jZXNzaW5nKCkuCi0gICAgcmVmTm9kZShub2RlLmdldCgpKTsKKyAgICBy
ZWZOb2RlKG5vZGUpOwogCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLVBhc3NSZWZQdHI8UGVyaW9k
aWNXYXZlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkqIHJl
YWwsIEZsb2F0MzJBcnJheSogaW1hZywgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8UGVyaW9k
aWNXYXZlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkqIHJl
YWwsIEZsb2F0MzJBcnJheSogaW1hZywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICAKQEAgLTY3NCwyOCArNjUzLDI4IEBAIHZvaWQgQXVkaW9D
b250ZXh0OjpkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKQogICAgIEFTU0VSVChpc0dyYXBoT3du
ZXIoKSk7CiAgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSB8fCBpc0F1ZGlvVGhyZWFkRmluaXNo
ZWQoKSk7CiAgICAgZm9yIChhdXRvJiBub2RlIDogbV9maW5pc2hlZE5vZGVzKQotICAgICAgICBk
ZXJlZk5vZGUobm9kZSk7CisgICAgICAgIGRlcmVmTm9kZSgqbm9kZSk7CiAKICAgICBtX2Zpbmlz
aGVkTm9kZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6OnJlZk5vZGUoQXVkaW9O
b2RlKiBub2RlKQordm9pZCBBdWRpb0NvbnRleHQ6OnJlZk5vZGUoQXVkaW9Ob2RlJiBub2RlKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQXV0b0xvY2tlciBsb2NrZXIoKnRo
aXMpOwogICAgIAotICAgIG5vZGUtPnJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsK
LSAgICBtX3JlZmVyZW5jZWROb2Rlcy5hcHBlbmQobm9kZSk7CisgICAgbm9kZS5yZWYoQXVkaW9O
b2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7CisgICAgbV9yZWZlcmVuY2VkTm9kZXMuYXBwZW5kKCZu
b2RlKTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVmTm9kZShBdWRpb05vZGUqIG5vZGUp
Cit2b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZOb2RlKEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBB
U1NFUlQoaXNHcmFwaE93bmVyKCkpOwogICAgIAotICAgIG5vZGUtPmRlcmVmKEF1ZGlvTm9kZTo6
UmVmVHlwZUNvbm5lY3Rpb24pOworICAgIG5vZGUuZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29u
bmVjdGlvbik7CiAKLSAgICBBU1NFUlQobV9yZWZlcmVuY2VkTm9kZXMuY29udGFpbnMobm9kZSkp
OwotICAgIG1fcmVmZXJlbmNlZE5vZGVzLnJlbW92ZUZpcnN0KG5vZGUpOworICAgIEFTU0VSVCht
X3JlZmVyZW5jZWROb2Rlcy5jb250YWlucygmbm9kZSkpOworICAgIG1fcmVmZXJlbmNlZE5vZGVz
LnJlbW92ZUZpcnN0KCZub2RlKTsKIH0KIAogdm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVmVW5maW5p
c2hlZFNvdXJjZU5vZGVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5oCmluZGV4IDhkNjFlNjEyZTllYzIyYWFhODdjMDI2ZWMwOTE3MzE2NmQ4Nzlj
YzcuLjgwMDQ1ZDgzOTU0ZTgyNjdjYWY4OTZjYTk1NGVjYWRlNWYzYTE0OWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaApAQCAtMSw1ICsxLDYg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM5LDYgQEAKICNp
bmNsdWRlIDxhdG9taWM+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CkBAIC0xMDEsMTEgKzEwMSwxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpbmNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpOwogICAgIHZvaWQgZGVjcmVtZW50QWN0
aXZlU291cmNlQ291bnQoKTsKICAgICAKLSAgICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVh
dGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVz
LCBmbG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxBdWRp
b0J1ZmZlcj4gY3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyKiwgYm9vbCBtaXhUb01vbm8sIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcih1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJh
dGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZl
cihBcnJheUJ1ZmZlciYsIGJvb2wgbWl4VG9Nb25vLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICAv
LyBBc3luY2hyb25vdXMgYXVkaW8gZmlsZSBkYXRhIGRlY29kaW5nLgotICAgIHZvaWQgZGVjb2Rl
QXVkaW9EYXRhKEFycmF5QnVmZmVyKiwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiwg
UGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAg
IHZvaWQgZGVjb2RlQXVkaW9EYXRhKFJlZjxBcnJheUJ1ZmZlcj4mJiwgUmVmUHRyPEF1ZGlvQnVm
ZmVyQ2FsbGJhY2s+JiYsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmKTsKIAogICAgIEF1
ZGlvTGlzdGVuZXIqIGxpc3RlbmVyKCkgeyByZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsgfQogCkBA
IC0xMjEsMzIgKzEyMSwzMiBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGF0
ZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlIEF1ZGlvTm9kZSBjcmVhdGUgbWV0aG9kcyBhcmUgY2Fs
bGVkIG9uIHRoZSBtYWluIHRocmVhZCAoZnJvbSBKYXZhU2NyaXB0KS4KLSAgICBQYXNzUmVmUHRy
PEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgUmVmPEF1
ZGlvQnVmZmVyU291cmNlTm9kZT4gY3JlYXRlQnVmZmVyU291cmNlKCk7CiAjaWYgRU5BQkxFKFZJ
REVPKQotICAgIFBhc3NSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGVN
ZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlhRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGVNZWRpYUVsZW1lbnRT
b3VyY2UoSFRNTE1lZGlhRWxlbWVudCYsIEV4Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCi0gICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNl
Tm9kZT4gY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UoTWVkaWFTdHJlYW0qLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVh
dGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtQXVkaW9T
b3VyY2VOb2RlPiBjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWRpYVN0cmVhbSYsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBSZWY8TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRl
TWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpOwogI2VuZGlmCi0gICAgUGFzc1JlZlB0cjxHYWluTm9k
ZT4gY3JlYXRlR2FpbigpOwotICAgIFBhc3NSZWZQdHI8QmlxdWFkRmlsdGVyTm9kZT4gY3JlYXRl
QmlxdWFkRmlsdGVyKCk7Ci0gICAgUGFzc1JlZlB0cjxXYXZlU2hhcGVyTm9kZT4gY3JlYXRlV2F2
ZVNoYXBlcigpOwotICAgIFBhc3NSZWZQdHI8RGVsYXlOb2RlPiBjcmVhdGVEZWxheShFeGNlcHRp
b25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxEZWxheU5vZGU+IGNyZWF0ZURlbGF5KGRvdWJsZSBt
YXhEZWxheVRpbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFBhbm5lck5vZGU+
IGNyZWF0ZVBhbm5lcigpOwotICAgIFBhc3NSZWZQdHI8Q29udm9sdmVyTm9kZT4gY3JlYXRlQ29u
dm9sdmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxEeW5hbWljc0NvbXByZXNzb3JOb2RlPiBjcmVhdGVE
eW5hbWljc0NvbXByZXNzb3IoKTsgICAgCi0gICAgUGFzc1JlZlB0cjxBbmFseXNlck5vZGU+IGNy
ZWF0ZUFuYWx5c2VyKCk7Ci0gICAgUGFzc1JlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBjcmVh
dGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBQYXNzUmVmUHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+IGNyZWF0ZVNjcmlwdFByb2Nlc3Nvcihz
aXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90IG51bWJlck9mSW5wdXRDaGFubmVscywgRXhjZXB0aW9u
Q29kZSYpOwotICAgIFBhc3NSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gY3JlYXRlU2NyaXB0
UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QgbnVtYmVyT2ZJbnB1dENoYW5uZWxz
LCBzaXplX3QgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBh
c3NSZWZQdHI8Q2hhbm5lbFNwbGl0dGVyTm9kZT4gY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPENoYW5uZWxTcGxpdHRlck5vZGU+IGNyZWF0ZUNo
YW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgUGFzc1JlZlB0cjxDaGFubmVsTWVyZ2VyTm9kZT4gY3JlYXRlQ2hhbm5lbE1lcmdlcihFeGNl
cHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxDaGFubmVsTWVyZ2VyTm9kZT4gY3JlYXRlQ2hh
bm5lbE1lcmdlcihzaXplX3QgbnVtYmVyT2ZJbnB1dHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPE9zY2lsbGF0b3JOb2RlPiBjcmVhdGVPc2NpbGxhdG9yKCk7Ci0gICAgUGFzc1Jl
ZlB0cjxQZXJpb2RpY1dhdmU+IGNyZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkqIHJlYWws
IEZsb2F0MzJBcnJheSogaW1hZywgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZjxHYWluTm9kZT4g
Y3JlYXRlR2FpbigpOworICAgIFJlZjxCaXF1YWRGaWx0ZXJOb2RlPiBjcmVhdGVCaXF1YWRGaWx0
ZXIoKTsKKyAgICBSZWY8V2F2ZVNoYXBlck5vZGU+IGNyZWF0ZVdhdmVTaGFwZXIoKTsKKyAgICBS
ZWZQdHI8RGVsYXlOb2RlPiBjcmVhdGVEZWxheShFeGNlcHRpb25Db2RlJik7CisgICAgUmVmUHRy
PERlbGF5Tm9kZT4gY3JlYXRlRGVsYXkoZG91YmxlIG1heERlbGF5VGltZSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIFJlZjxQYW5uZXJOb2RlPiBjcmVhdGVQYW5uZXIoKTsKKyAgICBSZWY8Q29udm9s
dmVyTm9kZT4gY3JlYXRlQ29udm9sdmVyKCk7CisgICAgUmVmPER5bmFtaWNzQ29tcHJlc3Nvck5v
ZGU+IGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpOworICAgIFJlZjxBbmFseXNlck5vZGU+IGNy
ZWF0ZUFuYWx5c2VyKCk7CisgICAgUmVmUHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+IGNyZWF0ZVNj
cmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJl
ZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1
ZmZlclNpemUsIHNpemVfdCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNp
emVfdCBidWZmZXJTaXplLCBzaXplX3QgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBzaXplX3QgbnVt
YmVyT2ZPdXRwdXRDaGFubmVscywgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxDaGFubmVs
U3BsaXR0ZXJOb2RlPiBjcmVhdGVDaGFubmVsU3BsaXR0ZXIoRXhjZXB0aW9uQ29kZSYpOworICAg
IFJlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBjcmVhdGVDaGFubmVsU3BsaXR0ZXIoc2l6ZV90
IG51bWJlck9mT3V0cHV0cywgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxDaGFubmVsTWVy
Z2VyTm9kZT4gY3JlYXRlQ2hhbm5lbE1lcmdlcihFeGNlcHRpb25Db2RlJik7CisgICAgUmVmUHRy
PENoYW5uZWxNZXJnZXJOb2RlPiBjcmVhdGVDaGFubmVsTWVyZ2VyKHNpemVfdCBudW1iZXJPZklu
cHV0cywgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZjxPc2NpbGxhdG9yTm9kZT4gY3JlYXRlT3Nj
aWxsYXRvcigpOworICAgIFJlZlB0cjxQZXJpb2RpY1dhdmU+IGNyZWF0ZVBlcmlvZGljV2F2ZShG
bG9hdDMyQXJyYXkqIHJlYWwsIEZsb2F0MzJBcnJheSogaW1hZywgRXhjZXB0aW9uQ29kZSYpOwog
CiAgICAgLy8gV2hlbiBhIHNvdXJjZSBub2RlIGhhcyBubyBtb3JlIHByb2Nlc3NpbmcgdG8gZG8g
KGhhcyBmaW5pc2hlZCBwbGF5aW5nKSwgdGhlbiBpdCB0ZWxscyB0aGUgY29udGV4dCB0byBkZXJl
ZmVyZW5jZSBpdC4KICAgICB2b2lkIG5vdGlmeU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcoQXVkaW9O
b2RlKik7CkBAIC0zMDMsOCArMzAzLDggQEAgcHJpdmF0ZToKICAgICAvLyBJbiB0dXJuLCB0aGVz
ZSBub2RlcyByZWZlcmVuY2UgYWxsIG5vZGVzIHRoZXkncmUgY29ubmVjdGVkIHRvLiAgQWxsIG5v
ZGVzIGFyZSB1bHRpbWF0ZWx5IGNvbm5lY3RlZCB0byB0aGUgQXVkaW9EZXN0aW5hdGlvbk5vZGUu
CiAgICAgLy8gV2hlbiB0aGUgY29udGV4dCBkZXJlZmVyZW5jZXMgYSBzb3VyY2Ugbm9kZSwgaXQg
d2lsbCBiZSBkZWFjdGl2YXRlZCBmcm9tIHRoZSByZW5kZXJpbmcgZ3JhcGggYWxvbmcgd2l0aCBh
bGwgb3RoZXIgbm9kZXMgaXQgaXMKICAgICAvLyB1bmlxdWVseSBjb25uZWN0ZWQgdG8uICBTZWUg
dGhlIEF1ZGlvTm9kZTo6cmVmKCkgYW5kIEF1ZGlvTm9kZTo6ZGVyZWYoKSBtZXRob2RzIGZvciBt
b3JlIGRldGFpbHMuCi0gICAgdm9pZCByZWZOb2RlKEF1ZGlvTm9kZSopOwotICAgIHZvaWQgZGVy
ZWZOb2RlKEF1ZGlvTm9kZSopOworICAgIHZvaWQgcmVmTm9kZShBdWRpb05vZGUmKTsKKyAgICB2
b2lkIGRlcmVmTm9kZShBdWRpb05vZGUmKTsKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEku
CiAgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKaW5kZXggNDUxZjQ4NWU2MWVlMjk2MGY5MThkZDBi
MDY5MjMzMDQ2NjFmZjcyOS4uOTRkNmI4ZjUyNWQ2MzNlNTQ2ODllNzNiY2M0MjgyNzIzMTAxMTU4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmlkbApAQCAtMzEsMTMgKzMxLDEyIEBAIGVudW0gQXVkaW9Db250ZXh0U3RhdGUgewogfTsKIAog
WwotICAgIEVuYWJsZWRCeVNldHRpbmc9V2ViQXVkaW8sCi0gICAgQ29uZGl0aW9uYWw9V0VCX0FV
RElPLAogICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCiAg
ICAgQ3VzdG9tQ29uc3RydWN0b3IsCi0gICAgVXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVP
YmplY3RBcmd1bWVudHMsCi0gICAgSW50ZXJmYWNlTmFtZT13ZWJraXRBdWRpb0NvbnRleHQsCisg
ICAgRW5hYmxlZEJ5U2V0dGluZz1XZWJBdWRpbywKICAgICBFeHBvcnRNYWNybz1XRUJDT1JFX0VY
UE9SVCwKKyAgICBJbnRlcmZhY2VOYW1lPXdlYmtpdEF1ZGlvQ29udGV4dCwKIF0gaW50ZXJmYWNl
IEF1ZGlvQ29udGV4dCA6IEV2ZW50VGFyZ2V0IHsKICAgICAvLyBBbGwgcmVuZGVyZWQgYXVkaW8g
dWx0aW1hdGVseSBjb25uZWN0cyB0byBkZXN0aW5hdGlvbiwgd2hpY2ggcmVwcmVzZW50cyB0aGUg
YXVkaW8gaGFyZHdhcmUuCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvRGVzdGluYXRpb25O
b2RlIGRlc3RpbmF0aW9uOwpAQCAtNjIsMjIgKzYxLDE5IEBAIGVudW0gQXVkaW9Db250ZXh0U3Rh
dGUgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGFjdGl2ZVNvdXJjZUNv
dW50OwogICAgIAogICAgIFtSYWlzZXNFeGNlcHRpb25dIEF1ZGlvQnVmZmVyIGNyZWF0ZUJ1ZmZl
cih1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhbm5lbHMsIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZG
cmFtZXMsIHVucmVzdHJpY3RlZCBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICBbUmFpc2VzRXhjZXB0
aW9uXSBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXI/IGJ1ZmZlciwgYm9vbGVh
biBtaXhUb01vbm8pOworICAgIFtSYWlzZXNFeGNlcHRpb25dIEF1ZGlvQnVmZmVyIGNyZWF0ZUJ1
ZmZlcihBcnJheUJ1ZmZlciBidWZmZXIsIGJvb2xlYW4gbWl4VG9Nb25vKTsKIAogICAgIC8vIEFz
eW5jaHJvbm91cyBhdWRpbyBmaWxlIGRhdGEgZGVjb2RpbmcuCi0gICAgW1JhaXNlc0V4Y2VwdGlv
bl0gdm9pZCBkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIgYXVkaW9EYXRhLCBBdWRpb0J1ZmZl
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgb3B0aW9uYWwgQXVkaW9CdWZmZXJDYWxsYmFjayBl
cnJvckNhbGxiYWNrKTsKKyAgICAvLyBGSVhNRTogc3VjY2Vzc0NhbGxiYWNrIHNob3VsZCBiZSBv
cHRpb25hbCBhbmQgdGhlIGNhbGxiYWNrcyBzaG91bGQgbm90IGJlIG51bGxhYmxlLiBUaGlzIHNo
b3VsZCBhbHNvIHJldHVybiBhIFByb21pc2UuCisgICAgdm9pZCBkZWNvZGVBdWRpb0RhdGEoQXJy
YXlCdWZmZXIgYXVkaW9EYXRhLCBBdWRpb0J1ZmZlckNhbGxiYWNrPyBzdWNjZXNzQ2FsbGJhY2ss
IG9wdGlvbmFsIEF1ZGlvQnVmZmVyQ2FsbGJhY2s/IGVycm9yQ2FsbGJhY2spOwogCiAgICAgLy8g
U291cmNlcwogICAgIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBjcmVhdGVCdWZmZXJTb3VyY2UoKTsK
IAotI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KLSAgICBbUmFpc2Vz
RXhjZXB0aW9uXSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUgY3JlYXRlTWVkaWFFbGVtZW50
U291cmNlKEhUTUxNZWRpYUVsZW1lbnQgbWVkaWFFbGVtZW50KTsKLSNlbmRpZgorICAgIFtDb25k
aXRpb25hbD1WSURFTywgUmFpc2VzRXhjZXB0aW9uXSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUgY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKEhUTUxNZWRpYUVsZW1lbnQgbWVkaWFFbGVtZW50
KTsKIAotI2lmIGRlZmluZWQoRU5BQkxFX01FRElBX1NUUkVBTSkgJiYgRU5BQkxFX01FRElBX1NU
UkVBTQotICAgIFtSYWlzZXNFeGNlcHRpb25dIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlIGNy
ZWF0ZU1lZGlhU3RyZWFtU291cmNlKE1lZGlhU3RyZWFtIG1lZGlhU3RyZWFtKTsKLSAgICBNZWRp
YVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlIGNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24o
KTsKLSNlbmRpZgorICAgIFtDb25kaXRpb25hbD1NRURJQV9TVFJFQU0sIFJhaXNlc0V4Y2VwdGlv
bl0gTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUgY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UoTWVk
aWFTdHJlYW0gbWVkaWFTdHJlYW0pOworICAgIFtDb25kaXRpb25hbD1NRURJQV9TVFJFQU1dIE1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUgY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlv
bigpOwogCiAgICAgLy8gUHJvY2Vzc2luZyBub2RlcwogICAgIEdhaW5Ob2RlIGNyZWF0ZUdhaW4o
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAppbmRleCAwMTM5MWZkM2MzNmI4NzY0NjFh
NWNlN2ZjNGY2YzNiZTFlMDJkMDk3Li43N2M3ZmJjY2ZkM2VkZDdlOWE5NGRhZmYxNjMxZDFhZDky
M2U1OTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCkBAIC00MCwxMiArNDAsMTIg
QEAgY29uc3QgdW5zaWduZWQgbWF4U2FtcGxlUmF0ZSA9IDE5MjAwMDsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1SZWY8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQmIGNvbnRleHQsIEhUTUxNZWRpYUVs
ZW1lbnQqIG1lZGlhRWxlbWVudCkKK1JlZjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6Y3JlYXRlKEF1ZGlvQ29udGV4dCYgY29udGV4dCwg
SFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQogewogICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZShjb250ZXh0LCBtZWRpYUVsZW1lbnQpKTsK
IH0KIAotTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGUoQXVkaW9Db250ZXh0JiBjb250ZXh0LCBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQpCitNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZShBdWRpb0NvbnRleHQmIGNvbnRleHQsIEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVu
dCkKICAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBjb250ZXh0LnNhbXBsZVJhdGUoKSkKICAgICAs
IG1fbWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkKICAgICAsIG1fc291cmNlTnVtYmVyT2ZDaGFu
bmVscygwKQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlOjpwcm9jZXNzKHNpemVfdCBudW1iZXJPZkZyYW1lcykKIHsKICAgICBBdWRpb0J1cyogb3V0
cHV0QnVzID0gb3V0cHV0KDApLT5idXMoKTsKIAotICAgIGlmICghbWVkaWFFbGVtZW50KCkgfHwg
IW1fc291cmNlTnVtYmVyT2ZDaGFubmVscyB8fCAhbV9zb3VyY2VTYW1wbGVSYXRlKSB7CisgICAg
aWYgKCFtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMgfHwgIW1fc291cmNlU2FtcGxlUmF0ZSkgewog
ICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEx
OSw3ICsxMTksNyBAQCB2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2Vzcyhz
aXplX3QgbnVtYmVyT2ZGcmFtZXMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
QXVkaW9Tb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBtZWRpYUVsZW1lbnQoKS0+YXVkaW9Tb3Vy
Y2VQcm92aWRlcigpKSB7CisgICAgaWYgKEF1ZGlvU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0g
bWVkaWFFbGVtZW50KCkuYXVkaW9Tb3VyY2VQcm92aWRlcigpKSB7CiAgICAgICAgIGlmIChtX211
bHRpQ2hhbm5lbFJlc2FtcGxlci5nZXQoKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fc291cmNl
U2FtcGxlUmF0ZSAhPSBzYW1wbGVSYXRlKCkpOwogICAgICAgICAgICAgbV9tdWx0aUNoYW5uZWxS
ZXNhbXBsZXItPnByb2Nlc3MocHJvdmlkZXIsIG91dHB1dEJ1cywgbnVtYmVyT2ZGcmFtZXMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKaW5kZXggYzE4MDQyZmJjZTI5YjRkNmNlOWRkMTczODVk
NTA0OTE5MjQ1NmM3My4uMzViMGY2NTNjZmU3ZjgzM2U4OGU0MjEyMjA3NWI4MDIwZmU2ZGYyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCkBAIC00MSwxMSArNDEsMTEgQEAgY2xhc3MgQXVk
aW9Db250ZXh0OwogICAgIAogY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIDogcHVi
bGljIEF1ZGlvTm9kZSwgcHVibGljIEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGUoQXVk
aW9Db250ZXh0JiwgSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBSZWY8TWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0JiwgSFRNTE1lZGlhRWxlbWVu
dCYpOwogCiAgICAgdmlydHVhbCB+TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKCk7CiAKLSAg
ICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSB7IHJldHVybiBtX21lZGlhRWxlbWVu
dC5nZXQoKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBI
VE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQoKSB7IHJldHVybiBtX21lZGlhRWxlbWVudDsg
fQogCiAgICAgLy8gQXVkaW9Ob2RlCiAgICAgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpIG92ZXJyaWRlOwpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bmxv
Y2soKTsKIAogcHJpdmF0ZToKLSAgICBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9D
b250ZXh0JiwgSFRNTE1lZGlhRWxlbWVudCopOworICAgIE1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZShBdWRpb0NvbnRleHQmLCBIVE1MTWVkaWFFbGVtZW50Jik7CiAKICAgICBkb3VibGUgdGFp
bFRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CiAgICAgZG91YmxlIGxhdGVuY3lU
aW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQpAQCAtNjYsNyArNjYsNyBAQCBwcml2
YXRlOgogICAgIC8vIEFzIGFuIGF1ZGlvIHNvdXJjZSwgd2Ugd2lsbCBuZXZlciBwcm9wYWdhdGUg
c2lsZW5jZS4KICAgICBib29sIHByb3BhZ2F0ZXNTaWxlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KIAotICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxl
bWVudDsKKyAgICBSZWY8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7CiAgICAgTG9j
ayBtX3Byb2Nlc3NNdXRleDsKIAogICAgIHVuc2lnbmVkIG1fc291cmNlTnVtYmVyT2ZDaGFubmVs
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRv
ck5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9k
ZS5pZGwKaW5kZXggN2M2ZTE0NDhkNGNlNzQ0ZjNlZDk1NWU5MTcyZDcwMmQ3ZmJjNzNlYy4uOTQ3
ZjljZDQzYzNlNTZhMTlkYmM2ODAwZmU2N2ZiNjMyYWY3ZDhkNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5pZGwKQEAgLTI1LDcgKzI1
LDYgQEAKIC8vIE9zY2lsbGF0b3JOb2RlIGlzIGFuIGF1ZGlvIGdlbmVyYXRvciBvZiBwZXJpb2Rp
YyB3YXZlZm9ybXMuCiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgIFVzZVBvaW50
ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzLAogICAgIEpTR2VuZXJhdGVUb0pT
T2JqZWN0LAogXSBpbnRlcmZhY2UgT3NjaWxsYXRvck5vZGUgOiBBdWRpb05vZGUgewogCkBAIC01
NSw3ICs1NCw4IEBACiAgICAgW0NvbmRpdGlvbmFsPUxFR0FDWV9XRUJfQVVESU8sIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCBub3RlT24odW5yZXN0cmljdGVkIGRvdWJsZSB3aGVuKTsKICAgICBbQ29u
ZGl0aW9uYWw9TEVHQUNZX1dFQl9BVURJTywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIG5vdGVPZmYo
dW5yZXN0cmljdGVkIGRvdWJsZSB3aGVuKTsKIAotICAgIHZvaWQgc2V0UGVyaW9kaWNXYXZlKFBl
cmlvZGljV2F2ZSB3YXZlKTsKKyAgICAvLyBGSVhNRTogVGhlIHBhcmFtZXRlciBzaG91bGQgbm90
IGJlIG51bGxhYmxlLgorICAgIHZvaWQgc2V0UGVyaW9kaWNXYXZlKFBlcmlvZGljV2F2ZT8gd2F2
ZSk7CiAKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9uZW5kZWQ7CiB9OwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE5
NzgxMmM0M2JiNWJmMWRkOGZhYzIxNTI4NjJmNGFlYWM0ZmJkZmMuLjI1ZGFjYWUzN2Q1MzUwNjUx
MjM2ZjRlMzM4MjViYTE0NzAyYzk0ZjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0wNC0y
MCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIERyb3AgW1VzZVBv
aW50ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFdlYkF1ZGlvCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY3NzcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdCBj
b3ZlcmFnZSBmb3IgcGFzc2luZyBhIG51bGwgQXJyYXlCdWZmZXIgdG86CisgICAgICAgIEF1ZGlv
Q29udGV4dC5jcmVhdGVCdWZmZXIoQXVkaW9CdWZmZXIsIGJvb2wpCisKKyAgICAgICAgKiB3ZWJh
dWRpby9hdWRpb2J1ZmZlci1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViYXVkaW8vYXVkaW9i
dWZmZXIuaHRtbDoKKwogMjAxNi0wNC0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIEF1ZGlvQnVmZmVyU291cmNlTm9kZS5idWZmZXIgc2hvdWxkIGJlIG51bGxh
YmxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb2J1ZmZlci1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb2J1ZmZlci1leHBlY3RlZC50eHQKaW5k
ZXggZGJmYmJjNDNjZTdhNjRkNDNmM2VlNWQwMDY3NjkzOThkN2M1MDE1Yi4uYTk1ZTcwMmNjOGE2
ZDAzZWJhMWUyM2Y3MmRlMDI1NmEwZTE4ODY4NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vYXVkaW9idWZmZXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2F1ZGlvYnVmZmVyLWV4cGVjdGVkLnR4dApAQCAtMTIsNiArMTIsNyBAQCBQQVNTIGdldENoYW5u
ZWxEYXRhKDEpIHJldHVybnMgYSBGbG9hdDMyQXJyYXkgb2JqZWN0LgogUEFTUyBnZXRDaGFubmVs
RGF0YSgyKSByZXR1cm5zIGEgRmxvYXQzMkFycmF5IG9iamVjdC4KIFBBU1MgZ2V0Q2hhbm5lbERh
dGEoMykgcmV0dXJucyBhIEZsb2F0MzJBcnJheSBvYmplY3QuCiBQQVNTIEV4Y2VwdGlvbiBoYXMg
YmVlbiB0aHJvd24gY29ycmVjdGx5IHdoZW4gaW5kZXggaXMgbm90IGxlc3MgdGhhbiBudW1iZXJP
ZkNoYW5uZWxzLgorUEFTUyBjb250ZXh0LmNyZWF0ZUJ1ZmZlcihudWxsLCBmYWxzZSkgdGhyZXcg
ZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYXVkaW9idWZmZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVmZmVyLmh0
bWwKaW5kZXggYjNiNGQxYTI4NTZiZGQzYzM3MTNkNmRlZTdiZTE0ZDEyNWRhZmU4NC4uYjcwNWZl
MjQ1ZDY0NzQ4YjE3ODlmZWE2OTY3MjU4MTgxOTM5ZjRkNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vYXVkaW9idWZmZXIuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9h
dWRpb2J1ZmZlci5odG1sCkBAIC00OSw2ICs0OSw4IEBAIHRyeSB7CiAgICAgdGVzdFBhc3NlZCgi
RXhjZXB0aW9uIGhhcyBiZWVuIHRocm93biBjb3JyZWN0bHkgd2hlbiBpbmRleCBpcyBub3QgbGVz
cyB0aGFuIG51bWJlck9mQ2hhbm5lbHMuIik7CiB9CiAKK3Nob3VsZFRocm93KCJjb250ZXh0LmNy
ZWF0ZUJ1ZmZlcihudWxsLCBmYWxzZSkiLCAiJ1R5cGVFcnJvcjogVHlwZSBlcnJvciciKTsKKwog
PC9zY3JpcHQ+CiAKIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276829</attachid>
            <date>2016-04-20 09:37:56 -0700</date>
            <delta_ts>2016-04-20 10:27:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156777-20160420093817.patch</filename>
            <type>text/plain</type>
            <size>42546</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5NzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNhM2I5ZmVlNDMxZTcw
MDRjMjNlYjYxNzkxMDU4MTNmNzU2NmUxZC4uZjYzNzJkOGY1ZTJiMThhMTcwYTQ5ZDRlODQxNWQy
YmRkYjdhYTM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYyIEBACiAyMDE2LTA0LTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgRHJvcCBbVXNlUG9pbnRlcnNF
dmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHNdIGZyb20gV2ViQXVkaW8KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Njc3NworCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIERyb3AgW1VzZVBvaW50ZXJzRXZl
bkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFdlYkF1ZGlvIGFuZAorICAgICAg
ICBtb2Rlcm5pemUgdGhlIGludGVyZmFjZSBhIGJpdC4KKworICAgICAgICBUaGVyZSBpcyBubyBt
YWpvciBXZWItZXhwb3NlZCBiZWhhdmlvcmFsIGNoYW5nZSBleGNlcHQgZm9yCisgICAgICAgIHRo
ZSBleGNlcHRpb24gdHlwZSB0aHJvd24gd2hlbiBwYXNzaW5nIG51bGwgKG5vdyBhbHdheXMgVHlw
ZUVycm9yKS4KKyAgICAgICAgVGVzdHMgd2VyZSB1cGRhdGVkIHRvIGFkZCBjb3ZlcmFnZSBmb3Ig
dGhpcy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OmRlY29kZUFzeW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6OkRlY29kaW5n
VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNr
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRp
b0RlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGlu
Z1Rhc2s6OmF1ZGlvRGF0YSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpsYXp5SW5pdGlhbGl6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmRlY29kZUF1ZGlvRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZVNjcmlwdFByb2Nlc3Nvcik6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZUJpcXVhZEZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZVdhdmVTaGFwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Db250ZXh0OjpjcmVhdGVQYW5uZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9Db250ZXh0OjpjcmVhdGVDb252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250
ZXh0OjpjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9D
b250ZXh0OjpjcmVhdGVBbmFseXNlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6
OmNyZWF0ZUdhaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpjcmVhdGVEZWxh
eSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxTcGxpdHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxNZXJnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpjcmVhdGVPc2NpbGxhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlUGVyaW9kaWNXYXZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6ZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6cmVmTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0NvbnRleHQ6OmRlcmVmTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6Om5vdGlmeU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Db250ZXh0OjpkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2Rlcyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmxvY2spOiBEZWxldGVkLgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2Vzcyk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6bWVkaWFFbGVtZW50
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmlkbDoKKworMjAx
Ni0wNC0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIEF1ZGlv
QnVmZmVyU291cmNlTm9kZS5idWZmZXIgc2hvdWxkIGJlIG51bGxhYmxlCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY3NjkKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcAppbmRl
eCA2ZDcyODFmOTNlODJkMjc0YjAyYzA5Yzg4NWQ3OThhNDVkNDZjOTUzLi4yOTJmMDViOGNkNTA2
ZTIyOWFlNmI4YmQ4NjI5YzA5NTRkMTg0NTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcApAQCAtNTEsMTQgKzUxLDEx
IEBAIEFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIoKQogICAgIG1fdGhyZWFk
SUQgPSAwOwogfQogCi12b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpkZWNvZGVBc3luYyhBcnJheUJ1
ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVy
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrKQordm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6ZGVjb2RlQXN5bmMoUmVm
PEFycmF5QnVmZmVyPiYmIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUmVmUHRyPEF1ZGlv
QnVmZmVyQ2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxs
YmFjaz4mJiBlcnJvckNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgQVNTRVJUKGF1ZGlvRGF0YSk7Ci0gICAgaWYgKCFhdWRpb0RhdGEpCi0gICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gZGVjb2RpbmdUYXNrID0gc3RkOjptYWtlX3VuaXF1ZTxEZWNvZGluZ1Rh
c2s+KGF1ZGlvRGF0YSwgc2FtcGxlUmF0ZSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNr
KTsKKyAgICBhdXRvIGRlY29kaW5nVGFzayA9IHN0ZDo6bWFrZV91bmlxdWU8RGVjb2RpbmdUYXNr
PihXVEZNb3ZlKGF1ZGlvRGF0YSksIHNhbXBsZVJhdGUsIFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNr
KSwgV1RGTW92ZShlcnJvckNhbGxiYWNrKSk7CiAgICAgbV9xdWV1ZS5hcHBlbmQoV1RGTW92ZShk
ZWNvZGluZ1Rhc2spKTsgLy8gbm90ZSB0aGF0IG93bmVyc2hpcCBvZiB0aGUgdGFzayBpcyBlZmZl
Y3RpdmVseSB0YWtlbiBieSB0aGUgcXVldWUuCiB9CiAKQEAgLTg3LDIwICs4NCwxNiBAQCB2b2lk
IEFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKCkKICAgICB9CiB9CiAKLUFzeW5jQXVkaW9EZWNv
ZGVyOjpEZWNvZGluZ1Rhc2s6OkRlY29kaW5nVGFzayhBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBm
bG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3ND
YWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQot
ICAgIDogbV9hdWRpb0RhdGEoYXVkaW9EYXRhKQorQXN5bmNBdWRpb0RlY29kZXI6OkRlY29kaW5n
VGFzazo6RGVjb2RpbmdUYXNrKFJlZjxBcnJheUJ1ZmZlcj4mJiBhdWRpb0RhdGEsIGZsb2F0IHNh
bXBsZVJhdGUsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFjaywg
UmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjaykKKyAgICA6IG1fYXVk
aW9EYXRhKFdURk1vdmUoYXVkaW9EYXRhKSkKICAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRl
KQotICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQotICAgICwgbV9lcnJv
ckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spCisgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhXVEZNb3Zl
KHN1Y2Nlc3NDYWxsYmFjaykpCisgICAgLCBtX2Vycm9yQ2FsbGJhY2soV1RGTW92ZShlcnJvckNh
bGxiYWNrKSkKIHsKIH0KIAogdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpk
ZWNvZGUoKQogewotICAgIEFTU0VSVChtX2F1ZGlvRGF0YS5nZXQoKSk7Ci0gICAgaWYgKCFtX2F1
ZGlvRGF0YS5nZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gRG8gdGhlIGFjdHVhbCBk
ZWNvZGluZyBhbmQgaW52b2tlIHRoZSBjYWxsYmFjay4KICAgICBtX2F1ZGlvQnVmZmVyID0gQXVk
aW9CdWZmZXI6OmNyZWF0ZUZyb21BdWRpb0ZpbGVEYXRhKG1fYXVkaW9EYXRhLT5kYXRhKCksIG1f
YXVkaW9EYXRhLT5ieXRlTGVuZ3RoKCksIGZhbHNlLCBzYW1wbGVSYXRlKCkpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rl
ci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5o
CmluZGV4IDg3MzBkOWUwNTRmZmU0YzM2YjBlNTEwMWYxMjY3YjI0NTVlNGFmYzIuLjIzZTdmYzI4
ODQ0OGQ0Y2E0NDNhZmY4MTFhZDhiODc4Y2ZhMTc1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKQEAgLTUxLDE3ICs1MSwx
NyBAQCBwdWJsaWM6CiAgICAgfkFzeW5jQXVkaW9EZWNvZGVyKCk7CiAKICAgICAvLyBNdXN0IGJl
IGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgdm9pZCBkZWNvZGVBc3luYyhKU0M6OkFy
cmF5QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVkaW9C
dWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2spOworICAgIHZvaWQgZGVjb2RlQXN5bmMoUmVmPEpTQzo6QXJy
YXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZm
ZXJDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ssIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNr
PiYmIGVycm9yQ2FsbGJhY2spOwogCiBwcml2YXRlOgogICAgIGNsYXNzIERlY29kaW5nVGFzayB7
CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlY29kaW5nVGFzayk7CiAgICAgcHVibGlj
OgotICAgICAgICBEZWNvZGluZ1Rhc2soSlNDOjpBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBmbG9h
dCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKTsKKyAg
ICAgICAgRGVjb2RpbmdUYXNrKFJlZjxKU0M6OkFycmF5QnVmZmVyPiYmIGF1ZGlvRGF0YSwgZmxv
YXQgc2FtcGxlUmF0ZSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxi
YWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBlcnJvckNhbGxiYWNrKTsKICAgICAg
ICAgdm9pZCBkZWNvZGUoKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNDOjpB
cnJheUJ1ZmZlciogYXVkaW9EYXRhKCkgeyByZXR1cm4gbV9hdWRpb0RhdGEuZ2V0KCk7IH0KKyAg
ICAgICAgSlNDOjpBcnJheUJ1ZmZlciYgYXVkaW9EYXRhKCkgeyByZXR1cm4gbV9hdWRpb0RhdGE7
IH0KICAgICAgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0
ZTsgfQogICAgICAgICBBdWRpb0J1ZmZlckNhbGxiYWNrKiBzdWNjZXNzQ2FsbGJhY2soKSB7IHJl
dHVybiBtX3N1Y2Nlc3NDYWxsYmFjay5nZXQoKTsgfQogICAgICAgICBBdWRpb0J1ZmZlckNhbGxi
YWNrKiBlcnJvckNhbGxiYWNrKCkgeyByZXR1cm4gbV9lcnJvckNhbGxiYWNrLmdldCgpOyB9CkBA
IC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgdm9pZCBub3RpZnlDb21wbGV0ZSgp
OwogCi0gICAgICAgIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiBtX2F1ZGlvRGF0YTsKKyAgICAg
ICAgUmVmPEpTQzo6QXJyYXlCdWZmZXI+IG1fYXVkaW9EYXRhOwogICAgICAgICBmbG9hdCBtX3Nh
bXBsZVJhdGU7CiAgICAgICAgIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBtX3N1Y2Nlc3ND
YWxsYmFjazsKICAgICAgICAgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IG1fZXJyb3JDYWxs
YmFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmNwcAppbmRleCBhN2ZlNjEzNDZlZmM2MjAwMTZhZWUyOWUwYjNiNWYzM2ZlY2UwZmQ2Li41ZGU3
ZjVkODhhNzIwMzQxZDVhYzM2MTBlYTcyMWNiYzcxMDA3OWY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCkBAIC0xLDUgKzEsNiBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEyLDcgKzIxMyw3IEBAIHZvaWQg
QXVkaW9Db250ZXh0OjpsYXp5SW5pdGlhbGl6ZSgpCiAgICAgaWYgKG1faXNBdWRpb1RocmVhZEZp
bmlzaGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9kZXN0aW5hdGlvbk5vZGUuZ2V0
KCkpIHsKKyAgICBpZiAobV9kZXN0aW5hdGlvbk5vZGUpIHsKICAgICAgICAgbV9kZXN0aW5hdGlv
bk5vZGUtPmluaXRpYWxpemUoKTsKIAogICAgICAgICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSkg
ewpAQCAtMzc3LDEwICszNzgsMTAgQEAgY29uc3QgRG9jdW1lbnQqIEF1ZGlvQ29udGV4dDo6aG9z
dGluZ0RvY3VtZW50KCkgY29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7CiB9CiAKLVBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IEF1ZGlv
Q29udGV4dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBu
dW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQ
dHI8QXVkaW9CdWZmZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJl
ck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBhdWRpb0J1ZmZlciA9
IEF1ZGlvQnVmZmVyOjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFtZXMsIHNh
bXBsZVJhdGUpOwotICAgIGlmICghYXVkaW9CdWZmZXIuZ2V0KCkpIHsKKyAgICBpZiAoIWF1ZGlv
QnVmZmVyKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KQEAgLTM4OCwxNiArMzg5LDEwIEBAIFBhc3NSZWZQdHI8QXVkaW9C
dWZmZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5l
bHMsIHNpCiAgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOwogfQogCi1QYXNzUmVmUHRyPEF1ZGlvQnVm
ZmVyPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIs
IGJvb2wgbWl4VG9Nb25vLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxBdWRpb0J1ZmZlcj4g
QXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXImIGFycmF5QnVmZmVyLCBib29s
IG1peFRvTW9ubywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKGFycmF5QnVmZmVy
KTsKLSAgICBpZiAoIWFycmF5QnVmZmVyKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBh
dWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShhcnJheUJ1
ZmZlci0+ZGF0YSgpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCBtaXhUb01vbm8sIHNhbXBs
ZVJhdGUoKSk7Ci0gICAgaWYgKCFhdWRpb0J1ZmZlci5nZXQoKSkgeworICAgIFJlZlB0cjxBdWRp
b0J1ZmZlcj4gYXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlRnJvbUF1ZGlvRmlsZURh
dGEoYXJyYXlCdWZmZXIuZGF0YSgpLCBhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKCksIG1peFRvTW9u
bywgc2FtcGxlUmF0ZSgpKTsKKyAgICBpZiAoIWF1ZGlvQnVmZmVyKSB7CiAgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNDA1LDY3ICs0
MDAsNTEgQEAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZm
ZXIoQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyLCBib28KICAgICByZXR1cm4gYXVkaW9CdWZmZXI7
CiB9CiAKLXZvaWQgQXVkaW9Db250ZXh0OjpkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIqIGF1
ZGlvRGF0YSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
IFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9u
Q29kZSYgZWMpCit2b2lkIEF1ZGlvQ29udGV4dDo6ZGVjb2RlQXVkaW9EYXRhKFJlZjxBcnJheUJ1
ZmZlcj4mJiBhdWRpb0RhdGEsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3ND
YWxsYmFjaywgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjaykKIHsK
LSAgICBpZiAoIWF1ZGlvRGF0YSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgbV9hdWRpb0RlY29kZXIuZGVjb2RlQXN5bmMoYXVkaW9EYXRh
LCBzYW1wbGVSYXRlKCksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CisgICAgbV9h
dWRpb0RlY29kZXIuZGVjb2RlQXN5bmMoV1RGTW92ZShhdWRpb0RhdGEpLCBzYW1wbGVSYXRlKCks
IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShlcnJvckNhbGxiYWNrKSk7CiB9CiAK
LVBhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1
ZmZlclNvdXJjZSgpCitSZWY8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNy
ZWF0ZUJ1ZmZlclNvdXJjZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBs
YXp5SW5pdGlhbGl6ZSgpOwotICAgIFJlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IG5vZGUg
PSBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUt
PnNhbXBsZVJhdGUoKSk7CisgICAgUmVmPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gbm9kZSA9IEF1
ZGlvQnVmZmVyU291cmNlTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2Ft
cGxlUmF0ZSgpKTsKIAogICAgIC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBBdWRpb1NjaGVkdWxlZFNv
dXJjZU5vZGUsIHRoZSBjb250ZXh0IGtlZXBzIGEgcmVmZXJlbmNlIHVudGlsIGl0IGhhcyBmaW5p
c2hlZCBwbGF5aW5nLgogICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBBdWRpb1NjaGVkdWxlZFNv
dXJjZU5vZGU6OmZpbmlzaCgpIGNhbGxzIEF1ZGlvQ29udGV4dDo6bm90aWZ5Tm9kZUZpbmlzaGVk
UHJvY2Vzc2luZygpLgotICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7CisgICAgcmVmTm9kZShub2Rl
KTsKIAogICAgIHJldHVybiBub2RlOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotUGFzc1JlZlB0
cjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFF
bGVtZW50U291cmNlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCitSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6
OmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtZWRpYUVsZW1lbnQpOwotICAgIGlm
ICghbWVkaWFFbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICAgICAgCiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogICAgIAogICAgIC8vIEZpcnN0IGNoZWNr
IGlmIHRoaXMgbWVkaWEgZWxlbWVudCBhbHJlYWR5IGhhcyBhIHNvdXJjZSBub2RlLgotICAgIGlm
IChtZWRpYUVsZW1lbnQtPmF1ZGlvU291cmNlTm9kZSgpKSB7CisgICAgaWYgKG1lZGlhRWxlbWVu
dC5hdWRpb1NvdXJjZU5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgICAgIAotICAgIFJlZlB0cjxNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IG5vZGUgPSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGU6OmNyZWF0ZSgqdGhpcywgbWVkaWFFbGVtZW50KTsKKyAgICBSZWY8TWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlPiBub2RlID0gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUo
KnRoaXMsIG1lZGlhRWxlbWVudCk7CiAKLSAgICBtZWRpYUVsZW1lbnQtPnNldEF1ZGlvU291cmNl
Tm9kZShub2RlLmdldCgpKTsKKyAgICBtZWRpYUVsZW1lbnQuc2V0QXVkaW9Tb3VyY2VOb2RlKG5v
ZGUucHRyKCkpOwogCiAgICAgcmVmTm9kZShub2RlLmdldCgpKTsgLy8gY29udGV4dCBrZWVwcyBy
ZWZlcmVuY2UgdW50aWwgbm9kZSBpcyBkaXNjb25uZWN0ZWQKLSAgICByZXR1cm4gbm9kZTsKKyAg
ICByZXR1cm4gV1RGTW92ZShub2RlKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UoTWVkaWFTdHJlYW0qIG1lZGlhU3RyZWFtLCBFeGNl
cHRpb25Db2RlJiBlYykKK1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gQXVkaW9D
b250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWRpYVN0cmVhbSYgbWVkaWFTdHJlYW0s
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAg
ICBBU1NFUlQobWVkaWFTdHJlYW0pOwotICAgIGlmICghbWVkaWFTdHJlYW0pIHsKLSAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgYXV0byBhdWRpb1RyYWNrcyA9IG1lZGlhU3RyZWFtLT5nZXRBdWRpb1RyYWNrcygpOwor
ICAgIGF1dG8gYXVkaW9UcmFja3MgPSBtZWRpYVN0cmVhbS5nZXRBdWRpb1RyYWNrcygpOwogICAg
IGlmIChhdWRpb1RyYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC00ODYsMTQgKzQ2NSwxNCBAQCBQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1l
ZGlhU3RyZWFtU291cmNlKE1lZAogCiAgICAgbGF6eUluaXRpYWxpemUoKTsKIAotICAgIGF1dG8g
bm9kZSA9IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUoKnRoaXMsICptZWRpYVN0
cmVhbSwgKnByb3ZpZGVyVHJhY2spOworICAgIGF1dG8gbm9kZSA9IE1lZGlhU3RyZWFtQXVkaW9T
b3VyY2VOb2RlOjpjcmVhdGUoKnRoaXMsIG1lZGlhU3RyZWFtLCAqcHJvdmlkZXJUcmFjayk7CiAg
ICAgbm9kZS0+c2V0Rm9ybWF0KDIsIHNhbXBsZVJhdGUoKSk7CiAKLSAgICByZWZOb2RlKCZub2Rl
LmdldCgpKTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgbm9kZSBpcyBkaXNjb25u
ZWN0ZWQKLSAgICByZXR1cm4gJm5vZGUuZ2V0KCk7CisgICAgcmVmTm9kZShub2RlKTsgLy8gY29u
dGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgbm9kZSBpcyBkaXNjb25uZWN0ZWQKKyAgICByZXR1
cm4gV1RGTW92ZShub2RlKTsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGlu
YXRpb25Ob2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKQor
UmVmPE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
TWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpCiB7CiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBhbiBvcHRpb25hbCBhcmd1bWVudCB3aGljaCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjaGFu
bmVscy4KICAgICAvLyBGSVhNRTogVGhlIGRlZmF1bHQgc2hvdWxkIHByb2JhYmx5IGJlIHN0ZXJl
byBpbnN0ZWFkIG9mIG1vbm8uCkBAIC01MDIsMTEyICs0ODEsMTEyIEBAIFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0
cmVhbURlc3RpCiAKICNlbmRpZgogCi1QYXNzUmVmUHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+IEF1
ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKK1JlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBBdWRpb0NvbnRleHQ6
OmNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgLy8gU2V0IG51bWJlciBvZiBpbnB1dC9vdXRwdXQgY2hhbm5lbHMgdG8gc3Rl
cmVvIGJ5IGRlZmF1bHQuCiAgICAgcmV0dXJuIGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihidWZmZXJT
aXplLCAyLCAyLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gQXVk
aW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVf
dCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPFNjcmlw
dFByb2Nlc3Nvck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVf
dCBidWZmZXJTaXplLCBzaXplX3QgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICAvLyBTZXQgbnVtYmVyIG9mIG91dHB1dCBjaGFubmVscyB0byBzdGVyZW8g
YnkgZGVmYXVsdC4KICAgICByZXR1cm4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKGJ1ZmZlclNpemUs
IG51bWJlck9mSW5wdXRDaGFubmVscywgMiwgZWMpOwogfQogCi1QYXNzUmVmUHRyPFNjcmlwdFBy
b2Nlc3Nvck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBi
dWZmZXJTaXplLCBzaXplX3QgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZP
dXRwdXRDaGFubmVscywgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8U2NyaXB0UHJvY2Vzc29y
Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNp
emUsIHNpemVfdCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZk91dHB1dENo
YW5uZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIGxhenlJbml0aWFsaXplKCk7CiAgICAgUmVmUHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+
IG5vZGUgPSBTY3JpcHRQcm9jZXNzb3JOb2RlOjpjcmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25O
b2RlLT5zYW1wbGVSYXRlKCksIGJ1ZmZlclNpemUsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVt
YmVyT2ZPdXRwdXRDaGFubmVscyk7CiAKLSAgICBpZiAoIW5vZGUuZ2V0KCkpIHsKKyAgICBpZiAo
IW5vZGUpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCi0gICAgcmVmTm9kZShub2RlLmdldCgpKTsgLy8gY29udGV4dCBrZWVw
cyByZWZlcmVuY2UgdW50aWwgd2Ugc3RvcCBtYWtpbmcgamF2YXNjcmlwdCByZW5kZXJpbmcgY2Fs
bGJhY2tzCisgICAgcmVmTm9kZSgqbm9kZSk7IC8vIGNvbnRleHQga2VlcHMgcmVmZXJlbmNlIHVu
dGlsIHdlIHN0b3AgbWFraW5nIGphdmFzY3JpcHQgcmVuZGVyaW5nIGNhbGxiYWNrcwogICAgIHJl
dHVybiBub2RlOwogfQogCi1QYXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlQmlxdWFkRmlsdGVyKCkKK1JlZjxCaXF1YWRGaWx0ZXJOb2RlPiBBdWRpb0NvbnRl
eHQ6OmNyZWF0ZUJpcXVhZEZpbHRlcigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogICAgIHJldHVybiBCaXF1YWRGaWx0ZXJOb2RlOjpjcmVh
dGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwogfQogCi1QYXNzUmVm
UHRyPFdhdmVTaGFwZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVdhdmVTaGFwZXIoKQorUmVm
PFdhdmVTaGFwZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVdhdmVTaGFwZXIoKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAgICByZXR1
cm4gV2F2ZVNoYXBlck5vZGU6OmNyZWF0ZSgqdGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8UGFubmVy
Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVQYW5uZXIoKQorUmVmPFBhbm5lck5vZGU+IEF1ZGlv
Q29udGV4dDo6Y3JlYXRlUGFubmVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIGxhenlJbml0aWFsaXplKCk7CiAgICAgcmV0dXJuIFBhbm5lck5vZGU6OmNyZWF0ZSgqdGhp
cywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7CiB9CiAKLVBhc3NSZWZQdHI8Q29u
dm9sdmVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVDb252b2x2ZXIoKQorUmVmPENvbnZvbHZl
ck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ29udm9sdmVyKCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAgICAgcmV0dXJuIENvbnZvbHZl
ck5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7CiB9
CiAKLVBhc3NSZWZQdHI8RHluYW1pY3NDb21wcmVzc29yTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVh
dGVEeW5hbWljc0NvbXByZXNzb3IoKQorUmVmPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+IEF1ZGlv
Q29udGV4dDo6Y3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAgICAgcmV0dXJuIER5bmFtaWNzQ29t
cHJlc3Nvck5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUo
KSk7CiB9CiAKLVBhc3NSZWZQdHI8QW5hbHlzZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUFu
YWx5c2VyKCkKK1JlZjxBbmFseXNlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQW5hbHlzZXIo
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsK
ICAgICByZXR1cm4gQW5hbHlzZXJOb2RlOjpjcmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2Rl
LT5zYW1wbGVSYXRlKCkpOwogfQogCi1QYXNzUmVmUHRyPEdhaW5Ob2RlPiBBdWRpb0NvbnRleHQ6
OmNyZWF0ZUdhaW4oKQorUmVmPEdhaW5Ob2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUdhaW4oKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAg
ICByZXR1cm4gR2Fpbk5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBs
ZVJhdGUoKSk7CiB9CiAKLVBhc3NSZWZQdHI8RGVsYXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZURlbGF5KEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPERlbGF5Tm9kZT4gQXVkaW9Db250ZXh0
OjpjcmVhdGVEZWxheShFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBjb25zdCBkb3VibGUgZGVm
YXVsdE1heERlbGF5VGltZSA9IDE7CiAgICAgcmV0dXJuIGNyZWF0ZURlbGF5KGRlZmF1bHRNYXhE
ZWxheVRpbWUsIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxEZWxheU5vZGU+IEF1ZGlvQ29udGV4dDo6
Y3JlYXRlRGVsYXkoZG91YmxlIG1heERlbGF5VGltZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQ
dHI8RGVsYXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5KGRvdWJsZSBtYXhEZWxheVRp
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICBSZWZQdHI8RGVsYXlOb2RlPiBub2RlID0gRGVsYXlO
b2RlOjpjcmVhdGUoKnRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCksIG1heERl
bGF5VGltZSwgZWMpOworICAgIFJlZjxEZWxheU5vZGU+IG5vZGUgPSBEZWxheU5vZGU6OmNyZWF0
ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwgbWF4RGVsYXlUaW1lLCBl
Yyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gbm9k
ZTsKKyAgICByZXR1cm4gV1RGTW92ZShub2RlKTsKIH0KIAotUGFzc1JlZlB0cjxDaGFubmVsU3Bs
aXR0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxTcGxpdHRlcihFeGNlcHRpb25D
b2RlJiBlYykKK1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZUNoYW5uZWxTcGxpdHRlcihFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBjb25zdCB1bnNpZ25l
ZCBDaGFubmVsU3BsaXR0ZXJEZWZhdWx0TnVtYmVyT2ZPdXRwdXRzID0gNjsKICAgICByZXR1cm4g
Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKENoYW5uZWxTcGxpdHRlckRlZmF1bHROdW1iZXJPZk91dHB1
dHMsIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBBdWRpb0NvbnRl
eHQ6OmNyZWF0ZUNoYW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzLCBFeGNlcHRp
b25Db2RlJiBlYykKK1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNy
ZWF0ZUNoYW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXpl
KCk7CiAKICAgICBSZWZQdHI8Q2hhbm5lbFNwbGl0dGVyTm9kZT4gbm9kZSA9IENoYW5uZWxTcGxp
dHRlck5vZGU6OmNyZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwg
bnVtYmVyT2ZPdXRwdXRzKTsKIAotICAgIGlmICghbm9kZS5nZXQoKSkgeworICAgIGlmICghbm9k
ZSkgewogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CkBAIC02MTUsMjAgKzU5NCwyMCBAQCBQYXNzUmVmUHRyPENoYW5uZWxTcGxpdHRl
ck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKHNpemVfdCBudW1iZQog
ICAgIHJldHVybiBub2RlOwogfQogCi1QYXNzUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBBdWRp
b0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxNZXJnZXIoRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8
Q2hhbm5lbE1lcmdlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcihFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBjb25zdCB1bnNpZ25lZCBDaGFubmVsTWVyZ2VyRGVmYXVs
dE51bWJlck9mSW5wdXRzID0gNjsKICAgICByZXR1cm4gY3JlYXRlQ2hhbm5lbE1lcmdlcihDaGFu
bmVsTWVyZ2VyRGVmYXVsdE51bWJlck9mSW5wdXRzLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8Q2hh
bm5lbE1lcmdlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcihzaXplX3Qg
bnVtYmVyT2ZJbnB1dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPENoYW5uZWxNZXJnZXJO
b2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxNZXJnZXIoc2l6ZV90IG51bWJlck9mSW5w
dXRzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIGxhenlJbml0aWFsaXplKCk7CiAKICAgICBSZWZQdHI8Q2hhbm5lbE1lcmdlck5vZGU+IG5v
ZGUgPSBDaGFubmVsTWVyZ2VyTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+
c2FtcGxlUmF0ZSgpLCBudW1iZXJPZklucHV0cyk7CiAKLSAgICBpZiAoIW5vZGUuZ2V0KCkpIHsK
KyAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNjM2LDIxICs2MTUsMjEgQEAgUGFzc1JlZlB0cjxD
aGFubmVsTWVyZ2VyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVDaGFubmVsTWVyZ2VyKHNpemVf
dCBudW1iZXJPZkkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotUGFzc1JlZlB0cjxPc2NpbGxhdG9y
Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVPc2NpbGxhdG9yKCkKK1JlZjxPc2NpbGxhdG9yTm9k
ZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVPc2NpbGxhdG9yKCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CiAKLSAgICBSZWZQdHI8T3NjaWxsYXRv
ck5vZGU+IG5vZGUgPSBPc2NpbGxhdG9yTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9u
Tm9kZS0+c2FtcGxlUmF0ZSgpKTsKKyAgICBSZWY8T3NjaWxsYXRvck5vZGU+IG5vZGUgPSBPc2Np
bGxhdG9yTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgp
KTsKIAogICAgIC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUs
IHRoZSBjb250ZXh0IGtlZXBzIGEgcmVmZXJlbmNlIHVudGlsIGl0IGhhcyBmaW5pc2hlZCBwbGF5
aW5nLgogICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6
OmZpbmlzaCgpIGNhbGxzIEF1ZGlvQ29udGV4dDo6bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2lu
ZygpLgotICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7CisgICAgcmVmTm9kZShub2RlKTsKIAogICAg
IHJldHVybiBub2RlOwogfQogCi1QYXNzUmVmUHRyPFBlcmlvZGljV2F2ZT4gQXVkaW9Db250ZXh0
OjpjcmVhdGVQZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5KiByZWFsLCBGbG9hdDMyQXJyYXkqIGlt
YWcsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPFBlcmlvZGljV2F2ZT4gQXVkaW9Db250ZXh0
OjpjcmVhdGVQZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5KiByZWFsLCBGbG9hdDMyQXJyYXkqIGlt
YWcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgCkBAIC02NzQsMjggKzY1MywyOCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZGaW5pc2hl
ZFNvdXJjZU5vZGVzKCkKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogICAgIEFTU0VSVChp
c0F1ZGlvVGhyZWFkKCkgfHwgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpOwogICAgIGZvciAoYXV0
byYgbm9kZSA6IG1fZmluaXNoZWROb2RlcykKLSAgICAgICAgZGVyZWZOb2RlKG5vZGUpOworICAg
ICAgICBkZXJlZk5vZGUoKm5vZGUpOwogCiAgICAgbV9maW5pc2hlZE5vZGVzLmNsZWFyKCk7CiB9
CiAKLXZvaWQgQXVkaW9Db250ZXh0OjpyZWZOb2RlKEF1ZGlvTm9kZSogbm9kZSkKK3ZvaWQgQXVk
aW9Db250ZXh0OjpyZWZOb2RlKEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIEF1dG9Mb2NrZXIgbG9ja2VyKCp0aGlzKTsKICAgICAKLSAgICBub2Rl
LT5yZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0gICAgbV9yZWZlcmVuY2VkTm9k
ZXMuYXBwZW5kKG5vZGUpOworICAgIG5vZGUucmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rp
b24pOworICAgIG1fcmVmZXJlbmNlZE5vZGVzLmFwcGVuZCgmbm9kZSk7CiB9CiAKLXZvaWQgQXVk
aW9Db250ZXh0OjpkZXJlZk5vZGUoQXVkaW9Ob2RlKiBub2RlKQordm9pZCBBdWRpb0NvbnRleHQ6
OmRlcmVmTm9kZShBdWRpb05vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigp
KTsKICAgICAKLSAgICBub2RlLT5kZXJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsK
KyAgICBub2RlLmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwogCi0gICAgQVNT
RVJUKG1fcmVmZXJlbmNlZE5vZGVzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICBtX3JlZmVyZW5jZWRO
b2Rlcy5yZW1vdmVGaXJzdChub2RlKTsKKyAgICBBU1NFUlQobV9yZWZlcmVuY2VkTm9kZXMuY29u
dGFpbnMoJm5vZGUpKTsKKyAgICBtX3JlZmVyZW5jZWROb2Rlcy5yZW1vdmVGaXJzdCgmbm9kZSk7
CiB9CiAKIHZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAppbmRleCA4
ZDYxZTYxMmU5ZWMyMmFhYTg3YzAyNmVjMDkxNzMxNjZkODc5Y2M3Li44MDA0NWQ4Mzk1NGU4MjY3
Y2FmODk2Y2E5NTRlY2FkZTVmM2ExNDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKQEAgLTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSA8YXRvbWljPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgpAQCAtMTAxLDExICsxMDEsMTEgQEAgcHVibGljOgogICAgIHZvaWQgaW5jcmVtZW50QWN0aXZl
U291cmNlQ291bnQoKTsKICAgICB2b2lkIGRlY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCk7CiAg
ICAgCi0gICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51
bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZl
cihBcnJheUJ1ZmZlciosIGJvb2wgbWl4VG9Nb25vLCBFeGNlcHRpb25Db2RlJik7CisgICAgUmVm
UHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywg
c2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRpb25Db2RlJik7
CisgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXImLCBib29s
IG1peFRvTW9ubywgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgLy8gQXN5bmNocm9ub3VzIGF1ZGlv
IGZpbGUgZGF0YSBkZWNvZGluZy4KLSAgICB2b2lkIGRlY29kZUF1ZGlvRGF0YShBcnJheUJ1ZmZl
ciosIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4sIFBhc3NSZWZQdHI8QXVkaW9CdWZm
ZXJDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICB2b2lkIGRlY29kZUF1ZGlvRGF0
YShSZWY8QXJyYXlCdWZmZXI+JiYsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmLCBSZWZQ
dHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJik7CiAKICAgICBBdWRpb0xpc3RlbmVyKiBsaXN0ZW5l
cigpIHsgcmV0dXJuIG1fbGlzdGVuZXIuZ2V0KCk7IH0KIApAQCAtMTIxLDMyICsxMjEsMzIgQEAg
cHVibGljOgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RhdGUoKSBjb25zdDsKIAogICAgIC8v
IFRoZSBBdWRpb05vZGUgY3JlYXRlIG1ldGhvZHMgYXJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJl
YWQgKGZyb20gSmF2YVNjcmlwdCkuCi0gICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU+IGNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIFJlZjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+
IGNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwogI2lmIEVOQUJMRShWSURFTykKLSAgICBQYXNzUmVmUHRy
PE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKEhU
TUxNZWRpYUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUmVmUHRyPE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKEhUTUxNZWRpYUVsZW1l
bnQmLCBFeGNlcHRpb25Db2RlJik7CiAjZW5kaWYKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQot
ICAgIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU+IGNyZWF0ZU1lZGlhU3Ry
ZWFtU291cmNlKE1lZGlhU3RyZWFtKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5h
dGlvbigpOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gY3JlYXRlTWVk
aWFTdHJlYW1Tb3VyY2UoTWVkaWFTdHJlYW0mLCBFeGNlcHRpb25Db2RlJik7CisgICAgUmVmPE1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+IGNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRp
b24oKTsKICNlbmRpZgotICAgIFBhc3NSZWZQdHI8R2Fpbk5vZGU+IGNyZWF0ZUdhaW4oKTsKLSAg
ICBQYXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IGNyZWF0ZUJpcXVhZEZpbHRlcigpOwotICAg
IFBhc3NSZWZQdHI8V2F2ZVNoYXBlck5vZGU+IGNyZWF0ZVdhdmVTaGFwZXIoKTsKLSAgICBQYXNz
UmVmUHRyPERlbGF5Tm9kZT4gY3JlYXRlRGVsYXkoRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NS
ZWZQdHI8RGVsYXlOb2RlPiBjcmVhdGVEZWxheShkb3VibGUgbWF4RGVsYXlUaW1lLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxQYW5uZXJOb2RlPiBjcmVhdGVQYW5uZXIoKTsKLSAg
ICBQYXNzUmVmUHRyPENvbnZvbHZlck5vZGU+IGNyZWF0ZUNvbnZvbHZlcigpOwotICAgIFBhc3NS
ZWZQdHI8RHluYW1pY3NDb21wcmVzc29yTm9kZT4gY3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCk7
ICAgIAotICAgIFBhc3NSZWZQdHI8QW5hbHlzZXJOb2RlPiBjcmVhdGVBbmFseXNlcigpOwotICAg
IFBhc3NSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNp
emVfdCBidWZmZXJTaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxTY3JpcHRQ
cm9jZXNzb3JOb2RlPiBjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNp
emVfdCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVm
UHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+IGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVm
ZmVyU2l6ZSwgc2l6ZV90IG51bWJlck9mSW5wdXRDaGFubmVscywgc2l6ZV90IG51bWJlck9mT3V0
cHV0Q2hhbm5lbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPENoYW5uZWxTcGxp
dHRlck5vZGU+IGNyZWF0ZUNoYW5uZWxTcGxpdHRlcihFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFz
c1JlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBjcmVhdGVDaGFubmVsU3BsaXR0ZXIoc2l6ZV90
IG51bWJlck9mT3V0cHV0cywgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8Q2hhbm5l
bE1lcmdlck5vZGU+IGNyZWF0ZUNoYW5uZWxNZXJnZXIoRXhjZXB0aW9uQ29kZSYpOwotICAgIFBh
c3NSZWZQdHI8Q2hhbm5lbE1lcmdlck5vZGU+IGNyZWF0ZUNoYW5uZWxNZXJnZXIoc2l6ZV90IG51
bWJlck9mSW5wdXRzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxPc2NpbGxhdG9y
Tm9kZT4gY3JlYXRlT3NjaWxsYXRvcigpOwotICAgIFBhc3NSZWZQdHI8UGVyaW9kaWNXYXZlPiBj
cmVhdGVQZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5KiByZWFsLCBGbG9hdDMyQXJyYXkqIGltYWcs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWY8R2Fpbk5vZGU+IGNyZWF0ZUdhaW4oKTsKKyAgICBS
ZWY8QmlxdWFkRmlsdGVyTm9kZT4gY3JlYXRlQmlxdWFkRmlsdGVyKCk7CisgICAgUmVmPFdhdmVT
aGFwZXJOb2RlPiBjcmVhdGVXYXZlU2hhcGVyKCk7CisgICAgUmVmUHRyPERlbGF5Tm9kZT4gY3Jl
YXRlRGVsYXkoRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxEZWxheU5vZGU+IGNyZWF0ZURl
bGF5KGRvdWJsZSBtYXhEZWxheVRpbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWY8UGFubmVy
Tm9kZT4gY3JlYXRlUGFubmVyKCk7CisgICAgUmVmPENvbnZvbHZlck5vZGU+IGNyZWF0ZUNvbnZv
bHZlcigpOworICAgIFJlZjxEeW5hbWljc0NvbXByZXNzb3JOb2RlPiBjcmVhdGVEeW5hbWljc0Nv
bXByZXNzb3IoKTsKKyAgICBSZWY8QW5hbHlzZXJOb2RlPiBjcmVhdGVBbmFseXNlcigpOworICAg
IFJlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90
IGJ1ZmZlclNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8U2NyaXB0UHJvY2Vzc29y
Tm9kZT4gY3JlYXRlU2NyaXB0UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QgbnVt
YmVyT2ZJbnB1dENoYW5uZWxzLCBFeGNlcHRpb25Db2RlJik7CisgICAgUmVmUHRyPFNjcmlwdFBy
b2Nlc3Nvck5vZGU+IGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgc2l6
ZV90IG51bWJlck9mSW5wdXRDaGFubmVscywgc2l6ZV90IG51bWJlck9mT3V0cHV0Q2hhbm5lbHMs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8Q2hhbm5lbFNwbGl0dGVyTm9kZT4gY3JlYXRl
Q2hhbm5lbFNwbGl0dGVyKEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8Q2hhbm5lbFNwbGl0
dGVyTm9kZT4gY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKHNpemVfdCBudW1iZXJPZk91dHB1dHMsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8Q2hhbm5lbE1lcmdlck5vZGU+IGNyZWF0ZUNoYW5u
ZWxNZXJnZXIoRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxDaGFubmVsTWVyZ2VyTm9kZT4g
Y3JlYXRlQ2hhbm5lbE1lcmdlcihzaXplX3QgbnVtYmVyT2ZJbnB1dHMsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBSZWY8T3NjaWxsYXRvck5vZGU+IGNyZWF0ZU9zY2lsbGF0b3IoKTsKKyAgICBSZWZQ
dHI8UGVyaW9kaWNXYXZlPiBjcmVhdGVQZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5KiByZWFsLCBG
bG9hdDMyQXJyYXkqIGltYWcsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIC8vIFdoZW4gYSBzb3Vy
Y2Ugbm9kZSBoYXMgbm8gbW9yZSBwcm9jZXNzaW5nIHRvIGRvIChoYXMgZmluaXNoZWQgcGxheWlu
ZyksIHRoZW4gaXQgdGVsbHMgdGhlIGNvbnRleHQgdG8gZGVyZWZlcmVuY2UgaXQuCiAgICAgdm9p
ZCBub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKEF1ZGlvTm9kZSopOwpAQCAtMzAzLDggKzMw
Myw4IEBAIHByaXZhdGU6CiAgICAgLy8gSW4gdHVybiwgdGhlc2Ugbm9kZXMgcmVmZXJlbmNlIGFs
bCBub2RlcyB0aGV5J3JlIGNvbm5lY3RlZCB0by4gIEFsbCBub2RlcyBhcmUgdWx0aW1hdGVseSBj
b25uZWN0ZWQgdG8gdGhlIEF1ZGlvRGVzdGluYXRpb25Ob2RlLgogICAgIC8vIFdoZW4gdGhlIGNv
bnRleHQgZGVyZWZlcmVuY2VzIGEgc291cmNlIG5vZGUsIGl0IHdpbGwgYmUgZGVhY3RpdmF0ZWQg
ZnJvbSB0aGUgcmVuZGVyaW5nIGdyYXBoIGFsb25nIHdpdGggYWxsIG90aGVyIG5vZGVzIGl0IGlz
CiAgICAgLy8gdW5pcXVlbHkgY29ubmVjdGVkIHRvLiAgU2VlIHRoZSBBdWRpb05vZGU6OnJlZigp
IGFuZCBBdWRpb05vZGU6OmRlcmVmKCkgbWV0aG9kcyBmb3IgbW9yZSBkZXRhaWxzLgotICAgIHZv
aWQgcmVmTm9kZShBdWRpb05vZGUqKTsKLSAgICB2b2lkIGRlcmVmTm9kZShBdWRpb05vZGUqKTsK
KyAgICB2b2lkIHJlZk5vZGUoQXVkaW9Ob2RlJik7CisgICAgdm9pZCBkZXJlZk5vZGUoQXVkaW9O
b2RlJik7CiAKICAgICAvLyBBY3RpdmVET01PYmplY3QgQVBJLgogICAgIHZvaWQgc3RvcCgpIG92
ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NvbnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaWRsCmluZGV4IDQ1MWY0ODVlNjFlZTI5NjBmOTE4ZGQwYjA2OTIzMzA0NjYxZmY3MjkuLjk0
ZDZiOGY1MjVkNjMzZTU0Njg5ZTczYmNjNDI4MjcyMzEwMTE1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKQEAgLTMxLDEzICszMSwx
MiBAQCBlbnVtIEF1ZGlvQ29udGV4dFN0YXRlIHsKIH07CiAKIFsKLSAgICBFbmFibGVkQnlTZXR0
aW5nPVdlYkF1ZGlvLAotICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKICAgICBBY3RpdmVET01P
YmplY3QsCisgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAogICAgIEN1c3RvbUNvbnN0cnVjdG9y
LAotICAgIFVzZVBvaW50ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzLAotICAg
IEludGVyZmFjZU5hbWU9d2Via2l0QXVkaW9Db250ZXh0LAorICAgIEVuYWJsZWRCeVNldHRpbmc9
V2ViQXVkaW8sCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBPUlQsCisgICAgSW50ZXJmYWNl
TmFtZT13ZWJraXRBdWRpb0NvbnRleHQsCiBdIGludGVyZmFjZSBBdWRpb0NvbnRleHQgOiBFdmVu
dFRhcmdldCB7CiAgICAgLy8gQWxsIHJlbmRlcmVkIGF1ZGlvIHVsdGltYXRlbHkgY29ubmVjdHMg
dG8gZGVzdGluYXRpb24sIHdoaWNoIHJlcHJlc2VudHMgdGhlIGF1ZGlvIGhhcmR3YXJlLgogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0Rlc3RpbmF0aW9uTm9kZSBkZXN0aW5hdGlvbjsKQEAg
LTYyLDIyICs2MSwxOSBAQCBlbnVtIEF1ZGlvQ29udGV4dFN0YXRlIHsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBhY3RpdmVTb3VyY2VDb3VudDsKICAgICAKICAgICBbUmFp
c2VzRXhjZXB0aW9uXSBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIodW5zaWduZWQgbG9uZyBudW1i
ZXJPZkNoYW5uZWxzLCB1bnNpZ25lZCBsb25nIG51bWJlck9mRnJhbWVzLCB1bnJlc3RyaWN0ZWQg
ZmxvYXQgc2FtcGxlUmF0ZSk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gQXVkaW9CdWZmZXIgY3Jl
YXRlQnVmZmVyKEFycmF5QnVmZmVyPyBidWZmZXIsIGJvb2xlYW4gbWl4VG9Nb25vKTsKKyAgICBb
UmFpc2VzRXhjZXB0aW9uXSBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXIgYnVm
ZmVyLCBib29sZWFuIG1peFRvTW9ubyk7CiAKICAgICAvLyBBc3luY2hyb25vdXMgYXVkaW8gZmls
ZSBkYXRhIGRlY29kaW5nLgotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgZGVjb2RlQXVkaW9E
YXRhKEFycmF5QnVmZmVyIGF1ZGlvRGF0YSwgQXVkaW9CdWZmZXJDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2ssIG9wdGlvbmFsIEF1ZGlvQnVmZmVyQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7CisgICAg
Ly8gRklYTUU6IHN1Y2Nlc3NDYWxsYmFjayBzaG91bGQgYmUgb3B0aW9uYWwgYW5kIHRoZSBjYWxs
YmFja3Mgc2hvdWxkIG5vdCBiZSBudWxsYWJsZS4gVGhpcyBzaG91bGQgYWxzbyByZXR1cm4gYSBQ
cm9taXNlLgorICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyIGF1ZGlvRGF0YSwg
QXVkaW9CdWZmZXJDYWxsYmFjaz8gc3VjY2Vzc0NhbGxiYWNrLCBvcHRpb25hbCBBdWRpb0J1ZmZl
ckNhbGxiYWNrPyBlcnJvckNhbGxiYWNrKTsKIAogICAgIC8vIFNvdXJjZXMKICAgICBBdWRpb0J1
ZmZlclNvdXJjZU5vZGUgY3JlYXRlQnVmZmVyU291cmNlKCk7CiAKLSNpZiBkZWZpbmVkKEVOQUJM
RV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVt
ZW50IG1lZGlhRWxlbWVudCk7Ci0jZW5kaWYKKyAgICBbQ29uZGl0aW9uYWw9VklERU8sIFJhaXNl
c0V4Y2VwdGlvbl0gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlhRWxlbWVu
dFNvdXJjZShIVE1MTWVkaWFFbGVtZW50IG1lZGlhRWxlbWVudCk7CiAKLSNpZiBkZWZpbmVkKEVO
QUJMRV9NRURJQV9TVFJFQU0pICYmIEVOQUJMRV9NRURJQV9TVFJFQU0KLSAgICBbUmFpc2VzRXhj
ZXB0aW9uXSBNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZSBjcmVhdGVNZWRpYVN0cmVhbVNvdXJj
ZShNZWRpYVN0cmVhbSBtZWRpYVN0cmVhbSk7Ci0gICAgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0
aW9uTm9kZSBjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7Ci0jZW5kaWYKKyAgICBbQ29u
ZGl0aW9uYWw9TUVESUFfU1RSRUFNLCBSYWlzZXNFeGNlcHRpb25dIE1lZGlhU3RyZWFtQXVkaW9T
b3VyY2VOb2RlIGNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKE1lZGlhU3RyZWFtIG1lZGlhU3RyZWFt
KTsKKyAgICBbQ29uZGl0aW9uYWw9TUVESUFfU1RSRUFNXSBNZWRpYVN0cmVhbUF1ZGlvRGVzdGlu
YXRpb25Ob2RlIGNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKTsKIAogICAgIC8vIFByb2Nl
c3Npbmcgbm9kZXMKICAgICBHYWluTm9kZSBjcmVhdGVHYWluKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZS5jcHAKaW5kZXggMDEzOTFmZDNjMzZiODc2NDYxYTVjZTdmYzRmNmMzYmUxZTAyZDA5
Ny4uNzdjN2ZiY2NmZDNlZGQ3ZTlhOTRkYWZmMTYzMWQxYWQ5MjNlNTk5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmNwcApAQCAtNDAsMTIgKzQwLDEyIEBAIGNvbnN0IHVuc2lnbmVkIG1h
eFNhbXBsZVJhdGUgPSAxOTIwMDA7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZT4gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpjcmVh
dGUoQXVkaW9Db250ZXh0JiBjb250ZXh0LCBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQp
CitSZWY8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQmIGNvbnRleHQsIEhUTUxNZWRpYUVsZW1lbnQmIG1l
ZGlhRWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGUoY29udGV4dCwgbWVkaWFFbGVtZW50KSk7CiB9CiAKLU1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29udGV4dCYg
Y29udGV4dCwgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQorTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0JiBj
b250ZXh0LCBIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCiAgICAgOiBBdWRpb05vZGUo
Y29udGV4dCwgY29udGV4dC5zYW1wbGVSYXRlKCkpCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRp
YUVsZW1lbnQpCiAgICAgLCBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMoMCkKQEAgLTEwNCw3ICsx
MDQsNyBAQCB2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzcyhzaXplX3Qg
bnVtYmVyT2ZGcmFtZXMpCiB7CiAgICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+
YnVzKCk7CiAKLSAgICBpZiAoIW1lZGlhRWxlbWVudCgpIHx8ICFtX3NvdXJjZU51bWJlck9mQ2hh
bm5lbHMgfHwgIW1fc291cmNlU2FtcGxlUmF0ZSkgeworICAgIGlmICghbV9zb3VyY2VOdW1iZXJP
ZkNoYW5uZWxzIHx8ICFtX3NvdXJjZVNhbXBsZVJhdGUpIHsKICAgICAgICAgb3V0cHV0QnVzLT56
ZXJvKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OnByb2Nlc3Moc2l6ZV90IG51bWJlck9mRnJhbWVz
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKEF1ZGlvU291cmNlUHJvdmlkZXIq
IHByb3ZpZGVyID0gbWVkaWFFbGVtZW50KCktPmF1ZGlvU291cmNlUHJvdmlkZXIoKSkgeworICAg
IGlmIChBdWRpb1NvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IG1lZGlhRWxlbWVudCgpLmF1ZGlv
U291cmNlUHJvdmlkZXIoKSkgewogICAgICAgICBpZiAobV9tdWx0aUNoYW5uZWxSZXNhbXBsZXIu
Z2V0KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChtX3NvdXJjZVNhbXBsZVJhdGUgIT0gc2FtcGxl
UmF0ZSgpKTsKICAgICAgICAgICAgIG1fbXVsdGlDaGFubmVsUmVzYW1wbGVyLT5wcm9jZXNzKHBy
b3ZpZGVyLCBvdXRwdXRCdXMsIG51bWJlck9mRnJhbWVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZS5oCmluZGV4IGMxODA0MmZiY2UyOWI0ZDZjZTlkZDE3Mzg1ZDUwNDkxOTI0NTZjNzMuLjM1YjBm
NjUzY2ZlN2Y4MzNlODhlNDIxMjIwNzViODAyMGZlNmRmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGUuaApAQCAtNDEsMTEgKzQxLDExIEBAIGNsYXNzIEF1ZGlvQ29udGV4dDsKICAgICAKIGNs
YXNzIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUsIHB1Ymxp
YyBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCYsIEhUTUxNZWRp
YUVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUmVmPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4g
Y3JlYXRlKEF1ZGlvQ29udGV4dCYsIEhUTUxNZWRpYUVsZW1lbnQmKTsKIAogICAgIHZpcnR1YWwg
fk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSgpOwogCi0gICAgSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgSFRNTE1lZGlhRWxlbWVudCYgbWVk
aWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQ7IH0KIAogICAgIC8vIEF1ZGlvTm9k
ZQogICAgIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSBvdmVycmlkZTsKQEAg
LTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5sb2NrKCk7CiAKIHByaXZhdGU6Ci0g
ICAgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29udGV4dCYsIEhUTUxNZWRpYUVs
ZW1lbnQqKTsKKyAgICBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0Jiwg
SFRNTE1lZGlhRWxlbWVudCYpOwogCiAgICAgZG91YmxlIHRhaWxUaW1lKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gMDsgfQogICAgIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIDA7IH0KQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICAvLyBBcyBhbiBh
dWRpbyBzb3VyY2UsIHdlIHdpbGwgbmV2ZXIgcHJvcGFnYXRlIHNpbGVuY2UuCiAgICAgYm9vbCBw
cm9wYWdhdGVzU2lsZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAg
ICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7CisgICAgUmVmPEhUTUxN
ZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OwogICAgIExvY2sgbV9wcm9jZXNzTXV0ZXg7CiAK
ICAgICB1bnNpZ25lZCBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCmluZGV4IDdjNmUxNDQ4
ZDRjZTc0NGYzZWQ5NTVlOTE3MmQ3MDJkN2ZiYzczZWMuLmJkMDE1ZWEzMDVjNzUxOGE4OWY2Zjcx
NTlkNjViZWQyN2QzMWYyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCkBAIC0yNSw3ICsyNSw2IEBACiAvLyBPc2NpbGxhdG9y
Tm9kZSBpcyBhbiBhdWRpbyBnZW5lcmF0b3Igb2YgcGVyaW9kaWMgd2F2ZWZvcm1zLgogWwogICAg
IENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICBVc2VQb2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJs
ZU9iamVjdEFyZ3VtZW50cywKICAgICBKU0dlbmVyYXRlVG9KU09iamVjdCwKIF0gaW50ZXJmYWNl
IE9zY2lsbGF0b3JOb2RlIDogQXVkaW9Ob2RlIHsKIApAQCAtNTUsNyArNTQsNyBAQAogICAgIFtD
b25kaXRpb25hbD1MRUdBQ1lfV0VCX0FVRElPLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgbm90ZU9u
KHVucmVzdHJpY3RlZCBkb3VibGUgd2hlbik7CiAgICAgW0NvbmRpdGlvbmFsPUxFR0FDWV9XRUJf
QVVESU8sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBub3RlT2ZmKHVucmVzdHJpY3RlZCBkb3VibGUg
d2hlbik7CiAKLSAgICB2b2lkIHNldFBlcmlvZGljV2F2ZShQZXJpb2RpY1dhdmUgd2F2ZSk7Cisg
ICAgdm9pZCBzZXRQZXJpb2RpY1dhdmUoUGVyaW9kaWNXYXZlPyB3YXZlKTsgLy8gRklYTUU6IFRo
ZSBwYXJhbWV0ZXIgc2hvdWxkIG5vdCBiZSBudWxsYWJsZS4KIAogICAgIGF0dHJpYnV0ZSBFdmVu
dEhhbmRsZXIgb25lbmRlZDsKIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTk3ODEyYzQzYmI1YmYxZGQ4ZmFjMjE1Mjg2
MmY0YWVhYzRmYmRmYy4uZjA4ZjBjNGY3Nzg1ZWI0ZDNkZjljZTVjODE1ZWEwMWQzOTk1ODc2ZiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA0LTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgRHJvcCBbVXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVP
YmplY3RBcmd1bWVudHNdIGZyb20gV2ViQXVkaW8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Njc3NworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgorCisgICAgICAgIEFkZGVkIHRlc3QgY292ZXJhZ2UgZm9yIHRoZSB0eXBlIG9mIHRo
ZSBleGNlcHRpb24gYmVpbmcgdGhyb3duIHdoZW4KKyAgICAgICAgcGFzaW5nIG51bGwgdG8gdmFy
aW91cyBXZWJBdWRpbyBBUEkuCisKKyAgICAgICAgKiB3ZWJhdWRpby9hdWRpb2J1ZmZlci1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogd2ViYXVkaW8vYXVkaW9idWZmZXIuaHRtbDoKKyAgICAgICAg
KiB3ZWJhdWRpby9jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZS1udWxsLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogd2ViYXVkaW8vY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UtbnVsbC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9kZWNvZGUtYXVkaW8tZGF0YS1iYXNpYy1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogd2ViYXVkaW8vZGVjb2RlLWF1ZGlvLWRhdGEtYmFzaWMuaHRt
bDoKKyAgICAgICAgKiB3ZWJhdWRpby9tZWRpYWVsZW1lbnRhdWRpb3NvdXJjZW5vZGUtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIHdlYmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS5o
dG1sOgorCiAyMDE2LTA0LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmJ1ZmZlciBzaG91bGQgYmUgbnVsbGFibGUKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVmZmVyLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVmZmVyLWV4cGVjdGVkLnR4dAppbmRleCBkYmZi
YmM0M2NlN2E2NGQ0M2YzZWU1ZDAwNjc2OTM5OGQ3YzUwMTViLi5hOTVlNzAyY2M4YTZkMDNlYmEx
ZTIzZjcyZGUwMjU2YTBlMTg4Njg1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9h
dWRpb2J1ZmZlci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9i
dWZmZXItZXhwZWN0ZWQudHh0CkBAIC0xMiw2ICsxMiw3IEBAIFBBU1MgZ2V0Q2hhbm5lbERhdGEo
MSkgcmV0dXJucyBhIEZsb2F0MzJBcnJheSBvYmplY3QuCiBQQVNTIGdldENoYW5uZWxEYXRhKDIp
IHJldHVybnMgYSBGbG9hdDMyQXJyYXkgb2JqZWN0LgogUEFTUyBnZXRDaGFubmVsRGF0YSgzKSBy
ZXR1cm5zIGEgRmxvYXQzMkFycmF5IG9iamVjdC4KIFBBU1MgRXhjZXB0aW9uIGhhcyBiZWVuIHRo
cm93biBjb3JyZWN0bHkgd2hlbiBpbmRleCBpcyBub3QgbGVzcyB0aGFuIG51bWJlck9mQ2hhbm5l
bHMuCitQQVNTIGNvbnRleHQuY3JlYXRlQnVmZmVyKG51bGwsIGZhbHNlKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRp
b2J1ZmZlci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXIuaHRtbAppbmRl
eCBiM2I0ZDFhMjg1NmJkZDNjMzcxM2Q2ZGVlN2JlMTRkMTI1ZGFmZTg0Li5iNzA1ZmUyNDVkNjQ3
NDhiMTc4OWZlYTY5NjcyNTgxODE5MzlmNGQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJh
dWRpby9hdWRpb2J1ZmZlci5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVm
ZmVyLmh0bWwKQEAgLTQ5LDYgKzQ5LDggQEAgdHJ5IHsKICAgICB0ZXN0UGFzc2VkKCJFeGNlcHRp
b24gaGFzIGJlZW4gdGhyb3duIGNvcnJlY3RseSB3aGVuIGluZGV4IGlzIG5vdCBsZXNzIHRoYW4g
bnVtYmVyT2ZDaGFubmVscy4iKTsKIH0KIAorc2hvdWxkVGhyb3coImNvbnRleHQuY3JlYXRlQnVm
ZmVyKG51bGwsIGZhbHNlKSIsICInVHlwZUVycm9yOiBUeXBlIGVycm9yJyIpOworCiA8L3Njcmlw
dD4KIAogPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY3JlYXRlTWVkaWFTdHJlYW1Tb3Vy
Y2UtbnVsbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9jcmVhdGVNZWRpYVN0
cmVhbVNvdXJjZS1udWxsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzE0MTRkNTVhYzcyYzI3
ZmJjNTFmODIzNWJmOWQ2ZjRlNWY5Mjg5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UtbnVsbC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMCBAQAorVGVzdHMgdGhhdCBwYXNzaW5nIG51bGwgdG8gY29udGV4dC5jcmVhdGVNZWRp
YVN0cmVhbVNvdXJjZSgpIHRocm93cyBhIFR5cGVFcnJvci4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShudWxsKSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2NyZWF0ZU1lZGlhU3RyZWFtU291cmNlLW51bGwuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2NyZWF0ZU1lZGlhU3RyZWFtU291cmNlLW51bGwuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
ZDZkNWZiNDBlYjc1YWE1N2Y3NTljMjViNWIzNmIxYTBmZDFiYjlkCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UtbnVsbC5odG1s
CkBAIC0wLDAgKzEsMTcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHBhc3NpbmcgbnVsbCB0byBjb250
ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKCkgdGhyb3dzIGEgVHlwZUVycm9yLiIpOworCit2
YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoKTsKK3Nob3VsZFRocm93KCJjb250
ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKG51bGwpIiwgIidUeXBlRXJyb3I6IFR5cGUgZXJy
b3InIik7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vZGVjb2RlLWF1ZGlvLWRhdGEtYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vZGVjb2RlLWF1ZGlvLWRhdGEtYmFzaWMtZXhwZWN0ZWQudHh0CmluZGV4
IDliNWE2MjgyZjA0ZWM4NmMxZDc3Nzg4MTRhNTRmNTE4N2Q1ZmMwNTcuLmE3NjE4ODUzZjU1YTdj
ZTg0ZGM4ZDcxZDk2YjY1NWJhNWIwOTQwZjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2RlY29kZS1hdWRpby1kYXRhLWJhc2ljLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy93ZWJhdWRpby9kZWNvZGUtYXVkaW8tZGF0YS1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTMsNyAr
Myw3IEBAIEJhc2ljIHRlc3RzIGZvciBkZWNvZGVBdWRpb0RhdGEgZnVuY3Rpb24uCiBPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyBkZWNvZGVBdWRpb0RhdGEgcmFpc2VzIGV4Y2Vw
dGlvbiBjb3JyZWN0bHkgd2hlbiBhcnJheWJ1ZmZlciBwYXJhbWV0ZXIgaXMgbnVsbC4KK1BBU1Mg
Y29udGV4dC5kZWNvZGVBdWRpb0RhdGEobnVsbCwgZnVuY3Rpb24oKXt9LCBmdW5jdGlvbigpe30p
OyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgogUEFTUyBUaGUgcmVzb3Vy
Y2VzL21lZGlhLzI0Yml0LTQ0a2h6LndhdiB0ZXN0OiBzdWNjZXNzQ2FsbGJhY2sgaGFzIGJlZW4g
Y2FsbGVkIGNvcnJlY3RseS4KIFBBU1MgVGhlIHJlc291cmNlcy9tZWRpYS9pbnZhbGlkLWF1ZGlv
LWZpbGUudHh0IHRlc3Q6IGVycm9yQ2FsbGJhY2sgaGFzIGJlZW4gY2FsbGVkIGNvcnJlY3RseS4K
IFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2RlY29kZS1hdWRpby1kYXRhLWJhc2ljLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJh
dWRpby9kZWNvZGUtYXVkaW8tZGF0YS1iYXNpYy5odG1sCmluZGV4IGMxZDJiMDVlNTRjNTMyN2M5
NGY5MzI0NDBlN2NmN2QzMmFlZWM0M2UuLmVmYzEzMTUyOTAyMzc2ZTAwMDQyYmUyNDQyNTk5NzA1
MjRiZjZjZjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2RlY29kZS1hdWRpby1k
YXRhLWJhc2ljLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGVjb2RlLWF1ZGlvLWRh
dGEtYmFzaWMuaHRtbApAQCAtMTcsMTIgKzE3LDggQEAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0
cnVlOwogCiB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoKTsKIAotdHJ5IHsK
LSAgICBjb250ZXh0LmRlY29kZUF1ZGlvRGF0YShudWxsLCBmdW5jdGlvbigpe30sIGZ1bmN0aW9u
KCl7fSk7Ci0gICAgdGVzdEZhaWxlZCgiZGVjb2RlQXVkaW9EYXRhIHNob3VsZCByYWlzZSBleGNl
cHRpb24gd2hlbiBhcnJheWJ1ZmZlciBwYXJhbWV0ZXIgaXMgbnVsbC4iKTsKLX0gY2F0Y2goZSkg
ewotICAgIHRlc3RQYXNzZWQoImRlY29kZUF1ZGlvRGF0YSByYWlzZXMgZXhjZXB0aW9uIGNvcnJl
Y3RseSB3aGVuIGFycmF5YnVmZmVyIHBhcmFtZXRlciBpcyBudWxsLiIpOwotfQorLy8gZGVjb2Rl
QXVkaW9EYXRhIHNob3VsZCByYWlzZSBleGNlcHRpb24gd2hlbiBhcnJheWJ1ZmZlciBwYXJhbWV0
ZXIgaXMgbnVsbC4KK3Nob3VsZFRocm93KCJjb250ZXh0LmRlY29kZUF1ZGlvRGF0YShudWxsLCBm
dW5jdGlvbigpe30sIGZ1bmN0aW9uKCl7fSk7IiwgIidUeXBlRXJyb3I6IFR5cGUgZXJyb3InIik7
CiAKIHZhciBkZWNvZGVDYXNlQXJyYXkgPSBbe3VybDogInJlc291cmNlcy9tZWRpYS8yNGJpdC00
NGtoei53YXYiLCByZXN1bHQ6IHRydWV9LAogICAgICAgICAgICAgICAgICAgICAgICB7dXJsOiAi
cmVzb3VyY2VzL21lZGlhL2ludmFsaWQtYXVkaW8tZmlsZS50eHQiLCByZXN1bHQ6IGZhbHNlfV07
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9tZWRpYWVsZW1lbnRhdWRpb3NvdXJj
ZW5vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbWVkaWFlbGVtZW50YXVk
aW9zb3VyY2Vub2RlLWV4cGVjdGVkLnR4dAppbmRleCBlYzQ1MGEwMDliMTZmMjRhYTYzNGM5ZmIy
NmQ0Mzg3N2RmZjM5ZTAzLi5iZjM1YTliY2ExMjkzMmU4NmJkZDA2YjU1YzRlM2M0OGM4NDExYjM1
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9tZWRpYWVsZW1lbnRhdWRpb3NvdXJj
ZW5vZGUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhZWxlbWVu
dGF1ZGlvc291cmNlbm9kZS1leHBlY3RlZC50eHQKQEAgLTksNiArOSw3IEBAIFBBU1MgY29ubmVj
dCgpIGV4Y2VwdGlvbiB0aHJvd24gZm9yIGlsbGVnYWwgb3V0cHV0IGluZGV4LgogUEFTUyBjb25u
ZWN0KCkgZXhjZXB0aW9uIHRocm93biBmb3IgaWxsZWdhbCBpbnB1dCBpbmRleC4KIFBBU1MgYXVk
aW9Ob2RlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbikgc3VjY2VlZGVkLgogUEFTUyBjcmVh
dGVNZWRpYUVsZW1lbnRTb3VyY2UoKSB0aHJldyBlcnJvciB3aGVuIGNhbGxlZCB0d2ljZSBvbiBz
YW1lIEhUTUxNZWRpYUVsZW1lbnQuCitQQVNTIGNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291
cmNlKG51bGwpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vbWVkaWFlbGVtZW50YXVkaW9zb3VyY2Vub2RlLmh0bWwKaW5kZXgg
NDg5NWYyZWZlY2ZlYjFlMTdhZWI0NmE3OWU0YmUzMDM5NTliZjNjNi4uNDJiMGFlOWZjODlhMTk2
NzM2NzI5N2E0OTEwYzc5ZGYzYzA3ZDhjMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vbWVkaWFlbGVtZW50YXVkaW9zb3VyY2Vub2RlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vbWVkaWFlbGVtZW50YXVkaW9zb3VyY2Vub2RlLmh0bWwKQEAgLTc5LDYgKzc5LDggQEAg
ZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAgICAgICAgdGVzdFBhc3NlZCgiY3JlYXRlTWVkaWFFbGVt
ZW50U291cmNlKCkgdGhyZXcgZXJyb3Igd2hlbiBjYWxsZWQgdHdpY2Ugb24gc2FtZSBIVE1MTWVk
aWFFbGVtZW50LiIpOwogICAgIH0KIAorICAgIHNob3VsZFRocm93KCJjb250ZXh0LmNyZWF0ZU1l
ZGlhRWxlbWVudFNvdXJjZShudWxsKSIsICInVHlwZUVycm9yOiBUeXBlIGVycm9yJyIpOworCiAg
ICAgZmluaXNoSlNUZXN0KCk7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>