<?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>135042</bug_id>
          
          <creation_ts>2014-07-18 00:44:48 -0700</creation_ts>
          <short_desc>[Mac] Support audioSourceProvider() in MediaPlayerPrivateAVFoundationObjC</short_desc>
          <delta_ts>2015-05-08 11:45:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bugs</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>ian.bellomy</cc>
    
    <cc>isaacshinman</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1023219</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-07-18 00:44:48 -0700</bug_when>
    <thetext>[Mac] Support audioSourceProvider() in MediaPlayerPrivateAVFoundationObjC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023224</commentid>
    <comment_count>1</comment_count>
      <attachid>235115</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-07-18 01:26:15 -0700</bug_when>
    <thetext>Created attachment 235115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023263</commentid>
    <comment_count>2</comment_count>
      <attachid>235129</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-07-18 08:44:05 -0700</bug_when>
    <thetext>Created attachment 235129
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023492</commentid>
    <comment_count>3</comment_count>
      <attachid>235129</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-07-19 18:44:14 -0700</bug_when>
    <thetext>Comment on attachment 235129
Patch

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

r=me with a few nits.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:65
&gt; +    m_capacityFrames = capacityFrames;

&quot;m_capacityFrames&quot; is an strange name, it initially made me think it was the total size all frames. Maybe &quot;m_numberOfFrames&quot;, or &quot;m_frameCount&quot; (and change m_numberOfChannels to m_channelCount).

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:75
&gt; +    Byte* channelData = static_cast&lt;Byte*&gt;(m_buffers-&gt;data());
&gt; +    channelData += pointersSize;

Nit: this should be done on one line.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:114
&gt; +        memcpy(*buffers + destOffset, static_cast&lt;Byte *&gt;(src-&gt;mData) + srcOffset, std::min&lt;size_t&gt;(nbytes, src-&gt;mDataByteSize - srcOffset));

Nit: lose the space between Byte and *.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:168
&gt; +        // going backwards, throw everything out
&gt; +        setTimeBounds(startWrite, startWrite);
&gt; +    } else if (endWrite - startFrame() &lt;= m_capacityFrames) {
&gt; +        // the buffer has not yet wrapped and will not need to.
&gt; +        // No-op.
&gt; +    } else {
&gt; +        // advance the start time past the region we are about to overwrite
&gt; +        uint64_t newStart = endWrite - m_capacityFrames; // one buffer of time behind where we&apos;re writing
&gt; +        uint64_t newEnd = std::max(newStart, endFrame());
&gt; +        setTimeBounds(newStart, newEnd);
&gt; +    }
&gt; +
&gt; +    // write the new frames

Nit: these comments should be converted to WebKit style - full sentence terminated by a period.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:170
&gt; +    uint32_t numberOfChannels = m_numberOfChannels;

It doesn&apos;t look like the local is never modified, why not just use m_numberOfChannels?

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:176
&gt; +        // we are skipping some samples, so zero the range we are skipping

Comment style.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:198
&gt; +    // now update the end time

Ditto.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:199
&gt; +    setTimeBounds(startFrame(), endWrite);

Some of the local and member variable names used in this class. A variable name should help the reader understand what happening, but many of these don&apos;t help me at all. 

For example, here you are call setTimeBounds with &quot;startFrame&quot; and &quot;endWrite&quot;, but setTimeBounds has parameters called &quot;startTime&quot; and &quot;endTime&quot;, which it uses to set &quot;m_startFrame&quot; and &quot;m_endFrame&quot;. Please make a pass through to make names logical  and consistent.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:217
&gt; +    // fail after a few tries.

Comment style.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:218
&gt; +    for (int i = 0; i &lt; 8; ++i) {

Nit: this magic value should be a named constant.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:230
&gt; +    return CPUOverload;

Nit: error logging here would be helpful.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:250
&gt; +    return Ok; // success

Nit: this comment isn&apos;t helpful.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:265
&gt; +CARingBuffer::Error CARingBuffer::fetch(AudioBufferList* list, size_t nFrames, uint64_t startRead)

Nit: frameCount instead of nFrames?

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:270
&gt; +    startRead = std::max&lt;uint64_t&gt;(0, startRead);

Is this necessary, how can a uint64_t be less than 0?

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:278
&gt; +    Error err = clipTimeBounds(startRead, endRead);
&gt; +    if (err)

Nit: you can combine these lines.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:297
&gt; +    Byte **buffers = static_cast&lt;Byte**&gt;(m_buffers-&gt;data());

No space between variable and *.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.h:44
&gt; +        TooMuch, // fetch start time is earlier than buffer start time and fetch end time is later than buffer end time
&gt; +        CPUOverload, // the reader is unable to get enough CPU cycles to capture a consistent snapshot of the time bounds

Comment style.

&gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:64
&gt; +static double kRingBufferDuration = 1;

Nit: this can be const.

&gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:66
&gt; +PassRefPtr&lt;AudioSourceProviderAVFObjC&gt; AudioSourceProviderAVFObjC::create(AVPlayerItem* item)

AVPlayerItem is ObjC, the space should be next to the variable name.

&gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:73
&gt; +AudioSourceProviderAVFObjC::AudioSourceProviderAVFObjC(AVPlayerItem* item)

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:93
&gt; +    uint64_t availableFrames = endFrame - m_readCount;
&gt; +    if (availableFrames &lt;= 0)

uint64_t &lt; 0??

&gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:105
&gt; +    m_ringBuffer-&gt;fetch(m_list.get(), framesToProcess, m_readCount);

fetch() returns an error, why not use it?

&gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:305
&gt; +void AudioSourceProviderAVFObjC::process(CMItemCount numberOfFrames, MTAudioProcessingTapFlags flags, AudioBufferList *bufferListInOut, CMItemCount *numberFramesOut, MTAudioProcessingTapFlags *flagsOut)

Nit: &quot; *&quot; -&gt; &quot;* &quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032800</commentid>
    <comment_count>4</comment_count>
      <attachid>237535</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-09-02 17:19:57 -0700</bug_when>
    <thetext>Created attachment 237535
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033209</commentid>
    <comment_count>5</comment_count>
      <attachid>237626</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-09-04 08:53:22 -0700</bug_when>
    <thetext>Created attachment 237626
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033527</commentid>
    <comment_count>6</comment_count>
      <attachid>237707</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-09-05 12:55:05 -0700</bug_when>
    <thetext>Created attachment 237707
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033569</commentid>
    <comment_count>7</comment_count>
      <attachid>237714</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-09-05 15:35:46 -0700</bug_when>
    <thetext>Created attachment 237714
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034874</commentid>
    <comment_count>8</comment_count>
      <attachid>238032</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-09-12 09:26:12 -0700</bug_when>
    <thetext>Created attachment 238032
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034947</commentid>
    <comment_count>9</comment_count>
      <attachid>238055</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-09-12 14:09:27 -0700</bug_when>
    <thetext>Created attachment 238055
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035296</commentid>
    <comment_count>10</comment_count>
      <attachid>238055</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-15 13:06:02 -0700</bug_when>
    <thetext>Comment on attachment 238055
Patch for landing

Clearing flags on attachment: 238055

Committed r173628: &lt;http://trac.webkit.org/changeset/173628&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045292</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-10-31 10:25:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/18838443&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082351</commentid>
    <comment_count>12</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-02 15:16:34 -0700</bug_when>
    <thetext>*** Bug 143332 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082353</commentid>
    <comment_count>13</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-02 15:16:50 -0700</bug_when>
    <thetext>*** Bug 125031 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093206</commentid>
    <comment_count>14</comment_count>
    <who name="Ian">ian.bellomy</who>
    <bug_when>2015-05-08 09:40:08 -0700</bug_when>
    <thetext>I got to this bug from bug 135042. It was marked as a duplicate of this. 
The issue in bug 135042 does not seem resolved though.
createMediaElementSource() does not seem to work in Safari Version 8.0.5
:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093207</commentid>
    <comment_count>15</comment_count>
    <who name="Ian">ian.bellomy</who>
    <bug_when>2015-05-08 09:41:23 -0700</bug_when>
    <thetext>(In reply to comment #14)

Or in webkit nightly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093210</commentid>
    <comment_count>16</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-05-08 09:55:52 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; 
&gt; Or in webkit nightly.

You&apos;re going to have to be more specific. If you have a test case that isn&apos;t working as you expect, please file a new bug with the test case and reproduction steps.

FWIW, all my own createMediaElementSource() tests are working correctly with the latest WebKit Nightly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093248</commentid>
    <comment_count>17</comment_count>
    <who name="Ian">ian.bellomy</who>
    <bug_when>2015-05-08 11:45:15 -0700</bug_when>
    <thetext>Correction! Ok in nightly! Just an issue in Safari. My bad!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235115</attachid>
            <date>2014-07-18 01:26:15 -0700</date>
            <delta_ts>2014-07-18 08:44:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135042-20140718012559.patch</filename>
            <type>text/plain</type>
            <size>51386</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxMTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU4ZTZmZmVjMzlmMGQ1
YzMxOGNkNzdjNTVlYTc1Mzc4ZDRhMWJiNy4uMGNjZGVkNjk5YzQxNjVhMmQ0MWUxMTBhOWFmNzQz
MDBlMmQ4NTc5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE0LTA3LTE4ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIFN1cHBvcnQgYXVk
aW9Tb3VyY2VQcm92aWRlcigpIGluIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTA0Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBw
b3J0IGZvciBBdWRpb1NvdXJjZVByb3ZpZGVyIGluIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakMsIHRoZXJlYnkKKyAgICAgICAgc3VwcG9ydGluZyBNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuCisKKyAgICAgICAgSW1wb3J0IHRoZSBDQVJpbmdCdWZmZXIgZnJvbSBDb3JlQXVk
aW8gc2FtcGxlIGNvZGUsIG1ha2luZyB0aGUgbmVjZXNzYXJ5IG1vZGlmaWNhdGlvbnMKKyAgICAg
ICAgZm9yIFdlYktpdCBzdHlsZSBhbmQgY29kaW5nIGNvbnZlbnRpb25zLiBUaGUgdGhyZWFkaW5n
IGFzc3VtcHRpb25zIGZvciB0aGlzIGNsYXNzIGFyZQorICAgICAgICB0aGF0IHRoZXJlIHdpbGwg
YmUgYSBzaW5nbGUgd3JpdGVyIHRocmVhZCBhbmQgYSBzaW5nbGUgcmVhZGVyIHRocmVhZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6Y3JlYXRlKTogQ3JlYXRlIGEgdW5pcXVlX3B0
ci4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6Q0FSaW5nQnVmZmVyKTogU2ltcGxl
IGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjp+Q0FSaW5nQnVm
ZmVyKTogU2ltcGxlIGRlc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6
OmFsbG9jYXRlKTogSW5pdGlhbGl6ZSB0aGUgYnVmZmVycyBhbmQgdGltZSBib3VuZHMgc3RydWN0
dXJlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6ZGVhbGxvY2F0ZSk6IERlc3Ry
b3kgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6Olplcm9SYW5nZSk6IFN0YXRpYyB1dGlsaXR5IG1l
dGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JlQUJMKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpGZXRjaEFCTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WmVyb0FCTCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpzdG9yZSk6IFN0b3JlIHRoZSBwYXNz
ZWQgaW4gYnVmZmVyIGluIHRoZSByaW5nIGJ1ZmZlciwgd3JhcHBpbmcKKyAgICAgICAgICAgIGlm
IG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6c2V0VGltZUJvdW5k
cyk6IFNldCB0aGUgbmV3IHRpbWUgYm91bmRzIGJ5IGluY3JlbWVudGluZyB0aGUKKyAgICAgICAg
ICAgIGJvdW5kcyBpbmRleCBsb2NhbGx5LCBmaWxsaW5nIGluIHRoZSBuZXcgdmFsdWVzLCB0aGVu
IGF0b21pY2FsbHkgaW5jcmVtZW50aW5nIHRoZQorICAgICAgICAgICAgcmVhZGVyLXZpc2libGUg
aW5kZXguCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmdldFRpbWVCb3VuZHMpOiBH
ZXQgdGhlIG5ldyB0aW1lIGJvdW5kcyBieSBtYXNraW5nIHRoZSB0aW1lCisgICAgICAgICAgICBi
b3VuZHMgaW5kZXgsIGFuZCB1c2luZyBpdCBhcyBhbiBvZmZzZXQgdG8gdGhlIHRpbWUgYm91bmRz
IGFycmF5LiBQcm90ZWN0IGFnYWluc3QKKyAgICAgICAgICAgIENQVSBzdGFydmF0aW9uIG9uIHRo
ZSByZWFkaW5nIHRocmVhZCBieSBjaGVja2luZyB0aGUgaW5kZXggYWdhaW5zdCB0aGUgc3RvcmVk
CisgICAgICAgICAgICBpbmRleCBpbiB0aGUgYXJyYXkgZW50cnkuIFRoaXMgY2hlY2sgd2lsbCBm
YWlsIGlmIHRoZSB3cml0aW5nIHRocmVhZCBoYXMgd3JhcHBlZAorICAgICAgICAgICAgbW9yZSB0
aGFuIHRoZSBzaXplIG9mIHRoZSBhcnJheS4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZl
cjo6Y2xpcFRpbWVCb3VuZHMpOiBDbGFtcCB0aGUgcGFzc2VkIHZhbHVlcyB0byB0aGUgYXZhaWxh
YmxlIGJvdW5kcy4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6c3RhcnRGcmFtZSk6
IFNpbXBsZSBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6ZW5kRnJh
bWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6ZmV0Y2gpOiBSZWFk
IGFuIGF1ZGlvIGJ1ZmZlciBsaXN0IGZyb20gdGhlIHJpbmcgYnVmZmVyLCBwb3NzYmlseQorICAg
ICAgICAgICAgd3JhcHBpbmcgYXJvdW5kIHRvIHRoZSBzdGFydCBvZiB0aGUgcmluZyBidWZmZXIu
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6bnVtYmVyT2ZDaGFubmVscyk6IFNpbXBsZSBh
Y2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6ZnJhbWVPZmZzZXQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6VGltZUJvdW5kczo6VGltZUJv
dW5kcyk6IFN0cnVjdCBob2xkaW5nIHRoZSBzdGFydCBhbmQgZW5kIGZyYW1lIHZhbHVlcy4KKwor
ICAgICAgICBBZGQgYW4gaW1wbGVtZW50YXRpb24gb2YgQXVkaW9Tb3VyY2VQcm92aWRlciwgdXNp
bmcgQVZBdWRpb01peCBhbmQgTVRBdWRpb1Byb2Nlc3NpbmdUYXAKKyAgICAgICAgdG8gdGFwIGFu
IEFWUGxheWVySXRlbSdzIGF1ZGlvIG91dHB1dCBhbmQgZmVlZCBpdCB0byBhIE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW06
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmNy
ZWF0ZSk6IFNpbXBsZSBmYWN0b3J5LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakM6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKTogU2ltcGxlIGNvbnN0cnVj
dG9yLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6On5BdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQyk6IFNpbXBsZSBkZXN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb3ZpZGVJbnB1dCk6IFB1c2ggYXVk
aW8gaW50byB0aGUgcmluZyBidWZmZXIuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQzo6c2V0Q2xpZW50KTogQ2FsbCBkZXN0cm95TWl4KCkvY3JlYXRlTWl4KCkg
YXMgYXBwcm9wcmlhdGUuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQzo6c2V0UGxheWVySXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM6OmRlc3Ryb3lNaXgpOiBEZXRhY2ggYW5kIGRlc3Ryb3kgdGhlIEFW
QXVkaW9NaXggYW5kIHRhcC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDOjpjcmVhdGVNaXgpOiBTZXQgdXAgdGhlIEFWQXVkaW9NaXggYW5kIHRhcCBhbmQgYXR0
YWNoIHRvCisgICAgICAgICAgICB0aGUgQVZQbGF5ZXJJdGVtLgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmluaXRDYWxsYmFjayk6IFBhc3MgdG8gY2xhc3Mg
bWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmZp
bmFsaXplQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOjpwcmVwYXJlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp1bnByZXBhcmVDYWxsYmFjayk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb2Nlc3NDYWxs
YmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akM6OmluaXQpOiBTZXQgdXAgdGhlIHN0b3JhZ2UgcG9pbnRlciBmb3IgdGhlIHRhcC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5hbGl6ZSk6IE5vLW9w
LgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IENvbXBhcmUgdHdvIEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiBvYmplY3RzLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnBy
ZXBhcmUpOiBDcmVhdGUgYW4gQXVkaW9Db3ZlcnRlciBvYmplY3QgaWYgbmVjZXNzYXJ5LAorICAg
ICAgICAgICAgY3JlYXRlIHRoZSByaW5nIGJ1ZmZlciwgYW5kIG5vdGlmeSB0aGUgY2xpZW50IG9m
IGZvcm1hdCBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFW
Rk9iakM6OnVucHJlcGFyZSk6IERlc3Ryb3kgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzKTogQ29weSBzYW1wbGVzIG91dCBvZiB0aGUg
cmluZyBidWZmZXIsCisgICAgICAgICAgICBmb3JtYXQgY29udmVydGluZyB0aGVtIGlmIG5lY2Vz
c2FyeS4gTXV0ZSBvcmlnaW5hbCBhdWRpby4KKworICAgICAgICBDcmVhdGUgdGhlIEF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDIG9iamVjdCBhbmQgbm90aWZ5IGl0IHdoZW4gdGhlIGN1cnJlbnQg
QVZQbGF5ZXJJdGVtIGNoYW5nZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmF1ZGlv
U291cmNlUHJvdmlkZXIpOgorCisgICAgICAgIEFkZCBuZXcgZmlsZXMgdG8gdGhlIHByb2plY3Qu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTQt
MDctMTcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01TRV0g
UmUtZW5xdWV1ZSBhZnRlciBhIHJlbW92ZUNvZGVkRnJhbWVzKCkgb25seSBpZiB0aGUgcmVtb3Zl
ZCBmcmFtZXMgb3ZlcmxhcCB3aGF0IG1heSBoYXZlIHBvc3NpYmx5IGJlZW4gZW5xdWV1ZWQgYnV0
IHVuZGlzcGxheWVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGRiMjU1NGU0ODZkZTcxNTU2MTBkYTZiN2NjMmQ1ZjgwNDJhYjQy
ODAuLjRlY2M0NWZiM2Q2NWVjYTcxOTFlNTIyOTk2ZGI2ZjkxMmM4MDBjOTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU2NTUs
NiArNTY1NSw4IEBACiAJCUNEODIwMzBEMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi87IH07CiAJCUNEODIwMzEwMTM5NUFDRTcw
MEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEODIwMzBFMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5k
b3dBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlDRDgyMDMxMTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMEYx
Mzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSAqLzsgfTsKKwkJQ0Q4QTdC
QkIxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QTdCQjkxOTc3MzVG
RTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovOyB9OworCQlDRDhB
N0JCQzE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEE3QkJBMTk3NzM1
RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovOyB9OwogCQlDRDhC
NUE0MjE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhC
NUE0MDE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMubW0gKi87IH07CiAJCUNEOEI1QTQzMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0Q4QjVBNDExODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggKi87IH07CiAJCUNEOEI1QTQ2MTgwREZGNEUwMDhCOEU2
NSAvKiBWaWRlb1RyYWNrTWVkaWFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEOEI1QTQ1MTgwREZGNEUwMDhCOEU2NSAvKiBWaWRlb1RyYWNr
TWVkaWFTb3VyY2UuaCAqLzsgfTsKQEAgLTU3MDAsNiArNTcwMiw4IEBACiAJCUNEQzY5REQ3MTYz
MjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNjlERDUxNjMyMDI2QzAw
N0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gKi87IH07CiAJCUNEQzY5
RERBMTYzNzFGRDQwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNjlERDgx
NjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RDNjlEREIx
NjM3MUZENDAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNjlERDkxNjM3
MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tICovOyB9
OworCQlDREM3MzQxNDE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzczNDEyMTk3Nzg5NkMw
MDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3BwICovOyB9OworCQlDREM3MzQxNTE5Nzc4OTZEMDA0
NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREM3MzQxMzE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmgg
Ki87IH07CiAJCUNEQzhCNUEyMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREM4QjVBMDE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDLm1tICovOyB9OwogCQlDREM4QjVBMzE4MDQ2MzQ3MDAxNkU2ODUg
LyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBMTE4MDQ2MzQ3MDAxNkU2ODUg
LyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggKi87IH07CiAJCUNEQzhC
NUE2MTgwNDc0RjcwMDE2RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDOEI1QTQxODA0NzRG
NzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gKi87IH07CkBAIC0xMzA5
Miw2ICsxMzA5Niw4IEBACiAJCUNEODIwMzA5MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q4MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8q
IFdlYldpbmRvd0FuaW1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJXaW5kb3dBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q4MjAz
MEYxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q4QTdCQjkxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNEOEE3QkJBMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDhCNUE0
MDE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbTsgcGF0aCA9IG9iamMvVmlkZW9UcmFja1ByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOEI1
QTQxMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBWaWRlb1RyYWNrUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5oOyBwYXRoID0gb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDhCNUE0NDE4MERE
OEQ2MDA4QjhFNjUgLyogVmlkZW9UcmFja01lZGlhU291cmNlLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWRlb1RyYWNr
TWVkaWFTb3VyY2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxNjcsNiAr
MTMxNzMsOCBAQAogCQlDREM2OURENTE2MzIwMjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3Jl
ZW5XYXJuaW5nVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNEQzY5REQ4MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNl
aG9sZGVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlRnVs
bFNjcmVlblBsYWNlaG9sZGVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
REM2OUREOTE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZp
ZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlRnVs
bFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Q0RDNzM0MTIxOTc3ODk2QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDQVJpbmdCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDREM3MzQxMzE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENBUmluZ0J1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREM4QjVBMDE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
Lm1tOyBwYXRoID0gb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzhCNUExMTgwNDYzNDcwMDE2RTY4NSAv
KiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7
IHBhdGggPSBvYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREM4QjVBNDE4MDQ3NEY3MDAxNkU2ODUgLyogTWVk
aWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW07IHBhdGggPSBvYmpjL01lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTY1Miw2ICsyMTY2MCw4IEBACiAJCQkJQ0Q4QjVBNDAxODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVv
VHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovLAogCQkJCUNEN0UwNTIwMTY1MUE4
NDEwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQlDRDdFMDUy
MTE2NTFBODQxMDBDMTIwMUYgLyogV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tICovLAorCQkJ
CUNEOEE3QkI5MTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5t
bSAqLywKKwkJCQlDRDhBN0JCQTE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakMuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gb2JqYzsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC0yMzE2Miw2ICsyMzE3Miw4IEBACiAJCQkJQ0Q1NERFNDUxNzQ2OEI2RjAw
NUU1QjM2IC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwICovLAogCQkJCUNEMkY0QTI1MThE
OEEzNDkwMDYzNzQ2RCAvKiBBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYWMuY3BwICovLAogCQkJCUNE
MkY0QTI2MThEOEEzNDkwMDYzNzQ2RCAvKiBBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYWMuaCAqLywK
KwkJCQlDREM3MzQxMjE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCAqLywKKwkJ
CQlDREM3MzQxMzE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggKi8sCiAJCQkpOwog
CQkJcGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNDM4Nyw2ICsy
NDM5OSw3IEBACiAJCQkJQThFQTc5RkEwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxEaXJlY3RvcnlF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBN0NCNzBBMTkyQjlDMDBBOEVGNUYgLyog
SFRNTERpdkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4
RUY1RiAvKiBIVE1MRExpc3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREM3MzQxNTE5
Nzc4OTZEMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Yx
OThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NzdCMzg2NzEyMjg4M0U5MDBCODFGRjggLyogSFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwOURFODA5OUU2NDkyMDA1NkU1ODEgLyogaHRtbGVkaXRpbmcuaCBp
biBIZWFkZXJzICovLApAQCAtMjUwNzgsNiArMjUwOTEsNyBAQAogCQkJCUIyRkEzREEzMEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR0xlbmd0aExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEz
REE1MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjJGQTNEQTcwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGluZUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEOEE3QkJDMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQTkwQUI3
NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTWFya2VyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJGQTNEQUIwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTWFza0VsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyRkEzREFEMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR01hdHJpeC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yOTM1MCw2ICsyOTM2NCw3IEBACiAJCQkJMUE0QTk1NTIwQjRFRENGRjAw
MkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUU0NTM5MDQ2
MEVBRkQ2MzcwMDM2OTVDOCAvKiBTaGFyZWRUaW1lcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTkzMzA5RUEyMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lck1hYy5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCUNEOEE3QkJCMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQxRTFCMUQzMEZGNTk4NjkwMDU3NkIzQiAv
KiBTaGFyZWRXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFEMTY4RTcxMDIyNkU4OTAw
OUJDODI3IC8qIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUUxQjc4NDIwMTYzOUNCQkUwMDA3QjY5MiAvKiBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjk1MTUsNiArMjk1MzAsNyBAQAogCQkJCUIyMjI3OUE0MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjIyN0IwNTBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QjA2MEQwMEJG
RjEwMDcxQjc4MiAvKiBTVkdDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RDNzM0
MTQxOTc3ODk2QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMjIyN0IwODBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjIyNzlBNzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ3Vyc29yRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlBRDBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHRGVmc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZTAzMDNh
ZTFkZTg4NzQ2NGNlNzkyMWEzNTBkMTEwMTgyZWE4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcApAQCAtMCwwICsx
LDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDQVJp
bmdCdWZmZXIuaCIKKworI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2lu
Y2x1ZGUgPGxpYmtlcm4vT1NBdG9taWMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
Citjb25zdCB1aW50MzJfdCBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVTaXplID0gMzI7Citj
b25zdCB1aW50MzJfdCBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVNYXNrID0ga0dlbmVyYWxS
aW5nVGltZUJvdW5kc1F1ZXVlU2l6ZSAtIDE7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rk
Ojp1bmlxdWVfcHRyPENBUmluZ0J1ZmZlcj4gQ0FSaW5nQnVmZmVyOjpjcmVhdGUoKQoreworICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q0FSaW5nQnVmZmVyPihuZXcgQ0FSaW5nQnVmZmVyKCkp
OworfQorCitDQVJpbmdCdWZmZXI6OkNBUmluZ0J1ZmZlcigpCisgICAgOiBtX251bWJlck9mQ2hh
bm5lbHMoMCkKKyAgICAsIG1fY2FwYWNpdHlGcmFtZXMoMCkKKyAgICAsIG1fY2FwYWNpdHlCeXRl
cygwKQorICAgICwgbV90aW1lQm91bmRzUXVldWUoa0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVl
U2l6ZSkKKyAgICAsIG1fdGltZUJvdW5kc1F1ZXVlUHRyKDApCit7Cit9CisKK0NBUmluZ0J1ZmZl
cjo6fkNBUmluZ0J1ZmZlcigpCit7CisgICAgZGVhbGxvY2F0ZSgpOworfQorCit2b2lkIENBUmlu
Z0J1ZmZlcjo6YWxsb2NhdGUodWludDMyX3QgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGJ5dGVz
UGVyRnJhbWUsIHNpemVfdCBjYXBhY2l0eUZyYW1lcykKK3sKKyAgICBkZWFsbG9jYXRlKCk7CisK
KyAgICBjYXBhY2l0eUZyYW1lcyA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhjYXBhY2l0eUZy
YW1lcyk7CisKKyAgICBtX251bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5uZWxzOworICAg
IG1fYnl0ZXNQZXJGcmFtZSA9IGJ5dGVzUGVyRnJhbWU7CisgICAgbV9jYXBhY2l0eUZyYW1lcyA9
IGNhcGFjaXR5RnJhbWVzOworICAgIG1fY2FwYWNpdHlGcmFtZXNNYXNrID0gY2FwYWNpdHlGcmFt
ZXMgLSAxOworICAgIG1fY2FwYWNpdHlCeXRlcyA9IGJ5dGVzUGVyRnJhbWUgKiBjYXBhY2l0eUZy
YW1lczsKKworICAgIHNpemVfdCBwb2ludGVyc1NpemUgPSBudW1iZXJPZkNoYW5uZWxzICogc2l6
ZW9mKEJ5dGUqKTsKKyAgICBzaXplX3QgYWxsb2NTaXplID0gcG9pbnRlcnNTaXplICsgKG1fY2Fw
YWNpdHlCeXRlcyAqIG51bWJlck9mQ2hhbm5lbHMpOworICAgIG1fYnVmZmVycyA9IEFycmF5QnVm
ZmVyOjpjcmVhdGUoYWxsb2NTaXplLCAxKTsKKworICAgIEJ5dGUqKiBwb2ludGVycyA9IHN0YXRp
Y19jYXN0PEJ5dGUqKj4obV9idWZmZXJzLT5kYXRhKCkpOworICAgIEJ5dGUqIGNoYW5uZWxEYXRh
ID0gc3RhdGljX2Nhc3Q8Qnl0ZSo+KG1fYnVmZmVycy0+ZGF0YSgpKTsKKyAgICBjaGFubmVsRGF0
YSArPSBwb2ludGVyc1NpemU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9m
Q2hhbm5lbHM7ICsraSkgeworICAgICAgICBwb2ludGVyc1tpXSA9IGNoYW5uZWxEYXRhOworICAg
ICAgICBjaGFubmVsRGF0YSArPSBtX2NhcGFjaXR5Qnl0ZXM7CisgICAgfQorCisgICAgZm9yIChh
dXRvIHRpbWVCb3VuZHMgOiBtX3RpbWVCb3VuZHNRdWV1ZSkgeworICAgICAgICB0aW1lQm91bmRz
Lm1fc3RhcnRGcmFtZSA9IDA7CisgICAgICAgIHRpbWVCb3VuZHMubV9lbmRGcmFtZSA9IDA7Cisg
ICAgICAgIHRpbWVCb3VuZHMubV91cGRhdGVDb3VudGVyID0gMDsKKyAgICB9CisgICAgbV90aW1l
Qm91bmRzUXVldWVQdHIgPSAwOworfQorCit2b2lkIENBUmluZ0J1ZmZlcjo6ZGVhbGxvY2F0ZSgp
Cit7CisgICAgaWYgKG1fYnVmZmVycykKKyAgICAgICAgbV9idWZmZXJzLmNsZWFyKCk7CisKKyAg
ICBtX251bWJlck9mQ2hhbm5lbHMgPSAwOworICAgIG1fY2FwYWNpdHlCeXRlcyA9IDA7CisgICAg
bV9jYXBhY2l0eUZyYW1lcyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIFplcm9SYW5nZShCeXRlKiog
YnVmZmVycywgaW50IG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuYnl0
ZXMpCit7CisgICAgd2hpbGUgKC0tbnVtYmVyT2ZDaGFubmVscyA+PSAwKSB7CisgICAgICAgIG1l
bXNldCgqYnVmZmVycyArIG9mZnNldCwgMCwgbmJ5dGVzKTsKKyAgICAgICAgKytidWZmZXJzOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgU3RvcmVBQkwoQnl0ZSoqIGJ1ZmZlcnMsIHNpemVfdCBk
ZXN0T2Zmc2V0LCBjb25zdCBBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBzcmNPZmZzZXQs
IHNpemVfdCBuYnl0ZXMpCit7CisgICAgaW50IG51bWJlck9mQ2hhbm5lbHMgPSBsaXN0LT5tTnVt
YmVyQnVmZmVyczsKKyAgICBjb25zdCBBdWRpb0J1ZmZlciogc3JjID0gbGlzdC0+bUJ1ZmZlcnM7
CisgICAgd2hpbGUgKC0tbnVtYmVyT2ZDaGFubmVscyA+PSAwKSB7CisgICAgICAgIGlmIChzcmNP
ZmZzZXQgPiBzcmMtPm1EYXRhQnl0ZVNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgbWVtY3B5KCpidWZmZXJzICsgZGVzdE9mZnNldCwgc3RhdGljX2Nhc3Q8Qnl0ZSAqPihzcmMt
Pm1EYXRhKSArIHNyY09mZnNldCwgc3RkOjptaW48c2l6ZV90PihuYnl0ZXMsIHNyYy0+bURhdGFC
eXRlU2l6ZSAtIHNyY09mZnNldCkpOworICAgICAgICArK2J1ZmZlcnM7CisgICAgICAgICsrc3Jj
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgRmV0Y2hBQkwoQXVkaW9CdWZmZXJMaXN0KiBsaXN0
LCBzaXplX3QgZGVzdE9mZnNldCwgQnl0ZSoqIGJ1ZmZlcnMsIHNpemVfdCBzcmNPZmZzZXQsIHNp
emVfdCBuYnl0ZXMpCit7CisgICAgaW50IG51bWJlck9mQ2hhbm5lbHMgPSBsaXN0LT5tTnVtYmVy
QnVmZmVyczsKKyAgICBBdWRpb0J1ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJzOworICAgIHdo
aWxlICgtLW51bWJlck9mQ2hhbm5lbHMgPj0gMCkgeworICAgICAgICBpZiAoZGVzdE9mZnNldCA+
IGRlc3QtPm1EYXRhQnl0ZVNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbWVt
Y3B5KHN0YXRpY19jYXN0PEJ5dGUqPihkZXN0LT5tRGF0YSkgKyBkZXN0T2Zmc2V0LCAqYnVmZmVy
cyArIHNyY09mZnNldCwgc3RkOjptaW48c2l6ZV90PihuYnl0ZXMsIGRlc3QtPm1EYXRhQnl0ZVNp
emUgLSBkZXN0T2Zmc2V0KSk7CisgICAgICAgICsrYnVmZmVyczsKKyAgICAgICAgKytkZXN0Owor
ICAgIH0KK30KKworaW5saW5lIHZvaWQgWmVyb0FCTChBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNp
emVfdCBkZXN0T2Zmc2V0LCBzaXplX3QgbmJ5dGVzKQoreworICAgIGludCBuQnVmZmVycyA9IGxp
c3QtPm1OdW1iZXJCdWZmZXJzOworICAgIEF1ZGlvQnVmZmVyKiBkZXN0ID0gbGlzdC0+bUJ1ZmZl
cnM7CisgICAgd2hpbGUgKC0tbkJ1ZmZlcnMgPj0gMCkgeworICAgICAgICBpZiAoZGVzdE9mZnNl
dCA+IGRlc3QtPm1EYXRhQnl0ZVNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
bWVtc2V0KHN0YXRpY19jYXN0PEJ5dGUqPihkZXN0LT5tRGF0YSkgKyBkZXN0T2Zmc2V0LCAwLCBz
dGQ6Om1pbjxzaXplX3Q+KG5ieXRlcywgZGVzdC0+bURhdGFCeXRlU2l6ZSAtIGRlc3RPZmZzZXQp
KTsKKyAgICAgICAgKytkZXN0OworICAgIH0KK30KKworQ0FSaW5nQnVmZmVyOjpFcnJvciBDQVJp
bmdCdWZmZXI6OnN0b3JlKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGZyYW1l
c1RvV3JpdGUsIHVpbnQ2NF90IHN0YXJ0V3JpdGUpCit7CisgICAgaWYgKCFmcmFtZXNUb1dyaXRl
KQorICAgICAgICByZXR1cm4gT2s7CisKKyAgICBpZiAoZnJhbWVzVG9Xcml0ZSA+IG1fY2FwYWNp
dHlGcmFtZXMpCisgICAgICAgIHJldHVybiBUb29NdWNoOworCisgICAgdWludDY0X3QgZW5kV3Jp
dGUgPSBzdGFydFdyaXRlICsgZnJhbWVzVG9Xcml0ZTsKKworICAgIGlmIChzdGFydFdyaXRlIDwg
ZW5kRnJhbWUoKSkgeworICAgICAgICAvLyBnb2luZyBiYWNrd2FyZHMsIHRocm93IGV2ZXJ5dGhp
bmcgb3V0CisgICAgICAgIHNldFRpbWVCb3VuZHMoc3RhcnRXcml0ZSwgc3RhcnRXcml0ZSk7Cisg
ICAgfSBlbHNlIGlmIChlbmRXcml0ZSAtIHN0YXJ0RnJhbWUoKSA8PSBtX2NhcGFjaXR5RnJhbWVz
KSB7CisgICAgICAgIC8vIHRoZSBidWZmZXIgaGFzIG5vdCB5ZXQgd3JhcHBlZCBhbmQgd2lsbCBu
b3QgbmVlZCB0by4KKyAgICAgICAgLy8gTm8tb3AuCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
YWR2YW5jZSB0aGUgc3RhcnQgdGltZSBwYXN0IHRoZSByZWdpb24gd2UgYXJlIGFib3V0IHRvIG92
ZXJ3cml0ZQorICAgICAgICB1aW50NjRfdCBuZXdTdGFydCA9IGVuZFdyaXRlIC0gbV9jYXBhY2l0
eUZyYW1lczsgLy8gb25lIGJ1ZmZlciBvZiB0aW1lIGJlaGluZCB3aGVyZSB3ZSdyZSB3cml0aW5n
CisgICAgICAgIHVpbnQ2NF90IG5ld0VuZCA9IHN0ZDo6bWF4KG5ld1N0YXJ0LCBlbmRGcmFtZSgp
KTsKKyAgICAgICAgc2V0VGltZUJvdW5kcyhuZXdTdGFydCwgbmV3RW5kKTsKKyAgICB9CisKKyAg
ICAvLyB3cml0ZSB0aGUgbmV3IGZyYW1lcworICAgIEJ5dGUqKiBidWZmZXJzID0gc3RhdGljX2Nh
c3Q8Qnl0ZSoqPihtX2J1ZmZlcnMtPmRhdGEoKSk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZDaGFu
bmVscyA9IG1fbnVtYmVyT2ZDaGFubmVsczsKKyAgICBzaXplX3Qgb2Zmc2V0MDsKKyAgICBzaXpl
X3Qgb2Zmc2V0MTsKKyAgICB1aW50NjRfdCBjdXJFbmQgPSBlbmRGcmFtZSgpOworCisgICAgaWYg
KHN0YXJ0V3JpdGUgPiBjdXJFbmQpIHsKKyAgICAgICAgLy8gd2UgYXJlIHNraXBwaW5nIHNvbWUg
c2FtcGxlcywgc28gemVybyB0aGUgcmFuZ2Ugd2UgYXJlIHNraXBwaW5nCisgICAgICAgIG9mZnNl
dDAgPSBmcmFtZU9mZnNldChjdXJFbmQpOworICAgICAgICBvZmZzZXQxID0gZnJhbWVPZmZzZXQo
c3RhcnRXcml0ZSk7CisgICAgICAgIGlmIChvZmZzZXQwIDwgb2Zmc2V0MSkKKyAgICAgICAgICAg
IFplcm9SYW5nZShidWZmZXJzLCBudW1iZXJPZkNoYW5uZWxzLCBvZmZzZXQwLCBvZmZzZXQxIC0g
b2Zmc2V0MCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgWmVyb1JhbmdlKGJ1ZmZlcnMs
IG51bWJlck9mQ2hhbm5lbHMsIG9mZnNldDAsIG1fY2FwYWNpdHlCeXRlcyAtIG9mZnNldDApOwor
ICAgICAgICAgICAgWmVyb1JhbmdlKGJ1ZmZlcnMsIG51bWJlck9mQ2hhbm5lbHMsIDAsIG9mZnNl
dDEpOworICAgICAgICB9CisgICAgICAgIG9mZnNldDAgPSBvZmZzZXQxOworICAgIH0gZWxzZQor
ICAgICAgICBvZmZzZXQwID0gZnJhbWVPZmZzZXQoc3RhcnRXcml0ZSk7CisKKyAgICBvZmZzZXQx
ID0gZnJhbWVPZmZzZXQoZW5kV3JpdGUpOworICAgIGlmIChvZmZzZXQwIDwgb2Zmc2V0MSkKKyAg
ICAgICAgU3RvcmVBQkwoYnVmZmVycywgb2Zmc2V0MCwgbGlzdCwgMCwgb2Zmc2V0MSAtIG9mZnNl
dDApOworICAgIGVsc2UgeworICAgICAgICBzaXplX3QgbmJ5dGVzID0gbV9jYXBhY2l0eUJ5dGVz
IC0gb2Zmc2V0MDsKKyAgICAgICAgU3RvcmVBQkwoYnVmZmVycywgb2Zmc2V0MCwgbGlzdCwgMCwg
bmJ5dGVzKTsKKyAgICAgICAgU3RvcmVBQkwoYnVmZmVycywgMCwgbGlzdCwgbmJ5dGVzLCBvZmZz
ZXQxKTsKKyAgICB9CisKKyAgICAvLyBub3cgdXBkYXRlIHRoZSBlbmQgdGltZQorICAgIHNldFRp
bWVCb3VuZHMoc3RhcnRGcmFtZSgpLCBlbmRXcml0ZSk7CisKKyAgICByZXR1cm4gT2s7Cit9CisK
K3ZvaWQgQ0FSaW5nQnVmZmVyOjpzZXRUaW1lQm91bmRzKHVpbnQ2NF90IHN0YXJ0VGltZSwgdWlu
dDY0X3QgZW5kVGltZSkKK3sKKyAgICB1aW50MzJfdCBuZXh0UHRyID0gbV90aW1lQm91bmRzUXVl
dWVQdHIgKyAxOworICAgIHVpbnQzMl90IGluZGV4ID0gbmV4dFB0ciAmIGtHZW5lcmFsUmluZ1Rp
bWVCb3VuZHNRdWV1ZU1hc2s7CisKKyAgICBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF0ubV9zdGFy
dEZyYW1lID0gc3RhcnRUaW1lOworICAgIG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX2VuZEZy
YW1lID0gZW5kVGltZTsKKyAgICBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF0ubV91cGRhdGVDb3Vu
dGVyID0gbmV4dFB0cjsKKyAgICBPU0F0b21pY0luY3JlbWVudDMyQmFycmllcihzdGF0aWNfY2Fz
dDxpbnQzMl90Kj4oJm1fdGltZUJvdW5kc1F1ZXVlUHRyKSk7Cit9CisKK0NBUmluZ0J1ZmZlcjo6
RXJyb3IgQ0FSaW5nQnVmZmVyOjpnZXRUaW1lQm91bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVp
bnQ2NF90ICZlbmRUaW1lKQoreworICAgIC8vIGZhaWwgYWZ0ZXIgYSBmZXcgdHJpZXMuCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA4OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgY3VyUHRyID0g
bV90aW1lQm91bmRzUXVldWVQdHI7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0gY3VyUHRyICYg
a0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFzazsKKyAgICAgICAgQ0FSaW5nQnVmZmVyOjpU
aW1lQm91bmRzJiBib3VuZHMgPSBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF07CisKKyAgICAgICAg
aWYgKGJvdW5kcy5tX3VwZGF0ZUNvdW50ZXIgIT0gY3VyUHRyKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgc3RhcnRUaW1lID0gYm91bmRzLm1fc3RhcnRGcmFtZTsKKyAgICAgICAg
ZW5kVGltZSA9IGJvdW5kcy5tX2VuZEZyYW1lOworICAgICAgICByZXR1cm4gT2s7CisgICAgfQor
ICAgIHJldHVybiBDUFVPdmVybG9hZDsKK30KKworQ0FSaW5nQnVmZmVyOjpFcnJvciBDQVJpbmdC
dWZmZXI6OmNsaXBUaW1lQm91bmRzKHVpbnQ2NF90JiBzdGFydFJlYWQsIHVpbnQ2NF90JiBlbmRS
ZWFkKQoreworICAgIHVpbnQ2NF90IHN0YXJ0VGltZTsKKyAgICB1aW50NjRfdCBlbmRUaW1lOwor
CisgICAgaWYgKGF1dG8gZXJyb3IgPSBnZXRUaW1lQm91bmRzKHN0YXJ0VGltZSwgZW5kVGltZSkp
CisgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgIGlmIChzdGFydFJlYWQgPiBlbmRUaW1lIHx8
IGVuZFJlYWQgPCBzdGFydFRpbWUpIHsKKyAgICAgICAgZW5kUmVhZCA9IHN0YXJ0UmVhZDsKKyAg
ICAgICAgcmV0dXJuIE9rOworICAgIH0KKworICAgIHN0YXJ0UmVhZCA9IHN0ZDo6bWF4KHN0YXJ0
UmVhZCwgc3RhcnRUaW1lKTsKKyAgICBlbmRSZWFkID0gc3RkOjptaW4oZW5kUmVhZCwgZW5kVGlt
ZSk7CisgICAgZW5kUmVhZCA9IHN0ZDo6bWF4KGVuZFJlYWQsIHN0YXJ0UmVhZCk7CisKKyAgICBy
ZXR1cm4gT2s7IC8vIHN1Y2Nlc3MKK30KKwordWludDY0X3QgQ0FSaW5nQnVmZmVyOjpzdGFydEZy
YW1lKCkgY29uc3QKK3sKKyAgICB1aW50MzJfdCBpbmRleCA9IG1fdGltZUJvdW5kc1F1ZXVlUHRy
ICYga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFzazsKKyAgICByZXR1cm4gbV90aW1lQm91
bmRzUXVldWVbaW5kZXhdLm1fc3RhcnRGcmFtZTsKK30KKwordWludDY0X3QgQ0FSaW5nQnVmZmVy
OjplbmRGcmFtZSgpIGNvbnN0Cit7CisgICAgdWludDMyX3QgaW5kZXggPSBtX3RpbWVCb3VuZHNR
dWV1ZVB0ciAmIGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2s7CisgICAgcmV0dXJuIG1f
dGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX2VuZEZyYW1lOworfQorCitDQVJpbmdCdWZmZXI6OkVy
cm9yIENBUmluZ0J1ZmZlcjo6ZmV0Y2goQXVkaW9CdWZmZXJMaXN0KiBsaXN0LCBzaXplX3QgbkZy
YW1lcywgdWludDY0X3Qgc3RhcnRSZWFkKQoreworICAgIGlmICghbkZyYW1lcykKKyAgICAgICAg
cmV0dXJuIE9rOworICAgIAorICAgIHN0YXJ0UmVhZCA9IHN0ZDo6bWF4PHVpbnQ2NF90PigwLCBz
dGFydFJlYWQpOworICAgIAorICAgIHVpbnQ2NF90IGVuZFJlYWQgPSBzdGFydFJlYWQgKyBuRnJh
bWVzOworICAgIAorICAgIHVpbnQ2NF90IHN0YXJ0UmVhZDAgPSBzdGFydFJlYWQ7CisgICAgdWlu
dDY0X3QgZW5kUmVhZDAgPSBlbmRSZWFkOworICAgIAorICAgIEVycm9yIGVyciA9IGNsaXBUaW1l
Qm91bmRzKHN0YXJ0UmVhZCwgZW5kUmVhZCk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJu
IGVycjsKKyAgICAKKyAgICBpZiAoc3RhcnRSZWFkID09IGVuZFJlYWQpIHsKKyAgICAgICAgWmVy
b0FCTChsaXN0LCAwLCBuRnJhbWVzICogbV9ieXRlc1BlckZyYW1lKTsKKyAgICAgICAgcmV0dXJu
IE9rOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgYnl0ZVNpemUgPSAoZW5kUmVhZCAtIHN0YXJ0
UmVhZCkgKiBtX2J5dGVzUGVyRnJhbWU7CisgICAgCisgICAgc2l6ZV90IGRlc3RTdGFydEJ5dGVP
ZmZzZXQgPSBzdGQ6Om1heDxzaXplX3Q+KDAsIChzdGFydFJlYWQgLSBzdGFydFJlYWQwKSAqIG1f
Ynl0ZXNQZXJGcmFtZSk7CisgICAgCisgICAgaWYgKGRlc3RTdGFydEJ5dGVPZmZzZXQgPiAwKQor
ICAgICAgICBaZXJvQUJMKGxpc3QsIDAsIHN0ZDo6bWluPHNpemVfdD4obkZyYW1lcyAqIG1fYnl0
ZXNQZXJGcmFtZSwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCkpOworCisgICAgc2l6ZV90IGRlc3RFbmRT
aXplID0gc3RkOjptYXg8c2l6ZV90PigwLCBlbmRSZWFkMCAtIGVuZFJlYWQpOworICAgIGlmIChk
ZXN0RW5kU2l6ZSA+IDApCisgICAgICAgIFplcm9BQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNl
dCArIGJ5dGVTaXplLCBkZXN0RW5kU2l6ZSAqIG1fYnl0ZXNQZXJGcmFtZSk7CisKKyAgICBCeXRl
ICoqYnVmZmVycyA9IHN0YXRpY19jYXN0PEJ5dGUqKj4obV9idWZmZXJzLT5kYXRhKCkpOworICAg
IHNpemVfdCBvZmZzZXQwID0gZnJhbWVPZmZzZXQoc3RhcnRSZWFkKTsKKyAgICBzaXplX3Qgb2Zm
c2V0MSA9IGZyYW1lT2Zmc2V0KGVuZFJlYWQpOworICAgIHNpemVfdCBuYnl0ZXM7CisgICAgCisg
ICAgaWYgKG9mZnNldDAgPCBvZmZzZXQxKSB7CisgICAgICAgIG5ieXRlcyA9IG9mZnNldDEgLSBv
ZmZzZXQwOworICAgICAgICBGZXRjaEFCTChsaXN0LCBkZXN0U3RhcnRCeXRlT2Zmc2V0LCBidWZm
ZXJzLCBvZmZzZXQwLCBuYnl0ZXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIG5ieXRlcyA9IG1f
Y2FwYWNpdHlCeXRlcyAtIG9mZnNldDA7CisgICAgICAgIEZldGNoQUJMKGxpc3QsIGRlc3RTdGFy
dEJ5dGVPZmZzZXQsIGJ1ZmZlcnMsIG9mZnNldDAsIG5ieXRlcyk7CisgICAgICAgIEZldGNoQUJM
KGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQgKyBuYnl0ZXMsIGJ1ZmZlcnMsIDAsIG9mZnNldDEp
OworICAgICAgICBuYnl0ZXMgKz0gb2Zmc2V0MTsKKyAgICB9CisgICAgCisgICAgaW50IG51bWJl
ck9mQ2hhbm5lbHMgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKKyAgICBBdWRpb0J1ZmZlciogZGVz
dCA9IGxpc3QtPm1CdWZmZXJzOworICAgIHdoaWxlICgtLW51bWJlck9mQ2hhbm5lbHMgPj0gMCkg
eworICAgICAgICBkZXN0LT5tRGF0YUJ5dGVTaXplID0gbmJ5dGVzOworICAgICAgICBkZXN0Kys7
CisgICAgfQorICAgIAorICAgIHJldHVybiBPazsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3ODkyODc0
ZmEzYzFlYjk1ZGE2MTk0YzU5ZGM4YjkxZWNiZjA0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmgKQEAgLTAsMCArMSw5
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0FSaW5nQnVmZmVyX2gKKyNkZWZpbmUgQ0FSaW5n
QnVmZmVyX2gKKworI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK3R5cGVkZWYgc3RydWN0IEF1ZGlvQnVmZmVyTGlzdCBBdWRpb0J1ZmZl
ckxpc3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0FSaW5nQnVmZmVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENBUmluZ0J1ZmZlcj4gY3JlYXRlKCk7
CisgICAgfkNBUmluZ0J1ZmZlcigpOworCisgICAgZW51bSBFcnJvciB7CisgICAgICAgIE9rLAor
ICAgICAgICBUb29NdWNoLCAvLyBmZXRjaCBzdGFydCB0aW1lIGlzIGVhcmxpZXIgdGhhbiBidWZm
ZXIgc3RhcnQgdGltZSBhbmQgZmV0Y2ggZW5kIHRpbWUgaXMgbGF0ZXIgdGhhbiBidWZmZXIgZW5k
IHRpbWUKKyAgICAgICAgQ1BVT3ZlcmxvYWQsIC8vIHRoZSByZWFkZXIgaXMgdW5hYmxlIHRvIGdl
dCBlbm91Z2ggQ1BVIGN5Y2xlcyB0byBjYXB0dXJlIGEgY29uc2lzdGVudCBzbmFwc2hvdCBvZiB0
aGUgdGltZSBib3VuZHMKKyAgICB9OworCisgICAgdm9pZCBhbGxvY2F0ZSh1aW50MzJfdCBtX251
bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBieXRlc1BlckZyYW1lLCBzaXplX3QgY2FwYWNpdHlGcmFt
ZXMpOworICAgIHZvaWQgZGVhbGxvY2F0ZSgpOworICAgIEVycm9yIHN0b3JlKGNvbnN0IEF1ZGlv
QnVmZmVyTGlzdCosIHNpemVfdCBmcmFtZUNvdW50LCB1aW50NjRfdCBmcmFtZU51bWJlcik7Cisg
ICAgRXJyb3IgZmV0Y2goQXVkaW9CdWZmZXJMaXN0Kiwgc2l6ZV90IGZyYW1lQ291bnQsIHVpbnQ2
NF90IGZyYW1lTnVtYmVyKTsKKyAgICBFcnJvciBnZXRUaW1lQm91bmRzKHVpbnQ2NF90ICZzdGFy
dFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1lKTsKKworICAgIHVpbnQzMl90IG51bWJlck9mQ2hhbm5l
bHMoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mQ2hhbm5lbHM7IH0KKworcHJpdmF0ZToKKyAg
ICBDQVJpbmdCdWZmZXIoKTsKKworICAgIHNpemVfdCBmcmFtZU9mZnNldCh1aW50NjRfdCBmcmFt
ZU51bWJlcikgeyByZXR1cm4gKGZyYW1lTnVtYmVyICYgbV9jYXBhY2l0eUZyYW1lc01hc2spICog
bV9ieXRlc1BlckZyYW1lOyB9CisKKyAgICBFcnJvciBjbGlwVGltZUJvdW5kcyh1aW50NjRfdCYg
c3RhcnRSZWFkLCB1aW50NjRfdCYgZW5kUmVhZCk7CisKKyAgICB1aW50NjRfdCBzdGFydEZyYW1l
KCkgY29uc3Q7CisgICAgdWludDY0X3QgZW5kRnJhbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFRp
bWVCb3VuZHModWludDY0X3Qgc3RhcnRUaW1lLCB1aW50NjRfdCBlbmRUaW1lKTsKKworICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gbV9idWZmZXJzOworICAgIHVpbnQzMl90IG1fbnVtYmVyT2ZDaGFu
bmVsczsKKyAgICBzaXplX3QgbV9ieXRlc1BlckZyYW1lOworICAgIHVpbnQzMl90IG1fY2FwYWNp
dHlGcmFtZXM7CisgICAgdWludDMyX3QgbV9jYXBhY2l0eUZyYW1lc01hc2s7CisgICAgc2l6ZV90
IG1fY2FwYWNpdHlCeXRlczsKKworICAgIHN0cnVjdCBUaW1lQm91bmRzIHsKKyAgICAgICAgVGlt
ZUJvdW5kcygpCisgICAgICAgICAgICA6IG1fc3RhcnRGcmFtZSgwKQorICAgICAgICAgICAgLCBt
X2VuZEZyYW1lKDApCisgICAgICAgICAgICAsIG1fdXBkYXRlQ291bnRlcigwKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgdm9sYXRpbGUgdWludDY0X3QgbV9zdGFydEZyYW1lOworICAg
ICAgICB2b2xhdGlsZSB1aW50NjRfdCBtX2VuZEZyYW1lOworICAgICAgICB2b2xhdGlsZSB1aW50
MzJfdCBtX3VwZGF0ZUNvdW50ZXI7CisgICAgfTsKKyAgICAKKyAgICBWZWN0b3I8VGltZUJvdW5k
cz4gbV90aW1lQm91bmRzUXVldWU7CisgICAgaW50MzJfdCBtX3RpbWVCb3VuZHNRdWV1ZVB0cjsK
K307CisKK30KKworCisjZW5kaWYgLy8gQ0FSaW5nQnVmZmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWU4OTQ2ZTNjZTkz
YmMwMzg0NmU4NDg1MzQzM2FlZmM4NDdlNjI1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQy5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDX2gKKyNkZWZpbmUgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakNfaAor
CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIu
aCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgQVZQbGF5ZXJJdGVtOwor
T0JKQ19DTEFTUyBBVk11dGFibGVBdWRpb01peDsKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3Bh
cXVlTVRBdWRpb1Byb2Nlc3NpbmdUYXAgKk1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmOwordHlwZWRl
ZiBzdHJ1Y3QgQXVkaW9CdWZmZXJMaXN0IEF1ZGlvQnVmZmVyTGlzdDsKK3R5cGVkZWYgc3RydWN0
IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb247
Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVBdWRpb0NvbnZlcnRlciogQXVkaW9Db252ZXJ0ZXJSZWY7
Cit0eXBlZGVmIHVpbnQzMl90IE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3M7Cit0eXBlZGVmIHNp
Z25lZCBsb25nIENNSXRlbUNvdW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENB
UmluZ0J1ZmZlcjsKKworY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMgOiBwdWJsaWMg
UmVmQ291bnRlZDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQz4sIHB1YmxpYyBBdWRpb1NvdXJj
ZVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQz4gY3JlYXRlKEFWUGxheWVySXRlbSopOworICAgIHZpcnR1YWwgfkF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDKCk7CisKKyAgICB2b2lkIHNldFBsYXllckl0ZW0oQVZQbGF5
ZXJJdGVtKik7CisKK3ByaXZhdGU6CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoQVZQ
bGF5ZXJJdGVtKik7CisKKyAgICB2b2lkIGRlc3Ryb3lNaXgoKTsKKyAgICB2b2lkIGNyZWF0ZU1p
eCgpOworCisgICAgLy8gQXVkaW9Tb3VyY2VQcm92aWRlcgorICAgIHZpcnR1YWwgdm9pZCBwcm92
aWRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQqKSBvdmVy
cmlkZTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1Rh
cFJlZiwgdm9pZCosIHZvaWQqKik7CisgICAgc3RhdGljIHZvaWQgZmluYWxpemVDYWxsYmFjayhN
VEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZik7CisgICAgc3RhdGljIHZvaWQgcHJlcGFyZUNhbGxiYWNr
KE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmLCBDTUl0ZW1Db3VudCwgY29uc3QgQXVkaW9TdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uKik7CisgICAgc3RhdGljIHZvaWQgdW5wcmVwYXJlQ2FsbGJhY2soTVRB
dWRpb1Byb2Nlc3NpbmdUYXBSZWYpOworICAgIHN0YXRpYyB2b2lkIHByb2Nlc3NDYWxsYmFjayhN
VEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiwgQ01JdGVtQ291bnQsIE1UQXVkaW9Qcm9jZXNzaW5nVGFw
RmxhZ3MsIEF1ZGlvQnVmZmVyTGlzdCosIENNSXRlbUNvdW50KiwgTVRBdWRpb1Byb2Nlc3NpbmdU
YXBGbGFncyopOworCisgICAgdm9pZCBpbml0KHZvaWQqIGNsaWVudEluZm8sIHZvaWQqKiB0YXBT
dG9yYWdlT3V0KTsKKyAgICB2b2lkIGZpbmFsaXplKCk7CisgICAgdm9pZCBwcmVwYXJlKENNSXRl
bUNvdW50IG1heEZyYW1lcywgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uICpwcm9j
ZXNzaW5nRm9ybWF0KTsKKyAgICB2b2lkIHVucHJlcGFyZSgpOworICAgIHZvaWQgcHJvY2VzcyhD
TUl0ZW1Db3VudCBudW1iZXJGcmFtZXMsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MgZmxhZ3NJ
biwgQXVkaW9CdWZmZXJMaXN0ICpidWZmZXJMaXN0SW5PdXQsIENNSXRlbUNvdW50ICpudW1iZXJG
cmFtZXNPdXQsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MgKmZsYWdzT3V0KTsKKworICAgIFJl
dGFpblB0cjxBVlBsYXllckl0ZW0+IG1fYXZQbGF5ZXJJdGVtOworICAgIFJldGFpblB0cjxBVk11
dGFibGVBdWRpb01peD4gbV9hdkF1ZGlvTWl4OworICAgIFJldGFpblB0cjxNVEF1ZGlvUHJvY2Vz
c2luZ1RhcFJlZj4gbV90YXA7CisgICAgUmV0YWluUHRyPEF1ZGlvQ29udmVydGVyUmVmPiBtX2Nv
bnZlcnRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9CdWZmZXJMaXN0PiBtX2xpc3Q7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbj4gbV90YXBEZXNj
cmlwdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
PiBtX291dHB1dERlc2NyaXB0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDQVJpbmdCdWZmZXI+
IG1fcmluZ0J1ZmZlcjsKKworICAgIHVpbnQ2NF90IG1fd3JpdGVDb3VudDsKKyAgICB1aW50NjRf
dCBtX3JlYWRDb3VudDsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50KiBtX2NsaWVudDsK
K307CisgICAgCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9B
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNGZiNjI5NjlkMmU1ZmYw
MGM5M2VlOTFmZWEwMjIxYmQ0MTQ2ZjIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDLm1tCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIgorCisjaW1wb3J0ICJBdWRpb0J1
cy5oIgorI2ltcG9ydCAiQXVkaW9DaGFubmVsLmgiCisjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3Zp
ZGVyQ2xpZW50LmgiCisjaW1wb3J0ICJDQVJpbmdCdWZmZXIuaCIKKyNpbXBvcnQgIk1lZGlhVGlt
ZU1hYy5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9B
VkFzc2V0VHJhY2suaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkF1ZGlvTWl4Lmg+CisjaW1w
b3J0IDxBVkZvdW5kYXRpb24vQVZNZWRpYUZvcm1hdC5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9u
L0FWUGxheWVySXRlbS5oPgorI2ltcG9ydCA8TWVkaWFUb29sYm94L01UQXVkaW9Qcm9jZXNzaW5n
VGFwLmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFk
Lmg+CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91
bmRhdGlvbikKK1NPRlRfTElOS19GUkFNRVdPUksoTWVkaWFUb29sYm94KQorU09GVF9MSU5LX0ZS
QU1FV09SSyhBdWRpb1Rvb2xib3gpCisKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFW
UGxheWVySXRlbSkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWTXV0YWJsZUF1ZGlv
TWl4KQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZNdXRhYmxlQXVkaW9NaXhJbnB1
dFBhcmFtZXRlcnMpCisKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvQ29udmVydGVyQ29u
dmVydENvbXBsZXhCdWZmZXIsIE9TU3RhdHVzLCAoQXVkaW9Db252ZXJ0ZXJSZWYgaW5BdWRpb0Nv
bnZlcnRlciwgVUludDMyIGluTnVtYmVyUENNRnJhbWVzLCBjb25zdCBBdWRpb0J1ZmZlckxpc3Qq
IGluSW5wdXREYXRhLCBBdWRpb0J1ZmZlckxpc3QqIG91dE91dHB1dERhdGEpLCAoaW5BdWRpb0Nv
bnZlcnRlciwgaW5OdW1iZXJQQ01GcmFtZXMsIGluSW5wdXREYXRhLCBvdXRPdXRwdXREYXRhKSkK
K1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvQ29udmVydGVyTmV3LCBPU1N0YXR1cywgKGNv
bnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiogaW5Tb3VyY2VGb3JtYXQsIGNvbnN0IEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiogaW5EZXN0aW5hdGlvbkZvcm1hdCwgQXVkaW9Db252
ZXJ0ZXJSZWYqIG91dEF1ZGlvQ29udmVydGVyKSwgKGluU291cmNlRm9ybWF0LCBpbkRlc3RpbmF0
aW9uRm9ybWF0LCBvdXRBdWRpb0NvbnZlcnRlcikpCisKK1NPRlRfTElOSyhNZWRpYVRvb2xib3gs
IE1UQXVkaW9Qcm9jZXNzaW5nVGFwR2V0U3RvcmFnZSwgdm9pZCosIChNVEF1ZGlvUHJvY2Vzc2lu
Z1RhcFJlZiB0YXApLCAodGFwKSkKK1NPRlRfTElOSyhNZWRpYVRvb2xib3gsIE1UQXVkaW9Qcm9j
ZXNzaW5nVGFwR2V0U291cmNlQXVkaW8sIE9TU3RhdHVzLCAoTVRBdWRpb1Byb2Nlc3NpbmdUYXBS
ZWYgdGFwLCBDTUl0ZW1Db3VudCBudW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCAqYnVmZmVy
TGlzdEluT3V0LCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEZsYWdzICpmbGFnc091dCwgQ01UaW1lUmFu
Z2UgKnRpbWVSYW5nZU91dCwgQ01JdGVtQ291bnQgKm51bWJlckZyYW1lc091dCksICh0YXAsIG51
bWJlckZyYW1lcywgYnVmZmVyTGlzdEluT3V0LCBmbGFnc091dCwgdGltZVJhbmdlT3V0LCBudW1i
ZXJGcmFtZXNPdXQpKQorU09GVF9MSU5LKE1lZGlhVG9vbGJveCwgTVRBdWRpb1Byb2Nlc3NpbmdU
YXBDcmVhdGUsIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBjb25zdCBNVEF1
ZGlvUHJvY2Vzc2luZ1RhcENhbGxiYWNrcyAqY2FsbGJhY2tzLCBNVEF1ZGlvUHJvY2Vzc2luZ1Rh
cENyZWF0aW9uRmxhZ3MgZmxhZ3MsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmICp0YXBPdXQpLCAo
YWxsb2NhdG9yLCBjYWxsYmFja3MsIGZsYWdzLCB0YXBPdXQpKQorCitTT0ZUX0xJTktfUE9JTlRF
UihBVkZvdW5kYXRpb24sIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUsIE5TU3RyaW5nICop
CisjZGVmaW5lIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUgZ2V0QVZNZWRpYUNoYXJhY3Rl
cmlzdGljQXVkaWJsZSgpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGRvdWJsZSBr
UmluZ0J1ZmZlckR1cmF0aW9uID0gMTsKKworUGFzc1JlZlB0cjxBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQz4gQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmNyZWF0ZShBVlBsYXllckl0ZW0q
IGl0ZW0pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQyhpdGVtKSk7Cit9CisKK0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQyhBVlBsYXllckl0ZW0qIGl0ZW0pCisgICAgOiBtX2F2UGxheWVySXRl
bShpdGVtKQorICAgICwgbV93cml0ZUNvdW50KDApCisgICAgLCBtX3JlYWRDb3VudCgwKQorICAg
ICwgbV9jbGllbnQobnVsbHB0cikKK3sKK30KKworQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6
On5BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQygpCit7CisgICAgc2V0Q2xpZW50KG51bGxwdHIp
OworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm92aWRlSW5wdXQoQXVk
aW9CdXMqIGJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICB1aW50NjRfdCBzdGFy
dEZyYW1lID0gMDsKKyAgICB1aW50NjRfdCBlbmRGcmFtZSA9IDA7CisgICAgbV9yaW5nQnVmZmVy
LT5nZXRUaW1lQm91bmRzKHN0YXJ0RnJhbWUsIGVuZEZyYW1lKTsKKworICAgIHVpbnQ2NF90IGF2
YWlsYWJsZUZyYW1lcyA9IGVuZEZyYW1lIC0gbV9yZWFkQ291bnQ7CisgICAgaWYgKGF2YWlsYWJs
ZUZyYW1lcyA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoYnVzLT5udW1iZXJP
ZkNoYW5uZWxzKCkgPT0gbV9yaW5nQnVmZmVyLT5udW1iZXJPZkNoYW5uZWxzKCkpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGlzdC0+bU51bWJlckJ1ZmZlcnM7ICsraSkgewor
ICAgICAgICBBdWRpb0NoYW5uZWwqIGNoYW5uZWwgPSBidXMtPmNoYW5uZWwoaSk7CisgICAgICAg
IG1fbGlzdC0+bUJ1ZmZlcnNbaV0ubU51bWJlckNoYW5uZWxzID0gMTsKKyAgICAgICAgbV9saXN0
LT5tQnVmZmVyc1tpXS5tRGF0YSA9IGNoYW5uZWwtPm11dGFibGVEYXRhKCk7CisgICAgICAgIG1f
bGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSA9IGNoYW5uZWwtPmxlbmd0aCgpICogc2l6
ZW9mKGZsb2F0KTsKKyAgICB9CisKKyAgICBtX3JpbmdCdWZmZXItPmZldGNoKG1fbGlzdC5nZXQo
KSwgZnJhbWVzVG9Qcm9jZXNzLCBtX3JlYWRDb3VudCk7CisgICAgbV9yZWFkQ291bnQgKz0gZnJh
bWVzVG9Qcm9jZXNzOworCisgICAgaWYgKG1fY29udmVydGVyKQorICAgICAgICBBdWRpb0NvbnZl
cnRlckNvbnZlcnRDb21wbGV4QnVmZmVyKG1fY29udmVydGVyLmdldCgpLCBmcmFtZXNUb1Byb2Nl
c3MsIG1fbGlzdC5nZXQoKSwgbV9saXN0LmdldCgpKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQzo6c2V0Q2xpZW50KEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQqIGNsaWVu
dCkKK3sKKyAgICBpZiAobV9jbGllbnQgPT0gY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9hdkF1ZGlvTWl4KQorICAgICAgICBkZXN0cm95TWl4KCk7CisKKyAgICBtX2NsaWVu
dCA9IGNsaWVudDsKKworICAgIGlmIChtX2NsaWVudCAmJiBtX2F2UGxheWVySXRlbSkKKyAgICAg
ICAgY3JlYXRlTWl4KCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnNl
dFBsYXllckl0ZW0oQVZQbGF5ZXJJdGVtICphdlBsYXllckl0ZW0pCit7CisgICAgaWYgKG1fYXZQ
bGF5ZXJJdGVtID09IGF2UGxheWVySXRlbSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
YXZBdWRpb01peCkKKyAgICAgICAgZGVzdHJveU1peCgpOworCisgICAgbV9hdlBsYXllckl0ZW0g
PSBhdlBsYXllckl0ZW07CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9hdlBsYXllckl0ZW0pCisg
ICAgICAgIGNyZWF0ZU1peCgpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpD
OjpkZXN0cm95TWl4KCkKK3sKKyAgICBpZiAobV9hdlBsYXllckl0ZW0pCisgICAgICAgIFttX2F2
UGxheWVySXRlbSBzZXRBdWRpb01peDpuaWxdOworICAgIFttX2F2QXVkaW9NaXggc2V0SW5wdXRQ
YXJhbWV0ZXJzOm5pbF07CisgICAgbV9hdkF1ZGlvTWl4LmNsZWFyKCk7CisgICAgbV90YXAuY2xl
YXIoKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6Y3JlYXRlTWl4KCkK
K3sKKyAgICBBU1NFUlQoIW1fYXZBdWRpb01peCk7CisgICAgQVNTRVJUKG1fYXZQbGF5ZXJJdGVt
KTsKKyAgICBBU1NFUlQobV9jbGllbnQpOworCisgICAgbV9hdkF1ZGlvTWl4ID0gYWRvcHROUyhb
W2dldEFWTXV0YWJsZUF1ZGlvTWl4Q2xhc3MoKSBhbGxvY10gaW5pdF0pOworCisgICAgTVRBdWRp
b1Byb2Nlc3NpbmdUYXBDYWxsYmFja3MgY2FsbGJhY2tzID0geworICAgICAgICAwLAorICAgICAg
ICB0aGlzLAorICAgICAgICBpbml0Q2FsbGJhY2ssCisgICAgICAgIGZpbmFsaXplQ2FsbGJhY2ss
CisgICAgICAgIHByZXBhcmVDYWxsYmFjaywKKyAgICAgICAgdW5wcmVwYXJlQ2FsbGJhY2ssCisg
ICAgICAgIHByb2Nlc3NDYWxsYmFjaywKKyAgICB9OworCisgICAgTVRBdWRpb1Byb2Nlc3NpbmdU
YXBSZWYgdGFwID0gbnVsbHB0cjsKKyAgICBNVEF1ZGlvUHJvY2Vzc2luZ1RhcENyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAmY2FsbGJhY2tzLCBrTVRBdWRpb1Byb2Nlc3NpbmdUYXBDcmVhdGlv
bkZsYWdfUG9zdEVmZmVjdHMsICZ0YXApOworICAgIEFTU0VSVCh0YXApOworICAgIEFTU0VSVCht
X3RhcCA9PSB0YXApOworCisgICAgUmV0YWluUHRyPEFWTXV0YWJsZUF1ZGlvTWl4SW5wdXRQYXJh
bWV0ZXJzPiBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW2dldEFWTXV0YWJsZUF1ZGlvTWl4SW5wdXRQ
YXJhbWV0ZXJzQ2xhc3MoKSBhbGxvY10gaW5pdF0pOworICAgIFtwYXJhbWV0ZXJzIHNldEF1ZGlv
VGFwUHJvY2Vzc29yOm1fdGFwLmdldCgpXTsKKworICAgIENNUGVyc2lzdGVudFRyYWNrSUQgZmly
c3RFbmFibGVkQXVkaW9UcmFja0lEID0ga0NNUGVyc2lzdGVudFRyYWNrSURfSW52YWxpZDsKKyAg
ICBOU0FycmF5KiBhdWRpb1RyYWNrcyA9IFtbbV9hdlBsYXllckl0ZW0gYXNzZXRdIHRyYWNrc1dp
dGhNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGVdOworICAg
IGZvciAoQVZBc3NldFRyYWNrKiB0cmFjayBpbiBhdWRpb1RyYWNrcykgeworICAgICAgICBpZiAo
dHJhY2suZW5hYmxlZCkgeworICAgICAgICAgICAgZmlyc3RFbmFibGVkQXVkaW9UcmFja0lEID0g
dHJhY2sudHJhY2tJRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IFtwYXJhbWV0ZXJzIHNldFRyYWNrSUQ6Zmlyc3RFbmFibGVkQXVkaW9UcmFja0lEXTsKKyAgICAK
KyAgICBbbV9hdkF1ZGlvTWl4IHNldElucHV0UGFyYW1ldGVyczpAW3BhcmFtZXRlcnMuZ2V0KCld
XTsKKyAgICBbbV9hdlBsYXllckl0ZW0gc2V0QXVkaW9NaXg6bV9hdkF1ZGlvTWl4LmdldCgpXTsK
K30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6aW5pdENhbGxiYWNrKE1UQXVk
aW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCwgdm9pZCogY2xpZW50SW5mbywgdm9pZCoqIHRhcFN0b3Jh
Z2VPdXQpCit7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqIF90aGlzID0gc3RhdGlj
X2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihjbGllbnRJbmZvKTsKKyAgICBfdGhp
cy0+bV90YXAgPSB0YXA7CisgICAgX3RoaXMtPmluaXQoY2xpZW50SW5mbywgdGFwU3RvcmFnZU91
dCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmZpbmFsaXplQ2FsbGJh
Y2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwKQoreworICAgIEFTU0VSVCh0YXApOworICAg
IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0YXRpY19jYXN0PEF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDKj4oTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRTdG9yYWdlKHRhcCkp
OworICAgIF90aGlzLT5maW5hbGl6ZSgpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDOjpwcmVwYXJlQ2FsbGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwLCBDTUl0
ZW1Db3VudCBtYXhGcmFtZXMsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAqcHJv
Y2Vzc2luZ0Zvcm1hdCkKK3sKKyAgICBBU1NFUlQodGFwKTsKKyAgICBBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQyogX3RoaXMgPSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qyo+KE1UQXVkaW9Qcm9jZXNzaW5nVGFwR2V0U3RvcmFnZSh0YXApKTsKKyAgICBfdGhpcy0+cHJl
cGFyZShtYXhGcmFtZXMsIHByb2Nlc3NpbmdGb3JtYXQpOworfQorCit2b2lkIEF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDOjp1bnByZXBhcmVDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJl
ZiB0YXApCit7CisgICAgQVNTRVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akMqIF90aGlzID0gc3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihNVEF1
ZGlvUHJvY2Vzc2luZ1RhcEdldFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPnVucHJlcGFyZSgp
OworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzQ2FsbGJhY2so
TVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwLCBDTUl0ZW1Db3VudCBudW1iZXJGcmFtZXMsIE1U
QXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MgZmxhZ3MsIEF1ZGlvQnVmZmVyTGlzdCAqYnVmZmVyTGlz
dEluT3V0LCBDTUl0ZW1Db3VudCAqbnVtYmVyRnJhbWVzT3V0LCBNVEF1ZGlvUHJvY2Vzc2luZ1Rh
cEZsYWdzICpmbGFnc091dCkKK3sKKyAgICBBU1NFUlQodGFwKTsKKyAgICBBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQyogX3RoaXMgPSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQyo+KE1UQXVkaW9Qcm9jZXNzaW5nVGFwR2V0U3RvcmFnZSh0YXApKTsKKyAgICBfdGhpcy0+
cHJvY2VzcyhudW1iZXJGcmFtZXMsIGZsYWdzLCBidWZmZXJMaXN0SW5PdXQsIG51bWJlckZyYW1l
c091dCwgZmxhZ3NPdXQpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpp
bml0KHZvaWQqIGNsaWVudEluZm8sIHZvaWQqKiB0YXBTdG9yYWdlT3V0KQoreworICAgIEFTU0VS
VChjbGllbnRJbmZvID09IHRoaXMpOworICAgICp0YXBTdG9yYWdlT3V0ID0gdGhpczsKK30KKwor
dm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6ZmluYWxpemUoKQoreworfQorCitzdGF0
aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYSwg
Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBiKQoreworICAgIHJldHVybiBhLm1T
YW1wbGVSYXRlID09IGIubVNhbXBsZVJhdGUKKyAgICAgICAgJiYgYS5tRm9ybWF0SUQgPT0gYi5t
Rm9ybWF0SUQKKyAgICAgICAgJiYgYS5tRm9ybWF0RmxhZ3MgPT0gYi5tRm9ybWF0RmxhZ3MKKyAg
ICAgICAgJiYgYS5tQnl0ZXNQZXJQYWNrZXQgPT0gYi5tQnl0ZXNQZXJQYWNrZXQKKyAgICAgICAg
JiYgYS5tRnJhbWVzUGVyUGFja2V0ID09IGIubUZyYW1lc1BlclBhY2tldAorICAgICAgICAmJiBh
Lm1CeXRlc1BlckZyYW1lID09IGIubUJ5dGVzUGVyRnJhbWUKKyAgICAgICAgJiYgYS5tQ2hhbm5l
bHNQZXJGcmFtZSA9PSBiLm1DaGFubmVsc1BlckZyYW1lCisgICAgICAgICYmIGEubUJpdHNQZXJD
aGFubmVsID09IGIubUJpdHNQZXJDaGFubmVsOworfQorCitzdGF0aWMgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYSwgY29uc3QgQXVkaW9TdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK3ZvaWQg
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByZXBhcmUoQ01JdGVtQ291bnQgbWF4RnJhbWVz
LCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKnByb2Nlc3NpbmdGb3JtYXQpCit7
CisgICAgQVNTRVJUKG1heEZyYW1lcyA+PSAwKTsKKworICAgIG1fdGFwRGVzY3JpcHRpb24gPSBz
dGQ6Om1ha2VfdW5pcXVlPEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbj4oKnByb2Nlc3NpbmdG
b3JtYXQpOworICAgIGludCBudW1iZXJPZkNoYW5uZWxzID0gcHJvY2Vzc2luZ0Zvcm1hdC0+bUNo
YW5uZWxzUGVyRnJhbWU7CisgICAgc2l6ZV90IGJ5dGVzUGVyRnJhbWUgPSBwcm9jZXNzaW5nRm9y
bWF0LT5tQnl0ZXNQZXJGcmFtZTsKKyAgICBkb3VibGUgc2FtcGxlUmF0ZSA9IHByb2Nlc3NpbmdG
b3JtYXQtPm1TYW1wbGVSYXRlOworICAgIEFTU0VSVChzYW1wbGVSYXRlID49IDApOworCisgICAg
bV9vdXRwdXREZXNjcmlwdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uPigpOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1TYW1wbGVSYXRlID0gc2Ft
cGxlUmF0ZTsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tRm9ybWF0SUQgPSBrQXVkaW9Gb3Jt
YXRMaW5lYXJQQ007CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUZvcm1hdEZsYWdzID0ga0F1
ZGlvRm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZDsKKyAgICBtX291dHB1dERlc2NyaXB0aW9u
LT5tQml0c1BlckNoYW5uZWwgPSA4ICogc2l6ZW9mKEZsb2F0MzIpOworICAgIG1fb3V0cHV0RGVz
Y3JpcHRpb24tPm1DaGFubmVsc1BlckZyYW1lID0gbnVtYmVyT2ZDaGFubmVsczsKKyAgICBtX291
dHB1dERlc2NyaXB0aW9uLT5tRnJhbWVzUGVyUGFja2V0ID0gMTsKKyAgICBtX291dHB1dERlc2Ny
aXB0aW9uLT5tQnl0ZXNQZXJQYWNrZXQgPSBzaXplb2YoRmxvYXQzMik7CisgICAgbV9vdXRwdXRE
ZXNjcmlwdGlvbi0+bUJ5dGVzUGVyRnJhbWUgPSBzaXplb2YoRmxvYXQzMik7CisgICAgbV9vdXRw
dXREZXNjcmlwdGlvbi0+bUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVy
bGVhdmVkOworCisgICAgaWYgKCptX3RhcERlc2NyaXB0aW9uICE9ICptX291dHB1dERlc2NyaXB0
aW9uKSB7CisgICAgICAgIEF1ZGlvQ29udmVydGVyUmVmIG91dENvbnZlcnRlciA9IG51bGxwdHI7
CisgICAgICAgIEF1ZGlvQ29udmVydGVyTmV3KG1fdGFwRGVzY3JpcHRpb24uZ2V0KCksIG1fb3V0
cHV0RGVzY3JpcHRpb24uZ2V0KCksICZvdXRDb252ZXJ0ZXIpOworICAgICAgICBtX2NvbnZlcnRl
ciA9IG91dENvbnZlcnRlcjsKKyAgICB9CisKKyAgICAvLyBNYWtlIHRoZSByaW5nYnVmZmVyIGxh
cmdlIGVub3VnaCB0byBzdG9yZSBhdCBsZWFzdCB0d28gY2FsbGJhY2tzIHdvcnRoIG9mIGF1ZGlv
LCBvciAxcywgd2hpY2hldmVyIGlzIGxhcmdlci4KKyAgICBzaXplX3QgY2FwYWNpdHkgPSBzdGQ6
Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KDIgKiBtYXhGcmFtZXMpLCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGtSaW5nQnVmZmVyRHVyYXRpb24gKiBzYW1wbGVSYXRlKSk7CisKKyAgICBtX3JpbmdCdWZm
ZXIgPSBDQVJpbmdCdWZmZXI6OmNyZWF0ZSgpOworICAgIG1fcmluZ0J1ZmZlci0+YWxsb2NhdGUo
bnVtYmVyT2ZDaGFubmVscywgYnl0ZXNQZXJGcmFtZSwgY2FwYWNpdHkpOworCisgICAgLy8gQXVk
aW9CdWZmZXJMaXN0IGlzIGEgdmFyaWFibGUtbGVuZ3RoIHN0cnVjdCwgc28gY3JlYXRlIG9uIHRo
ZSBoZWFwIHdpdGggYSBnZW5lcmljIG5ldygpIG9wZXJhdG9yCisgICAgLy8gd2l0aCBhIGN1c3Rv
bSBzaXplLCBhbmQgaW5pdGlhbGl6ZSB0aGUgc3RydWN0IG1hbnVhbGx5LgorICAgIHNpemVfdCBi
dWZmZXJMaXN0U2l6ZSA9IHNpemVvZihBdWRpb0J1ZmZlckxpc3QpICsgKHNpemVvZihBdWRpb0J1
ZmZlcikgKiBzdGQ6Om1heCgxLCBudW1iZXJPZkNoYW5uZWxzIC0gMSkpOworICAgIG1fbGlzdCA9
IHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxpc3Q+KChBdWRpb0J1ZmZlckxpc3QqKSA6Om9w
ZXJhdG9yIG5ldyAoYnVmZmVyTGlzdFNpemUpKTsKKyAgICBtZW1zZXQobV9saXN0LmdldCgpLCAw
LCBidWZmZXJMaXN0U2l6ZSk7CisgICAgbV9saXN0LT5tTnVtYmVyQnVmZmVycyA9IG51bWJlck9m
Q2hhbm5lbHM7CisKKyAgICBSZWZQdHI8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM+IHN0cm9u
Z1RoaXMgPSB0aGlzOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3N0cm9uZ1RoaXMsIG51bWJlck9m
Q2hhbm5lbHMsIHNhbXBsZVJhdGVdIHsKKyAgICAgICAgc3Ryb25nVGhpcy0+bV9jbGllbnQtPnNl
dEZvcm1hdChudW1iZXJPZkNoYW5uZWxzLCBzYW1wbGVSYXRlKTsKKyAgICB9KTsKK30KKwordm9p
ZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6dW5wcmVwYXJlKCkKK3sKKyAgICBtX3RhcERl
c2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uID0gbnVsbHB0cjsK
KyAgICBtX3JpbmdCdWZmZXIgPSBudWxscHRyOworICAgIG1fbGlzdCA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb2Nlc3MoQ01JdGVtQ291bnQgbnVt
YmVyT2ZGcmFtZXMsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MgZmxhZ3MsIEF1ZGlvQnVmZmVy
TGlzdCAqYnVmZmVyTGlzdEluT3V0LCBDTUl0ZW1Db3VudCAqbnVtYmVyRnJhbWVzT3V0LCBNVEF1
ZGlvUHJvY2Vzc2luZ1RhcEZsYWdzICpmbGFnc091dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZmxh
Z3MpOworCisgICAgQ01JdGVtQ291bnQgaXRlbUNvdW50ID0gMDsKKyAgICBPU1N0YXR1cyBzdGF0
dXMgPSBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEdldFNvdXJjZUF1ZGlvKG1fdGFwLmdldCgpLCBudW1i
ZXJPZkZyYW1lcywgYnVmZmVyTGlzdEluT3V0LCBmbGFnc091dCwgbnVsbHB0ciwgJml0ZW1Db3Vu
dCk7CisgICAgaWYgKHN0YXR1cyAhPSBub0VyciB8fCAhaXRlbUNvdW50KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3JpbmdCdWZmZXItPnN0b3JlKGJ1ZmZlckxpc3RJbk91dCwgaXRlbUNvdW50
LCBtX3dyaXRlQ291bnQpOworICAgIG1fd3JpdGVDb3VudCArPSBpdGVtQ291bnQ7CisKKyAgICAv
LyBNdXRlIHRoZSBkZWZhdWx0IGF1ZGlvIHBsYXliYWNrIGJ5IHplcm9pbmcgdGhlIHRhcC1vd25l
ZCBidWZmZXJzLgorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBidWZmZXJMaXN0SW5PdXQt
Pm1OdW1iZXJCdWZmZXJzOyArK2kpIHsKKyAgICAgICAgQXVkaW9CdWZmZXImIGJ1ZmZlciA9IGJ1
ZmZlckxpc3RJbk91dC0+bUJ1ZmZlcnNbaV07CisgICAgICAgIG1lbXNldChidWZmZXIubURhdGEs
IDAsIGJ1ZmZlci5tRGF0YUJ5dGVTaXplKTsKKyAgICB9CisgICAgKm51bWJlckZyYW1lc091dCA9
IDA7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKaW5kZXggMzQ5M2VjZjhh
Y2Y0OTljOThjMDkyODIxMjBiZjg1OTM1NTYwZDJiOS4uM2E5Njg3MzczNmRiYmRlYjE0ZWI0NjUw
ZjlhNDJmZjVjYjI1MmRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaApAQCAtNjIsNiArNjIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXI7CiBj
bGFzcyBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVBVkY7CiBjbGFzcyBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGT2JqQzsKK2NsYXNzIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOwog
Y2xhc3MgQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDOwogY2xhc3MgVmlkZW9UcmFja1ByaXZhdGVB
VkZPYmpDOwogCkBAIC0yMDUsNiArMjA2LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHN5bmNUZXh0VHJhY2tCb3VuZHMoKSBvdmVycmlkZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFdF
Ql9BVURJTykKKyAgICB2aXJ0dWFsIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJv
dmlkZXIoKTsKKyNlbmRpZgorCiAgICAgdm9pZCBjcmVhdGVJbWFnZUdlbmVyYXRvcigpOwogICAg
IHZvaWQgZGVzdHJveUltYWdlR2VuZXJhdG9yKCk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGNyZWF0ZUltYWdlRm9yVGltZUluUmVjdChmbG9hdCwgY29uc3QgSW50UmVjdCYpOwpAQCAtMzIw
LDYgKzMyNSw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNBcnJheT4gbV9j
YWNoZWRMb2FkZWRSYW5nZXM7CiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IG1fY2FjaGVkVHJhY2tz
OwogICAgIFJldGFpblB0cjxOU0FycmF5PiBtX2N1cnJlbnRNZXRhRGF0YTsKKyAgICBSZWZQdHI8
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM+IG1fcHJvdmlkZXI7CiAgICAgRmxvYXRTaXplIG1f
Y2FjaGVkUHJlc2VudGF0aW9uU2l6ZTsKICAgICBkb3VibGUgbV9jYWNoZWREdXJhdGlvbjsKICAg
ICBkb3VibGUgbV9jYWNoZWRSYXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KaW5kZXggOTg0OGQ5
OThmYTI4YmNlYzdkZTZmODAxNTFjNjAyN2IxNGI3ZDU0YS4uNmMwZGM4YTFlMDlmOTk0YWY0Yjlj
ODhlMGNlZjk0MzNlZWNhMWQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW1wb3J0ICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgiCiAK
ICNpbXBvcnQgIkFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwuaCIKKyNpbXBvcnQgIkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDLmgiCiAjaW1wb3J0ICJBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMu
aCIKICNpbXBvcnQgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCiAjaW1wb3J0ICJCbG9ja0V4
Y2VwdGlvbnMuaCIKQEAgLTQ4Miw2ICs0ODMsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpjYW5jZWxMb2FkKCkKICAgICAgICAgW3RyYWNrIHJlbW92ZU9ic2Vy
dmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6QCJlbmFibGVkIl07CiAgICAgbV9j
YWNoZWRUcmFja3MgPSBudWxscHRyOwogCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAo
bV9wcm92aWRlcikKKyAgICAgICAgbV9wcm92aWRlci0+c2V0UGxheWVySXRlbShudWxscHRyKTsK
KyNlbmRpZgorCiAgICAgc2V0SWdub3JlTG9hZFN0YXRlQ2hhbmdlcyhmYWxzZSk7CiB9CiAKQEAg
LTgzNiw2ICs4NDIsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpjcmVhdGVBVlBsYXllckl0ZW0oKQogICAgIFttX2F2UGxheWVySXRlbS5nZXQoKSBhZGRPdXRw
dXQ6bV9sZWdpYmxlT3V0cHV0LmdldCgpXTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFdFQl9BVURJ
TykKKyAgICBpZiAobV9wcm92aWRlcikKKyAgICAgICAgbV9wcm92aWRlci0+c2V0UGxheWVySXRl
bShtX2F2UGxheWVySXRlbS5nZXQoKSk7CisjZW5kaWYKKwogICAgIHNldERlbGF5Q2FsbGJhY2tz
KGZhbHNlKTsKIH0KIApAQCAtMTczOCw2ICsxNzQ5LDE1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24oVGV4dFRyYWNr
UmVwCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQogCisjaWYgRU5BQkxFKFdFQl9B
VURJTykKK0F1ZGlvU291cmNlUHJvdmlkZXIqIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OmF1ZGlvU291cmNlUHJvdmlkZXIoKQoreworICAgIGlmICghbV9wcm92aWRlcikKKyAg
ICAgICAgbV9wcm92aWRlciA9IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGUobV9h
dlBsYXllckl0ZW0uZ2V0KCkpOworICAgIHJldHVybiBtX3Byb3ZpZGVyLmdldCgpOworfQorI2Vu
ZGlmCisKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2l6ZUNoYW5n
ZWQoKQogewogICAgIGlmICghbV9hdkFzc2V0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235129</attachid>
            <date>2014-07-18 08:44:05 -0700</date>
            <delta_ts>2014-07-19 18:44:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135042-20140718084350.patch</filename>
            <type>text/plain</type>
            <size>52424</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxMTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU4ZTZmZmVjMzlmMGQ1
YzMxOGNkNzdjNTVlYTc1Mzc4ZDRhMWJiNy4uM2E1YzdjODNhNTc5Y2Y4MzM5MjMyMGM4ZmJmZTY3
NDcyNDQwYjMyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDE0LTA3LTE4ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIFN1cHBvcnQgYXVk
aW9Tb3VyY2VQcm92aWRlcigpIGluIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTA0Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBw
b3J0IGZvciBBdWRpb1NvdXJjZVByb3ZpZGVyIGluIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakMsIHRoZXJlYnkKKyAgICAgICAgc3VwcG9ydGluZyBNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuCisKKyAgICAgICAgSW1wb3J0IHRoZSBDQVJpbmdCdWZmZXIgZnJvbSBDb3JlQXVk
aW8gc2FtcGxlIGNvZGUsIG1ha2luZyB0aGUgbmVjZXNzYXJ5IG1vZGlmaWNhdGlvbnMKKyAgICAg
ICAgZm9yIFdlYktpdCBzdHlsZSBhbmQgY29kaW5nIGNvbnZlbnRpb25zLiBUaGUgdGhyZWFkaW5n
IGFzc3VtcHRpb25zIGZvciB0aGlzIGNsYXNzIGFyZQorICAgICAgICB0aGF0IHRoZXJlIHdpbGwg
YmUgYSBzaW5nbGUgd3JpdGVyIHRocmVhZCBhbmQgYSBzaW5nbGUgcmVhZGVyIHRocmVhZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6Y3JlYXRlKTogQ3JlYXRlIGEgdW5pcXVlX3B0
ci4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6Q0FSaW5nQnVmZmVyKTogU2ltcGxl
IGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjp+Q0FSaW5nQnVm
ZmVyKTogU2ltcGxlIGRlc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6
OmFsbG9jYXRlKTogSW5pdGlhbGl6ZSB0aGUgYnVmZmVycyBhbmQgdGltZSBib3VuZHMgc3RydWN0
dXJlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6ZGVhbGxvY2F0ZSk6IERlc3Ry
b3kgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6Olplcm9SYW5nZSk6IFN0YXRpYyB1dGlsaXR5IG1l
dGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JlQUJMKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpGZXRjaEFCTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WmVyb0FCTCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpzdG9yZSk6IFN0b3JlIHRoZSBwYXNz
ZWQgaW4gYnVmZmVyIGluIHRoZSByaW5nIGJ1ZmZlciwgd3JhcHBpbmcKKyAgICAgICAgICAgIGlm
IG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6c2V0VGltZUJvdW5k
cyk6IFNldCB0aGUgbmV3IHRpbWUgYm91bmRzIGJ5IGluY3JlbWVudGluZyB0aGUKKyAgICAgICAg
ICAgIGJvdW5kcyBpbmRleCBsb2NhbGx5LCBmaWxsaW5nIGluIHRoZSBuZXcgdmFsdWVzLCB0aGVu
IGF0b21pY2FsbHkgaW5jcmVtZW50aW5nIHRoZQorICAgICAgICAgICAgcmVhZGVyLXZpc2libGUg
aW5kZXguCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmdldFRpbWVCb3VuZHMpOiBH
ZXQgdGhlIG5ldyB0aW1lIGJvdW5kcyBieSBtYXNraW5nIHRoZSB0aW1lCisgICAgICAgICAgICBi
b3VuZHMgaW5kZXgsIGFuZCB1c2luZyBpdCBhcyBhbiBvZmZzZXQgdG8gdGhlIHRpbWUgYm91bmRz
IGFycmF5LiBQcm90ZWN0IGFnYWluc3QKKyAgICAgICAgICAgIENQVSBzdGFydmF0aW9uIG9uIHRo
ZSByZWFkaW5nIHRocmVhZCBieSBjaGVja2luZyB0aGUgaW5kZXggYWdhaW5zdCB0aGUgc3RvcmVk
CisgICAgICAgICAgICBpbmRleCBpbiB0aGUgYXJyYXkgZW50cnkuIFRoaXMgY2hlY2sgd2lsbCBm
YWlsIGlmIHRoZSB3cml0aW5nIHRocmVhZCBoYXMgd3JhcHBlZAorICAgICAgICAgICAgbW9yZSB0
aGFuIHRoZSBzaXplIG9mIHRoZSBhcnJheS4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZl
cjo6Y2xpcFRpbWVCb3VuZHMpOiBDbGFtcCB0aGUgcGFzc2VkIHZhbHVlcyB0byB0aGUgYXZhaWxh
YmxlIGJvdW5kcy4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6c3RhcnRGcmFtZSk6
IFNpbXBsZSBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6ZW5kRnJh
bWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6ZmV0Y2gpOiBSZWFk
IGFuIGF1ZGlvIGJ1ZmZlciBsaXN0IGZyb20gdGhlIHJpbmcgYnVmZmVyLCBwb3NzYmlseQorICAg
ICAgICAgICAgd3JhcHBpbmcgYXJvdW5kIHRvIHRoZSBzdGFydCBvZiB0aGUgcmluZyBidWZmZXIu
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6bnVtYmVyT2ZDaGFubmVscyk6IFNpbXBsZSBh
Y2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6ZnJhbWVPZmZzZXQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6VGltZUJvdW5kczo6VGltZUJv
dW5kcyk6IFN0cnVjdCBob2xkaW5nIHRoZSBzdGFydCBhbmQgZW5kIGZyYW1lIHZhbHVlcy4KKwor
ICAgICAgICBBZGQgYW4gaW1wbGVtZW50YXRpb24gb2YgQXVkaW9Tb3VyY2VQcm92aWRlciwgdXNp
bmcgQVZBdWRpb01peCBhbmQgTVRBdWRpb1Byb2Nlc3NpbmdUYXAKKyAgICAgICAgdG8gdGFwIGFu
IEFWUGxheWVySXRlbSdzIGF1ZGlvIG91dHB1dCBhbmQgZmVlZCBpdCB0byBhIE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW06
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmNy
ZWF0ZSk6IFNpbXBsZSBmYWN0b3J5LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakM6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKTogU2ltcGxlIGNvbnN0cnVj
dG9yLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6On5BdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQyk6IFNpbXBsZSBkZXN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb3ZpZGVJbnB1dCk6IFB1c2ggYXVk
aW8gaW50byB0aGUgcmluZyBidWZmZXIuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQzo6c2V0Q2xpZW50KTogQ2FsbCBkZXN0cm95TWl4KCkvY3JlYXRlTWl4KCkg
YXMgYXBwcm9wcmlhdGUuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQzo6c2V0UGxheWVySXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM6OmRlc3Ryb3lNaXgpOiBEZXRhY2ggYW5kIGRlc3Ryb3kgdGhlIEFW
QXVkaW9NaXggYW5kIHRhcC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDOjpjcmVhdGVNaXgpOiBTZXQgdXAgdGhlIEFWQXVkaW9NaXggYW5kIHRhcCBhbmQgYXR0
YWNoIHRvCisgICAgICAgICAgICB0aGUgQVZQbGF5ZXJJdGVtLgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmluaXRDYWxsYmFjayk6IFBhc3MgdG8gY2xhc3Mg
bWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmZp
bmFsaXplQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOjpwcmVwYXJlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp1bnByZXBhcmVDYWxsYmFjayk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb2Nlc3NDYWxs
YmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akM6OmluaXQpOiBTZXQgdXAgdGhlIHN0b3JhZ2UgcG9pbnRlciBmb3IgdGhlIHRhcC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5hbGl6ZSk6IE5vLW9w
LgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IENvbXBhcmUgdHdvIEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiBvYmplY3RzLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnBy
ZXBhcmUpOiBDcmVhdGUgYW4gQXVkaW9Db3ZlcnRlciBvYmplY3QgaWYgbmVjZXNzYXJ5LAorICAg
ICAgICAgICAgY3JlYXRlIHRoZSByaW5nIGJ1ZmZlciwgYW5kIG5vdGlmeSB0aGUgY2xpZW50IG9m
IGZvcm1hdCBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFW
Rk9iakM6OnVucHJlcGFyZSk6IERlc3Ryb3kgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzKTogQ29weSBzYW1wbGVzIG91dCBvZiB0aGUg
cmluZyBidWZmZXIsCisgICAgICAgICAgICBmb3JtYXQgY29udmVydGluZyB0aGVtIGlmIG5lY2Vz
c2FyeS4gTXV0ZSBvcmlnaW5hbCBhdWRpby4KKworICAgICAgICBDcmVhdGUgdGhlIEF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDIG9iamVjdCBhbmQgbm90aWZ5IGl0IHdoZW4gdGhlIGN1cnJlbnQg
QVZQbGF5ZXJJdGVtIGNoYW5nZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmF1ZGlv
U291cmNlUHJvdmlkZXIpOgorCisgICAgICAgIEVuYWJsZSBTT0ZUX0xJTktfTUFZX0ZBSUwgb24g
dGhlIE1hYyBwbGF0Zm9ybS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5o
OgorCisgICAgICAgIEFkZCBuZXcgZmlsZXMgdG8gdGhlIHByb2plY3QuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTQtMDctMTcgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01TRV0gUmUtZW5xdWV1ZSBhZnRl
ciBhIHJlbW92ZUNvZGVkRnJhbWVzKCkgb25seSBpZiB0aGUgcmVtb3ZlZCBmcmFtZXMgb3Zlcmxh
cCB3aGF0IG1heSBoYXZlIHBvc3NpYmx5IGJlZW4gZW5xdWV1ZWQgYnV0IHVuZGlzcGxheWVkLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGRiMjU1NGU0ODZkZTcxNTU2MTBkYTZiN2NjMmQ1ZjgwNDJhYjQyODAuLjRlY2M0NWZiM2Q2
NWVjYTcxOTFlNTIyOTk2ZGI2ZjkxMmM4MDBjOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU2NTUsNiArNTY1NSw4IEBACiAJ
CUNEODIwMzBEMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIubW0gKi87IH07CiAJCUNEODIwMzEwMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJX
aW5kb3dBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEODIwMzBFMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRDgyMDMx
MTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMEYxMzk1QUNFNzAwRjk1NkM2
IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSAqLzsgfTsKKwkJQ0Q4QTdCQkIxOTc3MzVGRTAwQ0JE
NjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QTdCQjkxOTc3MzVGRTAwQ0JENjQzIC8qIEF1
ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovOyB9OworCQlDRDhBN0JCQzE5NzczNUZFMDBD
QkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEE3QkJBMTk3NzM1RkUwMENCRDY0MyAvKiBB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovOyB9OwogCQlDRDhCNUE0MjE4MEQxNDlBMDA4
QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCNUE0MDE4MEQxNDlBMDA4
QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi87IH07CiAJ
CUNEOEI1QTQzMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0Q4QjVBNDExODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLmggKi87IH07CiAJCUNEOEI1QTQ2MTgwREZGNEUwMDhCOEU2NSAvKiBWaWRlb1RyYWNr
TWVkaWFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEOEI1QTQ1MTgwREZGNEUwMDhCOEU2NSAvKiBWaWRlb1RyYWNrTWVkaWFTb3VyY2UuaCAq
LzsgfTsKQEAgLTU3MDAsNiArNTcwMiw4IEBACiAJCUNEQzY5REQ3MTYzMjAyNkMwMDdDMzhERiAv
KiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNjlERDUxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNv
cmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gKi87IH07CiAJCUNEQzY5RERBMTYzNzFGRDQwMDdD
MzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNjlERDgxNjM3MUZEMzAwN0MzOERG
IC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RDNjlEREIxNjM3MUZENDAwN0MzOERG
IC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNjlERDkxNjM3MUZEMzAwN0MzOERGIC8q
IFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tICovOyB9OworCQlDREM3MzQxNDE5
Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzczNDEyMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJp
bmdCdWZmZXIuY3BwICovOyB9OworCQlDREM3MzQxNTE5Nzc4OTZEMDA0NkJGQzUgLyogQ0FSaW5n
QnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REM3MzQxMzE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggKi87IH07CiAJCUNEQzhC
NUEyMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4
QjVBMDE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDLm1tICovOyB9OwogCQlDREM4QjVBMzE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBMTE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggKi87IH07CiAJCUNEQzhCNUE2MTgwNDc0RjcwMDE2
RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDOEI1QTQxODA0NzRGNzAwMTZFNjg1IC8qIE1l
ZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gKi87IH07CkBAIC0xMzA5Miw2ICsxMzA5Niw4IEBA
CiAJCUNEODIwMzA5MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0Q4MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1h
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJXaW5kb3dBbmltYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q4MjAzMEYxMzk1QUNFNzAwRjk1
NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0Q4QTdCQjkxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXVkaW9T
b3VyY2VQcm92aWRlckFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
OEE3QkJBMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDhCNUE0MDE4MEQxNDlBMDA4QjhF
NjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5tbTsgcGF0aCA9IG9iamMvVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOEI1QTQxMTgwRDE0OUEwMDhC
OEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5oOyBwYXRoID0gb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDhCNUE0NDE4MEREOEQ2MDA4QjhFNjUgLyog
VmlkZW9UcmFja01lZGlhU291cmNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWRlb1RyYWNrTWVkaWFTb3VyY2UuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxNjcsNiArMTMxNzMsOCBAQAogCQlD
REM2OURENTE2MzIwMjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVGdWxsU2Ny
ZWVuV2FybmluZ1ZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzY5REQ4
MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9s
ZGVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREM2OUREOTE2MzcxRkQz
MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9s
ZGVyVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDNzM0MTIxOTc3ODk2
QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDQVJpbmdCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDREM3MzQxMzE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENBUmluZ0J1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDREM4QjVBMDE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOyBwYXRoID0gb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNEQzhCNUExMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHBhdGggPSBvYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDREM4QjVBNDE4MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE1lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakMubW07IHBhdGggPSBvYmpjL01lZGlhU291cmNlUHJpdmF0ZUFW
Rk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTY1Miw2ICsyMTY2MCw4
IEBACiAJCQkJQ0Q4QjVBNDAxODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLm1tICovLAogCQkJCUNEN0UwNTIwMTY1MUE4NDEwMEMxMjAxRiAvKiBX
ZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQlDRDdFMDUyMTE2NTFBODQxMDBDMTIw
MUYgLyogV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tICovLAorCQkJCUNEOEE3QkI5MTk3NzM1
RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSAqLywKKwkJCQlDRDhB
N0JCQTE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCAqLywK
IAkJCSk7CiAJCQluYW1lID0gb2JqYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0y
MzE2Miw2ICsyMzE3Miw4IEBACiAJCQkJQ0Q1NERFNDUxNzQ2OEI2RjAwNUU1QjM2IC8qIE1lZGlh
U2Vzc2lvbk1hbmFnZXJNYWMuY3BwICovLAogCQkJCUNEMkY0QTI1MThEOEEzNDkwMDYzNzQ2RCAv
KiBBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYWMuY3BwICovLAogCQkJCUNEMkY0QTI2MThEOEEzNDkw
MDYzNzQ2RCAvKiBBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYWMuaCAqLywKKwkJCQlDREM3MzQxMjE5
Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCAqLywKKwkJCQlDREM3MzQxMzE5Nzc4
OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNDM4Nyw2ICsyNDM5OSw3IEBACiAJCQkJ
QThFQTc5RkEwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxEaXJlY3RvcnlFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEVBN0NCNzBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTERpdkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExp
c3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREM3MzQxNTE5Nzc4OTZEMDA0NkJGQzUg
LyogQ0FSaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAx
RTlBQkMgLyogSFRNTERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2NzEyMjg4
M0U5MDBCODFGRjggLyogSFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzMwOURFODA5OUU2NDkyMDA1NkU1ODEgLyogaHRtbGVkaXRpbmcuaCBpbiBIZWFkZXJzICovLApA
QCAtMjUwNzgsNiArMjUwOTEsNyBAQAogCQkJCUIyRkEzREEzMEFCNzVBNkYwMDBFNUFDNCAvKiBK
U1NWR0xlbmd0aExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREE1MEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJGQTNEQTcwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGluZUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUNEOEE3QkJDMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQTkwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHTWFya2VyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQUIwQUI3NUE2
RjAwMEU1QUM0IC8qIEpTU1ZHTWFza0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEz
REFEMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR01hdHJpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
OTM1MCw2ICsyOTM2NCw3IEBACiAJCQkJMUE0QTk1NTIwQjRFRENGRjAwMkQ4QzNDIC8qIFNoYXJl
ZEJ1ZmZlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUU0NTM5MDQ2MEVBRkQ2MzcwMDM2OTVD
OCAvKiBTaGFyZWRUaW1lcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RUEyMDk5RUI3
OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEOEE3
QkJCMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTQxRTFCMUQzMEZGNTk4NjkwMDU3NkIzQiAvKiBTaGFyZWRXb3JrZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFEMTY4RTcxMDIyNkU4OTAwOUJDODI3IC8qIFNoYXJl
ZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQjc4NDIwMTYzOUNC
QkUwMDA3QjY5MiAvKiBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjk1MTUsNiArMjk1MzAsNyBAQAogCQkJCUIyMjI3OUE0MEQwMEJGMjIwMDcxQjc4MiAvKiBT
VkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMjIyN0IwNTBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QjA2MEQwMEJGRjEwMDcxQjc4MiAvKiBT
VkdDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RDNzM0MTQxOTc3ODk2QzAwNDZC
RkM1IC8qIENBUmluZ0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0IwODBEMDBC
RkYxMDA3MUI3ODIgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMjIyNzlBNzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ3Vyc29yRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMjIyNzlBRDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRGVmc0VsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9DQVJpbmdCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZTAzMDNhZTFkZTg4NzQ2NGNlNzky
MWEzNTBkMTEwMTgyZWE4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcApAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDQVJpbmdCdWZmZXIuaCIKKwor
I2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2luY2x1ZGUgPGxpYmtlcm4v
T1NBdG9taWMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCitjb25zdCB1aW50MzJf
dCBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVTaXplID0gMzI7Citjb25zdCB1aW50MzJfdCBr
R2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVNYXNrID0ga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1
ZXVlU2l6ZSAtIDE7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPENB
UmluZ0J1ZmZlcj4gQ0FSaW5nQnVmZmVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8Q0FSaW5nQnVmZmVyPihuZXcgQ0FSaW5nQnVmZmVyKCkpOworfQorCitDQVJpbmdC
dWZmZXI6OkNBUmluZ0J1ZmZlcigpCisgICAgOiBtX251bWJlck9mQ2hhbm5lbHMoMCkKKyAgICAs
IG1fY2FwYWNpdHlGcmFtZXMoMCkKKyAgICAsIG1fY2FwYWNpdHlCeXRlcygwKQorICAgICwgbV90
aW1lQm91bmRzUXVldWUoa0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlU2l6ZSkKKyAgICAsIG1f
dGltZUJvdW5kc1F1ZXVlUHRyKDApCit7Cit9CisKK0NBUmluZ0J1ZmZlcjo6fkNBUmluZ0J1ZmZl
cigpCit7CisgICAgZGVhbGxvY2F0ZSgpOworfQorCit2b2lkIENBUmluZ0J1ZmZlcjo6YWxsb2Nh
dGUodWludDMyX3QgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGJ5dGVzUGVyRnJhbWUsIHNpemVf
dCBjYXBhY2l0eUZyYW1lcykKK3sKKyAgICBkZWFsbG9jYXRlKCk7CisKKyAgICBjYXBhY2l0eUZy
YW1lcyA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhjYXBhY2l0eUZyYW1lcyk7CisKKyAgICBt
X251bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5uZWxzOworICAgIG1fYnl0ZXNQZXJGcmFt
ZSA9IGJ5dGVzUGVyRnJhbWU7CisgICAgbV9jYXBhY2l0eUZyYW1lcyA9IGNhcGFjaXR5RnJhbWVz
OworICAgIG1fY2FwYWNpdHlGcmFtZXNNYXNrID0gY2FwYWNpdHlGcmFtZXMgLSAxOworICAgIG1f
Y2FwYWNpdHlCeXRlcyA9IGJ5dGVzUGVyRnJhbWUgKiBjYXBhY2l0eUZyYW1lczsKKworICAgIHNp
emVfdCBwb2ludGVyc1NpemUgPSBudW1iZXJPZkNoYW5uZWxzICogc2l6ZW9mKEJ5dGUqKTsKKyAg
ICBzaXplX3QgYWxsb2NTaXplID0gcG9pbnRlcnNTaXplICsgKG1fY2FwYWNpdHlCeXRlcyAqIG51
bWJlck9mQ2hhbm5lbHMpOworICAgIG1fYnVmZmVycyA9IEFycmF5QnVmZmVyOjpjcmVhdGUoYWxs
b2NTaXplLCAxKTsKKworICAgIEJ5dGUqKiBwb2ludGVycyA9IHN0YXRpY19jYXN0PEJ5dGUqKj4o
bV9idWZmZXJzLT5kYXRhKCkpOworICAgIEJ5dGUqIGNoYW5uZWxEYXRhID0gc3RhdGljX2Nhc3Q8
Qnl0ZSo+KG1fYnVmZmVycy0+ZGF0YSgpKTsKKyAgICBjaGFubmVsRGF0YSArPSBwb2ludGVyc1Np
emU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkg
eworICAgICAgICBwb2ludGVyc1tpXSA9IGNoYW5uZWxEYXRhOworICAgICAgICBjaGFubmVsRGF0
YSArPSBtX2NhcGFjaXR5Qnl0ZXM7CisgICAgfQorCisgICAgZm9yIChhdXRvIHRpbWVCb3VuZHMg
OiBtX3RpbWVCb3VuZHNRdWV1ZSkgeworICAgICAgICB0aW1lQm91bmRzLm1fc3RhcnRGcmFtZSA9
IDA7CisgICAgICAgIHRpbWVCb3VuZHMubV9lbmRGcmFtZSA9IDA7CisgICAgICAgIHRpbWVCb3Vu
ZHMubV91cGRhdGVDb3VudGVyID0gMDsKKyAgICB9CisgICAgbV90aW1lQm91bmRzUXVldWVQdHIg
PSAwOworfQorCit2b2lkIENBUmluZ0J1ZmZlcjo6ZGVhbGxvY2F0ZSgpCit7CisgICAgaWYgKG1f
YnVmZmVycykKKyAgICAgICAgbV9idWZmZXJzLmNsZWFyKCk7CisKKyAgICBtX251bWJlck9mQ2hh
bm5lbHMgPSAwOworICAgIG1fY2FwYWNpdHlCeXRlcyA9IDA7CisgICAgbV9jYXBhY2l0eUZyYW1l
cyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIFplcm9SYW5nZShCeXRlKiogYnVmZmVycywgaW50IG51
bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuYnl0ZXMpCit7CisgICAgd2hp
bGUgKC0tbnVtYmVyT2ZDaGFubmVscyA+PSAwKSB7CisgICAgICAgIG1lbXNldCgqYnVmZmVycyAr
IG9mZnNldCwgMCwgbmJ5dGVzKTsKKyAgICAgICAgKytidWZmZXJzOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgU3RvcmVBQkwoQnl0ZSoqIGJ1ZmZlcnMsIHNpemVfdCBkZXN0T2Zmc2V0LCBjb25z
dCBBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBzcmNPZmZzZXQsIHNpemVfdCBuYnl0ZXMp
Cit7CisgICAgaW50IG51bWJlck9mQ2hhbm5lbHMgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKKyAg
ICBjb25zdCBBdWRpb0J1ZmZlciogc3JjID0gbGlzdC0+bUJ1ZmZlcnM7CisgICAgd2hpbGUgKC0t
bnVtYmVyT2ZDaGFubmVscyA+PSAwKSB7CisgICAgICAgIGlmIChzcmNPZmZzZXQgPiBzcmMtPm1E
YXRhQnl0ZVNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbWVtY3B5KCpidWZm
ZXJzICsgZGVzdE9mZnNldCwgc3RhdGljX2Nhc3Q8Qnl0ZSAqPihzcmMtPm1EYXRhKSArIHNyY09m
ZnNldCwgc3RkOjptaW48c2l6ZV90PihuYnl0ZXMsIHNyYy0+bURhdGFCeXRlU2l6ZSAtIHNyY09m
ZnNldCkpOworICAgICAgICArK2J1ZmZlcnM7CisgICAgICAgICsrc3JjOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgRmV0Y2hBQkwoQXVkaW9CdWZmZXJMaXN0KiBsaXN0LCBzaXplX3QgZGVzdE9m
ZnNldCwgQnl0ZSoqIGJ1ZmZlcnMsIHNpemVfdCBzcmNPZmZzZXQsIHNpemVfdCBuYnl0ZXMpCit7
CisgICAgaW50IG51bWJlck9mQ2hhbm5lbHMgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKKyAgICBB
dWRpb0J1ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJzOworICAgIHdoaWxlICgtLW51bWJlck9m
Q2hhbm5lbHMgPj0gMCkgeworICAgICAgICBpZiAoZGVzdE9mZnNldCA+IGRlc3QtPm1EYXRhQnl0
ZVNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbWVtY3B5KHN0YXRpY19jYXN0
PEJ5dGUqPihkZXN0LT5tRGF0YSkgKyBkZXN0T2Zmc2V0LCAqYnVmZmVycyArIHNyY09mZnNldCwg
c3RkOjptaW48c2l6ZV90PihuYnl0ZXMsIGRlc3QtPm1EYXRhQnl0ZVNpemUgLSBkZXN0T2Zmc2V0
KSk7CisgICAgICAgICsrYnVmZmVyczsKKyAgICAgICAgKytkZXN0OworICAgIH0KK30KKworaW5s
aW5lIHZvaWQgWmVyb0FCTChBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBkZXN0T2Zmc2V0
LCBzaXplX3QgbmJ5dGVzKQoreworICAgIGludCBuQnVmZmVycyA9IGxpc3QtPm1OdW1iZXJCdWZm
ZXJzOworICAgIEF1ZGlvQnVmZmVyKiBkZXN0ID0gbGlzdC0+bUJ1ZmZlcnM7CisgICAgd2hpbGUg
KC0tbkJ1ZmZlcnMgPj0gMCkgeworICAgICAgICBpZiAoZGVzdE9mZnNldCA+IGRlc3QtPm1EYXRh
Qnl0ZVNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbWVtc2V0KHN0YXRpY19j
YXN0PEJ5dGUqPihkZXN0LT5tRGF0YSkgKyBkZXN0T2Zmc2V0LCAwLCBzdGQ6Om1pbjxzaXplX3Q+
KG5ieXRlcywgZGVzdC0+bURhdGFCeXRlU2l6ZSAtIGRlc3RPZmZzZXQpKTsKKyAgICAgICAgKytk
ZXN0OworICAgIH0KK30KKworQ0FSaW5nQnVmZmVyOjpFcnJvciBDQVJpbmdCdWZmZXI6OnN0b3Jl
KGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGZyYW1lc1RvV3JpdGUsIHVpbnQ2
NF90IHN0YXJ0V3JpdGUpCit7CisgICAgaWYgKCFmcmFtZXNUb1dyaXRlKQorICAgICAgICByZXR1
cm4gT2s7CisKKyAgICBpZiAoZnJhbWVzVG9Xcml0ZSA+IG1fY2FwYWNpdHlGcmFtZXMpCisgICAg
ICAgIHJldHVybiBUb29NdWNoOworCisgICAgdWludDY0X3QgZW5kV3JpdGUgPSBzdGFydFdyaXRl
ICsgZnJhbWVzVG9Xcml0ZTsKKworICAgIGlmIChzdGFydFdyaXRlIDwgZW5kRnJhbWUoKSkgewor
ICAgICAgICAvLyBnb2luZyBiYWNrd2FyZHMsIHRocm93IGV2ZXJ5dGhpbmcgb3V0CisgICAgICAg
IHNldFRpbWVCb3VuZHMoc3RhcnRXcml0ZSwgc3RhcnRXcml0ZSk7CisgICAgfSBlbHNlIGlmIChl
bmRXcml0ZSAtIHN0YXJ0RnJhbWUoKSA8PSBtX2NhcGFjaXR5RnJhbWVzKSB7CisgICAgICAgIC8v
IHRoZSBidWZmZXIgaGFzIG5vdCB5ZXQgd3JhcHBlZCBhbmQgd2lsbCBub3QgbmVlZCB0by4KKyAg
ICAgICAgLy8gTm8tb3AuCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gYWR2YW5jZSB0aGUgc3Rh
cnQgdGltZSBwYXN0IHRoZSByZWdpb24gd2UgYXJlIGFib3V0IHRvIG92ZXJ3cml0ZQorICAgICAg
ICB1aW50NjRfdCBuZXdTdGFydCA9IGVuZFdyaXRlIC0gbV9jYXBhY2l0eUZyYW1lczsgLy8gb25l
IGJ1ZmZlciBvZiB0aW1lIGJlaGluZCB3aGVyZSB3ZSdyZSB3cml0aW5nCisgICAgICAgIHVpbnQ2
NF90IG5ld0VuZCA9IHN0ZDo6bWF4KG5ld1N0YXJ0LCBlbmRGcmFtZSgpKTsKKyAgICAgICAgc2V0
VGltZUJvdW5kcyhuZXdTdGFydCwgbmV3RW5kKTsKKyAgICB9CisKKyAgICAvLyB3cml0ZSB0aGUg
bmV3IGZyYW1lcworICAgIEJ5dGUqKiBidWZmZXJzID0gc3RhdGljX2Nhc3Q8Qnl0ZSoqPihtX2J1
ZmZlcnMtPmRhdGEoKSk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZDaGFubmVscyA9IG1fbnVtYmVy
T2ZDaGFubmVsczsKKyAgICBzaXplX3Qgb2Zmc2V0MDsKKyAgICBzaXplX3Qgb2Zmc2V0MTsKKyAg
ICB1aW50NjRfdCBjdXJFbmQgPSBlbmRGcmFtZSgpOworCisgICAgaWYgKHN0YXJ0V3JpdGUgPiBj
dXJFbmQpIHsKKyAgICAgICAgLy8gd2UgYXJlIHNraXBwaW5nIHNvbWUgc2FtcGxlcywgc28gemVy
byB0aGUgcmFuZ2Ugd2UgYXJlIHNraXBwaW5nCisgICAgICAgIG9mZnNldDAgPSBmcmFtZU9mZnNl
dChjdXJFbmQpOworICAgICAgICBvZmZzZXQxID0gZnJhbWVPZmZzZXQoc3RhcnRXcml0ZSk7Cisg
ICAgICAgIGlmIChvZmZzZXQwIDwgb2Zmc2V0MSkKKyAgICAgICAgICAgIFplcm9SYW5nZShidWZm
ZXJzLCBudW1iZXJPZkNoYW5uZWxzLCBvZmZzZXQwLCBvZmZzZXQxIC0gb2Zmc2V0MCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgWmVyb1JhbmdlKGJ1ZmZlcnMsIG51bWJlck9mQ2hhbm5l
bHMsIG9mZnNldDAsIG1fY2FwYWNpdHlCeXRlcyAtIG9mZnNldDApOworICAgICAgICAgICAgWmVy
b1JhbmdlKGJ1ZmZlcnMsIG51bWJlck9mQ2hhbm5lbHMsIDAsIG9mZnNldDEpOworICAgICAgICB9
CisgICAgICAgIG9mZnNldDAgPSBvZmZzZXQxOworICAgIH0gZWxzZQorICAgICAgICBvZmZzZXQw
ID0gZnJhbWVPZmZzZXQoc3RhcnRXcml0ZSk7CisKKyAgICBvZmZzZXQxID0gZnJhbWVPZmZzZXQo
ZW5kV3JpdGUpOworICAgIGlmIChvZmZzZXQwIDwgb2Zmc2V0MSkKKyAgICAgICAgU3RvcmVBQkwo
YnVmZmVycywgb2Zmc2V0MCwgbGlzdCwgMCwgb2Zmc2V0MSAtIG9mZnNldDApOworICAgIGVsc2Ug
eworICAgICAgICBzaXplX3QgbmJ5dGVzID0gbV9jYXBhY2l0eUJ5dGVzIC0gb2Zmc2V0MDsKKyAg
ICAgICAgU3RvcmVBQkwoYnVmZmVycywgb2Zmc2V0MCwgbGlzdCwgMCwgbmJ5dGVzKTsKKyAgICAg
ICAgU3RvcmVBQkwoYnVmZmVycywgMCwgbGlzdCwgbmJ5dGVzLCBvZmZzZXQxKTsKKyAgICB9CisK
KyAgICAvLyBub3cgdXBkYXRlIHRoZSBlbmQgdGltZQorICAgIHNldFRpbWVCb3VuZHMoc3RhcnRG
cmFtZSgpLCBlbmRXcml0ZSk7CisKKyAgICByZXR1cm4gT2s7Cit9CisKK3ZvaWQgQ0FSaW5nQnVm
ZmVyOjpzZXRUaW1lQm91bmRzKHVpbnQ2NF90IHN0YXJ0VGltZSwgdWludDY0X3QgZW5kVGltZSkK
K3sKKyAgICB1aW50MzJfdCBuZXh0UHRyID0gbV90aW1lQm91bmRzUXVldWVQdHIgKyAxOworICAg
IHVpbnQzMl90IGluZGV4ID0gbmV4dFB0ciAmIGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1h
c2s7CisKKyAgICBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF0ubV9zdGFydEZyYW1lID0gc3RhcnRU
aW1lOworICAgIG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX2VuZEZyYW1lID0gZW5kVGltZTsK
KyAgICBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF0ubV91cGRhdGVDb3VudGVyID0gbmV4dFB0cjsK
KyAgICBPU0F0b21pY0luY3JlbWVudDMyQmFycmllcihzdGF0aWNfY2FzdDxpbnQzMl90Kj4oJm1f
dGltZUJvdW5kc1F1ZXVlUHRyKSk7Cit9CisKK0NBUmluZ0J1ZmZlcjo6RXJyb3IgQ0FSaW5nQnVm
ZmVyOjpnZXRUaW1lQm91bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1l
KQoreworICAgIC8vIGZhaWwgYWZ0ZXIgYSBmZXcgdHJpZXMuCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCA4OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgY3VyUHRyID0gbV90aW1lQm91bmRzUXVl
dWVQdHI7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0gY3VyUHRyICYga0dlbmVyYWxSaW5nVGlt
ZUJvdW5kc1F1ZXVlTWFzazsKKyAgICAgICAgQ0FSaW5nQnVmZmVyOjpUaW1lQm91bmRzJiBib3Vu
ZHMgPSBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF07CisKKyAgICAgICAgaWYgKGJvdW5kcy5tX3Vw
ZGF0ZUNvdW50ZXIgIT0gY3VyUHRyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
c3RhcnRUaW1lID0gYm91bmRzLm1fc3RhcnRGcmFtZTsKKyAgICAgICAgZW5kVGltZSA9IGJvdW5k
cy5tX2VuZEZyYW1lOworICAgICAgICByZXR1cm4gT2s7CisgICAgfQorICAgIHJldHVybiBDUFVP
dmVybG9hZDsKK30KKworQ0FSaW5nQnVmZmVyOjpFcnJvciBDQVJpbmdCdWZmZXI6OmNsaXBUaW1l
Qm91bmRzKHVpbnQ2NF90JiBzdGFydFJlYWQsIHVpbnQ2NF90JiBlbmRSZWFkKQoreworICAgIHVp
bnQ2NF90IHN0YXJ0VGltZTsKKyAgICB1aW50NjRfdCBlbmRUaW1lOworCisgICAgaWYgKGF1dG8g
ZXJyb3IgPSBnZXRUaW1lQm91bmRzKHN0YXJ0VGltZSwgZW5kVGltZSkpCisgICAgICAgIHJldHVy
biBlcnJvcjsKKworICAgIGlmIChzdGFydFJlYWQgPiBlbmRUaW1lIHx8IGVuZFJlYWQgPCBzdGFy
dFRpbWUpIHsKKyAgICAgICAgZW5kUmVhZCA9IHN0YXJ0UmVhZDsKKyAgICAgICAgcmV0dXJuIE9r
OworICAgIH0KKworICAgIHN0YXJ0UmVhZCA9IHN0ZDo6bWF4KHN0YXJ0UmVhZCwgc3RhcnRUaW1l
KTsKKyAgICBlbmRSZWFkID0gc3RkOjptaW4oZW5kUmVhZCwgZW5kVGltZSk7CisgICAgZW5kUmVh
ZCA9IHN0ZDo6bWF4KGVuZFJlYWQsIHN0YXJ0UmVhZCk7CisKKyAgICByZXR1cm4gT2s7IC8vIHN1
Y2Nlc3MKK30KKwordWludDY0X3QgQ0FSaW5nQnVmZmVyOjpzdGFydEZyYW1lKCkgY29uc3QKK3sK
KyAgICB1aW50MzJfdCBpbmRleCA9IG1fdGltZUJvdW5kc1F1ZXVlUHRyICYga0dlbmVyYWxSaW5n
VGltZUJvdW5kc1F1ZXVlTWFzazsKKyAgICByZXR1cm4gbV90aW1lQm91bmRzUXVldWVbaW5kZXhd
Lm1fc3RhcnRGcmFtZTsKK30KKwordWludDY0X3QgQ0FSaW5nQnVmZmVyOjplbmRGcmFtZSgpIGNv
bnN0Cit7CisgICAgdWludDMyX3QgaW5kZXggPSBtX3RpbWVCb3VuZHNRdWV1ZVB0ciAmIGtHZW5l
cmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2s7CisgICAgcmV0dXJuIG1fdGltZUJvdW5kc1F1ZXVl
W2luZGV4XS5tX2VuZEZyYW1lOworfQorCitDQVJpbmdCdWZmZXI6OkVycm9yIENBUmluZ0J1ZmZl
cjo6ZmV0Y2goQXVkaW9CdWZmZXJMaXN0KiBsaXN0LCBzaXplX3QgbkZyYW1lcywgdWludDY0X3Qg
c3RhcnRSZWFkKQoreworICAgIGlmICghbkZyYW1lcykKKyAgICAgICAgcmV0dXJuIE9rOworICAg
IAorICAgIHN0YXJ0UmVhZCA9IHN0ZDo6bWF4PHVpbnQ2NF90PigwLCBzdGFydFJlYWQpOworICAg
IAorICAgIHVpbnQ2NF90IGVuZFJlYWQgPSBzdGFydFJlYWQgKyBuRnJhbWVzOworICAgIAorICAg
IHVpbnQ2NF90IHN0YXJ0UmVhZDAgPSBzdGFydFJlYWQ7CisgICAgdWludDY0X3QgZW5kUmVhZDAg
PSBlbmRSZWFkOworICAgIAorICAgIEVycm9yIGVyciA9IGNsaXBUaW1lQm91bmRzKHN0YXJ0UmVh
ZCwgZW5kUmVhZCk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAKKyAg
ICBpZiAoc3RhcnRSZWFkID09IGVuZFJlYWQpIHsKKyAgICAgICAgWmVyb0FCTChsaXN0LCAwLCBu
RnJhbWVzICogbV9ieXRlc1BlckZyYW1lKTsKKyAgICAgICAgcmV0dXJuIE9rOworICAgIH0KKyAg
ICAKKyAgICBzaXplX3QgYnl0ZVNpemUgPSAoZW5kUmVhZCAtIHN0YXJ0UmVhZCkgKiBtX2J5dGVz
UGVyRnJhbWU7CisgICAgCisgICAgc2l6ZV90IGRlc3RTdGFydEJ5dGVPZmZzZXQgPSBzdGQ6Om1h
eDxzaXplX3Q+KDAsIChzdGFydFJlYWQgLSBzdGFydFJlYWQwKSAqIG1fYnl0ZXNQZXJGcmFtZSk7
CisgICAgCisgICAgaWYgKGRlc3RTdGFydEJ5dGVPZmZzZXQgPiAwKQorICAgICAgICBaZXJvQUJM
KGxpc3QsIDAsIHN0ZDo6bWluPHNpemVfdD4obkZyYW1lcyAqIG1fYnl0ZXNQZXJGcmFtZSwgZGVz
dFN0YXJ0Qnl0ZU9mZnNldCkpOworCisgICAgc2l6ZV90IGRlc3RFbmRTaXplID0gc3RkOjptYXg8
c2l6ZV90PigwLCBlbmRSZWFkMCAtIGVuZFJlYWQpOworICAgIGlmIChkZXN0RW5kU2l6ZSA+IDAp
CisgICAgICAgIFplcm9BQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCArIGJ5dGVTaXplLCBk
ZXN0RW5kU2l6ZSAqIG1fYnl0ZXNQZXJGcmFtZSk7CisKKyAgICBCeXRlICoqYnVmZmVycyA9IHN0
YXRpY19jYXN0PEJ5dGUqKj4obV9idWZmZXJzLT5kYXRhKCkpOworICAgIHNpemVfdCBvZmZzZXQw
ID0gZnJhbWVPZmZzZXQoc3RhcnRSZWFkKTsKKyAgICBzaXplX3Qgb2Zmc2V0MSA9IGZyYW1lT2Zm
c2V0KGVuZFJlYWQpOworICAgIHNpemVfdCBuYnl0ZXM7CisgICAgCisgICAgaWYgKG9mZnNldDAg
PCBvZmZzZXQxKSB7CisgICAgICAgIG5ieXRlcyA9IG9mZnNldDEgLSBvZmZzZXQwOworICAgICAg
ICBGZXRjaEFCTChsaXN0LCBkZXN0U3RhcnRCeXRlT2Zmc2V0LCBidWZmZXJzLCBvZmZzZXQwLCBu
Ynl0ZXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIG5ieXRlcyA9IG1fY2FwYWNpdHlCeXRlcyAt
IG9mZnNldDA7CisgICAgICAgIEZldGNoQUJMKGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQsIGJ1
ZmZlcnMsIG9mZnNldDAsIG5ieXRlcyk7CisgICAgICAgIEZldGNoQUJMKGxpc3QsIGRlc3RTdGFy
dEJ5dGVPZmZzZXQgKyBuYnl0ZXMsIGJ1ZmZlcnMsIDAsIG9mZnNldDEpOworICAgICAgICBuYnl0
ZXMgKz0gb2Zmc2V0MTsKKyAgICB9CisgICAgCisgICAgaW50IG51bWJlck9mQ2hhbm5lbHMgPSBs
aXN0LT5tTnVtYmVyQnVmZmVyczsKKyAgICBBdWRpb0J1ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZm
ZXJzOworICAgIHdoaWxlICgtLW51bWJlck9mQ2hhbm5lbHMgPj0gMCkgeworICAgICAgICBkZXN0
LT5tRGF0YUJ5dGVTaXplID0gbmJ5dGVzOworICAgICAgICBkZXN0Kys7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBPazsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0NBUmluZ0J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3ODkyODc0ZmEzYzFlYjk1ZGE2MTk0
YzU5ZGM4YjkxZWNiZjA0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ0FSaW5nQnVmZmVyX2gKKyNkZWZpbmUgQ0FSaW5nQnVmZmVyX2gKKworI2lu
Y2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K3R5cGVkZWYgc3RydWN0IEF1ZGlvQnVmZmVyTGlzdCBBdWRpb0J1ZmZlckxpc3Q7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0FSaW5nQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPENBUmluZ0J1ZmZlcj4gY3JlYXRlKCk7CisgICAgfkNBUmluZ0J1
ZmZlcigpOworCisgICAgZW51bSBFcnJvciB7CisgICAgICAgIE9rLAorICAgICAgICBUb29NdWNo
LCAvLyBmZXRjaCBzdGFydCB0aW1lIGlzIGVhcmxpZXIgdGhhbiBidWZmZXIgc3RhcnQgdGltZSBh
bmQgZmV0Y2ggZW5kIHRpbWUgaXMgbGF0ZXIgdGhhbiBidWZmZXIgZW5kIHRpbWUKKyAgICAgICAg
Q1BVT3ZlcmxvYWQsIC8vIHRoZSByZWFkZXIgaXMgdW5hYmxlIHRvIGdldCBlbm91Z2ggQ1BVIGN5
Y2xlcyB0byBjYXB0dXJlIGEgY29uc2lzdGVudCBzbmFwc2hvdCBvZiB0aGUgdGltZSBib3VuZHMK
KyAgICB9OworCisgICAgdm9pZCBhbGxvY2F0ZSh1aW50MzJfdCBtX251bWJlck9mQ2hhbm5lbHMs
IHNpemVfdCBieXRlc1BlckZyYW1lLCBzaXplX3QgY2FwYWNpdHlGcmFtZXMpOworICAgIHZvaWQg
ZGVhbGxvY2F0ZSgpOworICAgIEVycm9yIHN0b3JlKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCosIHNp
emVfdCBmcmFtZUNvdW50LCB1aW50NjRfdCBmcmFtZU51bWJlcik7CisgICAgRXJyb3IgZmV0Y2go
QXVkaW9CdWZmZXJMaXN0Kiwgc2l6ZV90IGZyYW1lQ291bnQsIHVpbnQ2NF90IGZyYW1lTnVtYmVy
KTsKKyAgICBFcnJvciBnZXRUaW1lQm91bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2NF90
ICZlbmRUaW1lKTsKKworICAgIHVpbnQzMl90IG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCB7IHJl
dHVybiBtX251bWJlck9mQ2hhbm5lbHM7IH0KKworcHJpdmF0ZToKKyAgICBDQVJpbmdCdWZmZXIo
KTsKKworICAgIHNpemVfdCBmcmFtZU9mZnNldCh1aW50NjRfdCBmcmFtZU51bWJlcikgeyByZXR1
cm4gKGZyYW1lTnVtYmVyICYgbV9jYXBhY2l0eUZyYW1lc01hc2spICogbV9ieXRlc1BlckZyYW1l
OyB9CisKKyAgICBFcnJvciBjbGlwVGltZUJvdW5kcyh1aW50NjRfdCYgc3RhcnRSZWFkLCB1aW50
NjRfdCYgZW5kUmVhZCk7CisKKyAgICB1aW50NjRfdCBzdGFydEZyYW1lKCkgY29uc3Q7CisgICAg
dWludDY0X3QgZW5kRnJhbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFRpbWVCb3VuZHModWludDY0
X3Qgc3RhcnRUaW1lLCB1aW50NjRfdCBlbmRUaW1lKTsKKworICAgIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gbV9idWZmZXJzOworICAgIHVpbnQzMl90IG1fbnVtYmVyT2ZDaGFubmVsczsKKyAgICBzaXpl
X3QgbV9ieXRlc1BlckZyYW1lOworICAgIHVpbnQzMl90IG1fY2FwYWNpdHlGcmFtZXM7CisgICAg
dWludDMyX3QgbV9jYXBhY2l0eUZyYW1lc01hc2s7CisgICAgc2l6ZV90IG1fY2FwYWNpdHlCeXRl
czsKKworICAgIHN0cnVjdCBUaW1lQm91bmRzIHsKKyAgICAgICAgVGltZUJvdW5kcygpCisgICAg
ICAgICAgICA6IG1fc3RhcnRGcmFtZSgwKQorICAgICAgICAgICAgLCBtX2VuZEZyYW1lKDApCisg
ICAgICAgICAgICAsIG1fdXBkYXRlQ291bnRlcigwKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgdm9sYXRpbGUgdWludDY0X3QgbV9zdGFydEZyYW1lOworICAgICAgICB2b2xhdGlsZSB1
aW50NjRfdCBtX2VuZEZyYW1lOworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBtX3VwZGF0ZUNv
dW50ZXI7CisgICAgfTsKKyAgICAKKyAgICBWZWN0b3I8VGltZUJvdW5kcz4gbV90aW1lQm91bmRz
UXVldWU7CisgICAgaW50MzJfdCBtX3RpbWVCb3VuZHNRdWV1ZVB0cjsKK307CisKK30KKworCisj
ZW5kaWYgLy8gQ0FSaW5nQnVmZmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWU4OTQ2ZTNjZTkzYmMwMzg0NmU4NDg1MzQz
M2FlZmM4NDdlNjI1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oCkBAIC0w
LDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpD
X2gKKyNkZWZpbmUgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakNfaAorCisjaWYgRU5BQkxFKFdF
Ql9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgQVZQbGF5ZXJJdGVtOworT0JKQ19DTEFTUyBBVk11
dGFibGVBdWRpb01peDsKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlTVRBdWRpb1Byb2Nl
c3NpbmdUYXAgKk1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmOwordHlwZWRlZiBzdHJ1Y3QgQXVkaW9C
dWZmZXJMaXN0IEF1ZGlvQnVmZmVyTGlzdDsKK3R5cGVkZWYgc3RydWN0IEF1ZGlvU3RyZWFtQmFz
aWNEZXNjcmlwdGlvbiBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb247Cit0eXBlZGVmIHN0cnVj
dCBPcGFxdWVBdWRpb0NvbnZlcnRlciogQXVkaW9Db252ZXJ0ZXJSZWY7Cit0eXBlZGVmIHVpbnQz
Ml90IE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3M7Cit0eXBlZGVmIHNpZ25lZCBsb25nIENNSXRl
bUNvdW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENBUmluZ0J1ZmZlcjsKKwor
Y2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMgOiBwdWJsaWMgUmVmQ291bnRlZDxBdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQz4sIHB1YmxpYyBBdWRpb1NvdXJjZVByb3ZpZGVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQz4g
Y3JlYXRlKEFWUGxheWVySXRlbSopOworICAgIHZpcnR1YWwgfkF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDKCk7CisKKyAgICB2b2lkIHNldFBsYXllckl0ZW0oQVZQbGF5ZXJJdGVtKik7CisKK3By
aXZhdGU6CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoQVZQbGF5ZXJJdGVtKik7CisK
KyAgICB2b2lkIGRlc3Ryb3lNaXgoKTsKKyAgICB2b2lkIGNyZWF0ZU1peCgpOworCisgICAgLy8g
QXVkaW9Tb3VyY2VQcm92aWRlcgorICAgIHZpcnR1YWwgdm9pZCBwcm92aWRlSW5wdXQoQXVkaW9C
dXMqLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q2xpZW50KEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQqKSBvdmVycmlkZTsKKworICAgIHN0
YXRpYyB2b2lkIGluaXRDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiwgdm9pZCosIHZv
aWQqKik7CisgICAgc3RhdGljIHZvaWQgZmluYWxpemVDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2lu
Z1RhcFJlZik7CisgICAgc3RhdGljIHZvaWQgcHJlcGFyZUNhbGxiYWNrKE1UQXVkaW9Qcm9jZXNz
aW5nVGFwUmVmLCBDTUl0ZW1Db3VudCwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
Kik7CisgICAgc3RhdGljIHZvaWQgdW5wcmVwYXJlQ2FsbGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdU
YXBSZWYpOworICAgIHN0YXRpYyB2b2lkIHByb2Nlc3NDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2lu
Z1RhcFJlZiwgQ01JdGVtQ291bnQsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MsIEF1ZGlvQnVm
ZmVyTGlzdCosIENNSXRlbUNvdW50KiwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyopOworCisg
ICAgdm9pZCBpbml0KHZvaWQqIGNsaWVudEluZm8sIHZvaWQqKiB0YXBTdG9yYWdlT3V0KTsKKyAg
ICB2b2lkIGZpbmFsaXplKCk7CisgICAgdm9pZCBwcmVwYXJlKENNSXRlbUNvdW50IG1heEZyYW1l
cywgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uICpwcm9jZXNzaW5nRm9ybWF0KTsK
KyAgICB2b2lkIHVucHJlcGFyZSgpOworICAgIHZvaWQgcHJvY2VzcyhDTUl0ZW1Db3VudCBudW1i
ZXJGcmFtZXMsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MgZmxhZ3NJbiwgQXVkaW9CdWZmZXJM
aXN0ICpidWZmZXJMaXN0SW5PdXQsIENNSXRlbUNvdW50ICpudW1iZXJGcmFtZXNPdXQsIE1UQXVk
aW9Qcm9jZXNzaW5nVGFwRmxhZ3MgKmZsYWdzT3V0KTsKKworICAgIFJldGFpblB0cjxBVlBsYXll
ckl0ZW0+IG1fYXZQbGF5ZXJJdGVtOworICAgIFJldGFpblB0cjxBVk11dGFibGVBdWRpb01peD4g
bV9hdkF1ZGlvTWl4OworICAgIFJldGFpblB0cjxNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZj4gbV90
YXA7CisgICAgUmV0YWluUHRyPEF1ZGlvQ29udmVydGVyUmVmPiBtX2NvbnZlcnRlcjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8QXVkaW9CdWZmZXJMaXN0PiBtX2xpc3Q7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbj4gbV90YXBEZXNjcmlwdGlvbjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uPiBtX291dHB1dERlc2Ny
aXB0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDQVJpbmdCdWZmZXI+IG1fcmluZ0J1ZmZlcjsK
KworICAgIHVpbnQ2NF90IG1fd3JpdGVDb3VudDsKKyAgICB1aW50NjRfdCBtX3JlYWRDb3VudDsK
KyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50KiBtX2NsaWVudDsKK307CisgICAgCit9CisK
KyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOGFjY2M0ODMwMDhkNWFjNjFhMTJkZGEzNGJhNjYw
ZTc5NWQ3NjlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCkBAIC0wLDAg
KzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQy5oIgorCisjaW1wb3J0ICJBdWRpb0J1cy5oIgorI2ltcG9ydCAi
QXVkaW9DaGFubmVsLmgiCisjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmgiCisj
aW1wb3J0ICJDQVJpbmdCdWZmZXIuaCIKKyNpbXBvcnQgIk1lZGlhVGltZU1hYy5oIgorI2ltcG9y
dCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkFzc2V0VHJhY2suaD4K
KyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkF1ZGlvTWl4Lmg+CisjaW1wb3J0IDxBVkZvdW5kYXRp
b24vQVZNZWRpYUZvcm1hdC5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbS5o
PgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgor
CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworU09GVF9MSU5LX0ZSQU1FV09SSyhBVkZvdW5kYXRp
b24pCitTT0ZUX0xJTktfRlJBTUVXT1JLKE1lZGlhVG9vbGJveCkKK1NPRlRfTElOS19GUkFNRVdP
UksoQXVkaW9Ub29sYm94KQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXll
ckl0ZW0pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVk11dGFibGVBdWRpb01peCkK
K1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWTXV0YWJsZUF1ZGlvTWl4SW5wdXRQYXJh
bWV0ZXJzKQorCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbnZlcnRlckNvbnZlcnRD
b21wbGV4QnVmZmVyLCBPU1N0YXR1cywgKEF1ZGlvQ29udmVydGVyUmVmIGluQXVkaW9Db252ZXJ0
ZXIsIFVJbnQzMiBpbk51bWJlclBDTUZyYW1lcywgY29uc3QgQXVkaW9CdWZmZXJMaXN0KiBpbklu
cHV0RGF0YSwgQXVkaW9CdWZmZXJMaXN0KiBvdXRPdXRwdXREYXRhKSwgKGluQXVkaW9Db252ZXJ0
ZXIsIGluTnVtYmVyUENNRnJhbWVzLCBpbklucHV0RGF0YSwgb3V0T3V0cHV0RGF0YSkpCitTT0ZU
X0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbnZlcnRlck5ldywgT1NTdGF0dXMsIChjb25zdCBB
dWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qIGluU291cmNlRm9ybWF0LCBjb25zdCBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24qIGluRGVzdGluYXRpb25Gb3JtYXQsIEF1ZGlvQ29udmVydGVy
UmVmKiBvdXRBdWRpb0NvbnZlcnRlciksIChpblNvdXJjZUZvcm1hdCwgaW5EZXN0aW5hdGlvbkZv
cm1hdCwgb3V0QXVkaW9Db252ZXJ0ZXIpKQorCitTT0ZUX0xJTksoTWVkaWFUb29sYm94LCBNVEF1
ZGlvUHJvY2Vzc2luZ1RhcEdldFN0b3JhZ2UsIHZvaWQqLCAoTVRBdWRpb1Byb2Nlc3NpbmdUYXBS
ZWYgdGFwKSwgKHRhcCkpCitTT0ZUX0xJTksoTWVkaWFUb29sYm94LCBNVEF1ZGlvUHJvY2Vzc2lu
Z1RhcEdldFNvdXJjZUF1ZGlvLCBPU1N0YXR1cywgKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRh
cCwgQ01JdGVtQ291bnQgbnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxpc3RJ
bk91dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NPdXQsIENNVGltZVJhbmdlICp0
aW1lUmFuZ2VPdXQsIENNSXRlbUNvdW50ICpudW1iZXJGcmFtZXNPdXQpLCAodGFwLCBudW1iZXJG
cmFtZXMsIGJ1ZmZlckxpc3RJbk91dCwgZmxhZ3NPdXQsIHRpbWVSYW5nZU91dCwgbnVtYmVyRnJh
bWVzT3V0KSkKK1NPRlRfTElOS19NQVlfRkFJTChNZWRpYVRvb2xib3gsIE1UQXVkaW9Qcm9jZXNz
aW5nVGFwQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgY29uc3Qg
TVRBdWRpb1Byb2Nlc3NpbmdUYXBDYWxsYmFja3MgKmNhbGxiYWNrcywgTVRBdWRpb1Byb2Nlc3Np
bmdUYXBDcmVhdGlvbkZsYWdzIGZsYWdzLCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiAqdGFwT3V0
KSwgKGFsbG9jYXRvciwgY2FsbGJhY2tzLCBmbGFncywgdGFwT3V0KSkKKworU09GVF9MSU5LX1BP
SU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlLCBOU1N0cmlu
ZyAqKQorI2RlZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlIGdldEFWTWVkaWFDaGFy
YWN0ZXJpc3RpY0F1ZGlibGUoKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBkb3Vi
bGUga1JpbmdCdWZmZXJEdXJhdGlvbiA9IDE7CisKK1Bhc3NSZWZQdHI8QXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakM+IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGUoQVZQbGF5ZXJJ
dGVtKiBpdGVtKQoreworICAgIGlmICghY2FuTG9hZE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ3JlYXRl
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVk
aW9Tb3VyY2VQcm92aWRlckFWRk9iakMoaXRlbSkpOworfQorCitBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQzo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoQVZQbGF5ZXJJdGVtKiBpdGVtKQor
ICAgIDogbV9hdlBsYXllckl0ZW0oaXRlbSkKKyAgICAsIG1fd3JpdGVDb3VudCgwKQorICAgICwg
bV9yZWFkQ291bnQoMCkKKyAgICAsIG1fY2xpZW50KG51bGxwdHIpCit7Cit9CisKK0F1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDOjp+QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoKQoreworICAg
IHNldENsaWVudChudWxscHRyKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qzo6cHJvdmlkZUlucHV0KEF1ZGlvQnVzKiBidXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7
CisgICAgdWludDY0X3Qgc3RhcnRGcmFtZSA9IDA7CisgICAgdWludDY0X3QgZW5kRnJhbWUgPSAw
OworICAgIG1fcmluZ0J1ZmZlci0+Z2V0VGltZUJvdW5kcyhzdGFydEZyYW1lLCBlbmRGcmFtZSk7
CisKKyAgICB1aW50NjRfdCBhdmFpbGFibGVGcmFtZXMgPSBlbmRGcmFtZSAtIG1fcmVhZENvdW50
OworICAgIGlmIChhdmFpbGFibGVGcmFtZXMgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKGJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IG1fcmluZ0J1ZmZlci0+bnVtYmVyT2ZD
aGFubmVscygpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xpc3QtPm1OdW1i
ZXJCdWZmZXJzOyArK2kpIHsKKyAgICAgICAgQXVkaW9DaGFubmVsKiBjaGFubmVsID0gYnVzLT5j
aGFubmVsKGkpOworICAgICAgICBtX2xpc3QtPm1CdWZmZXJzW2ldLm1OdW1iZXJDaGFubmVscyA9
IDE7CisgICAgICAgIG1fbGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEgPSBjaGFubmVsLT5tdXRhYmxl
RGF0YSgpOworICAgICAgICBtX2xpc3QtPm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBjaGFu
bmVsLT5sZW5ndGgoKSAqIHNpemVvZihmbG9hdCk7CisgICAgfQorCisgICAgbV9yaW5nQnVmZmVy
LT5mZXRjaChtX2xpc3QuZ2V0KCksIGZyYW1lc1RvUHJvY2VzcywgbV9yZWFkQ291bnQpOworICAg
IG1fcmVhZENvdW50ICs9IGZyYW1lc1RvUHJvY2VzczsKKworICAgIGlmIChtX2NvbnZlcnRlcikK
KyAgICAgICAgQXVkaW9Db252ZXJ0ZXJDb252ZXJ0Q29tcGxleEJ1ZmZlcihtX2NvbnZlcnRlci5n
ZXQoKSwgZnJhbWVzVG9Qcm9jZXNzLCBtX2xpc3QuZ2V0KCksIG1fbGlzdC5nZXQoKSk7Cit9CisK
K3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnNldENsaWVudChBdWRpb1NvdXJjZVBy
b3ZpZGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgaWYgKG1fY2xpZW50ID09IGNsaWVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fYXZBdWRpb01peCkKKyAgICAgICAgZGVzdHJveU1p
eCgpOworCisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9h
dlBsYXllckl0ZW0pCisgICAgICAgIGNyZWF0ZU1peCgpOworfQorCit2b2lkIEF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDOjpzZXRQbGF5ZXJJdGVtKEFWUGxheWVySXRlbSAqYXZQbGF5ZXJJdGVt
KQoreworICAgIGlmIChtX2F2UGxheWVySXRlbSA9PSBhdlBsYXllckl0ZW0pCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX2F2QXVkaW9NaXgpCisgICAgICAgIGRlc3Ryb3lNaXgoKTsKKwor
ICAgIG1fYXZQbGF5ZXJJdGVtID0gYXZQbGF5ZXJJdGVtOworCisgICAgaWYgKG1fY2xpZW50ICYm
IG1fYXZQbGF5ZXJJdGVtKQorICAgICAgICBjcmVhdGVNaXgoKTsKK30KKwordm9pZCBBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQzo6ZGVzdHJveU1peCgpCit7CisgICAgaWYgKG1fYXZQbGF5ZXJJ
dGVtKQorICAgICAgICBbbV9hdlBsYXllckl0ZW0gc2V0QXVkaW9NaXg6bmlsXTsKKyAgICBbbV9h
dkF1ZGlvTWl4IHNldElucHV0UGFyYW1ldGVyczpuaWxdOworICAgIG1fYXZBdWRpb01peC5jbGVh
cigpOworICAgIG1fdGFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFW
Rk9iakM6OmNyZWF0ZU1peCgpCit7CisgICAgQVNTRVJUKCFtX2F2QXVkaW9NaXgpOworICAgIEFT
U0VSVChtX2F2UGxheWVySXRlbSk7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAgIG1fYXZB
dWRpb01peCA9IGFkb3B0TlMoW1tnZXRBVk11dGFibGVBdWRpb01peENsYXNzKCkgYWxsb2NdIGlu
aXRdKTsKKworICAgIE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsK
KyAgICAgICAgMCwKKyAgICAgICAgdGhpcywKKyAgICAgICAgaW5pdENhbGxiYWNrLAorICAgICAg
ICBmaW5hbGl6ZUNhbGxiYWNrLAorICAgICAgICBwcmVwYXJlQ2FsbGJhY2ssCisgICAgICAgIHVu
cHJlcGFyZUNhbGxiYWNrLAorICAgICAgICBwcm9jZXNzQ2FsbGJhY2ssCisgICAgfTsKKworICAg
IE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCA9IG51bGxwdHI7CisgICAgTVRBdWRpb1Byb2Nl
c3NpbmdUYXBDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgJmNhbGxiYWNrcywgMSwgJnRhcCk7
CisgICAgQVNTRVJUKHRhcCk7CisgICAgQVNTRVJUKG1fdGFwID09IHRhcCk7CisKKyAgICBSZXRh
aW5QdHI8QVZNdXRhYmxlQXVkaW9NaXhJbnB1dFBhcmFtZXRlcnM+IHBhcmFtZXRlcnMgPSBhZG9w
dE5TKFtbZ2V0QVZNdXRhYmxlQXVkaW9NaXhJbnB1dFBhcmFtZXRlcnNDbGFzcygpIGFsbG9jXSBp
bml0XSk7CisgICAgW3BhcmFtZXRlcnMgc2V0QXVkaW9UYXBQcm9jZXNzb3I6bV90YXAuZ2V0KCld
OworCisgICAgQ01QZXJzaXN0ZW50VHJhY2tJRCBmaXJzdEVuYWJsZWRBdWRpb1RyYWNrSUQgPSBr
Q01QZXJzaXN0ZW50VHJhY2tJRF9JbnZhbGlkOworICAgIE5TQXJyYXkqIGF1ZGlvVHJhY2tzID0g
W1ttX2F2UGxheWVySXRlbSBhc3NldF0gdHJhY2tzV2l0aE1lZGlhQ2hhcmFjdGVyaXN0aWM6QVZN
ZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZV07CisgICAgZm9yIChBVkFzc2V0VHJhY2sqIHRyYWNr
IGluIGF1ZGlvVHJhY2tzKSB7CisgICAgICAgIGlmICh0cmFjay5lbmFibGVkKSB7CisgICAgICAg
ICAgICBmaXJzdEVuYWJsZWRBdWRpb1RyYWNrSUQgPSB0cmFjay50cmFja0lEOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgW3BhcmFtZXRlcnMgc2V0VHJhY2tJRDpm
aXJzdEVuYWJsZWRBdWRpb1RyYWNrSURdOworICAgIAorICAgIFttX2F2QXVkaW9NaXggc2V0SW5w
dXRQYXJhbWV0ZXJzOkBbcGFyYW1ldGVycy5nZXQoKV1dOworICAgIFttX2F2UGxheWVySXRlbSBz
ZXRBdWRpb01peDptX2F2QXVkaW9NaXguZ2V0KCldOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOjppbml0Q2FsbGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwLCB2
b2lkKiBjbGllbnRJbmZvLCB2b2lkKiogdGFwU3RvcmFnZU91dCkKK3sKKyAgICBBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQyogX3RoaXMgPSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQyo+KGNsaWVudEluZm8pOworICAgIF90aGlzLT5tX3RhcCA9IHRhcDsKKyAgICBfdGhp
cy0+aW5pdChjbGllbnRJbmZvLCB0YXBTdG9yYWdlT3V0KTsKK30KKwordm9pZCBBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQzo6ZmluYWxpemVDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJl
ZiB0YXApCit7CisgICAgQVNTRVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akMqIF90aGlzID0gc3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihNVEF1
ZGlvUHJvY2Vzc2luZ1RhcEdldFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPmZpbmFsaXplKCk7
Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByZXBhcmVDYWxsYmFjayhN
VEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiB0YXAsIENNSXRlbUNvdW50IG1heEZyYW1lcywgY29uc3Qg
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uICpwcm9jZXNzaW5nRm9ybWF0KQoreworICAgIEFT
U0VSVCh0YXApOworICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0YXRp
Y19jYXN0PEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKj4oTVRBdWRpb1Byb2Nlc3NpbmdUYXBH
ZXRTdG9yYWdlKHRhcCkpOworICAgIF90aGlzLT5wcmVwYXJlKG1heEZyYW1lcywgcHJvY2Vzc2lu
Z0Zvcm1hdCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnVucHJlcGFy
ZUNhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCkKK3sKKyAgICBBU1NFUlQodGFw
KTsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyogX3RoaXMgPSBzdGF0aWNfY2FzdDxB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyo+KE1UQXVkaW9Qcm9jZXNzaW5nVGFwR2V0U3RvcmFn
ZSh0YXApKTsKKyAgICBfdGhpcy0+dW5wcmVwYXJlKCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakM6OnByb2Nlc3NDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiB0
YXAsIENNSXRlbUNvdW50IG51bWJlckZyYW1lcywgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyBm
bGFncywgQXVkaW9CdWZmZXJMaXN0ICpidWZmZXJMaXN0SW5PdXQsIENNSXRlbUNvdW50ICpudW1i
ZXJGcmFtZXNPdXQsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MgKmZsYWdzT3V0KQoreworICAg
IEFTU0VSVCh0YXApOworICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0
YXRpY19jYXN0PEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKj4oTVRBdWRpb1Byb2Nlc3NpbmdU
YXBHZXRTdG9yYWdlKHRhcCkpOworICAgIF90aGlzLT5wcm9jZXNzKG51bWJlckZyYW1lcywgZmxh
Z3MsIGJ1ZmZlckxpc3RJbk91dCwgbnVtYmVyRnJhbWVzT3V0LCBmbGFnc091dCk7Cit9CisKK3Zv
aWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmluaXQodm9pZCogY2xpZW50SW5mbywgdm9p
ZCoqIHRhcFN0b3JhZ2VPdXQpCit7CisgICAgQVNTRVJUKGNsaWVudEluZm8gPT0gdGhpcyk7Cisg
ICAgKnRhcFN0b3JhZ2VPdXQgPSB0aGlzOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDOjpmaW5hbGl6ZSgpCit7Cit9CisKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3Qg
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBhLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24mIGIpCit7CisgICAgcmV0dXJuIGEubVNhbXBsZVJhdGUgPT0gYi5tU2FtcGxlUmF0
ZQorICAgICAgICAmJiBhLm1Gb3JtYXRJRCA9PSBiLm1Gb3JtYXRJRAorICAgICAgICAmJiBhLm1G
b3JtYXRGbGFncyA9PSBiLm1Gb3JtYXRGbGFncworICAgICAgICAmJiBhLm1CeXRlc1BlclBhY2tl
dCA9PSBiLm1CeXRlc1BlclBhY2tldAorICAgICAgICAmJiBhLm1GcmFtZXNQZXJQYWNrZXQgPT0g
Yi5tRnJhbWVzUGVyUGFja2V0CisgICAgICAgICYmIGEubUJ5dGVzUGVyRnJhbWUgPT0gYi5tQnl0
ZXNQZXJGcmFtZQorICAgICAgICAmJiBhLm1DaGFubmVsc1BlckZyYW1lID09IGIubUNoYW5uZWxz
UGVyRnJhbWUKKyAgICAgICAgJiYgYS5tQml0c1BlckNoYW5uZWwgPT0gYi5tQml0c1BlckNoYW5u
ZWw7Cit9CisKK3N0YXRpYyBib29sIG9wZXJhdG9yIT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uJiBhLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGIpCit7Cisg
ICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qzo6cHJlcGFyZShDTUl0ZW1Db3VudCBtYXhGcmFtZXMsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbiAqcHJvY2Vzc2luZ0Zvcm1hdCkKK3sKKyAgICBBU1NFUlQobWF4RnJhbWVzID49
IDApOworCisgICAgbV90YXBEZXNjcmlwdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QXVkaW9TdHJl
YW1CYXNpY0Rlc2NyaXB0aW9uPigqcHJvY2Vzc2luZ0Zvcm1hdCk7CisgICAgaW50IG51bWJlck9m
Q2hhbm5lbHMgPSBwcm9jZXNzaW5nRm9ybWF0LT5tQ2hhbm5lbHNQZXJGcmFtZTsKKyAgICBzaXpl
X3QgYnl0ZXNQZXJGcmFtZSA9IHByb2Nlc3NpbmdGb3JtYXQtPm1CeXRlc1BlckZyYW1lOworICAg
IGRvdWJsZSBzYW1wbGVSYXRlID0gcHJvY2Vzc2luZ0Zvcm1hdC0+bVNhbXBsZVJhdGU7CisgICAg
QVNTRVJUKHNhbXBsZVJhdGUgPj0gMCk7CisKKyAgICBtX291dHB1dERlc2NyaXB0aW9uID0gc3Rk
OjptYWtlX3VuaXF1ZTxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+KCk7CisgICAgbV9vdXRw
dXREZXNjcmlwdGlvbi0+bVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOworICAgIG1fb3V0cHV0RGVz
Y3JpcHRpb24tPm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKKyAgICBtX291dHB1
dERlc2NyaXB0aW9uLT5tRm9ybWF0RmxhZ3MgPSBrQXVkaW9Gb3JtYXRGbGFnc05hdGl2ZUZsb2F0
UGFja2VkOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1CaXRzUGVyQ2hhbm5lbCA9IDggKiBz
aXplb2YoRmxvYXQzMik7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUNoYW5uZWxzUGVyRnJh
bWUgPSBudW1iZXJPZkNoYW5uZWxzOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1GcmFtZXNQ
ZXJQYWNrZXQgPSAxOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1CeXRlc1BlclBhY2tldCA9
IHNpemVvZihGbG9hdDMyKTsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tQnl0ZXNQZXJGcmFt
ZSA9IHNpemVvZihGbG9hdDMyKTsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tRm9ybWF0Rmxh
Z3MgfD0ga0F1ZGlvRm9ybWF0RmxhZ0lzTm9uSW50ZXJsZWF2ZWQ7CisKKyAgICBpZiAoKm1fdGFw
RGVzY3JpcHRpb24gIT0gKm1fb3V0cHV0RGVzY3JpcHRpb24pIHsKKyAgICAgICAgQXVkaW9Db252
ZXJ0ZXJSZWYgb3V0Q29udmVydGVyID0gbnVsbHB0cjsKKyAgICAgICAgQXVkaW9Db252ZXJ0ZXJO
ZXcobV90YXBEZXNjcmlwdGlvbi5nZXQoKSwgbV9vdXRwdXREZXNjcmlwdGlvbi5nZXQoKSwgJm91
dENvbnZlcnRlcik7CisgICAgICAgIG1fY29udmVydGVyID0gb3V0Q29udmVydGVyOworICAgIH0K
KworICAgIC8vIE1ha2UgdGhlIHJpbmdidWZmZXIgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIGF0IGxl
YXN0IHR3byBjYWxsYmFja3Mgd29ydGggb2YgYXVkaW8sIG9yIDFzLCB3aGljaGV2ZXIgaXMgbGFy
Z2VyLgorICAgIHNpemVfdCBjYXBhY2l0eSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4o
MiAqIG1heEZyYW1lcyksIHN0YXRpY19jYXN0PHNpemVfdD4oa1JpbmdCdWZmZXJEdXJhdGlvbiAq
IHNhbXBsZVJhdGUpKTsKKworICAgIG1fcmluZ0J1ZmZlciA9IENBUmluZ0J1ZmZlcjo6Y3JlYXRl
KCk7CisgICAgbV9yaW5nQnVmZmVyLT5hbGxvY2F0ZShudW1iZXJPZkNoYW5uZWxzLCBieXRlc1Bl
ckZyYW1lLCBjYXBhY2l0eSk7CisKKyAgICAvLyBBdWRpb0J1ZmZlckxpc3QgaXMgYSB2YXJpYWJs
ZS1sZW5ndGggc3RydWN0LCBzbyBjcmVhdGUgb24gdGhlIGhlYXAgd2l0aCBhIGdlbmVyaWMgbmV3
KCkgb3BlcmF0b3IKKyAgICAvLyB3aXRoIGEgY3VzdG9tIHNpemUsIGFuZCBpbml0aWFsaXplIHRo
ZSBzdHJ1Y3QgbWFudWFsbHkuCisgICAgc2l6ZV90IGJ1ZmZlckxpc3RTaXplID0gc2l6ZW9mKEF1
ZGlvQnVmZmVyTGlzdCkgKyAoc2l6ZW9mKEF1ZGlvQnVmZmVyKSAqIHN0ZDo6bWF4KDEsIG51bWJl
ck9mQ2hhbm5lbHMgLSAxKSk7CisgICAgbV9saXN0ID0gc3RkOjp1bmlxdWVfcHRyPEF1ZGlvQnVm
ZmVyTGlzdD4oKEF1ZGlvQnVmZmVyTGlzdCopIDo6b3BlcmF0b3IgbmV3IChidWZmZXJMaXN0U2l6
ZSkpOworICAgIG1lbXNldChtX2xpc3QuZ2V0KCksIDAsIGJ1ZmZlckxpc3RTaXplKTsKKyAgICBt
X2xpc3QtPm1OdW1iZXJCdWZmZXJzID0gbnVtYmVyT2ZDaGFubmVsczsKKworICAgIFJlZlB0cjxB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQz4gc3Ryb25nVGhpcyA9IHRoaXM7CisgICAgY2FsbE9u
TWFpblRocmVhZChbc3Ryb25nVGhpcywgbnVtYmVyT2ZDaGFubmVscywgc2FtcGxlUmF0ZV0gewor
ICAgICAgICBzdHJvbmdUaGlzLT5tX2NsaWVudC0+c2V0Rm9ybWF0KG51bWJlck9mQ2hhbm5lbHMs
IHNhbXBsZVJhdGUpOworICAgIH0pOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDOjp1bnByZXBhcmUoKQoreworICAgIG1fdGFwRGVzY3JpcHRpb24gPSBudWxscHRyOworICAg
IG1fb3V0cHV0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIG1fcmluZ0J1ZmZlciA9IG51bGxw
dHI7CisgICAgbV9saXN0ID0gbnVsbHB0cjsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQzo6cHJvY2VzcyhDTUl0ZW1Db3VudCBudW1iZXJPZkZyYW1lcywgTVRBdWRpb1Byb2Nl
c3NpbmdUYXBGbGFncyBmbGFncywgQXVkaW9CdWZmZXJMaXN0ICpidWZmZXJMaXN0SW5PdXQsIENN
SXRlbUNvdW50ICpudW1iZXJGcmFtZXNPdXQsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MgKmZs
YWdzT3V0KQoreworICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CisKKyAgICBDTUl0ZW1Db3VudCBp
dGVtQ291bnQgPSAwOworICAgIE9TU3RhdHVzIHN0YXR1cyA9IE1UQXVkaW9Qcm9jZXNzaW5nVGFw
R2V0U291cmNlQXVkaW8obV90YXAuZ2V0KCksIG51bWJlck9mRnJhbWVzLCBidWZmZXJMaXN0SW5P
dXQsIGZsYWdzT3V0LCBudWxscHRyLCAmaXRlbUNvdW50KTsKKyAgICBpZiAoc3RhdHVzICE9IG5v
RXJyIHx8ICFpdGVtQ291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmluZ0J1ZmZlci0+
c3RvcmUoYnVmZmVyTGlzdEluT3V0LCBpdGVtQ291bnQsIG1fd3JpdGVDb3VudCk7CisgICAgbV93
cml0ZUNvdW50ICs9IGl0ZW1Db3VudDsKKworICAgIC8vIE11dGUgdGhlIGRlZmF1bHQgYXVkaW8g
cGxheWJhY2sgYnkgemVyb2luZyB0aGUgdGFwLW93bmVkIGJ1ZmZlcnMuCisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IGJ1ZmZlckxpc3RJbk91dC0+bU51bWJlckJ1ZmZlcnM7ICsraSkgewor
ICAgICAgICBBdWRpb0J1ZmZlciYgYnVmZmVyID0gYnVmZmVyTGlzdEluT3V0LT5tQnVmZmVyc1tp
XTsKKyAgICAgICAgbWVtc2V0KGJ1ZmZlci5tRGF0YSwgMCwgYnVmZmVyLm1EYXRhQnl0ZVNpemUp
OworICAgIH0KKyAgICAqbnVtYmVyRnJhbWVzT3V0ID0gMDsKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakMuaAppbmRleCAzNDkzZWNmOGFjZjQ5OWM5OGMwOTI4MjEyMGJmODU5MzU1
NjBkMmI5Li4zYTk2ODczNzM2ZGJiZGViMTRlYjQ2NTBmOWE0MmZmNWNiMjUyZGVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5oCkBAIC02Miw2ICs2Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIEluYmFuZE1ldGFkYXRhVGV4dFRy
YWNrUHJpdmF0ZUFWRjsKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDOworY2xh
c3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM7CiBjbGFzcyBBdWRpb1RyYWNrUHJpdmF0ZUFW
Rk9iakM7CiBjbGFzcyBWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakM7CiAKQEAgLTIwNSw2ICsyMDYs
MTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3luY1RleHRUcmFja0JvdW5kcygpIG92
ZXJyaWRlOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIHZpcnR1YWwgQXVk
aW9Tb3VyY2VQcm92aWRlciogYXVkaW9Tb3VyY2VQcm92aWRlcigpOworI2VuZGlmCisKICAgICB2
b2lkIGNyZWF0ZUltYWdlR2VuZXJhdG9yKCk7CiAgICAgdm9pZCBkZXN0cm95SW1hZ2VHZW5lcmF0
b3IoKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlSW1hZ2VGb3JUaW1lSW5SZWN0
KGZsb2F0LCBjb25zdCBJbnRSZWN0Jik7CkBAIC0zMjAsNiArMzI1LDcgQEAgcHJpdmF0ZToKICAg
ICBtdXRhYmxlIFJldGFpblB0cjxOU0FycmF5PiBtX2NhY2hlZExvYWRlZFJhbmdlczsKICAgICBS
ZXRhaW5QdHI8TlNBcnJheT4gbV9jYWNoZWRUcmFja3M7CiAgICAgUmV0YWluUHRyPE5TQXJyYXk+
IG1fY3VycmVudE1ldGFEYXRhOworICAgIFJlZlB0cjxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qz4gbV9wcm92aWRlcjsKICAgICBGbG9hdFNpemUgbV9jYWNoZWRQcmVzZW50YXRpb25TaXplOwog
ICAgIGRvdWJsZSBtX2NhY2hlZER1cmF0aW9uOwogICAgIGRvdWJsZSBtX2NhY2hlZFJhdGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbQppbmRleCA5ODQ4ZDk5OGZhMjhiY2VjN2RlNmY4MDE1MWM2MDI3
YjE0YjdkNTRhLi42YzBkYzhhMWUwOWY5OTRhZjRiOWM4OGUwY2VmOTQzM2VlY2ExZDI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIk1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKIAogI2ltcG9ydCAiQVZUcmFja1ByaXZhdGVB
VkZPYmpDSW1wbC5oIgorI2ltcG9ydCAiQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCIKICNp
bXBvcnQgIkF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5oIgogI2ltcG9ydCAiQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaCIKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgpAQCAtNDgyLDYgKzQ4
MywxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExv
YWQoKQogICAgICAgICBbdHJhY2sgcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkg
Zm9yS2V5UGF0aDpAImVuYWJsZWQiXTsKICAgICBtX2NhY2hlZFRyYWNrcyA9IG51bGxwdHI7CiAK
KyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIGlmIChtX3Byb3ZpZGVyKQorICAgICAgICBtX3By
b3ZpZGVyLT5zZXRQbGF5ZXJJdGVtKG51bGxwdHIpOworI2VuZGlmCisKICAgICBzZXRJZ25vcmVM
b2FkU3RhdGVDaGFuZ2VzKGZhbHNlKTsKIH0KIApAQCAtODM2LDYgKzg0MiwxMSBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVySXRlbSgpCiAg
ICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIGFkZE91dHB1dDptX2xlZ2libGVPdXRwdXQuZ2V0KCld
OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIGlmIChtX3Byb3ZpZGVyKQor
ICAgICAgICBtX3Byb3ZpZGVyLT5zZXRQbGF5ZXJJdGVtKG1fYXZQbGF5ZXJJdGVtLmdldCgpKTsK
KyNlbmRpZgorCiAgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwogfQogCkBAIC0xNzM4LDYg
KzE3NDksMTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbihUZXh0VHJhY2tSZXAKIH0KICNlbmRpZiAvLyBFTkFCTEUo
VklERU9fVFJBQ0spCiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorQXVkaW9Tb3VyY2VQcm92aWRl
ciogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YXVkaW9Tb3VyY2VQcm92aWRl
cigpCit7CisgICAgaWYgKCFtX3Byb3ZpZGVyKQorICAgICAgICBtX3Byb3ZpZGVyID0gQXVkaW9T
b3VyY2VQcm92aWRlckFWRk9iakM6OmNyZWF0ZShtX2F2UGxheWVySXRlbS5nZXQoKSk7CisgICAg
cmV0dXJuIG1fcHJvdmlkZXIuZ2V0KCk7Cit9CisjZW5kaWYKKwogdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzaXplQ2hhbmdlZCgpCiB7CiAgICAgaWYgKCFtX2F2QXNz
ZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oCmluZGV4IGQ5MWMx
OTRlYmViYTQxNzY2ZjFlZWJlNDZjMTYzYzlkNWQwNjJhYjQuLmRiZTU4YjZmYzI4MzBhOTJhMzBj
ZWQ5NWJjNjdhMzlmNWE2MDgwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9Tb2Z0TGlua2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0
TGlua2luZy5oCkBAIC0xMTAsNyArMTEwLDYgQEAKICAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNm
dW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7IFwKICAgICB9CiAKLSNpZiBQTEFURk9STShJT1Mp
CiAjZGVmaW5lIFNPRlRfTElOS19NQVlfRkFJTChmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVz
dWx0VHlwZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25zLCBwYXJhbWV0ZXJOYW1lcykgXAogICAgIHN0
YXRpYyByZXN1bHRUeXBlICgqc29mdExpbmsjI2Z1bmN0aW9uTmFtZSkgcGFyYW1ldGVyRGVjbGFy
YXRpb25zID0gMDsgXAogICAgIFwKQEAgLTEzMiw3ICsxMzEsNiBAQAogICAgICAgICBBU1NFUlQo
c29mdExpbmsjI2Z1bmN0aW9uTmFtZSk7IFwKICAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNmdW5j
dGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7IFwKICAgICB9Ci0jZW5kaWYKIAogLyogY2FsbGluZ0Nv
bnZlbnRpb24gaXMgdW51c2VkIG9uIE1hYyBidXQgaXMgaGVyZSB0byBrZWVwIHRoZSBtYWNybyBw
cm90b3R5cGUgdGhlIHNhbWUgYmV0d2VlbiBNYWMgYW5kIFdpbmRvd3MuICovCiAjZGVmaW5lIFNP
RlRfTElOS19PUFRJT05BTChmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0VHlwZSwgY2Fs
bGluZ0NvbnZlbnRpb24sIHBhcmFtZXRlckRlY2xhcmF0aW9ucykgXAo=
</data>
<flag name="review"
          id="259674"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237535</attachid>
            <date>2014-09-02 17:19:57 -0700</date>
            <delta_ts>2014-09-05 08:44:41 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-135042-20140902171950.patch</filename>
            <type>text/plain</type>
            <size>55690</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDMxYWFjODcxOGQ5ZjJh
MGM2MDMyNzJmMTE5MWQ3NjgyM2IyYjg2Ny4uZmI4YjM4ZTRiYWZhMzQxYjM5MTk4YTZlYjhmYmI2
NTNlZDY5MzY5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDk0IEBACiAyMDE0LTA4LTI5ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtNYWNdIFN1cHBvcnQgYXVk
aW9Tb3VyY2VQcm92aWRlcigpIGluIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTA0Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgQXVkaW9Tb3VyY2VQcm92aWRlciBpbiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLCB0aGVyZWJ5CisgICAgICAgIHN1cHBvcnRpbmcgTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlLgorCisgICAgICAgIEltcG9ydCB0aGUgQ0FSaW5nQnVmZmVyIGZyb20gQ29yZUF1ZGlv
IHNhbXBsZSBjb2RlLCBtYWtpbmcgdGhlIG5lY2Vzc2FyeSBtb2RpZmljYXRpb25zCisgICAgICAg
IGZvciBXZWJLaXQgc3R5bGUgYW5kIGNvZGluZyBjb252ZW50aW9ucy4gVGhlIHRocmVhZGluZyBh
c3N1bXB0aW9ucyBmb3IgdGhpcyBjbGFzcyBhcmUKKyAgICAgICAgdGhhdCB0aGVyZSB3aWxsIGJl
IGEgc2luZ2xlIHdyaXRlciB0aHJlYWQgYW5kIGEgc2luZ2xlIHJlYWRlciB0aHJlYWQuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmNyZWF0ZSk6IENyZWF0ZSBhIHVuaXF1ZV9wdHIu
CisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OkNBUmluZ0J1ZmZlcik6IFNpbXBsZSBj
b25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6fkNBUmluZ0J1ZmZl
cik6IFNpbXBsZSBkZXN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjph
bGxvY2F0ZSk6IEluaXRpYWxpemUgdGhlIGJ1ZmZlcnMgYW5kIHRpbWUgYm91bmRzIHN0cnVjdHVy
ZXMuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmRlYWxsb2NhdGUpOiBEZXN0cm95
IHNhbWUuCisgICAgICAgIChXZWJDb3JlOjpaZXJvUmFuZ2UpOiBTdGF0aWMgdXRpbGl0eSBtZXRo
b2QuCisgICAgICAgIChXZWJDb3JlOjpTdG9yZUFCTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RmV0Y2hBQkwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Olplcm9BQkwpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6c3RvcmUpOiBTdG9yZSB0aGUgcGFzc2Vk
IGluIGJ1ZmZlciBpbiB0aGUgcmluZyBidWZmZXIsIHdyYXBwaW5nCisgICAgICAgICAgICBpZiBu
ZWNlc3NhcnkuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OnNldFRpbWVCb3VuZHMp
OiBTZXQgdGhlIG5ldyB0aW1lIGJvdW5kcyBieSBpbmNyZW1lbnRpbmcgdGhlCisgICAgICAgICAg
ICBib3VuZHMgaW5kZXggbG9jYWxseSwgZmlsbGluZyBpbiB0aGUgbmV3IHZhbHVlcywgdGhlbiBh
dG9taWNhbGx5IGluY3JlbWVudGluZyB0aGUKKyAgICAgICAgICAgIHJlYWRlci12aXNpYmxlIGlu
ZGV4LgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpnZXRUaW1lQm91bmRzKTogR2V0
IHRoZSBuZXcgdGltZSBib3VuZHMgYnkgbWFza2luZyB0aGUgdGltZQorICAgICAgICAgICAgYm91
bmRzIGluZGV4LCBhbmQgdXNpbmcgaXQgYXMgYW4gb2Zmc2V0IHRvIHRoZSB0aW1lIGJvdW5kcyBh
cnJheS4gUHJvdGVjdCBhZ2FpbnN0CisgICAgICAgICAgICBDUFUgc3RhcnZhdGlvbiBvbiB0aGUg
cmVhZGluZyB0aHJlYWQgYnkgY2hlY2tpbmcgdGhlIGluZGV4IGFnYWluc3QgdGhlIHN0b3JlZAor
ICAgICAgICAgICAgaW5kZXggaW4gdGhlIGFycmF5IGVudHJ5LiBUaGlzIGNoZWNrIHdpbGwgZmFp
bCBpZiB0aGUgd3JpdGluZyB0aHJlYWQgaGFzIHdyYXBwZWQKKyAgICAgICAgICAgIG1vcmUgdGhh
biB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6
OmNsaXBUaW1lQm91bmRzKTogQ2xhbXAgdGhlIHBhc3NlZCB2YWx1ZXMgdG8gdGhlIGF2YWlsYWJs
ZSBib3VuZHMuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OnN0YXJ0RnJhbWUpOiBT
aW1wbGUgYWNjZXNzb3IuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmVuZEZyYW1l
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmZldGNoKTogUmVhZCBh
biBhdWRpbyBidWZmZXIgbGlzdCBmcm9tIHRoZSByaW5nIGJ1ZmZlciwgcG9zc2JpbHkKKyAgICAg
ICAgICAgIHdyYXBwaW5nIGFyb3VuZCB0byB0aGUgc3RhcnQgb2YgdGhlIHJpbmcgYnVmZmVyLgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6Om51bWJlck9mQ2hhbm5lbHMpOiBTaW1wbGUgYWNj
ZXNzb3IuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmZyYW1lT2Zmc2V0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OlRpbWVCb3VuZHM6OlRpbWVCb3Vu
ZHMpOiBTdHJ1Y3QgaG9sZGluZyB0aGUgc3RhcnQgYW5kIGVuZCBmcmFtZSB2YWx1ZXMuCisKKyAg
ICAgICAgQWRkIGFuIGltcGxlbWVudGF0aW9uIG9mIEF1ZGlvU291cmNlUHJvdmlkZXIsIHVzaW5n
IEFWQXVkaW9NaXggYW5kIE1UQXVkaW9Qcm9jZXNzaW5nVGFwCisgICAgICAgIHRvIHRhcCBhbiBB
VlBsYXllckl0ZW0ncyBhdWRpbyBvdXRwdXQgYW5kIGZlZWQgaXQgdG8gYSBNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVh
dGUpOiBTaW1wbGUgZmFjdG9yeS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlk
ZXJBVkZPYmpDOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyk6IFNpbXBsZSBjb25zdHJ1Y3Rv
ci4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp+QXVkaW9T
b3VyY2VQcm92aWRlckFWRk9iakMpOiBTaW1wbGUgZGVzdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm92aWRlSW5wdXQpOiBQdXNoIGF1ZGlv
IGludG8gdGhlIHJpbmcgYnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakM6OnNldENsaWVudCk6IENhbGwgZGVzdHJveU1peCgpL2NyZWF0ZU1peCgpIGFz
IGFwcHJvcHJpYXRlLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akM6OnNldFBsYXllckl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDOjpkZXN0cm95TWl4KTogRGV0YWNoIGFuZCBkZXN0cm95IHRoZSBBVkF1
ZGlvTWl4IGFuZCB0YXAuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQzo6Y3JlYXRlTWl4KTogU2V0IHVwIHRoZSBBVkF1ZGlvTWl4IGFuZCB0YXAgYW5kIGF0dGFj
aCB0bworICAgICAgICAgICAgdGhlIEFWUGxheWVySXRlbS4KKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjppbml0Q2FsbGJhY2spOiBQYXNzIHRvIGNsYXNzIG1l
dGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5h
bGl6ZUNhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQzo6cHJlcGFyZUNhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6dW5wcmVwYXJlQ2FsbGJhY2spOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzQ2FsbGJh
Y2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpD
Ojppbml0KTogU2V0IHVwIHRoZSBzdG9yYWdlIHBvaW50ZXIgZm9yIHRoZSB0YXAuCisgICAgICAg
IChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6ZmluYWxpemUpOiBOby1vcC4K
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOiBDb21wYXJlIHR3byBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24gb2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcmVw
YXJlKTogQ3JlYXRlIGFuIEF1ZGlvQ292ZXJ0ZXIgb2JqZWN0IGlmIG5lY2Vzc2FyeSwKKyAgICAg
ICAgICAgIGNyZWF0ZSB0aGUgcmluZyBidWZmZXIsIGFuZCBub3RpZnkgdGhlIGNsaWVudCBvZiBm
b3JtYXQgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDOjp1bnByZXBhcmUpOiBEZXN0cm95IHNhbWUuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2Vzcyk6IENvcHkgc2FtcGxlcyBvdXQgb2YgdGhlIHJp
bmcgYnVmZmVyLAorICAgICAgICAgICAgZm9ybWF0IGNvbnZlcnRpbmcgdGhlbSBpZiBuZWNlc3Nh
cnkuIE11dGUgb3JpZ2luYWwgYXVkaW8uCisKKyAgICAgICAgQ3JlYXRlIHRoZSBBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQyBvYmplY3QgYW5kIG5vdGlmeSBpdCB3aGVuIHRoZSBjdXJyZW50IEFW
UGxheWVySXRlbSBjaGFuZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVySXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjphdWRpb1Nv
dXJjZVByb3ZpZGVyKToKKworICAgICAgICBFbmFibGUgU09GVF9MSU5LX01BWV9GQUlMIG9uIHRo
ZSBNYWMgcGxhdGZvcm0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaDoK
KworICAgICAgICBBZGQgbmV3IGZpbGVzIHRvIHRoZSBwcm9qZWN0LgorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisyMDE0LTA4LTI5ICBKZXIgTm9ibGUg
IDxqZXIubm9ibGVAYXBwbGUuY29tPgorCiAgICAgICAgIFtNU0VdIEFkZCBzZXR0aW5nIGZvciBy
ZWxlYXNlLWJ1aWxkIGxvZ2dpbmcgb2YgVmlkZW9QbGF5YmFja1F1YWxpdHkKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjM5OAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWJmNWE0
OTg4OTM1ZTczNzQ5Njk2MWFhZTE3Njg0YjRjOGQxMmUxNi4uY2U0YWE3NzU0M2QyOTZkODYxYWU5
NWEzODljY2VhNWUyZGVjMWNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTYzNiw2ICs1NjM2LDggQEAKIAkJQ0Q4MjAzMEQx
Mzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgyMDMw
OTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ci5tbSAqLzsgfTsKIAkJQ0Q4MjAzMTAxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1h
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4
MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEODIwMzExMTM5NUFDRTcw
MEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2lu
ZG93QW5pbWF0aW9uLm1tICovOyB9OworCQlDRDhBN0JCQjE5NzczNUZFMDBDQkQ2NDMgLyogQXVk
aW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDRDhBN0JCOTE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakMubW0gKi87IH07CisJCUNEOEE3QkJDMTk3NzM1RkUwMENCRDY0MyAvKiBB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0Q4QTdCQkExOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDLmggKi87IH07CiAJCUNEOEI1QTQyMTgwRDE0OUEwMDhCOEU2NSAvKiBW
aWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEI1QTQwMTgwRDE0OUEwMDhCOEU2NSAvKiBW
aWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0Q4QjVBNDMx
ODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCNUE0MTE4
MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAq
LzsgfTsKIAkJQ0Q4QjVBNDYxODBERkY0RTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tNZWRpYVNvdXJj
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QjVB
NDUxODBERkY0RTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5oICovOyB9OwpAQCAt
NTY4MSw2ICs1NjgzLDggQEAKIAkJQ0RDNjlERDcxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVG
dWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREM2OURENTE2MzIwMjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3Jl
ZW5XYXJuaW5nVmlldy5tbSAqLzsgfTsKIAkJQ0RDNjlEREExNjM3MUZENDAwN0MzOERGIC8qIFdl
YkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OUREODE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29y
ZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlDREM2OUREQjE2MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29y
ZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OUREOTE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1
bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gKi87IH07CisJCUNEQzczNDE0MTk3Nzg5NkMwMDQ2
QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RDNzM0MTIxOTc3ODk2QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5j
cHAgKi87IH07CisJCUNEQzczNDE1MTk3Nzg5NkQwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzczNDEzMTk3
Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCAqLzsgfTsKIAkJQ0RDOEI1QTIxODA0NjM0
NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUEwMTgwNDYz
NDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi87
IH07CiAJCUNEQzhCNUEzMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQzhCNUExMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0RDOEI1QTYxODA0NzRGNzAwMTZFNjg1IC8qIE1l
ZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBNDE4MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5tbSAqLzsgfTsKQEAgLTEzMDU4LDYgKzEzMDYyLDggQEAKIAkJQ0Q4MjAz
MDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2Vi
V2luZG93QW5pbWF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV2ViV2luZG93QW5pbWF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
RDhBN0JCOTE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q4QTdCQkExOTc3
MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOEI1QTQwMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRl
b1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1t
OyBwYXRoID0gb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q4QjVBNDExODBEMTQ5QTAwOEI4RTY1IC8qIFZp
ZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHBhdGgg
PSBvYmpjL1ZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNEOEI1QTQ0MTgwREQ4RDYwMDhCOEU2NSAvKiBWaWRlb1RyYWNr
TWVkaWFTb3VyY2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzEzMyw2ICsxMzEzOSw4IEBACiAJCUNEQzY5REQ1MTYz
MjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5n
Vmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDNjlERDgxNjM3MUZEMzAw
N0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzY5REQ5MTYzNzFGRDMwMDdDMzhERiAv
KiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREM3MzQxMjE5Nzc4OTZDMDA0NkJGQzUg
LyogQ0FSaW5nQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENBUmluZ0J1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQzczNDEz
MTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ0FSaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW07IHBhdGggPSBvYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0RDOEI1QTExODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDsgcGF0aCA9IG9iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNEQzhCNUE0MTgwNDc0RjcwMDE2RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTWVkaWFTb3VyY2VQcml2
YXRlQVZGT2JqQy5tbTsgcGF0aCA9IG9iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNjIyLDYgKzIxNjMwLDggQEAKIAkJCQlD
RDhCNUE0MDE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMubW0gKi8sCiAJCQkJQ0Q3RTA1MjAxNjUxQTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZS
ZXNvdXJjZUxvYWRlci5oICovLAogCQkJCUNEN0UwNTIxMTY1MUE4NDEwMEMxMjAxRiAvKiBXZWJD
b3JlQVZGUmVzb3VyY2VMb2FkZXIubW0gKi8sCisJCQkJQ0Q4QTdCQjkxOTc3MzVGRTAwQ0JENjQz
IC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovLAorCQkJCUNEOEE3QkJBMTk3NzM1
RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovLAogCQkJKTsKIAkJ
CW5hbWUgPSBvYmpjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIzMTM0LDYgKzIz
MTQ0LDggQEAKIAkJCQlDRDU0REU0NTE3NDY4QjZGMDA1RTVCMzYgLyogTWVkaWFTZXNzaW9uTWFu
YWdlck1hYy5jcHAgKi8sCiAJCQkJQ0QyRjRBMjUxOEQ4QTM0OTAwNjM3NDZEIC8qIEF1ZGlvSGFy
ZHdhcmVMaXN0ZW5lck1hYy5jcHAgKi8sCiAJCQkJQ0QyRjRBMjYxOEQ4QTM0OTAwNjM3NDZEIC8q
IEF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hYy5oICovLAorCQkJCUNEQzczNDEyMTk3Nzg5NkMwMDQ2
QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3BwICovLAorCQkJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2QkZD
NSAvKiBDQVJpbmdCdWZmZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0MzU5LDYgKzI0MzcxLDcgQEAKIAkJCQlBOEVBNzlGQTBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThFQTc5RjcwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCUNEQzczNDE1MTk3Nzg5NkQwMDQ2QkZDNSAvKiBDQVJpbmdC
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OEU1MDgyNDVFNTkwMDFFOUFCQyAvKiBI
VE1MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0IzODY3MTIyODgzRTkwMEI4MUZG
OCAvKiBIVE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REU4MDk5
RTY0OTIwMDU2RTU4MSAvKiBodG1sZWRpdGluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTA0NCw2
ICsyNTA1Nyw3IEBACiAJCQkJQjJGQTNEQTMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGVuZ3Ro
TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQTUwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RBNzBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdMaW5lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
Q0Q4QTdCQkMxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RBOTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdNYXJr
ZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RBQjBBQjc1QTZGMDAwRTVBQzQg
LyogSlNTVkdNYXNrRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQUQwQUI3NUE2
RjAwMEU1QUM0IC8qIEpTU1ZHTWF0cml4LmggaW4gSGVhZGVycyAqLywKQEAgLTI5MzEwLDYgKzI5
MzI0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDYwRUFGRDYzNzAwMzY5NUM4IC8qIFNoYXJl
ZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgx
IC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0Q4QTdCQkIxOTc3MzVG
RTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDFFMUIxRDMwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0MUQxNjhFNzEwMjI2RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2VyR2xv
YmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCNzg0MjAxNjM5Q0JCRTAwMDdCNjky
IC8qIFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTQ3NSw2
ICsyOTQ5MCw3IEBACiAJCQkJQjIyMjc5QTQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QjA1
MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdCMDYwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDREM3MzQxNDE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FS
aW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QjA4MEQwMEJGRjEwMDcxQjc4
MiAvKiBTVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUE3
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDdXJzb3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyMjI3OUFEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdEZWZzRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9D
QVJpbmdCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmlu
Z0J1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJkODNhYjc4ZWNhOWQ2ZGZkOTFmODBiNWMxZThjNzU3
ZGU4OTg4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9DQVJpbmdCdWZmZXIuY3BwCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNBUmluZ0J1ZmZlci5oIgorCisjaW5jbHVkZSA8
Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8bGlia2Vybi9PU0F0b21pYy5o
PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK2NvbnN0IHVpbnQzMl90IGtHZW5lcmFs
UmluZ1RpbWVCb3VuZHNRdWV1ZVNpemUgPSAzMjsKK2NvbnN0IHVpbnQzMl90IGtHZW5lcmFsUmlu
Z1RpbWVCb3VuZHNRdWV1ZU1hc2sgPSBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVTaXplIC0g
MTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8Q0FSaW5nQnVmZmVy
PiBDQVJpbmdCdWZmZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxD
QVJpbmdCdWZmZXI+KG5ldyBDQVJpbmdCdWZmZXIoKSk7Cit9CisKK0NBUmluZ0J1ZmZlcjo6Q0FS
aW5nQnVmZmVyKCkKKyAgICA6IG1fY2hhbm5lbENvdW50KDApCisgICAgLCBtX2ZyYW1lQ291bnQo
MCkKKyAgICAsIG1fY2FwYWNpdHlCeXRlcygwKQorICAgICwgbV90aW1lQm91bmRzUXVldWUoa0dl
bmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlU2l6ZSkKKyAgICAsIG1fdGltZUJvdW5kc1F1ZXVlUHRy
KDApCit7Cit9CisKK0NBUmluZ0J1ZmZlcjo6fkNBUmluZ0J1ZmZlcigpCit7CisgICAgZGVhbGxv
Y2F0ZSgpOworfQorCit2b2lkIENBUmluZ0J1ZmZlcjo6YWxsb2NhdGUodWludDMyX3QgY2hhbm5l
bENvdW50LCBzaXplX3QgYnl0ZXNQZXJGcmFtZSwgc2l6ZV90IGZyYW1lQ291bnQpCit7CisgICAg
ZGVhbGxvY2F0ZSgpOworCisgICAgZnJhbWVDb3VudCA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3
byhmcmFtZUNvdW50KTsKKworICAgIG1fY2hhbm5lbENvdW50ID0gY2hhbm5lbENvdW50OworICAg
IG1fYnl0ZXNQZXJGcmFtZSA9IGJ5dGVzUGVyRnJhbWU7CisgICAgbV9mcmFtZUNvdW50ID0gZnJh
bWVDb3VudDsKKyAgICBtX2ZyYW1lQ291bnRNYXNrID0gZnJhbWVDb3VudCAtIDE7CisgICAgbV9j
YXBhY2l0eUJ5dGVzID0gYnl0ZXNQZXJGcmFtZSAqIGZyYW1lQ291bnQ7CisKKyAgICBzaXplX3Qg
cG9pbnRlcnNTaXplID0gY2hhbm5lbENvdW50ICogc2l6ZW9mKEJ5dGUqKTsKKyAgICBzaXplX3Qg
YWxsb2NTaXplID0gcG9pbnRlcnNTaXplICsgKG1fY2FwYWNpdHlCeXRlcyAqIGNoYW5uZWxDb3Vu
dCk7CisgICAgbV9idWZmZXJzID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShhbGxvY1NpemUsIDEpOwor
CisgICAgQnl0ZSoqIHBvaW50ZXJzID0gc3RhdGljX2Nhc3Q8Qnl0ZSoqPihtX2J1ZmZlcnMtPmRh
dGEoKSk7CisgICAgQnl0ZSogY2hhbm5lbERhdGEgPSBzdGF0aWNfY2FzdDxCeXRlKj4obV9idWZm
ZXJzLT5kYXRhKCkpICsgcG9pbnRlcnNTaXplOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNoYW5uZWxDb3VudDsgKytpKSB7CisgICAgICAgIHBvaW50ZXJzW2ldID0gY2hhbm5lbERh
dGE7CisgICAgICAgIGNoYW5uZWxEYXRhICs9IG1fY2FwYWNpdHlCeXRlczsKKyAgICB9CisKKyAg
ICBmb3IgKGF1dG8gdGltZUJvdW5kcyA6IG1fdGltZUJvdW5kc1F1ZXVlKSB7CisgICAgICAgIHRp
bWVCb3VuZHMubV9zdGFydEZyYW1lID0gMDsKKyAgICAgICAgdGltZUJvdW5kcy5tX2VuZEZyYW1l
ID0gMDsKKyAgICAgICAgdGltZUJvdW5kcy5tX3VwZGF0ZUNvdW50ZXIgPSAwOworICAgIH0KKyAg
ICBtX3RpbWVCb3VuZHNRdWV1ZVB0ciA9IDA7Cit9CisKK3ZvaWQgQ0FSaW5nQnVmZmVyOjpkZWFs
bG9jYXRlKCkKK3sKKyAgICBpZiAobV9idWZmZXJzKQorICAgICAgICBtX2J1ZmZlcnMuY2xlYXIo
KTsKKworICAgIG1fY2hhbm5lbENvdW50ID0gMDsKKyAgICBtX2NhcGFjaXR5Qnl0ZXMgPSAwOwor
ICAgIG1fZnJhbWVDb3VudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIFplcm9SYW5nZShCeXRlKiog
YnVmZmVycywgaW50IGNoYW5uZWxDb3VudCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG5ieXRlcykK
K3sKKyAgICB3aGlsZSAoLS1jaGFubmVsQ291bnQgPj0gMCkgeworICAgICAgICBtZW1zZXQoKmJ1
ZmZlcnMgKyBvZmZzZXQsIDAsIG5ieXRlcyk7CisgICAgICAgICsrYnVmZmVyczsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIFN0b3JlQUJMKEJ5dGUqKiBidWZmZXJzLCBzaXplX3QgZGVzdE9mZnNl
dCwgY29uc3QgQXVkaW9CdWZmZXJMaXN0KiBsaXN0LCBzaXplX3Qgc3JjT2Zmc2V0LCBzaXplX3Qg
bmJ5dGVzKQoreworICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsK
KyAgICBjb25zdCBBdWRpb0J1ZmZlciogc3JjID0gbGlzdC0+bUJ1ZmZlcnM7CisgICAgd2hpbGUg
KC0tY2hhbm5lbENvdW50ID49IDApIHsKKyAgICAgICAgaWYgKHNyY09mZnNldCA+IHNyYy0+bURh
dGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtZW1jcHkoKmJ1ZmZl
cnMgKyBkZXN0T2Zmc2V0LCBzdGF0aWNfY2FzdDxCeXRlKj4oc3JjLT5tRGF0YSkgKyBzcmNPZmZz
ZXQsIHN0ZDo6bWluPHNpemVfdD4obmJ5dGVzLCBzcmMtPm1EYXRhQnl0ZVNpemUgLSBzcmNPZmZz
ZXQpKTsKKyAgICAgICAgKytidWZmZXJzOworICAgICAgICArK3NyYzsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIEZldGNoQUJMKEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGRlc3RPZmZz
ZXQsIEJ5dGUqKiBidWZmZXJzLCBzaXplX3Qgc3JjT2Zmc2V0LCBzaXplX3QgbmJ5dGVzKQorewor
ICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKKyAgICBBdWRpb0J1
ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJzOworICAgIHdoaWxlICgtLWNoYW5uZWxDb3VudCA+
PSAwKSB7CisgICAgICAgIGlmIChkZXN0T2Zmc2V0ID4gZGVzdC0+bURhdGFCeXRlU2l6ZSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Qnl0ZSo+KGRl
c3QtPm1EYXRhKSArIGRlc3RPZmZzZXQsICpidWZmZXJzICsgc3JjT2Zmc2V0LCBzdGQ6Om1pbjxz
aXplX3Q+KG5ieXRlcywgZGVzdC0+bURhdGFCeXRlU2l6ZSAtIGRlc3RPZmZzZXQpKTsKKyAgICAg
ICAgKytidWZmZXJzOworICAgICAgICArK2Rlc3Q7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBa
ZXJvQUJMKEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGRlc3RPZmZzZXQsIHNpemVfdCBu
Ynl0ZXMpCit7CisgICAgaW50IG5CdWZmZXJzID0gbGlzdC0+bU51bWJlckJ1ZmZlcnM7CisgICAg
QXVkaW9CdWZmZXIqIGRlc3QgPSBsaXN0LT5tQnVmZmVyczsKKyAgICB3aGlsZSAoLS1uQnVmZmVy
cyA+PSAwKSB7CisgICAgICAgIGlmIChkZXN0T2Zmc2V0ID4gZGVzdC0+bURhdGFCeXRlU2l6ZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8Qnl0ZSo+
KGRlc3QtPm1EYXRhKSArIGRlc3RPZmZzZXQsIDAsIHN0ZDo6bWluPHNpemVfdD4obmJ5dGVzLCBk
ZXN0LT5tRGF0YUJ5dGVTaXplIC0gZGVzdE9mZnNldCkpOworICAgICAgICArK2Rlc3Q7CisgICAg
fQorfQorCitDQVJpbmdCdWZmZXI6OkVycm9yIENBUmluZ0J1ZmZlcjo6c3RvcmUoY29uc3QgQXVk
aW9CdWZmZXJMaXN0KiBsaXN0LCBzaXplX3QgZnJhbWVzVG9Xcml0ZSwgdWludDY0X3Qgc3RhcnRG
cmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lc1RvV3JpdGUpCisgICAgICAgIHJldHVybiBPazsKKwor
ICAgIGlmIChmcmFtZXNUb1dyaXRlID4gbV9mcmFtZUNvdW50KQorICAgICAgICByZXR1cm4gVG9v
TXVjaDsKKworICAgIHVpbnQ2NF90IGVuZEZyYW1lID0gc3RhcnRGcmFtZSArIGZyYW1lc1RvV3Jp
dGU7CisKKyAgICBpZiAoc3RhcnRGcmFtZSA8IGN1cnJlbnRFbmRGcmFtZSgpKSB7CisgICAgICAg
IC8vIFRocm93IGV2ZXJ5dGhpbmcgb3V0IHdoZW4gZ29pbmcgYmFja3dhcmRzLgorICAgICAgICBz
ZXRDdXJyZW50RnJhbWVCb3VuZHMoc3RhcnRGcmFtZSwgc3RhcnRGcmFtZSk7CisgICAgfSBlbHNl
IGlmIChlbmRGcmFtZSAtIGN1cnJlbnRTdGFydEZyYW1lKCkgPD0gbV9mcmFtZUNvdW50KSB7Cisg
ICAgICAgIC8vIFRoZSBidWZmZXIgaGFzIG5vdCB5ZXQgd3JhcHBlZCBhbmQgd2lsbCBub3QgbmVl
ZCB0by4KKyAgICAgICAgLy8gTm8tb3AuCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQWR2YW5j
ZSB0aGUgc3RhcnQgdGltZSBwYXN0IHRoZSByZWdpb24gd2UgYXJlIGFib3V0IHRvIG92ZXJ3cml0
ZQorICAgICAgICAvLyBzdGFydGluZyBvbmUgYnVmZmVyIG9mIHRpbWUgYmVoaW5kIHdoZXJlIHdl
J3JlIHdyaXRpbmcuCisgICAgICAgIHVpbnQ2NF90IG5ld1N0YXJ0RnJhbWUgPSBlbmRGcmFtZSAt
IG1fZnJhbWVDb3VudDsKKyAgICAgICAgdWludDY0X3QgbmV3RW5kRnJhbWUgPSBzdGQ6Om1heChu
ZXdTdGFydEZyYW1lLCBjdXJyZW50RW5kRnJhbWUoKSk7CisgICAgICAgIHNldEN1cnJlbnRGcmFt
ZUJvdW5kcyhuZXdTdGFydEZyYW1lLCBuZXdFbmRGcmFtZSk7CisgICAgfQorCisgICAgLy8gV3Jp
dGUgdGhlIG5ldyBmcmFtZXMuCisgICAgQnl0ZSoqIGJ1ZmZlcnMgPSBzdGF0aWNfY2FzdDxCeXRl
Kio+KG1fYnVmZmVycy0+ZGF0YSgpKTsKKyAgICBzaXplX3Qgb2Zmc2V0MDsKKyAgICBzaXplX3Qg
b2Zmc2V0MTsKKyAgICB1aW50NjRfdCBjdXJFbmQgPSBjdXJyZW50RW5kRnJhbWUoKTsKKworICAg
IGlmIChzdGFydEZyYW1lID4gY3VyRW5kKSB7CisgICAgICAgIC8vIFdlIGFyZSBza2lwcGluZyBz
b21lIHNhbXBsZXMsIHNvIHplcm8gdGhlIHJhbmdlIHdlIGFyZSBza2lwcGluZy4KKyAgICAgICAg
b2Zmc2V0MCA9IGZyYW1lT2Zmc2V0KGN1ckVuZCk7CisgICAgICAgIG9mZnNldDEgPSBmcmFtZU9m
ZnNldChzdGFydEZyYW1lKTsKKyAgICAgICAgaWYgKG9mZnNldDAgPCBvZmZzZXQxKQorICAgICAg
ICAgICAgWmVyb1JhbmdlKGJ1ZmZlcnMsIG1fY2hhbm5lbENvdW50LCBvZmZzZXQwLCBvZmZzZXQx
IC0gb2Zmc2V0MCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgWmVyb1JhbmdlKGJ1ZmZl
cnMsIG1fY2hhbm5lbENvdW50LCBvZmZzZXQwLCBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwKTsK
KyAgICAgICAgICAgIFplcm9SYW5nZShidWZmZXJzLCBtX2NoYW5uZWxDb3VudCwgMCwgb2Zmc2V0
MSk7CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0MCA9IG9mZnNldDE7CisgICAgfSBlbHNlCisg
ICAgICAgIG9mZnNldDAgPSBmcmFtZU9mZnNldChzdGFydEZyYW1lKTsKKworICAgIG9mZnNldDEg
PSBmcmFtZU9mZnNldChlbmRGcmFtZSk7CisgICAgaWYgKG9mZnNldDAgPCBvZmZzZXQxKQorICAg
ICAgICBTdG9yZUFCTChidWZmZXJzLCBvZmZzZXQwLCBsaXN0LCAwLCBvZmZzZXQxIC0gb2Zmc2V0
MCk7CisgICAgZWxzZSB7CisgICAgICAgIHNpemVfdCBuYnl0ZXMgPSBtX2NhcGFjaXR5Qnl0ZXMg
LSBvZmZzZXQwOworICAgICAgICBTdG9yZUFCTChidWZmZXJzLCBvZmZzZXQwLCBsaXN0LCAwLCBu
Ynl0ZXMpOworICAgICAgICBTdG9yZUFCTChidWZmZXJzLCAwLCBsaXN0LCBuYnl0ZXMsIG9mZnNl
dDEpOworICAgIH0KKworICAgIC8vIE5vdyB1cGRhdGUgdGhlIGVuZCB0aW1lLgorICAgIHNldEN1
cnJlbnRGcmFtZUJvdW5kcyhjdXJyZW50U3RhcnRGcmFtZSgpLCBlbmRGcmFtZSk7CisKKyAgICBy
ZXR1cm4gT2s7Cit9CisKK3ZvaWQgQ0FSaW5nQnVmZmVyOjpzZXRDdXJyZW50RnJhbWVCb3VuZHMo
dWludDY0X3Qgc3RhcnRUaW1lLCB1aW50NjRfdCBlbmRUaW1lKQoreworICAgIEJ5dGVTcGluTG9j
a2VyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOworICAgIHVpbnQzMl90IG5leHRQ
dHIgPSBtX3RpbWVCb3VuZHNRdWV1ZVB0ciArIDE7CisgICAgdWludDMyX3QgaW5kZXggPSBuZXh0
UHRyICYga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFzazsKKworICAgIG1fdGltZUJvdW5k
c1F1ZXVlW2luZGV4XS5tX3N0YXJ0RnJhbWUgPSBzdGFydFRpbWU7CisgICAgbV90aW1lQm91bmRz
UXVldWVbaW5kZXhdLm1fZW5kRnJhbWUgPSBlbmRUaW1lOworICAgIG1fdGltZUJvdW5kc1F1ZXVl
W2luZGV4XS5tX3VwZGF0ZUNvdW50ZXIgPSBuZXh0UHRyOworICAgIE9TQXRvbWljSW5jcmVtZW50
MzJCYXJyaWVyKHN0YXRpY19jYXN0PGludDMyX3QqPigmbV90aW1lQm91bmRzUXVldWVQdHIpKTsK
K30KKwordm9pZCBDQVJpbmdCdWZmZXI6OmdldEN1cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCAm
c3RhcnRUaW1lLCB1aW50NjRfdCAmZW5kVGltZSkKK3sKKyAgICBCeXRlU3BpbkxvY2tlciBsb2Nr
ZXIobV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrKTsKKyAgICB1aW50MzJfdCBjdXJQdHIgPSBtX3Rp
bWVCb3VuZHNRdWV1ZVB0cjsKKyAgICB1aW50MzJfdCBpbmRleCA9IGN1clB0ciAmIGtHZW5lcmFs
UmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2s7CisgICAgQ0FSaW5nQnVmZmVyOjpUaW1lQm91bmRzJiBi
b3VuZHMgPSBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF07CisKKyAgICBzdGFydFRpbWUgPSBib3Vu
ZHMubV9zdGFydEZyYW1lOworICAgIGVuZFRpbWUgPSBib3VuZHMubV9lbmRGcmFtZTsKK30KKwor
dm9pZCBDQVJpbmdCdWZmZXI6OmNsaXBUaW1lQm91bmRzKHVpbnQ2NF90JiBzdGFydFJlYWQsIHVp
bnQ2NF90JiBlbmRSZWFkKQoreworICAgIHVpbnQ2NF90IHN0YXJ0VGltZTsKKyAgICB1aW50NjRf
dCBlbmRUaW1lOworCisgICAgZ2V0Q3VycmVudEZyYW1lQm91bmRzKHN0YXJ0VGltZSwgZW5kVGlt
ZSk7CisKKyAgICBpZiAoc3RhcnRSZWFkID4gZW5kVGltZSB8fCBlbmRSZWFkIDwgc3RhcnRUaW1l
KSB7CisgICAgICAgIGVuZFJlYWQgPSBzdGFydFJlYWQ7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBzdGFydFJlYWQgPSBzdGQ6Om1heChzdGFydFJlYWQsIHN0YXJ0VGltZSk7CisgICAg
ZW5kUmVhZCA9IHN0ZDo6bWluKGVuZFJlYWQsIGVuZFRpbWUpOworICAgIGVuZFJlYWQgPSBzdGQ6
Om1heChlbmRSZWFkLCBzdGFydFJlYWQpOworfQorCit1aW50NjRfdCBDQVJpbmdCdWZmZXI6OmN1
cnJlbnRTdGFydEZyYW1lKCkgY29uc3QKK3sKKyAgICB1aW50MzJfdCBpbmRleCA9IG1fdGltZUJv
dW5kc1F1ZXVlUHRyICYga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFzazsKKyAgICByZXR1
cm4gbV90aW1lQm91bmRzUXVldWVbaW5kZXhdLm1fc3RhcnRGcmFtZTsKK30KKwordWludDY0X3Qg
Q0FSaW5nQnVmZmVyOjpjdXJyZW50RW5kRnJhbWUoKSBjb25zdAoreworICAgIHVpbnQzMl90IGlu
ZGV4ID0gbV90aW1lQm91bmRzUXVldWVQdHIgJiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVN
YXNrOworICAgIHJldHVybiBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF0ubV9lbmRGcmFtZTsKK30K
KworQ0FSaW5nQnVmZmVyOjpFcnJvciBDQVJpbmdCdWZmZXI6OmZldGNoKEF1ZGlvQnVmZmVyTGlz
dCogbGlzdCwgc2l6ZV90IG5GcmFtZXMsIHVpbnQ2NF90IHN0YXJ0UmVhZCkKK3sKKyAgICBpZiAo
IW5GcmFtZXMpCisgICAgICAgIHJldHVybiBPazsKKyAgICAKKyAgICBzdGFydFJlYWQgPSBzdGQ6
Om1heDx1aW50NjRfdD4oMCwgc3RhcnRSZWFkKTsKKyAgICAKKyAgICB1aW50NjRfdCBlbmRSZWFk
ID0gc3RhcnRSZWFkICsgbkZyYW1lczsKKyAgICAKKyAgICB1aW50NjRfdCBzdGFydFJlYWQwID0g
c3RhcnRSZWFkOworICAgIHVpbnQ2NF90IGVuZFJlYWQwID0gZW5kUmVhZDsKKyAgICAKKyAgICBj
bGlwVGltZUJvdW5kcyhzdGFydFJlYWQsIGVuZFJlYWQpOworCisgICAgaWYgKHN0YXJ0UmVhZCA9
PSBlbmRSZWFkKSB7CisgICAgICAgIFplcm9BQkwobGlzdCwgMCwgbkZyYW1lcyAqIG1fYnl0ZXNQ
ZXJGcmFtZSk7CisgICAgICAgIHJldHVybiBPazsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGJ5
dGVTaXplID0gKGVuZFJlYWQgLSBzdGFydFJlYWQpICogbV9ieXRlc1BlckZyYW1lOworICAgIAor
ICAgIHNpemVfdCBkZXN0U3RhcnRCeXRlT2Zmc2V0ID0gc3RkOjptYXg8c2l6ZV90PigwLCAoc3Rh
cnRSZWFkIC0gc3RhcnRSZWFkMCkgKiBtX2J5dGVzUGVyRnJhbWUpOworICAgIAorICAgIGlmIChk
ZXN0U3RhcnRCeXRlT2Zmc2V0ID4gMCkKKyAgICAgICAgWmVyb0FCTChsaXN0LCAwLCBzdGQ6Om1p
bjxzaXplX3Q+KG5GcmFtZXMgKiBtX2J5dGVzUGVyRnJhbWUsIGRlc3RTdGFydEJ5dGVPZmZzZXQp
KTsKKworICAgIHNpemVfdCBkZXN0RW5kU2l6ZSA9IHN0ZDo6bWF4PHNpemVfdD4oMCwgZW5kUmVh
ZDAgLSBlbmRSZWFkKTsKKyAgICBpZiAoZGVzdEVuZFNpemUgPiAwKQorICAgICAgICBaZXJvQUJM
KGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQgKyBieXRlU2l6ZSwgZGVzdEVuZFNpemUgKiBtX2J5
dGVzUGVyRnJhbWUpOworCisgICAgQnl0ZSAqKmJ1ZmZlcnMgPSBzdGF0aWNfY2FzdDxCeXRlKio+
KG1fYnVmZmVycy0+ZGF0YSgpKTsKKyAgICBzaXplX3Qgb2Zmc2V0MCA9IGZyYW1lT2Zmc2V0KHN0
YXJ0UmVhZCk7CisgICAgc2l6ZV90IG9mZnNldDEgPSBmcmFtZU9mZnNldChlbmRSZWFkKTsKKyAg
ICBzaXplX3QgbmJ5dGVzOworICAgIAorICAgIGlmIChvZmZzZXQwIDwgb2Zmc2V0MSkgeworICAg
ICAgICBuYnl0ZXMgPSBvZmZzZXQxIC0gb2Zmc2V0MDsKKyAgICAgICAgRmV0Y2hBQkwobGlzdCwg
ZGVzdFN0YXJ0Qnl0ZU9mZnNldCwgYnVmZmVycywgb2Zmc2V0MCwgbmJ5dGVzKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBuYnl0ZXMgPSBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwOworICAgICAg
ICBGZXRjaEFCTChsaXN0LCBkZXN0U3RhcnRCeXRlT2Zmc2V0LCBidWZmZXJzLCBvZmZzZXQwLCBu
Ynl0ZXMpOworICAgICAgICBGZXRjaEFCTChsaXN0LCBkZXN0U3RhcnRCeXRlT2Zmc2V0ICsgbmJ5
dGVzLCBidWZmZXJzLCAwLCBvZmZzZXQxKTsKKyAgICAgICAgbmJ5dGVzICs9IG9mZnNldDE7Cisg
ICAgfQorICAgIAorICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsK
KyAgICBBdWRpb0J1ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJzOworICAgIHdoaWxlICgtLWNo
YW5uZWxDb3VudCA+PSAwKSB7CisgICAgICAgIGRlc3QtPm1EYXRhQnl0ZVNpemUgPSBuYnl0ZXM7
CisgICAgICAgIGRlc3QrKzsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIE9rOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOWQ5YjA1MjRhY2FhZTAzM2IyZDAxYjExNDBmOWRlZjkzOTVlYjQ3ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZm
ZXIuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQVJpbmdCdWZmZXJf
aAorI2RlZmluZSBDQVJpbmdCdWZmZXJfaAorCisjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZl
ci5oPgorI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK3R5cGVkZWYgc3RydWN0IEF1ZGlvQnVmZmVyTGlzdCBBdWRpb0J1ZmZlckxpc3Q7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0FSaW5nQnVmZmVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENBUmluZ0J1ZmZlcj4gY3JlYXRlKCk7CisgICAgfkNB
UmluZ0J1ZmZlcigpOworCisgICAgZW51bSBFcnJvciB7CisgICAgICAgIE9rLAorICAgICAgICBU
b29NdWNoLCAvLyBmZXRjaCBzdGFydCB0aW1lIGlzIGVhcmxpZXIgdGhhbiBidWZmZXIgc3RhcnQg
dGltZSBhbmQgZmV0Y2ggZW5kIHRpbWUgaXMgbGF0ZXIgdGhhbiBidWZmZXIgZW5kIHRpbWUKKyAg
ICAgICAgQ1BVT3ZlcmxvYWQsIC8vIHRoZSByZWFkZXIgaXMgdW5hYmxlIHRvIGdldCBlbm91Z2gg
Q1BVIGN5Y2xlcyB0byBjYXB0dXJlIGEgY29uc2lzdGVudCBzbmFwc2hvdCBvZiB0aGUgdGltZSBi
b3VuZHMKKyAgICB9OworCisgICAgdm9pZCBhbGxvY2F0ZSh1aW50MzJfdCBtX2NoYW5uZWxDb3Vu
dCwgc2l6ZV90IGJ5dGVzUGVyRnJhbWUsIHNpemVfdCBmcmFtZUNvdW50KTsKKyAgICB2b2lkIGRl
YWxsb2NhdGUoKTsKKyAgICBFcnJvciBzdG9yZShjb25zdCBBdWRpb0J1ZmZlckxpc3QqLCBzaXpl
X3QgZnJhbWVDb3VudCwgdWludDY0X3Qgc3RhcnRGcmFtZSk7CisgICAgRXJyb3IgZmV0Y2goQXVk
aW9CdWZmZXJMaXN0Kiwgc2l6ZV90IGZyYW1lQ291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUpOwor
ICAgIHZvaWQgZ2V0Q3VycmVudEZyYW1lQm91bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2
NF90ICZlbmRUaW1lKTsKKworICAgIHVpbnQzMl90IGNoYW5uZWxDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hhbm5lbENvdW50OyB9CisKK3ByaXZhdGU6CisgICAgQ0FSaW5nQnVmZmVyKCk7CisK
KyAgICBzaXplX3QgZnJhbWVPZmZzZXQodWludDY0X3QgZnJhbWVOdW1iZXIpIHsgcmV0dXJuIChm
cmFtZU51bWJlciAmIG1fZnJhbWVDb3VudE1hc2spICogbV9ieXRlc1BlckZyYW1lOyB9CisKKyAg
ICB2b2lkIGNsaXBUaW1lQm91bmRzKHVpbnQ2NF90JiBzdGFydFJlYWQsIHVpbnQ2NF90JiBlbmRS
ZWFkKTsKKworICAgIHVpbnQ2NF90IGN1cnJlbnRTdGFydEZyYW1lKCkgY29uc3Q7CisgICAgdWlu
dDY0X3QgY3VycmVudEVuZEZyYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDdXJyZW50RnJhbWVC
b3VuZHModWludDY0X3Qgc3RhcnRGcmFtZSwgdWludDY0X3QgZW5kRnJhbWUpOworCisgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcnM7CisgICAgdWludDMyX3QgbV9jaGFubmVsQ291bnQ7
CisgICAgc2l6ZV90IG1fYnl0ZXNQZXJGcmFtZTsKKyAgICB1aW50MzJfdCBtX2ZyYW1lQ291bnQ7
CisgICAgdWludDMyX3QgbV9mcmFtZUNvdW50TWFzazsKKyAgICBzaXplX3QgbV9jYXBhY2l0eUJ5
dGVzOworCisgICAgc3RydWN0IFRpbWVCb3VuZHMgeworICAgICAgICBUaW1lQm91bmRzKCkKKyAg
ICAgICAgICAgIDogbV9zdGFydEZyYW1lKDApCisgICAgICAgICAgICAsIG1fZW5kRnJhbWUoMCkK
KyAgICAgICAgICAgICwgbV91cGRhdGVDb3VudGVyKDApCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICB2b2xhdGlsZSB1aW50NjRfdCBtX3N0YXJ0RnJhbWU7CisgICAgICAgIHZvbGF0aWxl
IHVpbnQ2NF90IG1fZW5kRnJhbWU7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IG1fdXBkYXRl
Q291bnRlcjsKKyAgICB9OworICAgIAorICAgIFZlY3RvcjxUaW1lQm91bmRzPiBtX3RpbWVCb3Vu
ZHNRdWV1ZTsKKyAgICBCeXRlU3BpbkxvY2sgbV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrOworICAg
IGludDMyX3QgbV90aW1lQm91bmRzUXVldWVQdHI7Cit9OworCit9CisKKworI2VuZGlmIC8vIENB
UmluZ0J1ZmZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRkYmQyZDU1NjFlOGEyYmU4YWVjYzFkYTFmNjhlZGU2NDBiN2Vh
NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaApAQCAtMCwwICsxLDEwMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakNfaAorI2RlZmlu
ZSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQ19oCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQor
CisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgQVZQbGF5ZXJJdGVt
OworT0JKQ19DTEFTUyBBVk11dGFibGVBdWRpb01peDsKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
b3BhcXVlTVRBdWRpb1Byb2Nlc3NpbmdUYXAgKk1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmOwordHlw
ZWRlZiBzdHJ1Y3QgQXVkaW9CdWZmZXJMaXN0IEF1ZGlvQnVmZmVyTGlzdDsKK3R5cGVkZWYgc3Ry
dWN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b247Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVBdWRpb0NvbnZlcnRlciogQXVkaW9Db252ZXJ0ZXJS
ZWY7Cit0eXBlZGVmIHVpbnQzMl90IE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3M7Cit0eXBlZGVm
IHNpZ25lZCBsb25nIENNSXRlbUNvdW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENBUmluZ0J1ZmZlcjsKKworY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMgOiBwdWJs
aWMgUmVmQ291bnRlZDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQz4sIHB1YmxpYyBBdWRpb1Nv
dXJjZVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQz4gY3JlYXRlKEFWUGxheWVySXRlbSopOworICAgIHZpcnR1YWwgfkF1
ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKCk7CisKKyAgICB2b2lkIHNldFBsYXllckl0ZW0oQVZQ
bGF5ZXJJdGVtICopOworCitwcml2YXRlOgorICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpD
KEFWUGxheWVySXRlbSAqKTsKKworICAgIHZvaWQgZGVzdHJveU1peCgpOworICAgIHZvaWQgY3Jl
YXRlTWl4KCk7CisKKyAgICAvLyBBdWRpb1NvdXJjZVByb3ZpZGVyCisgICAgdmlydHVhbCB2b2lk
IHByb3ZpZGVJbnB1dChBdWRpb0J1cyosIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCop
IG92ZXJyaWRlOworCisgICAgc3RhdGljIHZvaWQgaW5pdENhbGxiYWNrKE1UQXVkaW9Qcm9jZXNz
aW5nVGFwUmVmLCB2b2lkKiwgdm9pZCoqKTsKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZUNhbGxi
YWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmKTsKKyAgICBzdGF0aWMgdm9pZCBwcmVwYXJlQ2Fs
bGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYsIENNSXRlbUNvdW50LCBjb25zdCBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24qKTsKKyAgICBzdGF0aWMgdm9pZCB1bnByZXBhcmVDYWxsYmFj
ayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZik7CisgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0NhbGxi
YWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmLCBDTUl0ZW1Db3VudCwgTVRBdWRpb1Byb2Nlc3Np
bmdUYXBGbGFncywgQXVkaW9CdWZmZXJMaXN0KiwgQ01JdGVtQ291bnQqLCBNVEF1ZGlvUHJvY2Vz
c2luZ1RhcEZsYWdzKik7CisKKyAgICB2b2lkIGluaXQodm9pZCogY2xpZW50SW5mbywgdm9pZCoq
IHRhcFN0b3JhZ2VPdXQpOworICAgIHZvaWQgZmluYWxpemUoKTsKKyAgICB2b2lkIHByZXBhcmUo
Q01JdGVtQ291bnQgbWF4RnJhbWVzLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24g
KnByb2Nlc3NpbmdGb3JtYXQpOworICAgIHZvaWQgdW5wcmVwYXJlKCk7CisgICAgdm9pZCBwcm9j
ZXNzKENNSXRlbUNvdW50IG51bWJlckZyYW1lcywgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyBm
bGFnc0luLCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxpc3RJbk91dCwgQ01JdGVtQ291bnQgKm51
bWJlckZyYW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NPdXQpOworCisg
ICAgUmV0YWluUHRyPEFWUGxheWVySXRlbT4gbV9hdlBsYXllckl0ZW07CisgICAgUmV0YWluUHRy
PEFWTXV0YWJsZUF1ZGlvTWl4PiBtX2F2QXVkaW9NaXg7CisgICAgUmV0YWluUHRyPE1UQXVkaW9Q
cm9jZXNzaW5nVGFwUmVmPiBtX3RhcDsKKyAgICBSZXRhaW5QdHI8QXVkaW9Db252ZXJ0ZXJSZWY+
IG1fY29udmVydGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxpc3Q+IG1fbGlz
dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uPiBtX3Rh
cERlc2NyaXB0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24+IG1fb3V0cHV0RGVzY3JpcHRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENBUmluZ0J1
ZmZlcj4gbV9yaW5nQnVmZmVyOworCisgICAgTWVkaWFUaW1lIG1fc3RhcnRUaW1lQXRMYXN0UHJv
Y2VzczsKKyAgICBNZWRpYVRpbWUgbV9lbmRUaW1lQXRMYXN0UHJvY2VzczsKKyAgICB1aW50NjRf
dCBtX3dyaXRlQWhlYWRDb3VudDsKKyAgICB1aW50NjRfdCBtX3dyaXRlQ291bnQ7CisgICAgdWlu
dDY0X3QgbV9yZWFkQ291bnQ7CisgICAgYm9vbCBtX3BhdXNlZDsKKyAgICBBdWRpb1NvdXJjZVBy
b3ZpZGVyQ2xpZW50KiBtX2NsaWVudDsKK307CisgICAgCit9CisKKyNlbmRpZgorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42MzU5ZTY4ZTY2NmUyNTNhYTEwYjA2YzRmY2RkYzVjODQ4OTlkN2VkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qy5oIgorCisjaW1wb3J0ICJBdWRpb0J1cy5oIgorI2ltcG9ydCAiQXVkaW9DaGFubmVsLmgiCisj
aW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmgiCisjaW1wb3J0ICJDQVJpbmdCdWZm
ZXIuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhVGltZU1hYy5oIgorI2lt
cG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkFzc2V0VHJhY2su
aD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkF1ZGlvTWl4Lmg+CisjaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZNZWRpYUZvcm1hdC5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRl
bS5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbVRyYWNrLmg+CisjaW1wb3J0
IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisKKyNpZiAhTE9H
X0RJU0FCTEVECisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisjZW5kaWYKKwor
I2lmIEVOQUJMRShXRUJfQVVESU8pCisKK1NPRlRfTElOS19GUkFNRVdPUksoQVZGb3VuZGF0aW9u
KQorU09GVF9MSU5LX0ZSQU1FV09SSyhNZWRpYVRvb2xib3gpCitTT0ZUX0xJTktfRlJBTUVXT1JL
KEF1ZGlvVG9vbGJveCkKK1NPRlRfTElOS19GUkFNRVdPUksoQ29yZU1lZGlhKQorCitTT0ZUX0xJ
TktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckl0ZW0pCitTT0ZUX0xJTktfQ0xBU1MoQVZG
b3VuZGF0aW9uLCBBVk11dGFibGVBdWRpb01peCkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRp
b24sIEFWTXV0YWJsZUF1ZGlvTWl4SW5wdXRQYXJhbWV0ZXJzKQorCit0eXBlZGVmIHN0cnVjdCBv
cGFxdWVDTU5vdGlmaWNhdGlvbkNlbnRlciAqQ01Ob3RpZmljYXRpb25DZW50ZXJSZWY7Cit0eXBl
ZGVmIHZvaWQgKCpDTU5vdGlmaWNhdGlvbkNhbGxiYWNrKShDTU5vdGlmaWNhdGlvbkNlbnRlclJl
ZiBpbkNlbnRlciwgY29uc3Qgdm9pZCAqaW5MaXN0ZW5lciwgQ0ZTdHJpbmdSZWYgaW5Ob3RpZmlj
YXRpb25OYW1lLCBjb25zdCB2b2lkICppbk5vdGlmeWluZ09iamVjdCwgQ0ZUeXBlUmVmIGluTm90
aWZpY2F0aW9uUGF5bG9hZCk7CisKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNTm90aWZpY2F0aW9u
Q2VudGVyR2V0RGVmYXVsdExvY2FsQ2VudGVyLCBDTU5vdGlmaWNhdGlvbkNlbnRlclJlZiwgKHZv
aWQpLCAoKSk7CitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTU5vdGlmaWNhdGlvbkNlbnRlckFkZExp
c3RlbmVyLCBPU1N0YXR1cywgKENNTm90aWZpY2F0aW9uQ2VudGVyUmVmIGNlbnRlciwgY29uc3Qg
dm9pZCogbGlzdGVuZXIsIENNTm90aWZpY2F0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIENGU3RyaW5n
UmVmIG5vdGlmaWNhdGlvbiwgY29uc3Qgdm9pZCogb2JqZWN0LCBVSW50MzIgZmxhZ3MpLCAoY2Vu
dGVyLCBsaXN0ZW5lciwgY2FsbGJhY2ssIG5vdGlmaWNhdGlvbiwgb2JqZWN0LCBmbGFncykpCitT
T0ZUX0xJTksoQ29yZU1lZGlhLCBDTU5vdGlmaWNhdGlvbkNlbnRlclJlbW92ZUxpc3RlbmVyLCBP
U1N0YXR1cywgKENNTm90aWZpY2F0aW9uQ2VudGVyUmVmIGNlbnRlciwgY29uc3Qgdm9pZCogbGlz
dGVuZXIsIENNTm90aWZpY2F0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIENGU3RyaW5nUmVmIG5vdGlm
aWNhdGlvbiwgY29uc3Qgdm9pZCogb2JqZWN0KSwgKGNlbnRlciwgbGlzdGVuZXIsIGNhbGxiYWNr
LCBub3RpZmljYXRpb24sIG9iamVjdCkpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWViYXNl
R2V0VGltZSwgQ01UaW1lLCAoQ01UaW1lYmFzZVJlZiB0aW1lYmFzZSksICh0aW1lYmFzZSkpCitT
T0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWViYXNlR2V0RWZmZWN0aXZlUmF0ZSwgRmxvYXQ2NCwg
KENNVGltZWJhc2VSZWYgdGltZWJhc2UpLCAodGltZWJhc2UpKQorCitTT0ZUX0xJTktfQ09OU1RB
TlQoQ29yZU1lZGlhLCBrQ01UaW1lYmFzZU5vdGlmaWNhdGlvbl9FZmZlY3RpdmVSYXRlQ2hhbmdl
ZCwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01UaW1lYmFz
ZU5vdGlmaWNhdGlvbl9UaW1lSnVtcGVkLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga0NNVGltZWJh
c2VOb3RpZmljYXRpb25fRWZmZWN0aXZlUmF0ZUNoYW5nZWQgZ2V0a0NNVGltZWJhc2VOb3RpZmlj
YXRpb25fRWZmZWN0aXZlUmF0ZUNoYW5nZWQoKQorI2RlZmluZSBrQ01UaW1lYmFzZU5vdGlmaWNh
dGlvbl9UaW1lSnVtcGVkIGdldGtDTVRpbWViYXNlTm90aWZpY2F0aW9uX1RpbWVKdW1wZWQoKQor
CitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbnZlcnRlckNvbnZlcnRDb21wbGV4QnVm
ZmVyLCBPU1N0YXR1cywgKEF1ZGlvQ29udmVydGVyUmVmIGluQXVkaW9Db252ZXJ0ZXIsIFVJbnQz
MiBpbk51bWJlclBDTUZyYW1lcywgY29uc3QgQXVkaW9CdWZmZXJMaXN0KiBpbklucHV0RGF0YSwg
QXVkaW9CdWZmZXJMaXN0KiBvdXRPdXRwdXREYXRhKSwgKGluQXVkaW9Db252ZXJ0ZXIsIGluTnVt
YmVyUENNRnJhbWVzLCBpbklucHV0RGF0YSwgb3V0T3V0cHV0RGF0YSkpCitTT0ZUX0xJTksoQXVk
aW9Ub29sYm94LCBBdWRpb0NvbnZlcnRlck5ldywgT1NTdGF0dXMsIChjb25zdCBBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24qIGluU291cmNlRm9ybWF0LCBjb25zdCBBdWRpb1N0cmVhbUJhc2lj
RGVzY3JpcHRpb24qIGluRGVzdGluYXRpb25Gb3JtYXQsIEF1ZGlvQ29udmVydGVyUmVmKiBvdXRB
dWRpb0NvbnZlcnRlciksIChpblNvdXJjZUZvcm1hdCwgaW5EZXN0aW5hdGlvbkZvcm1hdCwgb3V0
QXVkaW9Db252ZXJ0ZXIpKQorCitTT0ZUX0xJTksoTWVkaWFUb29sYm94LCBNVEF1ZGlvUHJvY2Vz
c2luZ1RhcEdldFN0b3JhZ2UsIHZvaWQqLCAoTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwKSwg
KHRhcCkpCitTT0ZUX0xJTksoTWVkaWFUb29sYm94LCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEdldFNv
dXJjZUF1ZGlvLCBPU1N0YXR1cywgKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCwgQ01JdGVt
Q291bnQgbnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxpc3RJbk91dCwgTVRB
dWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NPdXQsIENNVGltZVJhbmdlICp0aW1lUmFuZ2VP
dXQsIENNSXRlbUNvdW50ICpudW1iZXJGcmFtZXNPdXQpLCAodGFwLCBudW1iZXJGcmFtZXMsIGJ1
ZmZlckxpc3RJbk91dCwgZmxhZ3NPdXQsIHRpbWVSYW5nZU91dCwgbnVtYmVyRnJhbWVzT3V0KSkK
K1NPRlRfTElOS19NQVlfRkFJTChNZWRpYVRvb2xib3gsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ3Jl
YXRlLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgY29uc3QgTVRBdWRpb1By
b2Nlc3NpbmdUYXBDYWxsYmFja3MgKmNhbGxiYWNrcywgTVRBdWRpb1Byb2Nlc3NpbmdUYXBDcmVh
dGlvbkZsYWdzIGZsYWdzLCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiAqdGFwT3V0KSwgKGFsbG9j
YXRvciwgY2FsbGJhY2tzLCBmbGFncywgdGFwT3V0KSkKKworU09GVF9MSU5LX1BPSU5URVIoQVZG
b3VuZGF0aW9uLCBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlLCBOU1N0cmluZyAqKQorI2Rl
ZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlIGdldEFWTWVkaWFDaGFyYWN0ZXJpc3Rp
Y0F1ZGlibGUoKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBkb3VibGUga1JpbmdC
dWZmZXJEdXJhdGlvbiA9IDE7CisKK1Bhc3NSZWZQdHI8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akM+IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGUoQVZQbGF5ZXJJdGVtICppdGVt
KQoreworICAgIGlmICghY2FuTG9hZE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ3JlYXRlKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakMoaXRlbSkpOworfQorCitBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoQVZQbGF5ZXJJdGVtICppdGVtKQorICAgIDogbV9h
dlBsYXllckl0ZW0oaXRlbSkKKyAgICAsIG1fd3JpdGVDb3VudCgwKQorICAgICwgbV9yZWFkQ291
bnQoMCkKKyAgICAsIG1fcGF1c2VkKHRydWUpCisgICAgLCBtX2NsaWVudChudWxscHRyKQorewor
fQorCitBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6fkF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDKCkKK3sKKyAgICBzZXRDbGllbnQobnVsbHB0cik7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakM6OnByb3ZpZGVJbnB1dChBdWRpb0J1cyogYnVzLCBzaXplX3QgZnJhbWVz
VG9Qcm9jZXNzKQoreworICAgIGlmICghbV9hdlBsYXllckl0ZW0pCisgICAgICAgIHJldHVybjsK
KworICAgIHVpbnQ2NF90IHN0YXJ0RnJhbWUgPSAwOworICAgIHVpbnQ2NF90IGVuZEZyYW1lID0g
MDsKKyAgICBtX3JpbmdCdWZmZXItPmdldEN1cnJlbnRGcmFtZUJvdW5kcyhzdGFydEZyYW1lLCBl
bmRGcmFtZSk7CisKKyAgICBpZiAobV93cml0ZUNvdW50IDw9IG1fcmVhZENvdW50ICsgbV93cml0
ZUFoZWFkQ291bnQpIHsKKyAgICAgICAgYnVzLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzaXplX3QgZnJhbWVzQXZhaWxhYmxlID0gZW5kRnJhbWUgLSAobV9yZWFkQ291
bnQgKyBtX3dyaXRlQWhlYWRDb3VudCk7CisgICAgaWYgKGZyYW1lc0F2YWlsYWJsZSA8IGZyYW1l
c1RvUHJvY2VzcykgeworICAgICAgICBmcmFtZXNUb1Byb2Nlc3MgPSBmcmFtZXNBdmFpbGFibGU7
CisgICAgICAgIGJ1cy0+emVybygpOworICAgIH0KKworICAgIEFTU0VSVChidXMtPm51bWJlck9m
Q2hhbm5lbHMoKSA9PSBtX3JpbmdCdWZmZXItPmNoYW5uZWxDb3VudCgpKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2xpc3QtPm1OdW1iZXJCdWZmZXJzOyArK2kpIHsKKyAgICAg
ICAgQXVkaW9DaGFubmVsKiBjaGFubmVsID0gYnVzLT5jaGFubmVsKGkpOworICAgICAgICBtX2xp
c3QtPm1CdWZmZXJzW2ldLm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAgICAgIG1fbGlzdC0+bUJ1
ZmZlcnNbaV0ubURhdGEgPSBjaGFubmVsLT5tdXRhYmxlRGF0YSgpOworICAgICAgICBtX2xpc3Qt
Pm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBjaGFubmVsLT5sZW5ndGgoKSAqIHNpemVvZihm
bG9hdCk7CisgICAgfQorCisgICAgbV9yaW5nQnVmZmVyLT5mZXRjaChtX2xpc3QuZ2V0KCksIGZy
YW1lc1RvUHJvY2VzcywgbV9yZWFkQ291bnQpOworICAgIG1fcmVhZENvdW50ICs9IGZyYW1lc1Rv
UHJvY2VzczsKKworICAgIGlmIChtX2NvbnZlcnRlcikKKyAgICAgICAgQXVkaW9Db252ZXJ0ZXJD
b252ZXJ0Q29tcGxleEJ1ZmZlcihtX2NvbnZlcnRlci5nZXQoKSwgZnJhbWVzVG9Qcm9jZXNzLCBt
X2xpc3QuZ2V0KCksIG1fbGlzdC5nZXQoKSk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakM6OnNldENsaWVudChBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50KiBjbGllbnQpCit7
CisgICAgaWYgKG1fY2xpZW50ID09IGNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fYXZBdWRpb01peCkKKyAgICAgICAgZGVzdHJveU1peCgpOworCisgICAgbV9jbGllbnQgPSBj
bGllbnQ7CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9hdlBsYXllckl0ZW0pCisgICAgICAgIGNy
ZWF0ZU1peCgpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpzZXRQbGF5
ZXJJdGVtKEFWUGxheWVySXRlbSAqYXZQbGF5ZXJJdGVtKQoreworICAgIGlmIChtX2F2UGxheWVy
SXRlbSA9PSBhdlBsYXllckl0ZW0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2F2QXVk
aW9NaXgpCisgICAgICAgIGRlc3Ryb3lNaXgoKTsKKworICAgIG1fYXZQbGF5ZXJJdGVtID0gYXZQ
bGF5ZXJJdGVtOworCisgICAgaWYgKG1fY2xpZW50ICYmIG1fYXZQbGF5ZXJJdGVtKQorICAgICAg
ICBjcmVhdGVNaXgoKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6ZGVz
dHJveU1peCgpCit7CisgICAgaWYgKG1fYXZQbGF5ZXJJdGVtKQorICAgICAgICBbbV9hdlBsYXll
ckl0ZW0gc2V0QXVkaW9NaXg6bmlsXTsKKyAgICBbbV9hdkF1ZGlvTWl4IHNldElucHV0UGFyYW1l
dGVyczpuaWxdOworICAgIG1fYXZBdWRpb01peC5jbGVhcigpOworICAgIG1fdGFwLmNsZWFyKCk7
Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmNyZWF0ZU1peCgpCit7Cisg
ICAgQVNTRVJUKCFtX2F2QXVkaW9NaXgpOworICAgIEFTU0VSVChtX2F2UGxheWVySXRlbSk7Cisg
ICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAgIG1fYXZBdWRpb01peCA9IGFkb3B0TlMoW1tnZXRB
Vk11dGFibGVBdWRpb01peENsYXNzKCkgYWxsb2NdIGluaXRdKTsKKworICAgIE1UQXVkaW9Qcm9j
ZXNzaW5nVGFwQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsKKyAgICAgICAgMCwKKyAgICAgICAgdGhp
cywKKyAgICAgICAgaW5pdENhbGxiYWNrLAorICAgICAgICBmaW5hbGl6ZUNhbGxiYWNrLAorICAg
ICAgICBwcmVwYXJlQ2FsbGJhY2ssCisgICAgICAgIHVucHJlcGFyZUNhbGxiYWNrLAorICAgICAg
ICBwcm9jZXNzQ2FsbGJhY2ssCisgICAgfTsKKworICAgIE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVm
IHRhcCA9IG51bGxwdHI7CisgICAgTVRBdWRpb1Byb2Nlc3NpbmdUYXBDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgJmNhbGxiYWNrcywgMSwgJnRhcCk7CisgICAgQVNTRVJUKHRhcCk7CisgICAg
QVNTRVJUKG1fdGFwID09IHRhcCk7CisKKyAgICBSZXRhaW5QdHI8QVZNdXRhYmxlQXVkaW9NaXhJ
bnB1dFBhcmFtZXRlcnM+IHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbZ2V0QVZNdXRhYmxlQXVkaW9N
aXhJbnB1dFBhcmFtZXRlcnNDbGFzcygpIGFsbG9jXSBpbml0XSk7CisgICAgW3BhcmFtZXRlcnMg
c2V0QXVkaW9UYXBQcm9jZXNzb3I6bV90YXAuZ2V0KCldOworCisgICAgQ01QZXJzaXN0ZW50VHJh
Y2tJRCBmaXJzdEVuYWJsZWRBdWRpb1RyYWNrSUQgPSBrQ01QZXJzaXN0ZW50VHJhY2tJRF9JbnZh
bGlkOworICAgIE5TQXJyYXkqIHRyYWNrcyA9IFttX2F2UGxheWVySXRlbSB0cmFja3NdOworICAg
IGZvciAoQVZQbGF5ZXJJdGVtVHJhY2sqIHRyYWNrIGluIHRyYWNrcykgeworICAgICAgICBpZiAo
W3RyYWNrLmFzc2V0VHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVy
aXN0aWNBdWRpYmxlXSAmJiB0cmFjay5lbmFibGVkKSB7CisgICAgICAgICAgICBmaXJzdEVuYWJs
ZWRBdWRpb1RyYWNrSUQgPSB0cmFjay5hc3NldFRyYWNrLnRyYWNrSUQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBbcGFyYW1ldGVycyBzZXRUcmFja0lEOmZpcnN0
RW5hYmxlZEF1ZGlvVHJhY2tJRF07CisgICAgCisgICAgW21fYXZBdWRpb01peCBzZXRJbnB1dFBh
cmFtZXRlcnM6QFtwYXJhbWV0ZXJzLmdldCgpXV07CisgICAgW21fYXZQbGF5ZXJJdGVtIHNldEF1
ZGlvTWl4Om1fYXZBdWRpb01peC5nZXQoKV07Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakM6OmluaXRDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiB0YXAsIHZvaWQq
IGNsaWVudEluZm8sIHZvaWQqKiB0YXBTdG9yYWdlT3V0KQoreworICAgIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0YXRpY19jYXN0PEF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDKj4oY2xpZW50SW5mbyk7CisgICAgX3RoaXMtPm1fdGFwID0gdGFwOworICAgIF90aGlzLT5p
bml0KGNsaWVudEluZm8sIHRhcFN0b3JhZ2VPdXQpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOjpmaW5hbGl6ZUNhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRh
cCkKK3sKKyAgICBBU1NFUlQodGFwKTsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyog
X3RoaXMgPSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyo+KE1UQXVkaW9Q
cm9jZXNzaW5nVGFwR2V0U3RvcmFnZSh0YXApKTsKKyAgICBfdGhpcy0+ZmluYWxpemUoKTsKK30K
Kwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJlcGFyZUNhbGxiYWNrKE1UQXVk
aW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCwgQ01JdGVtQ291bnQgbWF4RnJhbWVzLCBjb25zdCBBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKnByb2Nlc3NpbmdGb3JtYXQpCit7CisgICAgQVNTRVJU
KHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqIF90aGlzID0gc3RhdGljX2Nh
c3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihNVEF1ZGlvUHJvY2Vzc2luZ1RhcEdldFN0
b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPnByZXBhcmUobWF4RnJhbWVzLCBwcm9jZXNzaW5nRm9y
bWF0KTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6dW5wcmVwYXJlQ2Fs
bGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwKQoreworICAgIEFTU0VSVCh0YXApOwor
ICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0YXRpY19jYXN0PEF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDKj4oTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRTdG9yYWdlKHRh
cCkpOworICAgIF90aGlzLT51bnByZXBhcmUoKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQzo6cHJvY2Vzc0NhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCwg
Q01JdGVtQ291bnQgbnVtYmVyRnJhbWVzLCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEZsYWdzIGZsYWdz
LCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxpc3RJbk91dCwgQ01JdGVtQ291bnQgKm51bWJlckZy
YW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NPdXQpCit7CisgICAgQVNT
RVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqIF90aGlzID0gc3RhdGlj
X2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihNVEF1ZGlvUHJvY2Vzc2luZ1RhcEdl
dFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPnByb2Nlc3MobnVtYmVyRnJhbWVzLCBmbGFncywg
YnVmZmVyTGlzdEluT3V0LCBudW1iZXJGcmFtZXNPdXQsIGZsYWdzT3V0KTsKK30KKwordm9pZCBB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6aW5pdCh2b2lkKiBjbGllbnRJbmZvLCB2b2lkKiog
dGFwU3RvcmFnZU91dCkKK3sKKyAgICBBU1NFUlQoY2xpZW50SW5mbyA9PSB0aGlzKTsKKyAgICAq
dGFwU3RvcmFnZU91dCA9IHRoaXM7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akM6OmZpbmFsaXplKCkKK3sKK30KKworc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlw
dGlvbiYgYikKK3sKKyAgICByZXR1cm4gYS5tU2FtcGxlUmF0ZSA9PSBiLm1TYW1wbGVSYXRlCisg
ICAgICAgICYmIGEubUZvcm1hdElEID09IGIubUZvcm1hdElECisgICAgICAgICYmIGEubUZvcm1h
dEZsYWdzID09IGIubUZvcm1hdEZsYWdzCisgICAgICAgICYmIGEubUJ5dGVzUGVyUGFja2V0ID09
IGIubUJ5dGVzUGVyUGFja2V0CisgICAgICAgICYmIGEubUZyYW1lc1BlclBhY2tldCA9PSBiLm1G
cmFtZXNQZXJQYWNrZXQKKyAgICAgICAgJiYgYS5tQnl0ZXNQZXJGcmFtZSA9PSBiLm1CeXRlc1Bl
ckZyYW1lCisgICAgICAgICYmIGEubUNoYW5uZWxzUGVyRnJhbWUgPT0gYi5tQ2hhbm5lbHNQZXJG
cmFtZQorICAgICAgICAmJiBhLm1CaXRzUGVyQ2hhbm5lbCA9PSBiLm1CaXRzUGVyQ2hhbm5lbDsK
K30KKworc3RhdGljIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYikKK3sKKyAgICBy
ZXR1cm4gIShhID09IGIpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpw
cmVwYXJlKENNSXRlbUNvdW50IG1heEZyYW1lcywgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uICpwcm9jZXNzaW5nRm9ybWF0KQoreworICAgIEFTU0VSVChtYXhGcmFtZXMgPj0gMCk7
CisKKyAgICBtX3RhcERlc2NyaXB0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24+KCpwcm9jZXNzaW5nRm9ybWF0KTsKKyAgICBpbnQgbnVtYmVyT2ZDaGFu
bmVscyA9IHByb2Nlc3NpbmdGb3JtYXQtPm1DaGFubmVsc1BlckZyYW1lOworICAgIHNpemVfdCBi
eXRlc1BlckZyYW1lID0gcHJvY2Vzc2luZ0Zvcm1hdC0+bUJ5dGVzUGVyRnJhbWU7CisgICAgZG91
YmxlIHNhbXBsZVJhdGUgPSBwcm9jZXNzaW5nRm9ybWF0LT5tU2FtcGxlUmF0ZTsKKyAgICBBU1NF
UlQoc2FtcGxlUmF0ZSA+PSAwKTsKKworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24gPSBzdGQ6Om1h
a2VfdW5pcXVlPEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbj4oKTsKKyAgICBtX291dHB1dERl
c2NyaXB0aW9uLT5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7CisgICAgbV9vdXRwdXREZXNjcmlw
dGlvbi0+bUZvcm1hdElEID0ga0F1ZGlvRm9ybWF0TGluZWFyUENNOworICAgIG1fb3V0cHV0RGVz
Y3JpcHRpb24tPm1Gb3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdzTmF0aXZlRmxvYXRQYWNr
ZWQ7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUJpdHNQZXJDaGFubmVsID0gOCAqIHNpemVv
ZihGbG9hdDMyKTsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tQ2hhbm5lbHNQZXJGcmFtZSA9
IG51bWJlck9mQ2hhbm5lbHM7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUZyYW1lc1BlclBh
Y2tldCA9IDE7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUJ5dGVzUGVyUGFja2V0ID0gc2l6
ZW9mKEZsb2F0MzIpOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1CeXRlc1BlckZyYW1lID0g
c2l6ZW9mKEZsb2F0MzIpOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1Gb3JtYXRGbGFncyB8
PSBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZDsKKworICAgIGlmICgqbV90YXBEZXNj
cmlwdGlvbiAhPSAqbV9vdXRwdXREZXNjcmlwdGlvbikgeworICAgICAgICBBdWRpb0NvbnZlcnRl
clJlZiBvdXRDb252ZXJ0ZXIgPSBudWxscHRyOworICAgICAgICBBdWRpb0NvbnZlcnRlck5ldyht
X3RhcERlc2NyaXB0aW9uLmdldCgpLCBtX291dHB1dERlc2NyaXB0aW9uLmdldCgpLCAmb3V0Q29u
dmVydGVyKTsKKyAgICAgICAgbV9jb252ZXJ0ZXIgPSBvdXRDb252ZXJ0ZXI7CisgICAgfQorCisg
ICAgLy8gTWFrZSB0aGUgcmluZ2J1ZmZlciBsYXJnZSBlbm91Z2ggdG8gc3RvcmUgYXQgbGVhc3Qg
dHdvIGNhbGxiYWNrcyB3b3J0aCBvZiBhdWRpbywgb3IgMXMsIHdoaWNoZXZlciBpcyBsYXJnZXIu
CisgICAgc2l6ZV90IGNhcGFjaXR5ID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigyICog
bWF4RnJhbWVzKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihrUmluZ0J1ZmZlckR1cmF0aW9uICogc2Ft
cGxlUmF0ZSkpOworCisgICAgbV9yaW5nQnVmZmVyID0gQ0FSaW5nQnVmZmVyOjpjcmVhdGUoKTsK
KyAgICBtX3JpbmdCdWZmZXItPmFsbG9jYXRlKG51bWJlck9mQ2hhbm5lbHMsIGJ5dGVzUGVyRnJh
bWUsIGNhcGFjaXR5KTsKKworICAgIC8vIEF1ZGlvQnVmZmVyTGlzdCBpcyBhIHZhcmlhYmxlLWxl
bmd0aCBzdHJ1Y3QsIHNvIGNyZWF0ZSBvbiB0aGUgaGVhcCB3aXRoIGEgZ2VuZXJpYyBuZXcoKSBv
cGVyYXRvcgorICAgIC8vIHdpdGggYSBjdXN0b20gc2l6ZSwgYW5kIGluaXRpYWxpemUgdGhlIHN0
cnVjdCBtYW51YWxseS4KKyAgICBzaXplX3QgYnVmZmVyTGlzdFNpemUgPSBzaXplb2YoQXVkaW9C
dWZmZXJMaXN0KSArIChzaXplb2YoQXVkaW9CdWZmZXIpICogc3RkOjptYXgoMSwgbnVtYmVyT2ZD
aGFubmVscyAtIDEpKTsKKyAgICBtX2xpc3QgPSBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9CdWZmZXJM
aXN0PigoQXVkaW9CdWZmZXJMaXN0KikgOjpvcGVyYXRvciBuZXcgKGJ1ZmZlckxpc3RTaXplKSk7
CisgICAgbWVtc2V0KG1fbGlzdC5nZXQoKSwgMCwgYnVmZmVyTGlzdFNpemUpOworICAgIG1fbGlz
dC0+bU51bWJlckJ1ZmZlcnMgPSBudW1iZXJPZkNoYW5uZWxzOworCisgICAgUmVmUHRyPEF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDPiBzdHJvbmdUaGlzID0gdGhpczsKKyAgICBjYWxsT25NYWlu
VGhyZWFkKFtzdHJvbmdUaGlzLCBudW1iZXJPZkNoYW5uZWxzLCBzYW1wbGVSYXRlXSB7CisgICAg
ICAgIHN0cm9uZ1RoaXMtPm1fY2xpZW50LT5zZXRGb3JtYXQobnVtYmVyT2ZDaGFubmVscywgc2Ft
cGxlUmF0ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6
OnVucHJlcGFyZSgpCit7CisgICAgbV90YXBEZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgbV9v
dXRwdXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgbV9yaW5nQnVmZmVyID0gbnVsbHB0cjsK
KyAgICBtX2xpc3QgPSBudWxscHRyOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDOjpwcm9jZXNzKENNSXRlbUNvdW50IG51bWJlck9mRnJhbWVzLCBNVEF1ZGlvUHJvY2Vzc2lu
Z1RhcEZsYWdzIGZsYWdzLCBBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3RJbk91dCwgQ01JdGVt
Q291bnQqIG51bWJlckZyYW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyogZmxhZ3NP
dXQpCit7CisgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKworICAgIENNSXRlbUNvdW50IGl0ZW1D
b3VudCA9IDA7CisgICAgQ01UaW1lUmFuZ2UgcmFuZ2VPdXQ7CisgICAgT1NTdGF0dXMgc3RhdHVz
ID0gTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRTb3VyY2VBdWRpbyhtX3RhcC5nZXQoKSwgbnVtYmVy
T2ZGcmFtZXMsIGJ1ZmZlckxpc3RJbk91dCwgZmxhZ3NPdXQsICZyYW5nZU91dCwgJml0ZW1Db3Vu
dCk7CisgICAgaWYgKHN0YXR1cyAhPSBub0VyciB8fCAhaXRlbUNvdW50KQorICAgICAgICByZXR1
cm47CisKKyAgICBNZWRpYVRpbWUgcmFuZ2VTdGFydCA9IHRvTWVkaWFUaW1lKHJhbmdlT3V0LnN0
YXJ0KTsKKyAgICBNZWRpYVRpbWUgcmFuZ2VEdXJhdGlvbiA9IHRvTWVkaWFUaW1lKHJhbmdlT3V0
LmR1cmF0aW9uKTsKKworICAgIGlmIChyYW5nZVN0YXJ0LmlzSW52YWxpZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBNZWRpYVRpbWUgY3VycmVudFRpbWUgPSB0b01lZGlhVGltZShDTVRpbWVi
YXNlR2V0VGltZShbbV9hdlBsYXllckl0ZW0gdGltZWJhc2VdKSk7CisgICAgaWYgKGN1cnJlbnRU
aW1lLmlzSW52YWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgYXVkaW8gdGFw
IHdpbGwgZ2VuZXJhdGUgc2lsZW5jZSB3aGVuIHRoZSBtZWRpYSBpcyBwYXVzZWQsIGFuZCB3aWxs
IG5vdCBhZHZhbmNlIHRoZQorICAgIC8vIHRhcCBjdXJyZW50VGltZS4KKyAgICBpZiAocmFuZ2VT
dGFydCA9PSBtX3N0YXJ0VGltZUF0TGFzdFByb2Nlc3MgfHwgcmFuZ2VEdXJhdGlvbiA9PSBNZWRp
YVRpbWU6Onplcm9UaW1lKCkpIHsKKyAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGF1c2VkKSB7CisgICAgICAgIC8vIE9ubHkgY2hl
Y2sgdGhlIHdyaXRlLWFoZWFkIHRpbWUgd2hlbiBwbGF5YmFjayBiZWdpbnMuCisgICAgICAgIG1f
cGF1c2VkID0gZmFsc2U7CisgICAgICAgIE1lZGlhVGltZSBlYXJseUJ5ID0gcmFuZ2VTdGFydCAt
IGN1cnJlbnRUaW1lOworICAgICAgICBtX3dyaXRlQWhlYWRDb3VudCA9IG1fdGFwRGVzY3JpcHRp
b24tPm1TYW1wbGVSYXRlICogZWFybHlCeS50b0RvdWJsZSgpOworICAgIH0KKworICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiB0aGUgdW5kZXJseWluZyBtZWRpYSBoYXMgc2Vla2VkLCB3aGljaCB3b3Vs
ZCByZXF1aXJlIHVzIHRvICJmbHVzaCIKKyAgICAvLyBvdXIgb3V0c3RhbmRpbmcgYnVmZmVycy4K
KyAgICBpZiAocmFuZ2VTdGFydCAhPSBtX2VuZFRpbWVBdExhc3RQcm9jZXNzKQorICAgICAgICBt
X3JlYWRDb3VudCA9IG1fd3JpdGVDb3VudDsKKworICAgIG1fc3RhcnRUaW1lQXRMYXN0UHJvY2Vz
cyA9IHJhbmdlU3RhcnQ7CisgICAgbV9lbmRUaW1lQXRMYXN0UHJvY2VzcyA9IHJhbmdlU3RhcnQg
KyByYW5nZUR1cmF0aW9uOworCisgICAgLy8gU3RhcnRPZlN0cmVhbSBpbmRpY2F0ZXMgYSBkaXNj
b250aW51aXR5LCBzdWNoIGFzIHdoZW4gYW4gQVZQbGF5ZXJJdGVtIGlzIHJlLWFkZGVkCisgICAg
Ly8gdG8gYW4gQVZQbGF5ZXIsIHNvICJmbHVzaCIgb3V0c3RhbmRpbmcgYnVmZmVycy4KKyAgICBp
ZiAoZmxhZ3NPdXQgJiYgKmZsYWdzT3V0ICYga01UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ19TdGFy
dE9mU3RyZWFtKQorICAgICAgICBtX3JlYWRDb3VudCA9IG1fd3JpdGVDb3VudDsKKworICAgIG1f
cmluZ0J1ZmZlci0+c3RvcmUoYnVmZmVyTGlzdEluT3V0LCBpdGVtQ291bnQsIG1fd3JpdGVDb3Vu
dCk7CisgICAgbV93cml0ZUNvdW50ICs9IGl0ZW1Db3VudDsKKworICAgIC8vIE11dGUgdGhlIGRl
ZmF1bHQgYXVkaW8gcGxheWJhY2sgYnkgemVyb2luZyB0aGUgdGFwLW93bmVkIGJ1ZmZlcnMuCisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGJ1ZmZlckxpc3RJbk91dC0+bU51bWJlckJ1ZmZl
cnM7ICsraSkgeworICAgICAgICBBdWRpb0J1ZmZlciYgYnVmZmVyID0gYnVmZmVyTGlzdEluT3V0
LT5tQnVmZmVyc1tpXTsKKyAgICAgICAgbWVtc2V0KGJ1ZmZlci5tRGF0YSwgMCwgYnVmZmVyLm1E
YXRhQnl0ZVNpemUpOworICAgIH0KKyAgICAqbnVtYmVyRnJhbWVzT3V0ID0gMDsKK30KKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAppbmRleCBmZjVmZTAxYmE0Yzc4NGE1NWUyNGNi
MmQ3NjNhZGZkNjhmOWEzNmRjLi4wODc4YzA1OWY5M2QzNzZjY2FiZWQ3MDRkZDJlZDU2NTVjODYy
OGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCkBAIC02Miw2ICs2Miw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIEluYmFuZE1l
dGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRjsKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZPYmpDOworY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM7CiBjbGFzcyBBdWRpb1Ry
YWNrUHJpdmF0ZUFWRk9iakM7CiBjbGFzcyBWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakM7CiAKQEAg
LTIwOSw2ICsyMTAsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0QVZQbGF5ZXJJdGVtKEFW
UGxheWVySXRlbSAqKTsKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgdmlydHVhbCBBdWRp
b1NvdXJjZVByb3ZpZGVyKiBhdWRpb1NvdXJjZVByb3ZpZGVyKCk7CisjZW5kaWYKKwogICAgIHZv
aWQgY3JlYXRlSW1hZ2VHZW5lcmF0b3IoKTsKICAgICB2b2lkIGRlc3Ryb3lJbWFnZUdlbmVyYXRv
cigpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVJbWFnZUZvclRpbWVJblJlY3Qo
ZmxvYXQsIGNvbnN0IEludFJlY3QmKTsKQEAgLTI4OSw2ICsyOTQsMTAgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwogICAgIGJvb2wgbV9oYXZlQ2hlY2tlZFBsYXlh
YmlsaXR5OwogCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBSZWZQdHI8QXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakM+IG1fcHJvdmlkZXI7CisjZW5kaWYKKwogICAgIFJldGFpblB0cjxBVkFz
c2V0SW1hZ2VHZW5lcmF0b3I+IG1faW1hZ2VHZW5lcmF0b3I7CiAjaWYgSEFWRShBVkZPVU5EQVRJ
T05fVklERU9fT1VUUFVUKQogICAgIFJldGFpblB0cjxBVlBsYXllckl0ZW1WaWRlb091dHB1dD4g
bV92aWRlb091dHB1dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCmluZGV4IDhmMDgyMTEzZDViYzA0
MDY2OGMxOTQ4NDg3YzU1ZTk3MDAwNzY0NjMuLmY0YTkzMGZjMzc5YzRiMjRkZTk3NGY5MmYwMzcw
YmFjMGRkNzIyNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtMjksNiArMjksNyBAQAog
I2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIgogCiAjaW1wb3J0
ICJBVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLmgiCisjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQy5oIgogI2ltcG9ydCAiQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLmgiCiAjaW1w
b3J0ICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25z
LmgiCkBAIC01MDAsNiArNTAxLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6Y2FuY2VsTG9hZCgpCiAgICAgICAgIFt0cmFjayByZW1vdmVPYnNlcnZlcjptX29i
amNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAiZW5hYmxlZCJdOwogICAgIG1fY2FjaGVkVHJh
Y2tzID0gbnVsbHB0cjsKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgaWYgKG1fcHJvdmlk
ZXIpCisgICAgICAgIG1fcHJvdmlkZXItPnNldFBsYXllckl0ZW0obnVsbHB0cik7CisjZW5kaWYK
KwogICAgIHNldElnbm9yZUxvYWRTdGF0ZUNoYW5nZXMoZmFsc2UpOwogfQogCkBAIC05MTAsNiAr
OTE2LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRl
QVZQbGF5ZXJJdGVtKCkKICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT3V0cHV0Om1fbGVn
aWJsZU91dHB1dC5nZXQoKV07CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAg
aWYgKG1fcHJvdmlkZXIpCisgICAgICAgIG1fcHJvdmlkZXItPnNldFBsYXllckl0ZW0obV9hdlBs
YXllckl0ZW0uZ2V0KCkpOworI2VuZGlmCisKICAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7
CiB9CiAKQEAgLTE4MzksNiArMTg1MCwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKFRleHRUcmFja1JlcAogfQog
I2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pCitB
dWRpb1NvdXJjZVByb3ZpZGVyKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjph
dWRpb1NvdXJjZVByb3ZpZGVyKCkKK3sKKyAgICBpZiAoIW1fcHJvdmlkZXIpCisgICAgICAgIG1f
cHJvdmlkZXIgPSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6Y3JlYXRlKG1fYXZQbGF5ZXJJ
dGVtLmdldCgpKTsKKyAgICByZXR1cm4gbV9wcm92aWRlci5nZXQoKTsKK30KKyNlbmRpZgorCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNpemVDaGFuZ2VkKCkKIHsK
ICAgICBpZiAoIW1fYXZBc3NldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9Tb2Z0TGlua2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5r
aW5nLmgKaW5kZXggZDkxYzE5NGViZWJhNDE3NjZmMWVlYmU0NmMxNjNjOWQ1ZDA2MmFiNC4uZGJl
NThiNmZjMjgzMGE5MmEzMGNlZDk1YmM2N2EzOWY1YTYwODA1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKQEAgLTExMCw3ICsxMTAsNiBAQAogICAgICAgICBy
ZXR1cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgXAogICAgIH0KIAot
I2lmIFBMQVRGT1JNKElPUykKICNkZWZpbmUgU09GVF9MSU5LX01BWV9GQUlMKGZyYW1ld29yaywg
ZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMsIHBhcmFtZXRl
ck5hbWVzKSBcCiAgICAgc3RhdGljIHJlc3VsdFR5cGUgKCpzb2Z0TGluayMjZnVuY3Rpb25OYW1l
KSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgPSAwOyBcCiAgICAgXApAQCAtMTMyLDcgKzEzMSw2IEBA
CiAgICAgICAgIEFTU0VSVChzb2Z0TGluayMjZnVuY3Rpb25OYW1lKTsgXAogICAgICAgICByZXR1
cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgXAogICAgIH0KLSNlbmRp
ZgogCiAvKiBjYWxsaW5nQ29udmVudGlvbiBpcyB1bnVzZWQgb24gTWFjIGJ1dCBpcyBoZXJlIHRv
IGtlZXAgdGhlIG1hY3JvIHByb3RvdHlwZSB0aGUgc2FtZSBiZXR3ZWVuIE1hYyBhbmQgV2luZG93
cy4gKi8KICNkZWZpbmUgU09GVF9MSU5LX09QVElPTkFMKGZyYW1ld29yaywgZnVuY3Rpb25OYW1l
LCByZXN1bHRUeXBlLCBjYWxsaW5nQ29udmVudGlvbiwgcGFyYW1ldGVyRGVjbGFyYXRpb25zKSBc
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237626</attachid>
            <date>2014-09-04 08:53:22 -0700</date>
            <delta_ts>2014-09-05 13:01:12 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-135042-20140904085316.patch</filename>
            <type>text/plain</type>
            <size>56431</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY1YTNlZTE0YjQxZGI5NDI4NWY5N2Y1
MGNlMmMwNzVhZTVlMjQyZGMuLjA5Yzg2NzEyMTBiNjFmZjcyMzRlNjJjMWUyMDQ1MDM3YzcxMjkz
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDktMDQgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10gU3VwcG9ydCBhdWRpb1NvdXJjZVByb3ZpZGVy
KCkgaW4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDQyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBXVEZf
VVNFX01FRElBVE9PTEJPWC4KKwogMjAxNC0wOC0yOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIEphdmFTY3JpcHRDb3JlOiBVc2UgQVNDSUlMaXRlcmFs
IHdoZXJlIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDMxYWFjODcxOGQ5ZjJhMGM2MDMyNzJmMTE5
MWQ3NjgyM2IyYjg2Ny4uZmI4YjM4ZTRiYWZhMzQxYjM5MTk4YTZlYjhmYmI2NTNlZDY5MzY5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDk0IEBACiAyMDE0LTA4LTI5ICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtNYWNdIFN1cHBvcnQgYXVkaW9Tb3VyY2VQcm92
aWRlcigpIGluIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTA0MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgQXVkaW9T
b3VyY2VQcm92aWRlciBpbiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLCB0aGVy
ZWJ5CisgICAgICAgIHN1cHBvcnRpbmcgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLgorCisg
ICAgICAgIEltcG9ydCB0aGUgQ0FSaW5nQnVmZmVyIGZyb20gQ29yZUF1ZGlvIHNhbXBsZSBjb2Rl
LCBtYWtpbmcgdGhlIG5lY2Vzc2FyeSBtb2RpZmljYXRpb25zCisgICAgICAgIGZvciBXZWJLaXQg
c3R5bGUgYW5kIGNvZGluZyBjb252ZW50aW9ucy4gVGhlIHRocmVhZGluZyBhc3N1bXB0aW9ucyBm
b3IgdGhpcyBjbGFzcyBhcmUKKyAgICAgICAgdGhhdCB0aGVyZSB3aWxsIGJlIGEgc2luZ2xlIHdy
aXRlciB0aHJlYWQgYW5kIGEgc2luZ2xlIHJlYWRlciB0aHJlYWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQVJpbmdCdWZmZXI6OmNyZWF0ZSk6IENyZWF0ZSBhIHVuaXF1ZV9wdHIuCisgICAgICAgIChX
ZWJDb3JlOjpDQVJpbmdCdWZmZXI6OkNBUmluZ0J1ZmZlcik6IFNpbXBsZSBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6fkNBUmluZ0J1ZmZlcik6IFNpbXBsZSBk
ZXN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjphbGxvY2F0ZSk6IElu
aXRpYWxpemUgdGhlIGJ1ZmZlcnMgYW5kIHRpbWUgYm91bmRzIHN0cnVjdHVyZXMuCisgICAgICAg
IChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmRlYWxsb2NhdGUpOiBEZXN0cm95IHNhbWUuCisgICAg
ICAgIChXZWJDb3JlOjpaZXJvUmFuZ2UpOiBTdGF0aWMgdXRpbGl0eSBtZXRob2QuCisgICAgICAg
IChXZWJDb3JlOjpTdG9yZUFCTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hBQkwp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Olplcm9BQkwpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNBUmluZ0J1ZmZlcjo6c3RvcmUpOiBTdG9yZSB0aGUgcGFzc2VkIGluIGJ1ZmZlciBp
biB0aGUgcmluZyBidWZmZXIsIHdyYXBwaW5nCisgICAgICAgICAgICBpZiBuZWNlc3NhcnkuCisg
ICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OnNldFRpbWVCb3VuZHMpOiBTZXQgdGhlIG5l
dyB0aW1lIGJvdW5kcyBieSBpbmNyZW1lbnRpbmcgdGhlCisgICAgICAgICAgICBib3VuZHMgaW5k
ZXggbG9jYWxseSwgZmlsbGluZyBpbiB0aGUgbmV3IHZhbHVlcywgdGhlbiBhdG9taWNhbGx5IGlu
Y3JlbWVudGluZyB0aGUKKyAgICAgICAgICAgIHJlYWRlci12aXNpYmxlIGluZGV4LgorICAgICAg
ICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpnZXRUaW1lQm91bmRzKTogR2V0IHRoZSBuZXcgdGlt
ZSBib3VuZHMgYnkgbWFza2luZyB0aGUgdGltZQorICAgICAgICAgICAgYm91bmRzIGluZGV4LCBh
bmQgdXNpbmcgaXQgYXMgYW4gb2Zmc2V0IHRvIHRoZSB0aW1lIGJvdW5kcyBhcnJheS4gUHJvdGVj
dCBhZ2FpbnN0CisgICAgICAgICAgICBDUFUgc3RhcnZhdGlvbiBvbiB0aGUgcmVhZGluZyB0aHJl
YWQgYnkgY2hlY2tpbmcgdGhlIGluZGV4IGFnYWluc3QgdGhlIHN0b3JlZAorICAgICAgICAgICAg
aW5kZXggaW4gdGhlIGFycmF5IGVudHJ5LiBUaGlzIGNoZWNrIHdpbGwgZmFpbCBpZiB0aGUgd3Jp
dGluZyB0aHJlYWQgaGFzIHdyYXBwZWQKKyAgICAgICAgICAgIG1vcmUgdGhhbiB0aGUgc2l6ZSBv
ZiB0aGUgYXJyYXkuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmNsaXBUaW1lQm91
bmRzKTogQ2xhbXAgdGhlIHBhc3NlZCB2YWx1ZXMgdG8gdGhlIGF2YWlsYWJsZSBib3VuZHMuCisg
ICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OnN0YXJ0RnJhbWUpOiBTaW1wbGUgYWNjZXNz
b3IuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmVuZEZyYW1lKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmZldGNoKTogUmVhZCBhbiBhdWRpbyBidWZm
ZXIgbGlzdCBmcm9tIHRoZSByaW5nIGJ1ZmZlciwgcG9zc2JpbHkKKyAgICAgICAgICAgIHdyYXBw
aW5nIGFyb3VuZCB0byB0aGUgc3RhcnQgb2YgdGhlIHJpbmcgYnVmZmVyLgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQVJpbmdCdWZmZXI6Om51bWJlck9mQ2hhbm5lbHMpOiBTaW1wbGUgYWNjZXNzb3IuCisgICAg
ICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmZyYW1lT2Zmc2V0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OlRpbWVCb3VuZHM6OlRpbWVCb3VuZHMpOiBTdHJ1Y3Qg
aG9sZGluZyB0aGUgc3RhcnQgYW5kIGVuZCBmcmFtZSB2YWx1ZXMuCisKKyAgICAgICAgQWRkIGFu
IGltcGxlbWVudGF0aW9uIG9mIEF1ZGlvU291cmNlUHJvdmlkZXIsIHVzaW5nIEFWQXVkaW9NaXgg
YW5kIE1UQXVkaW9Qcm9jZXNzaW5nVGFwCisgICAgICAgIHRvIHRhcCBhbiBBVlBsYXllckl0ZW0n
cyBhdWRpbyBvdXRwdXQgYW5kIGZlZWQgaXQgdG8gYSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGUpOiBTaW1wbGUg
ZmFjdG9yeS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyk6IFNpbXBsZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp+QXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakMpOiBTaW1wbGUgZGVzdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm92aWRlSW5wdXQpOiBQdXNoIGF1ZGlvIGludG8gdGhlIHJp
bmcgYnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6
OnNldENsaWVudCk6IENhbGwgZGVzdHJveU1peCgpL2NyZWF0ZU1peCgpIGFzIGFwcHJvcHJpYXRl
LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnNldFBsYXll
ckl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDOjpkZXN0cm95TWl4KTogRGV0YWNoIGFuZCBkZXN0cm95IHRoZSBBVkF1ZGlvTWl4IGFuZCB0
YXAuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6Y3JlYXRl
TWl4KTogU2V0IHVwIHRoZSBBVkF1ZGlvTWl4IGFuZCB0YXAgYW5kIGF0dGFjaCB0bworICAgICAg
ICAgICAgdGhlIEFWUGxheWVySXRlbS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOjppbml0Q2FsbGJhY2spOiBQYXNzIHRvIGNsYXNzIG1ldGhvZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5hbGl6ZUNhbGxiYWNr
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6
cHJlcGFyZUNhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQzo6dW5wcmVwYXJlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjppbml0KTogU2V0
IHVwIHRoZSBzdG9yYWdlIHBvaW50ZXIgZm9yIHRoZSB0YXAuCisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6ZmluYWxpemUpOiBOby1vcC4KKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOiBDb21wYXJlIHR3byBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24gb2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcmVwYXJlKTogQ3JlYXRl
IGFuIEF1ZGlvQ292ZXJ0ZXIgb2JqZWN0IGlmIG5lY2Vzc2FyeSwKKyAgICAgICAgICAgIGNyZWF0
ZSB0aGUgcmluZyBidWZmZXIsIGFuZCBub3RpZnkgdGhlIGNsaWVudCBvZiBmb3JtYXQgY2hhbmdl
cy4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp1bnByZXBh
cmUpOiBEZXN0cm95IHNhbWUuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQzo6cHJvY2Vzcyk6IENvcHkgc2FtcGxlcyBvdXQgb2YgdGhlIHJpbmcgYnVmZmVyLAor
ICAgICAgICAgICAgZm9ybWF0IGNvbnZlcnRpbmcgdGhlbSBpZiBuZWNlc3NhcnkuIE11dGUgb3Jp
Z2luYWwgYXVkaW8uCisKKyAgICAgICAgQ3JlYXRlIHRoZSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQyBvYmplY3QgYW5kIG5vdGlmeSBpdCB3aGVuIHRoZSBjdXJyZW50IEFWUGxheWVySXRlbSBj
aGFuZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVySXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjphdWRpb1NvdXJjZVByb3ZpZGVy
KToKKworICAgICAgICBFbmFibGUgU09GVF9MSU5LX01BWV9GQUlMIG9uIHRoZSBNYWMgcGxhdGZv
cm0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaDoKKworICAgICAgICBB
ZGQgbmV3IGZpbGVzIHRvIHRoZSBwcm9qZWN0LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCisyMDE0LTA4LTI5ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVA
YXBwbGUuY29tPgorCiAgICAgICAgIFtNU0VdIEFkZCBzZXR0aW5nIGZvciByZWxlYXNlLWJ1aWxk
IGxvZ2dpbmcgb2YgVmlkZW9QbGF5YmFja1F1YWxpdHkKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjM5OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWJmNWE0OTg4OTM1ZTczNzQ5
Njk2MWFhZTE3Njg0YjRjOGQxMmUxNi4uY2U0YWE3NzU0M2QyOTZkODYxYWU5NWEzODljY2VhNWUy
ZGVjMWNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNTYzNiw2ICs1NjM2LDggQEAKIAkJQ0Q4MjAzMEQxMzk1QUI2QTAwRjk1
NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgyMDMwOTEzOTVBQjZBMDBG
OTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLzsgfTsK
IAkJQ0Q4MjAzMTAxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMEUxMzk1QUNF
NzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEODIwMzExMTM5NUFDRTcwMEY5NTZDNiAvKiBX
ZWJXaW5kb3dBbmltYXRpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9u
Lm1tICovOyB9OworCQlDRDhBN0JCQjE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRDhBN0JCOTE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akMubW0gKi87IH07CisJCUNEOEE3QkJDMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0Q4QTdCQkExOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDLmggKi87IH07CiAJCUNEOEI1QTQyMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEOEI1QTQwMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0Q4QjVBNDMxODBEMTQ5QTAwOEI4
RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCNUE0MTE4MEQxNDlBMDA4QjhF
NjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0Q4
QjVBNDYxODBERkY0RTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QjVBNDUxODBERkY0RTAw
OEI4RTY1IC8qIFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5oICovOyB9OwpAQCAtNTY4MSw2ICs1Njgz
LDggQEAKIAkJQ0RDNjlERDcxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2Fy
bmluZ1ZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREM2OURENTE2MzIwMjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmll
dy5tbSAqLzsgfTsKIAkJQ0RDNjlEREExNjM3MUZENDAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2Ny
ZWVuUGxhY2Vob2xkZXJWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREM2OUREODE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlDREM2OUREQjE2MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREM2OUREOTE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFj
ZWhvbGRlclZpZXcubW0gKi87IH07CisJCUNEQzczNDE0MTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJp
bmdCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RDNzM0MTIxOTc3ODk2QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5jcHAgKi87IH07CisJ
CUNEQzczNDE1MTk3Nzg5NkQwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzczNDEzMTk3Nzg5NkMwMDQ2QkZD
NSAvKiBDQVJpbmdCdWZmZXIuaCAqLzsgfTsKIAkJQ0RDOEI1QTIxODA0NjM0NzAwMTZFNjg1IC8q
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAv
KiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi87IH07CiAJCUNEQzhC
NUEzMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhC
NUExMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMuaCAqLzsgfTsKIAkJQ0RDOEI1QTYxODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREM4QjVBNDE4MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2Jq
Qy5tbSAqLzsgfTsKQEAgLTEzMDU4LDYgKzEzMDYyLDggQEAKIAkJQ0Q4MjAzMDkxMzk1QUI2QTAw
Rjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDgyMDMw
RTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDRDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0
aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViV2luZG93
QW5pbWF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDhBN0JCOTE5Nzcz
NUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q4QTdCQkExOTc3MzVGRTAwQ0JENjQz
IC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNEOEI1QTQwMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOyBwYXRoID0gb2Jq
Yy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0Q4QjVBNDExODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHBhdGggPSBvYmpjL1ZpZGVv
VHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNEOEI1QTQ0MTgwREQ4RDYwMDhCOEU2NSAvKiBWaWRlb1RyYWNrTWVkaWFTb3VyY2Uu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzEzMyw2ICsxMzEzOSw4IEBACiAJCUNEQzY5REQ1MTYzMjAyNkMwMDdDMzhE
RiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDNjlERDgxNjM3MUZEMzAwN0MzOERGIC8qIFdl
YkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNEQzY5REQ5MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVs
bFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDREM3MzQxMjE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVm
ZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENBUmluZ0J1ZmZl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2
QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q0FSaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzhCNUEwMTgw
NDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW07IHBhdGggPSBvYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDOEI1
QTExODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMuaDsgcGF0aCA9IG9iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzhCNUE0MTgw
NDc0RjcwMDE2RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5t
bTsgcGF0aCA9IG9iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNjIyLDYgKzIxNjMwLDggQEAKIAkJCQlDRDhCNUE0MDE4MEQx
NDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi8s
CiAJCQkJQ0Q3RTA1MjAxNjUxQTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRl
ci5oICovLAogCQkJCUNEN0UwNTIxMTY1MUE4NDEwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3Vy
Y2VMb2FkZXIubW0gKi8sCisJCQkJQ0Q4QTdCQjkxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovLAorCQkJCUNEOEE3QkJBMTk3NzM1RkUwMENCRDY0MyAv
KiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBvYmpj
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIzMTM0LDYgKzIzMTQ0LDggQEAKIAkJ
CQlDRDU0REU0NTE3NDY4QjZGMDA1RTVCMzYgLyogTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAg
Ki8sCiAJCQkJQ0QyRjRBMjUxOEQ4QTM0OTAwNjM3NDZEIC8qIEF1ZGlvSGFyZHdhcmVMaXN0ZW5l
ck1hYy5jcHAgKi8sCiAJCQkJQ0QyRjRBMjYxOEQ4QTM0OTAwNjM3NDZEIC8qIEF1ZGlvSGFyZHdh
cmVMaXN0ZW5lck1hYy5oICovLAorCQkJCUNEQzczNDEyMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJp
bmdCdWZmZXIuY3BwICovLAorCQkJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdC
dWZmZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTI0MzU5LDYgKzI0MzcxLDcgQEAKIAkJCQlBOEVBNzlGQTBBMTkxNkRGMDBBOEVG
NUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3Q0I3
MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThFQTc5RjcwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUNEQzczNDE1MTk3Nzg5NkQwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRjE5OEU1MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0IzODY3MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MRG9j
dW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REU4MDk5RTY0OTIwMDU2RTU4
MSAvKiBodG1sZWRpdGluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTA0NCw2ICsyNTA1Nyw3IEBA
CiAJCQkJQjJGQTNEQTMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGVuZ3RoTGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjJGQTNEQTUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RBNzBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdMaW5lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q4QTdCQkMxOTc3
MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMkZBM0RBOTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdNYXJrZXJFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RBQjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdNYXNr
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQUQwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHTWF0cml4LmggaW4gSGVhZGVycyAqLywKQEAgLTI5MzEwLDYgKzI5MzI0LDcgQEAKIAkJ
CQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTQ1MzkwNDYwRUFGRDYzNzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRp
bWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0Q4QTdCQkIxOTc3MzVGRTAwQ0JENjQzIC8q
IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUIx
RDMwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0MUQxNjhFNzEwMjI2RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCNzg0MjAxNjM5Q0JCRTAwMDdCNjkyIC8qIFNoYXJlZFdv
cmtlclJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTQ3NSw2ICsyOTQ5MCw3IEBA
CiAJCQkJQjIyMjc5QTQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QjA1MEQwMEJGRjEwMDcx
Qjc4MiAvKiBTVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjIyMjdCMDYwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlDREM3MzQxNDE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QjA4MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NT
dHlsZVNlbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUE3MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdDdXJzb3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUFE
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdEZWZzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmJkODNhYjc4ZWNhOWQ2ZGZkOTFmODBiNWMxZThjNzU3ZGU4OTg4OAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdC
dWZmZXIuY3BwCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNBUmluZ0J1ZmZlci5oIgorCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0Nv
cmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8bGlia2Vybi9PU0F0b21pYy5oPgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisKK2NvbnN0IHVpbnQzMl90IGtHZW5lcmFsUmluZ1RpbWVCb3Vu
ZHNRdWV1ZVNpemUgPSAzMjsKK2NvbnN0IHVpbnQzMl90IGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNR
dWV1ZU1hc2sgPSBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVTaXplIC0gMTsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8Q0FSaW5nQnVmZmVyPiBDQVJpbmdCdWZm
ZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDQVJpbmdCdWZmZXI+
KG5ldyBDQVJpbmdCdWZmZXIoKSk7Cit9CisKK0NBUmluZ0J1ZmZlcjo6Q0FSaW5nQnVmZmVyKCkK
KyAgICA6IG1fY2hhbm5lbENvdW50KDApCisgICAgLCBtX2ZyYW1lQ291bnQoMCkKKyAgICAsIG1f
Y2FwYWNpdHlCeXRlcygwKQorICAgICwgbV90aW1lQm91bmRzUXVldWUoa0dlbmVyYWxSaW5nVGlt
ZUJvdW5kc1F1ZXVlU2l6ZSkKKyAgICAsIG1fdGltZUJvdW5kc1F1ZXVlUHRyKDApCit7Cit9CisK
K0NBUmluZ0J1ZmZlcjo6fkNBUmluZ0J1ZmZlcigpCit7CisgICAgZGVhbGxvY2F0ZSgpOworfQor
Cit2b2lkIENBUmluZ0J1ZmZlcjo6YWxsb2NhdGUodWludDMyX3QgY2hhbm5lbENvdW50LCBzaXpl
X3QgYnl0ZXNQZXJGcmFtZSwgc2l6ZV90IGZyYW1lQ291bnQpCit7CisgICAgZGVhbGxvY2F0ZSgp
OworCisgICAgZnJhbWVDb3VudCA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhmcmFtZUNvdW50
KTsKKworICAgIG1fY2hhbm5lbENvdW50ID0gY2hhbm5lbENvdW50OworICAgIG1fYnl0ZXNQZXJG
cmFtZSA9IGJ5dGVzUGVyRnJhbWU7CisgICAgbV9mcmFtZUNvdW50ID0gZnJhbWVDb3VudDsKKyAg
ICBtX2ZyYW1lQ291bnRNYXNrID0gZnJhbWVDb3VudCAtIDE7CisgICAgbV9jYXBhY2l0eUJ5dGVz
ID0gYnl0ZXNQZXJGcmFtZSAqIGZyYW1lQ291bnQ7CisKKyAgICBzaXplX3QgcG9pbnRlcnNTaXpl
ID0gY2hhbm5lbENvdW50ICogc2l6ZW9mKEJ5dGUqKTsKKyAgICBzaXplX3QgYWxsb2NTaXplID0g
cG9pbnRlcnNTaXplICsgKG1fY2FwYWNpdHlCeXRlcyAqIGNoYW5uZWxDb3VudCk7CisgICAgbV9i
dWZmZXJzID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShhbGxvY1NpemUsIDEpOworCisgICAgQnl0ZSoq
IHBvaW50ZXJzID0gc3RhdGljX2Nhc3Q8Qnl0ZSoqPihtX2J1ZmZlcnMtPmRhdGEoKSk7CisgICAg
Qnl0ZSogY2hhbm5lbERhdGEgPSBzdGF0aWNfY2FzdDxCeXRlKj4obV9idWZmZXJzLT5kYXRhKCkp
ICsgcG9pbnRlcnNTaXplOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYW5uZWxD
b3VudDsgKytpKSB7CisgICAgICAgIHBvaW50ZXJzW2ldID0gY2hhbm5lbERhdGE7CisgICAgICAg
IGNoYW5uZWxEYXRhICs9IG1fY2FwYWNpdHlCeXRlczsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8g
dGltZUJvdW5kcyA6IG1fdGltZUJvdW5kc1F1ZXVlKSB7CisgICAgICAgIHRpbWVCb3VuZHMubV9z
dGFydEZyYW1lID0gMDsKKyAgICAgICAgdGltZUJvdW5kcy5tX2VuZEZyYW1lID0gMDsKKyAgICAg
ICAgdGltZUJvdW5kcy5tX3VwZGF0ZUNvdW50ZXIgPSAwOworICAgIH0KKyAgICBtX3RpbWVCb3Vu
ZHNRdWV1ZVB0ciA9IDA7Cit9CisKK3ZvaWQgQ0FSaW5nQnVmZmVyOjpkZWFsbG9jYXRlKCkKK3sK
KyAgICBpZiAobV9idWZmZXJzKQorICAgICAgICBtX2J1ZmZlcnMuY2xlYXIoKTsKKworICAgIG1f
Y2hhbm5lbENvdW50ID0gMDsKKyAgICBtX2NhcGFjaXR5Qnl0ZXMgPSAwOworICAgIG1fZnJhbWVD
b3VudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIFplcm9SYW5nZShCeXRlKiogYnVmZmVycywgaW50
IGNoYW5uZWxDb3VudCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG5ieXRlcykKK3sKKyAgICB3aGls
ZSAoLS1jaGFubmVsQ291bnQgPj0gMCkgeworICAgICAgICBtZW1zZXQoKmJ1ZmZlcnMgKyBvZmZz
ZXQsIDAsIG5ieXRlcyk7CisgICAgICAgICsrYnVmZmVyczsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIFN0b3JlQUJMKEJ5dGUqKiBidWZmZXJzLCBzaXplX3QgZGVzdE9mZnNldCwgY29uc3QgQXVk
aW9CdWZmZXJMaXN0KiBsaXN0LCBzaXplX3Qgc3JjT2Zmc2V0LCBzaXplX3QgbmJ5dGVzKQorewor
ICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKKyAgICBjb25zdCBB
dWRpb0J1ZmZlciogc3JjID0gbGlzdC0+bUJ1ZmZlcnM7CisgICAgd2hpbGUgKC0tY2hhbm5lbENv
dW50ID49IDApIHsKKyAgICAgICAgaWYgKHNyY09mZnNldCA+IHNyYy0+bURhdGFCeXRlU2l6ZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtZW1jcHkoKmJ1ZmZlcnMgKyBkZXN0T2Zm
c2V0LCBzdGF0aWNfY2FzdDxCeXRlKj4oc3JjLT5tRGF0YSkgKyBzcmNPZmZzZXQsIHN0ZDo6bWlu
PHNpemVfdD4obmJ5dGVzLCBzcmMtPm1EYXRhQnl0ZVNpemUgLSBzcmNPZmZzZXQpKTsKKyAgICAg
ICAgKytidWZmZXJzOworICAgICAgICArK3NyYzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZl
dGNoQUJMKEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGRlc3RPZmZzZXQsIEJ5dGUqKiBi
dWZmZXJzLCBzaXplX3Qgc3JjT2Zmc2V0LCBzaXplX3QgbmJ5dGVzKQoreworICAgIGludCBjaGFu
bmVsQ291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKKyAgICBBdWRpb0J1ZmZlciogZGVzdCA9
IGxpc3QtPm1CdWZmZXJzOworICAgIHdoaWxlICgtLWNoYW5uZWxDb3VudCA+PSAwKSB7CisgICAg
ICAgIGlmIChkZXN0T2Zmc2V0ID4gZGVzdC0+bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Qnl0ZSo+KGRlc3QtPm1EYXRhKSAr
IGRlc3RPZmZzZXQsICpidWZmZXJzICsgc3JjT2Zmc2V0LCBzdGQ6Om1pbjxzaXplX3Q+KG5ieXRl
cywgZGVzdC0+bURhdGFCeXRlU2l6ZSAtIGRlc3RPZmZzZXQpKTsKKyAgICAgICAgKytidWZmZXJz
OworICAgICAgICArK2Rlc3Q7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBaZXJvQUJMKEF1ZGlv
QnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGRlc3RPZmZzZXQsIHNpemVfdCBuYnl0ZXMpCit7Cisg
ICAgaW50IG5CdWZmZXJzID0gbGlzdC0+bU51bWJlckJ1ZmZlcnM7CisgICAgQXVkaW9CdWZmZXIq
IGRlc3QgPSBsaXN0LT5tQnVmZmVyczsKKyAgICB3aGlsZSAoLS1uQnVmZmVycyA+PSAwKSB7Cisg
ICAgICAgIGlmIChkZXN0T2Zmc2V0ID4gZGVzdC0+bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8Qnl0ZSo+KGRlc3QtPm1EYXRh
KSArIGRlc3RPZmZzZXQsIDAsIHN0ZDo6bWluPHNpemVfdD4obmJ5dGVzLCBkZXN0LT5tRGF0YUJ5
dGVTaXplIC0gZGVzdE9mZnNldCkpOworICAgICAgICArK2Rlc3Q7CisgICAgfQorfQorCitDQVJp
bmdCdWZmZXI6OkVycm9yIENBUmluZ0J1ZmZlcjo6c3RvcmUoY29uc3QgQXVkaW9CdWZmZXJMaXN0
KiBsaXN0LCBzaXplX3QgZnJhbWVzVG9Xcml0ZSwgdWludDY0X3Qgc3RhcnRGcmFtZSkKK3sKKyAg
ICBpZiAoIWZyYW1lc1RvV3JpdGUpCisgICAgICAgIHJldHVybiBPazsKKworICAgIGlmIChmcmFt
ZXNUb1dyaXRlID4gbV9mcmFtZUNvdW50KQorICAgICAgICByZXR1cm4gVG9vTXVjaDsKKworICAg
IHVpbnQ2NF90IGVuZEZyYW1lID0gc3RhcnRGcmFtZSArIGZyYW1lc1RvV3JpdGU7CisKKyAgICBp
ZiAoc3RhcnRGcmFtZSA8IGN1cnJlbnRFbmRGcmFtZSgpKSB7CisgICAgICAgIC8vIFRocm93IGV2
ZXJ5dGhpbmcgb3V0IHdoZW4gZ29pbmcgYmFja3dhcmRzLgorICAgICAgICBzZXRDdXJyZW50RnJh
bWVCb3VuZHMoc3RhcnRGcmFtZSwgc3RhcnRGcmFtZSk7CisgICAgfSBlbHNlIGlmIChlbmRGcmFt
ZSAtIGN1cnJlbnRTdGFydEZyYW1lKCkgPD0gbV9mcmFtZUNvdW50KSB7CisgICAgICAgIC8vIFRo
ZSBidWZmZXIgaGFzIG5vdCB5ZXQgd3JhcHBlZCBhbmQgd2lsbCBub3QgbmVlZCB0by4KKyAgICAg
ICAgLy8gTm8tb3AuCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQWR2YW5jZSB0aGUgc3RhcnQg
dGltZSBwYXN0IHRoZSByZWdpb24gd2UgYXJlIGFib3V0IHRvIG92ZXJ3cml0ZQorICAgICAgICAv
LyBzdGFydGluZyBvbmUgYnVmZmVyIG9mIHRpbWUgYmVoaW5kIHdoZXJlIHdlJ3JlIHdyaXRpbmcu
CisgICAgICAgIHVpbnQ2NF90IG5ld1N0YXJ0RnJhbWUgPSBlbmRGcmFtZSAtIG1fZnJhbWVDb3Vu
dDsKKyAgICAgICAgdWludDY0X3QgbmV3RW5kRnJhbWUgPSBzdGQ6Om1heChuZXdTdGFydEZyYW1l
LCBjdXJyZW50RW5kRnJhbWUoKSk7CisgICAgICAgIHNldEN1cnJlbnRGcmFtZUJvdW5kcyhuZXdT
dGFydEZyYW1lLCBuZXdFbmRGcmFtZSk7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIG5ldyBm
cmFtZXMuCisgICAgQnl0ZSoqIGJ1ZmZlcnMgPSBzdGF0aWNfY2FzdDxCeXRlKio+KG1fYnVmZmVy
cy0+ZGF0YSgpKTsKKyAgICBzaXplX3Qgb2Zmc2V0MDsKKyAgICBzaXplX3Qgb2Zmc2V0MTsKKyAg
ICB1aW50NjRfdCBjdXJFbmQgPSBjdXJyZW50RW5kRnJhbWUoKTsKKworICAgIGlmIChzdGFydEZy
YW1lID4gY3VyRW5kKSB7CisgICAgICAgIC8vIFdlIGFyZSBza2lwcGluZyBzb21lIHNhbXBsZXMs
IHNvIHplcm8gdGhlIHJhbmdlIHdlIGFyZSBza2lwcGluZy4KKyAgICAgICAgb2Zmc2V0MCA9IGZy
YW1lT2Zmc2V0KGN1ckVuZCk7CisgICAgICAgIG9mZnNldDEgPSBmcmFtZU9mZnNldChzdGFydEZy
YW1lKTsKKyAgICAgICAgaWYgKG9mZnNldDAgPCBvZmZzZXQxKQorICAgICAgICAgICAgWmVyb1Jh
bmdlKGJ1ZmZlcnMsIG1fY2hhbm5lbENvdW50LCBvZmZzZXQwLCBvZmZzZXQxIC0gb2Zmc2V0MCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgWmVyb1JhbmdlKGJ1ZmZlcnMsIG1fY2hhbm5l
bENvdW50LCBvZmZzZXQwLCBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwKTsKKyAgICAgICAgICAg
IFplcm9SYW5nZShidWZmZXJzLCBtX2NoYW5uZWxDb3VudCwgMCwgb2Zmc2V0MSk7CisgICAgICAg
IH0KKyAgICAgICAgb2Zmc2V0MCA9IG9mZnNldDE7CisgICAgfSBlbHNlCisgICAgICAgIG9mZnNl
dDAgPSBmcmFtZU9mZnNldChzdGFydEZyYW1lKTsKKworICAgIG9mZnNldDEgPSBmcmFtZU9mZnNl
dChlbmRGcmFtZSk7CisgICAgaWYgKG9mZnNldDAgPCBvZmZzZXQxKQorICAgICAgICBTdG9yZUFC
TChidWZmZXJzLCBvZmZzZXQwLCBsaXN0LCAwLCBvZmZzZXQxIC0gb2Zmc2V0MCk7CisgICAgZWxz
ZSB7CisgICAgICAgIHNpemVfdCBuYnl0ZXMgPSBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwOwor
ICAgICAgICBTdG9yZUFCTChidWZmZXJzLCBvZmZzZXQwLCBsaXN0LCAwLCBuYnl0ZXMpOworICAg
ICAgICBTdG9yZUFCTChidWZmZXJzLCAwLCBsaXN0LCBuYnl0ZXMsIG9mZnNldDEpOworICAgIH0K
KworICAgIC8vIE5vdyB1cGRhdGUgdGhlIGVuZCB0aW1lLgorICAgIHNldEN1cnJlbnRGcmFtZUJv
dW5kcyhjdXJyZW50U3RhcnRGcmFtZSgpLCBlbmRGcmFtZSk7CisKKyAgICByZXR1cm4gT2s7Cit9
CisKK3ZvaWQgQ0FSaW5nQnVmZmVyOjpzZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3Qgc3Rh
cnRUaW1lLCB1aW50NjRfdCBlbmRUaW1lKQoreworICAgIEJ5dGVTcGluTG9ja2VyIGxvY2tlciht
X2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOworICAgIHVpbnQzMl90IG5leHRQdHIgPSBtX3RpbWVC
b3VuZHNRdWV1ZVB0ciArIDE7CisgICAgdWludDMyX3QgaW5kZXggPSBuZXh0UHRyICYga0dlbmVy
YWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFzazsKKworICAgIG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4
XS5tX3N0YXJ0RnJhbWUgPSBzdGFydFRpbWU7CisgICAgbV90aW1lQm91bmRzUXVldWVbaW5kZXhd
Lm1fZW5kRnJhbWUgPSBlbmRUaW1lOworICAgIG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX3Vw
ZGF0ZUNvdW50ZXIgPSBuZXh0UHRyOworICAgIE9TQXRvbWljSW5jcmVtZW50MzJCYXJyaWVyKHN0
YXRpY19jYXN0PGludDMyX3QqPigmbV90aW1lQm91bmRzUXVldWVQdHIpKTsKK30KKwordm9pZCBD
QVJpbmdCdWZmZXI6OmdldEN1cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCAmc3RhcnRUaW1lLCB1
aW50NjRfdCAmZW5kVGltZSkKK3sKKyAgICBCeXRlU3BpbkxvY2tlciBsb2NrZXIobV9jdXJyZW50
RnJhbWVCb3VuZHNMb2NrKTsKKyAgICB1aW50MzJfdCBjdXJQdHIgPSBtX3RpbWVCb3VuZHNRdWV1
ZVB0cjsKKyAgICB1aW50MzJfdCBpbmRleCA9IGN1clB0ciAmIGtHZW5lcmFsUmluZ1RpbWVCb3Vu
ZHNRdWV1ZU1hc2s7CisgICAgQ0FSaW5nQnVmZmVyOjpUaW1lQm91bmRzJiBib3VuZHMgPSBtX3Rp
bWVCb3VuZHNRdWV1ZVtpbmRleF07CisKKyAgICBzdGFydFRpbWUgPSBib3VuZHMubV9zdGFydEZy
YW1lOworICAgIGVuZFRpbWUgPSBib3VuZHMubV9lbmRGcmFtZTsKK30KKwordm9pZCBDQVJpbmdC
dWZmZXI6OmNsaXBUaW1lQm91bmRzKHVpbnQ2NF90JiBzdGFydFJlYWQsIHVpbnQ2NF90JiBlbmRS
ZWFkKQoreworICAgIHVpbnQ2NF90IHN0YXJ0VGltZTsKKyAgICB1aW50NjRfdCBlbmRUaW1lOwor
CisgICAgZ2V0Q3VycmVudEZyYW1lQm91bmRzKHN0YXJ0VGltZSwgZW5kVGltZSk7CisKKyAgICBp
ZiAoc3RhcnRSZWFkID4gZW5kVGltZSB8fCBlbmRSZWFkIDwgc3RhcnRUaW1lKSB7CisgICAgICAg
IGVuZFJlYWQgPSBzdGFydFJlYWQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGFy
dFJlYWQgPSBzdGQ6Om1heChzdGFydFJlYWQsIHN0YXJ0VGltZSk7CisgICAgZW5kUmVhZCA9IHN0
ZDo6bWluKGVuZFJlYWQsIGVuZFRpbWUpOworICAgIGVuZFJlYWQgPSBzdGQ6Om1heChlbmRSZWFk
LCBzdGFydFJlYWQpOworfQorCit1aW50NjRfdCBDQVJpbmdCdWZmZXI6OmN1cnJlbnRTdGFydEZy
YW1lKCkgY29uc3QKK3sKKyAgICB1aW50MzJfdCBpbmRleCA9IG1fdGltZUJvdW5kc1F1ZXVlUHRy
ICYga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFzazsKKyAgICByZXR1cm4gbV90aW1lQm91
bmRzUXVldWVbaW5kZXhdLm1fc3RhcnRGcmFtZTsKK30KKwordWludDY0X3QgQ0FSaW5nQnVmZmVy
OjpjdXJyZW50RW5kRnJhbWUoKSBjb25zdAoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV90aW1l
Qm91bmRzUXVldWVQdHIgJiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVNYXNrOworICAgIHJl
dHVybiBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF0ubV9lbmRGcmFtZTsKK30KKworQ0FSaW5nQnVm
ZmVyOjpFcnJvciBDQVJpbmdCdWZmZXI6OmZldGNoKEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6
ZV90IG5GcmFtZXMsIHVpbnQ2NF90IHN0YXJ0UmVhZCkKK3sKKyAgICBpZiAoIW5GcmFtZXMpCisg
ICAgICAgIHJldHVybiBPazsKKyAgICAKKyAgICBzdGFydFJlYWQgPSBzdGQ6Om1heDx1aW50NjRf
dD4oMCwgc3RhcnRSZWFkKTsKKyAgICAKKyAgICB1aW50NjRfdCBlbmRSZWFkID0gc3RhcnRSZWFk
ICsgbkZyYW1lczsKKyAgICAKKyAgICB1aW50NjRfdCBzdGFydFJlYWQwID0gc3RhcnRSZWFkOwor
ICAgIHVpbnQ2NF90IGVuZFJlYWQwID0gZW5kUmVhZDsKKyAgICAKKyAgICBjbGlwVGltZUJvdW5k
cyhzdGFydFJlYWQsIGVuZFJlYWQpOworCisgICAgaWYgKHN0YXJ0UmVhZCA9PSBlbmRSZWFkKSB7
CisgICAgICAgIFplcm9BQkwobGlzdCwgMCwgbkZyYW1lcyAqIG1fYnl0ZXNQZXJGcmFtZSk7Cisg
ICAgICAgIHJldHVybiBPazsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGJ5dGVTaXplID0gKGVu
ZFJlYWQgLSBzdGFydFJlYWQpICogbV9ieXRlc1BlckZyYW1lOworICAgIAorICAgIHNpemVfdCBk
ZXN0U3RhcnRCeXRlT2Zmc2V0ID0gc3RkOjptYXg8c2l6ZV90PigwLCAoc3RhcnRSZWFkIC0gc3Rh
cnRSZWFkMCkgKiBtX2J5dGVzUGVyRnJhbWUpOworICAgIAorICAgIGlmIChkZXN0U3RhcnRCeXRl
T2Zmc2V0ID4gMCkKKyAgICAgICAgWmVyb0FCTChsaXN0LCAwLCBzdGQ6Om1pbjxzaXplX3Q+KG5G
cmFtZXMgKiBtX2J5dGVzUGVyRnJhbWUsIGRlc3RTdGFydEJ5dGVPZmZzZXQpKTsKKworICAgIHNp
emVfdCBkZXN0RW5kU2l6ZSA9IHN0ZDo6bWF4PHNpemVfdD4oMCwgZW5kUmVhZDAgLSBlbmRSZWFk
KTsKKyAgICBpZiAoZGVzdEVuZFNpemUgPiAwKQorICAgICAgICBaZXJvQUJMKGxpc3QsIGRlc3RT
dGFydEJ5dGVPZmZzZXQgKyBieXRlU2l6ZSwgZGVzdEVuZFNpemUgKiBtX2J5dGVzUGVyRnJhbWUp
OworCisgICAgQnl0ZSAqKmJ1ZmZlcnMgPSBzdGF0aWNfY2FzdDxCeXRlKio+KG1fYnVmZmVycy0+
ZGF0YSgpKTsKKyAgICBzaXplX3Qgb2Zmc2V0MCA9IGZyYW1lT2Zmc2V0KHN0YXJ0UmVhZCk7Cisg
ICAgc2l6ZV90IG9mZnNldDEgPSBmcmFtZU9mZnNldChlbmRSZWFkKTsKKyAgICBzaXplX3QgbmJ5
dGVzOworICAgIAorICAgIGlmIChvZmZzZXQwIDwgb2Zmc2V0MSkgeworICAgICAgICBuYnl0ZXMg
PSBvZmZzZXQxIC0gb2Zmc2V0MDsKKyAgICAgICAgRmV0Y2hBQkwobGlzdCwgZGVzdFN0YXJ0Qnl0
ZU9mZnNldCwgYnVmZmVycywgb2Zmc2V0MCwgbmJ5dGVzKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBuYnl0ZXMgPSBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwOworICAgICAgICBGZXRjaEFCTChs
aXN0LCBkZXN0U3RhcnRCeXRlT2Zmc2V0LCBidWZmZXJzLCBvZmZzZXQwLCBuYnl0ZXMpOworICAg
ICAgICBGZXRjaEFCTChsaXN0LCBkZXN0U3RhcnRCeXRlT2Zmc2V0ICsgbmJ5dGVzLCBidWZmZXJz
LCAwLCBvZmZzZXQxKTsKKyAgICAgICAgbmJ5dGVzICs9IG9mZnNldDE7CisgICAgfQorICAgIAor
ICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKKyAgICBBdWRpb0J1
ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJzOworICAgIHdoaWxlICgtLWNoYW5uZWxDb3VudCA+
PSAwKSB7CisgICAgICAgIGRlc3QtPm1EYXRhQnl0ZVNpemUgPSBuYnl0ZXM7CisgICAgICAgIGRl
c3QrKzsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIE9rOworfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ5
YjA1MjRhY2FhZTAzM2IyZDAxYjExNDBmOWRlZjkzOTVlYjQ3ZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaApAQCAtMCww
ICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQVJpbmdCdWZmZXJfaAorI2RlZmluZSBD
QVJpbmdCdWZmZXJfaAorCisjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1
ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3R5cGVk
ZWYgc3RydWN0IEF1ZGlvQnVmZmVyTGlzdCBBdWRpb0J1ZmZlckxpc3Q7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ0FSaW5nQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPENBUmluZ0J1ZmZlcj4gY3JlYXRlKCk7CisgICAgfkNBUmluZ0J1ZmZlcigp
OworCisgICAgZW51bSBFcnJvciB7CisgICAgICAgIE9rLAorICAgICAgICBUb29NdWNoLCAvLyBm
ZXRjaCBzdGFydCB0aW1lIGlzIGVhcmxpZXIgdGhhbiBidWZmZXIgc3RhcnQgdGltZSBhbmQgZmV0
Y2ggZW5kIHRpbWUgaXMgbGF0ZXIgdGhhbiBidWZmZXIgZW5kIHRpbWUKKyAgICAgICAgQ1BVT3Zl
cmxvYWQsIC8vIHRoZSByZWFkZXIgaXMgdW5hYmxlIHRvIGdldCBlbm91Z2ggQ1BVIGN5Y2xlcyB0
byBjYXB0dXJlIGEgY29uc2lzdGVudCBzbmFwc2hvdCBvZiB0aGUgdGltZSBib3VuZHMKKyAgICB9
OworCisgICAgdm9pZCBhbGxvY2F0ZSh1aW50MzJfdCBtX2NoYW5uZWxDb3VudCwgc2l6ZV90IGJ5
dGVzUGVyRnJhbWUsIHNpemVfdCBmcmFtZUNvdW50KTsKKyAgICB2b2lkIGRlYWxsb2NhdGUoKTsK
KyAgICBFcnJvciBzdG9yZShjb25zdCBBdWRpb0J1ZmZlckxpc3QqLCBzaXplX3QgZnJhbWVDb3Vu
dCwgdWludDY0X3Qgc3RhcnRGcmFtZSk7CisgICAgRXJyb3IgZmV0Y2goQXVkaW9CdWZmZXJMaXN0
Kiwgc2l6ZV90IGZyYW1lQ291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUpOworICAgIHZvaWQgZ2V0
Q3VycmVudEZyYW1lQm91bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1l
KTsKKworICAgIHVpbnQzMl90IGNoYW5uZWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5l
bENvdW50OyB9CisKK3ByaXZhdGU6CisgICAgQ0FSaW5nQnVmZmVyKCk7CisKKyAgICBzaXplX3Qg
ZnJhbWVPZmZzZXQodWludDY0X3QgZnJhbWVOdW1iZXIpIHsgcmV0dXJuIChmcmFtZU51bWJlciAm
IG1fZnJhbWVDb3VudE1hc2spICogbV9ieXRlc1BlckZyYW1lOyB9CisKKyAgICB2b2lkIGNsaXBU
aW1lQm91bmRzKHVpbnQ2NF90JiBzdGFydFJlYWQsIHVpbnQ2NF90JiBlbmRSZWFkKTsKKworICAg
IHVpbnQ2NF90IGN1cnJlbnRTdGFydEZyYW1lKCkgY29uc3Q7CisgICAgdWludDY0X3QgY3VycmVu
dEVuZEZyYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0
X3Qgc3RhcnRGcmFtZSwgdWludDY0X3QgZW5kRnJhbWUpOworCisgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBtX2J1ZmZlcnM7CisgICAgdWludDMyX3QgbV9jaGFubmVsQ291bnQ7CisgICAgc2l6ZV90
IG1fYnl0ZXNQZXJGcmFtZTsKKyAgICB1aW50MzJfdCBtX2ZyYW1lQ291bnQ7CisgICAgdWludDMy
X3QgbV9mcmFtZUNvdW50TWFzazsKKyAgICBzaXplX3QgbV9jYXBhY2l0eUJ5dGVzOworCisgICAg
c3RydWN0IFRpbWVCb3VuZHMgeworICAgICAgICBUaW1lQm91bmRzKCkKKyAgICAgICAgICAgIDog
bV9zdGFydEZyYW1lKDApCisgICAgICAgICAgICAsIG1fZW5kRnJhbWUoMCkKKyAgICAgICAgICAg
ICwgbV91cGRhdGVDb3VudGVyKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB2b2xh
dGlsZSB1aW50NjRfdCBtX3N0YXJ0RnJhbWU7CisgICAgICAgIHZvbGF0aWxlIHVpbnQ2NF90IG1f
ZW5kRnJhbWU7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IG1fdXBkYXRlQ291bnRlcjsKKyAg
ICB9OworICAgIAorICAgIFZlY3RvcjxUaW1lQm91bmRzPiBtX3RpbWVCb3VuZHNRdWV1ZTsKKyAg
ICBCeXRlU3BpbkxvY2sgbV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrOworICAgIGludDMyX3QgbV90
aW1lQm91bmRzUXVldWVQdHI7Cit9OworCit9CisKKworI2VuZGlmIC8vIENBUmluZ0J1ZmZlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjFhNmZmOTI5OWYwMTgzZWMxNzA5YmI5NjIwNmRiYTJhYmY3OGQzZjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakNfaAorI2RlZmluZSBBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQ19oCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBVU0UoTUVESUFU
T09MQk9YKQorCisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgPHd0
Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgQVZQ
bGF5ZXJJdGVtOworT0JKQ19DTEFTUyBBVk11dGFibGVBdWRpb01peDsKKwordHlwZWRlZiBjb25z
dCBzdHJ1Y3Qgb3BhcXVlTVRBdWRpb1Byb2Nlc3NpbmdUYXAgKk1UQXVkaW9Qcm9jZXNzaW5nVGFw
UmVmOwordHlwZWRlZiBzdHJ1Y3QgQXVkaW9CdWZmZXJMaXN0IEF1ZGlvQnVmZmVyTGlzdDsKK3R5
cGVkZWYgc3RydWN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBBdWRpb1N0cmVhbUJhc2lj
RGVzY3JpcHRpb247Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVBdWRpb0NvbnZlcnRlciogQXVkaW9D
b252ZXJ0ZXJSZWY7Cit0eXBlZGVmIHVpbnQzMl90IE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3M7
Cit0eXBlZGVmIHNpZ25lZCBsb25nIENNSXRlbUNvdW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENBUmluZ0J1ZmZlcjsKKworY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akMgOiBwdWJsaWMgUmVmQ291bnRlZDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQz4sIHB1Ymxp
YyBBdWRpb1NvdXJjZVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQz4gY3JlYXRlKEFWUGxheWVySXRlbSopOworICAgIHZp
cnR1YWwgfkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKCk7CisKKyAgICB2b2lkIHNldFBsYXll
ckl0ZW0oQVZQbGF5ZXJJdGVtICopOworCitwcml2YXRlOgorICAgIEF1ZGlvU291cmNlUHJvdmlk
ZXJBVkZPYmpDKEFWUGxheWVySXRlbSAqKTsKKworICAgIHZvaWQgZGVzdHJveU1peCgpOworICAg
IHZvaWQgY3JlYXRlTWl4KCk7CisKKyAgICAvLyBBdWRpb1NvdXJjZVByb3ZpZGVyCisgICAgdmly
dHVhbCB2b2lkIHByb3ZpZGVJbnB1dChBdWRpb0J1cyosIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoQXVkaW9Tb3VyY2VQcm92aWRl
ckNsaWVudCopIG92ZXJyaWRlOworCisgICAgc3RhdGljIHZvaWQgaW5pdENhbGxiYWNrKE1UQXVk
aW9Qcm9jZXNzaW5nVGFwUmVmLCB2b2lkKiwgdm9pZCoqKTsKKyAgICBzdGF0aWMgdm9pZCBmaW5h
bGl6ZUNhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmKTsKKyAgICBzdGF0aWMgdm9pZCBw
cmVwYXJlQ2FsbGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYsIENNSXRlbUNvdW50LCBjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qKTsKKyAgICBzdGF0aWMgdm9pZCB1bnByZXBh
cmVDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZik7CisgICAgc3RhdGljIHZvaWQgcHJv
Y2Vzc0NhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmLCBDTUl0ZW1Db3VudCwgTVRBdWRp
b1Byb2Nlc3NpbmdUYXBGbGFncywgQXVkaW9CdWZmZXJMaXN0KiwgQ01JdGVtQ291bnQqLCBNVEF1
ZGlvUHJvY2Vzc2luZ1RhcEZsYWdzKik7CisKKyAgICB2b2lkIGluaXQodm9pZCogY2xpZW50SW5m
bywgdm9pZCoqIHRhcFN0b3JhZ2VPdXQpOworICAgIHZvaWQgZmluYWxpemUoKTsKKyAgICB2b2lk
IHByZXBhcmUoQ01JdGVtQ291bnQgbWF4RnJhbWVzLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24gKnByb2Nlc3NpbmdGb3JtYXQpOworICAgIHZvaWQgdW5wcmVwYXJlKCk7CisgICAg
dm9pZCBwcm9jZXNzKENNSXRlbUNvdW50IG51bWJlckZyYW1lcywgTVRBdWRpb1Byb2Nlc3NpbmdU
YXBGbGFncyBmbGFnc0luLCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxpc3RJbk91dCwgQ01JdGVt
Q291bnQgKm51bWJlckZyYW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NP
dXQpOworCisgICAgUmV0YWluUHRyPEFWUGxheWVySXRlbT4gbV9hdlBsYXllckl0ZW07CisgICAg
UmV0YWluUHRyPEFWTXV0YWJsZUF1ZGlvTWl4PiBtX2F2QXVkaW9NaXg7CisgICAgUmV0YWluUHRy
PE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmPiBtX3RhcDsKKyAgICBSZXRhaW5QdHI8QXVkaW9Db252
ZXJ0ZXJSZWY+IG1fY29udmVydGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxp
c3Q+IG1fbGlzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uPiBtX3RhcERlc2NyaXB0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24+IG1fb3V0cHV0RGVzY3JpcHRpb247CisgICAgc3RkOjp1bmlxdWVfcHRy
PENBUmluZ0J1ZmZlcj4gbV9yaW5nQnVmZmVyOworCisgICAgTWVkaWFUaW1lIG1fc3RhcnRUaW1l
QXRMYXN0UHJvY2VzczsKKyAgICBNZWRpYVRpbWUgbV9lbmRUaW1lQXRMYXN0UHJvY2VzczsKKyAg
ICB1aW50NjRfdCBtX3dyaXRlQWhlYWRDb3VudDsKKyAgICB1aW50NjRfdCBtX3dyaXRlQ291bnQ7
CisgICAgdWludDY0X3QgbV9yZWFkQ291bnQ7CisgICAgYm9vbCBtX3BhdXNlZDsKKyAgICBBdWRp
b1NvdXJjZVByb3ZpZGVyQ2xpZW50KiBtX2NsaWVudDsKK307CisgICAgCit9CisKKyNlbmRpZgor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNzJhMjE4NTg5MzZmYmE0MGFhYThiYmYxYWJhOWU1YTZkNWI0OGEz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCkBAIC0wLDAgKzEsMzk3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQy5oIgorCisjaW1wb3J0ICJBdWRpb0J1cy5oIgorI2ltcG9ydCAiQXVkaW9DaGFu
bmVsLmgiCisjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmgiCisjaW1wb3J0ICJD
QVJpbmdCdWZmZXIuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhVGltZU1h
Yy5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkFz
c2V0VHJhY2suaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkF1ZGlvTWl4Lmg+CisjaW1wb3J0
IDxBVkZvdW5kYXRpb24vQVZNZWRpYUZvcm1hdC5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FW
UGxheWVySXRlbS5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbVRyYWNrLmg+
CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisK
KyNpZiAhTE9HX0RJU0FCTEVECisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Cisj
ZW5kaWYKKworI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShNRURJQVRPT0xCT1gpCisKK1NP
RlRfTElOS19GUkFNRVdPUksoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0ZSQU1FV09SSyhNZWRp
YVRvb2xib3gpCitTT0ZUX0xJTktfRlJBTUVXT1JLKEF1ZGlvVG9vbGJveCkKK1NPRlRfTElOS19G
UkFNRVdPUksoQ29yZU1lZGlhKQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBs
YXllckl0ZW0pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVk11dGFibGVBdWRpb01p
eCkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWTXV0YWJsZUF1ZGlvTWl4SW5wdXRQ
YXJhbWV0ZXJzKQorCit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTU5vdGlmaWNhdGlvbkNlbnRlciAq
Q01Ob3RpZmljYXRpb25DZW50ZXJSZWY7Cit0eXBlZGVmIHZvaWQgKCpDTU5vdGlmaWNhdGlvbkNh
bGxiYWNrKShDTU5vdGlmaWNhdGlvbkNlbnRlclJlZiBpbkNlbnRlciwgY29uc3Qgdm9pZCAqaW5M
aXN0ZW5lciwgQ0ZTdHJpbmdSZWYgaW5Ob3RpZmljYXRpb25OYW1lLCBjb25zdCB2b2lkICppbk5v
dGlmeWluZ09iamVjdCwgQ0ZUeXBlUmVmIGluTm90aWZpY2F0aW9uUGF5bG9hZCk7CisKK1NPRlRf
TElOSyhDb3JlTWVkaWEsIENNTm90aWZpY2F0aW9uQ2VudGVyR2V0RGVmYXVsdExvY2FsQ2VudGVy
LCBDTU5vdGlmaWNhdGlvbkNlbnRlclJlZiwgKHZvaWQpLCAoKSk7CitTT0ZUX0xJTksoQ29yZU1l
ZGlhLCBDTU5vdGlmaWNhdGlvbkNlbnRlckFkZExpc3RlbmVyLCBPU1N0YXR1cywgKENNTm90aWZp
Y2F0aW9uQ2VudGVyUmVmIGNlbnRlciwgY29uc3Qgdm9pZCogbGlzdGVuZXIsIENNTm90aWZpY2F0
aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIENGU3RyaW5nUmVmIG5vdGlmaWNhdGlvbiwgY29uc3Qgdm9p
ZCogb2JqZWN0LCBVSW50MzIgZmxhZ3MpLCAoY2VudGVyLCBsaXN0ZW5lciwgY2FsbGJhY2ssIG5v
dGlmaWNhdGlvbiwgb2JqZWN0LCBmbGFncykpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTU5vdGlm
aWNhdGlvbkNlbnRlclJlbW92ZUxpc3RlbmVyLCBPU1N0YXR1cywgKENNTm90aWZpY2F0aW9uQ2Vu
dGVyUmVmIGNlbnRlciwgY29uc3Qgdm9pZCogbGlzdGVuZXIsIENNTm90aWZpY2F0aW9uQ2FsbGJh
Y2sgY2FsbGJhY2ssIENGU3RyaW5nUmVmIG5vdGlmaWNhdGlvbiwgY29uc3Qgdm9pZCogb2JqZWN0
KSwgKGNlbnRlciwgbGlzdGVuZXIsIGNhbGxiYWNrLCBub3RpZmljYXRpb24sIG9iamVjdCkpCitT
T0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWViYXNlR2V0VGltZSwgQ01UaW1lLCAoQ01UaW1lYmFz
ZVJlZiB0aW1lYmFzZSksICh0aW1lYmFzZSkpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWVi
YXNlR2V0RWZmZWN0aXZlUmF0ZSwgRmxvYXQ2NCwgKENNVGltZWJhc2VSZWYgdGltZWJhc2UpLCAo
dGltZWJhc2UpKQorCitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01UaW1lYmFzZU5v
dGlmaWNhdGlvbl9FZmZlY3RpdmVSYXRlQ2hhbmdlZCwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktf
Q09OU1RBTlQoQ29yZU1lZGlhLCBrQ01UaW1lYmFzZU5vdGlmaWNhdGlvbl9UaW1lSnVtcGVkLCBD
RlN0cmluZ1JlZikKKyNkZWZpbmUga0NNVGltZWJhc2VOb3RpZmljYXRpb25fRWZmZWN0aXZlUmF0
ZUNoYW5nZWQgZ2V0a0NNVGltZWJhc2VOb3RpZmljYXRpb25fRWZmZWN0aXZlUmF0ZUNoYW5nZWQo
KQorI2RlZmluZSBrQ01UaW1lYmFzZU5vdGlmaWNhdGlvbl9UaW1lSnVtcGVkIGdldGtDTVRpbWVi
YXNlTm90aWZpY2F0aW9uX1RpbWVKdW1wZWQoKQorCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBB
dWRpb0NvbnZlcnRlckNvbnZlcnRDb21wbGV4QnVmZmVyLCBPU1N0YXR1cywgKEF1ZGlvQ29udmVy
dGVyUmVmIGluQXVkaW9Db252ZXJ0ZXIsIFVJbnQzMiBpbk51bWJlclBDTUZyYW1lcywgY29uc3Qg
QXVkaW9CdWZmZXJMaXN0KiBpbklucHV0RGF0YSwgQXVkaW9CdWZmZXJMaXN0KiBvdXRPdXRwdXRE
YXRhKSwgKGluQXVkaW9Db252ZXJ0ZXIsIGluTnVtYmVyUENNRnJhbWVzLCBpbklucHV0RGF0YSwg
b3V0T3V0cHV0RGF0YSkpCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbnZlcnRlck5l
dywgT1NTdGF0dXMsIChjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qIGluU291cmNl
Rm9ybWF0LCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qIGluRGVzdGluYXRpb25G
b3JtYXQsIEF1ZGlvQ29udmVydGVyUmVmKiBvdXRBdWRpb0NvbnZlcnRlciksIChpblNvdXJjZUZv
cm1hdCwgaW5EZXN0aW5hdGlvbkZvcm1hdCwgb3V0QXVkaW9Db252ZXJ0ZXIpKQorCitTT0ZUX0xJ
TksoTWVkaWFUb29sYm94LCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEdldFN0b3JhZ2UsIHZvaWQqLCAo
TVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwKSwgKHRhcCkpCitTT0ZUX0xJTksoTWVkaWFUb29s
Ym94LCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEdldFNvdXJjZUF1ZGlvLCBPU1N0YXR1cywgKE1UQXVk
aW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCwgQ01JdGVtQ291bnQgbnVtYmVyRnJhbWVzLCBBdWRpb0J1
ZmZlckxpc3QgKmJ1ZmZlckxpc3RJbk91dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxh
Z3NPdXQsIENNVGltZVJhbmdlICp0aW1lUmFuZ2VPdXQsIENNSXRlbUNvdW50ICpudW1iZXJGcmFt
ZXNPdXQpLCAodGFwLCBudW1iZXJGcmFtZXMsIGJ1ZmZlckxpc3RJbk91dCwgZmxhZ3NPdXQsIHRp
bWVSYW5nZU91dCwgbnVtYmVyRnJhbWVzT3V0KSkKK1NPRlRfTElOS19NQVlfRkFJTChNZWRpYVRv
b2xib3gsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxsb2NhdG9y
UmVmIGFsbG9jYXRvciwgY29uc3QgTVRBdWRpb1Byb2Nlc3NpbmdUYXBDYWxsYmFja3MgKmNhbGxi
YWNrcywgTVRBdWRpb1Byb2Nlc3NpbmdUYXBDcmVhdGlvbkZsYWdzIGZsYWdzLCBNVEF1ZGlvUHJv
Y2Vzc2luZ1RhcFJlZiAqdGFwT3V0KSwgKGFsbG9jYXRvciwgY2FsbGJhY2tzLCBmbGFncywgdGFw
T3V0KSkKKworU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhQ2hhcmFjdGVy
aXN0aWNBdWRpYmxlLCBOU1N0cmluZyAqKQorI2RlZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNB
dWRpYmxlIGdldEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUoKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBkb3VibGUga1JpbmdCdWZmZXJEdXJhdGlvbiA9IDE7CisKK1Bhc3NS
ZWZQdHI8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM+IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDOjpjcmVhdGUoQVZQbGF5ZXJJdGVtICppdGVtKQoreworICAgIGlmICghY2FuTG9hZE1UQXVk
aW9Qcm9jZXNzaW5nVGFwQ3JlYXRlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoaXRlbSkpOworfQor
CitBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMo
QVZQbGF5ZXJJdGVtICppdGVtKQorICAgIDogbV9hdlBsYXllckl0ZW0oaXRlbSkKKyAgICAsIG1f
d3JpdGVDb3VudCgwKQorICAgICwgbV9yZWFkQ291bnQoMCkKKyAgICAsIG1fcGF1c2VkKHRydWUp
CisgICAgLCBtX2NsaWVudChudWxscHRyKQoreworfQorCitBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQzo6fkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKCkKK3sKKyAgICBzZXRDbGllbnQobnVs
bHB0cik7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb3ZpZGVJbnB1
dChBdWRpb0J1cyogYnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIGlmICghbV9h
dlBsYXllckl0ZW0pCisgICAgICAgIHJldHVybjsKKworICAgIHVpbnQ2NF90IHN0YXJ0RnJhbWUg
PSAwOworICAgIHVpbnQ2NF90IGVuZEZyYW1lID0gMDsKKyAgICBtX3JpbmdCdWZmZXItPmdldEN1
cnJlbnRGcmFtZUJvdW5kcyhzdGFydEZyYW1lLCBlbmRGcmFtZSk7CisKKyAgICBpZiAobV93cml0
ZUNvdW50IDw9IG1fcmVhZENvdW50ICsgbV93cml0ZUFoZWFkQ291bnQpIHsKKyAgICAgICAgYnVz
LT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzaXplX3QgZnJhbWVzQXZh
aWxhYmxlID0gZW5kRnJhbWUgLSAobV9yZWFkQ291bnQgKyBtX3dyaXRlQWhlYWRDb3VudCk7Cisg
ICAgaWYgKGZyYW1lc0F2YWlsYWJsZSA8IGZyYW1lc1RvUHJvY2VzcykgeworICAgICAgICBmcmFt
ZXNUb1Byb2Nlc3MgPSBmcmFtZXNBdmFpbGFibGU7CisgICAgICAgIGJ1cy0+emVybygpOworICAg
IH0KKworICAgIEFTU0VSVChidXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSBtX3JpbmdCdWZmZXIt
PmNoYW5uZWxDb3VudCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xpc3Qt
Pm1OdW1iZXJCdWZmZXJzOyArK2kpIHsKKyAgICAgICAgQXVkaW9DaGFubmVsKiBjaGFubmVsID0g
YnVzLT5jaGFubmVsKGkpOworICAgICAgICBtX2xpc3QtPm1CdWZmZXJzW2ldLm1OdW1iZXJDaGFu
bmVscyA9IDE7CisgICAgICAgIG1fbGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEgPSBjaGFubmVsLT5t
dXRhYmxlRGF0YSgpOworICAgICAgICBtX2xpc3QtPm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUg
PSBjaGFubmVsLT5sZW5ndGgoKSAqIHNpemVvZihmbG9hdCk7CisgICAgfQorCisgICAgbV9yaW5n
QnVmZmVyLT5mZXRjaChtX2xpc3QuZ2V0KCksIGZyYW1lc1RvUHJvY2VzcywgbV9yZWFkQ291bnQp
OworICAgIG1fcmVhZENvdW50ICs9IGZyYW1lc1RvUHJvY2VzczsKKworICAgIGlmIChtX2NvbnZl
cnRlcikKKyAgICAgICAgQXVkaW9Db252ZXJ0ZXJDb252ZXJ0Q29tcGxleEJ1ZmZlcihtX2NvbnZl
cnRlci5nZXQoKSwgZnJhbWVzVG9Qcm9jZXNzLCBtX2xpc3QuZ2V0KCksIG1fbGlzdC5nZXQoKSk7
Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnNldENsaWVudChBdWRpb1Nv
dXJjZVByb3ZpZGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgaWYgKG1fY2xpZW50ID09IGNsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fYXZBdWRpb01peCkKKyAgICAgICAgZGVz
dHJveU1peCgpOworCisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBpZiAobV9jbGllbnQg
JiYgbV9hdlBsYXllckl0ZW0pCisgICAgICAgIGNyZWF0ZU1peCgpOworfQorCit2b2lkIEF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDOjpzZXRQbGF5ZXJJdGVtKEFWUGxheWVySXRlbSAqYXZQbGF5
ZXJJdGVtKQoreworICAgIGlmIChtX2F2UGxheWVySXRlbSA9PSBhdlBsYXllckl0ZW0pCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX2F2QXVkaW9NaXgpCisgICAgICAgIGRlc3Ryb3lNaXgo
KTsKKworICAgIG1fYXZQbGF5ZXJJdGVtID0gYXZQbGF5ZXJJdGVtOworCisgICAgaWYgKG1fY2xp
ZW50ICYmIG1fYXZQbGF5ZXJJdGVtKQorICAgICAgICBjcmVhdGVNaXgoKTsKK30KKwordm9pZCBB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6ZGVzdHJveU1peCgpCit7CisgICAgaWYgKG1fYXZQ
bGF5ZXJJdGVtKQorICAgICAgICBbbV9hdlBsYXllckl0ZW0gc2V0QXVkaW9NaXg6bmlsXTsKKyAg
ICBbbV9hdkF1ZGlvTWl4IHNldElucHV0UGFyYW1ldGVyczpuaWxdOworICAgIG1fYXZBdWRpb01p
eC5jbGVhcigpOworICAgIG1fdGFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakM6OmNyZWF0ZU1peCgpCit7CisgICAgQVNTRVJUKCFtX2F2QXVkaW9NaXgpOwor
ICAgIEFTU0VSVChtX2F2UGxheWVySXRlbSk7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAg
IG1fYXZBdWRpb01peCA9IGFkb3B0TlMoW1tnZXRBVk11dGFibGVBdWRpb01peENsYXNzKCkgYWxs
b2NdIGluaXRdKTsKKworICAgIE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ2FsbGJhY2tzIGNhbGxiYWNr
cyA9IHsKKyAgICAgICAgMCwKKyAgICAgICAgdGhpcywKKyAgICAgICAgaW5pdENhbGxiYWNrLAor
ICAgICAgICBmaW5hbGl6ZUNhbGxiYWNrLAorICAgICAgICBwcmVwYXJlQ2FsbGJhY2ssCisgICAg
ICAgIHVucHJlcGFyZUNhbGxiYWNrLAorICAgICAgICBwcm9jZXNzQ2FsbGJhY2ssCisgICAgfTsK
KworICAgIE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCA9IG51bGxwdHI7CisgICAgTVRBdWRp
b1Byb2Nlc3NpbmdUYXBDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgJmNhbGxiYWNrcywgMSwg
JnRhcCk7CisgICAgQVNTRVJUKHRhcCk7CisgICAgQVNTRVJUKG1fdGFwID09IHRhcCk7CisKKyAg
ICBSZXRhaW5QdHI8QVZNdXRhYmxlQXVkaW9NaXhJbnB1dFBhcmFtZXRlcnM+IHBhcmFtZXRlcnMg
PSBhZG9wdE5TKFtbZ2V0QVZNdXRhYmxlQXVkaW9NaXhJbnB1dFBhcmFtZXRlcnNDbGFzcygpIGFs
bG9jXSBpbml0XSk7CisgICAgW3BhcmFtZXRlcnMgc2V0QXVkaW9UYXBQcm9jZXNzb3I6bV90YXAu
Z2V0KCldOworCisgICAgQ01QZXJzaXN0ZW50VHJhY2tJRCBmaXJzdEVuYWJsZWRBdWRpb1RyYWNr
SUQgPSBrQ01QZXJzaXN0ZW50VHJhY2tJRF9JbnZhbGlkOworICAgIE5TQXJyYXkqIHRyYWNrcyA9
IFttX2F2UGxheWVySXRlbSB0cmFja3NdOworICAgIGZvciAoQVZQbGF5ZXJJdGVtVHJhY2sqIHRy
YWNrIGluIHRyYWNrcykgeworICAgICAgICBpZiAoW3RyYWNrLmFzc2V0VHJhY2sgaGFzTWVkaWFD
aGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlXSAmJiB0cmFjay5lbmFi
bGVkKSB7CisgICAgICAgICAgICBmaXJzdEVuYWJsZWRBdWRpb1RyYWNrSUQgPSB0cmFjay5hc3Nl
dFRyYWNrLnRyYWNrSUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBbcGFyYW1ldGVycyBzZXRUcmFja0lEOmZpcnN0RW5hYmxlZEF1ZGlvVHJhY2tJRF07CisgICAg
CisgICAgW21fYXZBdWRpb01peCBzZXRJbnB1dFBhcmFtZXRlcnM6QFtwYXJhbWV0ZXJzLmdldCgp
XV07CisgICAgW21fYXZQbGF5ZXJJdGVtIHNldEF1ZGlvTWl4Om1fYXZBdWRpb01peC5nZXQoKV07
Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmluaXRDYWxsYmFjayhNVEF1
ZGlvUHJvY2Vzc2luZ1RhcFJlZiB0YXAsIHZvaWQqIGNsaWVudEluZm8sIHZvaWQqKiB0YXBTdG9y
YWdlT3V0KQoreworICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0YXRp
Y19jYXN0PEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKj4oY2xpZW50SW5mbyk7CisgICAgX3Ro
aXMtPm1fdGFwID0gdGFwOworICAgIF90aGlzLT5pbml0KGNsaWVudEluZm8sIHRhcFN0b3JhZ2VP
dXQpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5hbGl6ZUNhbGxi
YWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCkKK3sKKyAgICBBU1NFUlQodGFwKTsKKyAg
ICBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyogX3RoaXMgPSBzdGF0aWNfY2FzdDxBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQyo+KE1UQXVkaW9Qcm9jZXNzaW5nVGFwR2V0U3RvcmFnZSh0YXAp
KTsKKyAgICBfdGhpcy0+ZmluYWxpemUoKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQzo6cHJlcGFyZUNhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCwgQ01J
dGVtQ291bnQgbWF4RnJhbWVzLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKnBy
b2Nlc3NpbmdGb3JtYXQpCit7CisgICAgQVNTRVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakMqIF90aGlzID0gc3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akMqPihNVEF1ZGlvUHJvY2Vzc2luZ1RhcEdldFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPnBy
ZXBhcmUobWF4RnJhbWVzLCBwcm9jZXNzaW5nRm9ybWF0KTsKK30KKwordm9pZCBBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQzo6dW5wcmVwYXJlQ2FsbGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBS
ZWYgdGFwKQoreworICAgIEFTU0VSVCh0YXApOworICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDKiBfdGhpcyA9IHN0YXRpY19jYXN0PEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKj4oTVRB
dWRpb1Byb2Nlc3NpbmdUYXBHZXRTdG9yYWdlKHRhcCkpOworICAgIF90aGlzLT51bnByZXBhcmUo
KTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2Vzc0NhbGxiYWNr
KE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCwgQ01JdGVtQ291bnQgbnVtYmVyRnJhbWVzLCBN
VEF1ZGlvUHJvY2Vzc2luZ1RhcEZsYWdzIGZsYWdzLCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxp
c3RJbk91dCwgQ01JdGVtQ291bnQgKm51bWJlckZyYW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdU
YXBGbGFncyAqZmxhZ3NPdXQpCit7CisgICAgQVNTRVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakMqIF90aGlzID0gc3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFW
Rk9iakMqPihNVEF1ZGlvUHJvY2Vzc2luZ1RhcEdldFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMt
PnByb2Nlc3MobnVtYmVyRnJhbWVzLCBmbGFncywgYnVmZmVyTGlzdEluT3V0LCBudW1iZXJGcmFt
ZXNPdXQsIGZsYWdzT3V0KTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6
aW5pdCh2b2lkKiBjbGllbnRJbmZvLCB2b2lkKiogdGFwU3RvcmFnZU91dCkKK3sKKyAgICBBU1NF
UlQoY2xpZW50SW5mbyA9PSB0aGlzKTsKKyAgICAqdGFwU3RvcmFnZU91dCA9IHRoaXM7Cit9CisK
K3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmZpbmFsaXplKCkKK3sKK30KKworc3Rh
dGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGEs
IGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYikKK3sKKyAgICByZXR1cm4gYS5t
U2FtcGxlUmF0ZSA9PSBiLm1TYW1wbGVSYXRlCisgICAgICAgICYmIGEubUZvcm1hdElEID09IGIu
bUZvcm1hdElECisgICAgICAgICYmIGEubUZvcm1hdEZsYWdzID09IGIubUZvcm1hdEZsYWdzCisg
ICAgICAgICYmIGEubUJ5dGVzUGVyUGFja2V0ID09IGIubUJ5dGVzUGVyUGFja2V0CisgICAgICAg
ICYmIGEubUZyYW1lc1BlclBhY2tldCA9PSBiLm1GcmFtZXNQZXJQYWNrZXQKKyAgICAgICAgJiYg
YS5tQnl0ZXNQZXJGcmFtZSA9PSBiLm1CeXRlc1BlckZyYW1lCisgICAgICAgICYmIGEubUNoYW5u
ZWxzUGVyRnJhbWUgPT0gYi5tQ2hhbm5lbHNQZXJGcmFtZQorICAgICAgICAmJiBhLm1CaXRzUGVy
Q2hhbm5lbCA9PSBiLm1CaXRzUGVyQ2hhbm5lbDsKK30KKworc3RhdGljIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit2b2lk
IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcmVwYXJlKENNSXRlbUNvdW50IG1heEZyYW1l
cywgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uICpwcm9jZXNzaW5nRm9ybWF0KQor
eworICAgIEFTU0VSVChtYXhGcmFtZXMgPj0gMCk7CisKKyAgICBtX3RhcERlc2NyaXB0aW9uID0g
c3RkOjptYWtlX3VuaXF1ZTxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+KCpwcm9jZXNzaW5n
Rm9ybWF0KTsKKyAgICBpbnQgbnVtYmVyT2ZDaGFubmVscyA9IHByb2Nlc3NpbmdGb3JtYXQtPm1D
aGFubmVsc1BlckZyYW1lOworICAgIHNpemVfdCBieXRlc1BlckZyYW1lID0gcHJvY2Vzc2luZ0Zv
cm1hdC0+bUJ5dGVzUGVyRnJhbWU7CisgICAgZG91YmxlIHNhbXBsZVJhdGUgPSBwcm9jZXNzaW5n
Rm9ybWF0LT5tU2FtcGxlUmF0ZTsKKyAgICBBU1NFUlQoc2FtcGxlUmF0ZSA+PSAwKTsKKworICAg
IG1fb3V0cHV0RGVzY3JpcHRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbj4oKTsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tU2FtcGxlUmF0ZSA9IHNh
bXBsZVJhdGU7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUZvcm1hdElEID0ga0F1ZGlvRm9y
bWF0TGluZWFyUENNOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1Gb3JtYXRGbGFncyA9IGtB
dWRpb0Zvcm1hdEZsYWdzTmF0aXZlRmxvYXRQYWNrZWQ7CisgICAgbV9vdXRwdXREZXNjcmlwdGlv
bi0+bUJpdHNQZXJDaGFubmVsID0gOCAqIHNpemVvZihGbG9hdDMyKTsKKyAgICBtX291dHB1dERl
c2NyaXB0aW9uLT5tQ2hhbm5lbHNQZXJGcmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7CisgICAgbV9v
dXRwdXREZXNjcmlwdGlvbi0+bUZyYW1lc1BlclBhY2tldCA9IDE7CisgICAgbV9vdXRwdXREZXNj
cmlwdGlvbi0+bUJ5dGVzUGVyUGFja2V0ID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIG1fb3V0cHV0
RGVzY3JpcHRpb24tPm1CeXRlc1BlckZyYW1lID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIG1fb3V0
cHV0RGVzY3JpcHRpb24tPm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRl
cmxlYXZlZDsKKworICAgIGlmICgqbV90YXBEZXNjcmlwdGlvbiAhPSAqbV9vdXRwdXREZXNjcmlw
dGlvbikgeworICAgICAgICBBdWRpb0NvbnZlcnRlclJlZiBvdXRDb252ZXJ0ZXIgPSBudWxscHRy
OworICAgICAgICBBdWRpb0NvbnZlcnRlck5ldyhtX3RhcERlc2NyaXB0aW9uLmdldCgpLCBtX291
dHB1dERlc2NyaXB0aW9uLmdldCgpLCAmb3V0Q29udmVydGVyKTsKKyAgICAgICAgbV9jb252ZXJ0
ZXIgPSBvdXRDb252ZXJ0ZXI7CisgICAgfQorCisgICAgLy8gTWFrZSB0aGUgcmluZ2J1ZmZlciBs
YXJnZSBlbm91Z2ggdG8gc3RvcmUgYXQgbGVhc3QgdHdvIGNhbGxiYWNrcyB3b3J0aCBvZiBhdWRp
bywgb3IgMXMsIHdoaWNoZXZlciBpcyBsYXJnZXIuCisgICAgc2l6ZV90IGNhcGFjaXR5ID0gc3Rk
OjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigyICogbWF4RnJhbWVzKSwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihrUmluZ0J1ZmZlckR1cmF0aW9uICogc2FtcGxlUmF0ZSkpOworCisgICAgbV9yaW5nQnVm
ZmVyID0gQ0FSaW5nQnVmZmVyOjpjcmVhdGUoKTsKKyAgICBtX3JpbmdCdWZmZXItPmFsbG9jYXRl
KG51bWJlck9mQ2hhbm5lbHMsIGJ5dGVzUGVyRnJhbWUsIGNhcGFjaXR5KTsKKworICAgIC8vIEF1
ZGlvQnVmZmVyTGlzdCBpcyBhIHZhcmlhYmxlLWxlbmd0aCBzdHJ1Y3QsIHNvIGNyZWF0ZSBvbiB0
aGUgaGVhcCB3aXRoIGEgZ2VuZXJpYyBuZXcoKSBvcGVyYXRvcgorICAgIC8vIHdpdGggYSBjdXN0
b20gc2l6ZSwgYW5kIGluaXRpYWxpemUgdGhlIHN0cnVjdCBtYW51YWxseS4KKyAgICBzaXplX3Qg
YnVmZmVyTGlzdFNpemUgPSBzaXplb2YoQXVkaW9CdWZmZXJMaXN0KSArIChzaXplb2YoQXVkaW9C
dWZmZXIpICogc3RkOjptYXgoMSwgbnVtYmVyT2ZDaGFubmVscyAtIDEpKTsKKyAgICBtX2xpc3Qg
PSBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9CdWZmZXJMaXN0PigoQXVkaW9CdWZmZXJMaXN0KikgOjpv
cGVyYXRvciBuZXcgKGJ1ZmZlckxpc3RTaXplKSk7CisgICAgbWVtc2V0KG1fbGlzdC5nZXQoKSwg
MCwgYnVmZmVyTGlzdFNpemUpOworICAgIG1fbGlzdC0+bU51bWJlckJ1ZmZlcnMgPSBudW1iZXJP
ZkNoYW5uZWxzOworCisgICAgUmVmUHRyPEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDPiBzdHJv
bmdUaGlzID0gdGhpczsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtzdHJvbmdUaGlzLCBudW1iZXJP
ZkNoYW5uZWxzLCBzYW1wbGVSYXRlXSB7CisgICAgICAgIHN0cm9uZ1RoaXMtPm1fY2xpZW50LT5z
ZXRGb3JtYXQobnVtYmVyT2ZDaGFubmVscywgc2FtcGxlUmF0ZSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnVucHJlcGFyZSgpCit7CisgICAgbV90YXBE
ZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IG51bGxwdHI7
CisgICAgbV9yaW5nQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2xpc3QgPSBudWxscHRyOworfQor
Cit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzKENNSXRlbUNvdW50IG51
bWJlck9mRnJhbWVzLCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEZsYWdzIGZsYWdzLCBBdWRpb0J1ZmZl
ckxpc3QqIGJ1ZmZlckxpc3RJbk91dCwgQ01JdGVtQ291bnQqIG51bWJlckZyYW1lc091dCwgTVRB
dWRpb1Byb2Nlc3NpbmdUYXBGbGFncyogZmxhZ3NPdXQpCit7CisgICAgVU5VU0VEX1BBUkFNKGZs
YWdzKTsKKworICAgIENNSXRlbUNvdW50IGl0ZW1Db3VudCA9IDA7CisgICAgQ01UaW1lUmFuZ2Ug
cmFuZ2VPdXQ7CisgICAgT1NTdGF0dXMgc3RhdHVzID0gTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRT
b3VyY2VBdWRpbyhtX3RhcC5nZXQoKSwgbnVtYmVyT2ZGcmFtZXMsIGJ1ZmZlckxpc3RJbk91dCwg
ZmxhZ3NPdXQsICZyYW5nZU91dCwgJml0ZW1Db3VudCk7CisgICAgaWYgKHN0YXR1cyAhPSBub0Vy
ciB8fCAhaXRlbUNvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBNZWRpYVRpbWUgcmFuZ2VT
dGFydCA9IHRvTWVkaWFUaW1lKHJhbmdlT3V0LnN0YXJ0KTsKKyAgICBNZWRpYVRpbWUgcmFuZ2VE
dXJhdGlvbiA9IHRvTWVkaWFUaW1lKHJhbmdlT3V0LmR1cmF0aW9uKTsKKworICAgIGlmIChyYW5n
ZVN0YXJ0LmlzSW52YWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNZWRpYVRpbWUgY3Vy
cmVudFRpbWUgPSB0b01lZGlhVGltZShDTVRpbWViYXNlR2V0VGltZShbbV9hdlBsYXllckl0ZW0g
dGltZWJhc2VdKSk7CisgICAgaWYgKGN1cnJlbnRUaW1lLmlzSW52YWxpZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUaGUgYXVkaW8gdGFwIHdpbGwgZ2VuZXJhdGUgc2lsZW5jZSB3aGVu
IHRoZSBtZWRpYSBpcyBwYXVzZWQsIGFuZCB3aWxsIG5vdCBhZHZhbmNlIHRoZQorICAgIC8vIHRh
cCBjdXJyZW50VGltZS4KKyAgICBpZiAocmFuZ2VTdGFydCA9PSBtX3N0YXJ0VGltZUF0TGFzdFBy
b2Nlc3MgfHwgcmFuZ2VEdXJhdGlvbiA9PSBNZWRpYVRpbWU6Onplcm9UaW1lKCkpIHsKKyAgICAg
ICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
cGF1c2VkKSB7CisgICAgICAgIC8vIE9ubHkgY2hlY2sgdGhlIHdyaXRlLWFoZWFkIHRpbWUgd2hl
biBwbGF5YmFjayBiZWdpbnMuCisgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7CisgICAgICAgIE1l
ZGlhVGltZSBlYXJseUJ5ID0gcmFuZ2VTdGFydCAtIGN1cnJlbnRUaW1lOworICAgICAgICBtX3dy
aXRlQWhlYWRDb3VudCA9IG1fdGFwRGVzY3JpcHRpb24tPm1TYW1wbGVSYXRlICogZWFybHlCeS50
b0RvdWJsZSgpOworICAgIH0KKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdW5kZXJseWlu
ZyBtZWRpYSBoYXMgc2Vla2VkLCB3aGljaCB3b3VsZCByZXF1aXJlIHVzIHRvICJmbHVzaCIKKyAg
ICAvLyBvdXIgb3V0c3RhbmRpbmcgYnVmZmVycy4KKyAgICBpZiAocmFuZ2VTdGFydCAhPSBtX2Vu
ZFRpbWVBdExhc3RQcm9jZXNzKQorICAgICAgICBtX3JlYWRDb3VudCA9IG1fd3JpdGVDb3VudDsK
KworICAgIG1fc3RhcnRUaW1lQXRMYXN0UHJvY2VzcyA9IHJhbmdlU3RhcnQ7CisgICAgbV9lbmRU
aW1lQXRMYXN0UHJvY2VzcyA9IHJhbmdlU3RhcnQgKyByYW5nZUR1cmF0aW9uOworCisgICAgLy8g
U3RhcnRPZlN0cmVhbSBpbmRpY2F0ZXMgYSBkaXNjb250aW51aXR5LCBzdWNoIGFzIHdoZW4gYW4g
QVZQbGF5ZXJJdGVtIGlzIHJlLWFkZGVkCisgICAgLy8gdG8gYW4gQVZQbGF5ZXIsIHNvICJmbHVz
aCIgb3V0c3RhbmRpbmcgYnVmZmVycy4KKyAgICBpZiAoZmxhZ3NPdXQgJiYgKmZsYWdzT3V0ICYg
a01UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ19TdGFydE9mU3RyZWFtKQorICAgICAgICBtX3JlYWRD
b3VudCA9IG1fd3JpdGVDb3VudDsKKworICAgIG1fcmluZ0J1ZmZlci0+c3RvcmUoYnVmZmVyTGlz
dEluT3V0LCBpdGVtQ291bnQsIG1fd3JpdGVDb3VudCk7CisgICAgbV93cml0ZUNvdW50ICs9IGl0
ZW1Db3VudDsKKworICAgIC8vIE11dGUgdGhlIGRlZmF1bHQgYXVkaW8gcGxheWJhY2sgYnkgemVy
b2luZyB0aGUgdGFwLW93bmVkIGJ1ZmZlcnMuCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IGJ1ZmZlckxpc3RJbk91dC0+bU51bWJlckJ1ZmZlcnM7ICsraSkgeworICAgICAgICBBdWRpb0J1
ZmZlciYgYnVmZmVyID0gYnVmZmVyTGlzdEluT3V0LT5tQnVmZmVyc1tpXTsKKyAgICAgICAgbWVt
c2V0KGJ1ZmZlci5tRGF0YSwgMCwgYnVmZmVyLm1EYXRhQnl0ZVNpemUpOworICAgIH0KKyAgICAq
bnVtYmVyRnJhbWVzT3V0ID0gMDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJ
TykgJiYgVVNFKE1FRElBVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAppbmRleCBmZjVmZTAx
YmE0Yzc4NGE1NWUyNGNiMmQ3NjNhZGZkNjhmOWEzNmRjLi5mYzBhZDA0MWM1YjdkNmNhYzAwNDcy
MTQwNWZmOGM1YmQ1ZjE5YTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCkBAIC02Miw2ICs2Miw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlcjsK
IGNsYXNzIEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRjsKIGNsYXNzIEluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkZPYmpDOworY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM7
CiBjbGFzcyBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakM7CiBjbGFzcyBWaWRlb1RyYWNrUHJpdmF0
ZUFWRk9iakM7CiAKQEAgLTIwOSw2ICsyMTAsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0
QVZQbGF5ZXJJdGVtKEFWUGxheWVySXRlbSAqKTsKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pCisg
ICAgdmlydHVhbCBBdWRpb1NvdXJjZVByb3ZpZGVyKiBhdWRpb1NvdXJjZVByb3ZpZGVyKCk7Cisj
ZW5kaWYKKwogICAgIHZvaWQgY3JlYXRlSW1hZ2VHZW5lcmF0b3IoKTsKICAgICB2b2lkIGRlc3Ry
b3lJbWFnZUdlbmVyYXRvcigpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVJbWFn
ZUZvclRpbWVJblJlY3QoZmxvYXQsIGNvbnN0IEludFJlY3QmKTsKQEAgLTI4OSw2ICsyOTQsMTAg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwogICAgIGJvb2wgbV9o
YXZlQ2hlY2tlZFBsYXlhYmlsaXR5OwogCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1F
RElBVE9PTEJPWCkKKyAgICBSZWZQdHI8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM+IG1fcHJv
dmlkZXI7CisjZW5kaWYKKwogICAgIFJldGFpblB0cjxBVkFzc2V0SW1hZ2VHZW5lcmF0b3I+IG1f
aW1hZ2VHZW5lcmF0b3I7CiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVklERU9fT1VUUFVUKQogICAg
IFJldGFpblB0cjxBVlBsYXllckl0ZW1WaWRlb091dHB1dD4gbV92aWRlb091dHB1dDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLm1tCmluZGV4IDhmMDgyMTEzZDViYzA0MDY2OGMxOTQ4NDg3YzU1ZTk3MDAw
NzY0NjMuLjgyM2ZjMzdlYzEwODhhNDM3MzNkZjE0NDZjZDQ4MTI1MGJmOWY1MDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIgogCiAjaW1wb3J0ICJBVlRyYWNrUHJpdmF0ZUFWRk9i
akNJbXBsLmgiCisjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIgogI2ltcG9y
dCAiQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLmgiCiAjaW1wb3J0ICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oIgogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCkBAIC01MDAsNiArNTAxLDEx
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2FuY2VsTG9hZCgp
CiAgICAgICAgIFt0cmFjayByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JL
ZXlQYXRoOkAiZW5hYmxlZCJdOwogICAgIG1fY2FjaGVkVHJhY2tzID0gbnVsbHB0cjsKIAorI2lm
IEVOQUJMRShXRUJfQVVESU8pCisgICAgaWYgKG1fcHJvdmlkZXIpCisgICAgICAgIG1fcHJvdmlk
ZXItPnNldFBsYXllckl0ZW0obnVsbHB0cik7CisjZW5kaWYKKwogICAgIHNldElnbm9yZUxvYWRT
dGF0ZUNoYW5nZXMoZmFsc2UpOwogfQogCkBAIC05MTAsNiArOTE2LDExIEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKCkKICAgICBb
bV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT3V0cHV0Om1fbGVnaWJsZU91dHB1dC5nZXQoKV07CiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgaWYgKG1fcHJvdmlkZXIpCisgICAg
ICAgIG1fcHJvdmlkZXItPnNldFBsYXllckl0ZW0obV9hdlBsYXllckl0ZW0uZ2V0KCkpOworI2Vu
ZGlmCisKICAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7CiB9CiAKQEAgLTE4MzksNiArMTg1
MCwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFRleHRU
cmFja1JlcHJlc2VudGF0aW9uKFRleHRUcmFja1JlcAogfQogI2VuZGlmIC8vIEVOQUJMRShWSURF
T19UUkFDSykKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShNRURJQVRPT0xCT1gpCitB
dWRpb1NvdXJjZVByb3ZpZGVyKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjph
dWRpb1NvdXJjZVByb3ZpZGVyKCkKK3sKKyAgICBpZiAoIW1fcHJvdmlkZXIpCisgICAgICAgIG1f
cHJvdmlkZXIgPSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6Y3JlYXRlKG1fYXZQbGF5ZXJJ
dGVtLmdldCgpKTsKKyAgICByZXR1cm4gbV9wcm92aWRlci5nZXQoKTsKK30KKyNlbmRpZgorCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNpemVDaGFuZ2VkKCkKIHsK
ICAgICBpZiAoIW1fYXZBc3NldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9Tb2Z0TGlua2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5r
aW5nLmgKaW5kZXggZDkxYzE5NGViZWJhNDE3NjZmMWVlYmU0NmMxNjNjOWQ1ZDA2MmFiNC4uZGJl
NThiNmZjMjgzMGE5MmEzMGNlZDk1YmM2N2EzOWY1YTYwODA1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKQEAgLTExMCw3ICsxMTAsNiBAQAogICAgICAgICBy
ZXR1cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgXAogICAgIH0KIAot
I2lmIFBMQVRGT1JNKElPUykKICNkZWZpbmUgU09GVF9MSU5LX01BWV9GQUlMKGZyYW1ld29yaywg
ZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMsIHBhcmFtZXRl
ck5hbWVzKSBcCiAgICAgc3RhdGljIHJlc3VsdFR5cGUgKCpzb2Z0TGluayMjZnVuY3Rpb25OYW1l
KSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgPSAwOyBcCiAgICAgXApAQCAtMTMyLDcgKzEzMSw2IEBA
CiAgICAgICAgIEFTU0VSVChzb2Z0TGluayMjZnVuY3Rpb25OYW1lKTsgXAogICAgICAgICByZXR1
cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgXAogICAgIH0KLSNlbmRp
ZgogCiAvKiBjYWxsaW5nQ29udmVudGlvbiBpcyB1bnVzZWQgb24gTWFjIGJ1dCBpcyBoZXJlIHRv
IGtlZXAgdGhlIG1hY3JvIHByb3RvdHlwZSB0aGUgc2FtZSBiZXR3ZWVuIE1hYyBhbmQgV2luZG93
cy4gKi8KICNkZWZpbmUgU09GVF9MSU5LX09QVElPTkFMKGZyYW1ld29yaywgZnVuY3Rpb25OYW1l
LCByZXN1bHRUeXBlLCBjYWxsaW5nQ29udmVudGlvbiwgcGFyYW1ldGVyRGVjbGFyYXRpb25zKSBc
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237707</attachid>
            <date>2014-09-05 12:55:05 -0700</date>
            <delta_ts>2014-09-12 14:17:19 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-135042-20140905125459.patch</filename>
            <type>text/plain</type>
            <size>56872</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY1YTNlZTE0YjQxZGI5NDI4NWY5N2Y1
MGNlMmMwNzVhZTVlMjQyZGMuLjA5Yzg2NzEyMTBiNjFmZjcyMzRlNjJjMWUyMDQ1MDM3YzcxMjkz
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDktMDQgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10gU3VwcG9ydCBhdWRpb1NvdXJjZVByb3ZpZGVy
KCkgaW4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDQyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBXVEZf
VVNFX01FRElBVE9PTEJPWC4KKwogMjAxNC0wOC0yOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIEphdmFTY3JpcHRDb3JlOiBVc2UgQVNDSUlMaXRlcmFs
IHdoZXJlIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDMxYWFjODcxOGQ5ZjJhMGM2MDMyNzJmMTE5
MWQ3NjgyM2IyYjg2Ny4uZmI4YjM4ZTRiYWZhMzQxYjM5MTk4YTZlYjhmYmI2NTNlZDY5MzY5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDk0IEBACiAyMDE0LTA4LTI5ICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtNYWNdIFN1cHBvcnQgYXVkaW9Tb3VyY2VQcm92
aWRlcigpIGluIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTA0MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgQXVkaW9T
b3VyY2VQcm92aWRlciBpbiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLCB0aGVy
ZWJ5CisgICAgICAgIHN1cHBvcnRpbmcgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLgorCisg
ICAgICAgIEltcG9ydCB0aGUgQ0FSaW5nQnVmZmVyIGZyb20gQ29yZUF1ZGlvIHNhbXBsZSBjb2Rl
LCBtYWtpbmcgdGhlIG5lY2Vzc2FyeSBtb2RpZmljYXRpb25zCisgICAgICAgIGZvciBXZWJLaXQg
c3R5bGUgYW5kIGNvZGluZyBjb252ZW50aW9ucy4gVGhlIHRocmVhZGluZyBhc3N1bXB0aW9ucyBm
b3IgdGhpcyBjbGFzcyBhcmUKKyAgICAgICAgdGhhdCB0aGVyZSB3aWxsIGJlIGEgc2luZ2xlIHdy
aXRlciB0aHJlYWQgYW5kIGEgc2luZ2xlIHJlYWRlciB0aHJlYWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQVJpbmdCdWZmZXI6OmNyZWF0ZSk6IENyZWF0ZSBhIHVuaXF1ZV9wdHIuCisgICAgICAgIChX
ZWJDb3JlOjpDQVJpbmdCdWZmZXI6OkNBUmluZ0J1ZmZlcik6IFNpbXBsZSBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6fkNBUmluZ0J1ZmZlcik6IFNpbXBsZSBk
ZXN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjphbGxvY2F0ZSk6IElu
aXRpYWxpemUgdGhlIGJ1ZmZlcnMgYW5kIHRpbWUgYm91bmRzIHN0cnVjdHVyZXMuCisgICAgICAg
IChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmRlYWxsb2NhdGUpOiBEZXN0cm95IHNhbWUuCisgICAg
ICAgIChXZWJDb3JlOjpaZXJvUmFuZ2UpOiBTdGF0aWMgdXRpbGl0eSBtZXRob2QuCisgICAgICAg
IChXZWJDb3JlOjpTdG9yZUFCTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hBQkwp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Olplcm9BQkwpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNBUmluZ0J1ZmZlcjo6c3RvcmUpOiBTdG9yZSB0aGUgcGFzc2VkIGluIGJ1ZmZlciBp
biB0aGUgcmluZyBidWZmZXIsIHdyYXBwaW5nCisgICAgICAgICAgICBpZiBuZWNlc3NhcnkuCisg
ICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OnNldFRpbWVCb3VuZHMpOiBTZXQgdGhlIG5l
dyB0aW1lIGJvdW5kcyBieSBpbmNyZW1lbnRpbmcgdGhlCisgICAgICAgICAgICBib3VuZHMgaW5k
ZXggbG9jYWxseSwgZmlsbGluZyBpbiB0aGUgbmV3IHZhbHVlcywgdGhlbiBhdG9taWNhbGx5IGlu
Y3JlbWVudGluZyB0aGUKKyAgICAgICAgICAgIHJlYWRlci12aXNpYmxlIGluZGV4LgorICAgICAg
ICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpnZXRUaW1lQm91bmRzKTogR2V0IHRoZSBuZXcgdGlt
ZSBib3VuZHMgYnkgbWFza2luZyB0aGUgdGltZQorICAgICAgICAgICAgYm91bmRzIGluZGV4LCBh
bmQgdXNpbmcgaXQgYXMgYW4gb2Zmc2V0IHRvIHRoZSB0aW1lIGJvdW5kcyBhcnJheS4gUHJvdGVj
dCBhZ2FpbnN0CisgICAgICAgICAgICBDUFUgc3RhcnZhdGlvbiBvbiB0aGUgcmVhZGluZyB0aHJl
YWQgYnkgY2hlY2tpbmcgdGhlIGluZGV4IGFnYWluc3QgdGhlIHN0b3JlZAorICAgICAgICAgICAg
aW5kZXggaW4gdGhlIGFycmF5IGVudHJ5LiBUaGlzIGNoZWNrIHdpbGwgZmFpbCBpZiB0aGUgd3Jp
dGluZyB0aHJlYWQgaGFzIHdyYXBwZWQKKyAgICAgICAgICAgIG1vcmUgdGhhbiB0aGUgc2l6ZSBv
ZiB0aGUgYXJyYXkuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmNsaXBUaW1lQm91
bmRzKTogQ2xhbXAgdGhlIHBhc3NlZCB2YWx1ZXMgdG8gdGhlIGF2YWlsYWJsZSBib3VuZHMuCisg
ICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OnN0YXJ0RnJhbWUpOiBTaW1wbGUgYWNjZXNz
b3IuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmVuZEZyYW1lKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmZldGNoKTogUmVhZCBhbiBhdWRpbyBidWZm
ZXIgbGlzdCBmcm9tIHRoZSByaW5nIGJ1ZmZlciwgcG9zc2JpbHkKKyAgICAgICAgICAgIHdyYXBw
aW5nIGFyb3VuZCB0byB0aGUgc3RhcnQgb2YgdGhlIHJpbmcgYnVmZmVyLgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQVJpbmdCdWZmZXI6Om51bWJlck9mQ2hhbm5lbHMpOiBTaW1wbGUgYWNjZXNzb3IuCisgICAg
ICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmZyYW1lT2Zmc2V0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OlRpbWVCb3VuZHM6OlRpbWVCb3VuZHMpOiBTdHJ1Y3Qg
aG9sZGluZyB0aGUgc3RhcnQgYW5kIGVuZCBmcmFtZSB2YWx1ZXMuCisKKyAgICAgICAgQWRkIGFu
IGltcGxlbWVudGF0aW9uIG9mIEF1ZGlvU291cmNlUHJvdmlkZXIsIHVzaW5nIEFWQXVkaW9NaXgg
YW5kIE1UQXVkaW9Qcm9jZXNzaW5nVGFwCisgICAgICAgIHRvIHRhcCBhbiBBVlBsYXllckl0ZW0n
cyBhdWRpbyBvdXRwdXQgYW5kIGZlZWQgaXQgdG8gYSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGUpOiBTaW1wbGUg
ZmFjdG9yeS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyk6IFNpbXBsZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp+QXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakMpOiBTaW1wbGUgZGVzdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm92aWRlSW5wdXQpOiBQdXNoIGF1ZGlvIGludG8gdGhlIHJp
bmcgYnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6
OnNldENsaWVudCk6IENhbGwgZGVzdHJveU1peCgpL2NyZWF0ZU1peCgpIGFzIGFwcHJvcHJpYXRl
LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnNldFBsYXll
ckl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDOjpkZXN0cm95TWl4KTogRGV0YWNoIGFuZCBkZXN0cm95IHRoZSBBVkF1ZGlvTWl4IGFuZCB0
YXAuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6Y3JlYXRl
TWl4KTogU2V0IHVwIHRoZSBBVkF1ZGlvTWl4IGFuZCB0YXAgYW5kIGF0dGFjaCB0bworICAgICAg
ICAgICAgdGhlIEFWUGxheWVySXRlbS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOjppbml0Q2FsbGJhY2spOiBQYXNzIHRvIGNsYXNzIG1ldGhvZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5hbGl6ZUNhbGxiYWNr
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6
cHJlcGFyZUNhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQzo6dW5wcmVwYXJlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjppbml0KTogU2V0
IHVwIHRoZSBzdG9yYWdlIHBvaW50ZXIgZm9yIHRoZSB0YXAuCisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6ZmluYWxpemUpOiBOby1vcC4KKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOiBDb21wYXJlIHR3byBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24gb2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcmVwYXJlKTogQ3JlYXRl
IGFuIEF1ZGlvQ292ZXJ0ZXIgb2JqZWN0IGlmIG5lY2Vzc2FyeSwKKyAgICAgICAgICAgIGNyZWF0
ZSB0aGUgcmluZyBidWZmZXIsIGFuZCBub3RpZnkgdGhlIGNsaWVudCBvZiBmb3JtYXQgY2hhbmdl
cy4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp1bnByZXBh
cmUpOiBEZXN0cm95IHNhbWUuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQzo6cHJvY2Vzcyk6IENvcHkgc2FtcGxlcyBvdXQgb2YgdGhlIHJpbmcgYnVmZmVyLAor
ICAgICAgICAgICAgZm9ybWF0IGNvbnZlcnRpbmcgdGhlbSBpZiBuZWNlc3NhcnkuIE11dGUgb3Jp
Z2luYWwgYXVkaW8uCisKKyAgICAgICAgQ3JlYXRlIHRoZSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQyBvYmplY3QgYW5kIG5vdGlmeSBpdCB3aGVuIHRoZSBjdXJyZW50IEFWUGxheWVySXRlbSBj
aGFuZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVySXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjphdWRpb1NvdXJjZVByb3ZpZGVy
KToKKworICAgICAgICBFbmFibGUgU09GVF9MSU5LX01BWV9GQUlMIG9uIHRoZSBNYWMgcGxhdGZv
cm0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaDoKKworICAgICAgICBB
ZGQgbmV3IGZpbGVzIHRvIHRoZSBwcm9qZWN0LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCisyMDE0LTA4LTI5ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVA
YXBwbGUuY29tPgorCiAgICAgICAgIFtNU0VdIEFkZCBzZXR0aW5nIGZvciByZWxlYXNlLWJ1aWxk
IGxvZ2dpbmcgb2YgVmlkZW9QbGF5YmFja1F1YWxpdHkKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjM5OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCAzNTM5OTgy
ZTc2NDA1Y2FhZmU4ZGU0MDU5OWQxNjI3YTAzYTAwOGFjLi4xNDhmMDZjNmEzNzBlNzdjOWJmOGQy
YzY2NzBmYzI5ODAwMWUxYmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTEwNzEsNCArMTA3MSw4IEBACiAj
ZGVmaW5lIFRBUkdFVF9PU19JUEhPTkUgMAogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShDT0NPQSkgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDkwKQorI2RlZmluZSBXVEZfVVNFX01FRElBVE9PTEJPWCAxCisjZW5kaWYKKwogI2VuZGlmIC8q
IFdURl9QbGF0Zm9ybV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWJmNWE0OTg4OTM1ZTczNzQ5Njk2MWFhZTE3Njg0YjRj
OGQxMmUxNi4uY2U0YWE3NzU0M2QyOTZkODYxYWU5NWEzODljY2VhNWUyZGVjMWNjNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NTYzNiw2ICs1NjM2LDggQEAKIAkJQ0Q4MjAzMEQxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgyMDMwOTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLzsgfTsKIAkJQ0Q4MjAzMTAxMzk1
QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8qIFdl
YldpbmRvd0FuaW1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUNEODIwMzExMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRp
b24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgy
MDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovOyB9OworCQlD
RDhBN0JCQjE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhBN0JCOTE5
NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gKi87IH07CisJ
CUNEOEE3QkJDMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QTdCQkEx
OTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggKi87IH07CiAJ
CUNEOEI1QTQyMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEOEI1QTQwMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0Q4QjVBNDMxODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJh
Y2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCNUE0MTE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFj
a1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0Q4QjVBNDYxODBERkY0RTAw
OEI4RTY1IC8qIFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QjVBNDUxODBERkY0RTAwOEI4RTY1IC8qIFZpZGVv
VHJhY2tNZWRpYVNvdXJjZS5oICovOyB9OwpAQCAtNTY4MSw2ICs1NjgzLDggQEAKIAkJQ0RDNjlE
RDcxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OURENTE2MzIw
MjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSAqLzsgfTsKIAkJ
Q0RDNjlEREExNjM3MUZENDAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJW
aWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2
OUREODE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREM2
OUREQjE2MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OURE
OTE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0g
Ki87IH07CisJCUNEQzczNDE0MTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNzM0MTIxOTc3
ODk2QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5jcHAgKi87IH07CisJCUNEQzczNDE1MTk3Nzg5
NkQwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZm
ZXIuaCAqLzsgfTsKIAkJQ0RDOEI1QTIxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi87IH07CiAJCUNEQzhCNUEzMTgwNDYzNDcwMDE2
RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUExMTgwNDYzNDcwMDE2
RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJ
Q0RDOEI1QTYxODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBNDE4
MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAqLzsgfTsKQEAg
LTEzMDU4LDYgKzEzMDYyLDggQEAKIAkJQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2
QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDhBN0JCOTE5NzczNUZFMDBDQkQ2NDMgLyog
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q4QTdCQkExOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNE
OEI1QTQwMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFZpZGVvVHJh
Y2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOyBwYXRoID0gb2JqYy9WaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0Q4QjVBNDExODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFZpZGVvVHJhY2tQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHBhdGggPSBvYmpjL1ZpZGVvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOEI1QTQ0
MTgwREQ4RDYwMDhCOEU2NSAvKiBWaWRlb1RyYWNrTWVkaWFTb3VyY2UuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVv
VHJhY2tNZWRpYVNvdXJjZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzEz
Myw2ICsxMzEzOSw4IEBACiAJCUNEQzY5REQ1MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVs
bFNjcmVlbldhcm5pbmdWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0RDNjlERDgxNjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVu
UGxhY2Vob2xkZXJWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNv
cmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQzY5REQ5MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9s
ZGVyVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
cmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDREM3MzQxMjE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENBUmluZ0J1ZmZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdC
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0FSaW5nQnVmZmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAv
KiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMubW07IHBhdGggPSBvYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDOEI1QTExODA0NjM0NzAwMTZF
Njg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMuaDsgcGF0aCA9IG9iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzhCNUE0MTgwNDc0RjcwMDE2RTY4NSAv
KiBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbTsgcGF0aCA9IG9iamMv
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxNjIyLDYgKzIxNjMwLDggQEAKIAkJCQlDRDhCNUE0MDE4MEQxNDlBMDA4QjhFNjUgLyog
VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi8sCiAJCQkJQ0Q3RTA1MjAx
NjUxQTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCUNE
N0UwNTIxMTY1MUE4NDEwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0gKi8s
CisJCQkJQ0Q4QTdCQjkxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDLm1tICovLAorCQkJCUNEOEE3QkJBMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQy5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBvYmpjOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTIzMTM0LDYgKzIzMTQ0LDggQEAKIAkJCQlDRDU0REU0NTE3NDY4
QjZGMDA1RTVCMzYgLyogTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgKi8sCiAJCQkJQ0QyRjRB
MjUxOEQ4QTM0OTAwNjM3NDZEIC8qIEF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hYy5jcHAgKi8sCiAJ
CQkJQ0QyRjRBMjYxOEQ4QTM0OTAwNjM3NDZEIC8qIEF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hYy5o
ICovLAorCQkJCUNEQzczNDEyMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3BwICov
LAorCQkJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0MzU5
LDYgKzI0MzcxLDcgQEAKIAkJCQlBOEVBNzlGQTBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVj
dG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1
RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTc5RjcwQTE5MTZE
RjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQzcz
NDE1MTk3Nzg5NkQwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRjE5OEU1MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3N0IzODY3MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MRG9jdW1lbnRQYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzMzA5REU4MDk5RTY0OTIwMDU2RTU4MSAvKiBodG1sZWRpdGlu
Zy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTA0NCw2ICsyNTA1Nyw3IEBACiAJCQkJQjJGQTNEQTMw
QUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGVuZ3RoTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJGQTNEQTUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RBNzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdMaW5l
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q4QTdCQkMxOTc3MzVGRTAwQ0JENjQzIC8q
IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RB
OTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdNYXJrZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMkZBM0RBQjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdNYXNrRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjJGQTNEQUQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTWF0cml4Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTI5MzEwLDYgKzI5MzI0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVE
Q0ZGMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1
MzkwNDYwRUFGRDYzNzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJQ0Q4QTdCQkIxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUIxRDMwRkY1OTg2OTAwNTc2
QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUQxNjhFNzEwMjI2
RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTFCNzg0MjAxNjM5Q0JCRTAwMDdCNjkyIC8qIFNoYXJlZFdvcmtlclJlcG9zaXRvcnku
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTQ3NSw2ICsyOTQ5MCw3IEBACiAJCQkJQjIyMjc5QTQw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QjA1MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdCMDYw
RDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlD
REM3MzQxNDE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyMjI3QjA4MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NTdHlsZVNlbGVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUE3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDdXJz
b3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUFEMEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdEZWZzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJk
ODNhYjc4ZWNhOWQ2ZGZkOTFmODBiNWMxZThjNzU3ZGU4OTg4OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwCkBAIC0w
LDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNBUmluZ0J1ZmZlci5oIgorCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+
CisjaW5jbHVkZSA8bGlia2Vybi9PU0F0b21pYy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisKK2NvbnN0IHVpbnQzMl90IGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZVNpemUgPSAz
MjsKK2NvbnN0IHVpbnQzMl90IGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2sgPSBrR2Vu
ZXJhbFJpbmdUaW1lQm91bmRzUXVldWVTaXplIC0gMTsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGQ6OnVuaXF1ZV9wdHI8Q0FSaW5nQnVmZmVyPiBDQVJpbmdCdWZmZXI6OmNyZWF0ZSgpCit7
CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDQVJpbmdCdWZmZXI+KG5ldyBDQVJpbmdCdWZm
ZXIoKSk7Cit9CisKK0NBUmluZ0J1ZmZlcjo6Q0FSaW5nQnVmZmVyKCkKKyAgICA6IG1fY2hhbm5l
bENvdW50KDApCisgICAgLCBtX2ZyYW1lQ291bnQoMCkKKyAgICAsIG1fY2FwYWNpdHlCeXRlcygw
KQorICAgICwgbV90aW1lQm91bmRzUXVldWUoa0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlU2l6
ZSkKKyAgICAsIG1fdGltZUJvdW5kc1F1ZXVlUHRyKDApCit7Cit9CisKK0NBUmluZ0J1ZmZlcjo6
fkNBUmluZ0J1ZmZlcigpCit7CisgICAgZGVhbGxvY2F0ZSgpOworfQorCit2b2lkIENBUmluZ0J1
ZmZlcjo6YWxsb2NhdGUodWludDMyX3QgY2hhbm5lbENvdW50LCBzaXplX3QgYnl0ZXNQZXJGcmFt
ZSwgc2l6ZV90IGZyYW1lQ291bnQpCit7CisgICAgZGVhbGxvY2F0ZSgpOworCisgICAgZnJhbWVD
b3VudCA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhmcmFtZUNvdW50KTsKKworICAgIG1fY2hh
bm5lbENvdW50ID0gY2hhbm5lbENvdW50OworICAgIG1fYnl0ZXNQZXJGcmFtZSA9IGJ5dGVzUGVy
RnJhbWU7CisgICAgbV9mcmFtZUNvdW50ID0gZnJhbWVDb3VudDsKKyAgICBtX2ZyYW1lQ291bnRN
YXNrID0gZnJhbWVDb3VudCAtIDE7CisgICAgbV9jYXBhY2l0eUJ5dGVzID0gYnl0ZXNQZXJGcmFt
ZSAqIGZyYW1lQ291bnQ7CisKKyAgICBzaXplX3QgcG9pbnRlcnNTaXplID0gY2hhbm5lbENvdW50
ICogc2l6ZW9mKEJ5dGUqKTsKKyAgICBzaXplX3QgYWxsb2NTaXplID0gcG9pbnRlcnNTaXplICsg
KG1fY2FwYWNpdHlCeXRlcyAqIGNoYW5uZWxDb3VudCk7CisgICAgbV9idWZmZXJzID0gQXJyYXlC
dWZmZXI6OmNyZWF0ZShhbGxvY1NpemUsIDEpOworCisgICAgQnl0ZSoqIHBvaW50ZXJzID0gc3Rh
dGljX2Nhc3Q8Qnl0ZSoqPihtX2J1ZmZlcnMtPmRhdGEoKSk7CisgICAgQnl0ZSogY2hhbm5lbERh
dGEgPSBzdGF0aWNfY2FzdDxCeXRlKj4obV9idWZmZXJzLT5kYXRhKCkpICsgcG9pbnRlcnNTaXpl
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYW5uZWxDb3VudDsgKytpKSB7Cisg
ICAgICAgIHBvaW50ZXJzW2ldID0gY2hhbm5lbERhdGE7CisgICAgICAgIGNoYW5uZWxEYXRhICs9
IG1fY2FwYWNpdHlCeXRlczsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gdGltZUJvdW5kcyA6IG1f
dGltZUJvdW5kc1F1ZXVlKSB7CisgICAgICAgIHRpbWVCb3VuZHMubV9zdGFydEZyYW1lID0gMDsK
KyAgICAgICAgdGltZUJvdW5kcy5tX2VuZEZyYW1lID0gMDsKKyAgICAgICAgdGltZUJvdW5kcy5t
X3VwZGF0ZUNvdW50ZXIgPSAwOworICAgIH0KKyAgICBtX3RpbWVCb3VuZHNRdWV1ZVB0ciA9IDA7
Cit9CisKK3ZvaWQgQ0FSaW5nQnVmZmVyOjpkZWFsbG9jYXRlKCkKK3sKKyAgICBpZiAobV9idWZm
ZXJzKQorICAgICAgICBtX2J1ZmZlcnMuY2xlYXIoKTsKKworICAgIG1fY2hhbm5lbENvdW50ID0g
MDsKKyAgICBtX2NhcGFjaXR5Qnl0ZXMgPSAwOworICAgIG1fZnJhbWVDb3VudCA9IDA7Cit9CisK
K3N0YXRpYyB2b2lkIFplcm9SYW5nZShCeXRlKiogYnVmZmVycywgaW50IGNoYW5uZWxDb3VudCwg
c2l6ZV90IG9mZnNldCwgc2l6ZV90IG5ieXRlcykKK3sKKyAgICB3aGlsZSAoLS1jaGFubmVsQ291
bnQgPj0gMCkgeworICAgICAgICBtZW1zZXQoKmJ1ZmZlcnMgKyBvZmZzZXQsIDAsIG5ieXRlcyk7
CisgICAgICAgICsrYnVmZmVyczsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIFN0b3JlQUJMKEJ5
dGUqKiBidWZmZXJzLCBzaXplX3QgZGVzdE9mZnNldCwgY29uc3QgQXVkaW9CdWZmZXJMaXN0KiBs
aXN0LCBzaXplX3Qgc3JjT2Zmc2V0LCBzaXplX3QgbmJ5dGVzKQoreworICAgIGludCBjaGFubmVs
Q291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKKyAgICBjb25zdCBBdWRpb0J1ZmZlciogc3Jj
ID0gbGlzdC0+bUJ1ZmZlcnM7CisgICAgd2hpbGUgKC0tY2hhbm5lbENvdW50ID49IDApIHsKKyAg
ICAgICAgaWYgKHNyY09mZnNldCA+IHNyYy0+bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBtZW1jcHkoKmJ1ZmZlcnMgKyBkZXN0T2Zmc2V0LCBzdGF0aWNfY2Fz
dDxCeXRlKj4oc3JjLT5tRGF0YSkgKyBzcmNPZmZzZXQsIHN0ZDo6bWluPHNpemVfdD4obmJ5dGVz
LCBzcmMtPm1EYXRhQnl0ZVNpemUgLSBzcmNPZmZzZXQpKTsKKyAgICAgICAgKytidWZmZXJzOwor
ICAgICAgICArK3NyYzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZldGNoQUJMKEF1ZGlvQnVm
ZmVyTGlzdCogbGlzdCwgc2l6ZV90IGRlc3RPZmZzZXQsIEJ5dGUqKiBidWZmZXJzLCBzaXplX3Qg
c3JjT2Zmc2V0LCBzaXplX3QgbmJ5dGVzKQoreworICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0
LT5tTnVtYmVyQnVmZmVyczsKKyAgICBBdWRpb0J1ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJz
OworICAgIHdoaWxlICgtLWNoYW5uZWxDb3VudCA+PSAwKSB7CisgICAgICAgIGlmIChkZXN0T2Zm
c2V0ID4gZGVzdC0+bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBtZW1jcHkoc3RhdGljX2Nhc3Q8Qnl0ZSo+KGRlc3QtPm1EYXRhKSArIGRlc3RPZmZzZXQsICpi
dWZmZXJzICsgc3JjT2Zmc2V0LCBzdGQ6Om1pbjxzaXplX3Q+KG5ieXRlcywgZGVzdC0+bURhdGFC
eXRlU2l6ZSAtIGRlc3RPZmZzZXQpKTsKKyAgICAgICAgKytidWZmZXJzOworICAgICAgICArK2Rl
c3Q7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBaZXJvQUJMKEF1ZGlvQnVmZmVyTGlzdCogbGlz
dCwgc2l6ZV90IGRlc3RPZmZzZXQsIHNpemVfdCBuYnl0ZXMpCit7CisgICAgaW50IG5CdWZmZXJz
ID0gbGlzdC0+bU51bWJlckJ1ZmZlcnM7CisgICAgQXVkaW9CdWZmZXIqIGRlc3QgPSBsaXN0LT5t
QnVmZmVyczsKKyAgICB3aGlsZSAoLS1uQnVmZmVycyA+PSAwKSB7CisgICAgICAgIGlmIChkZXN0
T2Zmc2V0ID4gZGVzdC0+bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8Qnl0ZSo+KGRlc3QtPm1EYXRhKSArIGRlc3RPZmZzZXQs
IDAsIHN0ZDo6bWluPHNpemVfdD4obmJ5dGVzLCBkZXN0LT5tRGF0YUJ5dGVTaXplIC0gZGVzdE9m
ZnNldCkpOworICAgICAgICArK2Rlc3Q7CisgICAgfQorfQorCitDQVJpbmdCdWZmZXI6OkVycm9y
IENBUmluZ0J1ZmZlcjo6c3RvcmUoY29uc3QgQXVkaW9CdWZmZXJMaXN0KiBsaXN0LCBzaXplX3Qg
ZnJhbWVzVG9Xcml0ZSwgdWludDY0X3Qgc3RhcnRGcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lc1Rv
V3JpdGUpCisgICAgICAgIHJldHVybiBPazsKKworICAgIGlmIChmcmFtZXNUb1dyaXRlID4gbV9m
cmFtZUNvdW50KQorICAgICAgICByZXR1cm4gVG9vTXVjaDsKKworICAgIHVpbnQ2NF90IGVuZEZy
YW1lID0gc3RhcnRGcmFtZSArIGZyYW1lc1RvV3JpdGU7CisKKyAgICBpZiAoc3RhcnRGcmFtZSA8
IGN1cnJlbnRFbmRGcmFtZSgpKSB7CisgICAgICAgIC8vIFRocm93IGV2ZXJ5dGhpbmcgb3V0IHdo
ZW4gZ29pbmcgYmFja3dhcmRzLgorICAgICAgICBzZXRDdXJyZW50RnJhbWVCb3VuZHMoc3RhcnRG
cmFtZSwgc3RhcnRGcmFtZSk7CisgICAgfSBlbHNlIGlmIChlbmRGcmFtZSAtIGN1cnJlbnRTdGFy
dEZyYW1lKCkgPD0gbV9mcmFtZUNvdW50KSB7CisgICAgICAgIC8vIFRoZSBidWZmZXIgaGFzIG5v
dCB5ZXQgd3JhcHBlZCBhbmQgd2lsbCBub3QgbmVlZCB0by4KKyAgICAgICAgLy8gTm8tb3AuCisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQWR2YW5jZSB0aGUgc3RhcnQgdGltZSBwYXN0IHRoZSBy
ZWdpb24gd2UgYXJlIGFib3V0IHRvIG92ZXJ3cml0ZQorICAgICAgICAvLyBzdGFydGluZyBvbmUg
YnVmZmVyIG9mIHRpbWUgYmVoaW5kIHdoZXJlIHdlJ3JlIHdyaXRpbmcuCisgICAgICAgIHVpbnQ2
NF90IG5ld1N0YXJ0RnJhbWUgPSBlbmRGcmFtZSAtIG1fZnJhbWVDb3VudDsKKyAgICAgICAgdWlu
dDY0X3QgbmV3RW5kRnJhbWUgPSBzdGQ6Om1heChuZXdTdGFydEZyYW1lLCBjdXJyZW50RW5kRnJh
bWUoKSk7CisgICAgICAgIHNldEN1cnJlbnRGcmFtZUJvdW5kcyhuZXdTdGFydEZyYW1lLCBuZXdF
bmRGcmFtZSk7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIG5ldyBmcmFtZXMuCisgICAgQnl0
ZSoqIGJ1ZmZlcnMgPSBzdGF0aWNfY2FzdDxCeXRlKio+KG1fYnVmZmVycy0+ZGF0YSgpKTsKKyAg
ICBzaXplX3Qgb2Zmc2V0MDsKKyAgICBzaXplX3Qgb2Zmc2V0MTsKKyAgICB1aW50NjRfdCBjdXJF
bmQgPSBjdXJyZW50RW5kRnJhbWUoKTsKKworICAgIGlmIChzdGFydEZyYW1lID4gY3VyRW5kKSB7
CisgICAgICAgIC8vIFdlIGFyZSBza2lwcGluZyBzb21lIHNhbXBsZXMsIHNvIHplcm8gdGhlIHJh
bmdlIHdlIGFyZSBza2lwcGluZy4KKyAgICAgICAgb2Zmc2V0MCA9IGZyYW1lT2Zmc2V0KGN1ckVu
ZCk7CisgICAgICAgIG9mZnNldDEgPSBmcmFtZU9mZnNldChzdGFydEZyYW1lKTsKKyAgICAgICAg
aWYgKG9mZnNldDAgPCBvZmZzZXQxKQorICAgICAgICAgICAgWmVyb1JhbmdlKGJ1ZmZlcnMsIG1f
Y2hhbm5lbENvdW50LCBvZmZzZXQwLCBvZmZzZXQxIC0gb2Zmc2V0MCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgWmVyb1JhbmdlKGJ1ZmZlcnMsIG1fY2hhbm5lbENvdW50LCBvZmZzZXQw
LCBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwKTsKKyAgICAgICAgICAgIFplcm9SYW5nZShidWZm
ZXJzLCBtX2NoYW5uZWxDb3VudCwgMCwgb2Zmc2V0MSk7CisgICAgICAgIH0KKyAgICAgICAgb2Zm
c2V0MCA9IG9mZnNldDE7CisgICAgfSBlbHNlCisgICAgICAgIG9mZnNldDAgPSBmcmFtZU9mZnNl
dChzdGFydEZyYW1lKTsKKworICAgIG9mZnNldDEgPSBmcmFtZU9mZnNldChlbmRGcmFtZSk7Cisg
ICAgaWYgKG9mZnNldDAgPCBvZmZzZXQxKQorICAgICAgICBTdG9yZUFCTChidWZmZXJzLCBvZmZz
ZXQwLCBsaXN0LCAwLCBvZmZzZXQxIC0gb2Zmc2V0MCk7CisgICAgZWxzZSB7CisgICAgICAgIHNp
emVfdCBuYnl0ZXMgPSBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwOworICAgICAgICBTdG9yZUFC
TChidWZmZXJzLCBvZmZzZXQwLCBsaXN0LCAwLCBuYnl0ZXMpOworICAgICAgICBTdG9yZUFCTChi
dWZmZXJzLCAwLCBsaXN0LCBuYnl0ZXMsIG9mZnNldDEpOworICAgIH0KKworICAgIC8vIE5vdyB1
cGRhdGUgdGhlIGVuZCB0aW1lLgorICAgIHNldEN1cnJlbnRGcmFtZUJvdW5kcyhjdXJyZW50U3Rh
cnRGcmFtZSgpLCBlbmRGcmFtZSk7CisKKyAgICByZXR1cm4gT2s7Cit9CisKK3ZvaWQgQ0FSaW5n
QnVmZmVyOjpzZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3Qgc3RhcnRUaW1lLCB1aW50NjRf
dCBlbmRUaW1lKQoreworICAgIEJ5dGVTcGluTG9ja2VyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJv
dW5kc0xvY2spOworICAgIHVpbnQzMl90IG5leHRQdHIgPSBtX3RpbWVCb3VuZHNRdWV1ZVB0ciAr
IDE7CisgICAgdWludDMyX3QgaW5kZXggPSBuZXh0UHRyICYga0dlbmVyYWxSaW5nVGltZUJvdW5k
c1F1ZXVlTWFzazsKKworICAgIG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX3N0YXJ0RnJhbWUg
PSBzdGFydFRpbWU7CisgICAgbV90aW1lQm91bmRzUXVldWVbaW5kZXhdLm1fZW5kRnJhbWUgPSBl
bmRUaW1lOworICAgIG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX3VwZGF0ZUNvdW50ZXIgPSBu
ZXh0UHRyOworICAgIE9TQXRvbWljSW5jcmVtZW50MzJCYXJyaWVyKHN0YXRpY19jYXN0PGludDMy
X3QqPigmbV90aW1lQm91bmRzUXVldWVQdHIpKTsKK30KKwordm9pZCBDQVJpbmdCdWZmZXI6Omdl
dEN1cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCAmc3RhcnRUaW1lLCB1aW50NjRfdCAmZW5kVGlt
ZSkKK3sKKyAgICBCeXRlU3BpbkxvY2tlciBsb2NrZXIobV9jdXJyZW50RnJhbWVCb3VuZHNMb2Nr
KTsKKyAgICB1aW50MzJfdCBjdXJQdHIgPSBtX3RpbWVCb3VuZHNRdWV1ZVB0cjsKKyAgICB1aW50
MzJfdCBpbmRleCA9IGN1clB0ciAmIGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2s7Cisg
ICAgQ0FSaW5nQnVmZmVyOjpUaW1lQm91bmRzJiBib3VuZHMgPSBtX3RpbWVCb3VuZHNRdWV1ZVtp
bmRleF07CisKKyAgICBzdGFydFRpbWUgPSBib3VuZHMubV9zdGFydEZyYW1lOworICAgIGVuZFRp
bWUgPSBib3VuZHMubV9lbmRGcmFtZTsKK30KKwordm9pZCBDQVJpbmdCdWZmZXI6OmNsaXBUaW1l
Qm91bmRzKHVpbnQ2NF90JiBzdGFydFJlYWQsIHVpbnQ2NF90JiBlbmRSZWFkKQoreworICAgIHVp
bnQ2NF90IHN0YXJ0VGltZTsKKyAgICB1aW50NjRfdCBlbmRUaW1lOworCisgICAgZ2V0Q3VycmVu
dEZyYW1lQm91bmRzKHN0YXJ0VGltZSwgZW5kVGltZSk7CisKKyAgICBpZiAoc3RhcnRSZWFkID4g
ZW5kVGltZSB8fCBlbmRSZWFkIDwgc3RhcnRUaW1lKSB7CisgICAgICAgIGVuZFJlYWQgPSBzdGFy
dFJlYWQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGFydFJlYWQgPSBzdGQ6Om1h
eChzdGFydFJlYWQsIHN0YXJ0VGltZSk7CisgICAgZW5kUmVhZCA9IHN0ZDo6bWluKGVuZFJlYWQs
IGVuZFRpbWUpOworICAgIGVuZFJlYWQgPSBzdGQ6Om1heChlbmRSZWFkLCBzdGFydFJlYWQpOwor
fQorCit1aW50NjRfdCBDQVJpbmdCdWZmZXI6OmN1cnJlbnRTdGFydEZyYW1lKCkgY29uc3QKK3sK
KyAgICB1aW50MzJfdCBpbmRleCA9IG1fdGltZUJvdW5kc1F1ZXVlUHRyICYga0dlbmVyYWxSaW5n
VGltZUJvdW5kc1F1ZXVlTWFzazsKKyAgICByZXR1cm4gbV90aW1lQm91bmRzUXVldWVbaW5kZXhd
Lm1fc3RhcnRGcmFtZTsKK30KKwordWludDY0X3QgQ0FSaW5nQnVmZmVyOjpjdXJyZW50RW5kRnJh
bWUoKSBjb25zdAoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV90aW1lQm91bmRzUXVldWVQdHIg
JiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVNYXNrOworICAgIHJldHVybiBtX3RpbWVCb3Vu
ZHNRdWV1ZVtpbmRleF0ubV9lbmRGcmFtZTsKK30KKworQ0FSaW5nQnVmZmVyOjpFcnJvciBDQVJp
bmdCdWZmZXI6OmZldGNoKEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IG5GcmFtZXMsIHVp
bnQ2NF90IHN0YXJ0UmVhZCkKK3sKKyAgICBpZiAoIW5GcmFtZXMpCisgICAgICAgIHJldHVybiBP
azsKKyAgICAKKyAgICBzdGFydFJlYWQgPSBzdGQ6Om1heDx1aW50NjRfdD4oMCwgc3RhcnRSZWFk
KTsKKyAgICAKKyAgICB1aW50NjRfdCBlbmRSZWFkID0gc3RhcnRSZWFkICsgbkZyYW1lczsKKyAg
ICAKKyAgICB1aW50NjRfdCBzdGFydFJlYWQwID0gc3RhcnRSZWFkOworICAgIHVpbnQ2NF90IGVu
ZFJlYWQwID0gZW5kUmVhZDsKKyAgICAKKyAgICBjbGlwVGltZUJvdW5kcyhzdGFydFJlYWQsIGVu
ZFJlYWQpOworCisgICAgaWYgKHN0YXJ0UmVhZCA9PSBlbmRSZWFkKSB7CisgICAgICAgIFplcm9B
QkwobGlzdCwgMCwgbkZyYW1lcyAqIG1fYnl0ZXNQZXJGcmFtZSk7CisgICAgICAgIHJldHVybiBP
azsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGJ5dGVTaXplID0gKGVuZFJlYWQgLSBzdGFydFJl
YWQpICogbV9ieXRlc1BlckZyYW1lOworICAgIAorICAgIHNpemVfdCBkZXN0U3RhcnRCeXRlT2Zm
c2V0ID0gc3RkOjptYXg8c2l6ZV90PigwLCAoc3RhcnRSZWFkIC0gc3RhcnRSZWFkMCkgKiBtX2J5
dGVzUGVyRnJhbWUpOworICAgIAorICAgIGlmIChkZXN0U3RhcnRCeXRlT2Zmc2V0ID4gMCkKKyAg
ICAgICAgWmVyb0FCTChsaXN0LCAwLCBzdGQ6Om1pbjxzaXplX3Q+KG5GcmFtZXMgKiBtX2J5dGVz
UGVyRnJhbWUsIGRlc3RTdGFydEJ5dGVPZmZzZXQpKTsKKworICAgIHNpemVfdCBkZXN0RW5kU2l6
ZSA9IHN0ZDo6bWF4PHNpemVfdD4oMCwgZW5kUmVhZDAgLSBlbmRSZWFkKTsKKyAgICBpZiAoZGVz
dEVuZFNpemUgPiAwKQorICAgICAgICBaZXJvQUJMKGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQg
KyBieXRlU2l6ZSwgZGVzdEVuZFNpemUgKiBtX2J5dGVzUGVyRnJhbWUpOworCisgICAgQnl0ZSAq
KmJ1ZmZlcnMgPSBzdGF0aWNfY2FzdDxCeXRlKio+KG1fYnVmZmVycy0+ZGF0YSgpKTsKKyAgICBz
aXplX3Qgb2Zmc2V0MCA9IGZyYW1lT2Zmc2V0KHN0YXJ0UmVhZCk7CisgICAgc2l6ZV90IG9mZnNl
dDEgPSBmcmFtZU9mZnNldChlbmRSZWFkKTsKKyAgICBzaXplX3QgbmJ5dGVzOworICAgIAorICAg
IGlmIChvZmZzZXQwIDwgb2Zmc2V0MSkgeworICAgICAgICBuYnl0ZXMgPSBvZmZzZXQxIC0gb2Zm
c2V0MDsKKyAgICAgICAgRmV0Y2hBQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCwgYnVmZmVy
cywgb2Zmc2V0MCwgbmJ5dGVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBuYnl0ZXMgPSBtX2Nh
cGFjaXR5Qnl0ZXMgLSBvZmZzZXQwOworICAgICAgICBGZXRjaEFCTChsaXN0LCBkZXN0U3RhcnRC
eXRlT2Zmc2V0LCBidWZmZXJzLCBvZmZzZXQwLCBuYnl0ZXMpOworICAgICAgICBGZXRjaEFCTChs
aXN0LCBkZXN0U3RhcnRCeXRlT2Zmc2V0ICsgbmJ5dGVzLCBidWZmZXJzLCAwLCBvZmZzZXQxKTsK
KyAgICAgICAgbmJ5dGVzICs9IG9mZnNldDE7CisgICAgfQorICAgIAorICAgIGludCBjaGFubmVs
Q291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKKyAgICBBdWRpb0J1ZmZlciogZGVzdCA9IGxp
c3QtPm1CdWZmZXJzOworICAgIHdoaWxlICgtLWNoYW5uZWxDb3VudCA+PSAwKSB7CisgICAgICAg
IGRlc3QtPm1EYXRhQnl0ZVNpemUgPSBuYnl0ZXM7CisgICAgICAgIGRlc3QrKzsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIE9rOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ5YjA1MjRhY2FhZTAzM2Iy
ZDAxYjExNDBmOWRlZjkzOTVlYjQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaApAQCAtMCwwICsxLDk0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDQVJpbmdCdWZmZXJfaAorI2RlZmluZSBDQVJpbmdCdWZmZXJfaAor
CisjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9CeXRlU3Bp
bkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3R5cGVkZWYgc3RydWN0IEF1ZGlv
QnVmZmVyTGlzdCBBdWRpb0J1ZmZlckxpc3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ0FSaW5nQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENB
UmluZ0J1ZmZlcj4gY3JlYXRlKCk7CisgICAgfkNBUmluZ0J1ZmZlcigpOworCisgICAgZW51bSBF
cnJvciB7CisgICAgICAgIE9rLAorICAgICAgICBUb29NdWNoLCAvLyBmZXRjaCBzdGFydCB0aW1l
IGlzIGVhcmxpZXIgdGhhbiBidWZmZXIgc3RhcnQgdGltZSBhbmQgZmV0Y2ggZW5kIHRpbWUgaXMg
bGF0ZXIgdGhhbiBidWZmZXIgZW5kIHRpbWUKKyAgICAgICAgQ1BVT3ZlcmxvYWQsIC8vIHRoZSBy
ZWFkZXIgaXMgdW5hYmxlIHRvIGdldCBlbm91Z2ggQ1BVIGN5Y2xlcyB0byBjYXB0dXJlIGEgY29u
c2lzdGVudCBzbmFwc2hvdCBvZiB0aGUgdGltZSBib3VuZHMKKyAgICB9OworCisgICAgdm9pZCBh
bGxvY2F0ZSh1aW50MzJfdCBtX2NoYW5uZWxDb3VudCwgc2l6ZV90IGJ5dGVzUGVyRnJhbWUsIHNp
emVfdCBmcmFtZUNvdW50KTsKKyAgICB2b2lkIGRlYWxsb2NhdGUoKTsKKyAgICBFcnJvciBzdG9y
ZShjb25zdCBBdWRpb0J1ZmZlckxpc3QqLCBzaXplX3QgZnJhbWVDb3VudCwgdWludDY0X3Qgc3Rh
cnRGcmFtZSk7CisgICAgRXJyb3IgZmV0Y2goQXVkaW9CdWZmZXJMaXN0Kiwgc2l6ZV90IGZyYW1l
Q291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUpOworICAgIHZvaWQgZ2V0Q3VycmVudEZyYW1lQm91
bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1lKTsKKworICAgIHVpbnQz
Ml90IGNoYW5uZWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5lbENvdW50OyB9CisKK3By
aXZhdGU6CisgICAgQ0FSaW5nQnVmZmVyKCk7CisKKyAgICBzaXplX3QgZnJhbWVPZmZzZXQodWlu
dDY0X3QgZnJhbWVOdW1iZXIpIHsgcmV0dXJuIChmcmFtZU51bWJlciAmIG1fZnJhbWVDb3VudE1h
c2spICogbV9ieXRlc1BlckZyYW1lOyB9CisKKyAgICB2b2lkIGNsaXBUaW1lQm91bmRzKHVpbnQ2
NF90JiBzdGFydFJlYWQsIHVpbnQ2NF90JiBlbmRSZWFkKTsKKworICAgIHVpbnQ2NF90IGN1cnJl
bnRTdGFydEZyYW1lKCkgY29uc3Q7CisgICAgdWludDY0X3QgY3VycmVudEVuZEZyYW1lKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3Qgc3RhcnRGcmFtZSwg
dWludDY0X3QgZW5kRnJhbWUpOworCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcnM7
CisgICAgdWludDMyX3QgbV9jaGFubmVsQ291bnQ7CisgICAgc2l6ZV90IG1fYnl0ZXNQZXJGcmFt
ZTsKKyAgICB1aW50MzJfdCBtX2ZyYW1lQ291bnQ7CisgICAgdWludDMyX3QgbV9mcmFtZUNvdW50
TWFzazsKKyAgICBzaXplX3QgbV9jYXBhY2l0eUJ5dGVzOworCisgICAgc3RydWN0IFRpbWVCb3Vu
ZHMgeworICAgICAgICBUaW1lQm91bmRzKCkKKyAgICAgICAgICAgIDogbV9zdGFydEZyYW1lKDAp
CisgICAgICAgICAgICAsIG1fZW5kRnJhbWUoMCkKKyAgICAgICAgICAgICwgbV91cGRhdGVDb3Vu
dGVyKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB2b2xhdGlsZSB1aW50NjRfdCBt
X3N0YXJ0RnJhbWU7CisgICAgICAgIHZvbGF0aWxlIHVpbnQ2NF90IG1fZW5kRnJhbWU7CisgICAg
ICAgIHZvbGF0aWxlIHVpbnQzMl90IG1fdXBkYXRlQ291bnRlcjsKKyAgICB9OworICAgIAorICAg
IFZlY3RvcjxUaW1lQm91bmRzPiBtX3RpbWVCb3VuZHNRdWV1ZTsKKyAgICBCeXRlU3BpbkxvY2sg
bV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrOworICAgIGludDMyX3QgbV90aW1lQm91bmRzUXVldWVQ
dHI7Cit9OworCit9CisKKworI2VuZGlmIC8vIENBUmluZ0J1ZmZlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhNmZmOTI5
OWYwMTgzZWMxNzA5YmI5NjIwNmRiYTJhYmY3OGQzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakMuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQXVkaW9T
b3VyY2VQcm92aWRlckFWRk9iakNfaAorI2RlZmluZSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Q19oCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBVU0UoTUVESUFUT09MQk9YKQorCisjaW5j
bHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgQVZQbGF5ZXJJdGVtOworT0JK
Q19DTEFTUyBBVk11dGFibGVBdWRpb01peDsKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVl
TVRBdWRpb1Byb2Nlc3NpbmdUYXAgKk1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmOwordHlwZWRlZiBz
dHJ1Y3QgQXVkaW9CdWZmZXJMaXN0IEF1ZGlvQnVmZmVyTGlzdDsKK3R5cGVkZWYgc3RydWN0IEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb247Cit0
eXBlZGVmIHN0cnVjdCBPcGFxdWVBdWRpb0NvbnZlcnRlciogQXVkaW9Db252ZXJ0ZXJSZWY7Cit0
eXBlZGVmIHVpbnQzMl90IE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3M7Cit0eXBlZGVmIHNpZ25l
ZCBsb25nIENNSXRlbUNvdW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENBUmlu
Z0J1ZmZlcjsKKworY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMgOiBwdWJsaWMgUmVm
Q291bnRlZDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQz4sIHB1YmxpYyBBdWRpb1NvdXJjZVBy
b3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQz4gY3JlYXRlKEFWUGxheWVySXRlbSopOworICAgIHZpcnR1YWwgfkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDKCk7CisKKyAgICB2b2lkIHNldFBsYXllckl0ZW0oQVZQbGF5ZXJJ
dGVtICopOworCitwcml2YXRlOgorICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKEFWUGxh
eWVySXRlbSAqKTsKKworICAgIHZvaWQgZGVzdHJveU1peCgpOworICAgIHZvaWQgY3JlYXRlTWl4
KCk7CisKKyAgICAvLyBBdWRpb1NvdXJjZVByb3ZpZGVyCisgICAgdmlydHVhbCB2b2lkIHByb3Zp
ZGVJbnB1dChBdWRpb0J1cyosIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCopIG92ZXJy
aWRlOworCisgICAgc3RhdGljIHZvaWQgaW5pdENhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFw
UmVmLCB2b2lkKiwgdm9pZCoqKTsKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZUNhbGxiYWNrKE1U
QXVkaW9Qcm9jZXNzaW5nVGFwUmVmKTsKKyAgICBzdGF0aWMgdm9pZCBwcmVwYXJlQ2FsbGJhY2so
TVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYsIENNSXRlbUNvdW50LCBjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24qKTsKKyAgICBzdGF0aWMgdm9pZCB1bnByZXBhcmVDYWxsYmFjayhNVEF1
ZGlvUHJvY2Vzc2luZ1RhcFJlZik7CisgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0NhbGxiYWNrKE1U
QXVkaW9Qcm9jZXNzaW5nVGFwUmVmLCBDTUl0ZW1Db3VudCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBG
bGFncywgQXVkaW9CdWZmZXJMaXN0KiwgQ01JdGVtQ291bnQqLCBNVEF1ZGlvUHJvY2Vzc2luZ1Rh
cEZsYWdzKik7CisKKyAgICB2b2lkIGluaXQodm9pZCogY2xpZW50SW5mbywgdm9pZCoqIHRhcFN0
b3JhZ2VPdXQpOworICAgIHZvaWQgZmluYWxpemUoKTsKKyAgICB2b2lkIHByZXBhcmUoQ01JdGVt
Q291bnQgbWF4RnJhbWVzLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKnByb2Nl
c3NpbmdGb3JtYXQpOworICAgIHZvaWQgdW5wcmVwYXJlKCk7CisgICAgdm9pZCBwcm9jZXNzKENN
SXRlbUNvdW50IG51bWJlckZyYW1lcywgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyBmbGFnc0lu
LCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxpc3RJbk91dCwgQ01JdGVtQ291bnQgKm51bWJlckZy
YW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NPdXQpOworCisgICAgUmV0
YWluUHRyPEFWUGxheWVySXRlbT4gbV9hdlBsYXllckl0ZW07CisgICAgUmV0YWluUHRyPEFWTXV0
YWJsZUF1ZGlvTWl4PiBtX2F2QXVkaW9NaXg7CisgICAgUmV0YWluUHRyPE1UQXVkaW9Qcm9jZXNz
aW5nVGFwUmVmPiBtX3RhcDsKKyAgICBSZXRhaW5QdHI8QXVkaW9Db252ZXJ0ZXJSZWY+IG1fY29u
dmVydGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxpc3Q+IG1fbGlzdDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uPiBtX3RhcERlc2Ny
aXB0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+
IG1fb3V0cHV0RGVzY3JpcHRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENBUmluZ0J1ZmZlcj4g
bV9yaW5nQnVmZmVyOworCisgICAgTWVkaWFUaW1lIG1fc3RhcnRUaW1lQXRMYXN0UHJvY2VzczsK
KyAgICBNZWRpYVRpbWUgbV9lbmRUaW1lQXRMYXN0UHJvY2VzczsKKyAgICB1aW50NjRfdCBtX3dy
aXRlQWhlYWRDb3VudDsKKyAgICB1aW50NjRfdCBtX3dyaXRlQ291bnQ7CisgICAgdWludDY0X3Qg
bV9yZWFkQ291bnQ7CisgICAgYm9vbCBtX3BhdXNlZDsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVy
Q2xpZW50KiBtX2NsaWVudDsKK307CisgICAgCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNzJhMjE4NTg5MzZmYmE0MGFhYThiYmYxYWJhOWU1YTZkNWI0OGEzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIgor
CisjaW1wb3J0ICJBdWRpb0J1cy5oIgorI2ltcG9ydCAiQXVkaW9DaGFubmVsLmgiCisjaW1wb3J0
ICJBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmgiCisjaW1wb3J0ICJDQVJpbmdCdWZmZXIuaCIK
KyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhVGltZU1hYy5oIgorI2ltcG9ydCAi
U29mdExpbmtpbmcuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkFzc2V0VHJhY2suaD4KKyNp
bXBvcnQgPEFWRm91bmRhdGlvbi9BVkF1ZGlvTWl4Lmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24v
QVZNZWRpYUZvcm1hdC5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbS5oPgor
I2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbVRyYWNrLmg+CisjaW1wb3J0IDxvYmpj
L3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisKKyNpZiAhTE9HX0RJU0FC
TEVECisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisjZW5kaWYKKworI2lmIEVO
QUJMRShXRUJfQVVESU8pICYmIFVTRShNRURJQVRPT0xCT1gpCisKK1NPRlRfTElOS19GUkFNRVdP
UksoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0ZSQU1FV09SSyhNZWRpYVRvb2xib3gpCitTT0ZU
X0xJTktfRlJBTUVXT1JLKEF1ZGlvVG9vbGJveCkKK1NPRlRfTElOS19GUkFNRVdPUksoQ29yZU1l
ZGlhKQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckl0ZW0pCitTT0ZU
X0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVk11dGFibGVBdWRpb01peCkKK1NPRlRfTElOS19D
TEFTUyhBVkZvdW5kYXRpb24sIEFWTXV0YWJsZUF1ZGlvTWl4SW5wdXRQYXJhbWV0ZXJzKQorCit0
eXBlZGVmIHN0cnVjdCBvcGFxdWVDTU5vdGlmaWNhdGlvbkNlbnRlciAqQ01Ob3RpZmljYXRpb25D
ZW50ZXJSZWY7Cit0eXBlZGVmIHZvaWQgKCpDTU5vdGlmaWNhdGlvbkNhbGxiYWNrKShDTU5vdGlm
aWNhdGlvbkNlbnRlclJlZiBpbkNlbnRlciwgY29uc3Qgdm9pZCAqaW5MaXN0ZW5lciwgQ0ZTdHJp
bmdSZWYgaW5Ob3RpZmljYXRpb25OYW1lLCBjb25zdCB2b2lkICppbk5vdGlmeWluZ09iamVjdCwg
Q0ZUeXBlUmVmIGluTm90aWZpY2F0aW9uUGF5bG9hZCk7CisKK1NPRlRfTElOSyhDb3JlTWVkaWEs
IENNTm90aWZpY2F0aW9uQ2VudGVyR2V0RGVmYXVsdExvY2FsQ2VudGVyLCBDTU5vdGlmaWNhdGlv
bkNlbnRlclJlZiwgKHZvaWQpLCAoKSk7CitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTU5vdGlmaWNh
dGlvbkNlbnRlckFkZExpc3RlbmVyLCBPU1N0YXR1cywgKENNTm90aWZpY2F0aW9uQ2VudGVyUmVm
IGNlbnRlciwgY29uc3Qgdm9pZCogbGlzdGVuZXIsIENNTm90aWZpY2F0aW9uQ2FsbGJhY2sgY2Fs
bGJhY2ssIENGU3RyaW5nUmVmIG5vdGlmaWNhdGlvbiwgY29uc3Qgdm9pZCogb2JqZWN0LCBVSW50
MzIgZmxhZ3MpLCAoY2VudGVyLCBsaXN0ZW5lciwgY2FsbGJhY2ssIG5vdGlmaWNhdGlvbiwgb2Jq
ZWN0LCBmbGFncykpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTU5vdGlmaWNhdGlvbkNlbnRlclJl
bW92ZUxpc3RlbmVyLCBPU1N0YXR1cywgKENNTm90aWZpY2F0aW9uQ2VudGVyUmVmIGNlbnRlciwg
Y29uc3Qgdm9pZCogbGlzdGVuZXIsIENNTm90aWZpY2F0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIENG
U3RyaW5nUmVmIG5vdGlmaWNhdGlvbiwgY29uc3Qgdm9pZCogb2JqZWN0KSwgKGNlbnRlciwgbGlz
dGVuZXIsIGNhbGxiYWNrLCBub3RpZmljYXRpb24sIG9iamVjdCkpCitTT0ZUX0xJTksoQ29yZU1l
ZGlhLCBDTVRpbWViYXNlR2V0VGltZSwgQ01UaW1lLCAoQ01UaW1lYmFzZVJlZiB0aW1lYmFzZSks
ICh0aW1lYmFzZSkpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWViYXNlR2V0RWZmZWN0aXZl
UmF0ZSwgRmxvYXQ2NCwgKENNVGltZWJhc2VSZWYgdGltZWJhc2UpLCAodGltZWJhc2UpKQorCitT
T0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01UaW1lYmFzZU5vdGlmaWNhdGlvbl9FZmZl
Y3RpdmVSYXRlQ2hhbmdlZCwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1l
ZGlhLCBrQ01UaW1lYmFzZU5vdGlmaWNhdGlvbl9UaW1lSnVtcGVkLCBDRlN0cmluZ1JlZikKKyNk
ZWZpbmUga0NNVGltZWJhc2VOb3RpZmljYXRpb25fRWZmZWN0aXZlUmF0ZUNoYW5nZWQgZ2V0a0NN
VGltZWJhc2VOb3RpZmljYXRpb25fRWZmZWN0aXZlUmF0ZUNoYW5nZWQoKQorI2RlZmluZSBrQ01U
aW1lYmFzZU5vdGlmaWNhdGlvbl9UaW1lSnVtcGVkIGdldGtDTVRpbWViYXNlTm90aWZpY2F0aW9u
X1RpbWVKdW1wZWQoKQorCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbnZlcnRlckNv
bnZlcnRDb21wbGV4QnVmZmVyLCBPU1N0YXR1cywgKEF1ZGlvQ29udmVydGVyUmVmIGluQXVkaW9D
b252ZXJ0ZXIsIFVJbnQzMiBpbk51bWJlclBDTUZyYW1lcywgY29uc3QgQXVkaW9CdWZmZXJMaXN0
KiBpbklucHV0RGF0YSwgQXVkaW9CdWZmZXJMaXN0KiBvdXRPdXRwdXREYXRhKSwgKGluQXVkaW9D
b252ZXJ0ZXIsIGluTnVtYmVyUENNRnJhbWVzLCBpbklucHV0RGF0YSwgb3V0T3V0cHV0RGF0YSkp
CitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbnZlcnRlck5ldywgT1NTdGF0dXMsIChj
b25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qIGluU291cmNlRm9ybWF0LCBjb25zdCBB
dWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qIGluRGVzdGluYXRpb25Gb3JtYXQsIEF1ZGlvQ29u
dmVydGVyUmVmKiBvdXRBdWRpb0NvbnZlcnRlciksIChpblNvdXJjZUZvcm1hdCwgaW5EZXN0aW5h
dGlvbkZvcm1hdCwgb3V0QXVkaW9Db252ZXJ0ZXIpKQorCitTT0ZUX0xJTksoTWVkaWFUb29sYm94
LCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEdldFN0b3JhZ2UsIHZvaWQqLCAoTVRBdWRpb1Byb2Nlc3Np
bmdUYXBSZWYgdGFwKSwgKHRhcCkpCitTT0ZUX0xJTksoTWVkaWFUb29sYm94LCBNVEF1ZGlvUHJv
Y2Vzc2luZ1RhcEdldFNvdXJjZUF1ZGlvLCBPU1N0YXR1cywgKE1UQXVkaW9Qcm9jZXNzaW5nVGFw
UmVmIHRhcCwgQ01JdGVtQ291bnQgbnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZl
ckxpc3RJbk91dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NPdXQsIENNVGltZVJh
bmdlICp0aW1lUmFuZ2VPdXQsIENNSXRlbUNvdW50ICpudW1iZXJGcmFtZXNPdXQpLCAodGFwLCBu
dW1iZXJGcmFtZXMsIGJ1ZmZlckxpc3RJbk91dCwgZmxhZ3NPdXQsIHRpbWVSYW5nZU91dCwgbnVt
YmVyRnJhbWVzT3V0KSkKK1NPRlRfTElOS19NQVlfRkFJTChNZWRpYVRvb2xib3gsIE1UQXVkaW9Q
cm9jZXNzaW5nVGFwQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwg
Y29uc3QgTVRBdWRpb1Byb2Nlc3NpbmdUYXBDYWxsYmFja3MgKmNhbGxiYWNrcywgTVRBdWRpb1By
b2Nlc3NpbmdUYXBDcmVhdGlvbkZsYWdzIGZsYWdzLCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiAq
dGFwT3V0KSwgKGFsbG9jYXRvciwgY2FsbGJhY2tzLCBmbGFncywgdGFwT3V0KSkKKworU09GVF9M
SU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlLCBO
U1N0cmluZyAqKQorI2RlZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlIGdldEFWTWVk
aWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUoKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBkb3VibGUga1JpbmdCdWZmZXJEdXJhdGlvbiA9IDE7CisKK1Bhc3NSZWZQdHI8QXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM+IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGUoQVZQ
bGF5ZXJJdGVtICppdGVtKQoreworICAgIGlmICghY2FuTG9hZE1UQXVkaW9Qcm9jZXNzaW5nVGFw
Q3JlYXRlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoaXRlbSkpOworfQorCitBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQzo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoQVZQbGF5ZXJJdGVtICpp
dGVtKQorICAgIDogbV9hdlBsYXllckl0ZW0oaXRlbSkKKyAgICAsIG1fd3JpdGVDb3VudCgwKQor
ICAgICwgbV9yZWFkQ291bnQoMCkKKyAgICAsIG1fcGF1c2VkKHRydWUpCisgICAgLCBtX2NsaWVu
dChudWxscHRyKQoreworfQorCitBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6fkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDKCkKK3sKKyAgICBzZXRDbGllbnQobnVsbHB0cik7Cit9CisKK3Zv
aWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb3ZpZGVJbnB1dChBdWRpb0J1cyogYnVz
LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIGlmICghbV9hdlBsYXllckl0ZW0pCisg
ICAgICAgIHJldHVybjsKKworICAgIHVpbnQ2NF90IHN0YXJ0RnJhbWUgPSAwOworICAgIHVpbnQ2
NF90IGVuZEZyYW1lID0gMDsKKyAgICBtX3JpbmdCdWZmZXItPmdldEN1cnJlbnRGcmFtZUJvdW5k
cyhzdGFydEZyYW1lLCBlbmRGcmFtZSk7CisKKyAgICBpZiAobV93cml0ZUNvdW50IDw9IG1fcmVh
ZENvdW50ICsgbV93cml0ZUFoZWFkQ291bnQpIHsKKyAgICAgICAgYnVzLT56ZXJvKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzaXplX3QgZnJhbWVzQXZhaWxhYmxlID0gZW5kRnJh
bWUgLSAobV9yZWFkQ291bnQgKyBtX3dyaXRlQWhlYWRDb3VudCk7CisgICAgaWYgKGZyYW1lc0F2
YWlsYWJsZSA8IGZyYW1lc1RvUHJvY2VzcykgeworICAgICAgICBmcmFtZXNUb1Byb2Nlc3MgPSBm
cmFtZXNBdmFpbGFibGU7CisgICAgICAgIGJ1cy0+emVybygpOworICAgIH0KKworICAgIEFTU0VS
VChidXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSBtX3JpbmdCdWZmZXItPmNoYW5uZWxDb3VudCgp
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xpc3QtPm1OdW1iZXJCdWZmZXJz
OyArK2kpIHsKKyAgICAgICAgQXVkaW9DaGFubmVsKiBjaGFubmVsID0gYnVzLT5jaGFubmVsKGkp
OworICAgICAgICBtX2xpc3QtPm1CdWZmZXJzW2ldLm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAg
ICAgIG1fbGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEgPSBjaGFubmVsLT5tdXRhYmxlRGF0YSgpOwor
ICAgICAgICBtX2xpc3QtPm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBjaGFubmVsLT5sZW5n
dGgoKSAqIHNpemVvZihmbG9hdCk7CisgICAgfQorCisgICAgbV9yaW5nQnVmZmVyLT5mZXRjaCht
X2xpc3QuZ2V0KCksIGZyYW1lc1RvUHJvY2VzcywgbV9yZWFkQ291bnQpOworICAgIG1fcmVhZENv
dW50ICs9IGZyYW1lc1RvUHJvY2VzczsKKworICAgIGlmIChtX2NvbnZlcnRlcikKKyAgICAgICAg
QXVkaW9Db252ZXJ0ZXJDb252ZXJ0Q29tcGxleEJ1ZmZlcihtX2NvbnZlcnRlci5nZXQoKSwgZnJh
bWVzVG9Qcm9jZXNzLCBtX2xpc3QuZ2V0KCksIG1fbGlzdC5nZXQoKSk7Cit9CisKK3ZvaWQgQXVk
aW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnNldENsaWVudChBdWRpb1NvdXJjZVByb3ZpZGVyQ2xp
ZW50KiBjbGllbnQpCit7CisgICAgaWYgKG1fY2xpZW50ID09IGNsaWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fYXZBdWRpb01peCkKKyAgICAgICAgZGVzdHJveU1peCgpOworCisg
ICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9hdlBsYXllckl0
ZW0pCisgICAgICAgIGNyZWF0ZU1peCgpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDOjpzZXRQbGF5ZXJJdGVtKEFWUGxheWVySXRlbSAqYXZQbGF5ZXJJdGVtKQoreworICAg
IGlmIChtX2F2UGxheWVySXRlbSA9PSBhdlBsYXllckl0ZW0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX2F2QXVkaW9NaXgpCisgICAgICAgIGRlc3Ryb3lNaXgoKTsKKworICAgIG1fYXZQ
bGF5ZXJJdGVtID0gYXZQbGF5ZXJJdGVtOworCisgICAgaWYgKG1fY2xpZW50ICYmIG1fYXZQbGF5
ZXJJdGVtKQorICAgICAgICBjcmVhdGVNaXgoKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQzo6ZGVzdHJveU1peCgpCit7CisgICAgaWYgKG1fYXZQbGF5ZXJJdGVtKQorICAg
ICAgICBbbV9hdlBsYXllckl0ZW0gc2V0QXVkaW9NaXg6bmlsXTsKKyAgICBbbV9hdkF1ZGlvTWl4
IHNldElucHV0UGFyYW1ldGVyczpuaWxdOworICAgIG1fYXZBdWRpb01peC5jbGVhcigpOworICAg
IG1fdGFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmNy
ZWF0ZU1peCgpCit7CisgICAgQVNTRVJUKCFtX2F2QXVkaW9NaXgpOworICAgIEFTU0VSVChtX2F2
UGxheWVySXRlbSk7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAgIG1fYXZBdWRpb01peCA9
IGFkb3B0TlMoW1tnZXRBVk11dGFibGVBdWRpb01peENsYXNzKCkgYWxsb2NdIGluaXRdKTsKKwor
ICAgIE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsKKyAgICAgICAg
MCwKKyAgICAgICAgdGhpcywKKyAgICAgICAgaW5pdENhbGxiYWNrLAorICAgICAgICBmaW5hbGl6
ZUNhbGxiYWNrLAorICAgICAgICBwcmVwYXJlQ2FsbGJhY2ssCisgICAgICAgIHVucHJlcGFyZUNh
bGxiYWNrLAorICAgICAgICBwcm9jZXNzQ2FsbGJhY2ssCisgICAgfTsKKworICAgIE1UQXVkaW9Q
cm9jZXNzaW5nVGFwUmVmIHRhcCA9IG51bGxwdHI7CisgICAgTVRBdWRpb1Byb2Nlc3NpbmdUYXBD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgJmNhbGxiYWNrcywgMSwgJnRhcCk7CisgICAgQVNT
RVJUKHRhcCk7CisgICAgQVNTRVJUKG1fdGFwID09IHRhcCk7CisKKyAgICBSZXRhaW5QdHI8QVZN
dXRhYmxlQXVkaW9NaXhJbnB1dFBhcmFtZXRlcnM+IHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbZ2V0
QVZNdXRhYmxlQXVkaW9NaXhJbnB1dFBhcmFtZXRlcnNDbGFzcygpIGFsbG9jXSBpbml0XSk7Cisg
ICAgW3BhcmFtZXRlcnMgc2V0QXVkaW9UYXBQcm9jZXNzb3I6bV90YXAuZ2V0KCldOworCisgICAg
Q01QZXJzaXN0ZW50VHJhY2tJRCBmaXJzdEVuYWJsZWRBdWRpb1RyYWNrSUQgPSBrQ01QZXJzaXN0
ZW50VHJhY2tJRF9JbnZhbGlkOworICAgIE5TQXJyYXkqIHRyYWNrcyA9IFttX2F2UGxheWVySXRl
bSB0cmFja3NdOworICAgIGZvciAoQVZQbGF5ZXJJdGVtVHJhY2sqIHRyYWNrIGluIHRyYWNrcykg
eworICAgICAgICBpZiAoW3RyYWNrLmFzc2V0VHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpB
Vk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlXSAmJiB0cmFjay5lbmFibGVkKSB7CisgICAgICAg
ICAgICBmaXJzdEVuYWJsZWRBdWRpb1RyYWNrSUQgPSB0cmFjay5hc3NldFRyYWNrLnRyYWNrSUQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBbcGFyYW1ldGVycyBz
ZXRUcmFja0lEOmZpcnN0RW5hYmxlZEF1ZGlvVHJhY2tJRF07CisgICAgCisgICAgW21fYXZBdWRp
b01peCBzZXRJbnB1dFBhcmFtZXRlcnM6QFtwYXJhbWV0ZXJzLmdldCgpXV07CisgICAgW21fYXZQ
bGF5ZXJJdGVtIHNldEF1ZGlvTWl4Om1fYXZBdWRpb01peC5nZXQoKV07Cit9CisKK3ZvaWQgQXVk
aW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmluaXRDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1Rh
cFJlZiB0YXAsIHZvaWQqIGNsaWVudEluZm8sIHZvaWQqKiB0YXBTdG9yYWdlT3V0KQoreworICAg
IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0YXRpY19jYXN0PEF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDKj4oY2xpZW50SW5mbyk7CisgICAgX3RoaXMtPm1fdGFwID0gdGFw
OworICAgIF90aGlzLT5pbml0KGNsaWVudEluZm8sIHRhcFN0b3JhZ2VPdXQpOworfQorCit2b2lk
IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5hbGl6ZUNhbGxiYWNrKE1UQXVkaW9Qcm9j
ZXNzaW5nVGFwUmVmIHRhcCkKK3sKKyAgICBBU1NFUlQodGFwKTsKKyAgICBBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQyogX3RoaXMgPSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQyo+KE1UQXVkaW9Qcm9jZXNzaW5nVGFwR2V0U3RvcmFnZSh0YXApKTsKKyAgICBfdGhpcy0+
ZmluYWxpemUoKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJlcGFy
ZUNhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCwgQ01JdGVtQ291bnQgbWF4RnJh
bWVzLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKnByb2Nlc3NpbmdGb3JtYXQp
Cit7CisgICAgQVNTRVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqIF90
aGlzID0gc3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihNVEF1ZGlvUHJv
Y2Vzc2luZ1RhcEdldFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPnByZXBhcmUobWF4RnJhbWVz
LCBwcm9jZXNzaW5nRm9ybWF0KTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qzo6dW5wcmVwYXJlQ2FsbGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwKQoreworICAg
IEFTU0VSVCh0YXApOworICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0
YXRpY19jYXN0PEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKj4oTVRBdWRpb1Byb2Nlc3NpbmdU
YXBHZXRTdG9yYWdlKHRhcCkpOworICAgIF90aGlzLT51bnByZXBhcmUoKTsKK30KKwordm9pZCBB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2Vzc0NhbGxiYWNrKE1UQXVkaW9Qcm9jZXNz
aW5nVGFwUmVmIHRhcCwgQ01JdGVtQ291bnQgbnVtYmVyRnJhbWVzLCBNVEF1ZGlvUHJvY2Vzc2lu
Z1RhcEZsYWdzIGZsYWdzLCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxpc3RJbk91dCwgQ01JdGVt
Q291bnQgKm51bWJlckZyYW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NP
dXQpCit7CisgICAgQVNTRVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMq
IF90aGlzID0gc3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihNVEF1ZGlv
UHJvY2Vzc2luZ1RhcEdldFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPnByb2Nlc3MobnVtYmVy
RnJhbWVzLCBmbGFncywgYnVmZmVyTGlzdEluT3V0LCBudW1iZXJGcmFtZXNPdXQsIGZsYWdzT3V0
KTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6aW5pdCh2b2lkKiBjbGll
bnRJbmZvLCB2b2lkKiogdGFwU3RvcmFnZU91dCkKK3sKKyAgICBBU1NFUlQoY2xpZW50SW5mbyA9
PSB0aGlzKTsKKyAgICAqdGFwU3RvcmFnZU91dCA9IHRoaXM7Cit9CisKK3ZvaWQgQXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM6OmZpbmFsaXplKCkKK3sKK30KKworc3RhdGljIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbiYgYikKK3sKKyAgICByZXR1cm4gYS5tU2FtcGxlUmF0ZSA9PSBi
Lm1TYW1wbGVSYXRlCisgICAgICAgICYmIGEubUZvcm1hdElEID09IGIubUZvcm1hdElECisgICAg
ICAgICYmIGEubUZvcm1hdEZsYWdzID09IGIubUZvcm1hdEZsYWdzCisgICAgICAgICYmIGEubUJ5
dGVzUGVyUGFja2V0ID09IGIubUJ5dGVzUGVyUGFja2V0CisgICAgICAgICYmIGEubUZyYW1lc1Bl
clBhY2tldCA9PSBiLm1GcmFtZXNQZXJQYWNrZXQKKyAgICAgICAgJiYgYS5tQnl0ZXNQZXJGcmFt
ZSA9PSBiLm1CeXRlc1BlckZyYW1lCisgICAgICAgICYmIGEubUNoYW5uZWxzUGVyRnJhbWUgPT0g
Yi5tQ2hhbm5lbHNQZXJGcmFtZQorICAgICAgICAmJiBhLm1CaXRzUGVyQ2hhbm5lbCA9PSBiLm1C
aXRzUGVyQ2hhbm5lbDsKK30KKworc3RhdGljIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
biYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOjpwcmVwYXJlKENNSXRlbUNvdW50IG1heEZyYW1lcywgY29uc3QgQXVkaW9T
dHJlYW1CYXNpY0Rlc2NyaXB0aW9uICpwcm9jZXNzaW5nRm9ybWF0KQoreworICAgIEFTU0VSVCht
YXhGcmFtZXMgPj0gMCk7CisKKyAgICBtX3RhcERlc2NyaXB0aW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+KCpwcm9jZXNzaW5nRm9ybWF0KTsKKyAgICBp
bnQgbnVtYmVyT2ZDaGFubmVscyA9IHByb2Nlc3NpbmdGb3JtYXQtPm1DaGFubmVsc1BlckZyYW1l
OworICAgIHNpemVfdCBieXRlc1BlckZyYW1lID0gcHJvY2Vzc2luZ0Zvcm1hdC0+bUJ5dGVzUGVy
RnJhbWU7CisgICAgZG91YmxlIHNhbXBsZVJhdGUgPSBwcm9jZXNzaW5nRm9ybWF0LT5tU2FtcGxl
UmF0ZTsKKyAgICBBU1NFUlQoc2FtcGxlUmF0ZSA+PSAwKTsKKworICAgIG1fb3V0cHV0RGVzY3Jp
cHRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbj4oKTsK
KyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7CisgICAg
bV9vdXRwdXREZXNjcmlwdGlvbi0+bUZvcm1hdElEID0ga0F1ZGlvRm9ybWF0TGluZWFyUENNOwor
ICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1Gb3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdz
TmF0aXZlRmxvYXRQYWNrZWQ7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUJpdHNQZXJDaGFu
bmVsID0gOCAqIHNpemVvZihGbG9hdDMyKTsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tQ2hh
bm5lbHNQZXJGcmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7CisgICAgbV9vdXRwdXREZXNjcmlwdGlv
bi0+bUZyYW1lc1BlclBhY2tldCA9IDE7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUJ5dGVz
UGVyUGFja2V0ID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1C
eXRlc1BlckZyYW1lID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24t
Pm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZDsKKworICAg
IGlmICgqbV90YXBEZXNjcmlwdGlvbiAhPSAqbV9vdXRwdXREZXNjcmlwdGlvbikgeworICAgICAg
ICBBdWRpb0NvbnZlcnRlclJlZiBvdXRDb252ZXJ0ZXIgPSBudWxscHRyOworICAgICAgICBBdWRp
b0NvbnZlcnRlck5ldyhtX3RhcERlc2NyaXB0aW9uLmdldCgpLCBtX291dHB1dERlc2NyaXB0aW9u
LmdldCgpLCAmb3V0Q29udmVydGVyKTsKKyAgICAgICAgbV9jb252ZXJ0ZXIgPSBvdXRDb252ZXJ0
ZXI7CisgICAgfQorCisgICAgLy8gTWFrZSB0aGUgcmluZ2J1ZmZlciBsYXJnZSBlbm91Z2ggdG8g
c3RvcmUgYXQgbGVhc3QgdHdvIGNhbGxiYWNrcyB3b3J0aCBvZiBhdWRpbywgb3IgMXMsIHdoaWNo
ZXZlciBpcyBsYXJnZXIuCisgICAgc2l6ZV90IGNhcGFjaXR5ID0gc3RkOjptYXgoc3RhdGljX2Nh
c3Q8c2l6ZV90PigyICogbWF4RnJhbWVzKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihrUmluZ0J1ZmZl
ckR1cmF0aW9uICogc2FtcGxlUmF0ZSkpOworCisgICAgbV9yaW5nQnVmZmVyID0gQ0FSaW5nQnVm
ZmVyOjpjcmVhdGUoKTsKKyAgICBtX3JpbmdCdWZmZXItPmFsbG9jYXRlKG51bWJlck9mQ2hhbm5l
bHMsIGJ5dGVzUGVyRnJhbWUsIGNhcGFjaXR5KTsKKworICAgIC8vIEF1ZGlvQnVmZmVyTGlzdCBp
cyBhIHZhcmlhYmxlLWxlbmd0aCBzdHJ1Y3QsIHNvIGNyZWF0ZSBvbiB0aGUgaGVhcCB3aXRoIGEg
Z2VuZXJpYyBuZXcoKSBvcGVyYXRvcgorICAgIC8vIHdpdGggYSBjdXN0b20gc2l6ZSwgYW5kIGlu
aXRpYWxpemUgdGhlIHN0cnVjdCBtYW51YWxseS4KKyAgICBzaXplX3QgYnVmZmVyTGlzdFNpemUg
PSBzaXplb2YoQXVkaW9CdWZmZXJMaXN0KSArIChzaXplb2YoQXVkaW9CdWZmZXIpICogc3RkOjpt
YXgoMSwgbnVtYmVyT2ZDaGFubmVscyAtIDEpKTsKKyAgICBtX2xpc3QgPSBzdGQ6OnVuaXF1ZV9w
dHI8QXVkaW9CdWZmZXJMaXN0PigoQXVkaW9CdWZmZXJMaXN0KikgOjpvcGVyYXRvciBuZXcgKGJ1
ZmZlckxpc3RTaXplKSk7CisgICAgbWVtc2V0KG1fbGlzdC5nZXQoKSwgMCwgYnVmZmVyTGlzdFNp
emUpOworICAgIG1fbGlzdC0+bU51bWJlckJ1ZmZlcnMgPSBudW1iZXJPZkNoYW5uZWxzOworCisg
ICAgUmVmUHRyPEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDPiBzdHJvbmdUaGlzID0gdGhpczsK
KyAgICBjYWxsT25NYWluVGhyZWFkKFtzdHJvbmdUaGlzLCBudW1iZXJPZkNoYW5uZWxzLCBzYW1w
bGVSYXRlXSB7CisgICAgICAgIHN0cm9uZ1RoaXMtPm1fY2xpZW50LT5zZXRGb3JtYXQobnVtYmVy
T2ZDaGFubmVscywgc2FtcGxlUmF0ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakM6OnVucHJlcGFyZSgpCit7CisgICAgbV90YXBEZXNjcmlwdGlvbiA9IG51
bGxwdHI7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgbV9yaW5nQnVm
ZmVyID0gbnVsbHB0cjsKKyAgICBtX2xpc3QgPSBudWxscHRyOworfQorCit2b2lkIEF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzKENNSXRlbUNvdW50IG51bWJlck9mRnJhbWVzLCBN
VEF1ZGlvUHJvY2Vzc2luZ1RhcEZsYWdzIGZsYWdzLCBBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxp
c3RJbk91dCwgQ01JdGVtQ291bnQqIG51bWJlckZyYW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdU
YXBGbGFncyogZmxhZ3NPdXQpCit7CisgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKworICAgIENN
SXRlbUNvdW50IGl0ZW1Db3VudCA9IDA7CisgICAgQ01UaW1lUmFuZ2UgcmFuZ2VPdXQ7CisgICAg
T1NTdGF0dXMgc3RhdHVzID0gTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRTb3VyY2VBdWRpbyhtX3Rh
cC5nZXQoKSwgbnVtYmVyT2ZGcmFtZXMsIGJ1ZmZlckxpc3RJbk91dCwgZmxhZ3NPdXQsICZyYW5n
ZU91dCwgJml0ZW1Db3VudCk7CisgICAgaWYgKHN0YXR1cyAhPSBub0VyciB8fCAhaXRlbUNvdW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBNZWRpYVRpbWUgcmFuZ2VTdGFydCA9IHRvTWVkaWFU
aW1lKHJhbmdlT3V0LnN0YXJ0KTsKKyAgICBNZWRpYVRpbWUgcmFuZ2VEdXJhdGlvbiA9IHRvTWVk
aWFUaW1lKHJhbmdlT3V0LmR1cmF0aW9uKTsKKworICAgIGlmIChyYW5nZVN0YXJ0LmlzSW52YWxp
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNZWRpYVRpbWUgY3VycmVudFRpbWUgPSB0b01l
ZGlhVGltZShDTVRpbWViYXNlR2V0VGltZShbbV9hdlBsYXllckl0ZW0gdGltZWJhc2VdKSk7Cisg
ICAgaWYgKGN1cnJlbnRUaW1lLmlzSW52YWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBUaGUgYXVkaW8gdGFwIHdpbGwgZ2VuZXJhdGUgc2lsZW5jZSB3aGVuIHRoZSBtZWRpYSBpcyBw
YXVzZWQsIGFuZCB3aWxsIG5vdCBhZHZhbmNlIHRoZQorICAgIC8vIHRhcCBjdXJyZW50VGltZS4K
KyAgICBpZiAocmFuZ2VTdGFydCA9PSBtX3N0YXJ0VGltZUF0TGFzdFByb2Nlc3MgfHwgcmFuZ2VE
dXJhdGlvbiA9PSBNZWRpYVRpbWU6Onplcm9UaW1lKCkpIHsKKyAgICAgICAgbV9wYXVzZWQgPSB0
cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGF1c2VkKSB7CisgICAg
ICAgIC8vIE9ubHkgY2hlY2sgdGhlIHdyaXRlLWFoZWFkIHRpbWUgd2hlbiBwbGF5YmFjayBiZWdp
bnMuCisgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7CisgICAgICAgIE1lZGlhVGltZSBlYXJseUJ5
ID0gcmFuZ2VTdGFydCAtIGN1cnJlbnRUaW1lOworICAgICAgICBtX3dyaXRlQWhlYWRDb3VudCA9
IG1fdGFwRGVzY3JpcHRpb24tPm1TYW1wbGVSYXRlICogZWFybHlCeS50b0RvdWJsZSgpOworICAg
IH0KKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdW5kZXJseWluZyBtZWRpYSBoYXMgc2Vl
a2VkLCB3aGljaCB3b3VsZCByZXF1aXJlIHVzIHRvICJmbHVzaCIKKyAgICAvLyBvdXIgb3V0c3Rh
bmRpbmcgYnVmZmVycy4KKyAgICBpZiAocmFuZ2VTdGFydCAhPSBtX2VuZFRpbWVBdExhc3RQcm9j
ZXNzKQorICAgICAgICBtX3JlYWRDb3VudCA9IG1fd3JpdGVDb3VudDsKKworICAgIG1fc3RhcnRU
aW1lQXRMYXN0UHJvY2VzcyA9IHJhbmdlU3RhcnQ7CisgICAgbV9lbmRUaW1lQXRMYXN0UHJvY2Vz
cyA9IHJhbmdlU3RhcnQgKyByYW5nZUR1cmF0aW9uOworCisgICAgLy8gU3RhcnRPZlN0cmVhbSBp
bmRpY2F0ZXMgYSBkaXNjb250aW51aXR5LCBzdWNoIGFzIHdoZW4gYW4gQVZQbGF5ZXJJdGVtIGlz
IHJlLWFkZGVkCisgICAgLy8gdG8gYW4gQVZQbGF5ZXIsIHNvICJmbHVzaCIgb3V0c3RhbmRpbmcg
YnVmZmVycy4KKyAgICBpZiAoZmxhZ3NPdXQgJiYgKmZsYWdzT3V0ICYga01UQXVkaW9Qcm9jZXNz
aW5nVGFwRmxhZ19TdGFydE9mU3RyZWFtKQorICAgICAgICBtX3JlYWRDb3VudCA9IG1fd3JpdGVD
b3VudDsKKworICAgIG1fcmluZ0J1ZmZlci0+c3RvcmUoYnVmZmVyTGlzdEluT3V0LCBpdGVtQ291
bnQsIG1fd3JpdGVDb3VudCk7CisgICAgbV93cml0ZUNvdW50ICs9IGl0ZW1Db3VudDsKKworICAg
IC8vIE11dGUgdGhlIGRlZmF1bHQgYXVkaW8gcGxheWJhY2sgYnkgemVyb2luZyB0aGUgdGFwLW93
bmVkIGJ1ZmZlcnMuCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGJ1ZmZlckxpc3RJbk91
dC0+bU51bWJlckJ1ZmZlcnM7ICsraSkgeworICAgICAgICBBdWRpb0J1ZmZlciYgYnVmZmVyID0g
YnVmZmVyTGlzdEluT3V0LT5tQnVmZmVyc1tpXTsKKyAgICAgICAgbWVtc2V0KGJ1ZmZlci5tRGF0
YSwgMCwgYnVmZmVyLm1EYXRhQnl0ZVNpemUpOworICAgIH0KKyAgICAqbnVtYmVyRnJhbWVzT3V0
ID0gMDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElB
VE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAppbmRleCBmZjVmZTAxYmE0Yzc4NGE1NWUyNGNi
MmQ3NjNhZGZkNjhmOWEzNmRjLi5mYzBhZDA0MWM1YjdkNmNhYzAwNDcyMTQwNWZmOGM1YmQ1ZjE5
YTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCkBAIC02Miw2ICs2Miw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIEluYmFuZE1l
dGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRjsKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZPYmpDOworY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM7CiBjbGFzcyBBdWRpb1Ry
YWNrUHJpdmF0ZUFWRk9iakM7CiBjbGFzcyBWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakM7CiAKQEAg
LTIwOSw2ICsyMTAsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0QVZQbGF5ZXJJdGVtKEFW
UGxheWVySXRlbSAqKTsKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgdmlydHVhbCBBdWRp
b1NvdXJjZVByb3ZpZGVyKiBhdWRpb1NvdXJjZVByb3ZpZGVyKCk7CisjZW5kaWYKKwogICAgIHZv
aWQgY3JlYXRlSW1hZ2VHZW5lcmF0b3IoKTsKICAgICB2b2lkIGRlc3Ryb3lJbWFnZUdlbmVyYXRv
cigpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVJbWFnZUZvclRpbWVJblJlY3Qo
ZmxvYXQsIGNvbnN0IEludFJlY3QmKTsKQEAgLTI4OSw2ICsyOTQsMTAgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwogICAgIGJvb2wgbV9oYXZlQ2hlY2tlZFBsYXlh
YmlsaXR5OwogCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKKyAg
ICBSZWZQdHI8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM+IG1fcHJvdmlkZXI7CisjZW5kaWYK
KwogICAgIFJldGFpblB0cjxBVkFzc2V0SW1hZ2VHZW5lcmF0b3I+IG1faW1hZ2VHZW5lcmF0b3I7
CiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVklERU9fT1VUUFVUKQogICAgIFJldGFpblB0cjxBVlBs
YXllckl0ZW1WaWRlb091dHB1dD4gbV92aWRlb091dHB1dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1t
CmluZGV4IDhmMDgyMTEzZDViYzA0MDY2OGMxOTQ4NDg3YzU1ZTk3MDAwNzY0NjMuLjgyM2ZjMzdl
YzEwODhhNDM3MzNkZjE0NDZjZDQ4MTI1MGJmOWY1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5t
bQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5oIgogCiAjaW1wb3J0ICJBVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLmgiCisjaW1w
b3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIgogI2ltcG9ydCAiQXVkaW9UcmFja1By
aXZhdGVBVkZPYmpDLmgiCiAjaW1wb3J0ICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgogI2lt
cG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCkBAIC01MDAsNiArNTAxLDExIEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2FuY2VsTG9hZCgpCiAgICAgICAgIFt0cmFj
ayByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAiZW5hYmxl
ZCJdOwogICAgIG1fY2FjaGVkVHJhY2tzID0gbnVsbHB0cjsKIAorI2lmIEVOQUJMRShXRUJfQVVE
SU8pCisgICAgaWYgKG1fcHJvdmlkZXIpCisgICAgICAgIG1fcHJvdmlkZXItPnNldFBsYXllckl0
ZW0obnVsbHB0cik7CisjZW5kaWYKKwogICAgIHNldElnbm9yZUxvYWRTdGF0ZUNoYW5nZXMoZmFs
c2UpOwogfQogCkBAIC05MTAsNiArOTE2LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKCkKICAgICBbbV9hdlBsYXllckl0ZW0u
Z2V0KCkgYWRkT3V0cHV0Om1fbGVnaWJsZU91dHB1dC5nZXQoKV07CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShXRUJfQVVESU8pCisgICAgaWYgKG1fcHJvdmlkZXIpCisgICAgICAgIG1fcHJvdmlkZXIt
PnNldFBsYXllckl0ZW0obV9hdlBsYXllckl0ZW0uZ2V0KCkpOworI2VuZGlmCisKICAgICBzZXRE
ZWxheUNhbGxiYWNrcyhmYWxzZSk7CiB9CiAKQEAgLTE4MzksNiArMTg1MCwxNSBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFRleHRUcmFja1JlcHJlc2VudGF0
aW9uKFRleHRUcmFja1JlcAogfQogI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKIAorI2lm
IEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShNRURJQVRPT0xCT1gpCitBdWRpb1NvdXJjZVByb3Zp
ZGVyKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjphdWRpb1NvdXJjZVByb3Zp
ZGVyKCkKK3sKKyAgICBpZiAoIW1fcHJvdmlkZXIpCisgICAgICAgIG1fcHJvdmlkZXIgPSBBdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6Y3JlYXRlKG1fYXZQbGF5ZXJJdGVtLmdldCgpKTsKKyAg
ICByZXR1cm4gbV9wcm92aWRlci5nZXQoKTsKK30KKyNlbmRpZgorCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNpemVDaGFuZ2VkKCkKIHsKICAgICBpZiAoIW1fYXZB
c3NldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2lu
Zy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKaW5kZXggZDkx
YzE5NGViZWJhNDE3NjZmMWVlYmU0NmMxNjNjOWQ1ZDA2MmFiNC4uZGJlNThiNmZjMjgzMGE5MmEz
MGNlZDk1YmM2N2EzOWY1YTYwODA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1NvZnRMaW5raW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nv
ZnRMaW5raW5nLmgKQEAgLTExMCw3ICsxMTAsNiBAQAogICAgICAgICByZXR1cm4gc29mdExpbmsj
I2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgXAogICAgIH0KIAotI2lmIFBMQVRGT1JNKElP
UykKICNkZWZpbmUgU09GVF9MSU5LX01BWV9GQUlMKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCBy
ZXN1bHRUeXBlLCBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMsIHBhcmFtZXRlck5hbWVzKSBcCiAgICAg
c3RhdGljIHJlc3VsdFR5cGUgKCpzb2Z0TGluayMjZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNs
YXJhdGlvbnMgPSAwOyBcCiAgICAgXApAQCAtMTMyLDcgKzEzMSw2IEBACiAgICAgICAgIEFTU0VS
VChzb2Z0TGluayMjZnVuY3Rpb25OYW1lKTsgXAogICAgICAgICByZXR1cm4gc29mdExpbmsjI2Z1
bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgXAogICAgIH0KLSNlbmRpZgogCiAvKiBjYWxsaW5n
Q29udmVudGlvbiBpcyB1bnVzZWQgb24gTWFjIGJ1dCBpcyBoZXJlIHRvIGtlZXAgdGhlIG1hY3Jv
IHByb3RvdHlwZSB0aGUgc2FtZSBiZXR3ZWVuIE1hYyBhbmQgV2luZG93cy4gKi8KICNkZWZpbmUg
U09GVF9MSU5LX09QVElPTkFMKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBj
YWxsaW5nQ29udmVudGlvbiwgcGFyYW1ldGVyRGVjbGFyYXRpb25zKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237714</attachid>
            <date>2014-09-05 15:35:46 -0700</date>
            <delta_ts>2014-09-12 14:17:05 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-135042-20140905153541.patch</filename>
            <type>text/plain</type>
            <size>56914</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY1YTNlZTE0YjQxZGI5NDI4NWY5N2Y1
MGNlMmMwNzVhZTVlMjQyZGMuLjA5Yzg2NzEyMTBiNjFmZjcyMzRlNjJjMWUyMDQ1MDM3YzcxMjkz
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDktMDQgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10gU3VwcG9ydCBhdWRpb1NvdXJjZVByb3ZpZGVy
KCkgaW4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDQyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBXVEZf
VVNFX01FRElBVE9PTEJPWC4KKwogMjAxNC0wOC0yOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIEphdmFTY3JpcHRDb3JlOiBVc2UgQVNDSUlMaXRlcmFs
IHdoZXJlIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDMxYWFjODcxOGQ5ZjJhMGM2MDMyNzJmMTE5
MWQ3NjgyM2IyYjg2Ny4uZmI4YjM4ZTRiYWZhMzQxYjM5MTk4YTZlYjhmYmI2NTNlZDY5MzY5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDk0IEBACiAyMDE0LTA4LTI5ICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtNYWNdIFN1cHBvcnQgYXVkaW9Tb3VyY2VQcm92
aWRlcigpIGluIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTA0MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgQXVkaW9T
b3VyY2VQcm92aWRlciBpbiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLCB0aGVy
ZWJ5CisgICAgICAgIHN1cHBvcnRpbmcgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLgorCisg
ICAgICAgIEltcG9ydCB0aGUgQ0FSaW5nQnVmZmVyIGZyb20gQ29yZUF1ZGlvIHNhbXBsZSBjb2Rl
LCBtYWtpbmcgdGhlIG5lY2Vzc2FyeSBtb2RpZmljYXRpb25zCisgICAgICAgIGZvciBXZWJLaXQg
c3R5bGUgYW5kIGNvZGluZyBjb252ZW50aW9ucy4gVGhlIHRocmVhZGluZyBhc3N1bXB0aW9ucyBm
b3IgdGhpcyBjbGFzcyBhcmUKKyAgICAgICAgdGhhdCB0aGVyZSB3aWxsIGJlIGEgc2luZ2xlIHdy
aXRlciB0aHJlYWQgYW5kIGEgc2luZ2xlIHJlYWRlciB0aHJlYWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQVJpbmdCdWZmZXI6OmNyZWF0ZSk6IENyZWF0ZSBhIHVuaXF1ZV9wdHIuCisgICAgICAgIChX
ZWJDb3JlOjpDQVJpbmdCdWZmZXI6OkNBUmluZ0J1ZmZlcik6IFNpbXBsZSBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6fkNBUmluZ0J1ZmZlcik6IFNpbXBsZSBk
ZXN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjphbGxvY2F0ZSk6IElu
aXRpYWxpemUgdGhlIGJ1ZmZlcnMgYW5kIHRpbWUgYm91bmRzIHN0cnVjdHVyZXMuCisgICAgICAg
IChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmRlYWxsb2NhdGUpOiBEZXN0cm95IHNhbWUuCisgICAg
ICAgIChXZWJDb3JlOjpaZXJvUmFuZ2UpOiBTdGF0aWMgdXRpbGl0eSBtZXRob2QuCisgICAgICAg
IChXZWJDb3JlOjpTdG9yZUFCTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hBQkwp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Olplcm9BQkwpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNBUmluZ0J1ZmZlcjo6c3RvcmUpOiBTdG9yZSB0aGUgcGFzc2VkIGluIGJ1ZmZlciBp
biB0aGUgcmluZyBidWZmZXIsIHdyYXBwaW5nCisgICAgICAgICAgICBpZiBuZWNlc3NhcnkuCisg
ICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OnNldFRpbWVCb3VuZHMpOiBTZXQgdGhlIG5l
dyB0aW1lIGJvdW5kcyBieSBpbmNyZW1lbnRpbmcgdGhlCisgICAgICAgICAgICBib3VuZHMgaW5k
ZXggbG9jYWxseSwgZmlsbGluZyBpbiB0aGUgbmV3IHZhbHVlcywgdGhlbiBhdG9taWNhbGx5IGlu
Y3JlbWVudGluZyB0aGUKKyAgICAgICAgICAgIHJlYWRlci12aXNpYmxlIGluZGV4LgorICAgICAg
ICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpnZXRUaW1lQm91bmRzKTogR2V0IHRoZSBuZXcgdGlt
ZSBib3VuZHMgYnkgbWFza2luZyB0aGUgdGltZQorICAgICAgICAgICAgYm91bmRzIGluZGV4LCBh
bmQgdXNpbmcgaXQgYXMgYW4gb2Zmc2V0IHRvIHRoZSB0aW1lIGJvdW5kcyBhcnJheS4gUHJvdGVj
dCBhZ2FpbnN0CisgICAgICAgICAgICBDUFUgc3RhcnZhdGlvbiBvbiB0aGUgcmVhZGluZyB0aHJl
YWQgYnkgY2hlY2tpbmcgdGhlIGluZGV4IGFnYWluc3QgdGhlIHN0b3JlZAorICAgICAgICAgICAg
aW5kZXggaW4gdGhlIGFycmF5IGVudHJ5LiBUaGlzIGNoZWNrIHdpbGwgZmFpbCBpZiB0aGUgd3Jp
dGluZyB0aHJlYWQgaGFzIHdyYXBwZWQKKyAgICAgICAgICAgIG1vcmUgdGhhbiB0aGUgc2l6ZSBv
ZiB0aGUgYXJyYXkuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmNsaXBUaW1lQm91
bmRzKTogQ2xhbXAgdGhlIHBhc3NlZCB2YWx1ZXMgdG8gdGhlIGF2YWlsYWJsZSBib3VuZHMuCisg
ICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OnN0YXJ0RnJhbWUpOiBTaW1wbGUgYWNjZXNz
b3IuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmVuZEZyYW1lKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmZldGNoKTogUmVhZCBhbiBhdWRpbyBidWZm
ZXIgbGlzdCBmcm9tIHRoZSByaW5nIGJ1ZmZlciwgcG9zc2JpbHkKKyAgICAgICAgICAgIHdyYXBw
aW5nIGFyb3VuZCB0byB0aGUgc3RhcnQgb2YgdGhlIHJpbmcgYnVmZmVyLgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQVJpbmdCdWZmZXI6Om51bWJlck9mQ2hhbm5lbHMpOiBTaW1wbGUgYWNjZXNzb3IuCisgICAg
ICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmZyYW1lT2Zmc2V0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OlRpbWVCb3VuZHM6OlRpbWVCb3VuZHMpOiBTdHJ1Y3Qg
aG9sZGluZyB0aGUgc3RhcnQgYW5kIGVuZCBmcmFtZSB2YWx1ZXMuCisKKyAgICAgICAgQWRkIGFu
IGltcGxlbWVudGF0aW9uIG9mIEF1ZGlvU291cmNlUHJvdmlkZXIsIHVzaW5nIEFWQXVkaW9NaXgg
YW5kIE1UQXVkaW9Qcm9jZXNzaW5nVGFwCisgICAgICAgIHRvIHRhcCBhbiBBVlBsYXllckl0ZW0n
cyBhdWRpbyBvdXRwdXQgYW5kIGZlZWQgaXQgdG8gYSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGUpOiBTaW1wbGUg
ZmFjdG9yeS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyk6IFNpbXBsZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp+QXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakMpOiBTaW1wbGUgZGVzdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm92aWRlSW5wdXQpOiBQdXNoIGF1ZGlvIGludG8gdGhlIHJp
bmcgYnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6
OnNldENsaWVudCk6IENhbGwgZGVzdHJveU1peCgpL2NyZWF0ZU1peCgpIGFzIGFwcHJvcHJpYXRl
LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnNldFBsYXll
ckl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDOjpkZXN0cm95TWl4KTogRGV0YWNoIGFuZCBkZXN0cm95IHRoZSBBVkF1ZGlvTWl4IGFuZCB0
YXAuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6Y3JlYXRl
TWl4KTogU2V0IHVwIHRoZSBBVkF1ZGlvTWl4IGFuZCB0YXAgYW5kIGF0dGFjaCB0bworICAgICAg
ICAgICAgdGhlIEFWUGxheWVySXRlbS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOjppbml0Q2FsbGJhY2spOiBQYXNzIHRvIGNsYXNzIG1ldGhvZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5hbGl6ZUNhbGxiYWNr
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6
cHJlcGFyZUNhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQzo6dW5wcmVwYXJlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjppbml0KTogU2V0
IHVwIHRoZSBzdG9yYWdlIHBvaW50ZXIgZm9yIHRoZSB0YXAuCisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6ZmluYWxpemUpOiBOby1vcC4KKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOiBDb21wYXJlIHR3byBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24gb2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcmVwYXJlKTogQ3JlYXRl
IGFuIEF1ZGlvQ292ZXJ0ZXIgb2JqZWN0IGlmIG5lY2Vzc2FyeSwKKyAgICAgICAgICAgIGNyZWF0
ZSB0aGUgcmluZyBidWZmZXIsIGFuZCBub3RpZnkgdGhlIGNsaWVudCBvZiBmb3JtYXQgY2hhbmdl
cy4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp1bnByZXBh
cmUpOiBEZXN0cm95IHNhbWUuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQzo6cHJvY2Vzcyk6IENvcHkgc2FtcGxlcyBvdXQgb2YgdGhlIHJpbmcgYnVmZmVyLAor
ICAgICAgICAgICAgZm9ybWF0IGNvbnZlcnRpbmcgdGhlbSBpZiBuZWNlc3NhcnkuIE11dGUgb3Jp
Z2luYWwgYXVkaW8uCisKKyAgICAgICAgQ3JlYXRlIHRoZSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQyBvYmplY3QgYW5kIG5vdGlmeSBpdCB3aGVuIHRoZSBjdXJyZW50IEFWUGxheWVySXRlbSBj
aGFuZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVySXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjphdWRpb1NvdXJjZVByb3ZpZGVy
KToKKworICAgICAgICBFbmFibGUgU09GVF9MSU5LX01BWV9GQUlMIG9uIHRoZSBNYWMgcGxhdGZv
cm0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaDoKKworICAgICAgICBB
ZGQgbmV3IGZpbGVzIHRvIHRoZSBwcm9qZWN0LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCisyMDE0LTA4LTI5ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVA
YXBwbGUuY29tPgorCiAgICAgICAgIFtNU0VdIEFkZCBzZXR0aW5nIGZvciByZWxlYXNlLWJ1aWxk
IGxvZ2dpbmcgb2YgVmlkZW9QbGF5YmFja1F1YWxpdHkKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjM5OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCAzNTM5OTgy
ZTc2NDA1Y2FhZmU4ZGU0MDU5OWQxNjI3YTAzYTAwOGFjLi4xNDhmMDZjNmEzNzBlNzdjOWJmOGQy
YzY2NzBmYzI5ODAwMWUxYmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTEwNzEsNCArMTA3MSw4IEBACiAj
ZGVmaW5lIFRBUkdFVF9PU19JUEhPTkUgMAogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShDT0NPQSkgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDkwKQorI2RlZmluZSBXVEZfVVNFX01FRElBVE9PTEJPWCAxCisjZW5kaWYKKwogI2VuZGlmIC8q
IFdURl9QbGF0Zm9ybV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWJmNWE0OTg4OTM1ZTczNzQ5Njk2MWFhZTE3Njg0YjRj
OGQxMmUxNi4uY2U0YWE3NzU0M2QyOTZkODYxYWU5NWEzODljY2VhNWUyZGVjMWNjNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NTYzNiw2ICs1NjM2LDggQEAKIAkJQ0Q4MjAzMEQxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgyMDMwOTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLzsgfTsKIAkJQ0Q4MjAzMTAxMzk1
QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8qIFdl
YldpbmRvd0FuaW1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUNEODIwMzExMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRp
b24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgy
MDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovOyB9OworCQlD
RDhBN0JCQjE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhBN0JCOTE5
NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gKi87IH07CisJ
CUNEOEE3QkJDMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QTdCQkEx
OTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggKi87IH07CiAJ
CUNEOEI1QTQyMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEOEI1QTQwMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0Q4QjVBNDMxODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJh
Y2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCNUE0MTE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFj
a1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0Q4QjVBNDYxODBERkY0RTAw
OEI4RTY1IC8qIFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QjVBNDUxODBERkY0RTAwOEI4RTY1IC8qIFZpZGVv
VHJhY2tNZWRpYVNvdXJjZS5oICovOyB9OwpAQCAtNTY4MSw2ICs1NjgzLDggQEAKIAkJQ0RDNjlE
RDcxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OURENTE2MzIw
MjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSAqLzsgfTsKIAkJ
Q0RDNjlEREExNjM3MUZENDAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJW
aWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2
OUREODE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREM2
OUREQjE2MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OURE
OTE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0g
Ki87IH07CisJCUNEQzczNDE0MTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNzM0MTIxOTc3
ODk2QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5jcHAgKi87IH07CisJCUNEQzczNDE1MTk3Nzg5
NkQwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZm
ZXIuaCAqLzsgfTsKIAkJQ0RDOEI1QTIxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi87IH07CiAJCUNEQzhCNUEzMTgwNDYzNDcwMDE2
RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUExMTgwNDYzNDcwMDE2
RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJ
Q0RDOEI1QTYxODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBNDE4
MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAqLzsgfTsKQEAg
LTEzMDU4LDYgKzEzMDYyLDggQEAKIAkJQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2
QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDhBN0JCOTE5NzczNUZFMDBDQkQ2NDMgLyog
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q4QTdCQkExOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNE
OEI1QTQwMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFZpZGVvVHJh
Y2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOyBwYXRoID0gb2JqYy9WaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0Q4QjVBNDExODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFZpZGVvVHJhY2tQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHBhdGggPSBvYmpjL1ZpZGVvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOEI1QTQ0
MTgwREQ4RDYwMDhCOEU2NSAvKiBWaWRlb1RyYWNrTWVkaWFTb3VyY2UuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVv
VHJhY2tNZWRpYVNvdXJjZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzEz
Myw2ICsxMzEzOSw4IEBACiAJCUNEQzY5REQ1MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVs
bFNjcmVlbldhcm5pbmdWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0RDNjlERDgxNjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVu
UGxhY2Vob2xkZXJWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNv
cmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQzY5REQ5MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9s
ZGVyVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
cmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDREM3MzQxMjE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENBUmluZ0J1ZmZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdC
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0FSaW5nQnVmZmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAv
KiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMubW07IHBhdGggPSBvYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDOEI1QTExODA0NjM0NzAwMTZF
Njg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMuaDsgcGF0aCA9IG9iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzhCNUE0MTgwNDc0RjcwMDE2RTY4NSAv
KiBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbTsgcGF0aCA9IG9iamMv
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxNjIyLDYgKzIxNjMwLDggQEAKIAkJCQlDRDhCNUE0MDE4MEQxNDlBMDA4QjhFNjUgLyog
VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi8sCiAJCQkJQ0Q3RTA1MjAx
NjUxQTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCUNE
N0UwNTIxMTY1MUE4NDEwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0gKi8s
CisJCQkJQ0Q4QTdCQjkxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDLm1tICovLAorCQkJCUNEOEE3QkJBMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQy5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBvYmpjOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTIzMTM0LDYgKzIzMTQ0LDggQEAKIAkJCQlDRDU0REU0NTE3NDY4
QjZGMDA1RTVCMzYgLyogTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgKi8sCiAJCQkJQ0QyRjRB
MjUxOEQ4QTM0OTAwNjM3NDZEIC8qIEF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hYy5jcHAgKi8sCiAJ
CQkJQ0QyRjRBMjYxOEQ4QTM0OTAwNjM3NDZEIC8qIEF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hYy5o
ICovLAorCQkJCUNEQzczNDEyMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3BwICov
LAorCQkJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0MzU5
LDYgKzI0MzcxLDcgQEAKIAkJCQlBOEVBNzlGQTBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVj
dG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1
RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTc5RjcwQTE5MTZE
RjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQzcz
NDE1MTk3Nzg5NkQwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRjE5OEU1MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3N0IzODY3MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MRG9jdW1lbnRQYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzMzA5REU4MDk5RTY0OTIwMDU2RTU4MSAvKiBodG1sZWRpdGlu
Zy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTA0NCw2ICsyNTA1Nyw3IEBACiAJCQkJQjJGQTNEQTMw
QUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGVuZ3RoTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJGQTNEQTUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RBNzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdMaW5l
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q4QTdCQkMxOTc3MzVGRTAwQ0JENjQzIC8q
IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RB
OTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdNYXJrZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMkZBM0RBQjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdNYXNrRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjJGQTNEQUQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTWF0cml4Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTI5MzEwLDYgKzI5MzI0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVE
Q0ZGMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1
MzkwNDYwRUFGRDYzNzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJQ0Q4QTdCQkIxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUIxRDMwRkY1OTg2OTAwNTc2
QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUQxNjhFNzEwMjI2
RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTFCNzg0MjAxNjM5Q0JCRTAwMDdCNjkyIC8qIFNoYXJlZFdvcmtlclJlcG9zaXRvcnku
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTQ3NSw2ICsyOTQ5MCw3IEBACiAJCQkJQjIyMjc5QTQw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QjA1MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdCMDYw
RDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlD
REM3MzQxNDE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyMjI3QjA4MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NTdHlsZVNlbGVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUE3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDdXJz
b3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUFEMEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdEZWZzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJk
ODNhYjc4ZWNhOWQ2ZGZkOTFmODBiNWMxZThjNzU3ZGU4OTg4OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwCkBAIC0w
LDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNBUmluZ0J1ZmZlci5oIgorCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+
CisjaW5jbHVkZSA8bGlia2Vybi9PU0F0b21pYy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisKK2NvbnN0IHVpbnQzMl90IGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZVNpemUgPSAz
MjsKK2NvbnN0IHVpbnQzMl90IGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2sgPSBrR2Vu
ZXJhbFJpbmdUaW1lQm91bmRzUXVldWVTaXplIC0gMTsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGQ6OnVuaXF1ZV9wdHI8Q0FSaW5nQnVmZmVyPiBDQVJpbmdCdWZmZXI6OmNyZWF0ZSgpCit7
CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDQVJpbmdCdWZmZXI+KG5ldyBDQVJpbmdCdWZm
ZXIoKSk7Cit9CisKK0NBUmluZ0J1ZmZlcjo6Q0FSaW5nQnVmZmVyKCkKKyAgICA6IG1fY2hhbm5l
bENvdW50KDApCisgICAgLCBtX2ZyYW1lQ291bnQoMCkKKyAgICAsIG1fY2FwYWNpdHlCeXRlcygw
KQorICAgICwgbV90aW1lQm91bmRzUXVldWUoa0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlU2l6
ZSkKKyAgICAsIG1fdGltZUJvdW5kc1F1ZXVlUHRyKDApCit7Cit9CisKK0NBUmluZ0J1ZmZlcjo6
fkNBUmluZ0J1ZmZlcigpCit7CisgICAgZGVhbGxvY2F0ZSgpOworfQorCit2b2lkIENBUmluZ0J1
ZmZlcjo6YWxsb2NhdGUodWludDMyX3QgY2hhbm5lbENvdW50LCBzaXplX3QgYnl0ZXNQZXJGcmFt
ZSwgc2l6ZV90IGZyYW1lQ291bnQpCit7CisgICAgZGVhbGxvY2F0ZSgpOworCisgICAgZnJhbWVD
b3VudCA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhmcmFtZUNvdW50KTsKKworICAgIG1fY2hh
bm5lbENvdW50ID0gY2hhbm5lbENvdW50OworICAgIG1fYnl0ZXNQZXJGcmFtZSA9IGJ5dGVzUGVy
RnJhbWU7CisgICAgbV9mcmFtZUNvdW50ID0gZnJhbWVDb3VudDsKKyAgICBtX2ZyYW1lQ291bnRN
YXNrID0gZnJhbWVDb3VudCAtIDE7CisgICAgbV9jYXBhY2l0eUJ5dGVzID0gYnl0ZXNQZXJGcmFt
ZSAqIGZyYW1lQ291bnQ7CisKKyAgICBzaXplX3QgcG9pbnRlcnNTaXplID0gY2hhbm5lbENvdW50
ICogc2l6ZW9mKEJ5dGUqKTsKKyAgICBzaXplX3QgYWxsb2NTaXplID0gcG9pbnRlcnNTaXplICsg
KG1fY2FwYWNpdHlCeXRlcyAqIGNoYW5uZWxDb3VudCk7CisgICAgbV9idWZmZXJzID0gQXJyYXlC
dWZmZXI6OmNyZWF0ZShhbGxvY1NpemUsIDEpOworCisgICAgQnl0ZSoqIHBvaW50ZXJzID0gc3Rh
dGljX2Nhc3Q8Qnl0ZSoqPihtX2J1ZmZlcnMtPmRhdGEoKSk7CisgICAgQnl0ZSogY2hhbm5lbERh
dGEgPSBzdGF0aWNfY2FzdDxCeXRlKj4obV9idWZmZXJzLT5kYXRhKCkpICsgcG9pbnRlcnNTaXpl
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYW5uZWxDb3VudDsgKytpKSB7Cisg
ICAgICAgIHBvaW50ZXJzW2ldID0gY2hhbm5lbERhdGE7CisgICAgICAgIGNoYW5uZWxEYXRhICs9
IG1fY2FwYWNpdHlCeXRlczsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gdGltZUJvdW5kcyA6IG1f
dGltZUJvdW5kc1F1ZXVlKSB7CisgICAgICAgIHRpbWVCb3VuZHMubV9zdGFydEZyYW1lID0gMDsK
KyAgICAgICAgdGltZUJvdW5kcy5tX2VuZEZyYW1lID0gMDsKKyAgICAgICAgdGltZUJvdW5kcy5t
X3VwZGF0ZUNvdW50ZXIgPSAwOworICAgIH0KKyAgICBtX3RpbWVCb3VuZHNRdWV1ZVB0ciA9IDA7
Cit9CisKK3ZvaWQgQ0FSaW5nQnVmZmVyOjpkZWFsbG9jYXRlKCkKK3sKKyAgICBpZiAobV9idWZm
ZXJzKQorICAgICAgICBtX2J1ZmZlcnMuY2xlYXIoKTsKKworICAgIG1fY2hhbm5lbENvdW50ID0g
MDsKKyAgICBtX2NhcGFjaXR5Qnl0ZXMgPSAwOworICAgIG1fZnJhbWVDb3VudCA9IDA7Cit9CisK
K3N0YXRpYyB2b2lkIFplcm9SYW5nZShCeXRlKiogYnVmZmVycywgaW50IGNoYW5uZWxDb3VudCwg
c2l6ZV90IG9mZnNldCwgc2l6ZV90IG5ieXRlcykKK3sKKyAgICB3aGlsZSAoLS1jaGFubmVsQ291
bnQgPj0gMCkgeworICAgICAgICBtZW1zZXQoKmJ1ZmZlcnMgKyBvZmZzZXQsIDAsIG5ieXRlcyk7
CisgICAgICAgICsrYnVmZmVyczsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIFN0b3JlQUJMKEJ5
dGUqKiBidWZmZXJzLCBzaXplX3QgZGVzdE9mZnNldCwgY29uc3QgQXVkaW9CdWZmZXJMaXN0KiBs
aXN0LCBzaXplX3Qgc3JjT2Zmc2V0LCBzaXplX3QgbmJ5dGVzKQoreworICAgIGludCBjaGFubmVs
Q291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKKyAgICBjb25zdCBBdWRpb0J1ZmZlciogc3Jj
ID0gbGlzdC0+bUJ1ZmZlcnM7CisgICAgd2hpbGUgKC0tY2hhbm5lbENvdW50ID49IDApIHsKKyAg
ICAgICAgaWYgKHNyY09mZnNldCA+IHNyYy0+bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBtZW1jcHkoKmJ1ZmZlcnMgKyBkZXN0T2Zmc2V0LCBzdGF0aWNfY2Fz
dDxCeXRlKj4oc3JjLT5tRGF0YSkgKyBzcmNPZmZzZXQsIHN0ZDo6bWluPHNpemVfdD4obmJ5dGVz
LCBzcmMtPm1EYXRhQnl0ZVNpemUgLSBzcmNPZmZzZXQpKTsKKyAgICAgICAgKytidWZmZXJzOwor
ICAgICAgICArK3NyYzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZldGNoQUJMKEF1ZGlvQnVm
ZmVyTGlzdCogbGlzdCwgc2l6ZV90IGRlc3RPZmZzZXQsIEJ5dGUqKiBidWZmZXJzLCBzaXplX3Qg
c3JjT2Zmc2V0LCBzaXplX3QgbmJ5dGVzKQoreworICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0
LT5tTnVtYmVyQnVmZmVyczsKKyAgICBBdWRpb0J1ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJz
OworICAgIHdoaWxlICgtLWNoYW5uZWxDb3VudCA+PSAwKSB7CisgICAgICAgIGlmIChkZXN0T2Zm
c2V0ID4gZGVzdC0+bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBtZW1jcHkoc3RhdGljX2Nhc3Q8Qnl0ZSo+KGRlc3QtPm1EYXRhKSArIGRlc3RPZmZzZXQsICpi
dWZmZXJzICsgc3JjT2Zmc2V0LCBzdGQ6Om1pbjxzaXplX3Q+KG5ieXRlcywgZGVzdC0+bURhdGFC
eXRlU2l6ZSAtIGRlc3RPZmZzZXQpKTsKKyAgICAgICAgKytidWZmZXJzOworICAgICAgICArK2Rl
c3Q7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBaZXJvQUJMKEF1ZGlvQnVmZmVyTGlzdCogbGlz
dCwgc2l6ZV90IGRlc3RPZmZzZXQsIHNpemVfdCBuYnl0ZXMpCit7CisgICAgaW50IG5CdWZmZXJz
ID0gbGlzdC0+bU51bWJlckJ1ZmZlcnM7CisgICAgQXVkaW9CdWZmZXIqIGRlc3QgPSBsaXN0LT5t
QnVmZmVyczsKKyAgICB3aGlsZSAoLS1uQnVmZmVycyA+PSAwKSB7CisgICAgICAgIGlmIChkZXN0
T2Zmc2V0ID4gZGVzdC0+bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8Qnl0ZSo+KGRlc3QtPm1EYXRhKSArIGRlc3RPZmZzZXQs
IDAsIHN0ZDo6bWluPHNpemVfdD4obmJ5dGVzLCBkZXN0LT5tRGF0YUJ5dGVTaXplIC0gZGVzdE9m
ZnNldCkpOworICAgICAgICArK2Rlc3Q7CisgICAgfQorfQorCitDQVJpbmdCdWZmZXI6OkVycm9y
IENBUmluZ0J1ZmZlcjo6c3RvcmUoY29uc3QgQXVkaW9CdWZmZXJMaXN0KiBsaXN0LCBzaXplX3Qg
ZnJhbWVzVG9Xcml0ZSwgdWludDY0X3Qgc3RhcnRGcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lc1Rv
V3JpdGUpCisgICAgICAgIHJldHVybiBPazsKKworICAgIGlmIChmcmFtZXNUb1dyaXRlID4gbV9m
cmFtZUNvdW50KQorICAgICAgICByZXR1cm4gVG9vTXVjaDsKKworICAgIHVpbnQ2NF90IGVuZEZy
YW1lID0gc3RhcnRGcmFtZSArIGZyYW1lc1RvV3JpdGU7CisKKyAgICBpZiAoc3RhcnRGcmFtZSA8
IGN1cnJlbnRFbmRGcmFtZSgpKSB7CisgICAgICAgIC8vIFRocm93IGV2ZXJ5dGhpbmcgb3V0IHdo
ZW4gZ29pbmcgYmFja3dhcmRzLgorICAgICAgICBzZXRDdXJyZW50RnJhbWVCb3VuZHMoc3RhcnRG
cmFtZSwgc3RhcnRGcmFtZSk7CisgICAgfSBlbHNlIGlmIChlbmRGcmFtZSAtIGN1cnJlbnRTdGFy
dEZyYW1lKCkgPD0gbV9mcmFtZUNvdW50KSB7CisgICAgICAgIC8vIFRoZSBidWZmZXIgaGFzIG5v
dCB5ZXQgd3JhcHBlZCBhbmQgd2lsbCBub3QgbmVlZCB0by4KKyAgICAgICAgLy8gTm8tb3AuCisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQWR2YW5jZSB0aGUgc3RhcnQgdGltZSBwYXN0IHRoZSBy
ZWdpb24gd2UgYXJlIGFib3V0IHRvIG92ZXJ3cml0ZQorICAgICAgICAvLyBzdGFydGluZyBvbmUg
YnVmZmVyIG9mIHRpbWUgYmVoaW5kIHdoZXJlIHdlJ3JlIHdyaXRpbmcuCisgICAgICAgIHVpbnQ2
NF90IG5ld1N0YXJ0RnJhbWUgPSBlbmRGcmFtZSAtIG1fZnJhbWVDb3VudDsKKyAgICAgICAgdWlu
dDY0X3QgbmV3RW5kRnJhbWUgPSBzdGQ6Om1heChuZXdTdGFydEZyYW1lLCBjdXJyZW50RW5kRnJh
bWUoKSk7CisgICAgICAgIHNldEN1cnJlbnRGcmFtZUJvdW5kcyhuZXdTdGFydEZyYW1lLCBuZXdF
bmRGcmFtZSk7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIG5ldyBmcmFtZXMuCisgICAgQnl0
ZSoqIGJ1ZmZlcnMgPSBzdGF0aWNfY2FzdDxCeXRlKio+KG1fYnVmZmVycy0+ZGF0YSgpKTsKKyAg
ICBzaXplX3Qgb2Zmc2V0MDsKKyAgICBzaXplX3Qgb2Zmc2V0MTsKKyAgICB1aW50NjRfdCBjdXJF
bmQgPSBjdXJyZW50RW5kRnJhbWUoKTsKKworICAgIGlmIChzdGFydEZyYW1lID4gY3VyRW5kKSB7
CisgICAgICAgIC8vIFdlIGFyZSBza2lwcGluZyBzb21lIHNhbXBsZXMsIHNvIHplcm8gdGhlIHJh
bmdlIHdlIGFyZSBza2lwcGluZy4KKyAgICAgICAgb2Zmc2V0MCA9IGZyYW1lT2Zmc2V0KGN1ckVu
ZCk7CisgICAgICAgIG9mZnNldDEgPSBmcmFtZU9mZnNldChzdGFydEZyYW1lKTsKKyAgICAgICAg
aWYgKG9mZnNldDAgPCBvZmZzZXQxKQorICAgICAgICAgICAgWmVyb1JhbmdlKGJ1ZmZlcnMsIG1f
Y2hhbm5lbENvdW50LCBvZmZzZXQwLCBvZmZzZXQxIC0gb2Zmc2V0MCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgWmVyb1JhbmdlKGJ1ZmZlcnMsIG1fY2hhbm5lbENvdW50LCBvZmZzZXQw
LCBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwKTsKKyAgICAgICAgICAgIFplcm9SYW5nZShidWZm
ZXJzLCBtX2NoYW5uZWxDb3VudCwgMCwgb2Zmc2V0MSk7CisgICAgICAgIH0KKyAgICAgICAgb2Zm
c2V0MCA9IG9mZnNldDE7CisgICAgfSBlbHNlCisgICAgICAgIG9mZnNldDAgPSBmcmFtZU9mZnNl
dChzdGFydEZyYW1lKTsKKworICAgIG9mZnNldDEgPSBmcmFtZU9mZnNldChlbmRGcmFtZSk7Cisg
ICAgaWYgKG9mZnNldDAgPCBvZmZzZXQxKQorICAgICAgICBTdG9yZUFCTChidWZmZXJzLCBvZmZz
ZXQwLCBsaXN0LCAwLCBvZmZzZXQxIC0gb2Zmc2V0MCk7CisgICAgZWxzZSB7CisgICAgICAgIHNp
emVfdCBuYnl0ZXMgPSBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwOworICAgICAgICBTdG9yZUFC
TChidWZmZXJzLCBvZmZzZXQwLCBsaXN0LCAwLCBuYnl0ZXMpOworICAgICAgICBTdG9yZUFCTChi
dWZmZXJzLCAwLCBsaXN0LCBuYnl0ZXMsIG9mZnNldDEpOworICAgIH0KKworICAgIC8vIE5vdyB1
cGRhdGUgdGhlIGVuZCB0aW1lLgorICAgIHNldEN1cnJlbnRGcmFtZUJvdW5kcyhjdXJyZW50U3Rh
cnRGcmFtZSgpLCBlbmRGcmFtZSk7CisKKyAgICByZXR1cm4gT2s7Cit9CisKK3ZvaWQgQ0FSaW5n
QnVmZmVyOjpzZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3Qgc3RhcnRUaW1lLCB1aW50NjRf
dCBlbmRUaW1lKQoreworICAgIEJ5dGVTcGluTG9ja2VyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJv
dW5kc0xvY2spOworICAgIHVpbnQzMl90IG5leHRQdHIgPSBtX3RpbWVCb3VuZHNRdWV1ZVB0ciAr
IDE7CisgICAgdWludDMyX3QgaW5kZXggPSBuZXh0UHRyICYga0dlbmVyYWxSaW5nVGltZUJvdW5k
c1F1ZXVlTWFzazsKKworICAgIG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX3N0YXJ0RnJhbWUg
PSBzdGFydFRpbWU7CisgICAgbV90aW1lQm91bmRzUXVldWVbaW5kZXhdLm1fZW5kRnJhbWUgPSBl
bmRUaW1lOworICAgIG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX3VwZGF0ZUNvdW50ZXIgPSBu
ZXh0UHRyOworICAgIE9TQXRvbWljSW5jcmVtZW50MzJCYXJyaWVyKHN0YXRpY19jYXN0PGludDMy
X3QqPigmbV90aW1lQm91bmRzUXVldWVQdHIpKTsKK30KKwordm9pZCBDQVJpbmdCdWZmZXI6Omdl
dEN1cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCAmc3RhcnRUaW1lLCB1aW50NjRfdCAmZW5kVGlt
ZSkKK3sKKyAgICBCeXRlU3BpbkxvY2tlciBsb2NrZXIobV9jdXJyZW50RnJhbWVCb3VuZHNMb2Nr
KTsKKyAgICB1aW50MzJfdCBjdXJQdHIgPSBtX3RpbWVCb3VuZHNRdWV1ZVB0cjsKKyAgICB1aW50
MzJfdCBpbmRleCA9IGN1clB0ciAmIGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2s7Cisg
ICAgQ0FSaW5nQnVmZmVyOjpUaW1lQm91bmRzJiBib3VuZHMgPSBtX3RpbWVCb3VuZHNRdWV1ZVtp
bmRleF07CisKKyAgICBzdGFydFRpbWUgPSBib3VuZHMubV9zdGFydEZyYW1lOworICAgIGVuZFRp
bWUgPSBib3VuZHMubV9lbmRGcmFtZTsKK30KKwordm9pZCBDQVJpbmdCdWZmZXI6OmNsaXBUaW1l
Qm91bmRzKHVpbnQ2NF90JiBzdGFydFJlYWQsIHVpbnQ2NF90JiBlbmRSZWFkKQoreworICAgIHVp
bnQ2NF90IHN0YXJ0VGltZTsKKyAgICB1aW50NjRfdCBlbmRUaW1lOworCisgICAgZ2V0Q3VycmVu
dEZyYW1lQm91bmRzKHN0YXJ0VGltZSwgZW5kVGltZSk7CisKKyAgICBpZiAoc3RhcnRSZWFkID4g
ZW5kVGltZSB8fCBlbmRSZWFkIDwgc3RhcnRUaW1lKSB7CisgICAgICAgIGVuZFJlYWQgPSBzdGFy
dFJlYWQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGFydFJlYWQgPSBzdGQ6Om1h
eChzdGFydFJlYWQsIHN0YXJ0VGltZSk7CisgICAgZW5kUmVhZCA9IHN0ZDo6bWluKGVuZFJlYWQs
IGVuZFRpbWUpOworICAgIGVuZFJlYWQgPSBzdGQ6Om1heChlbmRSZWFkLCBzdGFydFJlYWQpOwor
fQorCit1aW50NjRfdCBDQVJpbmdCdWZmZXI6OmN1cnJlbnRTdGFydEZyYW1lKCkgY29uc3QKK3sK
KyAgICB1aW50MzJfdCBpbmRleCA9IG1fdGltZUJvdW5kc1F1ZXVlUHRyICYga0dlbmVyYWxSaW5n
VGltZUJvdW5kc1F1ZXVlTWFzazsKKyAgICByZXR1cm4gbV90aW1lQm91bmRzUXVldWVbaW5kZXhd
Lm1fc3RhcnRGcmFtZTsKK30KKwordWludDY0X3QgQ0FSaW5nQnVmZmVyOjpjdXJyZW50RW5kRnJh
bWUoKSBjb25zdAoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV90aW1lQm91bmRzUXVldWVQdHIg
JiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVNYXNrOworICAgIHJldHVybiBtX3RpbWVCb3Vu
ZHNRdWV1ZVtpbmRleF0ubV9lbmRGcmFtZTsKK30KKworQ0FSaW5nQnVmZmVyOjpFcnJvciBDQVJp
bmdCdWZmZXI6OmZldGNoKEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IG5GcmFtZXMsIHVp
bnQ2NF90IHN0YXJ0UmVhZCkKK3sKKyAgICBpZiAoIW5GcmFtZXMpCisgICAgICAgIHJldHVybiBP
azsKKyAgICAKKyAgICBzdGFydFJlYWQgPSBzdGQ6Om1heDx1aW50NjRfdD4oMCwgc3RhcnRSZWFk
KTsKKyAgICAKKyAgICB1aW50NjRfdCBlbmRSZWFkID0gc3RhcnRSZWFkICsgbkZyYW1lczsKKyAg
ICAKKyAgICB1aW50NjRfdCBzdGFydFJlYWQwID0gc3RhcnRSZWFkOworICAgIHVpbnQ2NF90IGVu
ZFJlYWQwID0gZW5kUmVhZDsKKyAgICAKKyAgICBjbGlwVGltZUJvdW5kcyhzdGFydFJlYWQsIGVu
ZFJlYWQpOworCisgICAgaWYgKHN0YXJ0UmVhZCA9PSBlbmRSZWFkKSB7CisgICAgICAgIFplcm9B
QkwobGlzdCwgMCwgbkZyYW1lcyAqIG1fYnl0ZXNQZXJGcmFtZSk7CisgICAgICAgIHJldHVybiBP
azsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGJ5dGVTaXplID0gKGVuZFJlYWQgLSBzdGFydFJl
YWQpICogbV9ieXRlc1BlckZyYW1lOworICAgIAorICAgIHNpemVfdCBkZXN0U3RhcnRCeXRlT2Zm
c2V0ID0gc3RkOjptYXg8c2l6ZV90PigwLCAoc3RhcnRSZWFkIC0gc3RhcnRSZWFkMCkgKiBtX2J5
dGVzUGVyRnJhbWUpOworICAgIAorICAgIGlmIChkZXN0U3RhcnRCeXRlT2Zmc2V0ID4gMCkKKyAg
ICAgICAgWmVyb0FCTChsaXN0LCAwLCBzdGQ6Om1pbjxzaXplX3Q+KG5GcmFtZXMgKiBtX2J5dGVz
UGVyRnJhbWUsIGRlc3RTdGFydEJ5dGVPZmZzZXQpKTsKKworICAgIHNpemVfdCBkZXN0RW5kU2l6
ZSA9IHN0ZDo6bWF4PHNpemVfdD4oMCwgZW5kUmVhZDAgLSBlbmRSZWFkKTsKKyAgICBpZiAoZGVz
dEVuZFNpemUgPiAwKQorICAgICAgICBaZXJvQUJMKGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQg
KyBieXRlU2l6ZSwgZGVzdEVuZFNpemUgKiBtX2J5dGVzUGVyRnJhbWUpOworCisgICAgQnl0ZSAq
KmJ1ZmZlcnMgPSBzdGF0aWNfY2FzdDxCeXRlKio+KG1fYnVmZmVycy0+ZGF0YSgpKTsKKyAgICBz
aXplX3Qgb2Zmc2V0MCA9IGZyYW1lT2Zmc2V0KHN0YXJ0UmVhZCk7CisgICAgc2l6ZV90IG9mZnNl
dDEgPSBmcmFtZU9mZnNldChlbmRSZWFkKTsKKyAgICBzaXplX3QgbmJ5dGVzOworICAgIAorICAg
IGlmIChvZmZzZXQwIDwgb2Zmc2V0MSkgeworICAgICAgICBuYnl0ZXMgPSBvZmZzZXQxIC0gb2Zm
c2V0MDsKKyAgICAgICAgRmV0Y2hBQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCwgYnVmZmVy
cywgb2Zmc2V0MCwgbmJ5dGVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBuYnl0ZXMgPSBtX2Nh
cGFjaXR5Qnl0ZXMgLSBvZmZzZXQwOworICAgICAgICBGZXRjaEFCTChsaXN0LCBkZXN0U3RhcnRC
eXRlT2Zmc2V0LCBidWZmZXJzLCBvZmZzZXQwLCBuYnl0ZXMpOworICAgICAgICBGZXRjaEFCTChs
aXN0LCBkZXN0U3RhcnRCeXRlT2Zmc2V0ICsgbmJ5dGVzLCBidWZmZXJzLCAwLCBvZmZzZXQxKTsK
KyAgICAgICAgbmJ5dGVzICs9IG9mZnNldDE7CisgICAgfQorICAgIAorICAgIGludCBjaGFubmVs
Q291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKKyAgICBBdWRpb0J1ZmZlciogZGVzdCA9IGxp
c3QtPm1CdWZmZXJzOworICAgIHdoaWxlICgtLWNoYW5uZWxDb3VudCA+PSAwKSB7CisgICAgICAg
IGRlc3QtPm1EYXRhQnl0ZVNpemUgPSBuYnl0ZXM7CisgICAgICAgIGRlc3QrKzsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIE9rOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ5YjA1MjRhY2FhZTAzM2Iy
ZDAxYjExNDBmOWRlZjkzOTVlYjQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaApAQCAtMCwwICsxLDk0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDQVJpbmdCdWZmZXJfaAorI2RlZmluZSBDQVJpbmdCdWZmZXJfaAor
CisjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9CeXRlU3Bp
bkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3R5cGVkZWYgc3RydWN0IEF1ZGlv
QnVmZmVyTGlzdCBBdWRpb0J1ZmZlckxpc3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ0FSaW5nQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENB
UmluZ0J1ZmZlcj4gY3JlYXRlKCk7CisgICAgfkNBUmluZ0J1ZmZlcigpOworCisgICAgZW51bSBF
cnJvciB7CisgICAgICAgIE9rLAorICAgICAgICBUb29NdWNoLCAvLyBmZXRjaCBzdGFydCB0aW1l
IGlzIGVhcmxpZXIgdGhhbiBidWZmZXIgc3RhcnQgdGltZSBhbmQgZmV0Y2ggZW5kIHRpbWUgaXMg
bGF0ZXIgdGhhbiBidWZmZXIgZW5kIHRpbWUKKyAgICAgICAgQ1BVT3ZlcmxvYWQsIC8vIHRoZSBy
ZWFkZXIgaXMgdW5hYmxlIHRvIGdldCBlbm91Z2ggQ1BVIGN5Y2xlcyB0byBjYXB0dXJlIGEgY29u
c2lzdGVudCBzbmFwc2hvdCBvZiB0aGUgdGltZSBib3VuZHMKKyAgICB9OworCisgICAgdm9pZCBh
bGxvY2F0ZSh1aW50MzJfdCBtX2NoYW5uZWxDb3VudCwgc2l6ZV90IGJ5dGVzUGVyRnJhbWUsIHNp
emVfdCBmcmFtZUNvdW50KTsKKyAgICB2b2lkIGRlYWxsb2NhdGUoKTsKKyAgICBFcnJvciBzdG9y
ZShjb25zdCBBdWRpb0J1ZmZlckxpc3QqLCBzaXplX3QgZnJhbWVDb3VudCwgdWludDY0X3Qgc3Rh
cnRGcmFtZSk7CisgICAgRXJyb3IgZmV0Y2goQXVkaW9CdWZmZXJMaXN0Kiwgc2l6ZV90IGZyYW1l
Q291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUpOworICAgIHZvaWQgZ2V0Q3VycmVudEZyYW1lQm91
bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1lKTsKKworICAgIHVpbnQz
Ml90IGNoYW5uZWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5lbENvdW50OyB9CisKK3By
aXZhdGU6CisgICAgQ0FSaW5nQnVmZmVyKCk7CisKKyAgICBzaXplX3QgZnJhbWVPZmZzZXQodWlu
dDY0X3QgZnJhbWVOdW1iZXIpIHsgcmV0dXJuIChmcmFtZU51bWJlciAmIG1fZnJhbWVDb3VudE1h
c2spICogbV9ieXRlc1BlckZyYW1lOyB9CisKKyAgICB2b2lkIGNsaXBUaW1lQm91bmRzKHVpbnQ2
NF90JiBzdGFydFJlYWQsIHVpbnQ2NF90JiBlbmRSZWFkKTsKKworICAgIHVpbnQ2NF90IGN1cnJl
bnRTdGFydEZyYW1lKCkgY29uc3Q7CisgICAgdWludDY0X3QgY3VycmVudEVuZEZyYW1lKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3Qgc3RhcnRGcmFtZSwg
dWludDY0X3QgZW5kRnJhbWUpOworCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcnM7
CisgICAgdWludDMyX3QgbV9jaGFubmVsQ291bnQ7CisgICAgc2l6ZV90IG1fYnl0ZXNQZXJGcmFt
ZTsKKyAgICB1aW50MzJfdCBtX2ZyYW1lQ291bnQ7CisgICAgdWludDMyX3QgbV9mcmFtZUNvdW50
TWFzazsKKyAgICBzaXplX3QgbV9jYXBhY2l0eUJ5dGVzOworCisgICAgc3RydWN0IFRpbWVCb3Vu
ZHMgeworICAgICAgICBUaW1lQm91bmRzKCkKKyAgICAgICAgICAgIDogbV9zdGFydEZyYW1lKDAp
CisgICAgICAgICAgICAsIG1fZW5kRnJhbWUoMCkKKyAgICAgICAgICAgICwgbV91cGRhdGVDb3Vu
dGVyKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB2b2xhdGlsZSB1aW50NjRfdCBt
X3N0YXJ0RnJhbWU7CisgICAgICAgIHZvbGF0aWxlIHVpbnQ2NF90IG1fZW5kRnJhbWU7CisgICAg
ICAgIHZvbGF0aWxlIHVpbnQzMl90IG1fdXBkYXRlQ291bnRlcjsKKyAgICB9OworICAgIAorICAg
IFZlY3RvcjxUaW1lQm91bmRzPiBtX3RpbWVCb3VuZHNRdWV1ZTsKKyAgICBCeXRlU3BpbkxvY2sg
bV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrOworICAgIGludDMyX3QgbV90aW1lQm91bmRzUXVldWVQ
dHI7Cit9OworCit9CisKKworI2VuZGlmIC8vIENBUmluZ0J1ZmZlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhNmZmOTI5
OWYwMTgzZWMxNzA5YmI5NjIwNmRiYTJhYmY3OGQzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakMuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQXVkaW9T
b3VyY2VQcm92aWRlckFWRk9iakNfaAorI2RlZmluZSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Q19oCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBVU0UoTUVESUFUT09MQk9YKQorCisjaW5j
bHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgQVZQbGF5ZXJJdGVtOworT0JK
Q19DTEFTUyBBVk11dGFibGVBdWRpb01peDsKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVl
TVRBdWRpb1Byb2Nlc3NpbmdUYXAgKk1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmOwordHlwZWRlZiBz
dHJ1Y3QgQXVkaW9CdWZmZXJMaXN0IEF1ZGlvQnVmZmVyTGlzdDsKK3R5cGVkZWYgc3RydWN0IEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb247Cit0
eXBlZGVmIHN0cnVjdCBPcGFxdWVBdWRpb0NvbnZlcnRlciogQXVkaW9Db252ZXJ0ZXJSZWY7Cit0
eXBlZGVmIHVpbnQzMl90IE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3M7Cit0eXBlZGVmIHNpZ25l
ZCBsb25nIENNSXRlbUNvdW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENBUmlu
Z0J1ZmZlcjsKKworY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMgOiBwdWJsaWMgUmVm
Q291bnRlZDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQz4sIHB1YmxpYyBBdWRpb1NvdXJjZVBy
b3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQz4gY3JlYXRlKEFWUGxheWVySXRlbSopOworICAgIHZpcnR1YWwgfkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDKCk7CisKKyAgICB2b2lkIHNldFBsYXllckl0ZW0oQVZQbGF5ZXJJ
dGVtICopOworCitwcml2YXRlOgorICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKEFWUGxh
eWVySXRlbSAqKTsKKworICAgIHZvaWQgZGVzdHJveU1peCgpOworICAgIHZvaWQgY3JlYXRlTWl4
KCk7CisKKyAgICAvLyBBdWRpb1NvdXJjZVByb3ZpZGVyCisgICAgdmlydHVhbCB2b2lkIHByb3Zp
ZGVJbnB1dChBdWRpb0J1cyosIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCopIG92ZXJy
aWRlOworCisgICAgc3RhdGljIHZvaWQgaW5pdENhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFw
UmVmLCB2b2lkKiwgdm9pZCoqKTsKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZUNhbGxiYWNrKE1U
QXVkaW9Qcm9jZXNzaW5nVGFwUmVmKTsKKyAgICBzdGF0aWMgdm9pZCBwcmVwYXJlQ2FsbGJhY2so
TVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYsIENNSXRlbUNvdW50LCBjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24qKTsKKyAgICBzdGF0aWMgdm9pZCB1bnByZXBhcmVDYWxsYmFjayhNVEF1
ZGlvUHJvY2Vzc2luZ1RhcFJlZik7CisgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0NhbGxiYWNrKE1U
QXVkaW9Qcm9jZXNzaW5nVGFwUmVmLCBDTUl0ZW1Db3VudCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBG
bGFncywgQXVkaW9CdWZmZXJMaXN0KiwgQ01JdGVtQ291bnQqLCBNVEF1ZGlvUHJvY2Vzc2luZ1Rh
cEZsYWdzKik7CisKKyAgICB2b2lkIGluaXQodm9pZCogY2xpZW50SW5mbywgdm9pZCoqIHRhcFN0
b3JhZ2VPdXQpOworICAgIHZvaWQgZmluYWxpemUoKTsKKyAgICB2b2lkIHByZXBhcmUoQ01JdGVt
Q291bnQgbWF4RnJhbWVzLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKnByb2Nl
c3NpbmdGb3JtYXQpOworICAgIHZvaWQgdW5wcmVwYXJlKCk7CisgICAgdm9pZCBwcm9jZXNzKENN
SXRlbUNvdW50IG51bWJlckZyYW1lcywgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyBmbGFnc0lu
LCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxpc3RJbk91dCwgQ01JdGVtQ291bnQgKm51bWJlckZy
YW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NPdXQpOworCisgICAgUmV0
YWluUHRyPEFWUGxheWVySXRlbT4gbV9hdlBsYXllckl0ZW07CisgICAgUmV0YWluUHRyPEFWTXV0
YWJsZUF1ZGlvTWl4PiBtX2F2QXVkaW9NaXg7CisgICAgUmV0YWluUHRyPE1UQXVkaW9Qcm9jZXNz
aW5nVGFwUmVmPiBtX3RhcDsKKyAgICBSZXRhaW5QdHI8QXVkaW9Db252ZXJ0ZXJSZWY+IG1fY29u
dmVydGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxpc3Q+IG1fbGlzdDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uPiBtX3RhcERlc2Ny
aXB0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+
IG1fb3V0cHV0RGVzY3JpcHRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENBUmluZ0J1ZmZlcj4g
bV9yaW5nQnVmZmVyOworCisgICAgTWVkaWFUaW1lIG1fc3RhcnRUaW1lQXRMYXN0UHJvY2VzczsK
KyAgICBNZWRpYVRpbWUgbV9lbmRUaW1lQXRMYXN0UHJvY2VzczsKKyAgICB1aW50NjRfdCBtX3dy
aXRlQWhlYWRDb3VudDsKKyAgICB1aW50NjRfdCBtX3dyaXRlQ291bnQ7CisgICAgdWludDY0X3Qg
bV9yZWFkQ291bnQ7CisgICAgYm9vbCBtX3BhdXNlZDsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVy
Q2xpZW50KiBtX2NsaWVudDsKK307CisgICAgCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNzJhMjE4NTg5MzZmYmE0MGFhYThiYmYxYWJhOWU1YTZkNWI0OGEzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIgor
CisjaW1wb3J0ICJBdWRpb0J1cy5oIgorI2ltcG9ydCAiQXVkaW9DaGFubmVsLmgiCisjaW1wb3J0
ICJBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmgiCisjaW1wb3J0ICJDQVJpbmdCdWZmZXIuaCIK
KyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhVGltZU1hYy5oIgorI2ltcG9ydCAi
U29mdExpbmtpbmcuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkFzc2V0VHJhY2suaD4KKyNp
bXBvcnQgPEFWRm91bmRhdGlvbi9BVkF1ZGlvTWl4Lmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24v
QVZNZWRpYUZvcm1hdC5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbS5oPgor
I2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbVRyYWNrLmg+CisjaW1wb3J0IDxvYmpj
L3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisKKyNpZiAhTE9HX0RJU0FC
TEVECisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisjZW5kaWYKKworI2lmIEVO
QUJMRShXRUJfQVVESU8pICYmIFVTRShNRURJQVRPT0xCT1gpCisKK1NPRlRfTElOS19GUkFNRVdP
UksoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0ZSQU1FV09SSyhNZWRpYVRvb2xib3gpCitTT0ZU
X0xJTktfRlJBTUVXT1JLKEF1ZGlvVG9vbGJveCkKK1NPRlRfTElOS19GUkFNRVdPUksoQ29yZU1l
ZGlhKQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckl0ZW0pCitTT0ZU
X0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVk11dGFibGVBdWRpb01peCkKK1NPRlRfTElOS19D
TEFTUyhBVkZvdW5kYXRpb24sIEFWTXV0YWJsZUF1ZGlvTWl4SW5wdXRQYXJhbWV0ZXJzKQorCit0
eXBlZGVmIHN0cnVjdCBvcGFxdWVDTU5vdGlmaWNhdGlvbkNlbnRlciAqQ01Ob3RpZmljYXRpb25D
ZW50ZXJSZWY7Cit0eXBlZGVmIHZvaWQgKCpDTU5vdGlmaWNhdGlvbkNhbGxiYWNrKShDTU5vdGlm
aWNhdGlvbkNlbnRlclJlZiBpbkNlbnRlciwgY29uc3Qgdm9pZCAqaW5MaXN0ZW5lciwgQ0ZTdHJp
bmdSZWYgaW5Ob3RpZmljYXRpb25OYW1lLCBjb25zdCB2b2lkICppbk5vdGlmeWluZ09iamVjdCwg
Q0ZUeXBlUmVmIGluTm90aWZpY2F0aW9uUGF5bG9hZCk7CisKK1NPRlRfTElOSyhDb3JlTWVkaWEs
IENNTm90aWZpY2F0aW9uQ2VudGVyR2V0RGVmYXVsdExvY2FsQ2VudGVyLCBDTU5vdGlmaWNhdGlv
bkNlbnRlclJlZiwgKHZvaWQpLCAoKSk7CitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTU5vdGlmaWNh
dGlvbkNlbnRlckFkZExpc3RlbmVyLCBPU1N0YXR1cywgKENNTm90aWZpY2F0aW9uQ2VudGVyUmVm
IGNlbnRlciwgY29uc3Qgdm9pZCogbGlzdGVuZXIsIENNTm90aWZpY2F0aW9uQ2FsbGJhY2sgY2Fs
bGJhY2ssIENGU3RyaW5nUmVmIG5vdGlmaWNhdGlvbiwgY29uc3Qgdm9pZCogb2JqZWN0LCBVSW50
MzIgZmxhZ3MpLCAoY2VudGVyLCBsaXN0ZW5lciwgY2FsbGJhY2ssIG5vdGlmaWNhdGlvbiwgb2Jq
ZWN0LCBmbGFncykpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTU5vdGlmaWNhdGlvbkNlbnRlclJl
bW92ZUxpc3RlbmVyLCBPU1N0YXR1cywgKENNTm90aWZpY2F0aW9uQ2VudGVyUmVmIGNlbnRlciwg
Y29uc3Qgdm9pZCogbGlzdGVuZXIsIENNTm90aWZpY2F0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIENG
U3RyaW5nUmVmIG5vdGlmaWNhdGlvbiwgY29uc3Qgdm9pZCogb2JqZWN0KSwgKGNlbnRlciwgbGlz
dGVuZXIsIGNhbGxiYWNrLCBub3RpZmljYXRpb24sIG9iamVjdCkpCitTT0ZUX0xJTksoQ29yZU1l
ZGlhLCBDTVRpbWViYXNlR2V0VGltZSwgQ01UaW1lLCAoQ01UaW1lYmFzZVJlZiB0aW1lYmFzZSks
ICh0aW1lYmFzZSkpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWViYXNlR2V0RWZmZWN0aXZl
UmF0ZSwgRmxvYXQ2NCwgKENNVGltZWJhc2VSZWYgdGltZWJhc2UpLCAodGltZWJhc2UpKQorCitT
T0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01UaW1lYmFzZU5vdGlmaWNhdGlvbl9FZmZl
Y3RpdmVSYXRlQ2hhbmdlZCwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1l
ZGlhLCBrQ01UaW1lYmFzZU5vdGlmaWNhdGlvbl9UaW1lSnVtcGVkLCBDRlN0cmluZ1JlZikKKyNk
ZWZpbmUga0NNVGltZWJhc2VOb3RpZmljYXRpb25fRWZmZWN0aXZlUmF0ZUNoYW5nZWQgZ2V0a0NN
VGltZWJhc2VOb3RpZmljYXRpb25fRWZmZWN0aXZlUmF0ZUNoYW5nZWQoKQorI2RlZmluZSBrQ01U
aW1lYmFzZU5vdGlmaWNhdGlvbl9UaW1lSnVtcGVkIGdldGtDTVRpbWViYXNlTm90aWZpY2F0aW9u
X1RpbWVKdW1wZWQoKQorCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbnZlcnRlckNv
bnZlcnRDb21wbGV4QnVmZmVyLCBPU1N0YXR1cywgKEF1ZGlvQ29udmVydGVyUmVmIGluQXVkaW9D
b252ZXJ0ZXIsIFVJbnQzMiBpbk51bWJlclBDTUZyYW1lcywgY29uc3QgQXVkaW9CdWZmZXJMaXN0
KiBpbklucHV0RGF0YSwgQXVkaW9CdWZmZXJMaXN0KiBvdXRPdXRwdXREYXRhKSwgKGluQXVkaW9D
b252ZXJ0ZXIsIGluTnVtYmVyUENNRnJhbWVzLCBpbklucHV0RGF0YSwgb3V0T3V0cHV0RGF0YSkp
CitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbnZlcnRlck5ldywgT1NTdGF0dXMsIChj
b25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qIGluU291cmNlRm9ybWF0LCBjb25zdCBB
dWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qIGluRGVzdGluYXRpb25Gb3JtYXQsIEF1ZGlvQ29u
dmVydGVyUmVmKiBvdXRBdWRpb0NvbnZlcnRlciksIChpblNvdXJjZUZvcm1hdCwgaW5EZXN0aW5h
dGlvbkZvcm1hdCwgb3V0QXVkaW9Db252ZXJ0ZXIpKQorCitTT0ZUX0xJTksoTWVkaWFUb29sYm94
LCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEdldFN0b3JhZ2UsIHZvaWQqLCAoTVRBdWRpb1Byb2Nlc3Np
bmdUYXBSZWYgdGFwKSwgKHRhcCkpCitTT0ZUX0xJTksoTWVkaWFUb29sYm94LCBNVEF1ZGlvUHJv
Y2Vzc2luZ1RhcEdldFNvdXJjZUF1ZGlvLCBPU1N0YXR1cywgKE1UQXVkaW9Qcm9jZXNzaW5nVGFw
UmVmIHRhcCwgQ01JdGVtQ291bnQgbnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZl
ckxpc3RJbk91dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NPdXQsIENNVGltZVJh
bmdlICp0aW1lUmFuZ2VPdXQsIENNSXRlbUNvdW50ICpudW1iZXJGcmFtZXNPdXQpLCAodGFwLCBu
dW1iZXJGcmFtZXMsIGJ1ZmZlckxpc3RJbk91dCwgZmxhZ3NPdXQsIHRpbWVSYW5nZU91dCwgbnVt
YmVyRnJhbWVzT3V0KSkKK1NPRlRfTElOS19NQVlfRkFJTChNZWRpYVRvb2xib3gsIE1UQXVkaW9Q
cm9jZXNzaW5nVGFwQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwg
Y29uc3QgTVRBdWRpb1Byb2Nlc3NpbmdUYXBDYWxsYmFja3MgKmNhbGxiYWNrcywgTVRBdWRpb1By
b2Nlc3NpbmdUYXBDcmVhdGlvbkZsYWdzIGZsYWdzLCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiAq
dGFwT3V0KSwgKGFsbG9jYXRvciwgY2FsbGJhY2tzLCBmbGFncywgdGFwT3V0KSkKKworU09GVF9M
SU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlLCBO
U1N0cmluZyAqKQorI2RlZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlIGdldEFWTWVk
aWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUoKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBkb3VibGUga1JpbmdCdWZmZXJEdXJhdGlvbiA9IDE7CisKK1Bhc3NSZWZQdHI8QXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM+IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGUoQVZQ
bGF5ZXJJdGVtICppdGVtKQoreworICAgIGlmICghY2FuTG9hZE1UQXVkaW9Qcm9jZXNzaW5nVGFw
Q3JlYXRlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoaXRlbSkpOworfQorCitBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQzo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoQVZQbGF5ZXJJdGVtICpp
dGVtKQorICAgIDogbV9hdlBsYXllckl0ZW0oaXRlbSkKKyAgICAsIG1fd3JpdGVDb3VudCgwKQor
ICAgICwgbV9yZWFkQ291bnQoMCkKKyAgICAsIG1fcGF1c2VkKHRydWUpCisgICAgLCBtX2NsaWVu
dChudWxscHRyKQoreworfQorCitBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6fkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDKCkKK3sKKyAgICBzZXRDbGllbnQobnVsbHB0cik7Cit9CisKK3Zv
aWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb3ZpZGVJbnB1dChBdWRpb0J1cyogYnVz
LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIGlmICghbV9hdlBsYXllckl0ZW0pCisg
ICAgICAgIHJldHVybjsKKworICAgIHVpbnQ2NF90IHN0YXJ0RnJhbWUgPSAwOworICAgIHVpbnQ2
NF90IGVuZEZyYW1lID0gMDsKKyAgICBtX3JpbmdCdWZmZXItPmdldEN1cnJlbnRGcmFtZUJvdW5k
cyhzdGFydEZyYW1lLCBlbmRGcmFtZSk7CisKKyAgICBpZiAobV93cml0ZUNvdW50IDw9IG1fcmVh
ZENvdW50ICsgbV93cml0ZUFoZWFkQ291bnQpIHsKKyAgICAgICAgYnVzLT56ZXJvKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzaXplX3QgZnJhbWVzQXZhaWxhYmxlID0gZW5kRnJh
bWUgLSAobV9yZWFkQ291bnQgKyBtX3dyaXRlQWhlYWRDb3VudCk7CisgICAgaWYgKGZyYW1lc0F2
YWlsYWJsZSA8IGZyYW1lc1RvUHJvY2VzcykgeworICAgICAgICBmcmFtZXNUb1Byb2Nlc3MgPSBm
cmFtZXNBdmFpbGFibGU7CisgICAgICAgIGJ1cy0+emVybygpOworICAgIH0KKworICAgIEFTU0VS
VChidXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSBtX3JpbmdCdWZmZXItPmNoYW5uZWxDb3VudCgp
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xpc3QtPm1OdW1iZXJCdWZmZXJz
OyArK2kpIHsKKyAgICAgICAgQXVkaW9DaGFubmVsKiBjaGFubmVsID0gYnVzLT5jaGFubmVsKGkp
OworICAgICAgICBtX2xpc3QtPm1CdWZmZXJzW2ldLm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAg
ICAgIG1fbGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEgPSBjaGFubmVsLT5tdXRhYmxlRGF0YSgpOwor
ICAgICAgICBtX2xpc3QtPm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBjaGFubmVsLT5sZW5n
dGgoKSAqIHNpemVvZihmbG9hdCk7CisgICAgfQorCisgICAgbV9yaW5nQnVmZmVyLT5mZXRjaCht
X2xpc3QuZ2V0KCksIGZyYW1lc1RvUHJvY2VzcywgbV9yZWFkQ291bnQpOworICAgIG1fcmVhZENv
dW50ICs9IGZyYW1lc1RvUHJvY2VzczsKKworICAgIGlmIChtX2NvbnZlcnRlcikKKyAgICAgICAg
QXVkaW9Db252ZXJ0ZXJDb252ZXJ0Q29tcGxleEJ1ZmZlcihtX2NvbnZlcnRlci5nZXQoKSwgZnJh
bWVzVG9Qcm9jZXNzLCBtX2xpc3QuZ2V0KCksIG1fbGlzdC5nZXQoKSk7Cit9CisKK3ZvaWQgQXVk
aW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnNldENsaWVudChBdWRpb1NvdXJjZVByb3ZpZGVyQ2xp
ZW50KiBjbGllbnQpCit7CisgICAgaWYgKG1fY2xpZW50ID09IGNsaWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fYXZBdWRpb01peCkKKyAgICAgICAgZGVzdHJveU1peCgpOworCisg
ICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9hdlBsYXllckl0
ZW0pCisgICAgICAgIGNyZWF0ZU1peCgpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDOjpzZXRQbGF5ZXJJdGVtKEFWUGxheWVySXRlbSAqYXZQbGF5ZXJJdGVtKQoreworICAg
IGlmIChtX2F2UGxheWVySXRlbSA9PSBhdlBsYXllckl0ZW0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX2F2QXVkaW9NaXgpCisgICAgICAgIGRlc3Ryb3lNaXgoKTsKKworICAgIG1fYXZQ
bGF5ZXJJdGVtID0gYXZQbGF5ZXJJdGVtOworCisgICAgaWYgKG1fY2xpZW50ICYmIG1fYXZQbGF5
ZXJJdGVtKQorICAgICAgICBjcmVhdGVNaXgoKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQzo6ZGVzdHJveU1peCgpCit7CisgICAgaWYgKG1fYXZQbGF5ZXJJdGVtKQorICAg
ICAgICBbbV9hdlBsYXllckl0ZW0gc2V0QXVkaW9NaXg6bmlsXTsKKyAgICBbbV9hdkF1ZGlvTWl4
IHNldElucHV0UGFyYW1ldGVyczpuaWxdOworICAgIG1fYXZBdWRpb01peC5jbGVhcigpOworICAg
IG1fdGFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmNy
ZWF0ZU1peCgpCit7CisgICAgQVNTRVJUKCFtX2F2QXVkaW9NaXgpOworICAgIEFTU0VSVChtX2F2
UGxheWVySXRlbSk7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAgIG1fYXZBdWRpb01peCA9
IGFkb3B0TlMoW1tnZXRBVk11dGFibGVBdWRpb01peENsYXNzKCkgYWxsb2NdIGluaXRdKTsKKwor
ICAgIE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsKKyAgICAgICAg
MCwKKyAgICAgICAgdGhpcywKKyAgICAgICAgaW5pdENhbGxiYWNrLAorICAgICAgICBmaW5hbGl6
ZUNhbGxiYWNrLAorICAgICAgICBwcmVwYXJlQ2FsbGJhY2ssCisgICAgICAgIHVucHJlcGFyZUNh
bGxiYWNrLAorICAgICAgICBwcm9jZXNzQ2FsbGJhY2ssCisgICAgfTsKKworICAgIE1UQXVkaW9Q
cm9jZXNzaW5nVGFwUmVmIHRhcCA9IG51bGxwdHI7CisgICAgTVRBdWRpb1Byb2Nlc3NpbmdUYXBD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgJmNhbGxiYWNrcywgMSwgJnRhcCk7CisgICAgQVNT
RVJUKHRhcCk7CisgICAgQVNTRVJUKG1fdGFwID09IHRhcCk7CisKKyAgICBSZXRhaW5QdHI8QVZN
dXRhYmxlQXVkaW9NaXhJbnB1dFBhcmFtZXRlcnM+IHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbZ2V0
QVZNdXRhYmxlQXVkaW9NaXhJbnB1dFBhcmFtZXRlcnNDbGFzcygpIGFsbG9jXSBpbml0XSk7Cisg
ICAgW3BhcmFtZXRlcnMgc2V0QXVkaW9UYXBQcm9jZXNzb3I6bV90YXAuZ2V0KCldOworCisgICAg
Q01QZXJzaXN0ZW50VHJhY2tJRCBmaXJzdEVuYWJsZWRBdWRpb1RyYWNrSUQgPSBrQ01QZXJzaXN0
ZW50VHJhY2tJRF9JbnZhbGlkOworICAgIE5TQXJyYXkqIHRyYWNrcyA9IFttX2F2UGxheWVySXRl
bSB0cmFja3NdOworICAgIGZvciAoQVZQbGF5ZXJJdGVtVHJhY2sqIHRyYWNrIGluIHRyYWNrcykg
eworICAgICAgICBpZiAoW3RyYWNrLmFzc2V0VHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpB
Vk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlXSAmJiB0cmFjay5lbmFibGVkKSB7CisgICAgICAg
ICAgICBmaXJzdEVuYWJsZWRBdWRpb1RyYWNrSUQgPSB0cmFjay5hc3NldFRyYWNrLnRyYWNrSUQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBbcGFyYW1ldGVycyBz
ZXRUcmFja0lEOmZpcnN0RW5hYmxlZEF1ZGlvVHJhY2tJRF07CisgICAgCisgICAgW21fYXZBdWRp
b01peCBzZXRJbnB1dFBhcmFtZXRlcnM6QFtwYXJhbWV0ZXJzLmdldCgpXV07CisgICAgW21fYXZQ
bGF5ZXJJdGVtIHNldEF1ZGlvTWl4Om1fYXZBdWRpb01peC5nZXQoKV07Cit9CisKK3ZvaWQgQXVk
aW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmluaXRDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1Rh
cFJlZiB0YXAsIHZvaWQqIGNsaWVudEluZm8sIHZvaWQqKiB0YXBTdG9yYWdlT3V0KQoreworICAg
IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0YXRpY19jYXN0PEF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDKj4oY2xpZW50SW5mbyk7CisgICAgX3RoaXMtPm1fdGFwID0gdGFw
OworICAgIF90aGlzLT5pbml0KGNsaWVudEluZm8sIHRhcFN0b3JhZ2VPdXQpOworfQorCit2b2lk
IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5hbGl6ZUNhbGxiYWNrKE1UQXVkaW9Qcm9j
ZXNzaW5nVGFwUmVmIHRhcCkKK3sKKyAgICBBU1NFUlQodGFwKTsKKyAgICBBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQyogX3RoaXMgPSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQyo+KE1UQXVkaW9Qcm9jZXNzaW5nVGFwR2V0U3RvcmFnZSh0YXApKTsKKyAgICBfdGhpcy0+
ZmluYWxpemUoKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJlcGFy
ZUNhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCwgQ01JdGVtQ291bnQgbWF4RnJh
bWVzLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKnByb2Nlc3NpbmdGb3JtYXQp
Cit7CisgICAgQVNTRVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqIF90
aGlzID0gc3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihNVEF1ZGlvUHJv
Y2Vzc2luZ1RhcEdldFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPnByZXBhcmUobWF4RnJhbWVz
LCBwcm9jZXNzaW5nRm9ybWF0KTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qzo6dW5wcmVwYXJlQ2FsbGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwKQoreworICAg
IEFTU0VSVCh0YXApOworICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0
YXRpY19jYXN0PEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKj4oTVRBdWRpb1Byb2Nlc3NpbmdU
YXBHZXRTdG9yYWdlKHRhcCkpOworICAgIF90aGlzLT51bnByZXBhcmUoKTsKK30KKwordm9pZCBB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2Vzc0NhbGxiYWNrKE1UQXVkaW9Qcm9jZXNz
aW5nVGFwUmVmIHRhcCwgQ01JdGVtQ291bnQgbnVtYmVyRnJhbWVzLCBNVEF1ZGlvUHJvY2Vzc2lu
Z1RhcEZsYWdzIGZsYWdzLCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxpc3RJbk91dCwgQ01JdGVt
Q291bnQgKm51bWJlckZyYW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NP
dXQpCit7CisgICAgQVNTRVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMq
IF90aGlzID0gc3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihNVEF1ZGlv
UHJvY2Vzc2luZ1RhcEdldFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPnByb2Nlc3MobnVtYmVy
RnJhbWVzLCBmbGFncywgYnVmZmVyTGlzdEluT3V0LCBudW1iZXJGcmFtZXNPdXQsIGZsYWdzT3V0
KTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6aW5pdCh2b2lkKiBjbGll
bnRJbmZvLCB2b2lkKiogdGFwU3RvcmFnZU91dCkKK3sKKyAgICBBU1NFUlQoY2xpZW50SW5mbyA9
PSB0aGlzKTsKKyAgICAqdGFwU3RvcmFnZU91dCA9IHRoaXM7Cit9CisKK3ZvaWQgQXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM6OmZpbmFsaXplKCkKK3sKK30KKworc3RhdGljIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbiYgYikKK3sKKyAgICByZXR1cm4gYS5tU2FtcGxlUmF0ZSA9PSBi
Lm1TYW1wbGVSYXRlCisgICAgICAgICYmIGEubUZvcm1hdElEID09IGIubUZvcm1hdElECisgICAg
ICAgICYmIGEubUZvcm1hdEZsYWdzID09IGIubUZvcm1hdEZsYWdzCisgICAgICAgICYmIGEubUJ5
dGVzUGVyUGFja2V0ID09IGIubUJ5dGVzUGVyUGFja2V0CisgICAgICAgICYmIGEubUZyYW1lc1Bl
clBhY2tldCA9PSBiLm1GcmFtZXNQZXJQYWNrZXQKKyAgICAgICAgJiYgYS5tQnl0ZXNQZXJGcmFt
ZSA9PSBiLm1CeXRlc1BlckZyYW1lCisgICAgICAgICYmIGEubUNoYW5uZWxzUGVyRnJhbWUgPT0g
Yi5tQ2hhbm5lbHNQZXJGcmFtZQorICAgICAgICAmJiBhLm1CaXRzUGVyQ2hhbm5lbCA9PSBiLm1C
aXRzUGVyQ2hhbm5lbDsKK30KKworc3RhdGljIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
biYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOjpwcmVwYXJlKENNSXRlbUNvdW50IG1heEZyYW1lcywgY29uc3QgQXVkaW9T
dHJlYW1CYXNpY0Rlc2NyaXB0aW9uICpwcm9jZXNzaW5nRm9ybWF0KQoreworICAgIEFTU0VSVCht
YXhGcmFtZXMgPj0gMCk7CisKKyAgICBtX3RhcERlc2NyaXB0aW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+KCpwcm9jZXNzaW5nRm9ybWF0KTsKKyAgICBp
bnQgbnVtYmVyT2ZDaGFubmVscyA9IHByb2Nlc3NpbmdGb3JtYXQtPm1DaGFubmVsc1BlckZyYW1l
OworICAgIHNpemVfdCBieXRlc1BlckZyYW1lID0gcHJvY2Vzc2luZ0Zvcm1hdC0+bUJ5dGVzUGVy
RnJhbWU7CisgICAgZG91YmxlIHNhbXBsZVJhdGUgPSBwcm9jZXNzaW5nRm9ybWF0LT5tU2FtcGxl
UmF0ZTsKKyAgICBBU1NFUlQoc2FtcGxlUmF0ZSA+PSAwKTsKKworICAgIG1fb3V0cHV0RGVzY3Jp
cHRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbj4oKTsK
KyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7CisgICAg
bV9vdXRwdXREZXNjcmlwdGlvbi0+bUZvcm1hdElEID0ga0F1ZGlvRm9ybWF0TGluZWFyUENNOwor
ICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1Gb3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdz
TmF0aXZlRmxvYXRQYWNrZWQ7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUJpdHNQZXJDaGFu
bmVsID0gOCAqIHNpemVvZihGbG9hdDMyKTsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tQ2hh
bm5lbHNQZXJGcmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7CisgICAgbV9vdXRwdXREZXNjcmlwdGlv
bi0+bUZyYW1lc1BlclBhY2tldCA9IDE7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUJ5dGVz
UGVyUGFja2V0ID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1C
eXRlc1BlckZyYW1lID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24t
Pm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZDsKKworICAg
IGlmICgqbV90YXBEZXNjcmlwdGlvbiAhPSAqbV9vdXRwdXREZXNjcmlwdGlvbikgeworICAgICAg
ICBBdWRpb0NvbnZlcnRlclJlZiBvdXRDb252ZXJ0ZXIgPSBudWxscHRyOworICAgICAgICBBdWRp
b0NvbnZlcnRlck5ldyhtX3RhcERlc2NyaXB0aW9uLmdldCgpLCBtX291dHB1dERlc2NyaXB0aW9u
LmdldCgpLCAmb3V0Q29udmVydGVyKTsKKyAgICAgICAgbV9jb252ZXJ0ZXIgPSBvdXRDb252ZXJ0
ZXI7CisgICAgfQorCisgICAgLy8gTWFrZSB0aGUgcmluZ2J1ZmZlciBsYXJnZSBlbm91Z2ggdG8g
c3RvcmUgYXQgbGVhc3QgdHdvIGNhbGxiYWNrcyB3b3J0aCBvZiBhdWRpbywgb3IgMXMsIHdoaWNo
ZXZlciBpcyBsYXJnZXIuCisgICAgc2l6ZV90IGNhcGFjaXR5ID0gc3RkOjptYXgoc3RhdGljX2Nh
c3Q8c2l6ZV90PigyICogbWF4RnJhbWVzKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihrUmluZ0J1ZmZl
ckR1cmF0aW9uICogc2FtcGxlUmF0ZSkpOworCisgICAgbV9yaW5nQnVmZmVyID0gQ0FSaW5nQnVm
ZmVyOjpjcmVhdGUoKTsKKyAgICBtX3JpbmdCdWZmZXItPmFsbG9jYXRlKG51bWJlck9mQ2hhbm5l
bHMsIGJ5dGVzUGVyRnJhbWUsIGNhcGFjaXR5KTsKKworICAgIC8vIEF1ZGlvQnVmZmVyTGlzdCBp
cyBhIHZhcmlhYmxlLWxlbmd0aCBzdHJ1Y3QsIHNvIGNyZWF0ZSBvbiB0aGUgaGVhcCB3aXRoIGEg
Z2VuZXJpYyBuZXcoKSBvcGVyYXRvcgorICAgIC8vIHdpdGggYSBjdXN0b20gc2l6ZSwgYW5kIGlu
aXRpYWxpemUgdGhlIHN0cnVjdCBtYW51YWxseS4KKyAgICBzaXplX3QgYnVmZmVyTGlzdFNpemUg
PSBzaXplb2YoQXVkaW9CdWZmZXJMaXN0KSArIChzaXplb2YoQXVkaW9CdWZmZXIpICogc3RkOjpt
YXgoMSwgbnVtYmVyT2ZDaGFubmVscyAtIDEpKTsKKyAgICBtX2xpc3QgPSBzdGQ6OnVuaXF1ZV9w
dHI8QXVkaW9CdWZmZXJMaXN0PigoQXVkaW9CdWZmZXJMaXN0KikgOjpvcGVyYXRvciBuZXcgKGJ1
ZmZlckxpc3RTaXplKSk7CisgICAgbWVtc2V0KG1fbGlzdC5nZXQoKSwgMCwgYnVmZmVyTGlzdFNp
emUpOworICAgIG1fbGlzdC0+bU51bWJlckJ1ZmZlcnMgPSBudW1iZXJPZkNoYW5uZWxzOworCisg
ICAgUmVmUHRyPEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDPiBzdHJvbmdUaGlzID0gdGhpczsK
KyAgICBjYWxsT25NYWluVGhyZWFkKFtzdHJvbmdUaGlzLCBudW1iZXJPZkNoYW5uZWxzLCBzYW1w
bGVSYXRlXSB7CisgICAgICAgIHN0cm9uZ1RoaXMtPm1fY2xpZW50LT5zZXRGb3JtYXQobnVtYmVy
T2ZDaGFubmVscywgc2FtcGxlUmF0ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakM6OnVucHJlcGFyZSgpCit7CisgICAgbV90YXBEZXNjcmlwdGlvbiA9IG51
bGxwdHI7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgbV9yaW5nQnVm
ZmVyID0gbnVsbHB0cjsKKyAgICBtX2xpc3QgPSBudWxscHRyOworfQorCit2b2lkIEF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzKENNSXRlbUNvdW50IG51bWJlck9mRnJhbWVzLCBN
VEF1ZGlvUHJvY2Vzc2luZ1RhcEZsYWdzIGZsYWdzLCBBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxp
c3RJbk91dCwgQ01JdGVtQ291bnQqIG51bWJlckZyYW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdU
YXBGbGFncyogZmxhZ3NPdXQpCit7CisgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKworICAgIENN
SXRlbUNvdW50IGl0ZW1Db3VudCA9IDA7CisgICAgQ01UaW1lUmFuZ2UgcmFuZ2VPdXQ7CisgICAg
T1NTdGF0dXMgc3RhdHVzID0gTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRTb3VyY2VBdWRpbyhtX3Rh
cC5nZXQoKSwgbnVtYmVyT2ZGcmFtZXMsIGJ1ZmZlckxpc3RJbk91dCwgZmxhZ3NPdXQsICZyYW5n
ZU91dCwgJml0ZW1Db3VudCk7CisgICAgaWYgKHN0YXR1cyAhPSBub0VyciB8fCAhaXRlbUNvdW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBNZWRpYVRpbWUgcmFuZ2VTdGFydCA9IHRvTWVkaWFU
aW1lKHJhbmdlT3V0LnN0YXJ0KTsKKyAgICBNZWRpYVRpbWUgcmFuZ2VEdXJhdGlvbiA9IHRvTWVk
aWFUaW1lKHJhbmdlT3V0LmR1cmF0aW9uKTsKKworICAgIGlmIChyYW5nZVN0YXJ0LmlzSW52YWxp
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNZWRpYVRpbWUgY3VycmVudFRpbWUgPSB0b01l
ZGlhVGltZShDTVRpbWViYXNlR2V0VGltZShbbV9hdlBsYXllckl0ZW0gdGltZWJhc2VdKSk7Cisg
ICAgaWYgKGN1cnJlbnRUaW1lLmlzSW52YWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBUaGUgYXVkaW8gdGFwIHdpbGwgZ2VuZXJhdGUgc2lsZW5jZSB3aGVuIHRoZSBtZWRpYSBpcyBw
YXVzZWQsIGFuZCB3aWxsIG5vdCBhZHZhbmNlIHRoZQorICAgIC8vIHRhcCBjdXJyZW50VGltZS4K
KyAgICBpZiAocmFuZ2VTdGFydCA9PSBtX3N0YXJ0VGltZUF0TGFzdFByb2Nlc3MgfHwgcmFuZ2VE
dXJhdGlvbiA9PSBNZWRpYVRpbWU6Onplcm9UaW1lKCkpIHsKKyAgICAgICAgbV9wYXVzZWQgPSB0
cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGF1c2VkKSB7CisgICAg
ICAgIC8vIE9ubHkgY2hlY2sgdGhlIHdyaXRlLWFoZWFkIHRpbWUgd2hlbiBwbGF5YmFjayBiZWdp
bnMuCisgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7CisgICAgICAgIE1lZGlhVGltZSBlYXJseUJ5
ID0gcmFuZ2VTdGFydCAtIGN1cnJlbnRUaW1lOworICAgICAgICBtX3dyaXRlQWhlYWRDb3VudCA9
IG1fdGFwRGVzY3JpcHRpb24tPm1TYW1wbGVSYXRlICogZWFybHlCeS50b0RvdWJsZSgpOworICAg
IH0KKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdW5kZXJseWluZyBtZWRpYSBoYXMgc2Vl
a2VkLCB3aGljaCB3b3VsZCByZXF1aXJlIHVzIHRvICJmbHVzaCIKKyAgICAvLyBvdXIgb3V0c3Rh
bmRpbmcgYnVmZmVycy4KKyAgICBpZiAocmFuZ2VTdGFydCAhPSBtX2VuZFRpbWVBdExhc3RQcm9j
ZXNzKQorICAgICAgICBtX3JlYWRDb3VudCA9IG1fd3JpdGVDb3VudDsKKworICAgIG1fc3RhcnRU
aW1lQXRMYXN0UHJvY2VzcyA9IHJhbmdlU3RhcnQ7CisgICAgbV9lbmRUaW1lQXRMYXN0UHJvY2Vz
cyA9IHJhbmdlU3RhcnQgKyByYW5nZUR1cmF0aW9uOworCisgICAgLy8gU3RhcnRPZlN0cmVhbSBp
bmRpY2F0ZXMgYSBkaXNjb250aW51aXR5LCBzdWNoIGFzIHdoZW4gYW4gQVZQbGF5ZXJJdGVtIGlz
IHJlLWFkZGVkCisgICAgLy8gdG8gYW4gQVZQbGF5ZXIsIHNvICJmbHVzaCIgb3V0c3RhbmRpbmcg
YnVmZmVycy4KKyAgICBpZiAoZmxhZ3NPdXQgJiYgKmZsYWdzT3V0ICYga01UQXVkaW9Qcm9jZXNz
aW5nVGFwRmxhZ19TdGFydE9mU3RyZWFtKQorICAgICAgICBtX3JlYWRDb3VudCA9IG1fd3JpdGVD
b3VudDsKKworICAgIG1fcmluZ0J1ZmZlci0+c3RvcmUoYnVmZmVyTGlzdEluT3V0LCBpdGVtQ291
bnQsIG1fd3JpdGVDb3VudCk7CisgICAgbV93cml0ZUNvdW50ICs9IGl0ZW1Db3VudDsKKworICAg
IC8vIE11dGUgdGhlIGRlZmF1bHQgYXVkaW8gcGxheWJhY2sgYnkgemVyb2luZyB0aGUgdGFwLW93
bmVkIGJ1ZmZlcnMuCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGJ1ZmZlckxpc3RJbk91
dC0+bU51bWJlckJ1ZmZlcnM7ICsraSkgeworICAgICAgICBBdWRpb0J1ZmZlciYgYnVmZmVyID0g
YnVmZmVyTGlzdEluT3V0LT5tQnVmZmVyc1tpXTsKKyAgICAgICAgbWVtc2V0KGJ1ZmZlci5tRGF0
YSwgMCwgYnVmZmVyLm1EYXRhQnl0ZVNpemUpOworICAgIH0KKyAgICAqbnVtYmVyRnJhbWVzT3V0
ID0gMDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElB
VE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAppbmRleCBmZjVmZTAxYmE0Yzc4NGE1NWUyNGNi
MmQ3NjNhZGZkNjhmOWEzNmRjLi5mYzBhZDA0MWM1YjdkNmNhYzAwNDcyMTQwNWZmOGM1YmQ1ZjE5
YTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCkBAIC02Miw2ICs2Miw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIEluYmFuZE1l
dGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRjsKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZPYmpDOworY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM7CiBjbGFzcyBBdWRpb1Ry
YWNrUHJpdmF0ZUFWRk9iakM7CiBjbGFzcyBWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakM7CiAKQEAg
LTIwOSw2ICsyMTAsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0QVZQbGF5ZXJJdGVtKEFW
UGxheWVySXRlbSAqKTsKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgdmlydHVhbCBBdWRp
b1NvdXJjZVByb3ZpZGVyKiBhdWRpb1NvdXJjZVByb3ZpZGVyKCk7CisjZW5kaWYKKwogICAgIHZv
aWQgY3JlYXRlSW1hZ2VHZW5lcmF0b3IoKTsKICAgICB2b2lkIGRlc3Ryb3lJbWFnZUdlbmVyYXRv
cigpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVJbWFnZUZvclRpbWVJblJlY3Qo
ZmxvYXQsIGNvbnN0IEludFJlY3QmKTsKQEAgLTI4OSw2ICsyOTQsMTAgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwogICAgIGJvb2wgbV9oYXZlQ2hlY2tlZFBsYXlh
YmlsaXR5OwogCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKKyAg
ICBSZWZQdHI8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM+IG1fcHJvdmlkZXI7CisjZW5kaWYK
KwogICAgIFJldGFpblB0cjxBVkFzc2V0SW1hZ2VHZW5lcmF0b3I+IG1faW1hZ2VHZW5lcmF0b3I7
CiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVklERU9fT1VUUFVUKQogICAgIFJldGFpblB0cjxBVlBs
YXllckl0ZW1WaWRlb091dHB1dD4gbV92aWRlb091dHB1dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1t
CmluZGV4IDhmMDgyMTEzZDViYzA0MDY2OGMxOTQ4NDg3YzU1ZTk3MDAwNzY0NjMuLjM3YWI5NWQ2
Y2Q0Mzk2YjhmNGJlNTc3ZWViYjNiYmM0NTlhMzczNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5t
bQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5oIgogCiAjaW1wb3J0ICJBVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLmgiCisjaW1w
b3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIgogI2ltcG9ydCAiQXVkaW9UcmFja1By
aXZhdGVBVkZPYmpDLmgiCiAjaW1wb3J0ICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgogI2lt
cG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCkBAIC01MDAsNiArNTAxLDExIEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2FuY2VsTG9hZCgpCiAgICAgICAgIFt0cmFj
ayByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAiZW5hYmxl
ZCJdOwogICAgIG1fY2FjaGVkVHJhY2tzID0gbnVsbHB0cjsKIAorI2lmIEVOQUJMRShXRUJfQVVE
SU8pICYmIFVTRShNRURJQVRPT0xCT1gpCisgICAgaWYgKG1fcHJvdmlkZXIpCisgICAgICAgIG1f
cHJvdmlkZXItPnNldFBsYXllckl0ZW0obnVsbHB0cik7CisjZW5kaWYKKwogICAgIHNldElnbm9y
ZUxvYWRTdGF0ZUNoYW5nZXMoZmFsc2UpOwogfQogCkBAIC05MTAsNiArOTE2LDExIEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKCkK
ICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT3V0cHV0Om1fbGVnaWJsZU91dHB1dC5nZXQo
KV07CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShNRURJQVRPT0xCT1gp
CisgICAgaWYgKG1fcHJvdmlkZXIpCisgICAgICAgIG1fcHJvdmlkZXItPnNldFBsYXllckl0ZW0o
bV9hdlBsYXllckl0ZW0uZ2V0KCkpOworI2VuZGlmCisKICAgICBzZXREZWxheUNhbGxiYWNrcyhm
YWxzZSk7CiB9CiAKQEAgLTE4MzksNiArMTg1MCwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKFRleHRUcmFja1Jl
cAogfQogI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKIAorI2lmIEVOQUJMRShXRUJfQVVE
SU8pICYmIFVTRShNRURJQVRPT0xCT1gpCitBdWRpb1NvdXJjZVByb3ZpZGVyKiBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjphdWRpb1NvdXJjZVByb3ZpZGVyKCkKK3sKKyAgICBp
ZiAoIW1fcHJvdmlkZXIpCisgICAgICAgIG1fcHJvdmlkZXIgPSBBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQzo6Y3JlYXRlKG1fYXZQbGF5ZXJJdGVtLmdldCgpKTsKKyAgICByZXR1cm4gbV9wcm92
aWRlci5nZXQoKTsKK30KKyNlbmRpZgorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OnNpemVDaGFuZ2VkKCkKIHsKICAgICBpZiAoIW1fYXZBc3NldCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKaW5kZXggZDkxYzE5NGViZWJhNDE3NjZm
MWVlYmU0NmMxNjNjOWQ1ZDA2MmFiNC4uZGJlNThiNmZjMjgzMGE5MmEzMGNlZDk1YmM2N2EzOWY1
YTYwODA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5r
aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKQEAg
LTExMCw3ICsxMTAsNiBAQAogICAgICAgICByZXR1cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFtZSBw
YXJhbWV0ZXJOYW1lczsgXAogICAgIH0KIAotI2lmIFBMQVRGT1JNKElPUykKICNkZWZpbmUgU09G
VF9MSU5LX01BWV9GQUlMKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBwYXJh
bWV0ZXJEZWNsYXJhdGlvbnMsIHBhcmFtZXRlck5hbWVzKSBcCiAgICAgc3RhdGljIHJlc3VsdFR5
cGUgKCpzb2Z0TGluayMjZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgPSAwOyBc
CiAgICAgXApAQCAtMTMyLDcgKzEzMSw2IEBACiAgICAgICAgIEFTU0VSVChzb2Z0TGluayMjZnVu
Y3Rpb25OYW1lKTsgXAogICAgICAgICByZXR1cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFtZSBwYXJh
bWV0ZXJOYW1lczsgXAogICAgIH0KLSNlbmRpZgogCiAvKiBjYWxsaW5nQ29udmVudGlvbiBpcyB1
bnVzZWQgb24gTWFjIGJ1dCBpcyBoZXJlIHRvIGtlZXAgdGhlIG1hY3JvIHByb3RvdHlwZSB0aGUg
c2FtZSBiZXR3ZWVuIE1hYyBhbmQgV2luZG93cy4gKi8KICNkZWZpbmUgU09GVF9MSU5LX09QVElP
TkFMKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBjYWxsaW5nQ29udmVudGlv
biwgcGFyYW1ldGVyRGVjbGFyYXRpb25zKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238032</attachid>
            <date>2014-09-12 09:26:12 -0700</date>
            <delta_ts>2014-09-12 14:16:55 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-135042-20140912092608.patch</filename>
            <type>text/plain</type>
            <size>56942</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDIwMzczOGQ2NGU2MTFhNDFlYmViMmI3
MzE4Njg1NDhmMmJjMjFhNWQuLjllODE0N2VkZTYxZDE2NDkwZjY3NmMyMzA0MDczNmYzYzQzYjk4
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDktMTEgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10gU3VwcG9ydCBhdWRpb1NvdXJjZVByb3ZpZGVy
KCkgaW4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDQyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBXVEZf
VVNFX01FRElBVE9PTEJPWC4KKwogMjAxNC0wOS0wOSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3Vs
YWluQGFwcGxlLmNvbT4KIAogICAgICAgICBEaXNhYmxlIHRoZSAidW5yZWFjaGFibGUtY29kZSIg
d2FybmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGI2N2RhODAxMmNmNjMzYjAyMTM1ZDVjOWI5NzdiNjNjYzlj
OWIyMzYuLjg1OGZmODE2ZjE2Mjg5YWYzMDMxNDE5ZTNmOTExZTM4ZjIzODRjNzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsNSArMSw5NCBAQAogMjAxNC0wOS0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFw
cGxlLmNvbT4KIAorICAgICAgICBbTWFjXSBTdXBwb3J0IGF1ZGlvU291cmNlUHJvdmlkZXIoKSBp
biBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwNDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIENhcmxzb24uCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIEF1ZGlvU291cmNlUHJv
dmlkZXIgaW4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQywgdGhlcmVieQorICAg
ICAgICBzdXBwb3J0aW5nIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS4KKworICAgICAgICBJ
bXBvcnQgdGhlIENBUmluZ0J1ZmZlciBmcm9tIENvcmVBdWRpbyBzYW1wbGUgY29kZSwgbWFraW5n
IHRoZSBuZWNlc3NhcnkgbW9kaWZpY2F0aW9ucworICAgICAgICBmb3IgV2ViS2l0IHN0eWxlIGFu
ZCBjb2RpbmcgY29udmVudGlvbnMuIFRoZSB0aHJlYWRpbmcgYXNzdW1wdGlvbnMgZm9yIHRoaXMg
Y2xhc3MgYXJlCisgICAgICAgIHRoYXQgdGhlcmUgd2lsbCBiZSBhIHNpbmdsZSB3cml0ZXIgdGhy
ZWFkIGFuZCBhIHNpbmdsZSByZWFkZXIgdGhyZWFkLgorCisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vbWFjL0NBUmluZ0J1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5n
QnVmZmVyOjpjcmVhdGUpOiBDcmVhdGUgYSB1bmlxdWVfcHRyLgorICAgICAgICAoV2ViQ29yZTo6
Q0FSaW5nQnVmZmVyOjpDQVJpbmdCdWZmZXIpOiBTaW1wbGUgY29uc3RydWN0b3IuCisgICAgICAg
IChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6On5DQVJpbmdCdWZmZXIpOiBTaW1wbGUgZGVzdHJ1Y3Rv
ci4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6YWxsb2NhdGUpOiBJbml0aWFsaXpl
IHRoZSBidWZmZXJzIGFuZCB0aW1lIGJvdW5kcyBzdHJ1Y3R1cmVzLgorICAgICAgICAoV2ViQ29y
ZTo6Q0FSaW5nQnVmZmVyOjpkZWFsbG9jYXRlKTogRGVzdHJveSBzYW1lLgorICAgICAgICAoV2Vi
Q29yZTo6WmVyb1JhbmdlKTogU3RhdGljIHV0aWxpdHkgbWV0aG9kLgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmVBQkwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQUJMKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpaZXJvQUJMKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpD
QVJpbmdCdWZmZXI6OnN0b3JlKTogU3RvcmUgdGhlIHBhc3NlZCBpbiBidWZmZXIgaW4gdGhlIHJp
bmcgYnVmZmVyLCB3cmFwcGluZworICAgICAgICAgICAgaWYgbmVjZXNzYXJ5LgorICAgICAgICAo
V2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpzZXRUaW1lQm91bmRzKTogU2V0IHRoZSBuZXcgdGltZSBi
b3VuZHMgYnkgaW5jcmVtZW50aW5nIHRoZQorICAgICAgICAgICAgYm91bmRzIGluZGV4IGxvY2Fs
bHksIGZpbGxpbmcgaW4gdGhlIG5ldyB2YWx1ZXMsIHRoZW4gYXRvbWljYWxseSBpbmNyZW1lbnRp
bmcgdGhlCisgICAgICAgICAgICByZWFkZXItdmlzaWJsZSBpbmRleC4KKyAgICAgICAgKFdlYkNv
cmU6OkNBUmluZ0J1ZmZlcjo6Z2V0VGltZUJvdW5kcyk6IEdldCB0aGUgbmV3IHRpbWUgYm91bmRz
IGJ5IG1hc2tpbmcgdGhlIHRpbWUKKyAgICAgICAgICAgIGJvdW5kcyBpbmRleCwgYW5kIHVzaW5n
IGl0IGFzIGFuIG9mZnNldCB0byB0aGUgdGltZSBib3VuZHMgYXJyYXkuIFByb3RlY3QgYWdhaW5z
dAorICAgICAgICAgICAgQ1BVIHN0YXJ2YXRpb24gb24gdGhlIHJlYWRpbmcgdGhyZWFkIGJ5IGNo
ZWNraW5nIHRoZSBpbmRleCBhZ2FpbnN0IHRoZSBzdG9yZWQKKyAgICAgICAgICAgIGluZGV4IGlu
IHRoZSBhcnJheSBlbnRyeS4gVGhpcyBjaGVjayB3aWxsIGZhaWwgaWYgdGhlIHdyaXRpbmcgdGhy
ZWFkIGhhcyB3cmFwcGVkCisgICAgICAgICAgICBtb3JlIHRoYW4gdGhlIHNpemUgb2YgdGhlIGFy
cmF5LgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpjbGlwVGltZUJvdW5kcyk6IENs
YW1wIHRoZSBwYXNzZWQgdmFsdWVzIHRvIHRoZSBhdmFpbGFibGUgYm91bmRzLgorICAgICAgICAo
V2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpzdGFydEZyYW1lKTogU2ltcGxlIGFjY2Vzc29yLgorICAg
ICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjplbmRGcmFtZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpmZXRjaCk6IFJlYWQgYW4gYXVkaW8gYnVmZmVyIGxpc3Qg
ZnJvbSB0aGUgcmluZyBidWZmZXIsIHBvc3NiaWx5CisgICAgICAgICAgICB3cmFwcGluZyBhcm91
bmQgdG8gdGhlIHN0YXJ0IG9mIHRoZSByaW5nIGJ1ZmZlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9tYWMvQ0FSaW5nQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5n
QnVmZmVyOjpudW1iZXJPZkNoYW5uZWxzKTogU2ltcGxlIGFjY2Vzc29yLgorICAgICAgICAoV2Vi
Q29yZTo6Q0FSaW5nQnVmZmVyOjpmcmFtZU9mZnNldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0FSaW5nQnVmZmVyOjpUaW1lQm91bmRzOjpUaW1lQm91bmRzKTogU3RydWN0IGhvbGRpbmcg
dGhlIHN0YXJ0IGFuZCBlbmQgZnJhbWUgdmFsdWVzLgorCisgICAgICAgIEFkZCBhbiBpbXBsZW1l
bnRhdGlvbiBvZiBBdWRpb1NvdXJjZVByb3ZpZGVyLCB1c2luZyBBVkF1ZGlvTWl4IGFuZCBNVEF1
ZGlvUHJvY2Vzc2luZ1RhcAorICAgICAgICB0byB0YXAgYW4gQVZQbGF5ZXJJdGVtJ3MgYXVkaW8g
b3V0cHV0IGFuZCBmZWVkIGl0IHRvIGEgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlk
ZXJBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6Y3JlYXRlKTogU2ltcGxlIGZhY3Rvcnku
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6QXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakMpOiBTaW1wbGUgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6fkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpD
KTogU2ltcGxlIGRlc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQzo6cHJvdmlkZUlucHV0KTogUHVzaCBhdWRpbyBpbnRvIHRoZSByaW5nIGJ1ZmZl
ci4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpzZXRDbGll
bnQpOiBDYWxsIGRlc3Ryb3lNaXgoKS9jcmVhdGVNaXgoKSBhcyBhcHByb3ByaWF0ZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpzZXRQbGF5ZXJJdGVtKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6ZGVz
dHJveU1peCk6IERldGFjaCBhbmQgZGVzdHJveSB0aGUgQVZBdWRpb01peCBhbmQgdGFwLgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmNyZWF0ZU1peCk6IFNl
dCB1cCB0aGUgQVZBdWRpb01peCBhbmQgdGFwIGFuZCBhdHRhY2ggdG8KKyAgICAgICAgICAgIHRo
ZSBBVlBsYXllckl0ZW0uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQzo6aW5pdENhbGxiYWNrKTogUGFzcyB0byBjbGFzcyBtZXRob2QuCisgICAgICAgIChXZWJD
b3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6ZmluYWxpemVDYWxsYmFjayk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByZXBhcmVD
YWxsYmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFW
Rk9iakM6OnVucHJlcGFyZUNhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2Vzc0NhbGxiYWNrKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6aW5pdCk6IFNldCB1cCB0aGUg
c3RvcmFnZSBwb2ludGVyIGZvciB0aGUgdGFwLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM6OmZpbmFsaXplKTogTm8tb3AuCisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcj09KTogQ29tcGFyZSB0d28gQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG9iamVj
dHMuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJlcGFyZSk6IENyZWF0ZSBhbiBBdWRp
b0NvdmVydGVyIG9iamVjdCBpZiBuZWNlc3NhcnksCisgICAgICAgICAgICBjcmVhdGUgdGhlIHJp
bmcgYnVmZmVyLCBhbmQgbm90aWZ5IHRoZSBjbGllbnQgb2YgZm9ybWF0IGNoYW5nZXMuCisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6dW5wcmVwYXJlKTogRGVz
dHJveSBzYW1lLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6
OnByb2Nlc3MpOiBDb3B5IHNhbXBsZXMgb3V0IG9mIHRoZSByaW5nIGJ1ZmZlciwKKyAgICAgICAg
ICAgIGZvcm1hdCBjb252ZXJ0aW5nIHRoZW0gaWYgbmVjZXNzYXJ5LiBNdXRlIG9yaWdpbmFsIGF1
ZGlvLgorCisgICAgICAgIENyZWF0ZSB0aGUgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMgb2Jq
ZWN0IGFuZCBub3RpZnkgaXQgd2hlbiB0aGUgY3VycmVudCBBVlBsYXllckl0ZW0gY2hhbmdlcy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1t
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpjcmVhdGVBVlBsYXllckl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YXVkaW9Tb3VyY2VQcm92aWRlcik6CisKKyAg
ICAgICAgRW5hYmxlIFNPRlRfTElOS19NQVlfRkFJTCBvbiB0aGUgTWFjIHBsYXRmb3JtLgorCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmg6CisKKyAgICAgICAgQWRkIG5ldyBm
aWxlcyB0byB0aGUgcHJvamVjdC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKworMjAxNC0wOS0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNv
bT4KKwogICAgICAgICBBZGQgc2l0ZS1zcGVjaWZpYyBxdWlyayBmb3IgZW50ZXJpbmcgZnVsbHNj
cmVlbiBvbiBZb3VUdWJlLmNvbS4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNjc0MgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCAyNDUyMWZkNGFkNjI5NjI3Yjdk
ZTM1OTYzYTI2ODc0MTYyODI1YTQ3Li5kM2Y3ZGQ1NTNjMzJhNjhiYjI3N2Y3ZDY4YjQ0NTc1MDc5
ZDc5ODI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTEwNzksNCArMTA3OSw4IEBACiAjZGVmaW5lIFRBUkdF
VF9PU19JUEhPTkUgMAogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShD
T0NPQSkgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwKQorI2RlZmlu
ZSBXVEZfVVNFX01FRElBVE9PTEJPWCAxCisjZW5kaWYKKwogI2VuZGlmIC8qIFdURl9QbGF0Zm9y
bV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggOTU5YTI0MjNhNmQ2Njk3MzczYTg0M2NlZDA0NzdmMDUyNWM2NmMwNy4uOWEx
ZTllZDc1NDE4OWYxZTc1Yzg0NjBkNmMwMGM5MmY3MDQ5YzRlMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTYyNSw2ICs1NjI1
LDggQEAKIAkJQ0Q4MjAzMEQxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhV
RFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDgyMDMwOTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVu
SFVEV2luZG93Q29udHJvbGxlci5tbSAqLzsgfTsKIAkJQ0Q4MjAzMTAxMzk1QUNFNzAwRjk1NkM2
IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0Q4MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1h
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUNEODIwMzExMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRpb24ubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgyMDMwRjEzOTVBQ0U3
MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovOyB9OworCQlDRDhBN0JCQjE5Nzcz
NUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhBN0JCOTE5NzczNUZFMDBDQkQ2
NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gKi87IH07CisJCUNEOEE3QkJDMTk3
NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QTdCQkExOTc3MzVGRTAwQ0JE
NjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggKi87IH07CiAJCUNEOEI1QTQyMTgw
RDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEI1QTQwMTgw
RDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSAq
LzsgfTsKIAkJQ0Q4QjVBNDMxODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRDhCNUE0MTE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0Q4QjVBNDYxODBERkY0RTAwOEI4RTY1IC8qIFZp
ZGVvVHJhY2tNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0Q4QjVBNDUxODBERkY0RTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tNZWRpYVNv
dXJjZS5oICovOyB9OwpAQCAtNTY3MCw2ICs1NjcyLDggQEAKIAkJQ0RDNjlERDcxNjMyMDI2QzAw
N0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OURENTE2MzIwMjZDMDA3QzM4REYg
LyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSAqLzsgfTsKIAkJQ0RDNjlEREExNjM3
MUZENDAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OUREODE2MzcxRkQz
MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREM2OUREQjE2MzcxRkQ0
MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OUREOTE2MzcxRkQzMDA3
QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gKi87IH07CisJCUNE
QzczNDE0MTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNzM0MTIxOTc3ODk2QzAwNDZCRkM1
IC8qIENBUmluZ0J1ZmZlci5jcHAgKi87IH07CisJCUNEQzczNDE1MTk3Nzg5NkQwMDQ2QkZDNSAv
KiBDQVJpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCAqLzsgfTsK
IAkJQ0RDOEI1QTIxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMubW0gKi87IH07CiAJCUNEQzhCNUEzMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUExMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0RDOEI1QTYxODA0
NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBNDE4MDQ3NEY3MDAxNkU2
ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAqLzsgfTsKQEAgLTEzMDM4LDYgKzEz
MDQyLDggQEAKIAkJQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2lu
ZG93QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYldpbmRv
d0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDgyMDMwRjEzOTVB
Q0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDRDhBN0JCOTE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0Q4QTdCQkExOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvU291cmNlUHJvdmlk
ZXJBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOEI1QTQwMTgwRDE0
OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFZpZGVvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLm1tOyBwYXRoID0gb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q4QjVBNDExODBE
MTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDLmg7IHBhdGggPSBvYmpjL1ZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOEI1QTQ0MTgwREQ4RDYwMDhC
OEU2NSAvKiBWaWRlb1RyYWNrTWVkaWFTb3VyY2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZGVvVHJhY2tNZWRpYVNv
dXJjZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzExMyw2ICsxMzExOSw4
IEBACiAJCUNEQzY5REQ1MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5p
bmdWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29y
ZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RDNjlERDgxNjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJW
aWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVGdWxsU2NyZWVu
UGxhY2Vob2xkZXJWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzY5REQ5
MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVGdWxsU2NyZWVu
UGxhY2Vob2xkZXJWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREM3MzQx
MjE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENBUmluZ0J1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0FSaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW07IHBh
dGggPSBvYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDOEI1QTExODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDsgcGF0aCA9
IG9iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNEQzhCNUE0MTgwNDc0RjcwMDE2RTY4NSAvKiBNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1l
ID0gTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbTsgcGF0aCA9IG9iamMvTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTczLDYg
KzIxNTgxLDggQEAKIAkJCQlDRDhCNUE0MDE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1By
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi8sCiAJCQkJQ0Q3RTA1MjAxNjUxQTg0MTAwQzEy
MDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCUNEN0UwNTIxMTY1MUE4
NDEwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0gKi8sCisJCQkJQ0Q4QTdC
QjkxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovLAor
CQkJCUNEOEE3QkJBMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qy5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBvYmpjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTIzMDgzLDYgKzIzMDkzLDggQEAKIAkJCQlDRDU0REU0NTE3NDY4QjZGMDA1RTVCMzYg
LyogTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgKi8sCiAJCQkJQ0QyRjRBMjUxOEQ4QTM0OTAw
NjM3NDZEIC8qIEF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hYy5jcHAgKi8sCiAJCQkJQ0QyRjRBMjYx
OEQ4QTM0OTAwNjM3NDZEIC8qIEF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hYy5oICovLAorCQkJCUNE
QzczNDEyMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3BwICovLAorCQkJCUNEQzcz
NDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0MzA2LDYgKzI0MzE4LDcg
QEAKIAkJCQlBOEVBNzlGQTBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTc5RjcwQTE5MTZERjAwQThFRjVGIC8q
IEhUTUxETGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQzczNDE1MTk3Nzg5NkQw
MDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OEU1MDgy
NDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0Iz
ODY3MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMzA5REU4MDk5RTY0OTIwMDU2RTU4MSAvKiBodG1sZWRpdGluZy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNDk5Miw2ICsyNTAwNSw3IEBACiAJCQkJQjJGQTNEQTMwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHTGVuZ3RoTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQTUwQUI3
NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMkZBM0RBNzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdMaW5lRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQ0Q4QTdCQkMxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RBOTBBQjc1QTZGMDAw
RTVBQzQgLyogSlNTVkdNYXJrZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RB
QjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdNYXNrRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJGQTNEQUQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTWF0cml4LmggaW4gSGVhZGVycyAq
LywKQEAgLTI5MjUwLDYgKzI5MjY0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0Mg
LyogU2hhcmVkQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDYwRUFGRDYz
NzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
QTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJQ0Q4QTdCQkIxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpD
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUIxRDMwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJl
ZFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUQxNjhFNzEwMjI2RTg5MDA5QkM4Mjcg
LyogU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCNzg0
MjAxNjM5Q0JCRTAwMDdCNjkyIC8qIFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yOTQxNiw2ICsyOTQzMSw3IEBACiAJCQkJQjIyMjc5QTQwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyMjI3QjA1MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdCMDYwRDAwQkZGMTAwNzFC
NzgyIC8qIFNWR0NTU1BhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDREM3MzQxNDE5Nzc4
OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
QjA4MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyMjI3OUE3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDdXJzb3JFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUFEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdEZWZz
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJkODNhYjc4ZWNhOWQ2
ZGZkOTFmODBiNWMxZThjNzU3ZGU4OTg4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwCkBAIC0wLDAgKzEsMzExIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNBUmluZ0J1ZmZl
ci5oIgorCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8
bGlia2Vybi9PU0F0b21pYy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK2NvbnN0
IHVpbnQzMl90IGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZVNpemUgPSAzMjsKK2NvbnN0IHVp
bnQzMl90IGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2sgPSBrR2VuZXJhbFJpbmdUaW1l
Qm91bmRzUXVldWVTaXplIC0gMTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1
ZV9wdHI8Q0FSaW5nQnVmZmVyPiBDQVJpbmdCdWZmZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxDQVJpbmdCdWZmZXI+KG5ldyBDQVJpbmdCdWZmZXIoKSk7Cit9CisK
K0NBUmluZ0J1ZmZlcjo6Q0FSaW5nQnVmZmVyKCkKKyAgICA6IG1fY2hhbm5lbENvdW50KDApCisg
ICAgLCBtX2ZyYW1lQ291bnQoMCkKKyAgICAsIG1fY2FwYWNpdHlCeXRlcygwKQorICAgICwgbV90
aW1lQm91bmRzUXVldWUoa0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlU2l6ZSkKKyAgICAsIG1f
dGltZUJvdW5kc1F1ZXVlUHRyKDApCit7Cit9CisKK0NBUmluZ0J1ZmZlcjo6fkNBUmluZ0J1ZmZl
cigpCit7CisgICAgZGVhbGxvY2F0ZSgpOworfQorCit2b2lkIENBUmluZ0J1ZmZlcjo6YWxsb2Nh
dGUodWludDMyX3QgY2hhbm5lbENvdW50LCBzaXplX3QgYnl0ZXNQZXJGcmFtZSwgc2l6ZV90IGZy
YW1lQ291bnQpCit7CisgICAgZGVhbGxvY2F0ZSgpOworCisgICAgZnJhbWVDb3VudCA9IFdURjo6
cm91bmRVcFRvUG93ZXJPZlR3byhmcmFtZUNvdW50KTsKKworICAgIG1fY2hhbm5lbENvdW50ID0g
Y2hhbm5lbENvdW50OworICAgIG1fYnl0ZXNQZXJGcmFtZSA9IGJ5dGVzUGVyRnJhbWU7CisgICAg
bV9mcmFtZUNvdW50ID0gZnJhbWVDb3VudDsKKyAgICBtX2ZyYW1lQ291bnRNYXNrID0gZnJhbWVD
b3VudCAtIDE7CisgICAgbV9jYXBhY2l0eUJ5dGVzID0gYnl0ZXNQZXJGcmFtZSAqIGZyYW1lQ291
bnQ7CisKKyAgICBzaXplX3QgcG9pbnRlcnNTaXplID0gY2hhbm5lbENvdW50ICogc2l6ZW9mKEJ5
dGUqKTsKKyAgICBzaXplX3QgYWxsb2NTaXplID0gcG9pbnRlcnNTaXplICsgKG1fY2FwYWNpdHlC
eXRlcyAqIGNoYW5uZWxDb3VudCk7CisgICAgbV9idWZmZXJzID0gQXJyYXlCdWZmZXI6OmNyZWF0
ZShhbGxvY1NpemUsIDEpOworCisgICAgQnl0ZSoqIHBvaW50ZXJzID0gc3RhdGljX2Nhc3Q8Qnl0
ZSoqPihtX2J1ZmZlcnMtPmRhdGEoKSk7CisgICAgQnl0ZSogY2hhbm5lbERhdGEgPSBzdGF0aWNf
Y2FzdDxCeXRlKj4obV9idWZmZXJzLT5kYXRhKCkpICsgcG9pbnRlcnNTaXplOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYW5uZWxDb3VudDsgKytpKSB7CisgICAgICAgIHBvaW50
ZXJzW2ldID0gY2hhbm5lbERhdGE7CisgICAgICAgIGNoYW5uZWxEYXRhICs9IG1fY2FwYWNpdHlC
eXRlczsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gdGltZUJvdW5kcyA6IG1fdGltZUJvdW5kc1F1
ZXVlKSB7CisgICAgICAgIHRpbWVCb3VuZHMubV9zdGFydEZyYW1lID0gMDsKKyAgICAgICAgdGlt
ZUJvdW5kcy5tX2VuZEZyYW1lID0gMDsKKyAgICAgICAgdGltZUJvdW5kcy5tX3VwZGF0ZUNvdW50
ZXIgPSAwOworICAgIH0KKyAgICBtX3RpbWVCb3VuZHNRdWV1ZVB0ciA9IDA7Cit9CisKK3ZvaWQg
Q0FSaW5nQnVmZmVyOjpkZWFsbG9jYXRlKCkKK3sKKyAgICBpZiAobV9idWZmZXJzKQorICAgICAg
ICBtX2J1ZmZlcnMuY2xlYXIoKTsKKworICAgIG1fY2hhbm5lbENvdW50ID0gMDsKKyAgICBtX2Nh
cGFjaXR5Qnl0ZXMgPSAwOworICAgIG1fZnJhbWVDb3VudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lk
IFplcm9SYW5nZShCeXRlKiogYnVmZmVycywgaW50IGNoYW5uZWxDb3VudCwgc2l6ZV90IG9mZnNl
dCwgc2l6ZV90IG5ieXRlcykKK3sKKyAgICB3aGlsZSAoLS1jaGFubmVsQ291bnQgPj0gMCkgewor
ICAgICAgICBtZW1zZXQoKmJ1ZmZlcnMgKyBvZmZzZXQsIDAsIG5ieXRlcyk7CisgICAgICAgICsr
YnVmZmVyczsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIFN0b3JlQUJMKEJ5dGUqKiBidWZmZXJz
LCBzaXplX3QgZGVzdE9mZnNldCwgY29uc3QgQXVkaW9CdWZmZXJMaXN0KiBsaXN0LCBzaXplX3Qg
c3JjT2Zmc2V0LCBzaXplX3QgbmJ5dGVzKQoreworICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0
LT5tTnVtYmVyQnVmZmVyczsKKyAgICBjb25zdCBBdWRpb0J1ZmZlciogc3JjID0gbGlzdC0+bUJ1
ZmZlcnM7CisgICAgd2hpbGUgKC0tY2hhbm5lbENvdW50ID49IDApIHsKKyAgICAgICAgaWYgKHNy
Y09mZnNldCA+IHNyYy0+bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBtZW1jcHkoKmJ1ZmZlcnMgKyBkZXN0T2Zmc2V0LCBzdGF0aWNfY2FzdDxCeXRlKj4oc3Jj
LT5tRGF0YSkgKyBzcmNPZmZzZXQsIHN0ZDo6bWluPHNpemVfdD4obmJ5dGVzLCBzcmMtPm1EYXRh
Qnl0ZVNpemUgLSBzcmNPZmZzZXQpKTsKKyAgICAgICAgKytidWZmZXJzOworICAgICAgICArK3Ny
YzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZldGNoQUJMKEF1ZGlvQnVmZmVyTGlzdCogbGlz
dCwgc2l6ZV90IGRlc3RPZmZzZXQsIEJ5dGUqKiBidWZmZXJzLCBzaXplX3Qgc3JjT2Zmc2V0LCBz
aXplX3QgbmJ5dGVzKQoreworICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0LT5tTnVtYmVyQnVm
ZmVyczsKKyAgICBBdWRpb0J1ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJzOworICAgIHdoaWxl
ICgtLWNoYW5uZWxDb3VudCA+PSAwKSB7CisgICAgICAgIGlmIChkZXN0T2Zmc2V0ID4gZGVzdC0+
bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtZW1jcHkoc3Rh
dGljX2Nhc3Q8Qnl0ZSo+KGRlc3QtPm1EYXRhKSArIGRlc3RPZmZzZXQsICpidWZmZXJzICsgc3Jj
T2Zmc2V0LCBzdGQ6Om1pbjxzaXplX3Q+KG5ieXRlcywgZGVzdC0+bURhdGFCeXRlU2l6ZSAtIGRl
c3RPZmZzZXQpKTsKKyAgICAgICAgKytidWZmZXJzOworICAgICAgICArK2Rlc3Q7CisgICAgfQor
fQorCitpbmxpbmUgdm9pZCBaZXJvQUJMKEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGRl
c3RPZmZzZXQsIHNpemVfdCBuYnl0ZXMpCit7CisgICAgaW50IG5CdWZmZXJzID0gbGlzdC0+bU51
bWJlckJ1ZmZlcnM7CisgICAgQXVkaW9CdWZmZXIqIGRlc3QgPSBsaXN0LT5tQnVmZmVyczsKKyAg
ICB3aGlsZSAoLS1uQnVmZmVycyA+PSAwKSB7CisgICAgICAgIGlmIChkZXN0T2Zmc2V0ID4gZGVz
dC0+bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtZW1zZXQo
c3RhdGljX2Nhc3Q8Qnl0ZSo+KGRlc3QtPm1EYXRhKSArIGRlc3RPZmZzZXQsIDAsIHN0ZDo6bWlu
PHNpemVfdD4obmJ5dGVzLCBkZXN0LT5tRGF0YUJ5dGVTaXplIC0gZGVzdE9mZnNldCkpOworICAg
ICAgICArK2Rlc3Q7CisgICAgfQorfQorCitDQVJpbmdCdWZmZXI6OkVycm9yIENBUmluZ0J1ZmZl
cjo6c3RvcmUoY29uc3QgQXVkaW9CdWZmZXJMaXN0KiBsaXN0LCBzaXplX3QgZnJhbWVzVG9Xcml0
ZSwgdWludDY0X3Qgc3RhcnRGcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lc1RvV3JpdGUpCisgICAg
ICAgIHJldHVybiBPazsKKworICAgIGlmIChmcmFtZXNUb1dyaXRlID4gbV9mcmFtZUNvdW50KQor
ICAgICAgICByZXR1cm4gVG9vTXVjaDsKKworICAgIHVpbnQ2NF90IGVuZEZyYW1lID0gc3RhcnRG
cmFtZSArIGZyYW1lc1RvV3JpdGU7CisKKyAgICBpZiAoc3RhcnRGcmFtZSA8IGN1cnJlbnRFbmRG
cmFtZSgpKSB7CisgICAgICAgIC8vIFRocm93IGV2ZXJ5dGhpbmcgb3V0IHdoZW4gZ29pbmcgYmFj
a3dhcmRzLgorICAgICAgICBzZXRDdXJyZW50RnJhbWVCb3VuZHMoc3RhcnRGcmFtZSwgc3RhcnRG
cmFtZSk7CisgICAgfSBlbHNlIGlmIChlbmRGcmFtZSAtIGN1cnJlbnRTdGFydEZyYW1lKCkgPD0g
bV9mcmFtZUNvdW50KSB7CisgICAgICAgIC8vIFRoZSBidWZmZXIgaGFzIG5vdCB5ZXQgd3JhcHBl
ZCBhbmQgd2lsbCBub3QgbmVlZCB0by4KKyAgICAgICAgLy8gTm8tb3AuCisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gQWR2YW5jZSB0aGUgc3RhcnQgdGltZSBwYXN0IHRoZSByZWdpb24gd2UgYXJl
IGFib3V0IHRvIG92ZXJ3cml0ZQorICAgICAgICAvLyBzdGFydGluZyBvbmUgYnVmZmVyIG9mIHRp
bWUgYmVoaW5kIHdoZXJlIHdlJ3JlIHdyaXRpbmcuCisgICAgICAgIHVpbnQ2NF90IG5ld1N0YXJ0
RnJhbWUgPSBlbmRGcmFtZSAtIG1fZnJhbWVDb3VudDsKKyAgICAgICAgdWludDY0X3QgbmV3RW5k
RnJhbWUgPSBzdGQ6Om1heChuZXdTdGFydEZyYW1lLCBjdXJyZW50RW5kRnJhbWUoKSk7CisgICAg
ICAgIHNldEN1cnJlbnRGcmFtZUJvdW5kcyhuZXdTdGFydEZyYW1lLCBuZXdFbmRGcmFtZSk7Cisg
ICAgfQorCisgICAgLy8gV3JpdGUgdGhlIG5ldyBmcmFtZXMuCisgICAgQnl0ZSoqIGJ1ZmZlcnMg
PSBzdGF0aWNfY2FzdDxCeXRlKio+KG1fYnVmZmVycy0+ZGF0YSgpKTsKKyAgICBzaXplX3Qgb2Zm
c2V0MDsKKyAgICBzaXplX3Qgb2Zmc2V0MTsKKyAgICB1aW50NjRfdCBjdXJFbmQgPSBjdXJyZW50
RW5kRnJhbWUoKTsKKworICAgIGlmIChzdGFydEZyYW1lID4gY3VyRW5kKSB7CisgICAgICAgIC8v
IFdlIGFyZSBza2lwcGluZyBzb21lIHNhbXBsZXMsIHNvIHplcm8gdGhlIHJhbmdlIHdlIGFyZSBz
a2lwcGluZy4KKyAgICAgICAgb2Zmc2V0MCA9IGZyYW1lT2Zmc2V0KGN1ckVuZCk7CisgICAgICAg
IG9mZnNldDEgPSBmcmFtZU9mZnNldChzdGFydEZyYW1lKTsKKyAgICAgICAgaWYgKG9mZnNldDAg
PCBvZmZzZXQxKQorICAgICAgICAgICAgWmVyb1JhbmdlKGJ1ZmZlcnMsIG1fY2hhbm5lbENvdW50
LCBvZmZzZXQwLCBvZmZzZXQxIC0gb2Zmc2V0MCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgWmVyb1JhbmdlKGJ1ZmZlcnMsIG1fY2hhbm5lbENvdW50LCBvZmZzZXQwLCBtX2NhcGFjaXR5
Qnl0ZXMgLSBvZmZzZXQwKTsKKyAgICAgICAgICAgIFplcm9SYW5nZShidWZmZXJzLCBtX2NoYW5u
ZWxDb3VudCwgMCwgb2Zmc2V0MSk7CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0MCA9IG9mZnNl
dDE7CisgICAgfSBlbHNlCisgICAgICAgIG9mZnNldDAgPSBmcmFtZU9mZnNldChzdGFydEZyYW1l
KTsKKworICAgIG9mZnNldDEgPSBmcmFtZU9mZnNldChlbmRGcmFtZSk7CisgICAgaWYgKG9mZnNl
dDAgPCBvZmZzZXQxKQorICAgICAgICBTdG9yZUFCTChidWZmZXJzLCBvZmZzZXQwLCBsaXN0LCAw
LCBvZmZzZXQxIC0gb2Zmc2V0MCk7CisgICAgZWxzZSB7CisgICAgICAgIHNpemVfdCBuYnl0ZXMg
PSBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwOworICAgICAgICBTdG9yZUFCTChidWZmZXJzLCBv
ZmZzZXQwLCBsaXN0LCAwLCBuYnl0ZXMpOworICAgICAgICBTdG9yZUFCTChidWZmZXJzLCAwLCBs
aXN0LCBuYnl0ZXMsIG9mZnNldDEpOworICAgIH0KKworICAgIC8vIE5vdyB1cGRhdGUgdGhlIGVu
ZCB0aW1lLgorICAgIHNldEN1cnJlbnRGcmFtZUJvdW5kcyhjdXJyZW50U3RhcnRGcmFtZSgpLCBl
bmRGcmFtZSk7CisKKyAgICByZXR1cm4gT2s7Cit9CisKK3ZvaWQgQ0FSaW5nQnVmZmVyOjpzZXRD
dXJyZW50RnJhbWVCb3VuZHModWludDY0X3Qgc3RhcnRUaW1lLCB1aW50NjRfdCBlbmRUaW1lKQor
eworICAgIEJ5dGVTcGluTG9ja2VyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOwor
ICAgIHVpbnQzMl90IG5leHRQdHIgPSBtX3RpbWVCb3VuZHNRdWV1ZVB0ciArIDE7CisgICAgdWlu
dDMyX3QgaW5kZXggPSBuZXh0UHRyICYga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFzazsK
KworICAgIG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX3N0YXJ0RnJhbWUgPSBzdGFydFRpbWU7
CisgICAgbV90aW1lQm91bmRzUXVldWVbaW5kZXhdLm1fZW5kRnJhbWUgPSBlbmRUaW1lOworICAg
IG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX3VwZGF0ZUNvdW50ZXIgPSBuZXh0UHRyOworICAg
IE9TQXRvbWljSW5jcmVtZW50MzJCYXJyaWVyKHN0YXRpY19jYXN0PGludDMyX3QqPigmbV90aW1l
Qm91bmRzUXVldWVQdHIpKTsKK30KKwordm9pZCBDQVJpbmdCdWZmZXI6OmdldEN1cnJlbnRGcmFt
ZUJvdW5kcyh1aW50NjRfdCAmc3RhcnRUaW1lLCB1aW50NjRfdCAmZW5kVGltZSkKK3sKKyAgICBC
eXRlU3BpbkxvY2tlciBsb2NrZXIobV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrKTsKKyAgICB1aW50
MzJfdCBjdXJQdHIgPSBtX3RpbWVCb3VuZHNRdWV1ZVB0cjsKKyAgICB1aW50MzJfdCBpbmRleCA9
IGN1clB0ciAmIGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2s7CisgICAgQ0FSaW5nQnVm
ZmVyOjpUaW1lQm91bmRzJiBib3VuZHMgPSBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF07CisKKyAg
ICBzdGFydFRpbWUgPSBib3VuZHMubV9zdGFydEZyYW1lOworICAgIGVuZFRpbWUgPSBib3VuZHMu
bV9lbmRGcmFtZTsKK30KKwordm9pZCBDQVJpbmdCdWZmZXI6OmNsaXBUaW1lQm91bmRzKHVpbnQ2
NF90JiBzdGFydFJlYWQsIHVpbnQ2NF90JiBlbmRSZWFkKQoreworICAgIHVpbnQ2NF90IHN0YXJ0
VGltZTsKKyAgICB1aW50NjRfdCBlbmRUaW1lOworCisgICAgZ2V0Q3VycmVudEZyYW1lQm91bmRz
KHN0YXJ0VGltZSwgZW5kVGltZSk7CisKKyAgICBpZiAoc3RhcnRSZWFkID4gZW5kVGltZSB8fCBl
bmRSZWFkIDwgc3RhcnRUaW1lKSB7CisgICAgICAgIGVuZFJlYWQgPSBzdGFydFJlYWQ7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGFydFJlYWQgPSBzdGQ6Om1heChzdGFydFJlYWQs
IHN0YXJ0VGltZSk7CisgICAgZW5kUmVhZCA9IHN0ZDo6bWluKGVuZFJlYWQsIGVuZFRpbWUpOwor
ICAgIGVuZFJlYWQgPSBzdGQ6Om1heChlbmRSZWFkLCBzdGFydFJlYWQpOworfQorCit1aW50NjRf
dCBDQVJpbmdCdWZmZXI6OmN1cnJlbnRTdGFydEZyYW1lKCkgY29uc3QKK3sKKyAgICB1aW50MzJf
dCBpbmRleCA9IG1fdGltZUJvdW5kc1F1ZXVlUHRyICYga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1
ZXVlTWFzazsKKyAgICByZXR1cm4gbV90aW1lQm91bmRzUXVldWVbaW5kZXhdLm1fc3RhcnRGcmFt
ZTsKK30KKwordWludDY0X3QgQ0FSaW5nQnVmZmVyOjpjdXJyZW50RW5kRnJhbWUoKSBjb25zdAor
eworICAgIHVpbnQzMl90IGluZGV4ID0gbV90aW1lQm91bmRzUXVldWVQdHIgJiBrR2VuZXJhbFJp
bmdUaW1lQm91bmRzUXVldWVNYXNrOworICAgIHJldHVybiBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRl
eF0ubV9lbmRGcmFtZTsKK30KKworQ0FSaW5nQnVmZmVyOjpFcnJvciBDQVJpbmdCdWZmZXI6OmZl
dGNoKEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IG5GcmFtZXMsIHVpbnQ2NF90IHN0YXJ0
UmVhZCkKK3sKKyAgICBpZiAoIW5GcmFtZXMpCisgICAgICAgIHJldHVybiBPazsKKyAgICAKKyAg
ICBzdGFydFJlYWQgPSBzdGQ6Om1heDx1aW50NjRfdD4oMCwgc3RhcnRSZWFkKTsKKyAgICAKKyAg
ICB1aW50NjRfdCBlbmRSZWFkID0gc3RhcnRSZWFkICsgbkZyYW1lczsKKyAgICAKKyAgICB1aW50
NjRfdCBzdGFydFJlYWQwID0gc3RhcnRSZWFkOworICAgIHVpbnQ2NF90IGVuZFJlYWQwID0gZW5k
UmVhZDsKKyAgICAKKyAgICBjbGlwVGltZUJvdW5kcyhzdGFydFJlYWQsIGVuZFJlYWQpOworCisg
ICAgaWYgKHN0YXJ0UmVhZCA9PSBlbmRSZWFkKSB7CisgICAgICAgIFplcm9BQkwobGlzdCwgMCwg
bkZyYW1lcyAqIG1fYnl0ZXNQZXJGcmFtZSk7CisgICAgICAgIHJldHVybiBPazsKKyAgICB9Cisg
ICAgCisgICAgc2l6ZV90IGJ5dGVTaXplID0gKGVuZFJlYWQgLSBzdGFydFJlYWQpICogbV9ieXRl
c1BlckZyYW1lOworICAgIAorICAgIHNpemVfdCBkZXN0U3RhcnRCeXRlT2Zmc2V0ID0gc3RkOjpt
YXg8c2l6ZV90PigwLCAoc3RhcnRSZWFkIC0gc3RhcnRSZWFkMCkgKiBtX2J5dGVzUGVyRnJhbWUp
OworICAgIAorICAgIGlmIChkZXN0U3RhcnRCeXRlT2Zmc2V0ID4gMCkKKyAgICAgICAgWmVyb0FC
TChsaXN0LCAwLCBzdGQ6Om1pbjxzaXplX3Q+KG5GcmFtZXMgKiBtX2J5dGVzUGVyRnJhbWUsIGRl
c3RTdGFydEJ5dGVPZmZzZXQpKTsKKworICAgIHNpemVfdCBkZXN0RW5kU2l6ZSA9IHN0ZDo6bWF4
PHNpemVfdD4oMCwgZW5kUmVhZDAgLSBlbmRSZWFkKTsKKyAgICBpZiAoZGVzdEVuZFNpemUgPiAw
KQorICAgICAgICBaZXJvQUJMKGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQgKyBieXRlU2l6ZSwg
ZGVzdEVuZFNpemUgKiBtX2J5dGVzUGVyRnJhbWUpOworCisgICAgQnl0ZSAqKmJ1ZmZlcnMgPSBz
dGF0aWNfY2FzdDxCeXRlKio+KG1fYnVmZmVycy0+ZGF0YSgpKTsKKyAgICBzaXplX3Qgb2Zmc2V0
MCA9IGZyYW1lT2Zmc2V0KHN0YXJ0UmVhZCk7CisgICAgc2l6ZV90IG9mZnNldDEgPSBmcmFtZU9m
ZnNldChlbmRSZWFkKTsKKyAgICBzaXplX3QgbmJ5dGVzOworICAgIAorICAgIGlmIChvZmZzZXQw
IDwgb2Zmc2V0MSkgeworICAgICAgICBuYnl0ZXMgPSBvZmZzZXQxIC0gb2Zmc2V0MDsKKyAgICAg
ICAgRmV0Y2hBQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCwgYnVmZmVycywgb2Zmc2V0MCwg
bmJ5dGVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBuYnl0ZXMgPSBtX2NhcGFjaXR5Qnl0ZXMg
LSBvZmZzZXQwOworICAgICAgICBGZXRjaEFCTChsaXN0LCBkZXN0U3RhcnRCeXRlT2Zmc2V0LCBi
dWZmZXJzLCBvZmZzZXQwLCBuYnl0ZXMpOworICAgICAgICBGZXRjaEFCTChsaXN0LCBkZXN0U3Rh
cnRCeXRlT2Zmc2V0ICsgbmJ5dGVzLCBidWZmZXJzLCAwLCBvZmZzZXQxKTsKKyAgICAgICAgbmJ5
dGVzICs9IG9mZnNldDE7CisgICAgfQorICAgIAorICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0
LT5tTnVtYmVyQnVmZmVyczsKKyAgICBBdWRpb0J1ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJz
OworICAgIHdoaWxlICgtLWNoYW5uZWxDb3VudCA+PSAwKSB7CisgICAgICAgIGRlc3QtPm1EYXRh
Qnl0ZVNpemUgPSBuYnl0ZXM7CisgICAgICAgIGRlc3QrKzsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIE9rOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvQ0FSaW5nQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMv
Q0FSaW5nQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ5YjA1MjRhY2FhZTAzM2IyZDAxYjExNDBmOWRl
ZjkzOTVlYjQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL21hYy9DQVJpbmdCdWZmZXIuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDQVJpbmdCdWZmZXJfaAorI2RlZmluZSBDQVJpbmdCdWZmZXJfaAorCisjaW5jbHVkZSA8
cnVudGltZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3R5cGVkZWYgc3RydWN0IEF1ZGlvQnVmZmVyTGlzdCBB
dWRpb0J1ZmZlckxpc3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0FSaW5nQnVm
ZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENBUmluZ0J1ZmZlcj4g
Y3JlYXRlKCk7CisgICAgfkNBUmluZ0J1ZmZlcigpOworCisgICAgZW51bSBFcnJvciB7CisgICAg
ICAgIE9rLAorICAgICAgICBUb29NdWNoLCAvLyBmZXRjaCBzdGFydCB0aW1lIGlzIGVhcmxpZXIg
dGhhbiBidWZmZXIgc3RhcnQgdGltZSBhbmQgZmV0Y2ggZW5kIHRpbWUgaXMgbGF0ZXIgdGhhbiBi
dWZmZXIgZW5kIHRpbWUKKyAgICAgICAgQ1BVT3ZlcmxvYWQsIC8vIHRoZSByZWFkZXIgaXMgdW5h
YmxlIHRvIGdldCBlbm91Z2ggQ1BVIGN5Y2xlcyB0byBjYXB0dXJlIGEgY29uc2lzdGVudCBzbmFw
c2hvdCBvZiB0aGUgdGltZSBib3VuZHMKKyAgICB9OworCisgICAgdm9pZCBhbGxvY2F0ZSh1aW50
MzJfdCBtX2NoYW5uZWxDb3VudCwgc2l6ZV90IGJ5dGVzUGVyRnJhbWUsIHNpemVfdCBmcmFtZUNv
dW50KTsKKyAgICB2b2lkIGRlYWxsb2NhdGUoKTsKKyAgICBFcnJvciBzdG9yZShjb25zdCBBdWRp
b0J1ZmZlckxpc3QqLCBzaXplX3QgZnJhbWVDb3VudCwgdWludDY0X3Qgc3RhcnRGcmFtZSk7Cisg
ICAgRXJyb3IgZmV0Y2goQXVkaW9CdWZmZXJMaXN0Kiwgc2l6ZV90IGZyYW1lQ291bnQsIHVpbnQ2
NF90IHN0YXJ0RnJhbWUpOworICAgIHZvaWQgZ2V0Q3VycmVudEZyYW1lQm91bmRzKHVpbnQ2NF90
ICZzdGFydFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1lKTsKKworICAgIHVpbnQzMl90IGNoYW5uZWxD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5lbENvdW50OyB9CisKK3ByaXZhdGU6CisgICAg
Q0FSaW5nQnVmZmVyKCk7CisKKyAgICBzaXplX3QgZnJhbWVPZmZzZXQodWludDY0X3QgZnJhbWVO
dW1iZXIpIHsgcmV0dXJuIChmcmFtZU51bWJlciAmIG1fZnJhbWVDb3VudE1hc2spICogbV9ieXRl
c1BlckZyYW1lOyB9CisKKyAgICB2b2lkIGNsaXBUaW1lQm91bmRzKHVpbnQ2NF90JiBzdGFydFJl
YWQsIHVpbnQ2NF90JiBlbmRSZWFkKTsKKworICAgIHVpbnQ2NF90IGN1cnJlbnRTdGFydEZyYW1l
KCkgY29uc3Q7CisgICAgdWludDY0X3QgY3VycmVudEVuZEZyYW1lKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3Qgc3RhcnRGcmFtZSwgdWludDY0X3QgZW5k
RnJhbWUpOworCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcnM7CisgICAgdWludDMy
X3QgbV9jaGFubmVsQ291bnQ7CisgICAgc2l6ZV90IG1fYnl0ZXNQZXJGcmFtZTsKKyAgICB1aW50
MzJfdCBtX2ZyYW1lQ291bnQ7CisgICAgdWludDMyX3QgbV9mcmFtZUNvdW50TWFzazsKKyAgICBz
aXplX3QgbV9jYXBhY2l0eUJ5dGVzOworCisgICAgc3RydWN0IFRpbWVCb3VuZHMgeworICAgICAg
ICBUaW1lQm91bmRzKCkKKyAgICAgICAgICAgIDogbV9zdGFydEZyYW1lKDApCisgICAgICAgICAg
ICAsIG1fZW5kRnJhbWUoMCkKKyAgICAgICAgICAgICwgbV91cGRhdGVDb3VudGVyKDApCisgICAg
ICAgIHsKKyAgICAgICAgfQorICAgICAgICB2b2xhdGlsZSB1aW50NjRfdCBtX3N0YXJ0RnJhbWU7
CisgICAgICAgIHZvbGF0aWxlIHVpbnQ2NF90IG1fZW5kRnJhbWU7CisgICAgICAgIHZvbGF0aWxl
IHVpbnQzMl90IG1fdXBkYXRlQ291bnRlcjsKKyAgICB9OworICAgIAorICAgIFZlY3RvcjxUaW1l
Qm91bmRzPiBtX3RpbWVCb3VuZHNRdWV1ZTsKKyAgICBCeXRlU3BpbkxvY2sgbV9jdXJyZW50RnJh
bWVCb3VuZHNMb2NrOworICAgIGludDMyX3QgbV90aW1lQm91bmRzUXVldWVQdHI7Cit9OworCit9
CisKKworI2VuZGlmIC8vIENBUmluZ0J1ZmZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhNmZmOTI5OWYwMTgzZWMxNzA5
YmI5NjIwNmRiYTJhYmY3OGQzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMu
aApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakNfaAorI2RlZmluZSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQ19oCisKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKSAmJiBVU0UoTUVESUFUT09MQk9YKQorCisjaW5jbHVkZSAiQXVkaW9T
b3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgQVZQbGF5ZXJJdGVtOworT0JKQ19DTEFTUyBBVk11
dGFibGVBdWRpb01peDsKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlTVRBdWRpb1Byb2Nl
c3NpbmdUYXAgKk1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmOwordHlwZWRlZiBzdHJ1Y3QgQXVkaW9C
dWZmZXJMaXN0IEF1ZGlvQnVmZmVyTGlzdDsKK3R5cGVkZWYgc3RydWN0IEF1ZGlvU3RyZWFtQmFz
aWNEZXNjcmlwdGlvbiBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb247Cit0eXBlZGVmIHN0cnVj
dCBPcGFxdWVBdWRpb0NvbnZlcnRlciogQXVkaW9Db252ZXJ0ZXJSZWY7Cit0eXBlZGVmIHVpbnQz
Ml90IE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3M7Cit0eXBlZGVmIHNpZ25lZCBsb25nIENNSXRl
bUNvdW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENBUmluZ0J1ZmZlcjsKKwor
Y2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMgOiBwdWJsaWMgUmVmQ291bnRlZDxBdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQz4sIHB1YmxpYyBBdWRpb1NvdXJjZVByb3ZpZGVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQz4g
Y3JlYXRlKEFWUGxheWVySXRlbSopOworICAgIHZpcnR1YWwgfkF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDKCk7CisKKyAgICB2b2lkIHNldFBsYXllckl0ZW0oQVZQbGF5ZXJJdGVtICopOworCitw
cml2YXRlOgorICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKEFWUGxheWVySXRlbSAqKTsK
KworICAgIHZvaWQgZGVzdHJveU1peCgpOworICAgIHZvaWQgY3JlYXRlTWl4KCk7CisKKyAgICAv
LyBBdWRpb1NvdXJjZVByb3ZpZGVyCisgICAgdmlydHVhbCB2b2lkIHByb3ZpZGVJbnB1dChBdWRp
b0J1cyosIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDbGllbnQoQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCopIG92ZXJyaWRlOworCisgICAg
c3RhdGljIHZvaWQgaW5pdENhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmLCB2b2lkKiwg
dm9pZCoqKTsKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZUNhbGxiYWNrKE1UQXVkaW9Qcm9jZXNz
aW5nVGFwUmVmKTsKKyAgICBzdGF0aWMgdm9pZCBwcmVwYXJlQ2FsbGJhY2soTVRBdWRpb1Byb2Nl
c3NpbmdUYXBSZWYsIENNSXRlbUNvdW50LCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24qKTsKKyAgICBzdGF0aWMgdm9pZCB1bnByZXBhcmVDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2lu
Z1RhcFJlZik7CisgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0NhbGxiYWNrKE1UQXVkaW9Qcm9jZXNz
aW5nVGFwUmVmLCBDTUl0ZW1Db3VudCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncywgQXVkaW9C
dWZmZXJMaXN0KiwgQ01JdGVtQ291bnQqLCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEZsYWdzKik7CisK
KyAgICB2b2lkIGluaXQodm9pZCogY2xpZW50SW5mbywgdm9pZCoqIHRhcFN0b3JhZ2VPdXQpOwor
ICAgIHZvaWQgZmluYWxpemUoKTsKKyAgICB2b2lkIHByZXBhcmUoQ01JdGVtQ291bnQgbWF4RnJh
bWVzLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKnByb2Nlc3NpbmdGb3JtYXQp
OworICAgIHZvaWQgdW5wcmVwYXJlKCk7CisgICAgdm9pZCBwcm9jZXNzKENNSXRlbUNvdW50IG51
bWJlckZyYW1lcywgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyBmbGFnc0luLCBBdWRpb0J1ZmZl
ckxpc3QgKmJ1ZmZlckxpc3RJbk91dCwgQ01JdGVtQ291bnQgKm51bWJlckZyYW1lc091dCwgTVRB
dWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NPdXQpOworCisgICAgUmV0YWluUHRyPEFWUGxh
eWVySXRlbT4gbV9hdlBsYXllckl0ZW07CisgICAgUmV0YWluUHRyPEFWTXV0YWJsZUF1ZGlvTWl4
PiBtX2F2QXVkaW9NaXg7CisgICAgUmV0YWluUHRyPE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmPiBt
X3RhcDsKKyAgICBSZXRhaW5QdHI8QXVkaW9Db252ZXJ0ZXJSZWY+IG1fY29udmVydGVyOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxpc3Q+IG1fbGlzdDsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uPiBtX3RhcERlc2NyaXB0aW9uOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+IG1fb3V0cHV0RGVz
Y3JpcHRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENBUmluZ0J1ZmZlcj4gbV9yaW5nQnVmZmVy
OworCisgICAgTWVkaWFUaW1lIG1fc3RhcnRUaW1lQXRMYXN0UHJvY2VzczsKKyAgICBNZWRpYVRp
bWUgbV9lbmRUaW1lQXRMYXN0UHJvY2VzczsKKyAgICB1aW50NjRfdCBtX3dyaXRlQWhlYWRDb3Vu
dDsKKyAgICB1aW50NjRfdCBtX3dyaXRlQ291bnQ7CisgICAgdWludDY0X3QgbV9yZWFkQ291bnQ7
CisgICAgYm9vbCBtX3BhdXNlZDsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50KiBtX2Ns
aWVudDsKK307CisgICAgCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODFlYTczMWU2
ZjExOTA5ZDNlMTQ3MDU3NmYxYWU5NTdkMzMzNTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlk
ZXJBVkZPYmpDLm1tCkBAIC0wLDAgKzEsMzk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIgorCisjaWYgRU5BQkxF
KFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKKworI2ltcG9ydCAiQXVkaW9CdXMuaCIK
KyNpbXBvcnQgIkF1ZGlvQ2hhbm5lbC5oIgorI2ltcG9ydCAiQXVkaW9Tb3VyY2VQcm92aWRlckNs
aWVudC5oIgorI2ltcG9ydCAiQ0FSaW5nQnVmZmVyLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisj
aW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgi
CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldFRyYWNrLmg+CisjaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZBdWRpb01peC5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWTWVkaWFGb3JtYXQu
aD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlBsYXllckl0ZW0uaD4KKyNpbXBvcnQgPEFWRm91
bmRhdGlvbi9BVlBsYXllckl0ZW1UcmFjay5oPgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Cisj
aW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgorCisjaWYgIUxPR19ESVNBQkxFRAorI2luY2x1ZGUg
PHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorI2VuZGlmCisKK1NPRlRfTElOS19GUkFNRVdPUkso
QVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0ZSQU1FV09SSyhNZWRpYVRvb2xib3gpCitTT0ZUX0xJ
TktfRlJBTUVXT1JLKEF1ZGlvVG9vbGJveCkKK1NPRlRfTElOS19GUkFNRVdPUksoQ29yZU1lZGlh
KQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckl0ZW0pCitTT0ZUX0xJ
TktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVk11dGFibGVBdWRpb01peCkKK1NPRlRfTElOS19DTEFT
UyhBVkZvdW5kYXRpb24sIEFWTXV0YWJsZUF1ZGlvTWl4SW5wdXRQYXJhbWV0ZXJzKQorCit0eXBl
ZGVmIHN0cnVjdCBvcGFxdWVDTU5vdGlmaWNhdGlvbkNlbnRlciAqQ01Ob3RpZmljYXRpb25DZW50
ZXJSZWY7Cit0eXBlZGVmIHZvaWQgKCpDTU5vdGlmaWNhdGlvbkNhbGxiYWNrKShDTU5vdGlmaWNh
dGlvbkNlbnRlclJlZiBpbkNlbnRlciwgY29uc3Qgdm9pZCAqaW5MaXN0ZW5lciwgQ0ZTdHJpbmdS
ZWYgaW5Ob3RpZmljYXRpb25OYW1lLCBjb25zdCB2b2lkICppbk5vdGlmeWluZ09iamVjdCwgQ0ZU
eXBlUmVmIGluTm90aWZpY2F0aW9uUGF5bG9hZCk7CisKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENN
Tm90aWZpY2F0aW9uQ2VudGVyR2V0RGVmYXVsdExvY2FsQ2VudGVyLCBDTU5vdGlmaWNhdGlvbkNl
bnRlclJlZiwgKHZvaWQpLCAoKSk7CitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTU5vdGlmaWNhdGlv
bkNlbnRlckFkZExpc3RlbmVyLCBPU1N0YXR1cywgKENNTm90aWZpY2F0aW9uQ2VudGVyUmVmIGNl
bnRlciwgY29uc3Qgdm9pZCogbGlzdGVuZXIsIENNTm90aWZpY2F0aW9uQ2FsbGJhY2sgY2FsbGJh
Y2ssIENGU3RyaW5nUmVmIG5vdGlmaWNhdGlvbiwgY29uc3Qgdm9pZCogb2JqZWN0LCBVSW50MzIg
ZmxhZ3MpLCAoY2VudGVyLCBsaXN0ZW5lciwgY2FsbGJhY2ssIG5vdGlmaWNhdGlvbiwgb2JqZWN0
LCBmbGFncykpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTU5vdGlmaWNhdGlvbkNlbnRlclJlbW92
ZUxpc3RlbmVyLCBPU1N0YXR1cywgKENNTm90aWZpY2F0aW9uQ2VudGVyUmVmIGNlbnRlciwgY29u
c3Qgdm9pZCogbGlzdGVuZXIsIENNTm90aWZpY2F0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIENGU3Ry
aW5nUmVmIG5vdGlmaWNhdGlvbiwgY29uc3Qgdm9pZCogb2JqZWN0KSwgKGNlbnRlciwgbGlzdGVu
ZXIsIGNhbGxiYWNrLCBub3RpZmljYXRpb24sIG9iamVjdCkpCitTT0ZUX0xJTksoQ29yZU1lZGlh
LCBDTVRpbWViYXNlR2V0VGltZSwgQ01UaW1lLCAoQ01UaW1lYmFzZVJlZiB0aW1lYmFzZSksICh0
aW1lYmFzZSkpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWViYXNlR2V0RWZmZWN0aXZlUmF0
ZSwgRmxvYXQ2NCwgKENNVGltZWJhc2VSZWYgdGltZWJhc2UpLCAodGltZWJhc2UpKQorCitTT0ZU
X0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01UaW1lYmFzZU5vdGlmaWNhdGlvbl9FZmZlY3Rp
dmVSYXRlQ2hhbmdlZCwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlh
LCBrQ01UaW1lYmFzZU5vdGlmaWNhdGlvbl9UaW1lSnVtcGVkLCBDRlN0cmluZ1JlZikKKyNkZWZp
bmUga0NNVGltZWJhc2VOb3RpZmljYXRpb25fRWZmZWN0aXZlUmF0ZUNoYW5nZWQgZ2V0a0NNVGlt
ZWJhc2VOb3RpZmljYXRpb25fRWZmZWN0aXZlUmF0ZUNoYW5nZWQoKQorI2RlZmluZSBrQ01UaW1l
YmFzZU5vdGlmaWNhdGlvbl9UaW1lSnVtcGVkIGdldGtDTVRpbWViYXNlTm90aWZpY2F0aW9uX1Rp
bWVKdW1wZWQoKQorCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbnZlcnRlckNvbnZl
cnRDb21wbGV4QnVmZmVyLCBPU1N0YXR1cywgKEF1ZGlvQ29udmVydGVyUmVmIGluQXVkaW9Db252
ZXJ0ZXIsIFVJbnQzMiBpbk51bWJlclBDTUZyYW1lcywgY29uc3QgQXVkaW9CdWZmZXJMaXN0KiBp
bklucHV0RGF0YSwgQXVkaW9CdWZmZXJMaXN0KiBvdXRPdXRwdXREYXRhKSwgKGluQXVkaW9Db252
ZXJ0ZXIsIGluTnVtYmVyUENNRnJhbWVzLCBpbklucHV0RGF0YSwgb3V0T3V0cHV0RGF0YSkpCitT
T0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbnZlcnRlck5ldywgT1NTdGF0dXMsIChjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qIGluU291cmNlRm9ybWF0LCBjb25zdCBBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qIGluRGVzdGluYXRpb25Gb3JtYXQsIEF1ZGlvQ29udmVy
dGVyUmVmKiBvdXRBdWRpb0NvbnZlcnRlciksIChpblNvdXJjZUZvcm1hdCwgaW5EZXN0aW5hdGlv
bkZvcm1hdCwgb3V0QXVkaW9Db252ZXJ0ZXIpKQorCitTT0ZUX0xJTksoTWVkaWFUb29sYm94LCBN
VEF1ZGlvUHJvY2Vzc2luZ1RhcEdldFN0b3JhZ2UsIHZvaWQqLCAoTVRBdWRpb1Byb2Nlc3NpbmdU
YXBSZWYgdGFwKSwgKHRhcCkpCitTT0ZUX0xJTksoTWVkaWFUb29sYm94LCBNVEF1ZGlvUHJvY2Vz
c2luZ1RhcEdldFNvdXJjZUF1ZGlvLCBPU1N0YXR1cywgKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVm
IHRhcCwgQ01JdGVtQ291bnQgbnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxp
c3RJbk91dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NPdXQsIENNVGltZVJhbmdl
ICp0aW1lUmFuZ2VPdXQsIENNSXRlbUNvdW50ICpudW1iZXJGcmFtZXNPdXQpLCAodGFwLCBudW1i
ZXJGcmFtZXMsIGJ1ZmZlckxpc3RJbk91dCwgZmxhZ3NPdXQsIHRpbWVSYW5nZU91dCwgbnVtYmVy
RnJhbWVzT3V0KSkKK1NPRlRfTElOS19NQVlfRkFJTChNZWRpYVRvb2xib3gsIE1UQXVkaW9Qcm9j
ZXNzaW5nVGFwQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgY29u
c3QgTVRBdWRpb1Byb2Nlc3NpbmdUYXBDYWxsYmFja3MgKmNhbGxiYWNrcywgTVRBdWRpb1Byb2Nl
c3NpbmdUYXBDcmVhdGlvbkZsYWdzIGZsYWdzLCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiAqdGFw
T3V0KSwgKGFsbG9jYXRvciwgY2FsbGJhY2tzLCBmbGFncywgdGFwT3V0KSkKKworU09GVF9MSU5L
X1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlLCBOU1N0
cmluZyAqKQorI2RlZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlIGdldEFWTWVkaWFD
aGFyYWN0ZXJpc3RpY0F1ZGlibGUoKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBk
b3VibGUga1JpbmdCdWZmZXJEdXJhdGlvbiA9IDE7CisKK1Bhc3NSZWZQdHI8QXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakM+IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGUoQVZQbGF5
ZXJJdGVtICppdGVtKQoreworICAgIGlmICghY2FuTG9hZE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ3Jl
YXRlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoaXRlbSkpOworfQorCitBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQzo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMoQVZQbGF5ZXJJdGVtICppdGVt
KQorICAgIDogbV9hdlBsYXllckl0ZW0oaXRlbSkKKyAgICAsIG1fd3JpdGVDb3VudCgwKQorICAg
ICwgbV9yZWFkQ291bnQoMCkKKyAgICAsIG1fcGF1c2VkKHRydWUpCisgICAgLCBtX2NsaWVudChu
dWxscHRyKQoreworfQorCitBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6fkF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDKCkKK3sKKyAgICBzZXRDbGllbnQobnVsbHB0cik7Cit9CisKK3ZvaWQg
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb3ZpZGVJbnB1dChBdWRpb0J1cyogYnVzLCBz
aXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIGlmICghbV9hdlBsYXllckl0ZW0pCisgICAg
ICAgIHJldHVybjsKKworICAgIHVpbnQ2NF90IHN0YXJ0RnJhbWUgPSAwOworICAgIHVpbnQ2NF90
IGVuZEZyYW1lID0gMDsKKyAgICBtX3JpbmdCdWZmZXItPmdldEN1cnJlbnRGcmFtZUJvdW5kcyhz
dGFydEZyYW1lLCBlbmRGcmFtZSk7CisKKyAgICBpZiAobV93cml0ZUNvdW50IDw9IG1fcmVhZENv
dW50ICsgbV93cml0ZUFoZWFkQ291bnQpIHsKKyAgICAgICAgYnVzLT56ZXJvKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBzaXplX3QgZnJhbWVzQXZhaWxhYmxlID0gZW5kRnJhbWUg
LSAobV9yZWFkQ291bnQgKyBtX3dyaXRlQWhlYWRDb3VudCk7CisgICAgaWYgKGZyYW1lc0F2YWls
YWJsZSA8IGZyYW1lc1RvUHJvY2VzcykgeworICAgICAgICBmcmFtZXNUb1Byb2Nlc3MgPSBmcmFt
ZXNBdmFpbGFibGU7CisgICAgICAgIGJ1cy0+emVybygpOworICAgIH0KKworICAgIEFTU0VSVChi
dXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSBtX3JpbmdCdWZmZXItPmNoYW5uZWxDb3VudCgpKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xpc3QtPm1OdW1iZXJCdWZmZXJzOyAr
K2kpIHsKKyAgICAgICAgQXVkaW9DaGFubmVsKiBjaGFubmVsID0gYnVzLT5jaGFubmVsKGkpOwor
ICAgICAgICBtX2xpc3QtPm1CdWZmZXJzW2ldLm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAgICAg
IG1fbGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEgPSBjaGFubmVsLT5tdXRhYmxlRGF0YSgpOworICAg
ICAgICBtX2xpc3QtPm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBjaGFubmVsLT5sZW5ndGgo
KSAqIHNpemVvZihmbG9hdCk7CisgICAgfQorCisgICAgbV9yaW5nQnVmZmVyLT5mZXRjaChtX2xp
c3QuZ2V0KCksIGZyYW1lc1RvUHJvY2VzcywgbV9yZWFkQ291bnQpOworICAgIG1fcmVhZENvdW50
ICs9IGZyYW1lc1RvUHJvY2VzczsKKworICAgIGlmIChtX2NvbnZlcnRlcikKKyAgICAgICAgQXVk
aW9Db252ZXJ0ZXJDb252ZXJ0Q29tcGxleEJ1ZmZlcihtX2NvbnZlcnRlci5nZXQoKSwgZnJhbWVz
VG9Qcm9jZXNzLCBtX2xpc3QuZ2V0KCksIG1fbGlzdC5nZXQoKSk7Cit9CisKK3ZvaWQgQXVkaW9T
b3VyY2VQcm92aWRlckFWRk9iakM6OnNldENsaWVudChBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50
KiBjbGllbnQpCit7CisgICAgaWYgKG1fY2xpZW50ID09IGNsaWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fYXZBdWRpb01peCkKKyAgICAgICAgZGVzdHJveU1peCgpOworCisgICAg
bV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9hdlBsYXllckl0ZW0p
CisgICAgICAgIGNyZWF0ZU1peCgpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDOjpzZXRQbGF5ZXJJdGVtKEFWUGxheWVySXRlbSAqYXZQbGF5ZXJJdGVtKQoreworICAgIGlm
IChtX2F2UGxheWVySXRlbSA9PSBhdlBsYXllckl0ZW0pCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX2F2QXVkaW9NaXgpCisgICAgICAgIGRlc3Ryb3lNaXgoKTsKKworICAgIG1fYXZQbGF5
ZXJJdGVtID0gYXZQbGF5ZXJJdGVtOworCisgICAgaWYgKG1fY2xpZW50ICYmIG1fYXZQbGF5ZXJJ
dGVtKQorICAgICAgICBjcmVhdGVNaXgoKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQzo6ZGVzdHJveU1peCgpCit7CisgICAgaWYgKG1fYXZQbGF5ZXJJdGVtKQorICAgICAg
ICBbbV9hdlBsYXllckl0ZW0gc2V0QXVkaW9NaXg6bmlsXTsKKyAgICBbbV9hdkF1ZGlvTWl4IHNl
dElucHV0UGFyYW1ldGVyczpuaWxdOworICAgIG1fYXZBdWRpb01peC5jbGVhcigpOworICAgIG1f
dGFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmNyZWF0
ZU1peCgpCit7CisgICAgQVNTRVJUKCFtX2F2QXVkaW9NaXgpOworICAgIEFTU0VSVChtX2F2UGxh
eWVySXRlbSk7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAgIG1fYXZBdWRpb01peCA9IGFk
b3B0TlMoW1tnZXRBVk11dGFibGVBdWRpb01peENsYXNzKCkgYWxsb2NdIGluaXRdKTsKKworICAg
IE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsKKyAgICAgICAgMCwK
KyAgICAgICAgdGhpcywKKyAgICAgICAgaW5pdENhbGxiYWNrLAorICAgICAgICBmaW5hbGl6ZUNh
bGxiYWNrLAorICAgICAgICBwcmVwYXJlQ2FsbGJhY2ssCisgICAgICAgIHVucHJlcGFyZUNhbGxi
YWNrLAorICAgICAgICBwcm9jZXNzQ2FsbGJhY2ssCisgICAgfTsKKworICAgIE1UQXVkaW9Qcm9j
ZXNzaW5nVGFwUmVmIHRhcCA9IG51bGxwdHI7CisgICAgTVRBdWRpb1Byb2Nlc3NpbmdUYXBDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgJmNhbGxiYWNrcywgMSwgJnRhcCk7CisgICAgQVNTRVJU
KHRhcCk7CisgICAgQVNTRVJUKG1fdGFwID09IHRhcCk7CisKKyAgICBSZXRhaW5QdHI8QVZNdXRh
YmxlQXVkaW9NaXhJbnB1dFBhcmFtZXRlcnM+IHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbZ2V0QVZN
dXRhYmxlQXVkaW9NaXhJbnB1dFBhcmFtZXRlcnNDbGFzcygpIGFsbG9jXSBpbml0XSk7CisgICAg
W3BhcmFtZXRlcnMgc2V0QXVkaW9UYXBQcm9jZXNzb3I6bV90YXAuZ2V0KCldOworCisgICAgQ01Q
ZXJzaXN0ZW50VHJhY2tJRCBmaXJzdEVuYWJsZWRBdWRpb1RyYWNrSUQgPSBrQ01QZXJzaXN0ZW50
VHJhY2tJRF9JbnZhbGlkOworICAgIE5TQXJyYXkqIHRyYWNrcyA9IFttX2F2UGxheWVySXRlbSB0
cmFja3NdOworICAgIGZvciAoQVZQbGF5ZXJJdGVtVHJhY2sqIHRyYWNrIGluIHRyYWNrcykgewor
ICAgICAgICBpZiAoW3RyYWNrLmFzc2V0VHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1l
ZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlXSAmJiB0cmFjay5lbmFibGVkKSB7CisgICAgICAgICAg
ICBmaXJzdEVuYWJsZWRBdWRpb1RyYWNrSUQgPSB0cmFjay5hc3NldFRyYWNrLnRyYWNrSUQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBbcGFyYW1ldGVycyBzZXRU
cmFja0lEOmZpcnN0RW5hYmxlZEF1ZGlvVHJhY2tJRF07CisgICAgCisgICAgW21fYXZBdWRpb01p
eCBzZXRJbnB1dFBhcmFtZXRlcnM6QFtwYXJhbWV0ZXJzLmdldCgpXV07CisgICAgW21fYXZQbGF5
ZXJJdGVtIHNldEF1ZGlvTWl4Om1fYXZBdWRpb01peC5nZXQoKV07Cit9CisKK3ZvaWQgQXVkaW9T
b3VyY2VQcm92aWRlckFWRk9iakM6OmluaXRDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJl
ZiB0YXAsIHZvaWQqIGNsaWVudEluZm8sIHZvaWQqKiB0YXBTdG9yYWdlT3V0KQoreworICAgIEF1
ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0YXRpY19jYXN0PEF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDKj4oY2xpZW50SW5mbyk7CisgICAgX3RoaXMtPm1fdGFwID0gdGFwOwor
ICAgIF90aGlzLT5pbml0KGNsaWVudEluZm8sIHRhcFN0b3JhZ2VPdXQpOworfQorCit2b2lkIEF1
ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5hbGl6ZUNhbGxiYWNrKE1UQXVkaW9Qcm9jZXNz
aW5nVGFwUmVmIHRhcCkKK3sKKyAgICBBU1NFUlQodGFwKTsKKyAgICBBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQyogX3RoaXMgPSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qyo+KE1UQXVkaW9Qcm9jZXNzaW5nVGFwR2V0U3RvcmFnZSh0YXApKTsKKyAgICBfdGhpcy0+Zmlu
YWxpemUoKTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJlcGFyZUNh
bGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCwgQ01JdGVtQ291bnQgbWF4RnJhbWVz
LCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKnByb2Nlc3NpbmdGb3JtYXQpCit7
CisgICAgQVNTRVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqIF90aGlz
ID0gc3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihNVEF1ZGlvUHJvY2Vz
c2luZ1RhcEdldFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPnByZXBhcmUobWF4RnJhbWVzLCBw
cm9jZXNzaW5nRm9ybWF0KTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6
dW5wcmVwYXJlQ2FsbGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwKQoreworICAgIEFT
U0VSVCh0YXApOworICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0YXRp
Y19jYXN0PEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKj4oTVRBdWRpb1Byb2Nlc3NpbmdUYXBH
ZXRTdG9yYWdlKHRhcCkpOworICAgIF90aGlzLT51bnByZXBhcmUoKTsKK30KKwordm9pZCBBdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2Vzc0NhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5n
VGFwUmVmIHRhcCwgQ01JdGVtQ291bnQgbnVtYmVyRnJhbWVzLCBNVEF1ZGlvUHJvY2Vzc2luZ1Rh
cEZsYWdzIGZsYWdzLCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxpc3RJbk91dCwgQ01JdGVtQ291
bnQgKm51bWJlckZyYW1lc091dCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyAqZmxhZ3NPdXQp
Cit7CisgICAgQVNTRVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqIF90
aGlzID0gc3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihNVEF1ZGlvUHJv
Y2Vzc2luZ1RhcEdldFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPnByb2Nlc3MobnVtYmVyRnJh
bWVzLCBmbGFncywgYnVmZmVyTGlzdEluT3V0LCBudW1iZXJGcmFtZXNPdXQsIGZsYWdzT3V0KTsK
K30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6aW5pdCh2b2lkKiBjbGllbnRJ
bmZvLCB2b2lkKiogdGFwU3RvcmFnZU91dCkKK3sKKyAgICBBU1NFUlQoY2xpZW50SW5mbyA9PSB0
aGlzKTsKKyAgICBVTlVTRURfUEFSQU0oY2xpZW50SW5mbyk7CisgICAgKnRhcFN0b3JhZ2VPdXQg
PSB0aGlzOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5hbGl6ZSgp
Cit7Cit9CisKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uJiBhLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGIpCit7Cisg
ICAgcmV0dXJuIGEubVNhbXBsZVJhdGUgPT0gYi5tU2FtcGxlUmF0ZQorICAgICAgICAmJiBhLm1G
b3JtYXRJRCA9PSBiLm1Gb3JtYXRJRAorICAgICAgICAmJiBhLm1Gb3JtYXRGbGFncyA9PSBiLm1G
b3JtYXRGbGFncworICAgICAgICAmJiBhLm1CeXRlc1BlclBhY2tldCA9PSBiLm1CeXRlc1BlclBh
Y2tldAorICAgICAgICAmJiBhLm1GcmFtZXNQZXJQYWNrZXQgPT0gYi5tRnJhbWVzUGVyUGFja2V0
CisgICAgICAgICYmIGEubUJ5dGVzUGVyRnJhbWUgPT0gYi5tQnl0ZXNQZXJGcmFtZQorICAgICAg
ICAmJiBhLm1DaGFubmVsc1BlckZyYW1lID09IGIubUNoYW5uZWxzUGVyRnJhbWUKKyAgICAgICAg
JiYgYS5tQml0c1BlckNoYW5uZWwgPT0gYi5tQml0c1BlckNoYW5uZWw7Cit9CisKK3N0YXRpYyBi
b29sIG9wZXJhdG9yIT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBhLCBjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBi
KTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJlcGFyZShDTUl0ZW1D
b3VudCBtYXhGcmFtZXMsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAqcHJvY2Vz
c2luZ0Zvcm1hdCkKK3sKKyAgICBBU1NFUlQobWF4RnJhbWVzID49IDApOworCisgICAgbV90YXBE
ZXNjcmlwdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
PigqcHJvY2Vzc2luZ0Zvcm1hdCk7CisgICAgaW50IG51bWJlck9mQ2hhbm5lbHMgPSBwcm9jZXNz
aW5nRm9ybWF0LT5tQ2hhbm5lbHNQZXJGcmFtZTsKKyAgICBzaXplX3QgYnl0ZXNQZXJGcmFtZSA9
IHByb2Nlc3NpbmdGb3JtYXQtPm1CeXRlc1BlckZyYW1lOworICAgIGRvdWJsZSBzYW1wbGVSYXRl
ID0gcHJvY2Vzc2luZ0Zvcm1hdC0+bVNhbXBsZVJhdGU7CisgICAgQVNTRVJUKHNhbXBsZVJhdGUg
Pj0gMCk7CisKKyAgICBtX291dHB1dERlc2NyaXB0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+KCk7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bVNh
bXBsZVJhdGUgPSBzYW1wbGVSYXRlOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1Gb3JtYXRJ
RCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tRm9y
bWF0RmxhZ3MgPSBrQXVkaW9Gb3JtYXRGbGFnc05hdGl2ZUZsb2F0UGFja2VkOworICAgIG1fb3V0
cHV0RGVzY3JpcHRpb24tPm1CaXRzUGVyQ2hhbm5lbCA9IDggKiBzaXplb2YoRmxvYXQzMik7Cisg
ICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUNoYW5uZWxzUGVyRnJhbWUgPSBudW1iZXJPZkNoYW5u
ZWxzOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1GcmFtZXNQZXJQYWNrZXQgPSAxOworICAg
IG1fb3V0cHV0RGVzY3JpcHRpb24tPm1CeXRlc1BlclBhY2tldCA9IHNpemVvZihGbG9hdDMyKTsK
KyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tQnl0ZXNQZXJGcmFtZSA9IHNpemVvZihGbG9hdDMy
KTsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tRm9ybWF0RmxhZ3MgfD0ga0F1ZGlvRm9ybWF0
RmxhZ0lzTm9uSW50ZXJsZWF2ZWQ7CisKKyAgICBpZiAoKm1fdGFwRGVzY3JpcHRpb24gIT0gKm1f
b3V0cHV0RGVzY3JpcHRpb24pIHsKKyAgICAgICAgQXVkaW9Db252ZXJ0ZXJSZWYgb3V0Q29udmVy
dGVyID0gbnVsbHB0cjsKKyAgICAgICAgQXVkaW9Db252ZXJ0ZXJOZXcobV90YXBEZXNjcmlwdGlv
bi5nZXQoKSwgbV9vdXRwdXREZXNjcmlwdGlvbi5nZXQoKSwgJm91dENvbnZlcnRlcik7CisgICAg
ICAgIG1fY29udmVydGVyID0gb3V0Q29udmVydGVyOworICAgIH0KKworICAgIC8vIE1ha2UgdGhl
IHJpbmdidWZmZXIgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIGF0IGxlYXN0IHR3byBjYWxsYmFja3Mg
d29ydGggb2YgYXVkaW8sIG9yIDFzLCB3aGljaGV2ZXIgaXMgbGFyZ2VyLgorICAgIHNpemVfdCBj
YXBhY2l0eSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4oMiAqIG1heEZyYW1lcyksIHN0
YXRpY19jYXN0PHNpemVfdD4oa1JpbmdCdWZmZXJEdXJhdGlvbiAqIHNhbXBsZVJhdGUpKTsKKwor
ICAgIG1fcmluZ0J1ZmZlciA9IENBUmluZ0J1ZmZlcjo6Y3JlYXRlKCk7CisgICAgbV9yaW5nQnVm
ZmVyLT5hbGxvY2F0ZShudW1iZXJPZkNoYW5uZWxzLCBieXRlc1BlckZyYW1lLCBjYXBhY2l0eSk7
CisKKyAgICAvLyBBdWRpb0J1ZmZlckxpc3QgaXMgYSB2YXJpYWJsZS1sZW5ndGggc3RydWN0LCBz
byBjcmVhdGUgb24gdGhlIGhlYXAgd2l0aCBhIGdlbmVyaWMgbmV3KCkgb3BlcmF0b3IKKyAgICAv
LyB3aXRoIGEgY3VzdG9tIHNpemUsIGFuZCBpbml0aWFsaXplIHRoZSBzdHJ1Y3QgbWFudWFsbHku
CisgICAgc2l6ZV90IGJ1ZmZlckxpc3RTaXplID0gc2l6ZW9mKEF1ZGlvQnVmZmVyTGlzdCkgKyAo
c2l6ZW9mKEF1ZGlvQnVmZmVyKSAqIHN0ZDo6bWF4KDEsIG51bWJlck9mQ2hhbm5lbHMgLSAxKSk7
CisgICAgbV9saXN0ID0gc3RkOjp1bmlxdWVfcHRyPEF1ZGlvQnVmZmVyTGlzdD4oKEF1ZGlvQnVm
ZmVyTGlzdCopIDo6b3BlcmF0b3IgbmV3IChidWZmZXJMaXN0U2l6ZSkpOworICAgIG1lbXNldCht
X2xpc3QuZ2V0KCksIDAsIGJ1ZmZlckxpc3RTaXplKTsKKyAgICBtX2xpc3QtPm1OdW1iZXJCdWZm
ZXJzID0gbnVtYmVyT2ZDaGFubmVsczsKKworICAgIFJlZlB0cjxBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQz4gc3Ryb25nVGhpcyA9IHRoaXM7CisgICAgY2FsbE9uTWFpblRocmVhZChbc3Ryb25n
VGhpcywgbnVtYmVyT2ZDaGFubmVscywgc2FtcGxlUmF0ZV0geworICAgICAgICBzdHJvbmdUaGlz
LT5tX2NsaWVudC0+c2V0Rm9ybWF0KG51bWJlck9mQ2hhbm5lbHMsIHNhbXBsZVJhdGUpOworICAg
IH0pOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp1bnByZXBhcmUoKQor
eworICAgIG1fdGFwRGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIG1fb3V0cHV0RGVzY3JpcHRp
b24gPSBudWxscHRyOworICAgIG1fcmluZ0J1ZmZlciA9IG51bGxwdHI7CisgICAgbV9saXN0ID0g
bnVsbHB0cjsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2VzcyhD
TUl0ZW1Db3VudCBudW1iZXJPZkZyYW1lcywgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyBmbGFn
cywgQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0SW5PdXQsIENNSXRlbUNvdW50KiBudW1iZXJG
cmFtZXNPdXQsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MqIGZsYWdzT3V0KQoreworICAgIFVO
VVNFRF9QQVJBTShmbGFncyk7CisKKyAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQgPSAwOworICAg
IENNVGltZVJhbmdlIHJhbmdlT3V0OworICAgIE9TU3RhdHVzIHN0YXR1cyA9IE1UQXVkaW9Qcm9j
ZXNzaW5nVGFwR2V0U291cmNlQXVkaW8obV90YXAuZ2V0KCksIG51bWJlck9mRnJhbWVzLCBidWZm
ZXJMaXN0SW5PdXQsIGZsYWdzT3V0LCAmcmFuZ2VPdXQsICZpdGVtQ291bnQpOworICAgIGlmIChz
dGF0dXMgIT0gbm9FcnIgfHwgIWl0ZW1Db3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWVk
aWFUaW1lIHJhbmdlU3RhcnQgPSB0b01lZGlhVGltZShyYW5nZU91dC5zdGFydCk7CisgICAgTWVk
aWFUaW1lIHJhbmdlRHVyYXRpb24gPSB0b01lZGlhVGltZShyYW5nZU91dC5kdXJhdGlvbik7CisK
KyAgICBpZiAocmFuZ2VTdGFydC5pc0ludmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
TWVkaWFUaW1lIGN1cnJlbnRUaW1lID0gdG9NZWRpYVRpbWUoQ01UaW1lYmFzZUdldFRpbWUoW21f
YXZQbGF5ZXJJdGVtIHRpbWViYXNlXSkpOworICAgIGlmIChjdXJyZW50VGltZS5pc0ludmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGF1ZGlvIHRhcCB3aWxsIGdlbmVyYXRl
IHNpbGVuY2Ugd2hlbiB0aGUgbWVkaWEgaXMgcGF1c2VkLCBhbmQgd2lsbCBub3QgYWR2YW5jZSB0
aGUKKyAgICAvLyB0YXAgY3VycmVudFRpbWUuCisgICAgaWYgKHJhbmdlU3RhcnQgPT0gbV9zdGFy
dFRpbWVBdExhc3RQcm9jZXNzIHx8IHJhbmdlRHVyYXRpb24gPT0gTWVkaWFUaW1lOjp6ZXJvVGlt
ZSgpKSB7CisgICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChtX3BhdXNlZCkgeworICAgICAgICAvLyBPbmx5IGNoZWNrIHRoZSB3cml0ZS1h
aGVhZCB0aW1lIHdoZW4gcGxheWJhY2sgYmVnaW5zLgorICAgICAgICBtX3BhdXNlZCA9IGZhbHNl
OworICAgICAgICBNZWRpYVRpbWUgZWFybHlCeSA9IHJhbmdlU3RhcnQgLSBjdXJyZW50VGltZTsK
KyAgICAgICAgbV93cml0ZUFoZWFkQ291bnQgPSBtX3RhcERlc2NyaXB0aW9uLT5tU2FtcGxlUmF0
ZSAqIGVhcmx5QnkudG9Eb3VibGUoKTsKKyAgICB9CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYg
dGhlIHVuZGVybHlpbmcgbWVkaWEgaGFzIHNlZWtlZCwgd2hpY2ggd291bGQgcmVxdWlyZSB1cyB0
byAiZmx1c2giCisgICAgLy8gb3VyIG91dHN0YW5kaW5nIGJ1ZmZlcnMuCisgICAgaWYgKHJhbmdl
U3RhcnQgIT0gbV9lbmRUaW1lQXRMYXN0UHJvY2VzcykKKyAgICAgICAgbV9yZWFkQ291bnQgPSBt
X3dyaXRlQ291bnQ7CisKKyAgICBtX3N0YXJ0VGltZUF0TGFzdFByb2Nlc3MgPSByYW5nZVN0YXJ0
OworICAgIG1fZW5kVGltZUF0TGFzdFByb2Nlc3MgPSByYW5nZVN0YXJ0ICsgcmFuZ2VEdXJhdGlv
bjsKKworICAgIC8vIFN0YXJ0T2ZTdHJlYW0gaW5kaWNhdGVzIGEgZGlzY29udGludWl0eSwgc3Vj
aCBhcyB3aGVuIGFuIEFWUGxheWVySXRlbSBpcyByZS1hZGRlZAorICAgIC8vIHRvIGFuIEFWUGxh
eWVyLCBzbyAiZmx1c2giIG91dHN0YW5kaW5nIGJ1ZmZlcnMuCisgICAgaWYgKGZsYWdzT3V0ICYm
ICpmbGFnc091dCAmIGtNVEF1ZGlvUHJvY2Vzc2luZ1RhcEZsYWdfU3RhcnRPZlN0cmVhbSkKKyAg
ICAgICAgbV9yZWFkQ291bnQgPSBtX3dyaXRlQ291bnQ7CisKKyAgICBtX3JpbmdCdWZmZXItPnN0
b3JlKGJ1ZmZlckxpc3RJbk91dCwgaXRlbUNvdW50LCBtX3dyaXRlQ291bnQpOworICAgIG1fd3Jp
dGVDb3VudCArPSBpdGVtQ291bnQ7CisKKyAgICAvLyBNdXRlIHRoZSBkZWZhdWx0IGF1ZGlvIHBs
YXliYWNrIGJ5IHplcm9pbmcgdGhlIHRhcC1vd25lZCBidWZmZXJzLgorICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBidWZmZXJMaXN0SW5PdXQtPm1OdW1iZXJCdWZmZXJzOyArK2kpIHsKKyAg
ICAgICAgQXVkaW9CdWZmZXImIGJ1ZmZlciA9IGJ1ZmZlckxpc3RJbk91dC0+bUJ1ZmZlcnNbaV07
CisgICAgICAgIG1lbXNldChidWZmZXIubURhdGEsIDAsIGJ1ZmZlci5tRGF0YUJ5dGVTaXplKTsK
KyAgICB9CisgICAgKm51bWJlckZyYW1lc091dCA9IDA7Cit9CisKK30KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfQVVESU8pICYmIFVTRShNRURJQVRPT0xCT1gpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgK
aW5kZXggM2UyYzFiOTRmNzdiNmQ1MzU4MGJkOWM1YjI4Mzk0MGFhMTcyMzRhYS4uNzI4MzdiZWY0
NDRhNzU4MTQyOGNiMGE4ZDBhMDZlOTI1ZWZiMDQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaApA
QCAtNjIsNiArNjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBXZWJDb3JlQVZGUmVz
b3VyY2VMb2FkZXI7CiBjbGFzcyBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVBVkY7CiBj
bGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGT2JqQzsKK2NsYXNzIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOwogY2xhc3MgQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDOwogY2xhc3MgVmlk
ZW9UcmFja1ByaXZhdGVBVkZPYmpDOwogCkBAIC0yMDksNiArMjEwLDEwIEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHNldEFWUGxheWVySXRlbShBVlBsYXllckl0ZW0gKik7CiAKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQorICAgIHZpcnR1YWwgQXVkaW9Tb3VyY2VQcm92aWRlciogYXVkaW9Tb3VyY2VQ
cm92aWRlcigpOworI2VuZGlmCisKICAgICB2b2lkIGNyZWF0ZUltYWdlR2VuZXJhdG9yKCk7CiAg
ICAgdm9pZCBkZXN0cm95SW1hZ2VHZW5lcmF0b3IoKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gY3JlYXRlSW1hZ2VGb3JUaW1lSW5SZWN0KGZsb2F0LCBjb25zdCBJbnRSZWN0Jik7CkBAIC0y
ODksNiArMjk0LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3ZpZGVvRnJhbWVIYXNEcmF3bjsK
ICAgICBib29sIG1faGF2ZUNoZWNrZWRQbGF5YWJpbGl0eTsKIAorI2lmIEVOQUJMRShXRUJfQVVE
SU8pICYmIFVTRShNRURJQVRPT0xCT1gpCisgICAgUmVmUHRyPEF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDPiBtX3Byb3ZpZGVyOworI2VuZGlmCisKICAgICBSZXRhaW5QdHI8QVZBc3NldEltYWdl
R2VuZXJhdG9yPiBtX2ltYWdlR2VuZXJhdG9yOwogI2lmIEhBVkUoQVZGT1VOREFUSU9OX1ZJREVP
X09VVFBVVCkKICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJJdGVtVmlkZW9PdXRwdXQ+IG1fdmlkZW9P
dXRwdXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQppbmRleCA0NGRlY2I2MTllNTViY2VjNTljMTA3
ZjdmMGExNjRmOWE4OThiYTMzLi40YzBjNThhYTA3OTUxMjIyOGYxOTEzZGVhY2MxYzEwMzVlNWEy
MDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQg
Ik1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKIAogI2ltcG9ydCAiQVZUcmFj
a1ByaXZhdGVBVkZPYmpDSW1wbC5oIgorI2ltcG9ydCAiQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akMuaCIKICNpbXBvcnQgIkF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5oIgogI2ltcG9ydCAiQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgpAQCAt
NDk5LDYgKzUwMCwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OmNhbmNlbExvYWQoKQogICAgICAgICBbdHJhY2sgcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2
ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImVuYWJsZWQiXTsKICAgICBtX2NhY2hlZFRyYWNrcyA9IG51
bGxwdHI7CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBVU0UoTUVESUFUT09MQk9YKQorICAg
IGlmIChtX3Byb3ZpZGVyKQorICAgICAgICBtX3Byb3ZpZGVyLT5zZXRQbGF5ZXJJdGVtKG51bGxw
dHIpOworI2VuZGlmCisKICAgICBzZXRJZ25vcmVMb2FkU3RhdGVDaGFuZ2VzKGZhbHNlKTsKIH0K
IApAQCAtOTA5LDYgKzkxNSwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OmNyZWF0ZUFWUGxheWVySXRlbSgpCiAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIGFk
ZE91dHB1dDptX2xlZ2libGVPdXRwdXQuZ2V0KCldOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VC
X0FVRElPKSAmJiBVU0UoTUVESUFUT09MQk9YKQorICAgIGlmIChtX3Byb3ZpZGVyKQorICAgICAg
ICBtX3Byb3ZpZGVyLT5zZXRQbGF5ZXJJdGVtKG1fYXZQbGF5ZXJJdGVtLmdldCgpKTsKKyNlbmRp
ZgorCiAgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwogfQogCkBAIC0xODM3LDYgKzE4NDgs
MTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbihUZXh0VHJhY2tSZXAKIH0KICNlbmRpZiAvLyBFTkFCTEUoVklERU9f
VFJBQ0spCiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBVU0UoTUVESUFUT09MQk9YKQorQXVk
aW9Tb3VyY2VQcm92aWRlciogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YXVk
aW9Tb3VyY2VQcm92aWRlcigpCit7CisgICAgaWYgKCFtX3Byb3ZpZGVyKQorICAgICAgICBtX3By
b3ZpZGVyID0gQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmNyZWF0ZShtX2F2UGxheWVySXRl
bS5nZXQoKSk7CisgICAgcmV0dXJuIG1fcHJvdmlkZXIuZ2V0KCk7Cit9CisjZW5kaWYKKwogdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzaXplQ2hhbmdlZCgpCiB7CiAg
ICAgaWYgKCFtX2F2QXNzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU29mdExpbmtpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2lu
Zy5oCmluZGV4IGQ5MWMxOTRlYmViYTQxNzY2ZjFlZWJlNDZjMTYzYzlkNWQwNjJhYjQuLmRiZTU4
YjZmYzI4MzBhOTJhMzBjZWQ5NWJjNjdhMzlmNWE2MDgwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oCkBAIC0xMTAsNyArMTEwLDYgQEAKICAgICAgICAgcmV0
dXJuIHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7IFwKICAgICB9CiAKLSNp
ZiBQTEFURk9STShJT1MpCiAjZGVmaW5lIFNPRlRfTElOS19NQVlfRkFJTChmcmFtZXdvcmssIGZ1
bmN0aW9uTmFtZSwgcmVzdWx0VHlwZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25zLCBwYXJhbWV0ZXJO
YW1lcykgXAogICAgIHN0YXRpYyByZXN1bHRUeXBlICgqc29mdExpbmsjI2Z1bmN0aW9uTmFtZSkg
cGFyYW1ldGVyRGVjbGFyYXRpb25zID0gMDsgXAogICAgIFwKQEAgLTEzMiw3ICsxMzEsNiBAQAog
ICAgICAgICBBU1NFUlQoc29mdExpbmsjI2Z1bmN0aW9uTmFtZSk7IFwKICAgICAgICAgcmV0dXJu
IHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7IFwKICAgICB9Ci0jZW5kaWYK
IAogLyogY2FsbGluZ0NvbnZlbnRpb24gaXMgdW51c2VkIG9uIE1hYyBidXQgaXMgaGVyZSB0byBr
ZWVwIHRoZSBtYWNybyBwcm90b3R5cGUgdGhlIHNhbWUgYmV0d2VlbiBNYWMgYW5kIFdpbmRvd3Mu
ICovCiAjZGVmaW5lIFNPRlRfTElOS19PUFRJT05BTChmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwg
cmVzdWx0VHlwZSwgY2FsbGluZ0NvbnZlbnRpb24sIHBhcmFtZXRlckRlY2xhcmF0aW9ucykgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238055</attachid>
            <date>2014-09-12 14:09:27 -0700</date>
            <delta_ts>2014-09-15 13:06:02 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-135042-20140912140924.patch</filename>
            <type>text/plain</type>
            <size>56886</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVkM2Q2NGNhZWQxNDZmYjhkMWFiNjIx
OTYwZjRiZmE5NjJkMGI0NDAuLjZkYTE1ZDlmZjQ1NTA3YWFkZWJlMmJjY2Y2NmQxOTc5N2Y5MjZh
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDktMTEgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10gU3VwcG9ydCBhdWRpb1NvdXJjZVByb3ZpZGVy
KCkgaW4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDQyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBXVEZf
VVNFX01FRElBVE9PTEJPWC4KKwogMjAxNC0wOS0xMiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJvbGxlZCBvdXQgcjE3MzU0MC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5
Mjg3M2JhMmFmMGQ3YjZlZjQ5ZTlkOTNiNmVmYjAwNDdmMzE3NTdlLi5iNzUxOWNmNTgzY2U5MmM5
YjdiOTRjZjQ2NDgxNTcwYWQxYTE2M2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTIgQEAKKzIw
MTQtMDktMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgW01h
Y10gU3VwcG9ydCBhdWRpb1NvdXJjZVByb3ZpZGVyKCkgaW4gTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1MDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBBdWRpb1NvdXJjZVByb3ZpZGVyIGluIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMsIHRoZXJlYnkKKyAgICAgICAgc3VwcG9ydGluZyBNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuCisKKyAgICAgICAgSW1wb3J0IHRoZSBDQVJpbmdCdWZmZXIg
ZnJvbSBDb3JlQXVkaW8gc2FtcGxlIGNvZGUsIG1ha2luZyB0aGUgbmVjZXNzYXJ5IG1vZGlmaWNh
dGlvbnMKKyAgICAgICAgZm9yIFdlYktpdCBzdHlsZSBhbmQgY29kaW5nIGNvbnZlbnRpb25zLiBU
aGUgdGhyZWFkaW5nIGFzc3VtcHRpb25zIGZvciB0aGlzIGNsYXNzIGFyZQorICAgICAgICB0aGF0
IHRoZXJlIHdpbGwgYmUgYSBzaW5nbGUgd3JpdGVyIHRocmVhZCBhbmQgYSBzaW5nbGUgcmVhZGVy
IHRocmVhZC4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6Y3JlYXRlKTogQ3JlYXRl
IGEgdW5pcXVlX3B0ci4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6Q0FSaW5nQnVm
ZmVyKTogU2ltcGxlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVy
Ojp+Q0FSaW5nQnVmZmVyKTogU2ltcGxlIGRlc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpD
QVJpbmdCdWZmZXI6OmFsbG9jYXRlKTogSW5pdGlhbGl6ZSB0aGUgYnVmZmVycyBhbmQgdGltZSBi
b3VuZHMgc3RydWN0dXJlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6ZGVhbGxv
Y2F0ZSk6IERlc3Ryb3kgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6Olplcm9SYW5nZSk6IFN0YXRp
YyB1dGlsaXR5IG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JlQUJMKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpGZXRjaEFCTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WmVy
b0FCTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpzdG9yZSk6IFN0
b3JlIHRoZSBwYXNzZWQgaW4gYnVmZmVyIGluIHRoZSByaW5nIGJ1ZmZlciwgd3JhcHBpbmcKKyAg
ICAgICAgICAgIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6
c2V0VGltZUJvdW5kcyk6IFNldCB0aGUgbmV3IHRpbWUgYm91bmRzIGJ5IGluY3JlbWVudGluZyB0
aGUKKyAgICAgICAgICAgIGJvdW5kcyBpbmRleCBsb2NhbGx5LCBmaWxsaW5nIGluIHRoZSBuZXcg
dmFsdWVzLCB0aGVuIGF0b21pY2FsbHkgaW5jcmVtZW50aW5nIHRoZQorICAgICAgICAgICAgcmVh
ZGVyLXZpc2libGUgaW5kZXguCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmdldFRp
bWVCb3VuZHMpOiBHZXQgdGhlIG5ldyB0aW1lIGJvdW5kcyBieSBtYXNraW5nIHRoZSB0aW1lCisg
ICAgICAgICAgICBib3VuZHMgaW5kZXgsIGFuZCB1c2luZyBpdCBhcyBhbiBvZmZzZXQgdG8gdGhl
IHRpbWUgYm91bmRzIGFycmF5LiBQcm90ZWN0IGFnYWluc3QKKyAgICAgICAgICAgIENQVSBzdGFy
dmF0aW9uIG9uIHRoZSByZWFkaW5nIHRocmVhZCBieSBjaGVja2luZyB0aGUgaW5kZXggYWdhaW5z
dCB0aGUgc3RvcmVkCisgICAgICAgICAgICBpbmRleCBpbiB0aGUgYXJyYXkgZW50cnkuIFRoaXMg
Y2hlY2sgd2lsbCBmYWlsIGlmIHRoZSB3cml0aW5nIHRocmVhZCBoYXMgd3JhcHBlZAorICAgICAg
ICAgICAgbW9yZSB0aGFuIHRoZSBzaXplIG9mIHRoZSBhcnJheS4KKyAgICAgICAgKFdlYkNvcmU6
OkNBUmluZ0J1ZmZlcjo6Y2xpcFRpbWVCb3VuZHMpOiBDbGFtcCB0aGUgcGFzc2VkIHZhbHVlcyB0
byB0aGUgYXZhaWxhYmxlIGJvdW5kcy4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6
c3RhcnRGcmFtZSk6IFNpbXBsZSBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1
ZmZlcjo6ZW5kRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6
ZmV0Y2gpOiBSZWFkIGFuIGF1ZGlvIGJ1ZmZlciBsaXN0IGZyb20gdGhlIHJpbmcgYnVmZmVyLCBw
b3NzYmlseQorICAgICAgICAgICAgd3JhcHBpbmcgYXJvdW5kIHRvIHRoZSBzdGFydCBvZiB0aGUg
cmluZyBidWZmZXIuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6bnVtYmVyT2ZDaGFubmVs
cyk6IFNpbXBsZSBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6ZnJh
bWVPZmZzZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6VGltZUJv
dW5kczo6VGltZUJvdW5kcyk6IFN0cnVjdCBob2xkaW5nIHRoZSBzdGFydCBhbmQgZW5kIGZyYW1l
IHZhbHVlcy4KKworICAgICAgICBBZGQgYW4gaW1wbGVtZW50YXRpb24gb2YgQXVkaW9Tb3VyY2VQ
cm92aWRlciwgdXNpbmcgQVZBdWRpb01peCBhbmQgTVRBdWRpb1Byb2Nlc3NpbmdUYXAKKyAgICAg
ICAgdG8gdGFwIGFuIEFWUGxheWVySXRlbSdzIGF1ZGlvIG91dHB1dCBhbmQgZmVlZCBpdCB0byBh
IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakM6OmNyZWF0ZSk6IFNpbXBsZSBmYWN0b3J5LgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKTogU2lt
cGxlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFW
Rk9iakM6On5BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyk6IFNpbXBsZSBkZXN0cnVjdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb3ZpZGVJbnB1
dCk6IFB1c2ggYXVkaW8gaW50byB0aGUgcmluZyBidWZmZXIuCisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6c2V0Q2xpZW50KTogQ2FsbCBkZXN0cm95TWl4KCkv
Y3JlYXRlTWl4KCkgYXMgYXBwcm9wcmlhdGUuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQzo6c2V0UGxheWVySXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmRlc3Ryb3lNaXgpOiBEZXRhY2ggYW5kIGRl
c3Ryb3kgdGhlIEFWQXVkaW9NaXggYW5kIHRhcC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGVNaXgpOiBTZXQgdXAgdGhlIEFWQXVkaW9NaXggYW5k
IHRhcCBhbmQgYXR0YWNoIHRvCisgICAgICAgICAgICB0aGUgQVZQbGF5ZXJJdGVtLgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmluaXRDYWxsYmFjayk6IFBh
c3MgdG8gY2xhc3MgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakM6OmZpbmFsaXplQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcmVwYXJlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp1bnByZXBhcmVDYWxsYmFj
ayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6
OnByb2Nlc3NDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakM6OmluaXQpOiBTZXQgdXAgdGhlIHN0b3JhZ2UgcG9pbnRlciBmb3IgdGhl
IHRhcC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpmaW5h
bGl6ZSk6IE5vLW9wLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IENvbXBhcmUgdHdv
IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBvYmplY3RzLgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3IhPSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakM6OnByZXBhcmUpOiBDcmVhdGUgYW4gQXVkaW9Db3ZlcnRlciBvYmplY3QgaWYgbmVj
ZXNzYXJ5LAorICAgICAgICAgICAgY3JlYXRlIHRoZSByaW5nIGJ1ZmZlciwgYW5kIG5vdGlmeSB0
aGUgY2xpZW50IG9mIGZvcm1hdCBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM6OnVucHJlcGFyZSk6IERlc3Ryb3kgc2FtZS4KKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzKTogQ29weSBzYW1wbGVz
IG91dCBvZiB0aGUgcmluZyBidWZmZXIsCisgICAgICAgICAgICBmb3JtYXQgY29udmVydGluZyB0
aGVtIGlmIG5lY2Vzc2FyeS4gTXV0ZSBvcmlnaW5hbCBhdWRpby4KKworICAgICAgICBDcmVhdGUg
dGhlIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDIG9iamVjdCBhbmQgbm90aWZ5IGl0IHdoZW4g
dGhlIGN1cnJlbnQgQVZQbGF5ZXJJdGVtIGNoYW5nZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5
ZXJJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OmF1ZGlvU291cmNlUHJvdmlkZXIpOgorCisgICAgICAgIEVuYWJsZSBTT0ZUX0xJTktf
TUFZX0ZBSUwgb24gdGhlIE1hYyBwbGF0Zm9ybS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9T
b2Z0TGlua2luZy5oOgorCisgICAgICAgIEFkZCBuZXcgZmlsZXMgdG8gdGhlIHByb2plY3QuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTQtMDkt
MTIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFJFR1JFU1NJT04ocjE3MzQ0MSk6IFtHVEtdIEFsbCBidXR0b25zIGFwcGVhciBpbnNlbnNpdGl2
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmgKaW5kZXggMjQ1MjFmZDRhZDYyOTYyN2I3ZGUzNTk2M2EyNjg3NDE2MjgyNWE0
Ny4uZDNmN2RkNTUzYzMyYTY4YmIyNzdmN2Q2OGI0NDU3NTA3OWQ3OTgyNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5o
CkBAIC0xMDc5LDQgKzEwNzksOCBAQAogI2RlZmluZSBUQVJHRVRfT1NfSVBIT05FIDAKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MCkKKyNkZWZpbmUgV1RGX1VTRV9NRURJQVRPT0xC
T1ggMQorI2VuZGlmCisKICNlbmRpZiAvKiBXVEZfUGxhdGZvcm1faCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk1OWEyNDIz
YTZkNjY5NzM3M2E4NDNjZWQwNDc3ZjA1MjVjNjZjMDcuLjlhMWU5ZWQ3NTQxODlmMWU3NWM4NDYw
ZDZjMDBjOTJmNzA0OWM0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU2MjUsNiArNTYyNSw4IEBACiAJCUNEODIwMzBEMTM5
NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMDkx
Mzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIu
bW0gKi87IH07CiAJCUNEODIwMzEwMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEODIw
MzBFMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRDgyMDMxMTEzOTVBQ0U3MDBG
OTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMEYxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRv
d0FuaW1hdGlvbi5tbSAqLzsgfTsKKwkJQ0Q4QTdCQkIxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0Q4QTdCQjkxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDLm1tICovOyB9OworCQlDRDhBN0JCQzE5NzczNUZFMDBDQkQ2NDMgLyogQXVk
aW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEOEE3QkJBMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQy5oICovOyB9OwogCQlDRDhCNUE0MjE4MEQxNDlBMDA4QjhFNjUgLyogVmlk
ZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCNUE0MDE4MEQxNDlBMDA4QjhFNjUgLyogVmlk
ZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi87IH07CiAJCUNEOEI1QTQzMTgw
RDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QjVBNDExODBE
MTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggKi87
IH07CiAJCUNEOEI1QTQ2MTgwREZGNEUwMDhCOEU2NSAvKiBWaWRlb1RyYWNrTWVkaWFTb3VyY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEI1QTQ1
MTgwREZGNEUwMDhCOEU2NSAvKiBWaWRlb1RyYWNrTWVkaWFTb3VyY2UuaCAqLzsgfTsKQEAgLTU2
NzAsNiArNTY3Miw4IEBACiAJCUNEQzY5REQ3MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVs
bFNjcmVlbldhcm5pbmdWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RDNjlERDUxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVu
V2FybmluZ1ZpZXcubW0gKi87IH07CiAJCUNEQzY5RERBMTYzNzFGRDQwMDdDMzhERiAvKiBXZWJD
b3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDNjlERDgxNjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVG
dWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RDNjlEREIxNjM3MUZENDAwN0MzOERGIC8qIFdlYkNvcmVG
dWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RDNjlERDkxNjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxs
U2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tICovOyB9OworCQlDREM3MzQxNDE5Nzc4OTZDMDA0NkJG
QzUgLyogQ0FSaW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQzczNDEyMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3Bw
ICovOyB9OworCQlDREM3MzQxNTE5Nzc4OTZEMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM3MzQxMzE5Nzc4
OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggKi87IH07CiAJCUNEQzhCNUEyMTgwNDYzNDcw
MDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBMDE4MDQ2MzQ3
MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovOyB9
OwogCQlDREM4QjVBMzE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREM4QjVBMTE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmggKi87IH07CiAJCUNEQzhCNUE2MTgwNDc0RjcwMDE2RTY4NSAvKiBNZWRp
YVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RDOEI1QTQxODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakMubW0gKi87IH07CkBAIC0xMzAzOCw2ICsxMzA0Miw4IEBACiAJCUNEODIwMzA5
MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxs
c2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0Q4MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJXaW5kb3dBbmltYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q4MjAzMEYxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldp
bmRvd0FuaW1hdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYldpbmRvd0FuaW1hdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q4
QTdCQjkxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEOEE3QkJBMTk3NzM1
RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRDhCNUE0MDE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9U
cmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbTsg
cGF0aCA9IG9iamMvVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOEI1QTQxMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRl
b1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBwYXRoID0g
b2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDRDhCNUE0NDE4MEREOEQ2MDA4QjhFNjUgLyogVmlkZW9UcmFja01l
ZGlhU291cmNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBWaWRlb1RyYWNrTWVkaWFTb3VyY2UuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTMxMTMsNiArMTMxMTksOCBAQAogCQlDREM2OURENTE2MzIw
MjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1Zp
ZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzY5REQ4MTYzNzFGRDMwMDdD
MzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREM2OUREOTE2MzcxRkQzMDA3QzM4REYgLyog
V2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDNzM0MTIxOTc3ODk2QzAwNDZCRkM1IC8q
IENBUmluZ0J1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
QVJpbmdCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREM3MzQxMzE5
Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENBUmluZ0J1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
REM4QjVBMDE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOyBwYXRoID0gb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQzhCNUExMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHBhdGggPSBvYmpjL01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
REM4QjVBNDE4MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE1lZGlhU291cmNlUHJpdmF0
ZUFWRk9iakMubW07IHBhdGggPSBvYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTU3Myw2ICsyMTU4MSw4IEBACiAJCQkJQ0Q4
QjVBNDAxODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDLm1tICovLAogCQkJCUNEN0UwNTIwMTY1MUE4NDEwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVz
b3VyY2VMb2FkZXIuaCAqLywKIAkJCQlDRDdFMDUyMTE2NTFBODQxMDBDMTIwMUYgLyogV2ViQ29y
ZUFWRlJlc291cmNlTG9hZGVyLm1tICovLAorCQkJCUNEOEE3QkI5MTk3NzM1RkUwMENCRDY0MyAv
KiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSAqLywKKwkJCQlDRDhBN0JCQTE5NzczNUZF
MDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCAqLywKIAkJCSk7CiAJCQlu
YW1lID0gb2JqYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzA4Myw2ICsyMzA5
Myw4IEBACiAJCQkJQ0Q1NERFNDUxNzQ2OEI2RjAwNUU1QjM2IC8qIE1lZGlhU2Vzc2lvbk1hbmFn
ZXJNYWMuY3BwICovLAogCQkJCUNEMkY0QTI1MThEOEEzNDkwMDYzNzQ2RCAvKiBBdWRpb0hhcmR3
YXJlTGlzdGVuZXJNYWMuY3BwICovLAogCQkJCUNEMkY0QTI2MThEOEEzNDkwMDYzNzQ2RCAvKiBB
dWRpb0hhcmR3YXJlTGlzdGVuZXJNYWMuaCAqLywKKwkJCQlDREM3MzQxMjE5Nzc4OTZDMDA0NkJG
QzUgLyogQ0FSaW5nQnVmZmVyLmNwcCAqLywKKwkJCQlDREM3MzQxMzE5Nzc4OTZDMDA0NkJGQzUg
LyogQ0FSaW5nQnVmZmVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0yNDMwNiw2ICsyNDMxOCw3IEBACiAJCQkJQThFQTc5RkEwQTE5
MTZERjAwQThFRjVGIC8qIEhUTUxEaXJlY3RvcnlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEVBN0NCNzBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTERpdkVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDREM3MzQxNTE5Nzc4OTZEMDA0NkJGQzUgLyogQ0FSaW5nQnVm
ZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRN
TERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2NzEyMjg4M0U5MDBCODFGRjgg
LyogSFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURFODA5OUU2
NDkyMDA1NkU1ODEgLyogaHRtbGVkaXRpbmcuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ5OTIsNiAr
MjUwMDUsNyBAQAogCQkJCUIyRkEzREEzMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0xlbmd0aExp
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREE1MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NW
R0xpbmVhckdyYWRpZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQTcwQUI3
NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGluZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNE
OEE3QkJDMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQTkwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTWFya2Vy
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQUIwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHTWFza0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREFEMEFCNzVBNkYw
MDBFNUFDNCAvKiBKU1NWR01hdHJpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTI1MCw2ICsyOTI2
NCw3IEBACiAJCQkJMUE0QTk1NTIwQjRFRENGRjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlck1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUU0NTM5MDQ2MEVBRkQ2MzcwMDM2OTVDOCAvKiBTaGFyZWRU
aW1lcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RUEyMDk5RUI3OEMwMDU2RTU4MSAv
KiBTaGFyZWRUaW1lck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEOEE3QkJCMTk3NzM1RkUw
MENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTQxRTFCMUQzMEZGNTk4NjkwMDU3NkIzQiAvKiBTaGFyZWRXb3JrZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDFEMTY4RTcxMDIyNkU4OTAwOUJDODI3IC8qIFNoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQjc4NDIwMTYzOUNCQkUwMDA3QjY5MiAv
KiBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk0MTYsNiAr
Mjk0MzEsNyBAQAogCQkJCUIyMjI3OUE0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0IwNTBE
MDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyMjI3QjA2MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RDNzM0MTQxOTc3ODk2QzAwNDZCRkM1IC8qIENBUmlu
Z0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0IwODBEMDBCRkYxMDA3MUI3ODIg
LyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlBNzBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHQ3Vyc29yRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMjIyNzlBRDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRGVmc0VsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FS
aW5nQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdC
dWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiZDgzYWI3OGVjYTlkNmRmZDkxZjgwYjVjMWU4Yzc1N2Rl
ODk4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9t
YWMvQ0FSaW5nQnVmZmVyLmNwcApAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDQVJpbmdCdWZmZXIuaCIKKworI2luY2x1ZGUgPENv
cmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2luY2x1ZGUgPGxpYmtlcm4vT1NBdG9taWMuaD4K
KyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCitjb25zdCB1aW50MzJfdCBrR2VuZXJhbFJp
bmdUaW1lQm91bmRzUXVldWVTaXplID0gMzI7Citjb25zdCB1aW50MzJfdCBrR2VuZXJhbFJpbmdU
aW1lQm91bmRzUXVldWVNYXNrID0ga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlU2l6ZSAtIDE7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPENBUmluZ0J1ZmZlcj4g
Q0FSaW5nQnVmZmVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q0FS
aW5nQnVmZmVyPihuZXcgQ0FSaW5nQnVmZmVyKCkpOworfQorCitDQVJpbmdCdWZmZXI6OkNBUmlu
Z0J1ZmZlcigpCisgICAgOiBtX2NoYW5uZWxDb3VudCgwKQorICAgICwgbV9mcmFtZUNvdW50KDAp
CisgICAgLCBtX2NhcGFjaXR5Qnl0ZXMoMCkKKyAgICAsIG1fdGltZUJvdW5kc1F1ZXVlKGtHZW5l
cmFsUmluZ1RpbWVCb3VuZHNRdWV1ZVNpemUpCisgICAgLCBtX3RpbWVCb3VuZHNRdWV1ZVB0cigw
KQoreworfQorCitDQVJpbmdCdWZmZXI6On5DQVJpbmdCdWZmZXIoKQoreworICAgIGRlYWxsb2Nh
dGUoKTsKK30KKwordm9pZCBDQVJpbmdCdWZmZXI6OmFsbG9jYXRlKHVpbnQzMl90IGNoYW5uZWxD
b3VudCwgc2l6ZV90IGJ5dGVzUGVyRnJhbWUsIHNpemVfdCBmcmFtZUNvdW50KQoreworICAgIGRl
YWxsb2NhdGUoKTsKKworICAgIGZyYW1lQ291bnQgPSBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28o
ZnJhbWVDb3VudCk7CisKKyAgICBtX2NoYW5uZWxDb3VudCA9IGNoYW5uZWxDb3VudDsKKyAgICBt
X2J5dGVzUGVyRnJhbWUgPSBieXRlc1BlckZyYW1lOworICAgIG1fZnJhbWVDb3VudCA9IGZyYW1l
Q291bnQ7CisgICAgbV9mcmFtZUNvdW50TWFzayA9IGZyYW1lQ291bnQgLSAxOworICAgIG1fY2Fw
YWNpdHlCeXRlcyA9IGJ5dGVzUGVyRnJhbWUgKiBmcmFtZUNvdW50OworCisgICAgc2l6ZV90IHBv
aW50ZXJzU2l6ZSA9IGNoYW5uZWxDb3VudCAqIHNpemVvZihCeXRlKik7CisgICAgc2l6ZV90IGFs
bG9jU2l6ZSA9IHBvaW50ZXJzU2l6ZSArIChtX2NhcGFjaXR5Qnl0ZXMgKiBjaGFubmVsQ291bnQp
OworICAgIG1fYnVmZmVycyA9IEFycmF5QnVmZmVyOjpjcmVhdGUoYWxsb2NTaXplLCAxKTsKKwor
ICAgIEJ5dGUqKiBwb2ludGVycyA9IHN0YXRpY19jYXN0PEJ5dGUqKj4obV9idWZmZXJzLT5kYXRh
KCkpOworICAgIEJ5dGUqIGNoYW5uZWxEYXRhID0gc3RhdGljX2Nhc3Q8Qnl0ZSo+KG1fYnVmZmVy
cy0+ZGF0YSgpKSArIHBvaW50ZXJzU2l6ZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjaGFubmVsQ291bnQ7ICsraSkgeworICAgICAgICBwb2ludGVyc1tpXSA9IGNoYW5uZWxEYXRh
OworICAgICAgICBjaGFubmVsRGF0YSArPSBtX2NhcGFjaXR5Qnl0ZXM7CisgICAgfQorCisgICAg
Zm9yIChhdXRvIHRpbWVCb3VuZHMgOiBtX3RpbWVCb3VuZHNRdWV1ZSkgeworICAgICAgICB0aW1l
Qm91bmRzLm1fc3RhcnRGcmFtZSA9IDA7CisgICAgICAgIHRpbWVCb3VuZHMubV9lbmRGcmFtZSA9
IDA7CisgICAgICAgIHRpbWVCb3VuZHMubV91cGRhdGVDb3VudGVyID0gMDsKKyAgICB9CisgICAg
bV90aW1lQm91bmRzUXVldWVQdHIgPSAwOworfQorCit2b2lkIENBUmluZ0J1ZmZlcjo6ZGVhbGxv
Y2F0ZSgpCit7CisgICAgaWYgKG1fYnVmZmVycykKKyAgICAgICAgbV9idWZmZXJzLmNsZWFyKCk7
CisKKyAgICBtX2NoYW5uZWxDb3VudCA9IDA7CisgICAgbV9jYXBhY2l0eUJ5dGVzID0gMDsKKyAg
ICBtX2ZyYW1lQ291bnQgPSAwOworfQorCitzdGF0aWMgdm9pZCBaZXJvUmFuZ2UoQnl0ZSoqIGJ1
ZmZlcnMsIGludCBjaGFubmVsQ291bnQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuYnl0ZXMpCit7
CisgICAgd2hpbGUgKC0tY2hhbm5lbENvdW50ID49IDApIHsKKyAgICAgICAgbWVtc2V0KCpidWZm
ZXJzICsgb2Zmc2V0LCAwLCBuYnl0ZXMpOworICAgICAgICArK2J1ZmZlcnM7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBTdG9yZUFCTChCeXRlKiogYnVmZmVycywgc2l6ZV90IGRlc3RPZmZzZXQs
IGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IHNyY09mZnNldCwgc2l6ZV90IG5i
eXRlcykKK3sKKyAgICBpbnQgY2hhbm5lbENvdW50ID0gbGlzdC0+bU51bWJlckJ1ZmZlcnM7Cisg
ICAgY29uc3QgQXVkaW9CdWZmZXIqIHNyYyA9IGxpc3QtPm1CdWZmZXJzOworICAgIHdoaWxlICgt
LWNoYW5uZWxDb3VudCA+PSAwKSB7CisgICAgICAgIGlmIChzcmNPZmZzZXQgPiBzcmMtPm1EYXRh
Qnl0ZVNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbWVtY3B5KCpidWZmZXJz
ICsgZGVzdE9mZnNldCwgc3RhdGljX2Nhc3Q8Qnl0ZSo+KHNyYy0+bURhdGEpICsgc3JjT2Zmc2V0
LCBzdGQ6Om1pbjxzaXplX3Q+KG5ieXRlcywgc3JjLT5tRGF0YUJ5dGVTaXplIC0gc3JjT2Zmc2V0
KSk7CisgICAgICAgICsrYnVmZmVyczsKKyAgICAgICAgKytzcmM7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCBGZXRjaEFCTChBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBkZXN0T2Zmc2V0
LCBCeXRlKiogYnVmZmVycywgc2l6ZV90IHNyY09mZnNldCwgc2l6ZV90IG5ieXRlcykKK3sKKyAg
ICBpbnQgY2hhbm5lbENvdW50ID0gbGlzdC0+bU51bWJlckJ1ZmZlcnM7CisgICAgQXVkaW9CdWZm
ZXIqIGRlc3QgPSBsaXN0LT5tQnVmZmVyczsKKyAgICB3aGlsZSAoLS1jaGFubmVsQ291bnQgPj0g
MCkgeworICAgICAgICBpZiAoZGVzdE9mZnNldCA+IGRlc3QtPm1EYXRhQnl0ZVNpemUpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbWVtY3B5KHN0YXRpY19jYXN0PEJ5dGUqPihkZXN0
LT5tRGF0YSkgKyBkZXN0T2Zmc2V0LCAqYnVmZmVycyArIHNyY09mZnNldCwgc3RkOjptaW48c2l6
ZV90PihuYnl0ZXMsIGRlc3QtPm1EYXRhQnl0ZVNpemUgLSBkZXN0T2Zmc2V0KSk7CisgICAgICAg
ICsrYnVmZmVyczsKKyAgICAgICAgKytkZXN0OworICAgIH0KK30KKworaW5saW5lIHZvaWQgWmVy
b0FCTChBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBkZXN0T2Zmc2V0LCBzaXplX3QgbmJ5
dGVzKQoreworICAgIGludCBuQnVmZmVycyA9IGxpc3QtPm1OdW1iZXJCdWZmZXJzOworICAgIEF1
ZGlvQnVmZmVyKiBkZXN0ID0gbGlzdC0+bUJ1ZmZlcnM7CisgICAgd2hpbGUgKC0tbkJ1ZmZlcnMg
Pj0gMCkgeworICAgICAgICBpZiAoZGVzdE9mZnNldCA+IGRlc3QtPm1EYXRhQnl0ZVNpemUpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PEJ5dGUqPihk
ZXN0LT5tRGF0YSkgKyBkZXN0T2Zmc2V0LCAwLCBzdGQ6Om1pbjxzaXplX3Q+KG5ieXRlcywgZGVz
dC0+bURhdGFCeXRlU2l6ZSAtIGRlc3RPZmZzZXQpKTsKKyAgICAgICAgKytkZXN0OworICAgIH0K
K30KKworQ0FSaW5nQnVmZmVyOjpFcnJvciBDQVJpbmdCdWZmZXI6OnN0b3JlKGNvbnN0IEF1ZGlv
QnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGZyYW1lc1RvV3JpdGUsIHVpbnQ2NF90IHN0YXJ0RnJh
bWUpCit7CisgICAgaWYgKCFmcmFtZXNUb1dyaXRlKQorICAgICAgICByZXR1cm4gT2s7CisKKyAg
ICBpZiAoZnJhbWVzVG9Xcml0ZSA+IG1fZnJhbWVDb3VudCkKKyAgICAgICAgcmV0dXJuIFRvb011
Y2g7CisKKyAgICB1aW50NjRfdCBlbmRGcmFtZSA9IHN0YXJ0RnJhbWUgKyBmcmFtZXNUb1dyaXRl
OworCisgICAgaWYgKHN0YXJ0RnJhbWUgPCBjdXJyZW50RW5kRnJhbWUoKSkgeworICAgICAgICAv
LyBUaHJvdyBldmVyeXRoaW5nIG91dCB3aGVuIGdvaW5nIGJhY2t3YXJkcy4KKyAgICAgICAgc2V0
Q3VycmVudEZyYW1lQm91bmRzKHN0YXJ0RnJhbWUsIHN0YXJ0RnJhbWUpOworICAgIH0gZWxzZSBp
ZiAoZW5kRnJhbWUgLSBjdXJyZW50U3RhcnRGcmFtZSgpIDw9IG1fZnJhbWVDb3VudCkgeworICAg
ICAgICAvLyBUaGUgYnVmZmVyIGhhcyBub3QgeWV0IHdyYXBwZWQgYW5kIHdpbGwgbm90IG5lZWQg
dG8uCisgICAgICAgIC8vIE5vLW9wLgorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFkdmFuY2Ug
dGhlIHN0YXJ0IHRpbWUgcGFzdCB0aGUgcmVnaW9uIHdlIGFyZSBhYm91dCB0byBvdmVyd3JpdGUK
KyAgICAgICAgLy8gc3RhcnRpbmcgb25lIGJ1ZmZlciBvZiB0aW1lIGJlaGluZCB3aGVyZSB3ZSdy
ZSB3cml0aW5nLgorICAgICAgICB1aW50NjRfdCBuZXdTdGFydEZyYW1lID0gZW5kRnJhbWUgLSBt
X2ZyYW1lQ291bnQ7CisgICAgICAgIHVpbnQ2NF90IG5ld0VuZEZyYW1lID0gc3RkOjptYXgobmV3
U3RhcnRGcmFtZSwgY3VycmVudEVuZEZyYW1lKCkpOworICAgICAgICBzZXRDdXJyZW50RnJhbWVC
b3VuZHMobmV3U3RhcnRGcmFtZSwgbmV3RW5kRnJhbWUpOworICAgIH0KKworICAgIC8vIFdyaXRl
IHRoZSBuZXcgZnJhbWVzLgorICAgIEJ5dGUqKiBidWZmZXJzID0gc3RhdGljX2Nhc3Q8Qnl0ZSoq
PihtX2J1ZmZlcnMtPmRhdGEoKSk7CisgICAgc2l6ZV90IG9mZnNldDA7CisgICAgc2l6ZV90IG9m
ZnNldDE7CisgICAgdWludDY0X3QgY3VyRW5kID0gY3VycmVudEVuZEZyYW1lKCk7CisKKyAgICBp
ZiAoc3RhcnRGcmFtZSA+IGN1ckVuZCkgeworICAgICAgICAvLyBXZSBhcmUgc2tpcHBpbmcgc29t
ZSBzYW1wbGVzLCBzbyB6ZXJvIHRoZSByYW5nZSB3ZSBhcmUgc2tpcHBpbmcuCisgICAgICAgIG9m
ZnNldDAgPSBmcmFtZU9mZnNldChjdXJFbmQpOworICAgICAgICBvZmZzZXQxID0gZnJhbWVPZmZz
ZXQoc3RhcnRGcmFtZSk7CisgICAgICAgIGlmIChvZmZzZXQwIDwgb2Zmc2V0MSkKKyAgICAgICAg
ICAgIFplcm9SYW5nZShidWZmZXJzLCBtX2NoYW5uZWxDb3VudCwgb2Zmc2V0MCwgb2Zmc2V0MSAt
IG9mZnNldDApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFplcm9SYW5nZShidWZmZXJz
LCBtX2NoYW5uZWxDb3VudCwgb2Zmc2V0MCwgbV9jYXBhY2l0eUJ5dGVzIC0gb2Zmc2V0MCk7Cisg
ICAgICAgICAgICBaZXJvUmFuZ2UoYnVmZmVycywgbV9jaGFubmVsQ291bnQsIDAsIG9mZnNldDEp
OworICAgICAgICB9CisgICAgICAgIG9mZnNldDAgPSBvZmZzZXQxOworICAgIH0gZWxzZQorICAg
ICAgICBvZmZzZXQwID0gZnJhbWVPZmZzZXQoc3RhcnRGcmFtZSk7CisKKyAgICBvZmZzZXQxID0g
ZnJhbWVPZmZzZXQoZW5kRnJhbWUpOworICAgIGlmIChvZmZzZXQwIDwgb2Zmc2V0MSkKKyAgICAg
ICAgU3RvcmVBQkwoYnVmZmVycywgb2Zmc2V0MCwgbGlzdCwgMCwgb2Zmc2V0MSAtIG9mZnNldDAp
OworICAgIGVsc2UgeworICAgICAgICBzaXplX3QgbmJ5dGVzID0gbV9jYXBhY2l0eUJ5dGVzIC0g
b2Zmc2V0MDsKKyAgICAgICAgU3RvcmVBQkwoYnVmZmVycywgb2Zmc2V0MCwgbGlzdCwgMCwgbmJ5
dGVzKTsKKyAgICAgICAgU3RvcmVBQkwoYnVmZmVycywgMCwgbGlzdCwgbmJ5dGVzLCBvZmZzZXQx
KTsKKyAgICB9CisKKyAgICAvLyBOb3cgdXBkYXRlIHRoZSBlbmQgdGltZS4KKyAgICBzZXRDdXJy
ZW50RnJhbWVCb3VuZHMoY3VycmVudFN0YXJ0RnJhbWUoKSwgZW5kRnJhbWUpOworCisgICAgcmV0
dXJuIE9rOworfQorCit2b2lkIENBUmluZ0J1ZmZlcjo6c2V0Q3VycmVudEZyYW1lQm91bmRzKHVp
bnQ2NF90IHN0YXJ0VGltZSwgdWludDY0X3QgZW5kVGltZSkKK3sKKyAgICBCeXRlU3BpbkxvY2tl
ciBsb2NrZXIobV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrKTsKKyAgICB1aW50MzJfdCBuZXh0UHRy
ID0gbV90aW1lQm91bmRzUXVldWVQdHIgKyAxOworICAgIHVpbnQzMl90IGluZGV4ID0gbmV4dFB0
ciAmIGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2s7CisKKyAgICBtX3RpbWVCb3VuZHNR
dWV1ZVtpbmRleF0ubV9zdGFydEZyYW1lID0gc3RhcnRUaW1lOworICAgIG1fdGltZUJvdW5kc1F1
ZXVlW2luZGV4XS5tX2VuZEZyYW1lID0gZW5kVGltZTsKKyAgICBtX3RpbWVCb3VuZHNRdWV1ZVtp
bmRleF0ubV91cGRhdGVDb3VudGVyID0gbmV4dFB0cjsKKyAgICBPU0F0b21pY0luY3JlbWVudDMy
QmFycmllcihzdGF0aWNfY2FzdDxpbnQzMl90Kj4oJm1fdGltZUJvdW5kc1F1ZXVlUHRyKSk7Cit9
CisKK3ZvaWQgQ0FSaW5nQnVmZmVyOjpnZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3QgJnN0
YXJ0VGltZSwgdWludDY0X3QgJmVuZFRpbWUpCit7CisgICAgQnl0ZVNwaW5Mb2NrZXIgbG9ja2Vy
KG1fY3VycmVudEZyYW1lQm91bmRzTG9jayk7CisgICAgdWludDMyX3QgY3VyUHRyID0gbV90aW1l
Qm91bmRzUXVldWVQdHI7CisgICAgdWludDMyX3QgaW5kZXggPSBjdXJQdHIgJiBrR2VuZXJhbFJp
bmdUaW1lQm91bmRzUXVldWVNYXNrOworICAgIENBUmluZ0J1ZmZlcjo6VGltZUJvdW5kcyYgYm91
bmRzID0gbV90aW1lQm91bmRzUXVldWVbaW5kZXhdOworCisgICAgc3RhcnRUaW1lID0gYm91bmRz
Lm1fc3RhcnRGcmFtZTsKKyAgICBlbmRUaW1lID0gYm91bmRzLm1fZW5kRnJhbWU7Cit9CisKK3Zv
aWQgQ0FSaW5nQnVmZmVyOjpjbGlwVGltZUJvdW5kcyh1aW50NjRfdCYgc3RhcnRSZWFkLCB1aW50
NjRfdCYgZW5kUmVhZCkKK3sKKyAgICB1aW50NjRfdCBzdGFydFRpbWU7CisgICAgdWludDY0X3Qg
ZW5kVGltZTsKKworICAgIGdldEN1cnJlbnRGcmFtZUJvdW5kcyhzdGFydFRpbWUsIGVuZFRpbWUp
OworCisgICAgaWYgKHN0YXJ0UmVhZCA+IGVuZFRpbWUgfHwgZW5kUmVhZCA8IHN0YXJ0VGltZSkg
eworICAgICAgICBlbmRSZWFkID0gc3RhcnRSZWFkOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc3RhcnRSZWFkID0gc3RkOjptYXgoc3RhcnRSZWFkLCBzdGFydFRpbWUpOworICAgIGVu
ZFJlYWQgPSBzdGQ6Om1pbihlbmRSZWFkLCBlbmRUaW1lKTsKKyAgICBlbmRSZWFkID0gc3RkOjpt
YXgoZW5kUmVhZCwgc3RhcnRSZWFkKTsKK30KKwordWludDY0X3QgQ0FSaW5nQnVmZmVyOjpjdXJy
ZW50U3RhcnRGcmFtZSgpIGNvbnN0Cit7CisgICAgdWludDMyX3QgaW5kZXggPSBtX3RpbWVCb3Vu
ZHNRdWV1ZVB0ciAmIGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2s7CisgICAgcmV0dXJu
IG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX3N0YXJ0RnJhbWU7Cit9CisKK3VpbnQ2NF90IENB
UmluZ0J1ZmZlcjo6Y3VycmVudEVuZEZyYW1lKCkgY29uc3QKK3sKKyAgICB1aW50MzJfdCBpbmRl
eCA9IG1fdGltZUJvdW5kc1F1ZXVlUHRyICYga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFz
azsKKyAgICByZXR1cm4gbV90aW1lQm91bmRzUXVldWVbaW5kZXhdLm1fZW5kRnJhbWU7Cit9CisK
K0NBUmluZ0J1ZmZlcjo6RXJyb3IgQ0FSaW5nQnVmZmVyOjpmZXRjaChBdWRpb0J1ZmZlckxpc3Qq
IGxpc3QsIHNpemVfdCBuRnJhbWVzLCB1aW50NjRfdCBzdGFydFJlYWQpCit7CisgICAgaWYgKCFu
RnJhbWVzKQorICAgICAgICByZXR1cm4gT2s7CisgICAgCisgICAgc3RhcnRSZWFkID0gc3RkOjpt
YXg8dWludDY0X3Q+KDAsIHN0YXJ0UmVhZCk7CisgICAgCisgICAgdWludDY0X3QgZW5kUmVhZCA9
IHN0YXJ0UmVhZCArIG5GcmFtZXM7CisgICAgCisgICAgdWludDY0X3Qgc3RhcnRSZWFkMCA9IHN0
YXJ0UmVhZDsKKyAgICB1aW50NjRfdCBlbmRSZWFkMCA9IGVuZFJlYWQ7CisgICAgCisgICAgY2xp
cFRpbWVCb3VuZHMoc3RhcnRSZWFkLCBlbmRSZWFkKTsKKworICAgIGlmIChzdGFydFJlYWQgPT0g
ZW5kUmVhZCkgeworICAgICAgICBaZXJvQUJMKGxpc3QsIDAsIG5GcmFtZXMgKiBtX2J5dGVzUGVy
RnJhbWUpOworICAgICAgICByZXR1cm4gT2s7CisgICAgfQorICAgIAorICAgIHNpemVfdCBieXRl
U2l6ZSA9IChlbmRSZWFkIC0gc3RhcnRSZWFkKSAqIG1fYnl0ZXNQZXJGcmFtZTsKKyAgICAKKyAg
ICBzaXplX3QgZGVzdFN0YXJ0Qnl0ZU9mZnNldCA9IHN0ZDo6bWF4PHNpemVfdD4oMCwgKHN0YXJ0
UmVhZCAtIHN0YXJ0UmVhZDApICogbV9ieXRlc1BlckZyYW1lKTsKKyAgICAKKyAgICBpZiAoZGVz
dFN0YXJ0Qnl0ZU9mZnNldCA+IDApCisgICAgICAgIFplcm9BQkwobGlzdCwgMCwgc3RkOjptaW48
c2l6ZV90PihuRnJhbWVzICogbV9ieXRlc1BlckZyYW1lLCBkZXN0U3RhcnRCeXRlT2Zmc2V0KSk7
CisKKyAgICBzaXplX3QgZGVzdEVuZFNpemUgPSBzdGQ6Om1heDxzaXplX3Q+KDAsIGVuZFJlYWQw
IC0gZW5kUmVhZCk7CisgICAgaWYgKGRlc3RFbmRTaXplID4gMCkKKyAgICAgICAgWmVyb0FCTChs
aXN0LCBkZXN0U3RhcnRCeXRlT2Zmc2V0ICsgYnl0ZVNpemUsIGRlc3RFbmRTaXplICogbV9ieXRl
c1BlckZyYW1lKTsKKworICAgIEJ5dGUgKipidWZmZXJzID0gc3RhdGljX2Nhc3Q8Qnl0ZSoqPiht
X2J1ZmZlcnMtPmRhdGEoKSk7CisgICAgc2l6ZV90IG9mZnNldDAgPSBmcmFtZU9mZnNldChzdGFy
dFJlYWQpOworICAgIHNpemVfdCBvZmZzZXQxID0gZnJhbWVPZmZzZXQoZW5kUmVhZCk7CisgICAg
c2l6ZV90IG5ieXRlczsKKyAgICAKKyAgICBpZiAob2Zmc2V0MCA8IG9mZnNldDEpIHsKKyAgICAg
ICAgbmJ5dGVzID0gb2Zmc2V0MSAtIG9mZnNldDA7CisgICAgICAgIEZldGNoQUJMKGxpc3QsIGRl
c3RTdGFydEJ5dGVPZmZzZXQsIGJ1ZmZlcnMsIG9mZnNldDAsIG5ieXRlcyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbmJ5dGVzID0gbV9jYXBhY2l0eUJ5dGVzIC0gb2Zmc2V0MDsKKyAgICAgICAg
RmV0Y2hBQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCwgYnVmZmVycywgb2Zmc2V0MCwgbmJ5
dGVzKTsKKyAgICAgICAgRmV0Y2hBQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCArIG5ieXRl
cywgYnVmZmVycywgMCwgb2Zmc2V0MSk7CisgICAgICAgIG5ieXRlcyArPSBvZmZzZXQxOworICAg
IH0KKyAgICAKKyAgICBpbnQgY2hhbm5lbENvdW50ID0gbGlzdC0+bU51bWJlckJ1ZmZlcnM7Cisg
ICAgQXVkaW9CdWZmZXIqIGRlc3QgPSBsaXN0LT5tQnVmZmVyczsKKyAgICB3aGlsZSAoLS1jaGFu
bmVsQ291bnQgPj0gMCkgeworICAgICAgICBkZXN0LT5tRGF0YUJ5dGVTaXplID0gbmJ5dGVzOwor
ICAgICAgICBkZXN0Kys7CisgICAgfQorICAgIAorICAgIHJldHVybiBPazsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlkOWIwNTI0YWNhYWUwMzNiMmQwMWIxMTQwZjlkZWY5Mzk1ZWI0N2UKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVy
LmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0FSaW5nQnVmZmVyX2gK
KyNkZWZpbmUgQ0FSaW5nQnVmZmVyX2gKKworI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIu
aD4KKyNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCit0eXBlZGVmIHN0cnVjdCBBdWRpb0J1ZmZlckxpc3QgQXVkaW9CdWZmZXJMaXN0OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENBUmluZ0J1ZmZlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDQVJpbmdCdWZmZXI+IGNyZWF0ZSgpOworICAgIH5DQVJp
bmdCdWZmZXIoKTsKKworICAgIGVudW0gRXJyb3IgeworICAgICAgICBPaywKKyAgICAgICAgVG9v
TXVjaCwgLy8gZmV0Y2ggc3RhcnQgdGltZSBpcyBlYXJsaWVyIHRoYW4gYnVmZmVyIHN0YXJ0IHRp
bWUgYW5kIGZldGNoIGVuZCB0aW1lIGlzIGxhdGVyIHRoYW4gYnVmZmVyIGVuZCB0aW1lCisgICAg
ICAgIENQVU92ZXJsb2FkLCAvLyB0aGUgcmVhZGVyIGlzIHVuYWJsZSB0byBnZXQgZW5vdWdoIENQ
VSBjeWNsZXMgdG8gY2FwdHVyZSBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgdGhlIHRpbWUgYm91
bmRzCisgICAgfTsKKworICAgIHZvaWQgYWxsb2NhdGUodWludDMyX3QgbV9jaGFubmVsQ291bnQs
IHNpemVfdCBieXRlc1BlckZyYW1lLCBzaXplX3QgZnJhbWVDb3VudCk7CisgICAgdm9pZCBkZWFs
bG9jYXRlKCk7CisgICAgRXJyb3Igc3RvcmUoY29uc3QgQXVkaW9CdWZmZXJMaXN0Kiwgc2l6ZV90
IGZyYW1lQ291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUpOworICAgIEVycm9yIGZldGNoKEF1ZGlv
QnVmZmVyTGlzdCosIHNpemVfdCBmcmFtZUNvdW50LCB1aW50NjRfdCBzdGFydEZyYW1lKTsKKyAg
ICB2b2lkIGdldEN1cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCAmc3RhcnRUaW1lLCB1aW50NjRf
dCAmZW5kVGltZSk7CisKKyAgICB1aW50MzJfdCBjaGFubmVsQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX2NoYW5uZWxDb3VudDsgfQorCitwcml2YXRlOgorICAgIENBUmluZ0J1ZmZlcigpOworCisg
ICAgc2l6ZV90IGZyYW1lT2Zmc2V0KHVpbnQ2NF90IGZyYW1lTnVtYmVyKSB7IHJldHVybiAoZnJh
bWVOdW1iZXIgJiBtX2ZyYW1lQ291bnRNYXNrKSAqIG1fYnl0ZXNQZXJGcmFtZTsgfQorCisgICAg
dm9pZCBjbGlwVGltZUJvdW5kcyh1aW50NjRfdCYgc3RhcnRSZWFkLCB1aW50NjRfdCYgZW5kUmVh
ZCk7CisKKyAgICB1aW50NjRfdCBjdXJyZW50U3RhcnRGcmFtZSgpIGNvbnN0OworICAgIHVpbnQ2
NF90IGN1cnJlbnRFbmRGcmFtZSgpIGNvbnN0OworICAgIHZvaWQgc2V0Q3VycmVudEZyYW1lQm91
bmRzKHVpbnQ2NF90IHN0YXJ0RnJhbWUsIHVpbnQ2NF90IGVuZEZyYW1lKTsKKworICAgIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gbV9idWZmZXJzOworICAgIHVpbnQzMl90IG1fY2hhbm5lbENvdW50Owor
ICAgIHNpemVfdCBtX2J5dGVzUGVyRnJhbWU7CisgICAgdWludDMyX3QgbV9mcmFtZUNvdW50Owor
ICAgIHVpbnQzMl90IG1fZnJhbWVDb3VudE1hc2s7CisgICAgc2l6ZV90IG1fY2FwYWNpdHlCeXRl
czsKKworICAgIHN0cnVjdCBUaW1lQm91bmRzIHsKKyAgICAgICAgVGltZUJvdW5kcygpCisgICAg
ICAgICAgICA6IG1fc3RhcnRGcmFtZSgwKQorICAgICAgICAgICAgLCBtX2VuZEZyYW1lKDApCisg
ICAgICAgICAgICAsIG1fdXBkYXRlQ291bnRlcigwKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgdm9sYXRpbGUgdWludDY0X3QgbV9zdGFydEZyYW1lOworICAgICAgICB2b2xhdGlsZSB1
aW50NjRfdCBtX2VuZEZyYW1lOworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBtX3VwZGF0ZUNv
dW50ZXI7CisgICAgfTsKKyAgICAKKyAgICBWZWN0b3I8VGltZUJvdW5kcz4gbV90aW1lQm91bmRz
UXVldWU7CisgICAgQnl0ZVNwaW5Mb2NrIG1fY3VycmVudEZyYW1lQm91bmRzTG9jazsKKyAgICBp
bnQzMl90IG1fdGltZUJvdW5kc1F1ZXVlUHRyOworfTsKKworfQorCisKKyNlbmRpZiAvLyBDQVJp
bmdCdWZmZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xYTZmZjkyOTlmMDE4M2VjMTcwOWJiOTYyMDZkYmEyYWJmNzhkM2Yw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmgKQEAgLTAsMCArMSwxMDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDX2gKKyNkZWZpbmUg
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakNfaAorCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYg
VVNFKE1FRElBVE9PTEJPWCkKKworI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNp
bmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpD
X0NMQVNTIEFWUGxheWVySXRlbTsKK09CSkNfQ0xBU1MgQVZNdXRhYmxlQXVkaW9NaXg7CisKK3R5
cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZU1UQXVkaW9Qcm9jZXNzaW5nVGFwICpNVEF1ZGlvUHJv
Y2Vzc2luZ1RhcFJlZjsKK3R5cGVkZWYgc3RydWN0IEF1ZGlvQnVmZmVyTGlzdCBBdWRpb0J1ZmZl
ckxpc3Q7Cit0eXBlZGVmIHN0cnVjdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gQXVkaW9T
dHJlYW1CYXNpY0Rlc2NyaXB0aW9uOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQXVkaW9Db252ZXJ0
ZXIqIEF1ZGlvQ29udmVydGVyUmVmOwordHlwZWRlZiB1aW50MzJfdCBNVEF1ZGlvUHJvY2Vzc2lu
Z1RhcEZsYWdzOwordHlwZWRlZiBzaWduZWQgbG9uZyBDTUl0ZW1Db3VudDsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDQVJpbmdCdWZmZXI7CisKK2NsYXNzIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDIDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akM+LCBwdWJsaWMgQXVkaW9Tb3VyY2VQcm92aWRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM+IGNyZWF0ZShBVlBsYXllckl0ZW0q
KTsKKyAgICB2aXJ0dWFsIH5BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQygpOworCisgICAgdm9p
ZCBzZXRQbGF5ZXJJdGVtKEFWUGxheWVySXRlbSAqKTsKKworcHJpdmF0ZToKKyAgICBBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQyhBVlBsYXllckl0ZW0gKik7CisKKyAgICB2b2lkIGRlc3Ryb3lN
aXgoKTsKKyAgICB2b2lkIGNyZWF0ZU1peCgpOworCisgICAgLy8gQXVkaW9Tb3VyY2VQcm92aWRl
cgorICAgIHZpcnR1YWwgdm9pZCBwcm92aWRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3QgZnJhbWVz
VG9Qcm9jZXNzKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KEF1ZGlvU291
cmNlUHJvdmlkZXJDbGllbnQqKSBvdmVycmlkZTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRDYWxs
YmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiwgdm9pZCosIHZvaWQqKik7CisgICAgc3RhdGlj
IHZvaWQgZmluYWxpemVDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZik7CisgICAgc3Rh
dGljIHZvaWQgcHJlcGFyZUNhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmLCBDTUl0ZW1D
b3VudCwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKik7CisgICAgc3RhdGljIHZv
aWQgdW5wcmVwYXJlQ2FsbGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYpOworICAgIHN0YXRp
YyB2b2lkIHByb2Nlc3NDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiwgQ01JdGVtQ291
bnQsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MsIEF1ZGlvQnVmZmVyTGlzdCosIENNSXRlbUNv
dW50KiwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyopOworCisgICAgdm9pZCBpbml0KHZvaWQq
IGNsaWVudEluZm8sIHZvaWQqKiB0YXBTdG9yYWdlT3V0KTsKKyAgICB2b2lkIGZpbmFsaXplKCk7
CisgICAgdm9pZCBwcmVwYXJlKENNSXRlbUNvdW50IG1heEZyYW1lcywgY29uc3QgQXVkaW9TdHJl
YW1CYXNpY0Rlc2NyaXB0aW9uICpwcm9jZXNzaW5nRm9ybWF0KTsKKyAgICB2b2lkIHVucHJlcGFy
ZSgpOworICAgIHZvaWQgcHJvY2VzcyhDTUl0ZW1Db3VudCBudW1iZXJGcmFtZXMsIE1UQXVkaW9Q
cm9jZXNzaW5nVGFwRmxhZ3MgZmxhZ3NJbiwgQXVkaW9CdWZmZXJMaXN0ICpidWZmZXJMaXN0SW5P
dXQsIENNSXRlbUNvdW50ICpudW1iZXJGcmFtZXNPdXQsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxh
Z3MgKmZsYWdzT3V0KTsKKworICAgIFJldGFpblB0cjxBVlBsYXllckl0ZW0+IG1fYXZQbGF5ZXJJ
dGVtOworICAgIFJldGFpblB0cjxBVk11dGFibGVBdWRpb01peD4gbV9hdkF1ZGlvTWl4OworICAg
IFJldGFpblB0cjxNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZj4gbV90YXA7CisgICAgUmV0YWluUHRy
PEF1ZGlvQ29udmVydGVyUmVmPiBtX2NvbnZlcnRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXVk
aW9CdWZmZXJMaXN0PiBtX2xpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvU3RyZWFtQmFz
aWNEZXNjcmlwdGlvbj4gbV90YXBEZXNjcmlwdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXVk
aW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uPiBtX291dHB1dERlc2NyaXB0aW9uOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDQVJpbmdCdWZmZXI+IG1fcmluZ0J1ZmZlcjsKKworICAgIE1lZGlhVGltZSBt
X3N0YXJ0VGltZUF0TGFzdFByb2Nlc3M7CisgICAgTWVkaWFUaW1lIG1fZW5kVGltZUF0TGFzdFBy
b2Nlc3M7CisgICAgdWludDY0X3QgbV93cml0ZUFoZWFkQ291bnQ7CisgICAgdWludDY0X3QgbV93
cml0ZUNvdW50OworICAgIHVpbnQ2NF90IG1fcmVhZENvdW50OworICAgIGJvb2wgbV9wYXVzZWQ7
CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCogbV9jbGllbnQ7Cit9OworICAgIAorfQor
CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDgxZWE3MzFlNmYxMTkwOWQzZTE0NzA1NzZmMWFl
OTU3ZDMzMzU2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbQpAQCAtMCww
ICsxLDM5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiQXVkaW9T
b3VyY2VQcm92aWRlckFWRk9iakMuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShN
RURJQVRPT0xCT1gpCisKKyNpbXBvcnQgIkF1ZGlvQnVzLmgiCisjaW1wb3J0ICJBdWRpb0NoYW5u
ZWwuaCIKKyNpbXBvcnQgIkF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQuaCIKKyNpbXBvcnQgIkNB
UmluZ0J1ZmZlci5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFUaW1lQVZG
b3VuZGF0aW9uLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCA8QVZGb3VuZGF0
aW9uL0FWQXNzZXRUcmFjay5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWQXVkaW9NaXguaD4K
KyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVk1lZGlhRm9ybWF0Lmg+CisjaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZQbGF5ZXJJdGVtLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJJdGVt
VHJhY2suaD4KKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJl
YWQuaD4KKworI2lmICFMT0dfRElTQUJMRUQKKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJl
YW0uaD4KKyNlbmRpZgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRhdGlvbikKK1NPRlRf
TElOS19GUkFNRVdPUksoTWVkaWFUb29sYm94KQorU09GVF9MSU5LX0ZSQU1FV09SSyhBdWRpb1Rv
b2xib3gpCitTT0ZUX0xJTktfRlJBTUVXT1JLKENvcmVNZWRpYSkKKworU09GVF9MSU5LX0NMQVNT
KEFWRm91bmRhdGlvbiwgQVZQbGF5ZXJJdGVtKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlv
biwgQVZNdXRhYmxlQXVkaW9NaXgpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVk11
dGFibGVBdWRpb01peElucHV0UGFyYW1ldGVycykKKwordHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01O
b3RpZmljYXRpb25DZW50ZXIgKkNNTm90aWZpY2F0aW9uQ2VudGVyUmVmOwordHlwZWRlZiB2b2lk
ICgqQ01Ob3RpZmljYXRpb25DYWxsYmFjaykoQ01Ob3RpZmljYXRpb25DZW50ZXJSZWYgaW5DZW50
ZXIsIGNvbnN0IHZvaWQgKmluTGlzdGVuZXIsIENGU3RyaW5nUmVmIGluTm90aWZpY2F0aW9uTmFt
ZSwgY29uc3Qgdm9pZCAqaW5Ob3RpZnlpbmdPYmplY3QsIENGVHlwZVJlZiBpbk5vdGlmaWNhdGlv
blBheWxvYWQpOworCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTU5vdGlmaWNhdGlvbkNlbnRlckdl
dERlZmF1bHRMb2NhbENlbnRlciwgQ01Ob3RpZmljYXRpb25DZW50ZXJSZWYsICh2b2lkKSwgKCkp
OworU09GVF9MSU5LKENvcmVNZWRpYSwgQ01Ob3RpZmljYXRpb25DZW50ZXJBZGRMaXN0ZW5lciwg
T1NTdGF0dXMsIChDTU5vdGlmaWNhdGlvbkNlbnRlclJlZiBjZW50ZXIsIGNvbnN0IHZvaWQqIGxp
c3RlbmVyLCBDTU5vdGlmaWNhdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBDRlN0cmluZ1JlZiBub3Rp
ZmljYXRpb24sIGNvbnN0IHZvaWQqIG9iamVjdCwgVUludDMyIGZsYWdzKSwgKGNlbnRlciwgbGlz
dGVuZXIsIGNhbGxiYWNrLCBub3RpZmljYXRpb24sIG9iamVjdCwgZmxhZ3MpKQorU09GVF9MSU5L
KENvcmVNZWRpYSwgQ01Ob3RpZmljYXRpb25DZW50ZXJSZW1vdmVMaXN0ZW5lciwgT1NTdGF0dXMs
IChDTU5vdGlmaWNhdGlvbkNlbnRlclJlZiBjZW50ZXIsIGNvbnN0IHZvaWQqIGxpc3RlbmVyLCBD
TU5vdGlmaWNhdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBDRlN0cmluZ1JlZiBub3RpZmljYXRpb24s
IGNvbnN0IHZvaWQqIG9iamVjdCksIChjZW50ZXIsIGxpc3RlbmVyLCBjYWxsYmFjaywgbm90aWZp
Y2F0aW9uLCBvYmplY3QpKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01UaW1lYmFzZUdldFRpbWUs
IENNVGltZSwgKENNVGltZWJhc2VSZWYgdGltZWJhc2UpLCAodGltZWJhc2UpKQorU09GVF9MSU5L
KENvcmVNZWRpYSwgQ01UaW1lYmFzZUdldEVmZmVjdGl2ZVJhdGUsIEZsb2F0NjQsIChDTVRpbWVi
YXNlUmVmIHRpbWViYXNlKSwgKHRpbWViYXNlKSkKKworU09GVF9MSU5LX0NPTlNUQU5UKENvcmVN
ZWRpYSwga0NNVGltZWJhc2VOb3RpZmljYXRpb25fRWZmZWN0aXZlUmF0ZUNoYW5nZWQsIENGU3Ry
aW5nUmVmKQorU09GVF9MSU5LX0NPTlNUQU5UKENvcmVNZWRpYSwga0NNVGltZWJhc2VOb3RpZmlj
YXRpb25fVGltZUp1bXBlZCwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtDTVRpbWViYXNlTm90aWZp
Y2F0aW9uX0VmZmVjdGl2ZVJhdGVDaGFuZ2VkIGdldGtDTVRpbWViYXNlTm90aWZpY2F0aW9uX0Vm
ZmVjdGl2ZVJhdGVDaGFuZ2VkKCkKKyNkZWZpbmUga0NNVGltZWJhc2VOb3RpZmljYXRpb25fVGlt
ZUp1bXBlZCBnZXRrQ01UaW1lYmFzZU5vdGlmaWNhdGlvbl9UaW1lSnVtcGVkKCkKKworU09GVF9M
SU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9Db252ZXJ0ZXJDb252ZXJ0Q29tcGxleEJ1ZmZlciwgT1NT
dGF0dXMsIChBdWRpb0NvbnZlcnRlclJlZiBpbkF1ZGlvQ29udmVydGVyLCBVSW50MzIgaW5OdW1i
ZXJQQ01GcmFtZXMsIGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCogaW5JbnB1dERhdGEsIEF1ZGlvQnVm
ZmVyTGlzdCogb3V0T3V0cHV0RGF0YSksIChpbkF1ZGlvQ29udmVydGVyLCBpbk51bWJlclBDTUZy
YW1lcywgaW5JbnB1dERhdGEsIG91dE91dHB1dERhdGEpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJv
eCwgQXVkaW9Db252ZXJ0ZXJOZXcsIE9TU3RhdHVzLCAoY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uKiBpblNvdXJjZUZvcm1hdCwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uKiBpbkRlc3RpbmF0aW9uRm9ybWF0LCBBdWRpb0NvbnZlcnRlclJlZiogb3V0QXVkaW9Db252
ZXJ0ZXIpLCAoaW5Tb3VyY2VGb3JtYXQsIGluRGVzdGluYXRpb25Gb3JtYXQsIG91dEF1ZGlvQ29u
dmVydGVyKSkKKworU09GVF9MSU5LKE1lZGlhVG9vbGJveCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBH
ZXRTdG9yYWdlLCB2b2lkKiwgKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCksICh0YXApKQor
U09GVF9MSU5LKE1lZGlhVG9vbGJveCwgTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRTb3VyY2VBdWRp
bywgT1NTdGF0dXMsIChNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiB0YXAsIENNSXRlbUNvdW50IG51
bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0ICpidWZmZXJMaXN0SW5PdXQsIE1UQXVkaW9Qcm9j
ZXNzaW5nVGFwRmxhZ3MgKmZsYWdzT3V0LCBDTVRpbWVSYW5nZSAqdGltZVJhbmdlT3V0LCBDTUl0
ZW1Db3VudCAqbnVtYmVyRnJhbWVzT3V0KSwgKHRhcCwgbnVtYmVyRnJhbWVzLCBidWZmZXJMaXN0
SW5PdXQsIGZsYWdzT3V0LCB0aW1lUmFuZ2VPdXQsIG51bWJlckZyYW1lc091dCkpCitTT0ZUX0xJ
TktfTUFZX0ZBSUwoTWVkaWFUb29sYm94LCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcENyZWF0ZSwgT1NT
dGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIGNvbnN0IE1UQXVkaW9Qcm9jZXNzaW5n
VGFwQ2FsbGJhY2tzICpjYWxsYmFja3MsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ3JlYXRpb25GbGFn
cyBmbGFncywgTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgKnRhcE91dCksIChhbGxvY2F0b3IsIGNh
bGxiYWNrcywgZmxhZ3MsIHRhcE91dCkpCisKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlv
biwgQVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZSwgTlNTdHJpbmcgKikKKyNkZWZpbmUgQVZN
ZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZSBnZXRBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxl
KCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgZG91YmxlIGtSaW5nQnVmZmVyRHVy
YXRpb24gPSAxOworCitQYXNzUmVmUHRyPEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDPiBBdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6Y3JlYXRlKEFWUGxheWVySXRlbSAqaXRlbSkKK3sKKyAg
ICBpZiAoIWNhbkxvYWRNVEF1ZGlvUHJvY2Vzc2luZ1RhcENyZWF0ZSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDKGl0ZW0pKTsKK30KKworQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDKEFWUGxheWVySXRlbSAqaXRlbSkKKyAgICA6IG1fYXZQbGF5ZXJJ
dGVtKGl0ZW0pCisgICAgLCBtX3dyaXRlQ291bnQoMCkKKyAgICAsIG1fcmVhZENvdW50KDApCisg
ICAgLCBtX3BhdXNlZCh0cnVlKQorICAgICwgbV9jbGllbnQobnVsbHB0cikKK3sKK30KKworQXVk
aW9Tb3VyY2VQcm92aWRlckFWRk9iakM6On5BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQygpCit7
CisgICAgc2V0Q2xpZW50KG51bGxwdHIpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDOjpwcm92aWRlSW5wdXQoQXVkaW9CdXMqIGJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cykKK3sKKyAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtKQorICAgICAgICByZXR1cm47CisKKyAgICB1
aW50NjRfdCBzdGFydEZyYW1lID0gMDsKKyAgICB1aW50NjRfdCBlbmRGcmFtZSA9IDA7CisgICAg
bV9yaW5nQnVmZmVyLT5nZXRDdXJyZW50RnJhbWVCb3VuZHMoc3RhcnRGcmFtZSwgZW5kRnJhbWUp
OworCisgICAgaWYgKG1fd3JpdGVDb3VudCA8PSBtX3JlYWRDb3VudCArIG1fd3JpdGVBaGVhZENv
dW50KSB7CisgICAgICAgIGJ1cy0+emVybygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgc2l6ZV90IGZyYW1lc0F2YWlsYWJsZSA9IGVuZEZyYW1lIC0gKG1fcmVhZENvdW50ICsgbV93
cml0ZUFoZWFkQ291bnQpOworICAgIGlmIChmcmFtZXNBdmFpbGFibGUgPCBmcmFtZXNUb1Byb2Nl
c3MpIHsKKyAgICAgICAgZnJhbWVzVG9Qcm9jZXNzID0gZnJhbWVzQXZhaWxhYmxlOworICAgICAg
ICBidXMtPnplcm8oKTsKKyAgICB9CisKKyAgICBBU1NFUlQoYnVzLT5udW1iZXJPZkNoYW5uZWxz
KCkgPT0gbV9yaW5nQnVmZmVyLT5jaGFubmVsQ291bnQoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9saXN0LT5tTnVtYmVyQnVmZmVyczsgKytpKSB7CisgICAgICAgIEF1ZGlv
Q2hhbm5lbCogY2hhbm5lbCA9IGJ1cy0+Y2hhbm5lbChpKTsKKyAgICAgICAgbV9saXN0LT5tQnVm
ZmVyc1tpXS5tTnVtYmVyQ2hhbm5lbHMgPSAxOworICAgICAgICBtX2xpc3QtPm1CdWZmZXJzW2ld
Lm1EYXRhID0gY2hhbm5lbC0+bXV0YWJsZURhdGEoKTsKKyAgICAgICAgbV9saXN0LT5tQnVmZmVy
c1tpXS5tRGF0YUJ5dGVTaXplID0gY2hhbm5lbC0+bGVuZ3RoKCkgKiBzaXplb2YoZmxvYXQpOwor
ICAgIH0KKworICAgIG1fcmluZ0J1ZmZlci0+ZmV0Y2gobV9saXN0LmdldCgpLCBmcmFtZXNUb1By
b2Nlc3MsIG1fcmVhZENvdW50KTsKKyAgICBtX3JlYWRDb3VudCArPSBmcmFtZXNUb1Byb2Nlc3M7
CisKKyAgICBpZiAobV9jb252ZXJ0ZXIpCisgICAgICAgIEF1ZGlvQ29udmVydGVyQ29udmVydENv
bXBsZXhCdWZmZXIobV9jb252ZXJ0ZXIuZ2V0KCksIGZyYW1lc1RvUHJvY2VzcywgbV9saXN0Lmdl
dCgpLCBtX2xpc3QuZ2V0KCkpOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpD
OjpzZXRDbGllbnQoQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCogY2xpZW50KQoreworICAgIGlm
IChtX2NsaWVudCA9PSBjbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2F2QXVk
aW9NaXgpCisgICAgICAgIGRlc3Ryb3lNaXgoKTsKKworICAgIG1fY2xpZW50ID0gY2xpZW50Owor
CisgICAgaWYgKG1fY2xpZW50ICYmIG1fYXZQbGF5ZXJJdGVtKQorICAgICAgICBjcmVhdGVNaXgo
KTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6c2V0UGxheWVySXRlbShB
VlBsYXllckl0ZW0gKmF2UGxheWVySXRlbSkKK3sKKyAgICBpZiAobV9hdlBsYXllckl0ZW0gPT0g
YXZQbGF5ZXJJdGVtKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9hdkF1ZGlvTWl4KQor
ICAgICAgICBkZXN0cm95TWl4KCk7CisKKyAgICBtX2F2UGxheWVySXRlbSA9IGF2UGxheWVySXRl
bTsKKworICAgIGlmIChtX2NsaWVudCAmJiBtX2F2UGxheWVySXRlbSkKKyAgICAgICAgY3JlYXRl
TWl4KCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmRlc3Ryb3lNaXgo
KQoreworICAgIGlmIChtX2F2UGxheWVySXRlbSkKKyAgICAgICAgW21fYXZQbGF5ZXJJdGVtIHNl
dEF1ZGlvTWl4Om5pbF07CisgICAgW21fYXZBdWRpb01peCBzZXRJbnB1dFBhcmFtZXRlcnM6bmls
XTsKKyAgICBtX2F2QXVkaW9NaXguY2xlYXIoKTsKKyAgICBtX3RhcC5jbGVhcigpOworfQorCit2
b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGVNaXgoKQoreworICAgIEFTU0VS
VCghbV9hdkF1ZGlvTWl4KTsKKyAgICBBU1NFUlQobV9hdlBsYXllckl0ZW0pOworICAgIEFTU0VS
VChtX2NsaWVudCk7CisKKyAgICBtX2F2QXVkaW9NaXggPSBhZG9wdE5TKFtbZ2V0QVZNdXRhYmxl
QXVkaW9NaXhDbGFzcygpIGFsbG9jXSBpbml0XSk7CisKKyAgICBNVEF1ZGlvUHJvY2Vzc2luZ1Rh
cENhbGxiYWNrcyBjYWxsYmFja3MgPSB7CisgICAgICAgIDAsCisgICAgICAgIHRoaXMsCisgICAg
ICAgIGluaXRDYWxsYmFjaywKKyAgICAgICAgZmluYWxpemVDYWxsYmFjaywKKyAgICAgICAgcHJl
cGFyZUNhbGxiYWNrLAorICAgICAgICB1bnByZXBhcmVDYWxsYmFjaywKKyAgICAgICAgcHJvY2Vz
c0NhbGxiYWNrLAorICAgIH07CisKKyAgICBNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiB0YXAgPSBu
dWxscHRyOworICAgIE1UQXVkaW9Qcm9jZXNzaW5nVGFwQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsICZjYWxsYmFja3MsIDEsICZ0YXApOworICAgIEFTU0VSVCh0YXApOworICAgIEFTU0VSVCht
X3RhcCA9PSB0YXApOworCisgICAgUmV0YWluUHRyPEFWTXV0YWJsZUF1ZGlvTWl4SW5wdXRQYXJh
bWV0ZXJzPiBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW2dldEFWTXV0YWJsZUF1ZGlvTWl4SW5wdXRQ
YXJhbWV0ZXJzQ2xhc3MoKSBhbGxvY10gaW5pdF0pOworICAgIFtwYXJhbWV0ZXJzIHNldEF1ZGlv
VGFwUHJvY2Vzc29yOm1fdGFwLmdldCgpXTsKKworICAgIENNUGVyc2lzdGVudFRyYWNrSUQgZmly
c3RFbmFibGVkQXVkaW9UcmFja0lEID0ga0NNUGVyc2lzdGVudFRyYWNrSURfSW52YWxpZDsKKyAg
ICBOU0FycmF5KiB0cmFja3MgPSBbbV9hdlBsYXllckl0ZW0gdHJhY2tzXTsKKyAgICBmb3IgKEFW
UGxheWVySXRlbVRyYWNrKiB0cmFjayBpbiB0cmFja3MpIHsKKyAgICAgICAgaWYgKFt0cmFjay5h
c3NldFRyYWNrIGhhc01lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljQXVk
aWJsZV0gJiYgdHJhY2suZW5hYmxlZCkgeworICAgICAgICAgICAgZmlyc3RFbmFibGVkQXVkaW9U
cmFja0lEID0gdHJhY2suYXNzZXRUcmFjay50cmFja0lEOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgW3BhcmFtZXRlcnMgc2V0VHJhY2tJRDpmaXJzdEVuYWJsZWRB
dWRpb1RyYWNrSURdOworICAgIAorICAgIFttX2F2QXVkaW9NaXggc2V0SW5wdXRQYXJhbWV0ZXJz
OkBbcGFyYW1ldGVycy5nZXQoKV1dOworICAgIFttX2F2UGxheWVySXRlbSBzZXRBdWRpb01peDpt
X2F2QXVkaW9NaXguZ2V0KCldOworfQorCit2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpD
Ojppbml0Q2FsbGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwLCB2b2lkKiBjbGllbnRJ
bmZvLCB2b2lkKiogdGFwU3RvcmFnZU91dCkKK3sKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQyogX3RoaXMgPSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyo+KGNs
aWVudEluZm8pOworICAgIF90aGlzLT5tX3RhcCA9IHRhcDsKKyAgICBfdGhpcy0+aW5pdChjbGll
bnRJbmZvLCB0YXBTdG9yYWdlT3V0KTsKK30KKwordm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQzo6ZmluYWxpemVDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiB0YXApCit7Cisg
ICAgQVNTRVJUKHRhcCk7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqIF90aGlzID0g
c3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihNVEF1ZGlvUHJvY2Vzc2lu
Z1RhcEdldFN0b3JhZ2UodGFwKSk7CisgICAgX3RoaXMtPmZpbmFsaXplKCk7Cit9CisKK3ZvaWQg
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByZXBhcmVDYWxsYmFjayhNVEF1ZGlvUHJvY2Vz
c2luZ1RhcFJlZiB0YXAsIENNSXRlbUNvdW50IG1heEZyYW1lcywgY29uc3QgQXVkaW9TdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uICpwcm9jZXNzaW5nRm9ybWF0KQoreworICAgIEFTU0VSVCh0YXApOwor
ICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0YXRpY19jYXN0PEF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDKj4oTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRTdG9yYWdlKHRh
cCkpOworICAgIF90aGlzLT5wcmVwYXJlKG1heEZyYW1lcywgcHJvY2Vzc2luZ0Zvcm1hdCk7Cit9
CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnVucHJlcGFyZUNhbGxiYWNrKE1U
QXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRhcCkKK3sKKyAgICBBU1NFUlQodGFwKTsKKyAgICBBdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQyogX3RoaXMgPSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQyo+KE1UQXVkaW9Qcm9jZXNzaW5nVGFwR2V0U3RvcmFnZSh0YXApKTsKKyAg
ICBfdGhpcy0+dW5wcmVwYXJlKCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akM6OnByb2Nlc3NDYWxsYmFjayhNVEF1ZGlvUHJvY2Vzc2luZ1RhcFJlZiB0YXAsIENNSXRlbUNv
dW50IG51bWJlckZyYW1lcywgTVRBdWRpb1Byb2Nlc3NpbmdUYXBGbGFncyBmbGFncywgQXVkaW9C
dWZmZXJMaXN0ICpidWZmZXJMaXN0SW5PdXQsIENNSXRlbUNvdW50ICpudW1iZXJGcmFtZXNPdXQs
IE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MgKmZsYWdzT3V0KQoreworICAgIEFTU0VSVCh0YXAp
OworICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKiBfdGhpcyA9IHN0YXRpY19jYXN0PEF1
ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDKj4oTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRTdG9yYWdl
KHRhcCkpOworICAgIF90aGlzLT5wcm9jZXNzKG51bWJlckZyYW1lcywgZmxhZ3MsIGJ1ZmZlckxp
c3RJbk91dCwgbnVtYmVyRnJhbWVzT3V0LCBmbGFnc091dCk7Cit9CisKK3ZvaWQgQXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM6OmluaXQodm9pZCogY2xpZW50SW5mbywgdm9pZCoqIHRhcFN0b3Jh
Z2VPdXQpCit7CisgICAgQVNTRVJUKGNsaWVudEluZm8gPT0gdGhpcyk7CisgICAgVU5VU0VEX1BB
UkFNKGNsaWVudEluZm8pOworICAgICp0YXBTdG9yYWdlT3V0ID0gdGhpczsKK30KKwordm9pZCBB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6ZmluYWxpemUoKQoreworfQorCitzdGF0aWMgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYSwgY29uc3Qg
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBiKQoreworICAgIHJldHVybiBhLm1TYW1wbGVS
YXRlID09IGIubVNhbXBsZVJhdGUKKyAgICAgICAgJiYgYS5tRm9ybWF0SUQgPT0gYi5tRm9ybWF0
SUQKKyAgICAgICAgJiYgYS5tRm9ybWF0RmxhZ3MgPT0gYi5tRm9ybWF0RmxhZ3MKKyAgICAgICAg
JiYgYS5tQnl0ZXNQZXJQYWNrZXQgPT0gYi5tQnl0ZXNQZXJQYWNrZXQKKyAgICAgICAgJiYgYS5t
RnJhbWVzUGVyUGFja2V0ID09IGIubUZyYW1lc1BlclBhY2tldAorICAgICAgICAmJiBhLm1CeXRl
c1BlckZyYW1lID09IGIubUJ5dGVzUGVyRnJhbWUKKyAgICAgICAgJiYgYS5tQ2hhbm5lbHNQZXJG
cmFtZSA9PSBiLm1DaGFubmVsc1BlckZyYW1lCisgICAgICAgICYmIGEubUJpdHNQZXJDaGFubmVs
ID09IGIubUJpdHNQZXJDaGFubmVsOworfQorCitzdGF0aWMgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYSwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK3ZvaWQgQXVkaW9T
b3VyY2VQcm92aWRlckFWRk9iakM6OnByZXBhcmUoQ01JdGVtQ291bnQgbWF4RnJhbWVzLCBjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKnByb2Nlc3NpbmdGb3JtYXQpCit7CisgICAg
QVNTRVJUKG1heEZyYW1lcyA+PSAwKTsKKworICAgIG1fdGFwRGVzY3JpcHRpb24gPSBzdGQ6Om1h
a2VfdW5pcXVlPEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbj4oKnByb2Nlc3NpbmdGb3JtYXQp
OworICAgIGludCBudW1iZXJPZkNoYW5uZWxzID0gcHJvY2Vzc2luZ0Zvcm1hdC0+bUNoYW5uZWxz
UGVyRnJhbWU7CisgICAgc2l6ZV90IGJ5dGVzUGVyRnJhbWUgPSBwcm9jZXNzaW5nRm9ybWF0LT5t
Qnl0ZXNQZXJGcmFtZTsKKyAgICBkb3VibGUgc2FtcGxlUmF0ZSA9IHByb2Nlc3NpbmdGb3JtYXQt
Pm1TYW1wbGVSYXRlOworICAgIEFTU0VSVChzYW1wbGVSYXRlID49IDApOworCisgICAgbV9vdXRw
dXREZXNjcmlwdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uPigpOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24tPm1TYW1wbGVSYXRlID0gc2FtcGxlUmF0
ZTsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tRm9ybWF0SUQgPSBrQXVkaW9Gb3JtYXRMaW5l
YXJQQ007CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbi0+bUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9y
bWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZDsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uLT5tQml0
c1BlckNoYW5uZWwgPSA4ICogc2l6ZW9mKEZsb2F0MzIpOworICAgIG1fb3V0cHV0RGVzY3JpcHRp
b24tPm1DaGFubmVsc1BlckZyYW1lID0gbnVtYmVyT2ZDaGFubmVsczsKKyAgICBtX291dHB1dERl
c2NyaXB0aW9uLT5tRnJhbWVzUGVyUGFja2V0ID0gMTsKKyAgICBtX291dHB1dERlc2NyaXB0aW9u
LT5tQnl0ZXNQZXJQYWNrZXQgPSBzaXplb2YoRmxvYXQzMik7CisgICAgbV9vdXRwdXREZXNjcmlw
dGlvbi0+bUJ5dGVzUGVyRnJhbWUgPSBzaXplb2YoRmxvYXQzMik7CisgICAgbV9vdXRwdXREZXNj
cmlwdGlvbi0+bUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVk
OworCisgICAgaWYgKCptX3RhcERlc2NyaXB0aW9uICE9ICptX291dHB1dERlc2NyaXB0aW9uKSB7
CisgICAgICAgIEF1ZGlvQ29udmVydGVyUmVmIG91dENvbnZlcnRlciA9IG51bGxwdHI7CisgICAg
ICAgIEF1ZGlvQ29udmVydGVyTmV3KG1fdGFwRGVzY3JpcHRpb24uZ2V0KCksIG1fb3V0cHV0RGVz
Y3JpcHRpb24uZ2V0KCksICZvdXRDb252ZXJ0ZXIpOworICAgICAgICBtX2NvbnZlcnRlciA9IG91
dENvbnZlcnRlcjsKKyAgICB9CisKKyAgICAvLyBNYWtlIHRoZSByaW5nYnVmZmVyIGxhcmdlIGVu
b3VnaCB0byBzdG9yZSBhdCBsZWFzdCB0d28gY2FsbGJhY2tzIHdvcnRoIG9mIGF1ZGlvLCBvciAx
cywgd2hpY2hldmVyIGlzIGxhcmdlci4KKyAgICBzaXplX3QgY2FwYWNpdHkgPSBzdGQ6Om1heChz
dGF0aWNfY2FzdDxzaXplX3Q+KDIgKiBtYXhGcmFtZXMpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGtS
aW5nQnVmZmVyRHVyYXRpb24gKiBzYW1wbGVSYXRlKSk7CisKKyAgICBtX3JpbmdCdWZmZXIgPSBD
QVJpbmdCdWZmZXI6OmNyZWF0ZSgpOworICAgIG1fcmluZ0J1ZmZlci0+YWxsb2NhdGUobnVtYmVy
T2ZDaGFubmVscywgYnl0ZXNQZXJGcmFtZSwgY2FwYWNpdHkpOworCisgICAgLy8gQXVkaW9CdWZm
ZXJMaXN0IGlzIGEgdmFyaWFibGUtbGVuZ3RoIHN0cnVjdCwgc28gY3JlYXRlIG9uIHRoZSBoZWFw
IHdpdGggYSBnZW5lcmljIG5ldygpIG9wZXJhdG9yCisgICAgLy8gd2l0aCBhIGN1c3RvbSBzaXpl
LCBhbmQgaW5pdGlhbGl6ZSB0aGUgc3RydWN0IG1hbnVhbGx5LgorICAgIHNpemVfdCBidWZmZXJM
aXN0U2l6ZSA9IHNpemVvZihBdWRpb0J1ZmZlckxpc3QpICsgKHNpemVvZihBdWRpb0J1ZmZlcikg
KiBzdGQ6Om1heCgxLCBudW1iZXJPZkNoYW5uZWxzIC0gMSkpOworICAgIG1fbGlzdCA9IHN0ZDo6
dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxpc3Q+KChBdWRpb0J1ZmZlckxpc3QqKSA6Om9wZXJhdG9y
IG5ldyAoYnVmZmVyTGlzdFNpemUpKTsKKyAgICBtZW1zZXQobV9saXN0LmdldCgpLCAwLCBidWZm
ZXJMaXN0U2l6ZSk7CisgICAgbV9saXN0LT5tTnVtYmVyQnVmZmVycyA9IG51bWJlck9mQ2hhbm5l
bHM7CisKKyAgICBSZWZQdHI8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM+IHN0cm9uZ1RoaXMg
PSB0aGlzOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3N0cm9uZ1RoaXMsIG51bWJlck9mQ2hhbm5l
bHMsIHNhbXBsZVJhdGVdIHsKKyAgICAgICAgc3Ryb25nVGhpcy0+bV9jbGllbnQtPnNldEZvcm1h
dChudW1iZXJPZkNoYW5uZWxzLCBzYW1wbGVSYXRlKTsKKyAgICB9KTsKK30KKwordm9pZCBBdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6dW5wcmVwYXJlKCkKK3sKKyAgICBtX3RhcERlc2NyaXB0
aW9uID0gbnVsbHB0cjsKKyAgICBtX291dHB1dERlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICBt
X3JpbmdCdWZmZXIgPSBudWxscHRyOworICAgIG1fbGlzdCA9IG51bGxwdHI7Cit9CisKK3ZvaWQg
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb2Nlc3MoQ01JdGVtQ291bnQgbnVtYmVyT2ZG
cmFtZXMsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MgZmxhZ3MsIEF1ZGlvQnVmZmVyTGlzdCog
YnVmZmVyTGlzdEluT3V0LCBDTUl0ZW1Db3VudCogbnVtYmVyRnJhbWVzT3V0LCBNVEF1ZGlvUHJv
Y2Vzc2luZ1RhcEZsYWdzKiBmbGFnc091dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwor
CisgICAgQ01JdGVtQ291bnQgaXRlbUNvdW50ID0gMDsKKyAgICBDTVRpbWVSYW5nZSByYW5nZU91
dDsKKyAgICBPU1N0YXR1cyBzdGF0dXMgPSBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEdldFNvdXJjZUF1
ZGlvKG1fdGFwLmdldCgpLCBudW1iZXJPZkZyYW1lcywgYnVmZmVyTGlzdEluT3V0LCBmbGFnc091
dCwgJnJhbmdlT3V0LCAmaXRlbUNvdW50KTsKKyAgICBpZiAoc3RhdHVzICE9IG5vRXJyIHx8ICFp
dGVtQ291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIE1lZGlhVGltZSByYW5nZVN0YXJ0ID0g
dG9NZWRpYVRpbWUocmFuZ2VPdXQuc3RhcnQpOworICAgIE1lZGlhVGltZSByYW5nZUR1cmF0aW9u
ID0gdG9NZWRpYVRpbWUocmFuZ2VPdXQuZHVyYXRpb24pOworCisgICAgaWYgKHJhbmdlU3RhcnQu
aXNJbnZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE1lZGlhVGltZSBjdXJyZW50VGlt
ZSA9IHRvTWVkaWFUaW1lKENNVGltZWJhc2VHZXRUaW1lKFttX2F2UGxheWVySXRlbSB0aW1lYmFz
ZV0pKTsKKyAgICBpZiAoY3VycmVudFRpbWUuaXNJbnZhbGlkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIFRoZSBhdWRpbyB0YXAgd2lsbCBnZW5lcmF0ZSBzaWxlbmNlIHdoZW4gdGhlIG1l
ZGlhIGlzIHBhdXNlZCwgYW5kIHdpbGwgbm90IGFkdmFuY2UgdGhlCisgICAgLy8gdGFwIGN1cnJl
bnRUaW1lLgorICAgIGlmIChyYW5nZVN0YXJ0ID09IG1fc3RhcnRUaW1lQXRMYXN0UHJvY2VzcyB8
fCByYW5nZUR1cmF0aW9uID09IE1lZGlhVGltZTo6emVyb1RpbWUoKSkgeworICAgICAgICBtX3Bh
dXNlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wYXVzZWQp
IHsKKyAgICAgICAgLy8gT25seSBjaGVjayB0aGUgd3JpdGUtYWhlYWQgdGltZSB3aGVuIHBsYXli
YWNrIGJlZ2lucy4KKyAgICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKKyAgICAgICAgTWVkaWFUaW1l
IGVhcmx5QnkgPSByYW5nZVN0YXJ0IC0gY3VycmVudFRpbWU7CisgICAgICAgIG1fd3JpdGVBaGVh
ZENvdW50ID0gbV90YXBEZXNjcmlwdGlvbi0+bVNhbXBsZVJhdGUgKiBlYXJseUJ5LnRvRG91Ymxl
KCk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB1bmRlcmx5aW5nIG1lZGlh
IGhhcyBzZWVrZWQsIHdoaWNoIHdvdWxkIHJlcXVpcmUgdXMgdG8gImZsdXNoIgorICAgIC8vIG91
ciBvdXRzdGFuZGluZyBidWZmZXJzLgorICAgIGlmIChyYW5nZVN0YXJ0ICE9IG1fZW5kVGltZUF0
TGFzdFByb2Nlc3MpCisgICAgICAgIG1fcmVhZENvdW50ID0gbV93cml0ZUNvdW50OworCisgICAg
bV9zdGFydFRpbWVBdExhc3RQcm9jZXNzID0gcmFuZ2VTdGFydDsKKyAgICBtX2VuZFRpbWVBdExh
c3RQcm9jZXNzID0gcmFuZ2VTdGFydCArIHJhbmdlRHVyYXRpb247CisKKyAgICAvLyBTdGFydE9m
U3RyZWFtIGluZGljYXRlcyBhIGRpc2NvbnRpbnVpdHksIHN1Y2ggYXMgd2hlbiBhbiBBVlBsYXll
ckl0ZW0gaXMgcmUtYWRkZWQKKyAgICAvLyB0byBhbiBBVlBsYXllciwgc28gImZsdXNoIiBvdXRz
dGFuZGluZyBidWZmZXJzLgorICAgIGlmIChmbGFnc091dCAmJiAqZmxhZ3NPdXQgJiBrTVRBdWRp
b1Byb2Nlc3NpbmdUYXBGbGFnX1N0YXJ0T2ZTdHJlYW0pCisgICAgICAgIG1fcmVhZENvdW50ID0g
bV93cml0ZUNvdW50OworCisgICAgbV9yaW5nQnVmZmVyLT5zdG9yZShidWZmZXJMaXN0SW5PdXQs
IGl0ZW1Db3VudCwgbV93cml0ZUNvdW50KTsKKyAgICBtX3dyaXRlQ291bnQgKz0gaXRlbUNvdW50
OworCisgICAgLy8gTXV0ZSB0aGUgZGVmYXVsdCBhdWRpbyBwbGF5YmFjayBieSB6ZXJvaW5nIHRo
ZSB0YXAtb3duZWQgYnVmZmVycy4KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYnVmZmVy
TGlzdEluT3V0LT5tTnVtYmVyQnVmZmVyczsgKytpKSB7CisgICAgICAgIEF1ZGlvQnVmZmVyJiBi
dWZmZXIgPSBidWZmZXJMaXN0SW5PdXQtPm1CdWZmZXJzW2ldOworICAgICAgICBtZW1zZXQoYnVm
ZmVyLm1EYXRhLCAwLCBidWZmZXIubURhdGFCeXRlU2l6ZSk7CisgICAgfQorICAgICpudW1iZXJG
cmFtZXNPdXQgPSAwOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKSAmJiBV
U0UoTUVESUFUT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCmluZGV4IDNlMmMxYjk0Zjc3YjZk
NTM1ODBiZDljNWIyODM5NDBhYTE3MjM0YWEuLjM3ZmNjNjFkOTNiYTcxNmQ5NmQ2NTVhM2U3YmVi
ZTU3NWEwNGZkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKQEAgLTYyLDYgKzYyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyOwogY2xhc3Mg
SW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlQVZGOwogY2xhc3MgSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRk9iakM7CitjbGFzcyBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzsKIGNsYXNz
IEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQzsKIGNsYXNzIFZpZGVvVHJhY2tQcml2YXRlQVZGT2Jq
QzsKIApAQCAtMjA5LDYgKzIxMCwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRBVlBsYXll
ckl0ZW0oQVZQbGF5ZXJJdGVtICopOwogCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1F
RElBVE9PTEJPWCkKKyAgICB2aXJ0dWFsIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNl
UHJvdmlkZXIoKTsKKyNlbmRpZgorCiAgICAgdm9pZCBjcmVhdGVJbWFnZUdlbmVyYXRvcigpOwog
ICAgIHZvaWQgZGVzdHJveUltYWdlR2VuZXJhdG9yKCk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGNyZWF0ZUltYWdlRm9yVGltZUluUmVjdChmbG9hdCwgY29uc3QgSW50UmVjdCYpOwpAQCAt
Mjg5LDYgKzI5NCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV92aWRlb0ZyYW1lSGFzRHJhd247
CiAgICAgYm9vbCBtX2hhdmVDaGVja2VkUGxheWFiaWxpdHk7CiAKKyNpZiBFTkFCTEUoV0VCX0FV
RElPKSAmJiBVU0UoTUVESUFUT09MQk9YKQorICAgIFJlZlB0cjxBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQz4gbV9wcm92aWRlcjsKKyNlbmRpZgorCiAgICAgUmV0YWluUHRyPEFWQXNzZXRJbWFn
ZUdlbmVyYXRvcj4gbV9pbWFnZUdlbmVyYXRvcjsKICNpZiBIQVZFKEFWRk9VTkRBVElPTl9WSURF
T19PVVRQVVQpCiAgICAgUmV0YWluUHRyPEFWUGxheWVySXRlbVZpZGVvT3V0cHV0PiBtX3ZpZGVv
T3V0cHV0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KaW5kZXggNDRkZWNiNjE5ZTU1YmNlYzU5YzEw
N2Y3ZjBhMTY0ZjlhODk4YmEzMy4uNGMwYzU4YWEwNzk1MTIyMjhmMTkxM2RlYWNjMWMxMDM1ZTVh
MjAyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0
ICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgiCiAKICNpbXBvcnQgIkFWVHJh
Y2tQcml2YXRlQVZGT2JqQ0ltcGwuaCIKKyNpbXBvcnQgIkF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDLmgiCiAjaW1wb3J0ICJBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMuaCIKICNpbXBvcnQgIkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKQEAg
LTQ5OSw2ICs1MDAsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpjYW5jZWxMb2FkKCkKICAgICAgICAgW3RyYWNrIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2Vy
dmVyLmdldCgpIGZvcktleVBhdGg6QCJlbmFibGVkIl07CiAgICAgbV9jYWNoZWRUcmFja3MgPSBu
dWxscHRyOwogCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKKyAg
ICBpZiAobV9wcm92aWRlcikKKyAgICAgICAgbV9wcm92aWRlci0+c2V0UGxheWVySXRlbShudWxs
cHRyKTsKKyNlbmRpZgorCiAgICAgc2V0SWdub3JlTG9hZFN0YXRlQ2hhbmdlcyhmYWxzZSk7CiB9
CiAKQEAgLTkwOSw2ICs5MTUsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpjcmVhdGVBVlBsYXllckl0ZW0oKQogICAgIFttX2F2UGxheWVySXRlbS5nZXQoKSBh
ZGRPdXRwdXQ6bV9sZWdpYmxlT3V0cHV0LmdldCgpXTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFdF
Ql9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKKyAgICBpZiAobV9wcm92aWRlcikKKyAgICAg
ICAgbV9wcm92aWRlci0+c2V0UGxheWVySXRlbShtX2F2UGxheWVySXRlbS5nZXQoKSk7CisjZW5k
aWYKKwogICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKIH0KIApAQCAtMTgzNyw2ICsxODQ4
LDE1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0VGV4dFRy
YWNrUmVwcmVzZW50YXRpb24oVGV4dFRyYWNrUmVwCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFZJREVP
X1RSQUNLKQogCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKK0F1
ZGlvU291cmNlUHJvdmlkZXIqIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmF1
ZGlvU291cmNlUHJvdmlkZXIoKQoreworICAgIGlmICghbV9wcm92aWRlcikKKyAgICAgICAgbV9w
cm92aWRlciA9IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGUobV9hdlBsYXllckl0
ZW0uZ2V0KCkpOworICAgIHJldHVybiBtX3Byb3ZpZGVyLmdldCgpOworfQorI2VuZGlmCisKIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2l6ZUNoYW5nZWQoKQogewog
ICAgIGlmICghbV9hdkFzc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1NvZnRMaW5raW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU29mdExpbmtp
bmcuaAppbmRleCBkOTFjMTk0ZWJlYmE0MTc2NmYxZWViZTQ2YzE2M2M5ZDVkMDYyYWI0Li5kYmU1
OGI2ZmMyODMwYTkyYTMwY2VkOTViYzY3YTM5ZjVhNjA4MDVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaApAQCAtMTEwLDcgKzExMCw2IEBACiAgICAgICAgIHJl
dHVybiBzb2Z0TGluayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlck5hbWVzOyBcCiAgICAgfQogCi0j
aWYgUExBVEZPUk0oSU9TKQogI2RlZmluZSBTT0ZUX0xJTktfTUFZX0ZBSUwoZnJhbWV3b3JrLCBm
dW5jdGlvbk5hbWUsIHJlc3VsdFR5cGUsIHBhcmFtZXRlckRlY2xhcmF0aW9ucywgcGFyYW1ldGVy
TmFtZXMpIFwKICAgICBzdGF0aWMgcmVzdWx0VHlwZSAoKnNvZnRMaW5rIyNmdW5jdGlvbk5hbWUp
IHBhcmFtZXRlckRlY2xhcmF0aW9ucyA9IDA7IFwKICAgICBcCkBAIC0xMzIsNyArMTMxLDYgQEAK
ICAgICAgICAgQVNTRVJUKHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUpOyBcCiAgICAgICAgIHJldHVy
biBzb2Z0TGluayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlck5hbWVzOyBcCiAgICAgfQotI2VuZGlm
CiAKIC8qIGNhbGxpbmdDb252ZW50aW9uIGlzIHVudXNlZCBvbiBNYWMgYnV0IGlzIGhlcmUgdG8g
a2VlcCB0aGUgbWFjcm8gcHJvdG90eXBlIHRoZSBzYW1lIGJldHdlZW4gTWFjIGFuZCBXaW5kb3dz
LiAqLwogI2RlZmluZSBTT0ZUX0xJTktfT1BUSU9OQUwoZnJhbWV3b3JrLCBmdW5jdGlvbk5hbWUs
IHJlc3VsdFR5cGUsIGNhbGxpbmdDb252ZW50aW9uLCBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMpIFwK
</data>

          </attachment>
      

    </bug>

</bugzilla>