<?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>184265</bug_id>
          
          <creation_ts>2018-04-03 07:22:22 -0700</creation_ts>
          <short_desc>[OpenVR][WebVR] Retrieve FrameData in WebVR&apos;s rAF</short_desc>
          <delta_ts>2018-04-09 07:41:19 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>dino</cc>
    
    <cc>keith_miller</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1411405</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-03 07:22:22 -0700</bug_when>
    <thetext>[OpenVR][WebVR] Retrieve FrameData in WebVR&apos;s rAF</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411407</commentid>
    <comment_count>1</comment_count>
      <attachid>337078</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-03 07:44:08 -0700</bug_when>
    <thetext>Created attachment 337078
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412032</commentid>
    <comment_count>2</comment_count>
      <attachid>337261</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-05 02:26:43 -0700</bug_when>
    <thetext>Created attachment 337261
Patch

Mac/iOS build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412329</commentid>
    <comment_count>3</comment_count>
      <attachid>337349</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-06 02:08:21 -0700</bug_when>
    <thetext>Created attachment 337349
Patch

Build fix for WPE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412330</commentid>
    <comment_count>4</comment_count>
      <attachid>337350</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-06 02:11:39 -0700</bug_when>
    <thetext>Created attachment 337350
Patch

Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412331</commentid>
    <comment_count>5</comment_count>
      <attachid>337351</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-06 03:14:38 -0700</bug_when>
    <thetext>Created attachment 337351
Patch

Another build fix. Seems that the way unified sources are built affect a lot the compilation results</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412332</commentid>
    <comment_count>6</comment_count>
      <attachid>337352</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-06 03:20:36 -0700</bug_when>
    <thetext>Created attachment 337352
Patch

And another build fix :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412334</commentid>
    <comment_count>7</comment_count>
      <attachid>337353</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-06 03:48:00 -0700</bug_when>
    <thetext>Created attachment 337353
Patch

Mac build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412336</commentid>
    <comment_count>8</comment_count>
      <attachid>337355</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-06 03:59:52 -0700</bug_when>
    <thetext>Created attachment 337355
Patch

Hopefully the last Mac build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412831</commentid>
    <comment_count>9</comment_count>
      <attachid>337355</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-04-09 00:15:28 -0700</bug_when>
    <thetext>Comment on attachment 337355
Patch

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

&gt; Source/WebCore/Modules/webvr/VRDisplay.cpp:113
&gt; +    auto* document = downcast&lt;Document&gt;(scriptExecutionContext());

This can be moved into the (!m_scriptedAnimationController) block.

&gt; Source/WebCore/Modules/webvr/VRDisplay.cpp:118
&gt; +        // FIXME: Get the display id of the HMD as it should use the HMD native refresh rate.
&gt; +        PlatformDisplayID displayID = document-&gt;page() ? document-&gt;page()-&gt;chrome().displayID() : 0;
&gt; +        m_scriptedAnimationController = ScriptedAnimationController::create(*document, displayID);

Is this necessary at this point, for animation frame functionality? I would just default to the 0 ID until it&apos;s possible to acquire the display ID from the HMD device.

&gt; Source/WebCore/Modules/webvr/VRFrameData.cpp:91
&gt; +    return projectionMatrix;

You could use the 16-argument TransformationMatrix constructor here, and pass all the values in the return statement.

&gt; Source/WebCore/Modules/webvr/VRFrameData.cpp:124
&gt; +    return matrix;

Same here. You could also alias normalizedQuaternion variable to something shorter, e.g. `nq`, and then compute all the values on the fly.

&gt; Source/WebCore/Modules/webvr/VRFrameData.cpp:148
&gt; +    FloatPoint3D leftEyeOffset = leftEye.rawOffset();
&gt; +    m_leftViewMatrix = rotationMatrix;
&gt; +    applyHeadToEyeTransform(m_leftViewMatrix, leftEyeOffset);

Inline leftEye.rawOffset() into the applyHeadToEyeTransform() call.

&gt; Source/WebCore/Modules/webvr/VRFrameData.cpp:152
&gt; +    FloatPoint3D rightEyeOffset = rightEye.rawOffset();
&gt; +    m_rightViewMatrix = rotationMatrix;
&gt; +    applyHeadToEyeTransform(m_rightViewMatrix, rightEyeOffset);

Ditto.

&gt; Source/WebCore/Modules/webvr/VRFrameData.h:28
&gt; +

Unnecessary whitespace.

&gt; Source/WebCore/Modules/webvr/VRPose.cpp:48
&gt; +    auto position = Float32Array::create(3);
&gt; +    float* positionData = position-&gt;data();
&gt; +    positionData[0] = m_trackingInfo.position-&gt;x();
&gt; +    positionData[1] = m_trackingInfo.position-&gt;y();
&gt; +    positionData[2] = m_trackingInfo.position-&gt;z();
&gt; +    return position.releaseNonNull();

To follow other Float32Array::create() calls, first construct positionData[3] and then call `Float32Array::create(positionData, 3).releaseNonNull();`.

&gt; Source/WebCore/Modules/webvr/VRPose.cpp:72
&gt; +    auto orientation = Float32Array::create(4);
&gt; +    float* orientationData = orientation-&gt;data();
&gt; +    orientationData[0] = m_trackingInfo.orientation-&gt;x;
&gt; +    orientationData[1] = m_trackingInfo.orientation-&gt;y;
&gt; +    orientationData[2] = m_trackingInfo.orientation-&gt;z;
&gt; +    orientationData[3] = m_trackingInfo.orientation-&gt;w;
&gt; +    return orientation.releaseNonNull();

Ditto.

&gt; Source/WebCore/Modules/webvr/VRPose.h:28
&gt; +

Unnecessary whitespace.

&gt; Source/WebCore/platform/vr/VRPlatformDisplay.h:157
&gt; +    double timestamp;

Default-initialize this to 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412841</commentid>
    <comment_count>10</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-09 02:37:55 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #9)
&gt; Comment on attachment 337355 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=337355&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/webvr/VRDisplay.cpp:113
&gt; &gt; +    auto* document = downcast&lt;Document&gt;(scriptExecutionContext());
&gt; 
&gt; This can be moved into the (!m_scriptedAnimationController) block.
&gt; 
&gt; &gt; Source/WebCore/Modules/webvr/VRDisplay.cpp:118
&gt; &gt; +        // FIXME: Get the display id of the HMD as it should use the HMD native refresh rate.
&gt; &gt; +        PlatformDisplayID displayID = document-&gt;page() ? document-&gt;page()-&gt;chrome().displayID() : 0;
&gt; &gt; +        m_scriptedAnimationController = ScriptedAnimationController::create(*document, displayID);
&gt; 
&gt; Is this necessary at this point, for animation frame functionality? I would
&gt; just default to the 0 ID until it&apos;s possible to acquire the display ID from
&gt; the HMD device.

I think it does not hurt and we&apos;re going to need it really soon.

&gt; &gt; Source/WebCore/Modules/webvr/VRFrameData.cpp:91
&gt; &gt; +    return projectionMatrix;
&gt; 
&gt; You could use the 16-argument TransformationMatrix constructor here, and
&gt; pass all the values in the return statement.

Yeah, but the end result is really confusing IMHO. So unless you feel strongly about it I prefer to leave it as is.
 
&gt; &gt; Source/WebCore/Modules/webvr/VRFrameData.cpp:124
&gt; &gt; +    return matrix;
&gt; 
&gt; Same here. You could also alias normalizedQuaternion variable to something
&gt; shorter, e.g. `nq`, and then compute all the values on the fly.

I don&apos;t think it&apos;s a good idea to compute all the values on the fly because we precisely store some of them in variables in order to save some multiplications. That said, in this case I think we could use the 16-argument constructor here as variable names are short in this case.

&gt; &gt; Source/WebCore/Modules/webvr/VRFrameData.cpp:148
&gt; &gt; +    FloatPoint3D leftEyeOffset = leftEye.rawOffset();
&gt; &gt; +    m_leftViewMatrix = rotationMatrix;
&gt; &gt; +    applyHeadToEyeTransform(m_leftViewMatrix, leftEyeOffset);
&gt; 
&gt; Inline leftEye.rawOffset() into the applyHeadToEyeTransform() call.

ACK

&gt; &gt; Source/WebCore/Modules/webvr/VRFrameData.cpp:152
&gt; &gt; +    FloatPoint3D rightEyeOffset = rightEye.rawOffset();
&gt; &gt; +    m_rightViewMatrix = rotationMatrix;
&gt; &gt; +    applyHeadToEyeTransform(m_rightViewMatrix, rightEyeOffset);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/Modules/webvr/VRFrameData.h:28
&gt; &gt; +
&gt; 
&gt; Unnecessary whitespace.
&gt; 
&gt; &gt; Source/WebCore/Modules/webvr/VRPose.cpp:48
&gt; &gt; +    auto position = Float32Array::create(3);
&gt; &gt; +    float* positionData = position-&gt;data();
&gt; &gt; +    positionData[0] = m_trackingInfo.position-&gt;x();
&gt; &gt; +    positionData[1] = m_trackingInfo.position-&gt;y();
&gt; &gt; +    positionData[2] = m_trackingInfo.position-&gt;z();
&gt; &gt; +    return position.releaseNonNull();
&gt; 
&gt; To follow other Float32Array::create() calls, first construct
&gt; positionData[3] and then call `Float32Array::create(positionData,
&gt; 3).releaseNonNull();`.

OK, will do

&gt; &gt; Source/WebCore/Modules/webvr/VRPose.cpp:72
&gt; &gt; +    auto orientation = Float32Array::create(4);
&gt; &gt; +    float* orientationData = orientation-&gt;data();
&gt; &gt; +    orientationData[0] = m_trackingInfo.orientation-&gt;x;
&gt; &gt; +    orientationData[1] = m_trackingInfo.orientation-&gt;y;
&gt; &gt; +    orientationData[2] = m_trackingInfo.orientation-&gt;z;
&gt; &gt; +    orientationData[3] = m_trackingInfo.orientation-&gt;w;
&gt; &gt; +    return orientation.releaseNonNull();
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/Modules/webvr/VRPose.h:28
&gt; &gt; +
&gt; 
&gt; Unnecessary whitespace.
&gt; 
&gt; &gt; Source/WebCore/platform/vr/VRPlatformDisplay.h:157
&gt; &gt; +    double timestamp;
&gt; 
&gt; Default-initialize this to 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412842</commentid>
    <comment_count>11</comment_count>
      <attachid>337355</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-04-09 02:46:55 -0700</bug_when>
    <thetext>Comment on attachment 337355
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/webvr/VRFrameData.cpp:91
&gt;&gt;&gt; +    return projectionMatrix;
&gt;&gt; 
&gt;&gt; You could use the 16-argument TransformationMatrix constructor here, and pass all the values in the return statement.
&gt; 
&gt; Yeah, but the end result is really confusing IMHO. So unless you feel strongly about it I prefer to leave it as is.

I don&apos;t feel strongly about it.

&gt;&gt;&gt; Source/WebCore/Modules/webvr/VRFrameData.cpp:124
&gt;&gt;&gt; +    return matrix;
&gt;&gt; 
&gt;&gt; Same here. You could also alias normalizedQuaternion variable to something shorter, e.g. `nq`, and then compute all the values on the fly.
&gt; 
&gt; I don&apos;t think it&apos;s a good idea to compute all the values on the fly because we precisely store some of them in variables in order to save some multiplications. That said, in this case I think we could use the 16-argument constructor here as variable names are short in this case.

OK, makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412848</commentid>
    <comment_count>12</comment_count>
      <attachid>337490</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-09 04:03:48 -0700</bug_when>
    <thetext>Created attachment 337490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412853</commentid>
    <comment_count>13</comment_count>
      <attachid>337490</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-04-09 04:43:32 -0700</bug_when>
    <thetext>Comment on attachment 337490
Patch

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

&gt; Source/WebCore/Modules/webvr/VRFrameData.h:59
&gt; +    double m_timestamp;

This too should be default-initialized to 0.

&gt; Source/WebCore/Modules/webvr/VRPose.cpp:43
&gt; +    float positionData[3] = { m_trackingInfo.position-&gt;x(), m_trackingInfo.position-&gt;y(), m_trackingInfo.position-&gt;z() };

Nit: IMO it&apos;s cleaner to retrieve the reference of the m_trackingInfo.position object and then access x/y/z values through that:
```
    auto&amp; position = *m_trackingInfo.position;
    float positionData[3] = { position.x(), position.y(), position.z() };
```

&gt; Source/WebCore/Modules/webvr/VRPose.cpp:62
&gt; +    float orientationData[4] = { m_trackingInfo.orientation-&gt;x, m_trackingInfo.orientation-&gt;y, m_trackingInfo.orientation-&gt;z, m_trackingInfo.orientation-&gt;w };

Nit: similarly:
```
    auto&amp; orientation = *m_trackingInfo.orientation;
    float orientationData[4] = { orientation.x, orientation.y, orientation.z, orientation.w };
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412869</commentid>
    <comment_count>14</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-04-09 07:40:58 -0700</bug_when>
    <thetext>Committed r230428: &lt;https://trac.webkit.org/changeset/230428&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412870</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-09 07:41:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/39279853&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337078</attachid>
            <date>2018-04-03 07:44:08 -0700</date>
            <delta_ts>2018-04-05 02:26:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184265-20180403164406.patch</filename>
            <type>text/plain</type>
            <size>25313</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5ODkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZiZDVkNmZiM2IxMTQ0
ZGZjODMwNDBhZmQzNTZjM2EyZGQyZDJlMi4uZjUyMTI4ZDkyNmM0YzE1YzczNzJlNDZkOTZlNzU5
OGQ5NGM1ZDNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE4LTA0LTAzICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtPcGVuVlJd
W1dlYlZSXSBSZXRyaWV2ZSBGcmFtZURhdGEgaW4gV2ViVlIncyByQUYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZSRnJhbWVEYXRhIGNvbnRhaW5zIGFs
bCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgcmVuZGVyIGEgVlIgc2NlbmUg
bGlrZSB2aWV3CisgICAgICAgIGFuZCBwcm9qZWN0aW9uIG1hdHJpY2VzLCBwb3NlIGRhdGEgKHBv
c2l0aW9uICYgb3JpZW50YXRpb24pIGFuZCBsaW5lYXIgJiBhbmd1bGFyIHZlbG9jaXR5CisgICAg
ICAgIGFtb25nIG90aGVycy4gVGhlIGdldEZyYW1lRGF0YSgpIGNhbGwgbXVzdCBiZSBpc3N1ZWQg
aW5zaWRlIGEgV2ViVlIncyBvd24KKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VlJEaXNwbGF5OjpnZXRGcmFtZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJEaXNw
bGF5OjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6Y2FuY2VsQW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Lmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlZSRXllUGFyYW1ldGVyczo6cmF3T2Zmc2V0IGNvbnN0KTogUmVxdWlyZWQgdG8gY29tcHV0ZSB2
aWV3IG1hdHJpY2VzLgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWF0cml4VG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWUkZy
YW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VlJGcmFtZURhdGE6OmxlZnRWaWV3TWF0cml4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZS
RnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VlJGcmFtZURhdGE6OnJpZ2h0Vmlld01hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OnJv
dGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlIZWFk
VG9FeWVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VlJGcmFtZURhdGE6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnZyL1ZSUG9zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcHRpb25hbEZsb2F0M1RvSlNDQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpwb3NpdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpWUlBvc2U6OmxpbmVhclZlbG9jaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlZSUG9zZTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjph
bmd1bGFyVmVsb2NpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjphbmd1bGFy
QWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSUG9zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQ
b3NlOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpWUlBvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpW
UlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpRdWF0ZXJuaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb246OmNvbmp1Z2F0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6VlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6Rmxv
YXQzOjpGbG9hdDMpOiBKdXN0IGEgZ3JvdXAgb2YgMyBmbG9hdHMgdXNlZCB0byBzdG9yZQorICAg
ICAgICBib3RoIHZlbG9jaXR5IGFuZCBhY2NlbGVyYXRpb24gaW4gYSBmb3JtYXQgd2hpY2ggaXMg
dmVyeSBjb252ZW5pZW50IHRvIGxhdGVyIGdlbmVyYXRlIEpTQworICAgICAgICBhcnJheXMuCisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpjbGVhcik6CisgICAgICAg
ICogcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUik6CisgICAgICAgIChXZWJDb3JlOjpyb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZv
KToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIu
aDoKKwogMjAxOC0wMy0yMyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWIgQW5pbWF0aW9uc10gaW5maW5pdGUgcmVwZWF0IGNvdW50cyBhcmVuJ3QgcmVm
bGVjdGVkIGZvciBDU1MgQW5pbWF0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9W
UkRpc3BsYXkuY3BwCmluZGV4IDNmMGNjYzEwNmQxZTVkODllOTljZTY5Nzk5ZWIyZmQzMWMyNzIx
YTEuLmQ1MzcwNTMyNDRhMGIxZjU1YjhhMjk0ZjI3Yjc4YTdhNGMxNTBhZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAKQEAgLTI2LDggKzI2LDEyIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVlJEaXNwbGF5LmgiCiAKKyNpbmNsdWRlICJD
aHJvbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiVlJFeWVQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiVlJGcmFtZURhdGEuaCIKICNpbmNsdWRl
ICJWUkxheWVySW5pdC5oIgogI2luY2x1ZGUgIlZSUGxhdGZvcm1EaXNwbGF5LmgiCiAjaW5jbHVk
ZSAiVlJQb3NlLmgiCkBAIC04NSwyNyArODksNDcgQEAgY29uc3QgVlJFeWVQYXJhbWV0ZXJzJiBW
UkRpc3BsYXk6OmdldEV5ZVBhcmFtZXRlcnMoVlJFeWUgZXllKSBjb25zdAogICAgIHJldHVybiBl
eWUgPT0gVlJFeWU6OkxlZnQgPyAqbV9sZWZ0RXllUGFyYW1ldGVycyA6ICptX3JpZ2h0RXllUGFy
YW1ldGVyczsKIH0KIAotYm9vbCBWUkRpc3BsYXk6OmdldEZyYW1lRGF0YShWUkZyYW1lRGF0YSYp
IGNvbnN0Citib29sIFZSRGlzcGxheTo6Z2V0RnJhbWVEYXRhKFZSRnJhbWVEYXRhJiBmcmFtZURh
dGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jYXBhYmlsaXRpZXMt
Pmhhc1Bvc2l0aW9uKCkgfHwgIW1fY2FwYWJpbGl0aWVzLT5oYXNPcmllbnRhdGlvbigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogZW5zdXJlIHRoYXQgdGhpcyBpcyBv
bmx5IGNhbGxlZCBpbnNpZGUgV2ViVlIncyByQUYuCisgICAgZnJhbWVEYXRhLnVwZGF0ZShtX2Rp
c3BsYXktPmdldFRyYWNraW5nSW5mbygpLCBnZXRFeWVQYXJhbWV0ZXJzKFZSRXllOjpMZWZ0KSwg
Z2V0RXllUGFyYW1ldGVycyhWUkV5ZTo6UmlnaHQpLCBtX2RlcHRoTmVhciwgbV9kZXB0aEZhcik7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFJlZjxWUlBvc2U+IFZSRGlzcGxheTo6Z2V0UG9zZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFZSUG9zZTo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIFZSUG9z
ZTo6Y3JlYXRlKG1fZGlzcGxheS0+Z2V0VHJhY2tpbmdJbmZvKCkpOwogfQogCiB2b2lkIFZSRGlz
cGxheTo6cmVzZXRQb3NlKCkKIHsKIH0KIAotbG9uZyBWUkRpc3BsYXk6OnJlcXVlc3RBbmltYXRp
b25GcmFtZShSZWY8UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+JiYpCit1aW50MzJfdCBW
UkRpc3BsYXk6OnJlcXVlc3RBbmltYXRpb25GcmFtZShSZWY8UmVxdWVzdEFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgYXV0byogZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBp
ZiAoIW1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKSB7CisjaWYgVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICAgICAgLy8gRklYTUU6IEdldCB0aGUg
ZGlzcGxheSBpZCBvZiB0aGUgSE1EIGFzIGl0IHNob3VsZCB1c2UgdGhlIEhNRCBuYXRpdmUgcmVm
cmVzaCByYXRlLgorICAgICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQgPSBkb2N1bWVu
dC0+cGFnZSgpID8gZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuZGlzcGxheUlEKCkgOiAwOwor
ICAgICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IFNjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlcjo6Y3JlYXRlKCpkb2N1bWVudCwgZGlzcGxheUlEKTsKKyNlbHNlCisgICAgICAg
IG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUoKmRvY3VtZW50LCAwKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBt
X3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+cmVnaXN0ZXJDYWxsYmFjayhXVEZNb3ZlKGNh
bGxiYWNrKSk7CiB9CiAKLXZvaWQgVlJEaXNwbGF5OjpjYW5jZWxBbmltYXRpb25GcmFtZSh1bnNp
Z25lZCkKK3ZvaWQgVlJEaXNwbGF5OjpjYW5jZWxBbmltYXRpb25GcmFtZSh1aW50MzJfdCBpZCkK
IHsKKyAgICBpZiAoIW1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+Y2FuY2VsQ2FsbGJhY2so
aWQpOwogfQogCiB2b2lkIFZSRGlzcGxheTo6cmVxdWVzdFByZXNlbnQoY29uc3QgVmVjdG9yPFZS
TGF5ZXJJbml0PiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ2ci9WUkRpc3BsYXkuaAppbmRleCBhMjQyZTQ0YTFkZjAyZTI4NjdmMDQyZGY4NGVlMzVj
Y2EyMmRiNTk5Li4zNjQ3ZTZkMmEyMGJkOTAxZmQxMGQzOGEzZjUwZjY4NGUxYTkxMzU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmgKQEAgLTM0LDYgKzM0LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJh
Y2s7CitjbGFzcyBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBWUkRpc3BsYXlD
YXBhYmlsaXRpZXM7CiBjbGFzcyBWUkV5ZVBhcmFtZXRlcnM7CiBjbGFzcyBWUkZyYW1lRGF0YTsK
QEAgLTcyLDggKzczLDggQEAgcHVibGljOgogICAgIGRvdWJsZSBkZXB0aEZhcigpIGNvbnN0IHsg
cmV0dXJuIG1fZGVwdGhGYXI7IH0KICAgICB2b2lkIHNldERlcHRoRmFyKGRvdWJsZSBkZXB0aEZh
cikgeyBtX2RlcHRoRmFyID0gZGVwdGhGYXI7IH0KIAotICAgIGxvbmcgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJik7Ci0gICAgdm9pZCBj
YW5jZWxBbmltYXRpb25GcmFtZSh1bnNpZ25lZCk7CisgICAgdWludDMyX3QgcmVxdWVzdEFuaW1h
dGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJik7CisgICAgdm9p
ZCBjYW5jZWxBbmltYXRpb25GcmFtZSh1aW50MzJfdCk7CiAKICAgICB2b2lkIHJlcXVlc3RQcmVz
ZW50KGNvbnN0IFZlY3RvcjxWUkxheWVySW5pdD4mLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsK
ICAgICB2b2lkIGV4aXRQcmVzZW50KFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwpAQCAtMTExLDYg
KzExMiw4IEBAIHByaXZhdGU6CiAKICAgICBkb3VibGUgbV9kZXB0aE5lYXIgeyAwLjAxIH07IC8v
IERlZmF1bHQgdmFsdWUgZnJvbSB0aGUgc3BlY3MuCiAgICAgZG91YmxlIG1fZGVwdGhGYXIgeyAx
MDAwMCB9OyAvLyBEZWZhdWx0IHZhbHVlIGZyb20gdGhlIHNwZWNzLgorCisgICAgUmVmUHRyPFNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaAppbmRleCA2YTg5ZDg5ODIwYTA0MTQ0ODM1YjU0Yjc5
MDdhYzhkMjIzMGMyYmJjLi5mMzBkMGZiZDY1NGExZDFmMTg4YTFmNDM5ZDMwMzA4MGZjYTY0ODJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFyYW1ldGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJFeWVQYXJhbWV0ZXJzLmgK
QEAgLTQzLDYgKzQzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFJlZjxGbG9hdDMyQXJyYXk+
IG9mZnNldCgpIGNvbnN0OworICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcmF3T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KIAogICAgIGNvbnN0IFZSRmllbGRPZlZpZXcmIGZpZWxk
T2ZWaWV3KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
dnIvVlJGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1l
RGF0YS5jcHAKaW5kZXggNWI4NDliZjI5MGY5Y2Q4OTA1NmRlODY2ZGI5NGZkODY0MWIwNjI5OC4u
YjIxMTY5MTE2M2YxMzYxMjIwNzA1YmI1Y2EzYjExNDYyMDY3Yjk4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5jcHAKQEAgLTM0LDI5ICszNCwzMSBAQCBW
UkZyYW1lRGF0YTo6VlJGcmFtZURhdGEoKQogewogfQogCi1kb3VibGUgVlJGcmFtZURhdGE6OnRp
bWVzdGFtcCgpIGNvbnN0CitzdGF0aWMgUmVmPEZsb2F0MzJBcnJheT4gbWF0cml4VG9BcnJheShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQogewotICAgIHJldHVybiAwOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpGbG9hdE1hdHJpeDQgY29sdW1uTWFqb3JNYXRyaXg7Cisg
ICAgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KGNvbHVtbk1ham9yTWF0cml4KTsKKyAg
ICByZXR1cm4gRmxvYXQzMkFycmF5OjpjcmVhdGUoY29sdW1uTWFqb3JNYXRyaXgsIDE2KS5yZWxl
YXNlTm9uTnVsbCgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSRnJhbWVEYXRhOjpsZWZ0UHJvamVj
dGlvbk1hdHJpeCgpIGNvbnN0CitSZWY8RmxvYXQzMkFycmF5PiBWUkZyYW1lRGF0YTo6bGVmdFBy
b2plY3Rpb25NYXRyaXgoKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBtYXRyaXhUb0FycmF5KG1fbGVmdFByb2plY3Rpb25NYXRyaXgpOwogfQogCi1GbG9hdDMyQXJy
YXkqIFZSRnJhbWVEYXRhOjpsZWZ0Vmlld01hdHJpeCgpIGNvbnN0CitSZWY8RmxvYXQzMkFycmF5
PiBWUkZyYW1lRGF0YTo6bGVmdFZpZXdNYXRyaXgoKSBjb25zdAogewotICAgIHJldHVybiBudWxs
cHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5KG1fbGVmdFZpZXdNYXRyaXgpOwogfQogCi1G
bG9hdDMyQXJyYXkqIFZSRnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdAor
UmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6OnJpZ2h0UHJvamVjdGlvbk1hdHJpeCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1hdHJpeFRvQXJyYXkobV9y
aWdodFByb2plY3Rpb25NYXRyaXgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSRnJhbWVEYXRhOjpy
aWdodFZpZXdNYXRyaXgoKSBjb25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6OnJp
Z2h0Vmlld01hdHJpeCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IG1hdHJpeFRvQXJyYXkobV9yaWdodFZpZXdNYXRyaXgpOwogfQogCiBjb25zdCBWUlBvc2UmIFZS
RnJhbWVEYXRhOjpwb3NlKCkgY29uc3QKQEAgLTY0LDQgKzY2LDg4IEBAIGNvbnN0IFZSUG9zZSYg
VlJGcmFtZURhdGE6OnBvc2UoKSBjb25zdAogICAgIHJldHVybiBtX3Bvc2U7CiB9CiAKK3N0YXRp
YyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KGNv
bnN0IFZSRmllbGRPZlZpZXcmIGZvdiwgZG91YmxlIGRlcHRoTmVhciwgZG91YmxlIGRlcHRoRmFy
KQoreworICAgIGRvdWJsZSB1cFRhbiA9IHRhbihkZWcycmFkKGZvdi51cERlZ3JlZXMoKSkpOwor
ICAgIGRvdWJsZSBkb3duVGFuID0gdGFuKGRlZzJyYWQoZm92LmRvd25EZWdyZWVzKCkpKTsKKyAg
ICBkb3VibGUgbGVmdFRhbiA9IHRhbihkZWcycmFkKGZvdi5sZWZ0RGVncmVlcygpKSk7CisgICAg
ZG91YmxlIHJpZ2h0VGFuID0gdGFuKGRlZzJyYWQoZm92LnJpZ2h0RGVncmVlcygpKSk7CisKKyAg
ICBkb3VibGUgeFNjYWxlID0gMiAvIChsZWZ0VGFuICsgcmlnaHRUYW4pOworICAgIGRvdWJsZSB5
U2NhbGUgPSAyIC8gKHVwVGFuICsgZG93blRhbik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwcm9qZWN0aW9uTWF0cml4OworICAgIHByb2plY3Rpb25NYXRyaXguc2V0TTExKHhTY2FsZSk7
CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMjIoeVNjYWxlKTsKKyAgICBwcm9qZWN0aW9uTWF0
cml4LnNldE0zMigodXBUYW4gLSBkb3duVGFuKSAqIHlTY2FsZSAqIDAuNSk7CisgICAgcHJvamVj
dGlvbk1hdHJpeC5zZXRNMzEoLSgobGVmdFRhbiAtIHJpZ2h0VGFuKSAqIHhTY2FsZSAqIDAuNSkp
OworICAgIHByb2plY3Rpb25NYXRyaXguc2V0TTMzKChkZXB0aE5lYXIgKyBkZXB0aEZhcikgLyAo
ZGVwdGhOZWFyIC0gZGVwdGhGYXIpKTsKKyAgICBwcm9qZWN0aW9uTWF0cml4LnNldE0zNCgtMSk7
CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNNDMoKDIgKiBkZXB0aEZhciAqIGRlcHRoTmVhcikg
LyAoZGVwdGhOZWFyIC0gZGVwdGhGYXIpKTsKKyAgICBwcm9qZWN0aW9uTWF0cml4LnNldE00NCgw
KTsKKworICAgIHJldHVybiBwcm9qZWN0aW9uTWF0cml4OworfQorCisvLyBodHRwOi8vd3d3LmV1
Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvcXVh
dGVybmlvblRvTWF0cml4L2luZGV4Lmh0bQorc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJv
dGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24oY29uc3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6
UXVhdGVybmlvbiYgcXVhdGVybmlvbikKK3sKKyAgICBkb3VibGUgbWFnbml0dWRlID0gKHF1YXRl
cm5pb24ueCAqIHF1YXRlcm5pb24ueCkgKyAocXVhdGVybmlvbi55ICogcXVhdGVybmlvbi55KSAr
IChxdWF0ZXJuaW9uLnogKiBxdWF0ZXJuaW9uLnopICsgKHF1YXRlcm5pb24udyAqIHF1YXRlcm5p
b24udyk7CisgICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6UXVhdGVybmlvbiBub3JtYWxpemVk
UXVhdGVybmlvbihxdWF0ZXJuaW9uLnggLyBtYWduaXR1ZGUsIHF1YXRlcm5pb24ueSAvIG1hZ25p
dHVkZSwgcXVhdGVybmlvbi56IC8gbWFnbml0dWRlLCBxdWF0ZXJuaW9uLncgLyBtYWduaXR1ZGUp
OworICAgIGRvdWJsZSB4MiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnggKiBub3JtYWxpemVkUXVh
dGVybmlvbi54OworICAgIGRvdWJsZSB5MiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnkgKiBub3Jt
YWxpemVkUXVhdGVybmlvbi55OworICAgIGRvdWJsZSB6MiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9u
LnogKiBub3JtYWxpemVkUXVhdGVybmlvbi56OworICAgIGRvdWJsZSB3MiA9IG5vcm1hbGl6ZWRR
dWF0ZXJuaW9uLncgKiBub3JtYWxpemVkUXVhdGVybmlvbi53OworCisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC5zZXRNMTEoeDIgLSB5MiAtIHoyICsgdzIpOwor
ICAgIG1hdHJpeC5zZXRNMjIoLXgyICsgeTIgLSB6MiArIHcyKTsKKyAgICBtYXRyaXguc2V0TTMz
KC14MiAtIHkyICsgejIgKyB3Mik7CisKKyAgICBkb3VibGUgeHkgPSBub3JtYWxpemVkUXVhdGVy
bmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24ueTsKKyAgICBkb3VibGUgencgPSBub3JtYWxp
emVkUXVhdGVybmlvbi56ICogbm9ybWFsaXplZFF1YXRlcm5pb24udzsKKyAgICBtYXRyaXguc2V0
TTIxKDIuMCAqICh4eSArIHp3KSk7CisgICAgbWF0cml4LnNldE0xMigyLjAgKiAoeHkgLSB6dykp
OworCisgICAgZG91YmxlIHh6ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueCAqIG5vcm1hbGl6ZWRR
dWF0ZXJuaW9uLno7CisgICAgZG91YmxlIHl3ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueSAqIG5v
cm1hbGl6ZWRRdWF0ZXJuaW9uLnc7CisgICAgbWF0cml4LnNldE0zMSgyLjAgKiAoeHogLSB5dykp
OworICAgIG1hdHJpeC5zZXRNMTMoMi4wICogKHh6ICsgeXcpKTsKKworICAgIGRvdWJsZSB5eiA9
IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnkgKiBub3JtYWxpemVkUXVhdGVybmlvbi56OworICAgIGRv
dWJsZSB4dyA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnggKiBub3JtYWxpemVkUXVhdGVybmlvbi53
OworICAgIG1hdHJpeC5zZXRNMzIoMi4wICogKHl6ICsgeHcpKTsKKyAgICBtYXRyaXguc2V0TTIz
KDIuMCAqICh5eiAtIHh3KSk7CisKKyAgICByZXR1cm4gbWF0cml4OworfQorCitzdGF0aWMgdm9p
ZCBhcHBseUhlYWRUb0V5ZVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBj
b25zdCBGbG9hdFBvaW50M0QmIHRyYW5zbGF0aW9uKQoreworICAgIG1hdHJpeC5zZXRNNDEobWF0
cml4Lm00MSgpIC0gdHJhbnNsYXRpb24ueCgpKTsKKyAgICBtYXRyaXguc2V0TTQyKG1hdHJpeC5t
NDIoKSAtIHRyYW5zbGF0aW9uLnkoKSk7CisgICAgbWF0cml4LnNldE00MyhtYXRyaXgubTQzKCkg
LSB0cmFuc2xhdGlvbi56KCkpOworfQorCit2b2lkIFZSRnJhbWVEYXRhOjp1cGRhdGUoY29uc3Qg
VlJQbGF0Zm9ybVRyYWNraW5nSW5mbyYgdHJhY2tpbmdJbmZvLCBjb25zdCBWUkV5ZVBhcmFtZXRl
cnMmIGxlZnRFeWUsIGNvbnN0IFZSRXllUGFyYW1ldGVycyYgcmlnaHRFeWUsIGRvdWJsZSBkZXB0
aE5lYXIsIGRvdWJsZSBkZXB0aEZhcikKK3sKKyAgICBtX2xlZnRQcm9qZWN0aW9uTWF0cml4ID0g
cHJvamVjdGlvbk1hdHJpeEZyb21GaWVsZE9mVmlldyhsZWZ0RXllLmZpZWxkT2ZWaWV3KCksIGRl
cHRoTmVhciwgZGVwdGhGYXIpOworICAgIG1fcmlnaHRQcm9qZWN0aW9uTWF0cml4ID0gcHJvamVj
dGlvbk1hdHJpeEZyb21GaWVsZE9mVmlldyhyaWdodEV5ZS5maWVsZE9mVmlldygpLCBkZXB0aE5l
YXIsIGRlcHRoRmFyKTsKKworICAgIG1fdGltZXN0YW1wID0gdHJhY2tpbmdJbmZvLnRpbWVzdGFt
cDsKKyAgICBtX3Bvc2UtPnVwZGF0ZSh0cmFja2luZ0luZm8pOworCisgICAgYXV0byByb3RhdGlv
bk1hdHJpeCA9IHJvdGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24odHJhY2tpbmdJbmZvLm9yaWVu
dGF0aW9uLnZhbHVlX29yKFZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24oMCwgMCwg
MCwgMSkpKTsKKyAgICBGbG9hdFBvaW50M0QgcG9zaXRpb24gPSB0cmFja2luZ0luZm8ucG9zaXRp
b24udmFsdWVfb3IoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKKyAgICByb3RhdGlvbk1hdHJpeC50
cmFuc2xhdGUzZCgtcG9zaXRpb24ueCgpLCAtcG9zaXRpb24ueSgpLCAtcG9zaXRpb24ueigpKTsK
KworICAgIEZsb2F0UG9pbnQzRCBsZWZ0RXllT2Zmc2V0ID0gbGVmdEV5ZS5yYXdPZmZzZXQoKTsK
KyAgICBtX2xlZnRWaWV3TWF0cml4ID0gcm90YXRpb25NYXRyaXg7CisgICAgYXBwbHlIZWFkVG9F
eWVUcmFuc2Zvcm0obV9sZWZ0Vmlld01hdHJpeCwgbGVmdEV5ZU9mZnNldCk7CisKKyAgICBGbG9h
dFBvaW50M0QgcmlnaHRFeWVPZmZzZXQgPSByaWdodEV5ZS5yYXdPZmZzZXQoKTsKKyAgICBtX3Jp
Z2h0Vmlld01hdHJpeCA9IHJvdGF0aW9uTWF0cml4OworICAgIGFwcGx5SGVhZFRvRXllVHJhbnNm
b3JtKG1fcmlnaHRWaWV3TWF0cml4LCByaWdodEV5ZU9mZnNldCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJG
cmFtZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuaApp
bmRleCA3MDNkNmJjMGYyNzAwN2U4N2I2NzNlYWEwMjU3MzFlYjA2NTJiMjU3Li40YjVjMjM3NmU3
MzE0ZWVmZGJjMGMwNjQ0YWFkZWY2OGEyZjRiMzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ2ci9WUkZyYW1lRGF0YS5oCkBAIC0zOCwyMCArMzgsMjcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWUkZyYW1lRGF0YSk7CiAgICAgfQogCi0gICAgZG91Ymxl
IHRpbWVzdGFtcCgpIGNvbnN0OworICAgIGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVy
biBtX3RpbWVzdGFtcDsgfQogCi0gICAgRmxvYXQzMkFycmF5KiBsZWZ0UHJvamVjdGlvbk1hdHJp
eCgpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSogbGVmdFZpZXdNYXRyaXgoKSBjb25zdDsKKyAg
ICBSZWY8RmxvYXQzMkFycmF5PiBsZWZ0UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0OworICAgIFJl
ZjxGbG9hdDMyQXJyYXk+IGxlZnRWaWV3TWF0cml4KCkgY29uc3Q7CiAKLSAgICBGbG9hdDMyQXJy
YXkqIHJpZ2h0UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSogcmln
aHRWaWV3TWF0cml4KCkgY29uc3Q7CisgICAgUmVmPEZsb2F0MzJBcnJheT4gcmlnaHRQcm9qZWN0
aW9uTWF0cml4KCkgY29uc3Q7CisgICAgUmVmPEZsb2F0MzJBcnJheT4gcmlnaHRWaWV3TWF0cml4
KCkgY29uc3Q7CiAKICAgICBjb25zdCBWUlBvc2UmIHBvc2UoKSBjb25zdDsKIAorICAgIHZvaWQg
dXBkYXRlKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm8mLCBjb25zdCBWUkV5ZVBhcmFtZXRl
cnMmIGxlZnRFeWUsIGNvbnN0IFZSRXllUGFyYW1ldGVycyYgcmlnaHRFeWUsIGRvdWJsZSBkZXB0
aE5lYXIsIGRvdWJsZSBkZXB0aEZhcik7CisKIHByaXZhdGU6CiAgICAgVlJGcmFtZURhdGEoKTsK
IAorICAgIGRvdWJsZSBtX3RpbWVzdGFtcDsKICAgICBSZWY8VlJQb3NlPiBtX3Bvc2U7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9sZWZ0UHJvamVjdGlvbk1hdHJpeDsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX3JpZ2h0UHJvamVjdGlvbk1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtX2xlZnRWaWV3TWF0cml4OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmln
aHRWaWV3TWF0cml4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9WUlBvc2UuY3BwCmluZGV4IDNkYzE1ZWRmNTViYjM3ZDU1YWRlMzk3YjZk
NjUzMDZkMWZkN2I4ODkuLjQ0NjllZDE3YTcyN2M4MjRmMjNlMzEzMjAzN2Q1ZTUyMWMyNTJlNGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5jcHAKQEAgLTI3LDM2ICsyNyw2
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZSUG9zZTo6VlJQb3NlKCkgPSBkZWZhdWx0
Oworc3RhdGljIFJlZlB0cjxGbG9hdDMyQXJyYXk+IG9wdGlvbmFsRmxvYXQzVG9KU0NBcnJheShj
b25zdCBzdGQ6Om9wdGlvbmFsPFZSUGxhdGZvcm1UcmFja2luZ0luZm86OkZsb2F0Mz4mIGRhdGEp
Cit7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBGbG9hdDMyQXJyYXk6OmNyZWF0ZShkYXRhLT5kYXRhLCAzKS5yZWxlYXNlTm9uTnVsbCgpOwor
fQogCi1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6cG9zaXRpb24oKSBjb25zdAorUmVmUHRyPEZsb2F0
MzJBcnJheT4gVlJQb3NlOjpwb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKCFtX3RyYWNraW5nSW5mby5wb3NpdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIHBvc2l0aW9uID0gRmxvYXQzMkFycmF5OjpjcmVhdGUoMyk7CisgICAg
ZmxvYXQqIHBvc2l0aW9uRGF0YSA9IHBvc2l0aW9uLT5kYXRhKCk7CisgICAgcG9zaXRpb25EYXRh
WzBdID0gbV90cmFja2luZ0luZm8ucG9zaXRpb24tPngoKTsKKyAgICBwb3NpdGlvbkRhdGFbMV0g
PSBtX3RyYWNraW5nSW5mby5wb3NpdGlvbi0+eSgpOworICAgIHBvc2l0aW9uRGF0YVsyXSA9IG1f
dHJhY2tpbmdJbmZvLnBvc2l0aW9uLT56KCk7CisgICAgcmV0dXJuIHBvc2l0aW9uLnJlbGVhc2VO
b25OdWxsKCk7CiB9CiAKLUZsb2F0MzJBcnJheSogVlJQb3NlOjpsaW5lYXJWZWxvY2l0eSgpIGNv
bnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OmxpbmVhclZlbG9jaXR5KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gb3B0aW9uYWxGbG9hdDNUb0pTQ0Fy
cmF5KG1fdHJhY2tpbmdJbmZvLmxpbmVhclZlbG9jaXR5KTsKIH0KIAotRmxvYXQzMkFycmF5KiBW
UlBvc2U6OmxpbmVhckFjY2VsZXJhdGlvbigpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBW
UlBvc2U6OmxpbmVhckFjY2VsZXJhdGlvbigpIGNvbnN0CiB7CisjaWYgKFVTRV9PUEVOVlIpCisg
ICAgLy8gTm90IHN1cHBvcnRlZC4KICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisgICAgcmV0
dXJuIG9wdGlvbmFsRmxvYXQzVG9KU0NBcnJheShtX3RyYWNraW5nSW5mby5saW5lYXJBY2NlbGVy
YXRpb24pOworI2VuZGlmCiB9CiAKLUZsb2F0MzJBcnJheSogVlJQb3NlOjpvcmllbnRhdGlvbigp
IGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6Om9yaWVudGF0aW9uKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fdHJhY2tpbmdJbmZvLm9yaWVudGF0
aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gb3JpZW50YXRpb24gPSBG
bG9hdDMyQXJyYXk6OmNyZWF0ZSg0KTsKKyAgICBmbG9hdCogb3JpZW50YXRpb25EYXRhID0gb3Jp
ZW50YXRpb24tPmRhdGEoKTsKKyAgICBvcmllbnRhdGlvbkRhdGFbMF0gPSBtX3RyYWNraW5nSW5m
by5vcmllbnRhdGlvbi0+eDsKKyAgICBvcmllbnRhdGlvbkRhdGFbMV0gPSBtX3RyYWNraW5nSW5m
by5vcmllbnRhdGlvbi0+eTsKKyAgICBvcmllbnRhdGlvbkRhdGFbMl0gPSBtX3RyYWNraW5nSW5m
by5vcmllbnRhdGlvbi0+ejsKKyAgICBvcmllbnRhdGlvbkRhdGFbM10gPSBtX3RyYWNraW5nSW5m
by5vcmllbnRhdGlvbi0+dzsKKyAgICByZXR1cm4gb3JpZW50YXRpb24ucmVsZWFzZU5vbk51bGwo
KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6OmFuZ3VsYXJWZWxvY2l0eSgpIGNvbnN0CitS
ZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OmFuZ3VsYXJWZWxvY2l0eSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG9wdGlvbmFsRmxvYXQzVG9KU0NBcnJheSht
X3RyYWNraW5nSW5mby5hbmd1bGFyVmVsb2NpdHkpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSUG9z
ZTo6YW5ndWxhckFjY2VsZXJhdGlvbigpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBv
c2U6OmFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25zdAogeworI2lmIChVU0VfT1BFTlZSKQorICAg
IC8vIE5vdCBzdXBwb3J0ZWQuCiAgICAgcmV0dXJuIG51bGxwdHI7CisjZWxzZQorICAgIHJldHVy
biBvcHRpb25hbEZsb2F0M1RvSlNDQXJyYXkobV90cmFja2luZ0luZm8uYW5ndWxhckFjY2VsZXJh
dGlvbik7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2VidnIvVlJQb3NlLmgKaW5kZXggMmVmMGFlM2M2MDc3ZGEwMjcyZGM1MzE0ZmQ4MGNj
MWEzMGU3NzU0Mi4uNzkzMzlhNzY2ZDExY2E4ZGZmZGI5NDA0YzhjMDcxMGU0N2NkMzFiNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5oCkBAIC0zNiwxNiArMzYsMzAgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWUlBvc2UpOwogICAgIH0KIAotICAg
IEZsb2F0MzJBcnJheSogcG9zaXRpb24oKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGxpbmVh
clZlbG9jaXR5KCkgY29uc3Q7Ci0gICAgRmxvYXQzMkFycmF5KiBsaW5lYXJBY2NlbGVyYXRpb24o
KSBjb25zdDsKKyAgICBzdGF0aWMgUmVmPFZSUG9zZT4gY3JlYXRlKGNvbnN0IFZSUGxhdGZvcm1U
cmFja2luZ0luZm8mIHRyYWNraW5nSW5mbykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFZSUG9zZSh0cmFja2luZ0luZm8pKTsKKyAgICB9CisKKyAgICBSZWZQdHI8RmxvYXQz
MkFycmF5PiBwb3NpdGlvbigpIGNvbnN0OworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IGxpbmVh
clZlbG9jaXR5KCkgY29uc3Q7CisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gbGluZWFyQWNjZWxl
cmF0aW9uKCkgY29uc3Q7CisKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBvcmllbnRhdGlvbigp
IGNvbnN0OworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IGFuZ3VsYXJWZWxvY2l0eSgpIGNvbnN0
OworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IGFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25zdDsK
IAotICAgIEZsb2F0MzJBcnJheSogb3JpZW50YXRpb24oKSBjb25zdDsKLSAgICBGbG9hdDMyQXJy
YXkqIGFuZ3VsYXJWZWxvY2l0eSgpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSogYW5ndWxhckFj
Y2VsZXJhdGlvbigpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlKGNvbnN0IFZSUGxhdGZvcm1UcmFj
a2luZ0luZm8mIHRyYWNraW5nSW5mbykgeyBtX3RyYWNraW5nSW5mbyA9IHRyYWNraW5nSW5mbzsg
fTsKIAogcHJpdmF0ZToKLSAgICBWUlBvc2UoKTsKKyAgICBWUlBvc2UoKSA9IGRlZmF1bHQ7CisK
KyAgICBWUlBvc2UoY29uc3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyYgdHJhY2tpbmdJbmZvKQor
ICAgICAgICA6IG1fdHJhY2tpbmdJbmZvKHRyYWNraW5nSW5mbykKKyAgICB7CisgICAgfQorCisg
ICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBtX3RyYWNraW5nSW5mbzsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZS
UGxhdGZvcm1EaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3Jt
RGlzcGxheS5oCmluZGV4IDc2ZDJhYzY2ZjMzYzA3OGVjOTkxZGFhYWI0MjM2NmNlOTM2ZmYyN2Eu
LmI0NmY1NzY0YTQ0MmRmZTgxZDU5NjMxYTI2MTdjNzJiNzA5MjNkNDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaApAQCAtMTAzLDkgKzEwMyw2
NCBAQCBwcml2YXRlOgogICAgIHN0ZDo6b3B0aW9uYWw8VHJhbnNmb3JtYXRpb25NYXRyaXg+IG1f
c2l0dGluZ1RvU3RhbmRpbmdUcmFuc2Zvcm07CiB9OwogCitzdHJ1Y3QgVlJQbGF0Zm9ybVRyYWNr
aW5nSW5mbyB7CisgICAgc3RydWN0IFF1YXRlcm5pb24geworICAgICAgICBRdWF0ZXJuaW9uKCkK
KyAgICAgICAgICAgIDogeCgwKSwgeSgwKSwgeigwKSwgdygxKSB7IH0KKworICAgICAgICBRdWF0
ZXJuaW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpCisgICAgICAgICAgICA6
IHgoeCksIHkoeSksIHooeiksIHcodykgeyB9CisKKyAgICAgICAgUXVhdGVybmlvbiYgY29uanVn
YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgeCAqPSAtMTsKKyAgICAgICAgICAgIHkgKj0g
LTE7CisgICAgICAgICAgICB6ICo9IC0xOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAg
ICAgICB9CisKKyAgICAgICAgUXVhdGVybmlvbiYgb3BlcmF0b3IqKGZsb2F0IGZhY3RvcikKKyAg
ICAgICAgeworICAgICAgICAgICAgeCAqPSBmYWN0b3I7CisgICAgICAgICAgICB5ICo9IGZhY3Rv
cjsKKyAgICAgICAgICAgIHogKj0gZmFjdG9yOworICAgICAgICAgICAgdyAqPSBmYWN0b3I7Cisg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgeCwgeSwg
eiwgdzsKKyAgICB9OworCisgICAgc3RydWN0IEZsb2F0MyB7CisgICAgICAgIEZsb2F0MyhmbG9h
dCBhLCBmbG9hdCBiLCBmbG9hdCBjKQorICAgICAgICAgICAgOiBkYXRhIHsgYSwgYiwgYyB9IHsg
fQorCisgICAgICAgIGZsb2F0IGRhdGFbM107CisgICAgfTsKKworICAgIHZvaWQgY2xlYXIoKQor
ICAgIHsKKyAgICAgICAgdGltZXN0YW1wID0gMDsKKyAgICAgICAgcG9zaXRpb24gPSBzdGQ6Om51
bGxvcHQ7CisgICAgICAgIG9yaWVudGF0aW9uID0gc3RkOjpudWxsb3B0OworICAgICAgICBhbmd1
bGFyQWNjZWxlcmF0aW9uID0gc3RkOjpudWxsb3B0OworICAgICAgICBhbmd1bGFyVmVsb2NpdHkg
PSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGxpbmVhckFjY2VsZXJhdGlvbiA9IHN0ZDo6bnVsbG9w
dDsKKyAgICAgICAgbGluZWFyVmVsb2NpdHkgPSBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAg
c3RkOjpvcHRpb25hbDxRdWF0ZXJuaW9uPiBvcmllbnRhdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UG9pbnQzRD4gcG9zaXRpb247CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdDM+IGFuZ3Vs
YXJBY2NlbGVyYXRpb247CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdDM+IGFuZ3VsYXJWZWxvY2l0
eTsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0Mz4gbGluZWFyQWNjZWxlcmF0aW9uOworICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXQzPiBsaW5lYXJWZWxvY2l0eTsKKyAgICBkb3VibGUgdGltZXN0YW1w
OworfTsKKwogY2xhc3MgVlJQbGF0Zm9ybURpc3BsYXkgewogcHVibGljOgogICAgIHZpcnR1YWwg
VlJQbGF0Zm9ybURpc3BsYXlJbmZvIGdldERpc3BsYXlJbmZvKCkgPSAwOworICAgIHZpcnR1YWwg
VlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBnZXRUcmFja2luZ0luZm8oKSA9IDA7CiAgICAgdmlydHVh
bCB+VlJQbGF0Zm9ybURpc3BsYXkoKSA9IGRlZmF1bHQ7CiAKICAgICBXZWFrUHRyPFZSUGxhdGZv
cm1EaXNwbGF5PiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVh
dGVXZWFrUHRyKCp0aGlzKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAKaW5kZXggNDM5ZjE4
NThjNjQ3OWU4MWQyOGJhYjQ3YzE4ZDUzZDFlMzc0NTdiYy4uZmFkYjZmYzEzNzM2MjA3MTU2OTA3
NzI0YzBkOGNlODdkYzZkNWIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3BwCkBAIC01MCw2
ICs1MCw4IEBAIFZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5W
Uih2cjo6SVZSU3lzdGVtKiBzeXN0ZW0sIHZyOjpJVlJDCiAgICAgLy8gRklYTUU6IFdlJ3JlIGFz
c3VtaW5nIGFuIEhUQyBWaXZlIEhNRCBoZXJlLiBHZXQgdGhpcyBpbmZvIGZyb20gT3BlblZSPy4K
ICAgICBtX2Rpc3BsYXlJbmZvLnNldENhcGFiaWxpdHlGbGFncyhWUkRpc3BsYXlDYXBhYmlsaXR5
RmxhZzo6Tm9uZSB8IFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnOjpQb3NpdGlvbiB8IFZSRGlzcGxh
eUNhcGFiaWxpdHlGbGFnOjpPcmllbnRhdGlvbiB8IFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnOjpF
eHRlcm5hbERpc3BsYXkgfCBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZzo6UHJlc2VudCk7CiAKKyAg
ICBtX2NvbXBvc2l0b3ItPlNldFRyYWNraW5nU3BhY2UodnI6OlRyYWNraW5nVW5pdmVyc2VTZWF0
ZWQpOworCiAgICAgdXBkYXRlRXllUGFyYW1ldGVycygpOwogICAgIHVwZGF0ZVN0YWdlUGFyYW1l
dGVycygpOwogfQpAQCAtOTksNiArMTAxLDYzIEBAIHZvaWQgVlJQbGF0Zm9ybURpc3BsYXlPcGVu
VlI6OnVwZGF0ZVN0YWdlUGFyYW1ldGVycygpCiAgICAgbV9kaXNwbGF5SW5mby5zZXRQbGF5QXJl
YUJvdW5kcyhGbG9hdFNpemUocGxheUFyZWFXaWR0aCwgcGxheUFyZWFEZXB0aCkpOwogfQogCisv
LyBGSVhNRTogd2UgbWlnaHQgd2FudCB0byBnZW5lcmFsaXplIHRoaXMgZnVuY3Rpb24gZm9yIG90
aGVyIGJhY2tlbmRzLgorc3RhdGljIFZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24g
cm90YXRpb25NYXRyaXhUb1F1YXRlcm5pb24oY29uc3QgZmxvYXQgKCZtYXRyaXgpWzNdWzRdKQor
eworICAgIC8vIFNlZSBodHRwczovL2QzY3czZGQydzMyeDJiLmNsb3VkZnJvbnQubmV0L3dwLWNv
bnRlbnQvdXBsb2Fkcy8yMDE1LzAxL21hdHJpeC10by1xdWF0LnBkZi4KKyAgICBWUlBsYXRmb3Jt
VHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uIHF1YXRlcm5pb247CisgICAgZmxvYXQgdHJhY2U7Cisg
ICAgaWYgKG1hdHJpeFsyXVsyXSA8IDApIHsKKyAgICAgICAgaWYgKG1hdHJpeFswXVswXSA+IG1h
dHJpeFsxXVsxXSkgeworICAgICAgICAgICAgdHJhY2UgPSAxICsgbWF0cml4WzBdWzBdIC0gbWF0
cml4WzFdWzFdIC0gbWF0cml4WzJdWzJdOworICAgICAgICAgICAgcXVhdGVybmlvbiA9IHsgdHJh
Y2UsIG1hdHJpeFswXVsxXSttYXRyaXhbMV1bMF0sIG1hdHJpeFsyXVswXSttYXRyaXhbMF1bMl0s
IG1hdHJpeFsxXVsyXSAtIG1hdHJpeFsyXVsxXSB9OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdHJhY2UgPSAxIC0gbWF0cml4WzBdWzBdICsgbWF0cml4WzFdWzFdIC0gbWF0cml4WzJd
WzJdOworICAgICAgICAgICAgcXVhdGVybmlvbiA9IHsgbWF0cml4WzBdWzFdK21hdHJpeFsxXVsw
XSwgdHJhY2UsIG1hdHJpeFsxXVsyXSttYXRyaXhbMl1bMV0sIG1hdHJpeFsyXVswXSAtIG1hdHJp
eFswXVsyXSB9OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1hdHJpeFsw
XVswXSA8IC1tYXRyaXhbMV1bMV0pIHsKKyAgICAgICAgICAgIHRyYWNlID0gMSAtIG1hdHJpeFsw
XVswXSAtIG1hdHJpeFsxXVsxXSArIG1hdHJpeFsyXVsyXTsKKyAgICAgICAgICAgIHF1YXRlcm5p
b24gPSB7IG1hdHJpeFsyXVswXSttYXRyaXhbMF1bMl0sIG1hdHJpeFsxXVsyXSttYXRyaXhbMl1b
MV0sIHRyYWNlICwgbWF0cml4WzBdWzFdIC0gbWF0cml4WzFdWzBdIH07CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB0cmFjZSA9IDEgKyBtYXRyaXhbMF1bMF0gKyBtYXRyaXhbMV1bMV0g
KyBtYXRyaXhbMl1bMl07CisgICAgICAgICAgICBxdWF0ZXJuaW9uID0geyBtYXRyaXhbMV1bMl0g
LSBtYXRyaXhbMl1bMV0sIG1hdHJpeFsyXVswXSAtIG1hdHJpeFswXVsyXSwgbWF0cml4WzBdWzFd
IC0gbWF0cml4WzFdWzBdLCB0cmFjZSB9OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBx
dWF0ZXJuaW9uICogKDAuNSAvIHNxcnQodHJhY2UpKTsKK30KKworVlJQbGF0Zm9ybVRyYWNraW5n
SW5mbyBWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZvKCkKK3sKKyAgICB2
cjo6VHJhY2tlZERldmljZVBvc2VfdCBwb3Nlc1t2cjo6a191bk1heFRyYWNrZWREZXZpY2VDb3Vu
dF07CisKKyAgICBtX2NvbXBvc2l0b3ItPldhaXRHZXRQb3NlcyhudWxscHRyLCAwLCBwb3Nlcywg
dnI6OmtfdW5NYXhUcmFja2VkRGV2aWNlQ291bnQpOworCisgICAgbV90cmFja2luZ0luZm8uY2xl
YXIoKTsKKworICAgIHZyOjpDb21wb3NpdG9yX0ZyYW1lVGltaW5nIHRpbWluZzsKKyAgICB0aW1p
bmcubV9uU2l6ZSA9IHNpemVvZih2cjo6Q29tcG9zaXRvcl9GcmFtZVRpbWluZyk7CisgICAgbV9j
b21wb3NpdG9yLT5HZXRGcmFtZVRpbWluZygmdGltaW5nKTsKKyAgICBtX3RyYWNraW5nSW5mby50
aW1lc3RhbXAgPSB0aW1pbmcubV9mbFN5c3RlbVRpbWVJblNlY29uZHM7CisKKyAgICBpZiAoIXBv
c2VzW3ZyOjprX3VuVHJhY2tlZERldmljZUluZGV4X0htZF0uYkRldmljZUlzQ29ubmVjdGVkCisg
ICAgICAgIHx8ICFwb3Nlc1t2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWRdLmJQb3NlSXNW
YWxpZAorICAgICAgICB8fCBwb3Nlc1t2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWRdLmVU
cmFja2luZ1Jlc3VsdCAhPSB2cjo6VHJhY2tpbmdSZXN1bHRfUnVubmluZ19PSykgeworICAgICAg
ICAvLyBGSVhNRTogSW5pdCBzb21lIGRhdGEgbWF5YmU/Pz8uCisgICAgICAgIHJldHVybiBtX3Ry
YWNraW5nSW5mbzsKKyAgICB9CisKKyAgICBjb25zdCBhdXRvJiBITURQb3NlID0gcG9zZXNbdnI6
OmtfdW5UcmFja2VkRGV2aWNlSW5kZXhfSG1kXTsKKyAgICBjb25zdCBhdXRvJiB0cmFuc2Zvcm0g
PSBITURQb3NlLm1EZXZpY2VUb0Fic29sdXRlVHJhY2tpbmc7CisgICAgbV90cmFja2luZ0luZm8u
b3JpZW50YXRpb24gPSByb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbih0cmFuc2Zvcm0ubSk7Cisg
ICAgbV90cmFja2luZ0luZm8ub3JpZW50YXRpb24tPmNvbmp1Z2F0ZSgpOworICAgIG1fdHJhY2tp
bmdJbmZvLnBvc2l0aW9uID0gRmxvYXRQb2ludDNEKHRyYW5zZm9ybS5tWzBdWzNdLCB0cmFuc2Zv
cm0ubVsxXVszXSwgdHJhbnNmb3JtLm1bMl1bM10pOworICAgIG1fdHJhY2tpbmdJbmZvLmFuZ3Vs
YXJWZWxvY2l0eSA9IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OkZsb2F0MyhITURQb3NlLnZBbmd1
bGFyVmVsb2NpdHkudlswXSwgSE1EUG9zZS52QW5ndWxhclZlbG9jaXR5LnZbMV0sIEhNRFBvc2Uu
dkFuZ3VsYXJWZWxvY2l0eS52WzJdKTsKKyAgICBtX3RyYWNraW5nSW5mby5saW5lYXJWZWxvY2l0
eSA9IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OkZsb2F0MyhITURQb3NlLnZWZWxvY2l0eS52WzBd
LCBITURQb3NlLnZWZWxvY2l0eS52WzFdLCBITURQb3NlLnZWZWxvY2l0eS52WzJdKTsKKworICAg
IHJldHVybiBtX3RyYWNraW5nSW5mbzsKK30KKwogfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIFVTRShPUEVOVlIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oCmluZGV4IDBiOTMzZjMy
NGZlNTc5YTI4MDJmZDY0YWNlNTBkNTMxYzEzOWYzZDQuLjNhYmUzZGFjMDc5ZTFkOTBjYWEwYTg1
ZTE1YjJkZDY1ZWMzYjNhMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Zy
L29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oCkBAIC0zNCw2ICszNCw3
IEBAIHB1YmxpYzoKIAogICAgIH5WUlBsYXRmb3JtRGlzcGxheU9wZW5WUigpID0gZGVmYXVsdDsK
ICAgICBWUlBsYXRmb3JtRGlzcGxheUluZm8gZ2V0RGlzcGxheUluZm8oKSBvdmVycmlkZSB7IHJl
dHVybiBtX2Rpc3BsYXlJbmZvOyB9CisgICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBnZXRUcmFj
a2luZ0luZm8oKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBWUlBsYXRmb3JtRGlzcGxheUlu
Zm86OkZpZWxkT2ZWaWV3IGNvbXB1dGVGaWVsZE9mVmlldyh2cjo6SG1kX0V5ZSk7CkBAIC00Nyw2
ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgdnI6OklWUkNvbXBvc2l0b3IqIG1fY29tcG9zaXRvcjsK
IAogICAgIFZSUGxhdGZvcm1EaXNwbGF5SW5mbyBtX2Rpc3BsYXlJbmZvOworICAgIFZSUGxhdGZv
cm1UcmFja2luZ0luZm8gbV90cmFja2luZ0luZm87CiB9OwogCiB9OyAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337261</attachid>
            <date>2018-04-05 02:26:43 -0700</date>
            <delta_ts>2018-04-06 02:08:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184265-20180405112641.patch</filename>
            <type>text/plain</type>
            <size>25201</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5ODkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZiZDVkNmZiM2IxMTQ0
ZGZjODMwNDBhZmQzNTZjM2EyZGQyZDJlMi4uZjUyMTI4ZDkyNmM0YzE1YzczNzJlNDZkOTZlNzU5
OGQ5NGM1ZDNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE4LTA0LTAzICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtPcGVuVlJd
W1dlYlZSXSBSZXRyaWV2ZSBGcmFtZURhdGEgaW4gV2ViVlIncyByQUYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZSRnJhbWVEYXRhIGNvbnRhaW5zIGFs
bCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgcmVuZGVyIGEgVlIgc2NlbmUg
bGlrZSB2aWV3CisgICAgICAgIGFuZCBwcm9qZWN0aW9uIG1hdHJpY2VzLCBwb3NlIGRhdGEgKHBv
c2l0aW9uICYgb3JpZW50YXRpb24pIGFuZCBsaW5lYXIgJiBhbmd1bGFyIHZlbG9jaXR5CisgICAg
ICAgIGFtb25nIG90aGVycy4gVGhlIGdldEZyYW1lRGF0YSgpIGNhbGwgbXVzdCBiZSBpc3N1ZWQg
aW5zaWRlIGEgV2ViVlIncyBvd24KKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VlJEaXNwbGF5OjpnZXRGcmFtZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJEaXNw
bGF5OjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6Y2FuY2VsQW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Lmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlZSRXllUGFyYW1ldGVyczo6cmF3T2Zmc2V0IGNvbnN0KTogUmVxdWlyZWQgdG8gY29tcHV0ZSB2
aWV3IG1hdHJpY2VzLgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWF0cml4VG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWUkZy
YW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VlJGcmFtZURhdGE6OmxlZnRWaWV3TWF0cml4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZS
RnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VlJGcmFtZURhdGE6OnJpZ2h0Vmlld01hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OnJv
dGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlIZWFk
VG9FeWVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VlJGcmFtZURhdGE6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnZyL1ZSUG9zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcHRpb25hbEZsb2F0M1RvSlNDQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpwb3NpdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpWUlBvc2U6OmxpbmVhclZlbG9jaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlZSUG9zZTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjph
bmd1bGFyVmVsb2NpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjphbmd1bGFy
QWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSUG9zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQ
b3NlOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpWUlBvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpW
UlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpRdWF0ZXJuaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb246OmNvbmp1Z2F0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6VlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6Rmxv
YXQzOjpGbG9hdDMpOiBKdXN0IGEgZ3JvdXAgb2YgMyBmbG9hdHMgdXNlZCB0byBzdG9yZQorICAg
ICAgICBib3RoIHZlbG9jaXR5IGFuZCBhY2NlbGVyYXRpb24gaW4gYSBmb3JtYXQgd2hpY2ggaXMg
dmVyeSBjb252ZW5pZW50IHRvIGxhdGVyIGdlbmVyYXRlIEpTQworICAgICAgICBhcnJheXMuCisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpjbGVhcik6CisgICAgICAg
ICogcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUik6CisgICAgICAgIChXZWJDb3JlOjpyb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZv
KToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIu
aDoKKwogMjAxOC0wMy0yMyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWIgQW5pbWF0aW9uc10gaW5maW5pdGUgcmVwZWF0IGNvdW50cyBhcmVuJ3QgcmVm
bGVjdGVkIGZvciBDU1MgQW5pbWF0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9W
UkRpc3BsYXkuY3BwCmluZGV4IDNmMGNjYzEwNmQxZTVkODllOTljZTY5Nzk5ZWIyZmQzMWMyNzIx
YTEuLmQ1MzcwNTMyNDRhMGIxZjU1YjhhMjk0ZjI3Yjc4YTdhNGMxNTBhZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAKQEAgLTI2LDggKzI2LDEyIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVlJEaXNwbGF5LmgiCiAKKyNpbmNsdWRlICJD
aHJvbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiVlJFeWVQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiVlJGcmFtZURhdGEuaCIKICNpbmNsdWRl
ICJWUkxheWVySW5pdC5oIgogI2luY2x1ZGUgIlZSUGxhdGZvcm1EaXNwbGF5LmgiCiAjaW5jbHVk
ZSAiVlJQb3NlLmgiCkBAIC04NSwyNyArODksNDcgQEAgY29uc3QgVlJFeWVQYXJhbWV0ZXJzJiBW
UkRpc3BsYXk6OmdldEV5ZVBhcmFtZXRlcnMoVlJFeWUgZXllKSBjb25zdAogICAgIHJldHVybiBl
eWUgPT0gVlJFeWU6OkxlZnQgPyAqbV9sZWZ0RXllUGFyYW1ldGVycyA6ICptX3JpZ2h0RXllUGFy
YW1ldGVyczsKIH0KIAotYm9vbCBWUkRpc3BsYXk6OmdldEZyYW1lRGF0YShWUkZyYW1lRGF0YSYp
IGNvbnN0Citib29sIFZSRGlzcGxheTo6Z2V0RnJhbWVEYXRhKFZSRnJhbWVEYXRhJiBmcmFtZURh
dGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jYXBhYmlsaXRpZXMt
Pmhhc1Bvc2l0aW9uKCkgfHwgIW1fY2FwYWJpbGl0aWVzLT5oYXNPcmllbnRhdGlvbigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogZW5zdXJlIHRoYXQgdGhpcyBpcyBv
bmx5IGNhbGxlZCBpbnNpZGUgV2ViVlIncyByQUYuCisgICAgZnJhbWVEYXRhLnVwZGF0ZShtX2Rp
c3BsYXktPmdldFRyYWNraW5nSW5mbygpLCBnZXRFeWVQYXJhbWV0ZXJzKFZSRXllOjpMZWZ0KSwg
Z2V0RXllUGFyYW1ldGVycyhWUkV5ZTo6UmlnaHQpLCBtX2RlcHRoTmVhciwgbV9kZXB0aEZhcik7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFJlZjxWUlBvc2U+IFZSRGlzcGxheTo6Z2V0UG9zZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFZSUG9zZTo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIFZSUG9z
ZTo6Y3JlYXRlKG1fZGlzcGxheS0+Z2V0VHJhY2tpbmdJbmZvKCkpOwogfQogCiB2b2lkIFZSRGlz
cGxheTo6cmVzZXRQb3NlKCkKIHsKIH0KIAotbG9uZyBWUkRpc3BsYXk6OnJlcXVlc3RBbmltYXRp
b25GcmFtZShSZWY8UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+JiYpCit1aW50MzJfdCBW
UkRpc3BsYXk6OnJlcXVlc3RBbmltYXRpb25GcmFtZShSZWY8UmVxdWVzdEFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgYXV0byogZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBp
ZiAoIW1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKSB7CisjaWYgVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICAgICAgLy8gRklYTUU6IEdldCB0aGUg
ZGlzcGxheSBpZCBvZiB0aGUgSE1EIGFzIGl0IHNob3VsZCB1c2UgdGhlIEhNRCBuYXRpdmUgcmVm
cmVzaCByYXRlLgorICAgICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQgPSBkb2N1bWVu
dC0+cGFnZSgpID8gZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuZGlzcGxheUlEKCkgOiAwOwor
ICAgICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IFNjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlcjo6Y3JlYXRlKCpkb2N1bWVudCwgZGlzcGxheUlEKTsKKyNlbHNlCisgICAgICAg
IG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUoKmRvY3VtZW50LCAwKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBt
X3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+cmVnaXN0ZXJDYWxsYmFjayhXVEZNb3ZlKGNh
bGxiYWNrKSk7CiB9CiAKLXZvaWQgVlJEaXNwbGF5OjpjYW5jZWxBbmltYXRpb25GcmFtZSh1bnNp
Z25lZCkKK3ZvaWQgVlJEaXNwbGF5OjpjYW5jZWxBbmltYXRpb25GcmFtZSh1aW50MzJfdCBpZCkK
IHsKKyAgICBpZiAoIW1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+Y2FuY2VsQ2FsbGJhY2so
aWQpOwogfQogCiB2b2lkIFZSRGlzcGxheTo6cmVxdWVzdFByZXNlbnQoY29uc3QgVmVjdG9yPFZS
TGF5ZXJJbml0PiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ2ci9WUkRpc3BsYXkuaAppbmRleCBhMjQyZTQ0YTFkZjAyZTI4NjdmMDQyZGY4NGVlMzVj
Y2EyMmRiNTk5Li4zNjQ3ZTZkMmEyMGJkOTAxZmQxMGQzOGEzZjUwZjY4NGUxYTkxMzU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmgKQEAgLTM0LDYgKzM0LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJh
Y2s7CitjbGFzcyBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBWUkRpc3BsYXlD
YXBhYmlsaXRpZXM7CiBjbGFzcyBWUkV5ZVBhcmFtZXRlcnM7CiBjbGFzcyBWUkZyYW1lRGF0YTsK
QEAgLTcyLDggKzczLDggQEAgcHVibGljOgogICAgIGRvdWJsZSBkZXB0aEZhcigpIGNvbnN0IHsg
cmV0dXJuIG1fZGVwdGhGYXI7IH0KICAgICB2b2lkIHNldERlcHRoRmFyKGRvdWJsZSBkZXB0aEZh
cikgeyBtX2RlcHRoRmFyID0gZGVwdGhGYXI7IH0KIAotICAgIGxvbmcgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJik7Ci0gICAgdm9pZCBj
YW5jZWxBbmltYXRpb25GcmFtZSh1bnNpZ25lZCk7CisgICAgdWludDMyX3QgcmVxdWVzdEFuaW1h
dGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJik7CisgICAgdm9p
ZCBjYW5jZWxBbmltYXRpb25GcmFtZSh1aW50MzJfdCk7CiAKICAgICB2b2lkIHJlcXVlc3RQcmVz
ZW50KGNvbnN0IFZlY3RvcjxWUkxheWVySW5pdD4mLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsK
ICAgICB2b2lkIGV4aXRQcmVzZW50KFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwpAQCAtMTExLDYg
KzExMiw4IEBAIHByaXZhdGU6CiAKICAgICBkb3VibGUgbV9kZXB0aE5lYXIgeyAwLjAxIH07IC8v
IERlZmF1bHQgdmFsdWUgZnJvbSB0aGUgc3BlY3MuCiAgICAgZG91YmxlIG1fZGVwdGhGYXIgeyAx
MDAwMCB9OyAvLyBEZWZhdWx0IHZhbHVlIGZyb20gdGhlIHNwZWNzLgorCisgICAgUmVmUHRyPFNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaAppbmRleCA2YTg5ZDg5ODIwYTA0MTQ0ODM1YjU0Yjc5
MDdhYzhkMjIzMGMyYmJjLi5mMzBkMGZiZDY1NGExZDFmMTg4YTFmNDM5ZDMwMzA4MGZjYTY0ODJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFyYW1ldGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJFeWVQYXJhbWV0ZXJzLmgK
QEAgLTQzLDYgKzQzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFJlZjxGbG9hdDMyQXJyYXk+
IG9mZnNldCgpIGNvbnN0OworICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcmF3T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KIAogICAgIGNvbnN0IFZSRmllbGRPZlZpZXcmIGZpZWxk
T2ZWaWV3KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
dnIvVlJGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1l
RGF0YS5jcHAKaW5kZXggNWI4NDliZjI5MGY5Y2Q4OTA1NmRlODY2ZGI5NGZkODY0MWIwNjI5OC4u
YjIxMTY5MTE2M2YxMzYxMjIwNzA1YmI1Y2EzYjExNDYyMDY3Yjk4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5jcHAKQEAgLTM0LDI5ICszNCwzMSBAQCBW
UkZyYW1lRGF0YTo6VlJGcmFtZURhdGEoKQogewogfQogCi1kb3VibGUgVlJGcmFtZURhdGE6OnRp
bWVzdGFtcCgpIGNvbnN0CitzdGF0aWMgUmVmPEZsb2F0MzJBcnJheT4gbWF0cml4VG9BcnJheShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQogewotICAgIHJldHVybiAwOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpGbG9hdE1hdHJpeDQgY29sdW1uTWFqb3JNYXRyaXg7Cisg
ICAgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KGNvbHVtbk1ham9yTWF0cml4KTsKKyAg
ICByZXR1cm4gRmxvYXQzMkFycmF5OjpjcmVhdGUoY29sdW1uTWFqb3JNYXRyaXgsIDE2KS5yZWxl
YXNlTm9uTnVsbCgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSRnJhbWVEYXRhOjpsZWZ0UHJvamVj
dGlvbk1hdHJpeCgpIGNvbnN0CitSZWY8RmxvYXQzMkFycmF5PiBWUkZyYW1lRGF0YTo6bGVmdFBy
b2plY3Rpb25NYXRyaXgoKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBtYXRyaXhUb0FycmF5KG1fbGVmdFByb2plY3Rpb25NYXRyaXgpOwogfQogCi1GbG9hdDMyQXJy
YXkqIFZSRnJhbWVEYXRhOjpsZWZ0Vmlld01hdHJpeCgpIGNvbnN0CitSZWY8RmxvYXQzMkFycmF5
PiBWUkZyYW1lRGF0YTo6bGVmdFZpZXdNYXRyaXgoKSBjb25zdAogewotICAgIHJldHVybiBudWxs
cHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5KG1fbGVmdFZpZXdNYXRyaXgpOwogfQogCi1G
bG9hdDMyQXJyYXkqIFZSRnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdAor
UmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6OnJpZ2h0UHJvamVjdGlvbk1hdHJpeCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1hdHJpeFRvQXJyYXkobV9y
aWdodFByb2plY3Rpb25NYXRyaXgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSRnJhbWVEYXRhOjpy
aWdodFZpZXdNYXRyaXgoKSBjb25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6OnJp
Z2h0Vmlld01hdHJpeCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IG1hdHJpeFRvQXJyYXkobV9yaWdodFZpZXdNYXRyaXgpOwogfQogCiBjb25zdCBWUlBvc2UmIFZS
RnJhbWVEYXRhOjpwb3NlKCkgY29uc3QKQEAgLTY0LDQgKzY2LDg4IEBAIGNvbnN0IFZSUG9zZSYg
VlJGcmFtZURhdGE6OnBvc2UoKSBjb25zdAogICAgIHJldHVybiBtX3Bvc2U7CiB9CiAKK3N0YXRp
YyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KGNv
bnN0IFZSRmllbGRPZlZpZXcmIGZvdiwgZG91YmxlIGRlcHRoTmVhciwgZG91YmxlIGRlcHRoRmFy
KQoreworICAgIGRvdWJsZSB1cFRhbiA9IHRhbihkZWcycmFkKGZvdi51cERlZ3JlZXMoKSkpOwor
ICAgIGRvdWJsZSBkb3duVGFuID0gdGFuKGRlZzJyYWQoZm92LmRvd25EZWdyZWVzKCkpKTsKKyAg
ICBkb3VibGUgbGVmdFRhbiA9IHRhbihkZWcycmFkKGZvdi5sZWZ0RGVncmVlcygpKSk7CisgICAg
ZG91YmxlIHJpZ2h0VGFuID0gdGFuKGRlZzJyYWQoZm92LnJpZ2h0RGVncmVlcygpKSk7CisKKyAg
ICBkb3VibGUgeFNjYWxlID0gMiAvIChsZWZ0VGFuICsgcmlnaHRUYW4pOworICAgIGRvdWJsZSB5
U2NhbGUgPSAyIC8gKHVwVGFuICsgZG93blRhbik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwcm9qZWN0aW9uTWF0cml4OworICAgIHByb2plY3Rpb25NYXRyaXguc2V0TTExKHhTY2FsZSk7
CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMjIoeVNjYWxlKTsKKyAgICBwcm9qZWN0aW9uTWF0
cml4LnNldE0zMigodXBUYW4gLSBkb3duVGFuKSAqIHlTY2FsZSAqIDAuNSk7CisgICAgcHJvamVj
dGlvbk1hdHJpeC5zZXRNMzEoLSgobGVmdFRhbiAtIHJpZ2h0VGFuKSAqIHhTY2FsZSAqIDAuNSkp
OworICAgIHByb2plY3Rpb25NYXRyaXguc2V0TTMzKChkZXB0aE5lYXIgKyBkZXB0aEZhcikgLyAo
ZGVwdGhOZWFyIC0gZGVwdGhGYXIpKTsKKyAgICBwcm9qZWN0aW9uTWF0cml4LnNldE0zNCgtMSk7
CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNNDMoKDIgKiBkZXB0aEZhciAqIGRlcHRoTmVhcikg
LyAoZGVwdGhOZWFyIC0gZGVwdGhGYXIpKTsKKyAgICBwcm9qZWN0aW9uTWF0cml4LnNldE00NCgw
KTsKKworICAgIHJldHVybiBwcm9qZWN0aW9uTWF0cml4OworfQorCisvLyBodHRwOi8vd3d3LmV1
Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvcXVh
dGVybmlvblRvTWF0cml4L2luZGV4Lmh0bQorc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJv
dGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24oY29uc3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6
UXVhdGVybmlvbiYgcXVhdGVybmlvbikKK3sKKyAgICBkb3VibGUgbWFnbml0dWRlID0gKHF1YXRl
cm5pb24ueCAqIHF1YXRlcm5pb24ueCkgKyAocXVhdGVybmlvbi55ICogcXVhdGVybmlvbi55KSAr
IChxdWF0ZXJuaW9uLnogKiBxdWF0ZXJuaW9uLnopICsgKHF1YXRlcm5pb24udyAqIHF1YXRlcm5p
b24udyk7CisgICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6UXVhdGVybmlvbiBub3JtYWxpemVk
UXVhdGVybmlvbihxdWF0ZXJuaW9uLnggLyBtYWduaXR1ZGUsIHF1YXRlcm5pb24ueSAvIG1hZ25p
dHVkZSwgcXVhdGVybmlvbi56IC8gbWFnbml0dWRlLCBxdWF0ZXJuaW9uLncgLyBtYWduaXR1ZGUp
OworICAgIGRvdWJsZSB4MiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnggKiBub3JtYWxpemVkUXVh
dGVybmlvbi54OworICAgIGRvdWJsZSB5MiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnkgKiBub3Jt
YWxpemVkUXVhdGVybmlvbi55OworICAgIGRvdWJsZSB6MiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9u
LnogKiBub3JtYWxpemVkUXVhdGVybmlvbi56OworICAgIGRvdWJsZSB3MiA9IG5vcm1hbGl6ZWRR
dWF0ZXJuaW9uLncgKiBub3JtYWxpemVkUXVhdGVybmlvbi53OworCisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC5zZXRNMTEoeDIgLSB5MiAtIHoyICsgdzIpOwor
ICAgIG1hdHJpeC5zZXRNMjIoLXgyICsgeTIgLSB6MiArIHcyKTsKKyAgICBtYXRyaXguc2V0TTMz
KC14MiAtIHkyICsgejIgKyB3Mik7CisKKyAgICBkb3VibGUgeHkgPSBub3JtYWxpemVkUXVhdGVy
bmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24ueTsKKyAgICBkb3VibGUgencgPSBub3JtYWxp
emVkUXVhdGVybmlvbi56ICogbm9ybWFsaXplZFF1YXRlcm5pb24udzsKKyAgICBtYXRyaXguc2V0
TTIxKDIuMCAqICh4eSArIHp3KSk7CisgICAgbWF0cml4LnNldE0xMigyLjAgKiAoeHkgLSB6dykp
OworCisgICAgZG91YmxlIHh6ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueCAqIG5vcm1hbGl6ZWRR
dWF0ZXJuaW9uLno7CisgICAgZG91YmxlIHl3ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueSAqIG5v
cm1hbGl6ZWRRdWF0ZXJuaW9uLnc7CisgICAgbWF0cml4LnNldE0zMSgyLjAgKiAoeHogLSB5dykp
OworICAgIG1hdHJpeC5zZXRNMTMoMi4wICogKHh6ICsgeXcpKTsKKworICAgIGRvdWJsZSB5eiA9
IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnkgKiBub3JtYWxpemVkUXVhdGVybmlvbi56OworICAgIGRv
dWJsZSB4dyA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnggKiBub3JtYWxpemVkUXVhdGVybmlvbi53
OworICAgIG1hdHJpeC5zZXRNMzIoMi4wICogKHl6ICsgeHcpKTsKKyAgICBtYXRyaXguc2V0TTIz
KDIuMCAqICh5eiAtIHh3KSk7CisKKyAgICByZXR1cm4gbWF0cml4OworfQorCitzdGF0aWMgdm9p
ZCBhcHBseUhlYWRUb0V5ZVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBj
b25zdCBGbG9hdFBvaW50M0QmIHRyYW5zbGF0aW9uKQoreworICAgIG1hdHJpeC5zZXRNNDEobWF0
cml4Lm00MSgpIC0gdHJhbnNsYXRpb24ueCgpKTsKKyAgICBtYXRyaXguc2V0TTQyKG1hdHJpeC5t
NDIoKSAtIHRyYW5zbGF0aW9uLnkoKSk7CisgICAgbWF0cml4LnNldE00MyhtYXRyaXgubTQzKCkg
LSB0cmFuc2xhdGlvbi56KCkpOworfQorCit2b2lkIFZSRnJhbWVEYXRhOjp1cGRhdGUoY29uc3Qg
VlJQbGF0Zm9ybVRyYWNraW5nSW5mbyYgdHJhY2tpbmdJbmZvLCBjb25zdCBWUkV5ZVBhcmFtZXRl
cnMmIGxlZnRFeWUsIGNvbnN0IFZSRXllUGFyYW1ldGVycyYgcmlnaHRFeWUsIGRvdWJsZSBkZXB0
aE5lYXIsIGRvdWJsZSBkZXB0aEZhcikKK3sKKyAgICBtX2xlZnRQcm9qZWN0aW9uTWF0cml4ID0g
cHJvamVjdGlvbk1hdHJpeEZyb21GaWVsZE9mVmlldyhsZWZ0RXllLmZpZWxkT2ZWaWV3KCksIGRl
cHRoTmVhciwgZGVwdGhGYXIpOworICAgIG1fcmlnaHRQcm9qZWN0aW9uTWF0cml4ID0gcHJvamVj
dGlvbk1hdHJpeEZyb21GaWVsZE9mVmlldyhyaWdodEV5ZS5maWVsZE9mVmlldygpLCBkZXB0aE5l
YXIsIGRlcHRoRmFyKTsKKworICAgIG1fdGltZXN0YW1wID0gdHJhY2tpbmdJbmZvLnRpbWVzdGFt
cDsKKyAgICBtX3Bvc2UtPnVwZGF0ZSh0cmFja2luZ0luZm8pOworCisgICAgYXV0byByb3RhdGlv
bk1hdHJpeCA9IHJvdGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24odHJhY2tpbmdJbmZvLm9yaWVu
dGF0aW9uLnZhbHVlX29yKFZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24oMCwgMCwg
MCwgMSkpKTsKKyAgICBGbG9hdFBvaW50M0QgcG9zaXRpb24gPSB0cmFja2luZ0luZm8ucG9zaXRp
b24udmFsdWVfb3IoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKKyAgICByb3RhdGlvbk1hdHJpeC50
cmFuc2xhdGUzZCgtcG9zaXRpb24ueCgpLCAtcG9zaXRpb24ueSgpLCAtcG9zaXRpb24ueigpKTsK
KworICAgIEZsb2F0UG9pbnQzRCBsZWZ0RXllT2Zmc2V0ID0gbGVmdEV5ZS5yYXdPZmZzZXQoKTsK
KyAgICBtX2xlZnRWaWV3TWF0cml4ID0gcm90YXRpb25NYXRyaXg7CisgICAgYXBwbHlIZWFkVG9F
eWVUcmFuc2Zvcm0obV9sZWZ0Vmlld01hdHJpeCwgbGVmdEV5ZU9mZnNldCk7CisKKyAgICBGbG9h
dFBvaW50M0QgcmlnaHRFeWVPZmZzZXQgPSByaWdodEV5ZS5yYXdPZmZzZXQoKTsKKyAgICBtX3Jp
Z2h0Vmlld01hdHJpeCA9IHJvdGF0aW9uTWF0cml4OworICAgIGFwcGx5SGVhZFRvRXllVHJhbnNm
b3JtKG1fcmlnaHRWaWV3TWF0cml4LCByaWdodEV5ZU9mZnNldCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJG
cmFtZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuaApp
bmRleCA3MDNkNmJjMGYyNzAwN2U4N2I2NzNlYWEwMjU3MzFlYjA2NTJiMjU3Li40YjVjMjM3NmU3
MzE0ZWVmZGJjMGMwNjQ0YWFkZWY2OGEyZjRiMzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ2ci9WUkZyYW1lRGF0YS5oCkBAIC0zOCwyMCArMzgsMjcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWUkZyYW1lRGF0YSk7CiAgICAgfQogCi0gICAgZG91Ymxl
IHRpbWVzdGFtcCgpIGNvbnN0OworICAgIGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVy
biBtX3RpbWVzdGFtcDsgfQogCi0gICAgRmxvYXQzMkFycmF5KiBsZWZ0UHJvamVjdGlvbk1hdHJp
eCgpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSogbGVmdFZpZXdNYXRyaXgoKSBjb25zdDsKKyAg
ICBSZWY8RmxvYXQzMkFycmF5PiBsZWZ0UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0OworICAgIFJl
ZjxGbG9hdDMyQXJyYXk+IGxlZnRWaWV3TWF0cml4KCkgY29uc3Q7CiAKLSAgICBGbG9hdDMyQXJy
YXkqIHJpZ2h0UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSogcmln
aHRWaWV3TWF0cml4KCkgY29uc3Q7CisgICAgUmVmPEZsb2F0MzJBcnJheT4gcmlnaHRQcm9qZWN0
aW9uTWF0cml4KCkgY29uc3Q7CisgICAgUmVmPEZsb2F0MzJBcnJheT4gcmlnaHRWaWV3TWF0cml4
KCkgY29uc3Q7CiAKICAgICBjb25zdCBWUlBvc2UmIHBvc2UoKSBjb25zdDsKIAorICAgIHZvaWQg
dXBkYXRlKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm8mLCBjb25zdCBWUkV5ZVBhcmFtZXRl
cnMmIGxlZnRFeWUsIGNvbnN0IFZSRXllUGFyYW1ldGVycyYgcmlnaHRFeWUsIGRvdWJsZSBkZXB0
aE5lYXIsIGRvdWJsZSBkZXB0aEZhcik7CisKIHByaXZhdGU6CiAgICAgVlJGcmFtZURhdGEoKTsK
IAorICAgIGRvdWJsZSBtX3RpbWVzdGFtcDsKICAgICBSZWY8VlJQb3NlPiBtX3Bvc2U7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9sZWZ0UHJvamVjdGlvbk1hdHJpeDsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX3JpZ2h0UHJvamVjdGlvbk1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtX2xlZnRWaWV3TWF0cml4OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmln
aHRWaWV3TWF0cml4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9WUlBvc2UuY3BwCmluZGV4IDNkYzE1ZWRmNTViYjM3ZDU1YWRlMzk3YjZk
NjUzMDZkMWZkN2I4ODkuLjc1YzUxMDA2NjUyOWE3YzA2MmMxN2Q1YWQ2M2Y0NThkZjYyMzAzNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5jcHAKQEAgLTI3LDM2ICsyNyw1
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZSUG9zZTo6VlJQb3NlKCkgPSBkZWZhdWx0
Oworc3RhdGljIFJlZlB0cjxGbG9hdDMyQXJyYXk+IG9wdGlvbmFsRmxvYXQzVG9KU0NBcnJheShj
b25zdCBzdGQ6Om9wdGlvbmFsPFZSUGxhdGZvcm1UcmFja2luZ0luZm86OkZsb2F0Mz4mIGRhdGEp
Cit7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBGbG9hdDMyQXJyYXk6OmNyZWF0ZShkYXRhLT5kYXRhLCAzKS5yZWxlYXNlTm9uTnVsbCgpOwor
fQogCi1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6cG9zaXRpb24oKSBjb25zdAorUmVmUHRyPEZsb2F0
MzJBcnJheT4gVlJQb3NlOjpwb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKCFtX3RyYWNraW5nSW5mby5wb3NpdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIHBvc2l0aW9uID0gRmxvYXQzMkFycmF5OjpjcmVhdGUoMyk7CisgICAg
ZmxvYXQqIHBvc2l0aW9uRGF0YSA9IHBvc2l0aW9uLT5kYXRhKCk7CisgICAgcG9zaXRpb25EYXRh
WzBdID0gbV90cmFja2luZ0luZm8ucG9zaXRpb24tPngoKTsKKyAgICBwb3NpdGlvbkRhdGFbMV0g
PSBtX3RyYWNraW5nSW5mby5wb3NpdGlvbi0+eSgpOworICAgIHBvc2l0aW9uRGF0YVsyXSA9IG1f
dHJhY2tpbmdJbmZvLnBvc2l0aW9uLT56KCk7CisgICAgcmV0dXJuIHBvc2l0aW9uLnJlbGVhc2VO
b25OdWxsKCk7CiB9CiAKLUZsb2F0MzJBcnJheSogVlJQb3NlOjpsaW5lYXJWZWxvY2l0eSgpIGNv
bnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OmxpbmVhclZlbG9jaXR5KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gb3B0aW9uYWxGbG9hdDNUb0pTQ0Fy
cmF5KG1fdHJhY2tpbmdJbmZvLmxpbmVhclZlbG9jaXR5KTsKIH0KIAotRmxvYXQzMkFycmF5KiBW
UlBvc2U6OmxpbmVhckFjY2VsZXJhdGlvbigpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBW
UlBvc2U6OmxpbmVhckFjY2VsZXJhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIG9wdGlvbmFsRmxvYXQzVG9KU0NBcnJheShtX3RyYWNraW5nSW5mby5saW5l
YXJBY2NlbGVyYXRpb24pOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6b3JpZW50YXRpb24o
KSBjb25zdAorUmVmUHRyPEZsb2F0MzJBcnJheT4gVlJQb3NlOjpvcmllbnRhdGlvbigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFtX3RyYWNraW5nSW5mby5vcmllbnRh
dGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG9yaWVudGF0aW9uID0g
RmxvYXQzMkFycmF5OjpjcmVhdGUoNCk7CisgICAgZmxvYXQqIG9yaWVudGF0aW9uRGF0YSA9IG9y
aWVudGF0aW9uLT5kYXRhKCk7CisgICAgb3JpZW50YXRpb25EYXRhWzBdID0gbV90cmFja2luZ0lu
Zm8ub3JpZW50YXRpb24tPng7CisgICAgb3JpZW50YXRpb25EYXRhWzFdID0gbV90cmFja2luZ0lu
Zm8ub3JpZW50YXRpb24tPnk7CisgICAgb3JpZW50YXRpb25EYXRhWzJdID0gbV90cmFja2luZ0lu
Zm8ub3JpZW50YXRpb24tPno7CisgICAgb3JpZW50YXRpb25EYXRhWzNdID0gbV90cmFja2luZ0lu
Zm8ub3JpZW50YXRpb24tPnc7CisgICAgcmV0dXJuIG9yaWVudGF0aW9uLnJlbGVhc2VOb25OdWxs
KCk7CiB9CiAKLUZsb2F0MzJBcnJheSogVlJQb3NlOjphbmd1bGFyVmVsb2NpdHkoKSBjb25zdAor
UmVmUHRyPEZsb2F0MzJBcnJheT4gVlJQb3NlOjphbmd1bGFyVmVsb2NpdHkoKSBjb25zdAogewot
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBvcHRpb25hbEZsb2F0M1RvSlNDQXJyYXko
bV90cmFja2luZ0luZm8uYW5ndWxhclZlbG9jaXR5KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBv
c2U6OmFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25zdAorUmVmUHRyPEZsb2F0MzJBcnJheT4gVlJQ
b3NlOjphbmd1bGFyQWNjZWxlcmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gb3B0aW9uYWxGbG9hdDNUb0pTQ0FycmF5KG1fdHJhY2tpbmdJbmZvLmFuZ3Vs
YXJBY2NlbGVyYXRpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9WUlBvc2UuaAppbmRleCAyZWYwYWUzYzYwNzdkYTAyNzJkYzUzMTRmZDgw
Y2MxYTMwZTc3NTQyLi43OTMzOWE3NjZkMTFjYThkZmZkYjk0MDRjOGMwNzEwZTQ3Y2QzMWI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmgKQEAgLTM2LDE2ICszNiwzMCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZSUG9zZSk7CiAgICAgfQogCi0g
ICAgRmxvYXQzMkFycmF5KiBwb3NpdGlvbigpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSogbGlu
ZWFyVmVsb2NpdHkoKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGxpbmVhckFjY2VsZXJhdGlv
bigpIGNvbnN0OworICAgIHN0YXRpYyBSZWY8VlJQb3NlPiBjcmVhdGUoY29uc3QgVlJQbGF0Zm9y
bVRyYWNraW5nSW5mbyYgdHJhY2tpbmdJbmZvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVlJQb3NlKHRyYWNraW5nSW5mbykpOworICAgIH0KKworICAgIFJlZlB0cjxGbG9h
dDMyQXJyYXk+IHBvc2l0aW9uKCkgY29uc3Q7CisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gbGlu
ZWFyVmVsb2NpdHkoKSBjb25zdDsKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBsaW5lYXJBY2Nl
bGVyYXRpb24oKSBjb25zdDsKKworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IG9yaWVudGF0aW9u
KCkgY29uc3Q7CisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gYW5ndWxhclZlbG9jaXR5KCkgY29u
c3Q7CisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gYW5ndWxhckFjY2VsZXJhdGlvbigpIGNvbnN0
OwogCi0gICAgRmxvYXQzMkFycmF5KiBvcmllbnRhdGlvbigpIGNvbnN0OwotICAgIEZsb2F0MzJB
cnJheSogYW5ndWxhclZlbG9jaXR5KCkgY29uc3Q7Ci0gICAgRmxvYXQzMkFycmF5KiBhbmd1bGFy
QWNjZWxlcmF0aW9uKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGUoY29uc3QgVlJQbGF0Zm9ybVRy
YWNraW5nSW5mbyYgdHJhY2tpbmdJbmZvKSB7IG1fdHJhY2tpbmdJbmZvID0gdHJhY2tpbmdJbmZv
OyB9OwogCiBwcml2YXRlOgotICAgIFZSUG9zZSgpOworICAgIFZSUG9zZSgpID0gZGVmYXVsdDsK
KworICAgIFZSUG9zZShjb25zdCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvJiB0cmFja2luZ0luZm8p
CisgICAgICAgIDogbV90cmFja2luZ0luZm8odHJhY2tpbmdJbmZvKQorICAgIHsKKyAgICB9CisK
KyAgICBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvIG1fdHJhY2tpbmdJbmZvOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIv
VlJQbGF0Zm9ybURpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZv
cm1EaXNwbGF5LmgKaW5kZXggNzZkMmFjNjZmMzNjMDc4ZWM5OTFkYWFhYjQyMzY2Y2U5MzZmZjI3
YS4uYjQ2ZjU3NjRhNDQyZGZlODFkNTk2MzFhMjYxN2M3MmI3MDkyM2Q0OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtRGlzcGxheS5oCkBAIC0xMDMsOSArMTAz
LDY0IEBAIHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25hbDxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4g
bV9zaXR0aW5nVG9TdGFuZGluZ1RyYW5zZm9ybTsKIH07CiAKK3N0cnVjdCBWUlBsYXRmb3JtVHJh
Y2tpbmdJbmZvIHsKKyAgICBzdHJ1Y3QgUXVhdGVybmlvbiB7CisgICAgICAgIFF1YXRlcm5pb24o
KQorICAgICAgICAgICAgOiB4KDApLCB5KDApLCB6KDApLCB3KDEpIHsgfQorCisgICAgICAgIFF1
YXRlcm5pb24oZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdykKKyAgICAgICAgICAg
IDogeCh4KSwgeSh5KSwgeih6KSwgdyh3KSB7IH0KKworICAgICAgICBRdWF0ZXJuaW9uJiBjb25q
dWdhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICB4ICo9IC0xOworICAgICAgICAgICAgeSAq
PSAtMTsKKyAgICAgICAgICAgIHogKj0gLTE7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIH0KKworICAgICAgICBRdWF0ZXJuaW9uJiBvcGVyYXRvciooZmxvYXQgZmFjdG9yKQor
ICAgICAgICB7CisgICAgICAgICAgICB4ICo9IGZhY3RvcjsKKyAgICAgICAgICAgIHkgKj0gZmFj
dG9yOworICAgICAgICAgICAgeiAqPSBmYWN0b3I7CisgICAgICAgICAgICB3ICo9IGZhY3RvcjsK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCB4LCB5
LCB6LCB3OworICAgIH07CisKKyAgICBzdHJ1Y3QgRmxvYXQzIHsKKyAgICAgICAgRmxvYXQzKGZs
b2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMpCisgICAgICAgICAgICA6IGRhdGEgeyBhLCBiLCBjIH0g
eyB9CisKKyAgICAgICAgZmxvYXQgZGF0YVszXTsKKyAgICB9OworCisgICAgdm9pZCBjbGVhcigp
CisgICAgeworICAgICAgICB0aW1lc3RhbXAgPSAwOworICAgICAgICBwb3NpdGlvbiA9IHN0ZDo6
bnVsbG9wdDsKKyAgICAgICAgb3JpZW50YXRpb24gPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGFu
Z3VsYXJBY2NlbGVyYXRpb24gPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGFuZ3VsYXJWZWxvY2l0
eSA9IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgbGluZWFyQWNjZWxlcmF0aW9uID0gc3RkOjpudWxs
b3B0OworICAgICAgICBsaW5lYXJWZWxvY2l0eSA9IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPFF1YXRlcm5pb24+IG9yaWVudGF0aW9uOworICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRQb2ludDNEPiBwb3NpdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0Mz4gYW5n
dWxhckFjY2VsZXJhdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0Mz4gYW5ndWxhclZlbG9j
aXR5OworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXQzPiBsaW5lYXJBY2NlbGVyYXRpb247CisgICAg
c3RkOjpvcHRpb25hbDxGbG9hdDM+IGxpbmVhclZlbG9jaXR5OworICAgIGRvdWJsZSB0aW1lc3Rh
bXA7Cit9OworCiBjbGFzcyBWUlBsYXRmb3JtRGlzcGxheSB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCBWUlBsYXRmb3JtRGlzcGxheUluZm8gZ2V0RGlzcGxheUluZm8oKSA9IDA7CisgICAgdmlydHVh
bCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvIGdldFRyYWNraW5nSW5mbygpID0gMDsKICAgICB2aXJ0
dWFsIH5WUlBsYXRmb3JtRGlzcGxheSgpID0gZGVmYXVsdDsKIAogICAgIFdlYWtQdHI8VlJQbGF0
Zm9ybURpc3BsYXk+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNy
ZWF0ZVdlYWtQdHIoKnRoaXMpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcAppbmRleCA0Mzlm
MTg1OGM2NDc5ZTgxZDI4YmFiNDdjMThkNTNkMWUzNzQ1N2JjLi5mYWRiNmZjMTM3MzYyMDcxNTY5
MDc3MjRjMGQ4Y2U4N2RjNmQ1YjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAKQEAgLTUw
LDYgKzUwLDggQEAgVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI6OlZSUGxhdGZvcm1EaXNwbGF5T3Bl
blZSKHZyOjpJVlJTeXN0ZW0qIHN5c3RlbSwgdnI6OklWUkMKICAgICAvLyBGSVhNRTogV2UncmUg
YXNzdW1pbmcgYW4gSFRDIFZpdmUgSE1EIGhlcmUuIEdldCB0aGlzIGluZm8gZnJvbSBPcGVuVlI/
LgogICAgIG1fZGlzcGxheUluZm8uc2V0Q2FwYWJpbGl0eUZsYWdzKFZSRGlzcGxheUNhcGFiaWxp
dHlGbGFnOjpOb25lIHwgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWc6OlBvc2l0aW9uIHwgVlJEaXNw
bGF5Q2FwYWJpbGl0eUZsYWc6Ok9yaWVudGF0aW9uIHwgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWc6
OkV4dGVybmFsRGlzcGxheSB8IFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnOjpQcmVzZW50KTsKIAor
ICAgIG1fY29tcG9zaXRvci0+U2V0VHJhY2tpbmdTcGFjZSh2cjo6VHJhY2tpbmdVbml2ZXJzZVNl
YXRlZCk7CisKICAgICB1cGRhdGVFeWVQYXJhbWV0ZXJzKCk7CiAgICAgdXBkYXRlU3RhZ2VQYXJh
bWV0ZXJzKCk7CiB9CkBAIC05OSw2ICsxMDEsNjMgQEAgdm9pZCBWUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUjo6dXBkYXRlU3RhZ2VQYXJhbWV0ZXJzKCkKICAgICBtX2Rpc3BsYXlJbmZvLnNldFBsYXlB
cmVhQm91bmRzKEZsb2F0U2l6ZShwbGF5QXJlYVdpZHRoLCBwbGF5QXJlYURlcHRoKSk7CiB9CiAK
Ky8vIEZJWE1FOiB3ZSBtaWdodCB3YW50IHRvIGdlbmVyYWxpemUgdGhpcyBmdW5jdGlvbiBmb3Ig
b3RoZXIgYmFja2VuZHMuCitzdGF0aWMgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6UXVhdGVybmlv
biByb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbihjb25zdCBmbG9hdCAoJm1hdHJpeClbM11bNF0p
Cit7CisgICAgLy8gU2VlIGh0dHBzOi8vZDNjdzNkZDJ3MzJ4MmIuY2xvdWRmcm9udC5uZXQvd3At
Y29udGVudC91cGxvYWRzLzIwMTUvMDEvbWF0cml4LXRvLXF1YXQucGRmLgorICAgIFZSUGxhdGZv
cm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24gcXVhdGVybmlvbjsKKyAgICBmbG9hdCB0cmFjZTsK
KyAgICBpZiAobWF0cml4WzJdWzJdIDwgMCkgeworICAgICAgICBpZiAobWF0cml4WzBdWzBdID4g
bWF0cml4WzFdWzFdKSB7CisgICAgICAgICAgICB0cmFjZSA9IDEgKyBtYXRyaXhbMF1bMF0gLSBt
YXRyaXhbMV1bMV0gLSBtYXRyaXhbMl1bMl07CisgICAgICAgICAgICBxdWF0ZXJuaW9uID0geyB0
cmFjZSwgbWF0cml4WzBdWzFdK21hdHJpeFsxXVswXSwgbWF0cml4WzJdWzBdK21hdHJpeFswXVsy
XSwgbWF0cml4WzFdWzJdIC0gbWF0cml4WzJdWzFdIH07CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0cmFjZSA9IDEgLSBtYXRyaXhbMF1bMF0gKyBtYXRyaXhbMV1bMV0gLSBtYXRyaXhb
Ml1bMl07CisgICAgICAgICAgICBxdWF0ZXJuaW9uID0geyBtYXRyaXhbMF1bMV0rbWF0cml4WzFd
WzBdLCB0cmFjZSwgbWF0cml4WzFdWzJdK21hdHJpeFsyXVsxXSwgbWF0cml4WzJdWzBdIC0gbWF0
cml4WzBdWzJdIH07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobWF0cml4
WzBdWzBdIDwgLW1hdHJpeFsxXVsxXSkgeworICAgICAgICAgICAgdHJhY2UgPSAxIC0gbWF0cml4
WzBdWzBdIC0gbWF0cml4WzFdWzFdICsgbWF0cml4WzJdWzJdOworICAgICAgICAgICAgcXVhdGVy
bmlvbiA9IHsgbWF0cml4WzJdWzBdK21hdHJpeFswXVsyXSwgbWF0cml4WzFdWzJdK21hdHJpeFsy
XVsxXSwgdHJhY2UgLCBtYXRyaXhbMF1bMV0gLSBtYXRyaXhbMV1bMF0gfTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHRyYWNlID0gMSArIG1hdHJpeFswXVswXSArIG1hdHJpeFsxXVsx
XSArIG1hdHJpeFsyXVsyXTsKKyAgICAgICAgICAgIHF1YXRlcm5pb24gPSB7IG1hdHJpeFsxXVsy
XSAtIG1hdHJpeFsyXVsxXSwgbWF0cml4WzJdWzBdIC0gbWF0cml4WzBdWzJdLCBtYXRyaXhbMF1b
MV0gLSBtYXRyaXhbMV1bMF0sIHRyYWNlIH07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IHF1YXRlcm5pb24gKiAoMC41IC8gc3FydCh0cmFjZSkpOworfQorCitWUlBsYXRmb3JtVHJhY2tp
bmdJbmZvIFZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpnZXRUcmFja2luZ0luZm8oKQoreworICAg
IHZyOjpUcmFja2VkRGV2aWNlUG9zZV90IHBvc2VzW3ZyOjprX3VuTWF4VHJhY2tlZERldmljZUNv
dW50XTsKKworICAgIG1fY29tcG9zaXRvci0+V2FpdEdldFBvc2VzKG51bGxwdHIsIDAsIHBvc2Vz
LCB2cjo6a191bk1heFRyYWNrZWREZXZpY2VDb3VudCk7CisKKyAgICBtX3RyYWNraW5nSW5mby5j
bGVhcigpOworCisgICAgdnI6OkNvbXBvc2l0b3JfRnJhbWVUaW1pbmcgdGltaW5nOworICAgIHRp
bWluZy5tX25TaXplID0gc2l6ZW9mKHZyOjpDb21wb3NpdG9yX0ZyYW1lVGltaW5nKTsKKyAgICBt
X2NvbXBvc2l0b3ItPkdldEZyYW1lVGltaW5nKCZ0aW1pbmcpOworICAgIG1fdHJhY2tpbmdJbmZv
LnRpbWVzdGFtcCA9IHRpbWluZy5tX2ZsU3lzdGVtVGltZUluU2Vjb25kczsKKworICAgIGlmICgh
cG9zZXNbdnI6OmtfdW5UcmFja2VkRGV2aWNlSW5kZXhfSG1kXS5iRGV2aWNlSXNDb25uZWN0ZWQK
KyAgICAgICAgfHwgIXBvc2VzW3ZyOjprX3VuVHJhY2tlZERldmljZUluZGV4X0htZF0uYlBvc2VJ
c1ZhbGlkCisgICAgICAgIHx8IHBvc2VzW3ZyOjprX3VuVHJhY2tlZERldmljZUluZGV4X0htZF0u
ZVRyYWNraW5nUmVzdWx0ICE9IHZyOjpUcmFja2luZ1Jlc3VsdF9SdW5uaW5nX09LKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBJbml0IHNvbWUgZGF0YSBtYXliZT8/Py4KKyAgICAgICAgcmV0dXJuIG1f
dHJhY2tpbmdJbmZvOworICAgIH0KKworICAgIGNvbnN0IGF1dG8mIEhNRFBvc2UgPSBwb3Nlc1t2
cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWRdOworICAgIGNvbnN0IGF1dG8mIHRyYW5zZm9y
bSA9IEhNRFBvc2UubURldmljZVRvQWJzb2x1dGVUcmFja2luZzsKKyAgICBtX3RyYWNraW5nSW5m
by5vcmllbnRhdGlvbiA9IHJvdGF0aW9uTWF0cml4VG9RdWF0ZXJuaW9uKHRyYW5zZm9ybS5tKTsK
KyAgICBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+Y29uanVnYXRlKCk7CisgICAgbV90cmFj
a2luZ0luZm8ucG9zaXRpb24gPSBGbG9hdFBvaW50M0QodHJhbnNmb3JtLm1bMF1bM10sIHRyYW5z
Zm9ybS5tWzFdWzNdLCB0cmFuc2Zvcm0ubVsyXVszXSk7CisgICAgbV90cmFja2luZ0luZm8uYW5n
dWxhclZlbG9jaXR5ID0gVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6RmxvYXQzKEhNRFBvc2UudkFu
Z3VsYXJWZWxvY2l0eS52WzBdLCBITURQb3NlLnZBbmd1bGFyVmVsb2NpdHkudlsxXSwgSE1EUG9z
ZS52QW5ndWxhclZlbG9jaXR5LnZbMl0pOworICAgIG1fdHJhY2tpbmdJbmZvLmxpbmVhclZlbG9j
aXR5ID0gVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6RmxvYXQzKEhNRFBvc2UudlZlbG9jaXR5LnZb
MF0sIEhNRFBvc2UudlZlbG9jaXR5LnZbMV0sIEhNRFBvc2UudlZlbG9jaXR5LnZbMl0pOworCisg
ICAgcmV0dXJuIG1fdHJhY2tpbmdJbmZvOworfQorCiB9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gVVNFKE9QRU5WUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmgKaW5kZXggMGI5MzNm
MzI0ZmU1NzlhMjgwMmZkNjRhY2U1MGQ1MzFjMTM5ZjNkNC4uM2FiZTNkYWMwNzllMWQ5MGNhYTBh
ODVlMTViMmRkNjVlYzNiM2EyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmgKQEAgLTM0LDYgKzM0
LDcgQEAgcHVibGljOgogCiAgICAgflZSUGxhdGZvcm1EaXNwbGF5T3BlblZSKCkgPSBkZWZhdWx0
OwogICAgIFZSUGxhdGZvcm1EaXNwbGF5SW5mbyBnZXREaXNwbGF5SW5mbygpIG92ZXJyaWRlIHsg
cmV0dXJuIG1fZGlzcGxheUluZm87IH0KKyAgICBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvIGdldFRy
YWNraW5nSW5mbygpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFZSUGxhdGZvcm1EaXNwbGF5
SW5mbzo6RmllbGRPZlZpZXcgY29tcHV0ZUZpZWxkT2ZWaWV3KHZyOjpIbWRfRXllKTsKQEAgLTQ3
LDYgKzQ4LDcgQEAgcHJpdmF0ZToKICAgICB2cjo6SVZSQ29tcG9zaXRvciogbV9jb21wb3NpdG9y
OwogCiAgICAgVlJQbGF0Zm9ybURpc3BsYXlJbmZvIG1fZGlzcGxheUluZm87CisgICAgVlJQbGF0
Zm9ybVRyYWNraW5nSW5mbyBtX3RyYWNraW5nSW5mbzsKIH07CiAKIH07IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337349</attachid>
            <date>2018-04-06 02:08:21 -0700</date>
            <delta_ts>2018-04-06 02:11:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184265-20180406110819.patch</filename>
            <type>text/plain</type>
            <size>25845</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5ODkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZiZDVkNmZiM2IxMTQ0
ZGZjODMwNDBhZmQzNTZjM2EyZGQyZDJlMi4uZjUyMTI4ZDkyNmM0YzE1YzczNzJlNDZkOTZlNzU5
OGQ5NGM1ZDNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE4LTA0LTAzICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtPcGVuVlJd
W1dlYlZSXSBSZXRyaWV2ZSBGcmFtZURhdGEgaW4gV2ViVlIncyByQUYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZSRnJhbWVEYXRhIGNvbnRhaW5zIGFs
bCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgcmVuZGVyIGEgVlIgc2NlbmUg
bGlrZSB2aWV3CisgICAgICAgIGFuZCBwcm9qZWN0aW9uIG1hdHJpY2VzLCBwb3NlIGRhdGEgKHBv
c2l0aW9uICYgb3JpZW50YXRpb24pIGFuZCBsaW5lYXIgJiBhbmd1bGFyIHZlbG9jaXR5CisgICAg
ICAgIGFtb25nIG90aGVycy4gVGhlIGdldEZyYW1lRGF0YSgpIGNhbGwgbXVzdCBiZSBpc3N1ZWQg
aW5zaWRlIGEgV2ViVlIncyBvd24KKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VlJEaXNwbGF5OjpnZXRGcmFtZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJEaXNw
bGF5OjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6Y2FuY2VsQW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Lmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlZSRXllUGFyYW1ldGVyczo6cmF3T2Zmc2V0IGNvbnN0KTogUmVxdWlyZWQgdG8gY29tcHV0ZSB2
aWV3IG1hdHJpY2VzLgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWF0cml4VG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWUkZy
YW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VlJGcmFtZURhdGE6OmxlZnRWaWV3TWF0cml4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZS
RnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VlJGcmFtZURhdGE6OnJpZ2h0Vmlld01hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OnJv
dGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlIZWFk
VG9FeWVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VlJGcmFtZURhdGE6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnZyL1ZSUG9zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcHRpb25hbEZsb2F0M1RvSlNDQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpwb3NpdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpWUlBvc2U6OmxpbmVhclZlbG9jaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlZSUG9zZTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjph
bmd1bGFyVmVsb2NpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjphbmd1bGFy
QWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSUG9zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQ
b3NlOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpWUlBvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpW
UlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpRdWF0ZXJuaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb246OmNvbmp1Z2F0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6VlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6Rmxv
YXQzOjpGbG9hdDMpOiBKdXN0IGEgZ3JvdXAgb2YgMyBmbG9hdHMgdXNlZCB0byBzdG9yZQorICAg
ICAgICBib3RoIHZlbG9jaXR5IGFuZCBhY2NlbGVyYXRpb24gaW4gYSBmb3JtYXQgd2hpY2ggaXMg
dmVyeSBjb252ZW5pZW50IHRvIGxhdGVyIGdlbmVyYXRlIEpTQworICAgICAgICBhcnJheXMuCisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpjbGVhcik6CisgICAgICAg
ICogcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUik6CisgICAgICAgIChXZWJDb3JlOjpyb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZv
KToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIu
aDoKKwogMjAxOC0wMy0yMyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWIgQW5pbWF0aW9uc10gaW5maW5pdGUgcmVwZWF0IGNvdW50cyBhcmVuJ3QgcmVm
bGVjdGVkIGZvciBDU1MgQW5pbWF0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9W
UkRpc3BsYXkuY3BwCmluZGV4IDNmMGNjYzEwNmQxZTVkODllOTljZTY5Nzk5ZWIyZmQzMWMyNzIx
YTEuLmQ1MzcwNTMyNDRhMGIxZjU1YjhhMjk0ZjI3Yjc4YTdhNGMxNTBhZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAKQEAgLTI2LDggKzI2LDEyIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVlJEaXNwbGF5LmgiCiAKKyNpbmNsdWRlICJD
aHJvbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiVlJFeWVQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiVlJGcmFtZURhdGEuaCIKICNpbmNsdWRl
ICJWUkxheWVySW5pdC5oIgogI2luY2x1ZGUgIlZSUGxhdGZvcm1EaXNwbGF5LmgiCiAjaW5jbHVk
ZSAiVlJQb3NlLmgiCkBAIC04NSwyNyArODksNDcgQEAgY29uc3QgVlJFeWVQYXJhbWV0ZXJzJiBW
UkRpc3BsYXk6OmdldEV5ZVBhcmFtZXRlcnMoVlJFeWUgZXllKSBjb25zdAogICAgIHJldHVybiBl
eWUgPT0gVlJFeWU6OkxlZnQgPyAqbV9sZWZ0RXllUGFyYW1ldGVycyA6ICptX3JpZ2h0RXllUGFy
YW1ldGVyczsKIH0KIAotYm9vbCBWUkRpc3BsYXk6OmdldEZyYW1lRGF0YShWUkZyYW1lRGF0YSYp
IGNvbnN0Citib29sIFZSRGlzcGxheTo6Z2V0RnJhbWVEYXRhKFZSRnJhbWVEYXRhJiBmcmFtZURh
dGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jYXBhYmlsaXRpZXMt
Pmhhc1Bvc2l0aW9uKCkgfHwgIW1fY2FwYWJpbGl0aWVzLT5oYXNPcmllbnRhdGlvbigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogZW5zdXJlIHRoYXQgdGhpcyBpcyBv
bmx5IGNhbGxlZCBpbnNpZGUgV2ViVlIncyByQUYuCisgICAgZnJhbWVEYXRhLnVwZGF0ZShtX2Rp
c3BsYXktPmdldFRyYWNraW5nSW5mbygpLCBnZXRFeWVQYXJhbWV0ZXJzKFZSRXllOjpMZWZ0KSwg
Z2V0RXllUGFyYW1ldGVycyhWUkV5ZTo6UmlnaHQpLCBtX2RlcHRoTmVhciwgbV9kZXB0aEZhcik7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFJlZjxWUlBvc2U+IFZSRGlzcGxheTo6Z2V0UG9zZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFZSUG9zZTo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIFZSUG9z
ZTo6Y3JlYXRlKG1fZGlzcGxheS0+Z2V0VHJhY2tpbmdJbmZvKCkpOwogfQogCiB2b2lkIFZSRGlz
cGxheTo6cmVzZXRQb3NlKCkKIHsKIH0KIAotbG9uZyBWUkRpc3BsYXk6OnJlcXVlc3RBbmltYXRp
b25GcmFtZShSZWY8UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+JiYpCit1aW50MzJfdCBW
UkRpc3BsYXk6OnJlcXVlc3RBbmltYXRpb25GcmFtZShSZWY8UmVxdWVzdEFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgYXV0byogZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBp
ZiAoIW1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKSB7CisjaWYgVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICAgICAgLy8gRklYTUU6IEdldCB0aGUg
ZGlzcGxheSBpZCBvZiB0aGUgSE1EIGFzIGl0IHNob3VsZCB1c2UgdGhlIEhNRCBuYXRpdmUgcmVm
cmVzaCByYXRlLgorICAgICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQgPSBkb2N1bWVu
dC0+cGFnZSgpID8gZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuZGlzcGxheUlEKCkgOiAwOwor
ICAgICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IFNjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlcjo6Y3JlYXRlKCpkb2N1bWVudCwgZGlzcGxheUlEKTsKKyNlbHNlCisgICAgICAg
IG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUoKmRvY3VtZW50LCAwKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBt
X3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+cmVnaXN0ZXJDYWxsYmFjayhXVEZNb3ZlKGNh
bGxiYWNrKSk7CiB9CiAKLXZvaWQgVlJEaXNwbGF5OjpjYW5jZWxBbmltYXRpb25GcmFtZSh1bnNp
Z25lZCkKK3ZvaWQgVlJEaXNwbGF5OjpjYW5jZWxBbmltYXRpb25GcmFtZSh1aW50MzJfdCBpZCkK
IHsKKyAgICBpZiAoIW1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+Y2FuY2VsQ2FsbGJhY2so
aWQpOwogfQogCiB2b2lkIFZSRGlzcGxheTo6cmVxdWVzdFByZXNlbnQoY29uc3QgVmVjdG9yPFZS
TGF5ZXJJbml0PiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ2ci9WUkRpc3BsYXkuaAppbmRleCBhMjQyZTQ0YTFkZjAyZTI4NjdmMDQyZGY4NGVlMzVj
Y2EyMmRiNTk5Li4zNjQ3ZTZkMmEyMGJkOTAxZmQxMGQzOGEzZjUwZjY4NGUxYTkxMzU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmgKQEAgLTM0LDYgKzM0LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJh
Y2s7CitjbGFzcyBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBWUkRpc3BsYXlD
YXBhYmlsaXRpZXM7CiBjbGFzcyBWUkV5ZVBhcmFtZXRlcnM7CiBjbGFzcyBWUkZyYW1lRGF0YTsK
QEAgLTcyLDggKzczLDggQEAgcHVibGljOgogICAgIGRvdWJsZSBkZXB0aEZhcigpIGNvbnN0IHsg
cmV0dXJuIG1fZGVwdGhGYXI7IH0KICAgICB2b2lkIHNldERlcHRoRmFyKGRvdWJsZSBkZXB0aEZh
cikgeyBtX2RlcHRoRmFyID0gZGVwdGhGYXI7IH0KIAotICAgIGxvbmcgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJik7Ci0gICAgdm9pZCBj
YW5jZWxBbmltYXRpb25GcmFtZSh1bnNpZ25lZCk7CisgICAgdWludDMyX3QgcmVxdWVzdEFuaW1h
dGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJik7CisgICAgdm9p
ZCBjYW5jZWxBbmltYXRpb25GcmFtZSh1aW50MzJfdCk7CiAKICAgICB2b2lkIHJlcXVlc3RQcmVz
ZW50KGNvbnN0IFZlY3RvcjxWUkxheWVySW5pdD4mLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsK
ICAgICB2b2lkIGV4aXRQcmVzZW50KFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwpAQCAtMTExLDYg
KzExMiw4IEBAIHByaXZhdGU6CiAKICAgICBkb3VibGUgbV9kZXB0aE5lYXIgeyAwLjAxIH07IC8v
IERlZmF1bHQgdmFsdWUgZnJvbSB0aGUgc3BlY3MuCiAgICAgZG91YmxlIG1fZGVwdGhGYXIgeyAx
MDAwMCB9OyAvLyBEZWZhdWx0IHZhbHVlIGZyb20gdGhlIHNwZWNzLgorCisgICAgUmVmUHRyPFNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaAppbmRleCA2YTg5ZDg5ODIwYTA0MTQ0ODM1YjU0Yjc5
MDdhYzhkMjIzMGMyYmJjLi5mMzBkMGZiZDY1NGExZDFmMTg4YTFmNDM5ZDMwMzA4MGZjYTY0ODJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFyYW1ldGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJFeWVQYXJhbWV0ZXJzLmgK
QEAgLTQzLDYgKzQzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFJlZjxGbG9hdDMyQXJyYXk+
IG9mZnNldCgpIGNvbnN0OworICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcmF3T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KIAogICAgIGNvbnN0IFZSRmllbGRPZlZpZXcmIGZpZWxk
T2ZWaWV3KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
dnIvVlJGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1l
RGF0YS5jcHAKaW5kZXggNWI4NDliZjI5MGY5Y2Q4OTA1NmRlODY2ZGI5NGZkODY0MWIwNjI5OC4u
OTI3OTdlYTkwOGI3YzQ5MmFhZTUxZjFmNzQyZjM2YzQ0NjhkYjcwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5jcHAKQEAgLTI1LDYgKzI1LDkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWUkZyYW1lRGF0YS5oIgogCisjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJWUkV5ZVBhcmFtZXRlcnMuaCIKKyNp
bmNsdWRlICJWUlBsYXRmb3JtRGlzcGxheS5oIgogI2luY2x1ZGUgIlZSUG9zZS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zNCwyOSArMzcsMzEgQEAgVlJGcmFtZURhdGE6OlZSRnJhbWVE
YXRhKCkKIHsKIH0KIAotZG91YmxlIFZSRnJhbWVEYXRhOjp0aW1lc3RhbXAoKSBjb25zdAorc3Rh
dGljIFJlZjxGbG9hdDMyQXJyYXk+IG1hdHJpeFRvQXJyYXkoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6RmxvYXRNYXRyaXg0IGNvbHVtbk1ham9yTWF0cml4OworICAgIG1hdHJpeC50b0NvbHVtbk1h
am9yRmxvYXRBcnJheShjb2x1bW5NYWpvck1hdHJpeCk7CisgICAgcmV0dXJuIEZsb2F0MzJBcnJh
eTo6Y3JlYXRlKGNvbHVtbk1ham9yTWF0cml4LCAxNikucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
RmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXgoKSBjb25zdAor
UmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6OmxlZnRQcm9qZWN0aW9uTWF0cml4KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbWF0cml4VG9BcnJheShtX2xl
ZnRQcm9qZWN0aW9uTWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0YTo6bGVm
dFZpZXdNYXRyaXgoKSBjb25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6OmxlZnRW
aWV3TWF0cml4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbWF0
cml4VG9BcnJheShtX2xlZnRWaWV3TWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1l
RGF0YTo6cmlnaHRQcm9qZWN0aW9uTWF0cml4KCkgY29uc3QKK1JlZjxGbG9hdDMyQXJyYXk+IFZS
RnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdAogewotICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5KG1fcmlnaHRQcm9qZWN0aW9uTWF0cml4
KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0YTo6cmlnaHRWaWV3TWF0cml4KCkgY29u
c3QKK1JlZjxGbG9hdDMyQXJyYXk+IFZSRnJhbWVEYXRhOjpyaWdodFZpZXdNYXRyaXgoKSBjb25z
dAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5KG1fcmln
aHRWaWV3TWF0cml4KTsKIH0KIAogY29uc3QgVlJQb3NlJiBWUkZyYW1lRGF0YTo6cG9zZSgpIGNv
bnN0CkBAIC02NCw0ICs2OSw4OCBAQCBjb25zdCBWUlBvc2UmIFZSRnJhbWVEYXRhOjpwb3NlKCkg
Y29uc3QKICAgICByZXR1cm4gbV9wb3NlOwogfQogCitzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRy
aXggcHJvamVjdGlvbk1hdHJpeEZyb21GaWVsZE9mVmlldyhjb25zdCBWUkZpZWxkT2ZWaWV3JiBm
b3YsIGRvdWJsZSBkZXB0aE5lYXIsIGRvdWJsZSBkZXB0aEZhcikKK3sKKyAgICBkb3VibGUgdXBU
YW4gPSB0YW4oZGVnMnJhZChmb3YudXBEZWdyZWVzKCkpKTsKKyAgICBkb3VibGUgZG93blRhbiA9
IHRhbihkZWcycmFkKGZvdi5kb3duRGVncmVlcygpKSk7CisgICAgZG91YmxlIGxlZnRUYW4gPSB0
YW4oZGVnMnJhZChmb3YubGVmdERlZ3JlZXMoKSkpOworICAgIGRvdWJsZSByaWdodFRhbiA9IHRh
bihkZWcycmFkKGZvdi5yaWdodERlZ3JlZXMoKSkpOworCisgICAgZG91YmxlIHhTY2FsZSA9IDIg
LyAobGVmdFRhbiArIHJpZ2h0VGFuKTsKKyAgICBkb3VibGUgeVNjYWxlID0gMiAvICh1cFRhbiAr
IGRvd25UYW4pOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsK
KyAgICBwcm9qZWN0aW9uTWF0cml4LnNldE0xMSh4U2NhbGUpOworICAgIHByb2plY3Rpb25NYXRy
aXguc2V0TTIyKHlTY2FsZSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMzIoKHVwVGFuIC0g
ZG93blRhbikgKiB5U2NhbGUgKiAwLjUpOworICAgIHByb2plY3Rpb25NYXRyaXguc2V0TTMxKC0o
KGxlZnRUYW4gLSByaWdodFRhbikgKiB4U2NhbGUgKiAwLjUpKTsKKyAgICBwcm9qZWN0aW9uTWF0
cml4LnNldE0zMygoZGVwdGhOZWFyICsgZGVwdGhGYXIpIC8gKGRlcHRoTmVhciAtIGRlcHRoRmFy
KSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMzQoLTEpOworICAgIHByb2plY3Rpb25NYXRy
aXguc2V0TTQzKCgyICogZGVwdGhGYXIgKiBkZXB0aE5lYXIpIC8gKGRlcHRoTmVhciAtIGRlcHRo
RmFyKSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNNDQoMCk7CisKKyAgICByZXR1cm4gcHJv
amVjdGlvbk1hdHJpeDsKK30KKworLy8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0
aHMvZ2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL3F1YXRlcm5pb25Ub01hdHJpeC9pbmRl
eC5odG0KK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbk1hdHJpeEZyb21RdWF0
ZXJuaW9uKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24mIHF1YXRlcm5p
b24pCit7CisgICAgZG91YmxlIG1hZ25pdHVkZSA9IChxdWF0ZXJuaW9uLnggKiBxdWF0ZXJuaW9u
LngpICsgKHF1YXRlcm5pb24ueSAqIHF1YXRlcm5pb24ueSkgKyAocXVhdGVybmlvbi56ICogcXVh
dGVybmlvbi56KSArIChxdWF0ZXJuaW9uLncgKiBxdWF0ZXJuaW9uLncpOworICAgIFZSUGxhdGZv
cm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24gbm9ybWFsaXplZFF1YXRlcm5pb24ocXVhdGVybmlv
bi54IC8gbWFnbml0dWRlLCBxdWF0ZXJuaW9uLnkgLyBtYWduaXR1ZGUsIHF1YXRlcm5pb24ueiAv
IG1hZ25pdHVkZSwgcXVhdGVybmlvbi53IC8gbWFnbml0dWRlKTsKKyAgICBkb3VibGUgeDIgPSBu
b3JtYWxpemVkUXVhdGVybmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24ueDsKKyAgICBkb3Vi
bGUgeTIgPSBub3JtYWxpemVkUXVhdGVybmlvbi55ICogbm9ybWFsaXplZFF1YXRlcm5pb24ueTsK
KyAgICBkb3VibGUgejIgPSBub3JtYWxpemVkUXVhdGVybmlvbi56ICogbm9ybWFsaXplZFF1YXRl
cm5pb24uejsKKyAgICBkb3VibGUgdzIgPSBub3JtYWxpemVkUXVhdGVybmlvbi53ICogbm9ybWFs
aXplZFF1YXRlcm5pb24udzsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAg
ICBtYXRyaXguc2V0TTExKHgyIC0geTIgLSB6MiArIHcyKTsKKyAgICBtYXRyaXguc2V0TTIyKC14
MiArIHkyIC0gejIgKyB3Mik7CisgICAgbWF0cml4LnNldE0zMygteDIgLSB5MiArIHoyICsgdzIp
OworCisgICAgZG91YmxlIHh5ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueCAqIG5vcm1hbGl6ZWRR
dWF0ZXJuaW9uLnk7CisgICAgZG91YmxlIHp3ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueiAqIG5v
cm1hbGl6ZWRRdWF0ZXJuaW9uLnc7CisgICAgbWF0cml4LnNldE0yMSgyLjAgKiAoeHkgKyB6dykp
OworICAgIG1hdHJpeC5zZXRNMTIoMi4wICogKHh5IC0gencpKTsKKworICAgIGRvdWJsZSB4eiA9
IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnggKiBub3JtYWxpemVkUXVhdGVybmlvbi56OworICAgIGRv
dWJsZSB5dyA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnkgKiBub3JtYWxpemVkUXVhdGVybmlvbi53
OworICAgIG1hdHJpeC5zZXRNMzEoMi4wICogKHh6IC0geXcpKTsKKyAgICBtYXRyaXguc2V0TTEz
KDIuMCAqICh4eiArIHl3KSk7CisKKyAgICBkb3VibGUgeXogPSBub3JtYWxpemVkUXVhdGVybmlv
bi55ICogbm9ybWFsaXplZFF1YXRlcm5pb24uejsKKyAgICBkb3VibGUgeHcgPSBub3JtYWxpemVk
UXVhdGVybmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24udzsKKyAgICBtYXRyaXguc2V0TTMy
KDIuMCAqICh5eiArIHh3KSk7CisgICAgbWF0cml4LnNldE0yMygyLjAgKiAoeXogLSB4dykpOwor
CisgICAgcmV0dXJuIG1hdHJpeDsKK30KKworc3RhdGljIHZvaWQgYXBwbHlIZWFkVG9FeWVUcmFu
c2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRQb2ludDNEJiB0
cmFuc2xhdGlvbikKK3sKKyAgICBtYXRyaXguc2V0TTQxKG1hdHJpeC5tNDEoKSAtIHRyYW5zbGF0
aW9uLngoKSk7CisgICAgbWF0cml4LnNldE00MihtYXRyaXgubTQyKCkgLSB0cmFuc2xhdGlvbi55
KCkpOworICAgIG1hdHJpeC5zZXRNNDMobWF0cml4Lm00MygpIC0gdHJhbnNsYXRpb24ueigpKTsK
K30KKwordm9pZCBWUkZyYW1lRGF0YTo6dXBkYXRlKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0lu
Zm8mIHRyYWNraW5nSW5mbywgY29uc3QgVlJFeWVQYXJhbWV0ZXJzJiBsZWZ0RXllLCBjb25zdCBW
UkV5ZVBhcmFtZXRlcnMmIHJpZ2h0RXllLCBkb3VibGUgZGVwdGhOZWFyLCBkb3VibGUgZGVwdGhG
YXIpCit7CisgICAgbV9sZWZ0UHJvamVjdGlvbk1hdHJpeCA9IHByb2plY3Rpb25NYXRyaXhGcm9t
RmllbGRPZlZpZXcobGVmdEV5ZS5maWVsZE9mVmlldygpLCBkZXB0aE5lYXIsIGRlcHRoRmFyKTsK
KyAgICBtX3JpZ2h0UHJvamVjdGlvbk1hdHJpeCA9IHByb2plY3Rpb25NYXRyaXhGcm9tRmllbGRP
ZlZpZXcocmlnaHRFeWUuZmllbGRPZlZpZXcoKSwgZGVwdGhOZWFyLCBkZXB0aEZhcik7CisKKyAg
ICBtX3RpbWVzdGFtcCA9IHRyYWNraW5nSW5mby50aW1lc3RhbXA7CisgICAgbV9wb3NlLT51cGRh
dGUodHJhY2tpbmdJbmZvKTsKKworICAgIGF1dG8gcm90YXRpb25NYXRyaXggPSByb3RhdGlvbk1h
dHJpeEZyb21RdWF0ZXJuaW9uKHRyYWNraW5nSW5mby5vcmllbnRhdGlvbi52YWx1ZV9vcihWUlBs
YXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKSk7CisgICAgRmxvYXRQ
b2ludDNEIHBvc2l0aW9uID0gdHJhY2tpbmdJbmZvLnBvc2l0aW9uLnZhbHVlX29yKEZsb2F0UG9p
bnQzRCgwLCAwLCAwKSk7CisgICAgcm90YXRpb25NYXRyaXgudHJhbnNsYXRlM2QoLXBvc2l0aW9u
LngoKSwgLXBvc2l0aW9uLnkoKSwgLXBvc2l0aW9uLnooKSk7CisKKyAgICBGbG9hdFBvaW50M0Qg
bGVmdEV5ZU9mZnNldCA9IGxlZnRFeWUucmF3T2Zmc2V0KCk7CisgICAgbV9sZWZ0Vmlld01hdHJp
eCA9IHJvdGF0aW9uTWF0cml4OworICAgIGFwcGx5SGVhZFRvRXllVHJhbnNmb3JtKG1fbGVmdFZp
ZXdNYXRyaXgsIGxlZnRFeWVPZmZzZXQpOworCisgICAgRmxvYXRQb2ludDNEIHJpZ2h0RXllT2Zm
c2V0ID0gcmlnaHRFeWUucmF3T2Zmc2V0KCk7CisgICAgbV9yaWdodFZpZXdNYXRyaXggPSByb3Rh
dGlvbk1hdHJpeDsKKyAgICBhcHBseUhlYWRUb0V5ZVRyYW5zZm9ybShtX3JpZ2h0Vmlld01hdHJp
eCwgcmlnaHRFeWVPZmZzZXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmgKaW5kZXggNzAzZDZiYzBmMjcwMDdl
ODdiNjczZWFhMDI1NzMxZWIwNjUyYjI1Ny4uNDlhZGE4ODlmNWM5MTg4YzgyMTg5MzNkMTE0Y2Y0
NWFiMzJjNmM4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZy
YW1lRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEu
aApAQCAtMjksNiArMjksOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OworY2xhc3MgVlJFeWVQYXJhbWV0ZXJzOworY2xhc3MgVlJQbGF0Zm9y
bVRyYWNraW5nSW5mbzsKIGNsYXNzIFZSUG9zZTsKIAogY2xhc3MgVlJGcmFtZURhdGEgOiBwdWJs
aWMgUmVmQ291bnRlZDxWUkZyYW1lRGF0YT4gewpAQCAtMzgsMjAgKzQxLDI3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlJGcmFtZURhdGEpOwogICAgIH0KIAotICAg
IGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdDsKKyAgICBkb3VibGUgdGltZXN0YW1wKCkgY29uc3Qg
eyByZXR1cm4gbV90aW1lc3RhbXA7IH0KIAotICAgIEZsb2F0MzJBcnJheSogbGVmdFByb2plY3Rp
b25NYXRyaXgoKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGxlZnRWaWV3TWF0cml4KCkgY29u
c3Q7CisgICAgUmVmPEZsb2F0MzJBcnJheT4gbGVmdFByb2plY3Rpb25NYXRyaXgoKSBjb25zdDsK
KyAgICBSZWY8RmxvYXQzMkFycmF5PiBsZWZ0Vmlld01hdHJpeCgpIGNvbnN0OwogCi0gICAgRmxv
YXQzMkFycmF5KiByaWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdDsKLSAgICBGbG9hdDMyQXJy
YXkqIHJpZ2h0Vmlld01hdHJpeCgpIGNvbnN0OworICAgIFJlZjxGbG9hdDMyQXJyYXk+IHJpZ2h0
UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0OworICAgIFJlZjxGbG9hdDMyQXJyYXk+IHJpZ2h0Vmll
d01hdHJpeCgpIGNvbnN0OwogCiAgICAgY29uc3QgVlJQb3NlJiBwb3NlKCkgY29uc3Q7CiAKKyAg
ICB2b2lkIHVwZGF0ZShjb25zdCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvJiwgY29uc3QgVlJFeWVQ
YXJhbWV0ZXJzJiBsZWZ0RXllLCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIHJpZ2h0RXllLCBkb3Vi
bGUgZGVwdGhOZWFyLCBkb3VibGUgZGVwdGhGYXIpOworCiBwcml2YXRlOgogICAgIFZSRnJhbWVE
YXRhKCk7CiAKKyAgICBkb3VibGUgbV90aW1lc3RhbXA7CiAgICAgUmVmPFZSUG9zZT4gbV9wb3Nl
OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbGVmdFByb2plY3Rpb25NYXRyaXg7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9yaWdodFByb2plY3Rpb25NYXRyaXg7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9sZWZ0Vmlld01hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX3JpZ2h0Vmlld01hdHJpeDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcAppbmRleCAzZGMxNWVkZjU1YmIzN2Q1NWFk
ZTM5N2I2ZDY1MzA2ZDFmZDdiODg5Li43NGE3OGRiMmQxMzQyZjFhYWNlYzVjYTA5YzcwMmNkMDY5
YzMxMGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuY3BwCkBAIC0yNSwz
OCArMjUsNjMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWUlBvc2UuaCIKIAor
I2luY2x1ZGUgIlZSUGxhdGZvcm1EaXNwbGF5LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
VlJQb3NlOjpWUlBvc2UoKSA9IGRlZmF1bHQ7CitzdGF0aWMgUmVmUHRyPEZsb2F0MzJBcnJheT4g
b3B0aW9uYWxGbG9hdDNUb0pTQ0FycmF5KGNvbnN0IHN0ZDo6b3B0aW9uYWw8VlJQbGF0Zm9ybVRy
YWNraW5nSW5mbzo6RmxvYXQzPiYgZGF0YSkKK3sKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIEZsb2F0MzJBcnJheTo6Y3JlYXRlKGRhdGEtPmRh
dGEsIDMpLnJlbGVhc2VOb25OdWxsKCk7Cit9CiAKLUZsb2F0MzJBcnJheSogVlJQb3NlOjpwb3Np
dGlvbigpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OnBvc2l0aW9uKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fdHJhY2tpbmdJbmZvLnBvc2l0
aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcG9zaXRpb24gPSBGbG9h
dDMyQXJyYXk6OmNyZWF0ZSgzKTsKKyAgICBmbG9hdCogcG9zaXRpb25EYXRhID0gcG9zaXRpb24t
PmRhdGEoKTsKKyAgICBwb3NpdGlvbkRhdGFbMF0gPSBtX3RyYWNraW5nSW5mby5wb3NpdGlvbi0+
eCgpOworICAgIHBvc2l0aW9uRGF0YVsxXSA9IG1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uLT55KCk7
CisgICAgcG9zaXRpb25EYXRhWzJdID0gbV90cmFja2luZ0luZm8ucG9zaXRpb24tPnooKTsKKyAg
ICByZXR1cm4gcG9zaXRpb24ucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotRmxvYXQzMkFycmF5KiBW
UlBvc2U6OmxpbmVhclZlbG9jaXR5KCkgY29uc3QKK1JlZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9z
ZTo6bGluZWFyVmVsb2NpdHkoKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBvcHRpb25hbEZsb2F0M1RvSlNDQXJyYXkobV90cmFja2luZ0luZm8ubGluZWFyVmVsb2Np
dHkpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uKCkgY29u
c3QKK1JlZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gb3B0aW9uYWxGbG9hdDNUb0pT
Q0FycmF5KG1fdHJhY2tpbmdJbmZvLmxpbmVhckFjY2VsZXJhdGlvbik7CiB9CiAKLUZsb2F0MzJB
cnJheSogVlJQb3NlOjpvcmllbnRhdGlvbigpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBW
UlBvc2U6Om9yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAoIW1fdHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gb3JpZW50YXRpb24gPSBGbG9hdDMyQXJyYXk6OmNyZWF0ZSg0KTsKKyAgICBm
bG9hdCogb3JpZW50YXRpb25EYXRhID0gb3JpZW50YXRpb24tPmRhdGEoKTsKKyAgICBvcmllbnRh
dGlvbkRhdGFbMF0gPSBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+eDsKKyAgICBvcmllbnRh
dGlvbkRhdGFbMV0gPSBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+eTsKKyAgICBvcmllbnRh
dGlvbkRhdGFbMl0gPSBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+ejsKKyAgICBvcmllbnRh
dGlvbkRhdGFbM10gPSBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+dzsKKyAgICByZXR1cm4g
b3JpZW50YXRpb24ucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6
OmFuZ3VsYXJWZWxvY2l0eSgpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OmFu
Z3VsYXJWZWxvY2l0eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IG9wdGlvbmFsRmxvYXQzVG9KU0NBcnJheShtX3RyYWNraW5nSW5mby5hbmd1bGFyVmVsb2NpdHkp
OwogfQogCi1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6YW5ndWxhckFjY2VsZXJhdGlvbigpIGNvbnN0
CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OmFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25z
dAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBvcHRpb25hbEZsb2F0M1RvSlND
QXJyYXkobV90cmFja2luZ0luZm8uYW5ndWxhckFjY2VsZXJhdGlvbik7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIv
VlJQb3NlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5oCmluZGV4IDJl
ZjBhZTNjNjA3N2RhMDI3MmRjNTMxNGZkODBjYzFhMzBlNzc1NDIuLjFmNDU2NzZjMzE1NTY4M2Ji
Y2ZhOTNlNmUyYTk3MTFhMzkwZDBjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2VidnIvVlJQb3NlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBv
c2UuaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFZS
UGxhdGZvcm1UcmFja2luZ0luZm87CisKIGNsYXNzIFZSUG9zZSA6IHB1YmxpYyBSZWZDb3VudGVk
PFZSUG9zZT4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8VlJQb3NlPiBjcmVhdGUoKQpAQCAt
MzYsMTYgKzM4LDMwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlJQ
b3NlKTsKICAgICB9CiAKLSAgICBGbG9hdDMyQXJyYXkqIHBvc2l0aW9uKCkgY29uc3Q7Ci0gICAg
RmxvYXQzMkFycmF5KiBsaW5lYXJWZWxvY2l0eSgpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSog
bGluZWFyQWNjZWxlcmF0aW9uKCkgY29uc3Q7CisgICAgc3RhdGljIFJlZjxWUlBvc2U+IGNyZWF0
ZShjb25zdCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvJiB0cmFja2luZ0luZm8pCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWUlBvc2UodHJhY2tpbmdJbmZvKSk7CisgICAgfQor
CisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gcG9zaXRpb24oKSBjb25zdDsKKyAgICBSZWZQdHI8
RmxvYXQzMkFycmF5PiBsaW5lYXJWZWxvY2l0eSgpIGNvbnN0OworICAgIFJlZlB0cjxGbG9hdDMy
QXJyYXk+IGxpbmVhckFjY2VsZXJhdGlvbigpIGNvbnN0OworCisgICAgUmVmUHRyPEZsb2F0MzJB
cnJheT4gb3JpZW50YXRpb24oKSBjb25zdDsKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBhbmd1
bGFyVmVsb2NpdHkoKSBjb25zdDsKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBhbmd1bGFyQWNj
ZWxlcmF0aW9uKCkgY29uc3Q7CiAKLSAgICBGbG9hdDMyQXJyYXkqIG9yaWVudGF0aW9uKCkgY29u
c3Q7Ci0gICAgRmxvYXQzMkFycmF5KiBhbmd1bGFyVmVsb2NpdHkoKSBjb25zdDsKLSAgICBGbG9h
dDMyQXJyYXkqIGFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZShj
b25zdCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvJiB0cmFja2luZ0luZm8pIHsgbV90cmFja2luZ0lu
Zm8gPSB0cmFja2luZ0luZm87IH07CiAKIHByaXZhdGU6Ci0gICAgVlJQb3NlKCk7CisgICAgVlJQ
b3NlKCkgPSBkZWZhdWx0OworCisgICAgVlJQb3NlKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0lu
Zm8mIHRyYWNraW5nSW5mbykKKyAgICAgICAgOiBtX3RyYWNraW5nSW5mbyh0cmFja2luZ0luZm8p
CisgICAgeworICAgIH0KKworICAgIFZSUGxhdGZvcm1UcmFja2luZ0luZm8gbV90cmFja2luZ0lu
Zm87CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaAppbmRleCA3NmQyYWM2NmYzM2MwNzhlYzk5MWRh
YWFiNDIzNjZjZTkzNmZmMjdhLi5iNDZmNTc2NGE0NDJkZmU4MWQ1OTYzMWEyNjE3YzcyYjcwOTIz
ZDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtRGlz
cGxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5
LmgKQEAgLTEwMyw5ICsxMDMsNjQgQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlvbmFsPFRyYW5z
Zm9ybWF0aW9uTWF0cml4PiBtX3NpdHRpbmdUb1N0YW5kaW5nVHJhbnNmb3JtOwogfTsKIAorc3Ry
dWN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm8geworICAgIHN0cnVjdCBRdWF0ZXJuaW9uIHsKKyAg
ICAgICAgUXVhdGVybmlvbigpCisgICAgICAgICAgICA6IHgoMCksIHkoMCksIHooMCksIHcoMSkg
eyB9CisKKyAgICAgICAgUXVhdGVybmlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9h
dCB3KQorICAgICAgICAgICAgOiB4KHgpLCB5KHkpLCB6KHopLCB3KHcpIHsgfQorCisgICAgICAg
IFF1YXRlcm5pb24mIGNvbmp1Z2F0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHggKj0gLTE7
CisgICAgICAgICAgICB5ICo9IC0xOworICAgICAgICAgICAgeiAqPSAtMTsKKyAgICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIFF1YXRlcm5pb24mIG9wZXJhdG9y
KihmbG9hdCBmYWN0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHggKj0gZmFjdG9yOworICAg
ICAgICAgICAgeSAqPSBmYWN0b3I7CisgICAgICAgICAgICB6ICo9IGZhY3RvcjsKKyAgICAgICAg
ICAgIHcgKj0gZmFjdG9yOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9Cisg
ICAgICAgIGZsb2F0IHgsIHksIHosIHc7CisgICAgfTsKKworICAgIHN0cnVjdCBGbG9hdDMgewor
ICAgICAgICBGbG9hdDMoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgYykKKyAgICAgICAgICAgIDog
ZGF0YSB7IGEsIGIsIGMgfSB7IH0KKworICAgICAgICBmbG9hdCBkYXRhWzNdOworICAgIH07CisK
KyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIHRpbWVzdGFtcCA9IDA7CisgICAgICAg
IHBvc2l0aW9uID0gc3RkOjpudWxsb3B0OworICAgICAgICBvcmllbnRhdGlvbiA9IHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgYW5ndWxhckFjY2VsZXJhdGlvbiA9IHN0ZDo6bnVsbG9wdDsKKyAgICAg
ICAgYW5ndWxhclZlbG9jaXR5ID0gc3RkOjpudWxsb3B0OworICAgICAgICBsaW5lYXJBY2NlbGVy
YXRpb24gPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGxpbmVhclZlbG9jaXR5ID0gc3RkOjpudWxs
b3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8UXVhdGVybmlvbj4gb3JpZW50YXRpb247
CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50M0Q+IHBvc2l0aW9uOworICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXQzPiBhbmd1bGFyQWNjZWxlcmF0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXQzPiBhbmd1bGFyVmVsb2NpdHk7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdDM+IGxpbmVhckFj
Y2VsZXJhdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0Mz4gbGluZWFyVmVsb2NpdHk7Cisg
ICAgZG91YmxlIHRpbWVzdGFtcDsKK307CisKIGNsYXNzIFZSUGxhdGZvcm1EaXNwbGF5IHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFZSUGxhdGZvcm1EaXNwbGF5SW5mbyBnZXREaXNwbGF5SW5mbygp
ID0gMDsKKyAgICB2aXJ0dWFsIFZSUGxhdGZvcm1UcmFja2luZ0luZm8gZ2V0VHJhY2tpbmdJbmZv
KCkgPSAwOwogICAgIHZpcnR1YWwgflZSUGxhdGZvcm1EaXNwbGF5KCkgPSBkZWZhdWx0OwogCiAg
ICAgV2Vha1B0cjxWUlBsYXRmb3JtRGlzcGxheT4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1f
d2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigqdGhpcyk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVu
VlIuY3BwCmluZGV4IDQzOWYxODU4YzY0NzllODFkMjhiYWI0N2MxOGQ1M2QxZTM3NDU3YmMuLmZh
ZGI2ZmMxMzczNjIwNzE1NjkwNzcyNGMwZDhjZTg3ZGM2ZDViMzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5
T3BlblZSLmNwcApAQCAtNTAsNiArNTAsOCBAQCBWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6VlJQ
bGF0Zm9ybURpc3BsYXlPcGVuVlIodnI6OklWUlN5c3RlbSogc3lzdGVtLCB2cjo6SVZSQwogICAg
IC8vIEZJWE1FOiBXZSdyZSBhc3N1bWluZyBhbiBIVEMgVml2ZSBITUQgaGVyZS4gR2V0IHRoaXMg
aW5mbyBmcm9tIE9wZW5WUj8uCiAgICAgbV9kaXNwbGF5SW5mby5zZXRDYXBhYmlsaXR5RmxhZ3Mo
VlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWc6Ok5vbmUgfCBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZzo6
UG9zaXRpb24gfCBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZzo6T3JpZW50YXRpb24gfCBWUkRpc3Bs
YXlDYXBhYmlsaXR5RmxhZzo6RXh0ZXJuYWxEaXNwbGF5IHwgVlJEaXNwbGF5Q2FwYWJpbGl0eUZs
YWc6OlByZXNlbnQpOwogCisgICAgbV9jb21wb3NpdG9yLT5TZXRUcmFja2luZ1NwYWNlKHZyOjpU
cmFja2luZ1VuaXZlcnNlU2VhdGVkKTsKKwogICAgIHVwZGF0ZUV5ZVBhcmFtZXRlcnMoKTsKICAg
ICB1cGRhdGVTdGFnZVBhcmFtZXRlcnMoKTsKIH0KQEAgLTk5LDYgKzEwMSw2MyBAQCB2b2lkIFZS
UGxhdGZvcm1EaXNwbGF5T3BlblZSOjp1cGRhdGVTdGFnZVBhcmFtZXRlcnMoKQogICAgIG1fZGlz
cGxheUluZm8uc2V0UGxheUFyZWFCb3VuZHMoRmxvYXRTaXplKHBsYXlBcmVhV2lkdGgsIHBsYXlB
cmVhRGVwdGgpKTsKIH0KIAorLy8gRklYTUU6IHdlIG1pZ2h0IHdhbnQgdG8gZ2VuZXJhbGl6ZSB0
aGlzIGZ1bmN0aW9uIGZvciBvdGhlciBiYWNrZW5kcy4KK3N0YXRpYyBWUlBsYXRmb3JtVHJhY2tp
bmdJbmZvOjpRdWF0ZXJuaW9uIHJvdGF0aW9uTWF0cml4VG9RdWF0ZXJuaW9uKGNvbnN0IGZsb2F0
ICgmbWF0cml4KVszXVs0XSkKK3sKKyAgICAvLyBTZWUgaHR0cHM6Ly9kM2N3M2RkMnczMngyYi5j
bG91ZGZyb250Lm5ldC93cC1jb250ZW50L3VwbG9hZHMvMjAxNS8wMS9tYXRyaXgtdG8tcXVhdC5w
ZGYuCisgICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6UXVhdGVybmlvbiBxdWF0ZXJuaW9uOwor
ICAgIGZsb2F0IHRyYWNlOworICAgIGlmIChtYXRyaXhbMl1bMl0gPCAwKSB7CisgICAgICAgIGlm
IChtYXRyaXhbMF1bMF0gPiBtYXRyaXhbMV1bMV0pIHsKKyAgICAgICAgICAgIHRyYWNlID0gMSAr
IG1hdHJpeFswXVswXSAtIG1hdHJpeFsxXVsxXSAtIG1hdHJpeFsyXVsyXTsKKyAgICAgICAgICAg
IHF1YXRlcm5pb24gPSB7IHRyYWNlLCBtYXRyaXhbMF1bMV0rbWF0cml4WzFdWzBdLCBtYXRyaXhb
Ml1bMF0rbWF0cml4WzBdWzJdLCBtYXRyaXhbMV1bMl0gLSBtYXRyaXhbMl1bMV0gfTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyYWNlID0gMSAtIG1hdHJpeFswXVswXSArIG1hdHJp
eFsxXVsxXSAtIG1hdHJpeFsyXVsyXTsKKyAgICAgICAgICAgIHF1YXRlcm5pb24gPSB7IG1hdHJp
eFswXVsxXSttYXRyaXhbMV1bMF0sIHRyYWNlLCBtYXRyaXhbMV1bMl0rbWF0cml4WzJdWzFdLCBt
YXRyaXhbMl1bMF0gLSBtYXRyaXhbMF1bMl0gfTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmIChtYXRyaXhbMF1bMF0gPCAtbWF0cml4WzFdWzFdKSB7CisgICAgICAgICAgICB0
cmFjZSA9IDEgLSBtYXRyaXhbMF1bMF0gLSBtYXRyaXhbMV1bMV0gKyBtYXRyaXhbMl1bMl07Cisg
ICAgICAgICAgICBxdWF0ZXJuaW9uID0geyBtYXRyaXhbMl1bMF0rbWF0cml4WzBdWzJdLCBtYXRy
aXhbMV1bMl0rbWF0cml4WzJdWzFdLCB0cmFjZSAsIG1hdHJpeFswXVsxXSAtIG1hdHJpeFsxXVsw
XSB9OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHJhY2UgPSAxICsgbWF0cml4WzBd
WzBdICsgbWF0cml4WzFdWzFdICsgbWF0cml4WzJdWzJdOworICAgICAgICAgICAgcXVhdGVybmlv
biA9IHsgbWF0cml4WzFdWzJdIC0gbWF0cml4WzJdWzFdLCBtYXRyaXhbMl1bMF0gLSBtYXRyaXhb
MF1bMl0sIG1hdHJpeFswXVsxXSAtIG1hdHJpeFsxXVswXSwgdHJhY2UgfTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcXVhdGVybmlvbiAqICgwLjUgLyBzcXJ0KHRyYWNlKSk7Cit9CisK
K1ZSUGxhdGZvcm1UcmFja2luZ0luZm8gVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI6OmdldFRyYWNr
aW5nSW5mbygpCit7CisgICAgdnI6OlRyYWNrZWREZXZpY2VQb3NlX3QgcG9zZXNbdnI6OmtfdW5N
YXhUcmFja2VkRGV2aWNlQ291bnRdOworCisgICAgbV9jb21wb3NpdG9yLT5XYWl0R2V0UG9zZXMo
bnVsbHB0ciwgMCwgcG9zZXMsIHZyOjprX3VuTWF4VHJhY2tlZERldmljZUNvdW50KTsKKworICAg
IG1fdHJhY2tpbmdJbmZvLmNsZWFyKCk7CisKKyAgICB2cjo6Q29tcG9zaXRvcl9GcmFtZVRpbWlu
ZyB0aW1pbmc7CisgICAgdGltaW5nLm1fblNpemUgPSBzaXplb2YodnI6OkNvbXBvc2l0b3JfRnJh
bWVUaW1pbmcpOworICAgIG1fY29tcG9zaXRvci0+R2V0RnJhbWVUaW1pbmcoJnRpbWluZyk7Cisg
ICAgbV90cmFja2luZ0luZm8udGltZXN0YW1wID0gdGltaW5nLm1fZmxTeXN0ZW1UaW1lSW5TZWNv
bmRzOworCisgICAgaWYgKCFwb3Nlc1t2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWRdLmJE
ZXZpY2VJc0Nvbm5lY3RlZAorICAgICAgICB8fCAhcG9zZXNbdnI6OmtfdW5UcmFja2VkRGV2aWNl
SW5kZXhfSG1kXS5iUG9zZUlzVmFsaWQKKyAgICAgICAgfHwgcG9zZXNbdnI6OmtfdW5UcmFja2Vk
RGV2aWNlSW5kZXhfSG1kXS5lVHJhY2tpbmdSZXN1bHQgIT0gdnI6OlRyYWNraW5nUmVzdWx0X1J1
bm5pbmdfT0spIHsKKyAgICAgICAgLy8gRklYTUU6IEluaXQgc29tZSBkYXRhIG1heWJlPz8/Lgor
ICAgICAgICByZXR1cm4gbV90cmFja2luZ0luZm87CisgICAgfQorCisgICAgY29uc3QgYXV0byYg
SE1EUG9zZSA9IHBvc2VzW3ZyOjprX3VuVHJhY2tlZERldmljZUluZGV4X0htZF07CisgICAgY29u
c3QgYXV0byYgdHJhbnNmb3JtID0gSE1EUG9zZS5tRGV2aWNlVG9BYnNvbHV0ZVRyYWNraW5nOwor
ICAgIG1fdHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uID0gcm90YXRpb25NYXRyaXhUb1F1YXRlcm5p
b24odHJhbnNmb3JtLm0pOworICAgIG1fdHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uLT5jb25qdWdh
dGUoKTsKKyAgICBtX3RyYWNraW5nSW5mby5wb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh0cmFuc2Zv
cm0ubVswXVszXSwgdHJhbnNmb3JtLm1bMV1bM10sIHRyYW5zZm9ybS5tWzJdWzNdKTsKKyAgICBt
X3RyYWNraW5nSW5mby5hbmd1bGFyVmVsb2NpdHkgPSBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpG
bG9hdDMoSE1EUG9zZS52QW5ndWxhclZlbG9jaXR5LnZbMF0sIEhNRFBvc2UudkFuZ3VsYXJWZWxv
Y2l0eS52WzFdLCBITURQb3NlLnZBbmd1bGFyVmVsb2NpdHkudlsyXSk7CisgICAgbV90cmFja2lu
Z0luZm8ubGluZWFyVmVsb2NpdHkgPSBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpGbG9hdDMoSE1E
UG9zZS52VmVsb2NpdHkudlswXSwgSE1EUG9zZS52VmVsb2NpdHkudlsxXSwgSE1EUG9zZS52VmVs
b2NpdHkudlsyXSk7CisKKyAgICByZXR1cm4gbV90cmFja2luZ0luZm87Cit9CisKIH07IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoT1BFTlZSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVu
VlIuaAppbmRleCAwYjkzM2YzMjRmZTU3OWEyODAyZmQ2NGFjZTUwZDUzMWMxMzlmM2Q0Li4zYWJl
M2RhYzA3OWUxZDkwY2FhMGE4NWUxNWIyZGQ2NWVjM2IzYTJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVu
VlIuaApAQCAtMzQsNiArMzQsNyBAQCBwdWJsaWM6CiAKICAgICB+VlJQbGF0Zm9ybURpc3BsYXlP
cGVuVlIoKSA9IGRlZmF1bHQ7CiAgICAgVlJQbGF0Zm9ybURpc3BsYXlJbmZvIGdldERpc3BsYXlJ
bmZvKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9kaXNwbGF5SW5mbzsgfQorICAgIFZSUGxhdGZvcm1U
cmFja2luZ0luZm8gZ2V0VHJhY2tpbmdJbmZvKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAg
VlJQbGF0Zm9ybURpc3BsYXlJbmZvOjpGaWVsZE9mVmlldyBjb21wdXRlRmllbGRPZlZpZXcodnI6
OkhtZF9FeWUpOwpAQCAtNDcsNiArNDgsNyBAQCBwcml2YXRlOgogICAgIHZyOjpJVlJDb21wb3Np
dG9yKiBtX2NvbXBvc2l0b3I7CiAKICAgICBWUlBsYXRmb3JtRGlzcGxheUluZm8gbV9kaXNwbGF5
SW5mbzsKKyAgICBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvIG1fdHJhY2tpbmdJbmZvOwogfTsKIAog
fTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337350</attachid>
            <date>2018-04-06 02:11:39 -0700</date>
            <delta_ts>2018-04-06 03:14:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184265-20180406111137.patch</filename>
            <type>text/plain</type>
            <size>25886</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFkZWNlYWFmMDhlMTQz
ZmZjM2MzNDFhMGI0YjJiOWRiZTAxZDc2Yi4uODA3YWUxMTYwZWZkMDYxN2UzNjE2ZDk1MjE2NzQ1
ZmNmN2ZlODIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE4LTA0LTAzICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtPcGVuVlJd
W1dlYlZSXSBSZXRyaWV2ZSBGcmFtZURhdGEgaW4gV2ViVlIncyByQUYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZSRnJhbWVEYXRhIGNvbnRhaW5zIGFs
bCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgcmVuZGVyIGEgVlIgc2NlbmUg
bGlrZSB2aWV3CisgICAgICAgIGFuZCBwcm9qZWN0aW9uIG1hdHJpY2VzLCBwb3NlIGRhdGEgKHBv
c2l0aW9uICYgb3JpZW50YXRpb24pIGFuZCBsaW5lYXIgJiBhbmd1bGFyIHZlbG9jaXR5CisgICAg
ICAgIGFtb25nIG90aGVycy4gVGhlIGdldEZyYW1lRGF0YSgpIGNhbGwgbXVzdCBiZSBpc3N1ZWQg
aW5zaWRlIGEgV2ViVlIncyBvd24KKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VlJEaXNwbGF5OjpnZXRGcmFtZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJEaXNw
bGF5OjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6Y2FuY2VsQW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Lmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlZSRXllUGFyYW1ldGVyczo6cmF3T2Zmc2V0IGNvbnN0KTogUmVxdWlyZWQgdG8gY29tcHV0ZSB2
aWV3IG1hdHJpY2VzLgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWF0cml4VG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWUkZy
YW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VlJGcmFtZURhdGE6OmxlZnRWaWV3TWF0cml4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZS
RnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VlJGcmFtZURhdGE6OnJpZ2h0Vmlld01hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OnJv
dGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlIZWFk
VG9FeWVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VlJGcmFtZURhdGE6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnZyL1ZSUG9zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcHRpb25hbEZsb2F0M1RvSlNDQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpwb3NpdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpWUlBvc2U6OmxpbmVhclZlbG9jaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlZSUG9zZTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjph
bmd1bGFyVmVsb2NpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjphbmd1bGFy
QWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSUG9zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQ
b3NlOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpWUlBvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpW
UlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpRdWF0ZXJuaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb246OmNvbmp1Z2F0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6VlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6Rmxv
YXQzOjpGbG9hdDMpOiBKdXN0IGEgZ3JvdXAgb2YgMyBmbG9hdHMgdXNlZCB0byBzdG9yZQorICAg
ICAgICBib3RoIHZlbG9jaXR5IGFuZCBhY2NlbGVyYXRpb24gaW4gYSBmb3JtYXQgd2hpY2ggaXMg
dmVyeSBjb252ZW5pZW50IHRvIGxhdGVyIGdlbmVyYXRlIEpTQworICAgICAgICBhcnJheXMuCisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpjbGVhcik6CisgICAgICAg
ICogcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUik6CisgICAgICAgIChXZWJDb3JlOjpyb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZv
KToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIu
aDoKKwogMjAxOC0wNC0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUkVHUkVTU0lPTiAocjIzMDIyMyk6IExheW91dFRlc3QgaHR0cC90ZXN0cy9jb250ZW50
ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLW92ZXJmbG93cy1ydWxlLWRhdGEtMS5odG1sIGlz
IGNyYXNoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlz
cGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAKaW5k
ZXggM2YwY2NjMTA2ZDFlNWQ4OWU5OWNlNjk3OTllYjJmZDMxYzI3MjFhMS4uZDUzNzA1MzI0NGEw
YjFmNTViOGEyOTRmMjdiNzhhN2E0YzE1MGFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmNwcApAQCAtMjYsOCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJWUkRpc3BsYXkuaCIKIAorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJWUkRpc3BsYXlDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJWUkV5ZVBhcmFtZXRl
cnMuaCIKKyNpbmNsdWRlICJWUkZyYW1lRGF0YS5oIgogI2luY2x1ZGUgIlZSTGF5ZXJJbml0Lmgi
CiAjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKICNpbmNsdWRlICJWUlBvc2UuaCIKQEAg
LTg1LDI3ICs4OSw0NyBAQCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIFZSRGlzcGxheTo6Z2V0RXll
UGFyYW1ldGVycyhWUkV5ZSBleWUpIGNvbnN0CiAgICAgcmV0dXJuIGV5ZSA9PSBWUkV5ZTo6TGVm
dCA/ICptX2xlZnRFeWVQYXJhbWV0ZXJzIDogKm1fcmlnaHRFeWVQYXJhbWV0ZXJzOwogfQogCi1i
b29sIFZSRGlzcGxheTo6Z2V0RnJhbWVEYXRhKFZSRnJhbWVEYXRhJikgY29uc3QKK2Jvb2wgVlJE
aXNwbGF5OjpnZXRGcmFtZURhdGEoVlJGcmFtZURhdGEmIGZyYW1lRGF0YSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NhcGFiaWxpdGllcy0+aGFzUG9zaXRpb24oKSB8
fCAhbV9jYXBhYmlsaXRpZXMtPmhhc09yaWVudGF0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIEZJWE1FOiBlbnN1cmUgdGhhdCB0aGlzIGlzIG9ubHkgY2FsbGVkIGluc2lk
ZSBXZWJWUidzIHJBRi4KKyAgICBmcmFtZURhdGEudXBkYXRlKG1fZGlzcGxheS0+Z2V0VHJhY2tp
bmdJbmZvKCksIGdldEV5ZVBhcmFtZXRlcnMoVlJFeWU6OkxlZnQpLCBnZXRFeWVQYXJhbWV0ZXJz
KFZSRXllOjpSaWdodCksIG1fZGVwdGhOZWFyLCBtX2RlcHRoRmFyKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogUmVmPFZSUG9zZT4gVlJEaXNwbGF5OjpnZXRQb3NlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gVlJQb3NlOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gVlJQb3NlOjpjcmVhdGUobV9kaXNw
bGF5LT5nZXRUcmFja2luZ0luZm8oKSk7CiB9CiAKIHZvaWQgVlJEaXNwbGF5OjpyZXNldFBvc2Uo
KQogewogfQogCi1sb25nIFZSRGlzcGxheTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJikKK3VpbnQzMl90IFZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJiBjYWxs
YmFjaykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBhdXRvKiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghbV9zY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIpIHsKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElT
UExBWV9NT05JVE9SKQorICAgICAgICAvLyBGSVhNRTogR2V0IHRoZSBkaXNwbGF5IGlkIG9mIHRo
ZSBITUQgYXMgaXQgc2hvdWxkIHVzZSB0aGUgSE1EIG5hdGl2ZSByZWZyZXNoIHJhdGUuCisgICAg
ICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCA9IGRvY3VtZW50LT5wYWdlKCkgPyBkb2N1
bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5kaXNwbGF5SUQoKSA6IDA7CisgICAgICAgIG1fc2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpjcmVh
dGUoKmRvY3VtZW50LCBkaXNwbGF5SUQpOworI2Vsc2UKKyAgICAgICAgbV9zY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIgPSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgqZG9j
dW1lbnQsIDApOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIG1fc2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyLT5yZWdpc3RlckNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAot
dm9pZCBWUkRpc3BsYXk6OmNhbmNlbEFuaW1hdGlvbkZyYW1lKHVuc2lnbmVkKQordm9pZCBWUkRp
c3BsYXk6OmNhbmNlbEFuaW1hdGlvbkZyYW1lKHVpbnQzMl90IGlkKQogeworICAgIGlmICghbV9z
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyLT5jYW5jZWxDYWxsYmFjayhpZCk7CiB9CiAKIHZvaWQg
VlJEaXNwbGF5OjpyZXF1ZXN0UHJlc2VudChjb25zdCBWZWN0b3I8VlJMYXllckluaXQ+JiwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxh
eS5oCmluZGV4IGEyNDJlNDRhMWRmMDJlMjg2N2YwNDJkZjg0ZWUzNWNjYTIyZGI1OTkuLjM2NDdl
NmQyYTIwYmQ5MDFmZDEwZDM4YTNmNTBmNjg0ZTFhOTEzNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9WUkRpc3BsYXkuaApAQCAtMzQsNiArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKK2NsYXNzIFNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIFZSRGlzcGxheUNhcGFiaWxpdGllczsKIGNs
YXNzIFZSRXllUGFyYW1ldGVyczsKIGNsYXNzIFZSRnJhbWVEYXRhOwpAQCAtNzIsOCArNzMsOCBA
QCBwdWJsaWM6CiAgICAgZG91YmxlIGRlcHRoRmFyKCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aEZh
cjsgfQogICAgIHZvaWQgc2V0RGVwdGhGYXIoZG91YmxlIGRlcHRoRmFyKSB7IG1fZGVwdGhGYXIg
PSBkZXB0aEZhcjsgfQogCi0gICAgbG9uZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJlcXVl
c3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKLSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbkZy
YW1lKHVuc2lnbmVkKTsKKyAgICB1aW50MzJfdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJl
cXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlv
bkZyYW1lKHVpbnQzMl90KTsKIAogICAgIHZvaWQgcmVxdWVzdFByZXNlbnQoY29uc3QgVmVjdG9y
PFZSTGF5ZXJJbml0PiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogICAgIHZvaWQgZXhpdFBy
ZXNlbnQoUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CkBAIC0xMTEsNiArMTEyLDggQEAgcHJpdmF0
ZToKIAogICAgIGRvdWJsZSBtX2RlcHRoTmVhciB7IDAuMDEgfTsgLy8gRGVmYXVsdCB2YWx1ZSBm
cm9tIHRoZSBzcGVjcy4KICAgICBkb3VibGUgbV9kZXB0aEZhciB7IDEwMDAwIH07IC8vIERlZmF1
bHQgdmFsdWUgZnJvbSB0aGUgc3BlY3MuCisKKyAgICBSZWZQdHI8U2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyPiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIv
VlJFeWVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFy
YW1ldGVycy5oCmluZGV4IDZhODlkODk4MjBhMDQxNDQ4MzViNTRiNzkwN2FjOGQyMjMwYzJiYmMu
LmYzMGQwZmJkNjU0YTFkMWYxODhhMWY0MzlkMzAzMDgwZmNhNjQ4MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJFeWVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaApAQCAtNDMsNiArNDMsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgUmVmPEZsb2F0MzJBcnJheT4gb2Zmc2V0KCkgY29uc3Q7
CisgICAgY29uc3QgRmxvYXRQb2ludDNEJiByYXdPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQogCiAgICAgY29uc3QgVlJGaWVsZE9mVmlldyYgZmllbGRPZlZpZXcoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmNwcAppbmRleCA1
Yjg0OWJmMjkwZjljZDg5MDU2ZGU4NjZkYjk0ZmQ4NjQxYjA2Mjk4Li45Mjc5N2VhOTA4YjdjNDky
YWFlNTFmMWY3NDJmMzZjNDQ2OGRiNzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnZyL1ZSRnJhbWVEYXRhLmNwcApAQCAtMjUsNiArMjUsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlZSRnJhbWVEYXRhLmgiCiAKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgorI2luY2x1ZGUgIlZSRXllUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgIlZSUGxhdGZv
cm1EaXNwbGF5LmgiCiAjaW5jbHVkZSAiVlJQb3NlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTM0LDI5ICszNywzMSBAQCBWUkZyYW1lRGF0YTo6VlJGcmFtZURhdGEoKQogewogfQogCi1k
b3VibGUgVlJGcmFtZURhdGE6OnRpbWVzdGFtcCgpIGNvbnN0CitzdGF0aWMgUmVmPEZsb2F0MzJB
cnJheT4gbWF0cml4VG9BcnJheShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQog
ewotICAgIHJldHVybiAwOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpGbG9hdE1hdHJpeDQg
Y29sdW1uTWFqb3JNYXRyaXg7CisgICAgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KGNv
bHVtbk1ham9yTWF0cml4KTsKKyAgICByZXR1cm4gRmxvYXQzMkFycmF5OjpjcmVhdGUoY29sdW1u
TWFqb3JNYXRyaXgsIDE2KS5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZS
RnJhbWVEYXRhOjpsZWZ0UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0CitSZWY8RmxvYXQzMkFycmF5
PiBWUkZyYW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXgoKSBjb25zdAogewotICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5KG1fbGVmdFByb2plY3Rpb25NYXRy
aXgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSRnJhbWVEYXRhOjpsZWZ0Vmlld01hdHJpeCgpIGNv
bnN0CitSZWY8RmxvYXQzMkFycmF5PiBWUkZyYW1lRGF0YTo6bGVmdFZpZXdNYXRyaXgoKSBjb25z
dAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5KG1fbGVm
dFZpZXdNYXRyaXgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSRnJhbWVEYXRhOjpyaWdodFByb2pl
Y3Rpb25NYXRyaXgoKSBjb25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6OnJpZ2h0
UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIG1hdHJpeFRvQXJyYXkobV9yaWdodFByb2plY3Rpb25NYXRyaXgpOwogfQogCi1GbG9hdDMy
QXJyYXkqIFZSRnJhbWVEYXRhOjpyaWdodFZpZXdNYXRyaXgoKSBjb25zdAorUmVmPEZsb2F0MzJB
cnJheT4gVlJGcmFtZURhdGE6OnJpZ2h0Vmlld01hdHJpeCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIG1hdHJpeFRvQXJyYXkobV9yaWdodFZpZXdNYXRyaXgpOwog
fQogCiBjb25zdCBWUlBvc2UmIFZSRnJhbWVEYXRhOjpwb3NlKCkgY29uc3QKQEAgLTY0LDQgKzY5
LDg4IEBAIGNvbnN0IFZSUG9zZSYgVlJGcmFtZURhdGE6OnBvc2UoKSBjb25zdAogICAgIHJldHVy
biBtX3Bvc2U7CiB9CiAKK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0
cml4RnJvbUZpZWxkT2ZWaWV3KGNvbnN0IFZSRmllbGRPZlZpZXcmIGZvdiwgZG91YmxlIGRlcHRo
TmVhciwgZG91YmxlIGRlcHRoRmFyKQoreworICAgIGRvdWJsZSB1cFRhbiA9IHRhbihkZWcycmFk
KGZvdi51cERlZ3JlZXMoKSkpOworICAgIGRvdWJsZSBkb3duVGFuID0gdGFuKGRlZzJyYWQoZm92
LmRvd25EZWdyZWVzKCkpKTsKKyAgICBkb3VibGUgbGVmdFRhbiA9IHRhbihkZWcycmFkKGZvdi5s
ZWZ0RGVncmVlcygpKSk7CisgICAgZG91YmxlIHJpZ2h0VGFuID0gdGFuKGRlZzJyYWQoZm92LnJp
Z2h0RGVncmVlcygpKSk7CisKKyAgICBkb3VibGUgeFNjYWxlID0gMiAvIChsZWZ0VGFuICsgcmln
aHRUYW4pOworICAgIGRvdWJsZSB5U2NhbGUgPSAyIC8gKHVwVGFuICsgZG93blRhbik7CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OworICAgIHByb2plY3Rpb25N
YXRyaXguc2V0TTExKHhTY2FsZSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMjIoeVNjYWxl
KTsKKyAgICBwcm9qZWN0aW9uTWF0cml4LnNldE0zMigodXBUYW4gLSBkb3duVGFuKSAqIHlTY2Fs
ZSAqIDAuNSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMzEoLSgobGVmdFRhbiAtIHJpZ2h0
VGFuKSAqIHhTY2FsZSAqIDAuNSkpOworICAgIHByb2plY3Rpb25NYXRyaXguc2V0TTMzKChkZXB0
aE5lYXIgKyBkZXB0aEZhcikgLyAoZGVwdGhOZWFyIC0gZGVwdGhGYXIpKTsKKyAgICBwcm9qZWN0
aW9uTWF0cml4LnNldE0zNCgtMSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNNDMoKDIgKiBk
ZXB0aEZhciAqIGRlcHRoTmVhcikgLyAoZGVwdGhOZWFyIC0gZGVwdGhGYXIpKTsKKyAgICBwcm9q
ZWN0aW9uTWF0cml4LnNldE00NCgwKTsKKworICAgIHJldHVybiBwcm9qZWN0aW9uTWF0cml4Owor
fQorCisvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3Rh
dGlvbnMvY29udmVyc2lvbnMvcXVhdGVybmlvblRvTWF0cml4L2luZGV4Lmh0bQorc3RhdGljIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24oY29uc3QgVlJQ
bGF0Zm9ybVRyYWNraW5nSW5mbzo6UXVhdGVybmlvbiYgcXVhdGVybmlvbikKK3sKKyAgICBkb3Vi
bGUgbWFnbml0dWRlID0gKHF1YXRlcm5pb24ueCAqIHF1YXRlcm5pb24ueCkgKyAocXVhdGVybmlv
bi55ICogcXVhdGVybmlvbi55KSArIChxdWF0ZXJuaW9uLnogKiBxdWF0ZXJuaW9uLnopICsgKHF1
YXRlcm5pb24udyAqIHF1YXRlcm5pb24udyk7CisgICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6
UXVhdGVybmlvbiBub3JtYWxpemVkUXVhdGVybmlvbihxdWF0ZXJuaW9uLnggLyBtYWduaXR1ZGUs
IHF1YXRlcm5pb24ueSAvIG1hZ25pdHVkZSwgcXVhdGVybmlvbi56IC8gbWFnbml0dWRlLCBxdWF0
ZXJuaW9uLncgLyBtYWduaXR1ZGUpOworICAgIGRvdWJsZSB4MiA9IG5vcm1hbGl6ZWRRdWF0ZXJu
aW9uLnggKiBub3JtYWxpemVkUXVhdGVybmlvbi54OworICAgIGRvdWJsZSB5MiA9IG5vcm1hbGl6
ZWRRdWF0ZXJuaW9uLnkgKiBub3JtYWxpemVkUXVhdGVybmlvbi55OworICAgIGRvdWJsZSB6MiA9
IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnogKiBub3JtYWxpemVkUXVhdGVybmlvbi56OworICAgIGRv
dWJsZSB3MiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLncgKiBub3JtYWxpemVkUXVhdGVybmlvbi53
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC5zZXRNMTEo
eDIgLSB5MiAtIHoyICsgdzIpOworICAgIG1hdHJpeC5zZXRNMjIoLXgyICsgeTIgLSB6MiArIHcy
KTsKKyAgICBtYXRyaXguc2V0TTMzKC14MiAtIHkyICsgejIgKyB3Mik7CisKKyAgICBkb3VibGUg
eHkgPSBub3JtYWxpemVkUXVhdGVybmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24ueTsKKyAg
ICBkb3VibGUgencgPSBub3JtYWxpemVkUXVhdGVybmlvbi56ICogbm9ybWFsaXplZFF1YXRlcm5p
b24udzsKKyAgICBtYXRyaXguc2V0TTIxKDIuMCAqICh4eSArIHp3KSk7CisgICAgbWF0cml4LnNl
dE0xMigyLjAgKiAoeHkgLSB6dykpOworCisgICAgZG91YmxlIHh6ID0gbm9ybWFsaXplZFF1YXRl
cm5pb24ueCAqIG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLno7CisgICAgZG91YmxlIHl3ID0gbm9ybWFs
aXplZFF1YXRlcm5pb24ueSAqIG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnc7CisgICAgbWF0cml4LnNl
dE0zMSgyLjAgKiAoeHogLSB5dykpOworICAgIG1hdHJpeC5zZXRNMTMoMi4wICogKHh6ICsgeXcp
KTsKKworICAgIGRvdWJsZSB5eiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnkgKiBub3JtYWxpemVk
UXVhdGVybmlvbi56OworICAgIGRvdWJsZSB4dyA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnggKiBu
b3JtYWxpemVkUXVhdGVybmlvbi53OworICAgIG1hdHJpeC5zZXRNMzIoMi4wICogKHl6ICsgeHcp
KTsKKyAgICBtYXRyaXguc2V0TTIzKDIuMCAqICh5eiAtIHh3KSk7CisKKyAgICByZXR1cm4gbWF0
cml4OworfQorCitzdGF0aWMgdm9pZCBhcHBseUhlYWRUb0V5ZVRyYW5zZm9ybShUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBGbG9hdFBvaW50M0QmIHRyYW5zbGF0aW9uKQorewor
ICAgIG1hdHJpeC5zZXRNNDEobWF0cml4Lm00MSgpIC0gdHJhbnNsYXRpb24ueCgpKTsKKyAgICBt
YXRyaXguc2V0TTQyKG1hdHJpeC5tNDIoKSAtIHRyYW5zbGF0aW9uLnkoKSk7CisgICAgbWF0cml4
LnNldE00MyhtYXRyaXgubTQzKCkgLSB0cmFuc2xhdGlvbi56KCkpOworfQorCit2b2lkIFZSRnJh
bWVEYXRhOjp1cGRhdGUoY29uc3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyYgdHJhY2tpbmdJbmZv
LCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIGxlZnRFeWUsIGNvbnN0IFZSRXllUGFyYW1ldGVycyYg
cmlnaHRFeWUsIGRvdWJsZSBkZXB0aE5lYXIsIGRvdWJsZSBkZXB0aEZhcikKK3sKKyAgICBtX2xl
ZnRQcm9qZWN0aW9uTWF0cml4ID0gcHJvamVjdGlvbk1hdHJpeEZyb21GaWVsZE9mVmlldyhsZWZ0
RXllLmZpZWxkT2ZWaWV3KCksIGRlcHRoTmVhciwgZGVwdGhGYXIpOworICAgIG1fcmlnaHRQcm9q
ZWN0aW9uTWF0cml4ID0gcHJvamVjdGlvbk1hdHJpeEZyb21GaWVsZE9mVmlldyhyaWdodEV5ZS5m
aWVsZE9mVmlldygpLCBkZXB0aE5lYXIsIGRlcHRoRmFyKTsKKworICAgIG1fdGltZXN0YW1wID0g
dHJhY2tpbmdJbmZvLnRpbWVzdGFtcDsKKyAgICBtX3Bvc2UtPnVwZGF0ZSh0cmFja2luZ0luZm8p
OworCisgICAgYXV0byByb3RhdGlvbk1hdHJpeCA9IHJvdGF0aW9uTWF0cml4RnJvbVF1YXRlcm5p
b24odHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uLnZhbHVlX29yKFZSUGxhdGZvcm1UcmFja2luZ0lu
Zm86OlF1YXRlcm5pb24oMCwgMCwgMCwgMSkpKTsKKyAgICBGbG9hdFBvaW50M0QgcG9zaXRpb24g
PSB0cmFja2luZ0luZm8ucG9zaXRpb24udmFsdWVfb3IoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsK
KyAgICByb3RhdGlvbk1hdHJpeC50cmFuc2xhdGUzZCgtcG9zaXRpb24ueCgpLCAtcG9zaXRpb24u
eSgpLCAtcG9zaXRpb24ueigpKTsKKworICAgIEZsb2F0UG9pbnQzRCBsZWZ0RXllT2Zmc2V0ID0g
bGVmdEV5ZS5yYXdPZmZzZXQoKTsKKyAgICBtX2xlZnRWaWV3TWF0cml4ID0gcm90YXRpb25NYXRy
aXg7CisgICAgYXBwbHlIZWFkVG9FeWVUcmFuc2Zvcm0obV9sZWZ0Vmlld01hdHJpeCwgbGVmdEV5
ZU9mZnNldCk7CisKKyAgICBGbG9hdFBvaW50M0QgcmlnaHRFeWVPZmZzZXQgPSByaWdodEV5ZS5y
YXdPZmZzZXQoKTsKKyAgICBtX3JpZ2h0Vmlld01hdHJpeCA9IHJvdGF0aW9uTWF0cml4OworICAg
IGFwcGx5SGVhZFRvRXllVHJhbnNmb3JtKG1fcmlnaHRWaWV3TWF0cml4LCByaWdodEV5ZU9mZnNl
dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJGcmFtZURhdGEuaAppbmRleCA3MDNkNmJjMGYyNzAwN2U4N2I2NzNlYWEwMjU3MzFl
YjA2NTJiMjU3Li40OWFkYTg4OWY1YzkxODhjODIxODkzM2QxMTRjZjQ1YWIzMmM2YzhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5oCkBAIC0yOSw2ICsyOSw5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7
CitjbGFzcyBWUkV5ZVBhcmFtZXRlcnM7CitjbGFzcyBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOwog
Y2xhc3MgVlJQb3NlOwogCiBjbGFzcyBWUkZyYW1lRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFZS
RnJhbWVEYXRhPiB7CkBAIC0zOCwyMCArNDEsMjcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBWUkZyYW1lRGF0YSk7CiAgICAgfQogCi0gICAgZG91YmxlIHRpbWVzdGFt
cCgpIGNvbnN0OworICAgIGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVz
dGFtcDsgfQogCi0gICAgRmxvYXQzMkFycmF5KiBsZWZ0UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0
OwotICAgIEZsb2F0MzJBcnJheSogbGVmdFZpZXdNYXRyaXgoKSBjb25zdDsKKyAgICBSZWY8Rmxv
YXQzMkFycmF5PiBsZWZ0UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0OworICAgIFJlZjxGbG9hdDMy
QXJyYXk+IGxlZnRWaWV3TWF0cml4KCkgY29uc3Q7CiAKLSAgICBGbG9hdDMyQXJyYXkqIHJpZ2h0
UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSogcmlnaHRWaWV3TWF0
cml4KCkgY29uc3Q7CisgICAgUmVmPEZsb2F0MzJBcnJheT4gcmlnaHRQcm9qZWN0aW9uTWF0cml4
KCkgY29uc3Q7CisgICAgUmVmPEZsb2F0MzJBcnJheT4gcmlnaHRWaWV3TWF0cml4KCkgY29uc3Q7
CiAKICAgICBjb25zdCBWUlBvc2UmIHBvc2UoKSBjb25zdDsKIAorICAgIHZvaWQgdXBkYXRlKGNv
bnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm8mLCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIGxlZnRF
eWUsIGNvbnN0IFZSRXllUGFyYW1ldGVycyYgcmlnaHRFeWUsIGRvdWJsZSBkZXB0aE5lYXIsIGRv
dWJsZSBkZXB0aEZhcik7CisKIHByaXZhdGU6CiAgICAgVlJGcmFtZURhdGEoKTsKIAorICAgIGRv
dWJsZSBtX3RpbWVzdGFtcDsKICAgICBSZWY8VlJQb3NlPiBtX3Bvc2U7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV9sZWZ0UHJvamVjdGlvbk1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtX3JpZ2h0UHJvamVjdGlvbk1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X2xlZnRWaWV3TWF0cml4OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmlnaHRWaWV3TWF0
cml4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJ2ci9WUlBvc2UuY3BwCmluZGV4IDNkYzE1ZWRmNTViYjM3ZDU1YWRlMzk3YjZkNjUzMDZkMWZk
N2I4ODkuLjc0YTc4ZGIyZDEzNDJmMWFhY2VjNWNhMDljNzAyY2QwNjljMzEwZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5jcHAKQEAgLTI1LDM4ICsyNSw2MyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlZSUG9zZS5oIgogCisjaW5jbHVkZSAiVlJQbGF0
Zm9ybURpc3BsYXkuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WUlBvc2U6OlZSUG9zZSgp
ID0gZGVmYXVsdDsKK3N0YXRpYyBSZWZQdHI8RmxvYXQzMkFycmF5PiBvcHRpb25hbEZsb2F0M1Rv
SlNDQXJyYXkoY29uc3Qgc3RkOjpvcHRpb25hbDxWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpGbG9h
dDM+JiBkYXRhKQoreworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICByZXR1cm4gRmxvYXQzMkFycmF5OjpjcmVhdGUoZGF0YS0+ZGF0YSwgMykucmVsZWFzZU5v
bk51bGwoKTsKK30KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6OnBvc2l0aW9uKCkgY29uc3QKK1Jl
ZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9zZTo6cG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVy
biBudWxscHRyOworICAgIGlmICghbV90cmFja2luZ0luZm8ucG9zaXRpb24pCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBwb3NpdGlvbiA9IEZsb2F0MzJBcnJheTo6Y3JlYXRl
KDMpOworICAgIGZsb2F0KiBwb3NpdGlvbkRhdGEgPSBwb3NpdGlvbi0+ZGF0YSgpOworICAgIHBv
c2l0aW9uRGF0YVswXSA9IG1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uLT54KCk7CisgICAgcG9zaXRp
b25EYXRhWzFdID0gbV90cmFja2luZ0luZm8ucG9zaXRpb24tPnkoKTsKKyAgICBwb3NpdGlvbkRh
dGFbMl0gPSBtX3RyYWNraW5nSW5mby5wb3NpdGlvbi0+eigpOworICAgIHJldHVybiBwb3NpdGlv
bi5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6bGluZWFyVmVs
b2NpdHkoKSBjb25zdAorUmVmUHRyPEZsb2F0MzJBcnJheT4gVlJQb3NlOjpsaW5lYXJWZWxvY2l0
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG9wdGlvbmFsRmxv
YXQzVG9KU0NBcnJheShtX3RyYWNraW5nSW5mby5saW5lYXJWZWxvY2l0eSk7CiB9CiAKLUZsb2F0
MzJBcnJheSogVlJQb3NlOjpsaW5lYXJBY2NlbGVyYXRpb24oKSBjb25zdAorUmVmUHRyPEZsb2F0
MzJBcnJheT4gVlJQb3NlOjpsaW5lYXJBY2NlbGVyYXRpb24oKSBjb25zdAogewotICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBvcHRpb25hbEZsb2F0M1RvSlNDQXJyYXkobV90cmFja2lu
Z0luZm8ubGluZWFyQWNjZWxlcmF0aW9uKTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6Om9y
aWVudGF0aW9uKCkgY29uc3QKK1JlZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9zZTo6b3JpZW50YXRp
b24oKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghbV90cmFja2luZ0lu
Zm8ub3JpZW50YXRpb24pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBvcmll
bnRhdGlvbiA9IEZsb2F0MzJBcnJheTo6Y3JlYXRlKDQpOworICAgIGZsb2F0KiBvcmllbnRhdGlv
bkRhdGEgPSBvcmllbnRhdGlvbi0+ZGF0YSgpOworICAgIG9yaWVudGF0aW9uRGF0YVswXSA9IG1f
dHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uLT54OworICAgIG9yaWVudGF0aW9uRGF0YVsxXSA9IG1f
dHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uLT55OworICAgIG9yaWVudGF0aW9uRGF0YVsyXSA9IG1f
dHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uLT56OworICAgIG9yaWVudGF0aW9uRGF0YVszXSA9IG1f
dHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uLT53OworICAgIHJldHVybiBvcmllbnRhdGlvbi5yZWxl
YXNlTm9uTnVsbCgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6YW5ndWxhclZlbG9jaXR5
KCkgY29uc3QKK1JlZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9zZTo6YW5ndWxhclZlbG9jaXR5KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gb3B0aW9uYWxGbG9hdDNU
b0pTQ0FycmF5KG1fdHJhY2tpbmdJbmZvLmFuZ3VsYXJWZWxvY2l0eSk7CiB9CiAKLUZsb2F0MzJB
cnJheSogVlJQb3NlOjphbmd1bGFyQWNjZWxlcmF0aW9uKCkgY29uc3QKK1JlZlB0cjxGbG9hdDMy
QXJyYXk+IFZSUG9zZTo6YW5ndWxhckFjY2VsZXJhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIG9wdGlvbmFsRmxvYXQzVG9KU0NBcnJheShtX3RyYWNraW5n
SW5mby5hbmd1bGFyQWNjZWxlcmF0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmgKaW5kZXggMmVmMGFlM2M2MDc3ZGEwMjcy
ZGM1MzE0ZmQ4MGNjMWEzMGU3NzU0Mi4uMWY0NTY3NmMzMTU1NjgzYmJjZmE5M2U2ZTJhOTcxMWEz
OTBkMGNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5oCkBAIC0yOSw2ICsy
OSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgVlJQbGF0Zm9ybVRyYWNraW5n
SW5mbzsKKwogY2xhc3MgVlJQb3NlIDogcHVibGljIFJlZkNvdW50ZWQ8VlJQb3NlPiB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxWUlBvc2U+IGNyZWF0ZSgpCkBAIC0zNiwxNiArMzgsMzAgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWUlBvc2UpOwogICAgIH0KIAot
ICAgIEZsb2F0MzJBcnJheSogcG9zaXRpb24oKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGxp
bmVhclZlbG9jaXR5KCkgY29uc3Q7Ci0gICAgRmxvYXQzMkFycmF5KiBsaW5lYXJBY2NlbGVyYXRp
b24oKSBjb25zdDsKKyAgICBzdGF0aWMgUmVmPFZSUG9zZT4gY3JlYXRlKGNvbnN0IFZSUGxhdGZv
cm1UcmFja2luZ0luZm8mIHRyYWNraW5nSW5mbykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFZSUG9zZSh0cmFja2luZ0luZm8pKTsKKyAgICB9CisKKyAgICBSZWZQdHI8Rmxv
YXQzMkFycmF5PiBwb3NpdGlvbigpIGNvbnN0OworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IGxp
bmVhclZlbG9jaXR5KCkgY29uc3Q7CisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gbGluZWFyQWNj
ZWxlcmF0aW9uKCkgY29uc3Q7CisKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBvcmllbnRhdGlv
bigpIGNvbnN0OworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IGFuZ3VsYXJWZWxvY2l0eSgpIGNv
bnN0OworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IGFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25z
dDsKIAotICAgIEZsb2F0MzJBcnJheSogb3JpZW50YXRpb24oKSBjb25zdDsKLSAgICBGbG9hdDMy
QXJyYXkqIGFuZ3VsYXJWZWxvY2l0eSgpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSogYW5ndWxh
ckFjY2VsZXJhdGlvbigpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlKGNvbnN0IFZSUGxhdGZvcm1U
cmFja2luZ0luZm8mIHRyYWNraW5nSW5mbykgeyBtX3RyYWNraW5nSW5mbyA9IHRyYWNraW5nSW5m
bzsgfTsKIAogcHJpdmF0ZToKLSAgICBWUlBvc2UoKTsKKyAgICBWUlBvc2UoKSA9IGRlZmF1bHQ7
CisKKyAgICBWUlBvc2UoY29uc3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyYgdHJhY2tpbmdJbmZv
KQorICAgICAgICA6IG1fdHJhY2tpbmdJbmZvKHRyYWNraW5nSW5mbykKKyAgICB7CisgICAgfQor
CisgICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBtX3RyYWNraW5nSW5mbzsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Zy
L1ZSUGxhdGZvcm1EaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRm
b3JtRGlzcGxheS5oCmluZGV4IDc2ZDJhYzY2ZjMzYzA3OGVjOTkxZGFhYWI0MjM2NmNlOTM2ZmYy
N2EuLmI0NmY1NzY0YTQ0MmRmZTgxZDU5NjMxYTI2MTdjNzJiNzA5MjNkNDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaApAQCAtMTAzLDkgKzEw
Myw2NCBAQCBwcml2YXRlOgogICAgIHN0ZDo6b3B0aW9uYWw8VHJhbnNmb3JtYXRpb25NYXRyaXg+
IG1fc2l0dGluZ1RvU3RhbmRpbmdUcmFuc2Zvcm07CiB9OwogCitzdHJ1Y3QgVlJQbGF0Zm9ybVRy
YWNraW5nSW5mbyB7CisgICAgc3RydWN0IFF1YXRlcm5pb24geworICAgICAgICBRdWF0ZXJuaW9u
KCkKKyAgICAgICAgICAgIDogeCgwKSwgeSgwKSwgeigwKSwgdygxKSB7IH0KKworICAgICAgICBR
dWF0ZXJuaW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpCisgICAgICAgICAg
ICA6IHgoeCksIHkoeSksIHooeiksIHcodykgeyB9CisKKyAgICAgICAgUXVhdGVybmlvbiYgY29u
anVnYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgeCAqPSAtMTsKKyAgICAgICAgICAgIHkg
Kj0gLTE7CisgICAgICAgICAgICB6ICo9IC0xOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICB9CisKKyAgICAgICAgUXVhdGVybmlvbiYgb3BlcmF0b3IqKGZsb2F0IGZhY3RvcikK
KyAgICAgICAgeworICAgICAgICAgICAgeCAqPSBmYWN0b3I7CisgICAgICAgICAgICB5ICo9IGZh
Y3RvcjsKKyAgICAgICAgICAgIHogKj0gZmFjdG9yOworICAgICAgICAgICAgdyAqPSBmYWN0b3I7
CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgeCwg
eSwgeiwgdzsKKyAgICB9OworCisgICAgc3RydWN0IEZsb2F0MyB7CisgICAgICAgIEZsb2F0Myhm
bG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBjKQorICAgICAgICAgICAgOiBkYXRhIHsgYSwgYiwgYyB9
IHsgfQorCisgICAgICAgIGZsb2F0IGRhdGFbM107CisgICAgfTsKKworICAgIHZvaWQgY2xlYXIo
KQorICAgIHsKKyAgICAgICAgdGltZXN0YW1wID0gMDsKKyAgICAgICAgcG9zaXRpb24gPSBzdGQ6
Om51bGxvcHQ7CisgICAgICAgIG9yaWVudGF0aW9uID0gc3RkOjpudWxsb3B0OworICAgICAgICBh
bmd1bGFyQWNjZWxlcmF0aW9uID0gc3RkOjpudWxsb3B0OworICAgICAgICBhbmd1bGFyVmVsb2Np
dHkgPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGxpbmVhckFjY2VsZXJhdGlvbiA9IHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgbGluZWFyVmVsb2NpdHkgPSBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgc3RkOjpvcHRpb25hbDxRdWF0ZXJuaW9uPiBvcmllbnRhdGlvbjsKKyAgICBzdGQ6Om9wdGlv
bmFsPEZsb2F0UG9pbnQzRD4gcG9zaXRpb247CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdDM+IGFu
Z3VsYXJBY2NlbGVyYXRpb247CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdDM+IGFuZ3VsYXJWZWxv
Y2l0eTsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0Mz4gbGluZWFyQWNjZWxlcmF0aW9uOworICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXQzPiBsaW5lYXJWZWxvY2l0eTsKKyAgICBkb3VibGUgdGltZXN0
YW1wOworfTsKKwogY2xhc3MgVlJQbGF0Zm9ybURpc3BsYXkgewogcHVibGljOgogICAgIHZpcnR1
YWwgVlJQbGF0Zm9ybURpc3BsYXlJbmZvIGdldERpc3BsYXlJbmZvKCkgPSAwOworICAgIHZpcnR1
YWwgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBnZXRUcmFja2luZ0luZm8oKSA9IDA7CiAgICAgdmly
dHVhbCB+VlJQbGF0Zm9ybURpc3BsYXkoKSA9IGRlZmF1bHQ7CiAKICAgICBXZWFrUHRyPFZSUGxh
dGZvcm1EaXNwbGF5PiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5j
cmVhdGVXZWFrUHRyKCp0aGlzKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAKaW5kZXggNDM5
ZjE4NThjNjQ3OWU4MWQyOGJhYjQ3YzE4ZDUzZDFlMzc0NTdiYy4uZmFkYjZmYzEzNzM2MjA3MTU2
OTA3NzI0YzBkOGNlODdkYzZkNWIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3BwCkBAIC01
MCw2ICs1MCw4IEBAIFZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUih2cjo6SVZSU3lzdGVtKiBzeXN0ZW0sIHZyOjpJVlJDCiAgICAgLy8gRklYTUU6IFdlJ3Jl
IGFzc3VtaW5nIGFuIEhUQyBWaXZlIEhNRCBoZXJlLiBHZXQgdGhpcyBpbmZvIGZyb20gT3BlblZS
Py4KICAgICBtX2Rpc3BsYXlJbmZvLnNldENhcGFiaWxpdHlGbGFncyhWUkRpc3BsYXlDYXBhYmls
aXR5RmxhZzo6Tm9uZSB8IFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnOjpQb3NpdGlvbiB8IFZSRGlz
cGxheUNhcGFiaWxpdHlGbGFnOjpPcmllbnRhdGlvbiB8IFZSRGlzcGxheUNhcGFiaWxpdHlGbGFn
OjpFeHRlcm5hbERpc3BsYXkgfCBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZzo6UHJlc2VudCk7CiAK
KyAgICBtX2NvbXBvc2l0b3ItPlNldFRyYWNraW5nU3BhY2UodnI6OlRyYWNraW5nVW5pdmVyc2VT
ZWF0ZWQpOworCiAgICAgdXBkYXRlRXllUGFyYW1ldGVycygpOwogICAgIHVwZGF0ZVN0YWdlUGFy
YW1ldGVycygpOwogfQpAQCAtOTksNiArMTAxLDYzIEBAIHZvaWQgVlJQbGF0Zm9ybURpc3BsYXlP
cGVuVlI6OnVwZGF0ZVN0YWdlUGFyYW1ldGVycygpCiAgICAgbV9kaXNwbGF5SW5mby5zZXRQbGF5
QXJlYUJvdW5kcyhGbG9hdFNpemUocGxheUFyZWFXaWR0aCwgcGxheUFyZWFEZXB0aCkpOwogfQog
CisvLyBGSVhNRTogd2UgbWlnaHQgd2FudCB0byBnZW5lcmFsaXplIHRoaXMgZnVuY3Rpb24gZm9y
IG90aGVyIGJhY2tlbmRzLgorc3RhdGljIFZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5p
b24gcm90YXRpb25NYXRyaXhUb1F1YXRlcm5pb24oY29uc3QgZmxvYXQgKCZtYXRyaXgpWzNdWzRd
KQoreworICAgIC8vIFNlZSBodHRwczovL2QzY3czZGQydzMyeDJiLmNsb3VkZnJvbnQubmV0L3dw
LWNvbnRlbnQvdXBsb2Fkcy8yMDE1LzAxL21hdHJpeC10by1xdWF0LnBkZi4KKyAgICBWUlBsYXRm
b3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uIHF1YXRlcm5pb247CisgICAgZmxvYXQgdHJhY2U7
CisgICAgaWYgKG1hdHJpeFsyXVsyXSA8IDApIHsKKyAgICAgICAgaWYgKG1hdHJpeFswXVswXSA+
IG1hdHJpeFsxXVsxXSkgeworICAgICAgICAgICAgdHJhY2UgPSAxICsgbWF0cml4WzBdWzBdIC0g
bWF0cml4WzFdWzFdIC0gbWF0cml4WzJdWzJdOworICAgICAgICAgICAgcXVhdGVybmlvbiA9IHsg
dHJhY2UsIG1hdHJpeFswXVsxXSttYXRyaXhbMV1bMF0sIG1hdHJpeFsyXVswXSttYXRyaXhbMF1b
Ml0sIG1hdHJpeFsxXVsyXSAtIG1hdHJpeFsyXVsxXSB9OworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdHJhY2UgPSAxIC0gbWF0cml4WzBdWzBdICsgbWF0cml4WzFdWzFdIC0gbWF0cml4
WzJdWzJdOworICAgICAgICAgICAgcXVhdGVybmlvbiA9IHsgbWF0cml4WzBdWzFdK21hdHJpeFsx
XVswXSwgdHJhY2UsIG1hdHJpeFsxXVsyXSttYXRyaXhbMl1bMV0sIG1hdHJpeFsyXVswXSAtIG1h
dHJpeFswXVsyXSB9OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1hdHJp
eFswXVswXSA8IC1tYXRyaXhbMV1bMV0pIHsKKyAgICAgICAgICAgIHRyYWNlID0gMSAtIG1hdHJp
eFswXVswXSAtIG1hdHJpeFsxXVsxXSArIG1hdHJpeFsyXVsyXTsKKyAgICAgICAgICAgIHF1YXRl
cm5pb24gPSB7IG1hdHJpeFsyXVswXSttYXRyaXhbMF1bMl0sIG1hdHJpeFsxXVsyXSttYXRyaXhb
Ml1bMV0sIHRyYWNlICwgbWF0cml4WzBdWzFdIC0gbWF0cml4WzFdWzBdIH07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB0cmFjZSA9IDEgKyBtYXRyaXhbMF1bMF0gKyBtYXRyaXhbMV1b
MV0gKyBtYXRyaXhbMl1bMl07CisgICAgICAgICAgICBxdWF0ZXJuaW9uID0geyBtYXRyaXhbMV1b
Ml0gLSBtYXRyaXhbMl1bMV0sIG1hdHJpeFsyXVswXSAtIG1hdHJpeFswXVsyXSwgbWF0cml4WzBd
WzFdIC0gbWF0cml4WzFdWzBdLCB0cmFjZSB9OworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBxdWF0ZXJuaW9uICogKDAuNSAvIHNxcnQodHJhY2UpKTsKK30KKworVlJQbGF0Zm9ybVRyYWNr
aW5nSW5mbyBWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZvKCkKK3sKKyAg
ICB2cjo6VHJhY2tlZERldmljZVBvc2VfdCBwb3Nlc1t2cjo6a191bk1heFRyYWNrZWREZXZpY2VD
b3VudF07CisKKyAgICBtX2NvbXBvc2l0b3ItPldhaXRHZXRQb3NlcyhudWxscHRyLCAwLCBwb3Nl
cywgdnI6OmtfdW5NYXhUcmFja2VkRGV2aWNlQ291bnQpOworCisgICAgbV90cmFja2luZ0luZm8u
Y2xlYXIoKTsKKworICAgIHZyOjpDb21wb3NpdG9yX0ZyYW1lVGltaW5nIHRpbWluZzsKKyAgICB0
aW1pbmcubV9uU2l6ZSA9IHNpemVvZih2cjo6Q29tcG9zaXRvcl9GcmFtZVRpbWluZyk7CisgICAg
bV9jb21wb3NpdG9yLT5HZXRGcmFtZVRpbWluZygmdGltaW5nKTsKKyAgICBtX3RyYWNraW5nSW5m
by50aW1lc3RhbXAgPSB0aW1pbmcubV9mbFN5c3RlbVRpbWVJblNlY29uZHM7CisKKyAgICBpZiAo
IXBvc2VzW3ZyOjprX3VuVHJhY2tlZERldmljZUluZGV4X0htZF0uYkRldmljZUlzQ29ubmVjdGVk
CisgICAgICAgIHx8ICFwb3Nlc1t2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWRdLmJQb3Nl
SXNWYWxpZAorICAgICAgICB8fCBwb3Nlc1t2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWRd
LmVUcmFja2luZ1Jlc3VsdCAhPSB2cjo6VHJhY2tpbmdSZXN1bHRfUnVubmluZ19PSykgeworICAg
ICAgICAvLyBGSVhNRTogSW5pdCBzb21lIGRhdGEgbWF5YmU/Pz8uCisgICAgICAgIHJldHVybiBt
X3RyYWNraW5nSW5mbzsKKyAgICB9CisKKyAgICBjb25zdCBhdXRvJiBITURQb3NlID0gcG9zZXNb
dnI6OmtfdW5UcmFja2VkRGV2aWNlSW5kZXhfSG1kXTsKKyAgICBjb25zdCBhdXRvJiB0cmFuc2Zv
cm0gPSBITURQb3NlLm1EZXZpY2VUb0Fic29sdXRlVHJhY2tpbmc7CisgICAgbV90cmFja2luZ0lu
Zm8ub3JpZW50YXRpb24gPSByb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbih0cmFuc2Zvcm0ubSk7
CisgICAgbV90cmFja2luZ0luZm8ub3JpZW50YXRpb24tPmNvbmp1Z2F0ZSgpOworICAgIG1fdHJh
Y2tpbmdJbmZvLnBvc2l0aW9uID0gRmxvYXRQb2ludDNEKHRyYW5zZm9ybS5tWzBdWzNdLCB0cmFu
c2Zvcm0ubVsxXVszXSwgdHJhbnNmb3JtLm1bMl1bM10pOworICAgIG1fdHJhY2tpbmdJbmZvLmFu
Z3VsYXJWZWxvY2l0eSA9IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OkZsb2F0MyhITURQb3NlLnZB
bmd1bGFyVmVsb2NpdHkudlswXSwgSE1EUG9zZS52QW5ndWxhclZlbG9jaXR5LnZbMV0sIEhNRFBv
c2UudkFuZ3VsYXJWZWxvY2l0eS52WzJdKTsKKyAgICBtX3RyYWNraW5nSW5mby5saW5lYXJWZWxv
Y2l0eSA9IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OkZsb2F0MyhITURQb3NlLnZWZWxvY2l0eS52
WzBdLCBITURQb3NlLnZWZWxvY2l0eS52WzFdLCBITURQb3NlLnZWZWxvY2l0eS52WzJdKTsKKwor
ICAgIHJldHVybiBtX3RyYWNraW5nSW5mbzsKK30KKwogfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIFVTRShPUEVOVlIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oCmluZGV4IDBiOTMz
ZjMyNGZlNTc5YTI4MDJmZDY0YWNlNTBkNTMxYzEzOWYzZDQuLjNhYmUzZGFjMDc5ZTFkOTBjYWEw
YTg1ZTE1YjJkZDY1ZWMzYjNhMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oCkBAIC0zNCw2ICsz
NCw3IEBAIHB1YmxpYzoKIAogICAgIH5WUlBsYXRmb3JtRGlzcGxheU9wZW5WUigpID0gZGVmYXVs
dDsKICAgICBWUlBsYXRmb3JtRGlzcGxheUluZm8gZ2V0RGlzcGxheUluZm8oKSBvdmVycmlkZSB7
IHJldHVybiBtX2Rpc3BsYXlJbmZvOyB9CisgICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBnZXRU
cmFja2luZ0luZm8oKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBWUlBsYXRmb3JtRGlzcGxh
eUluZm86OkZpZWxkT2ZWaWV3IGNvbXB1dGVGaWVsZE9mVmlldyh2cjo6SG1kX0V5ZSk7CkBAIC00
Nyw2ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgdnI6OklWUkNvbXBvc2l0b3IqIG1fY29tcG9zaXRv
cjsKIAogICAgIFZSUGxhdGZvcm1EaXNwbGF5SW5mbyBtX2Rpc3BsYXlJbmZvOworICAgIFZSUGxh
dGZvcm1UcmFja2luZ0luZm8gbV90cmFja2luZ0luZm87CiB9OwogCiB9OyAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337351</attachid>
            <date>2018-04-06 03:14:38 -0700</date>
            <delta_ts>2018-04-06 03:20:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184265-20180406121436.patch</filename>
            <type>text/plain</type>
            <size>25953</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFkZWNlYWFmMDhlMTQz
ZmZjM2MzNDFhMGI0YjJiOWRiZTAxZDc2Yi4uODA3YWUxMTYwZWZkMDYxN2UzNjE2ZDk1MjE2NzQ1
ZmNmN2ZlODIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE4LTA0LTAzICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtPcGVuVlJd
W1dlYlZSXSBSZXRyaWV2ZSBGcmFtZURhdGEgaW4gV2ViVlIncyByQUYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZSRnJhbWVEYXRhIGNvbnRhaW5zIGFs
bCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgcmVuZGVyIGEgVlIgc2NlbmUg
bGlrZSB2aWV3CisgICAgICAgIGFuZCBwcm9qZWN0aW9uIG1hdHJpY2VzLCBwb3NlIGRhdGEgKHBv
c2l0aW9uICYgb3JpZW50YXRpb24pIGFuZCBsaW5lYXIgJiBhbmd1bGFyIHZlbG9jaXR5CisgICAg
ICAgIGFtb25nIG90aGVycy4gVGhlIGdldEZyYW1lRGF0YSgpIGNhbGwgbXVzdCBiZSBpc3N1ZWQg
aW5zaWRlIGEgV2ViVlIncyBvd24KKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VlJEaXNwbGF5OjpnZXRGcmFtZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJEaXNw
bGF5OjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6Y2FuY2VsQW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Lmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlZSRXllUGFyYW1ldGVyczo6cmF3T2Zmc2V0IGNvbnN0KTogUmVxdWlyZWQgdG8gY29tcHV0ZSB2
aWV3IG1hdHJpY2VzLgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWF0cml4VG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWUkZy
YW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VlJGcmFtZURhdGE6OmxlZnRWaWV3TWF0cml4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZS
RnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VlJGcmFtZURhdGE6OnJpZ2h0Vmlld01hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OnJv
dGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlIZWFk
VG9FeWVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VlJGcmFtZURhdGE6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnZyL1ZSUG9zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcHRpb25hbEZsb2F0M1RvSlNDQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpwb3NpdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpWUlBvc2U6OmxpbmVhclZlbG9jaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlZSUG9zZTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjph
bmd1bGFyVmVsb2NpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjphbmd1bGFy
QWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSUG9zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQ
b3NlOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpWUlBvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpW
UlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpRdWF0ZXJuaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb246OmNvbmp1Z2F0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6VlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6Rmxv
YXQzOjpGbG9hdDMpOiBKdXN0IGEgZ3JvdXAgb2YgMyBmbG9hdHMgdXNlZCB0byBzdG9yZQorICAg
ICAgICBib3RoIHZlbG9jaXR5IGFuZCBhY2NlbGVyYXRpb24gaW4gYSBmb3JtYXQgd2hpY2ggaXMg
dmVyeSBjb252ZW5pZW50IHRvIGxhdGVyIGdlbmVyYXRlIEpTQworICAgICAgICBhcnJheXMuCisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpjbGVhcik6CisgICAgICAg
ICogcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUik6CisgICAgICAgIChXZWJDb3JlOjpyb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZv
KToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIu
aDoKKwogMjAxOC0wNC0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUkVHUkVTU0lPTiAocjIzMDIyMyk6IExheW91dFRlc3QgaHR0cC90ZXN0cy9jb250ZW50
ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLW92ZXJmbG93cy1ydWxlLWRhdGEtMS5odG1sIGlz
IGNyYXNoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlz
cGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAKaW5k
ZXggM2YwY2NjMTA2ZDFlNWQ4OWU5OWNlNjk3OTllYjJmZDMxYzI3MjFhMS4uZDUzNzA1MzI0NGEw
YjFmNTViOGEyOTRmMjdiNzhhN2E0YzE1MGFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmNwcApAQCAtMjYsOCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJWUkRpc3BsYXkuaCIKIAorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJWUkRpc3BsYXlDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJWUkV5ZVBhcmFtZXRl
cnMuaCIKKyNpbmNsdWRlICJWUkZyYW1lRGF0YS5oIgogI2luY2x1ZGUgIlZSTGF5ZXJJbml0Lmgi
CiAjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKICNpbmNsdWRlICJWUlBvc2UuaCIKQEAg
LTg1LDI3ICs4OSw0NyBAQCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIFZSRGlzcGxheTo6Z2V0RXll
UGFyYW1ldGVycyhWUkV5ZSBleWUpIGNvbnN0CiAgICAgcmV0dXJuIGV5ZSA9PSBWUkV5ZTo6TGVm
dCA/ICptX2xlZnRFeWVQYXJhbWV0ZXJzIDogKm1fcmlnaHRFeWVQYXJhbWV0ZXJzOwogfQogCi1i
b29sIFZSRGlzcGxheTo6Z2V0RnJhbWVEYXRhKFZSRnJhbWVEYXRhJikgY29uc3QKK2Jvb2wgVlJE
aXNwbGF5OjpnZXRGcmFtZURhdGEoVlJGcmFtZURhdGEmIGZyYW1lRGF0YSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NhcGFiaWxpdGllcy0+aGFzUG9zaXRpb24oKSB8
fCAhbV9jYXBhYmlsaXRpZXMtPmhhc09yaWVudGF0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIEZJWE1FOiBlbnN1cmUgdGhhdCB0aGlzIGlzIG9ubHkgY2FsbGVkIGluc2lk
ZSBXZWJWUidzIHJBRi4KKyAgICBmcmFtZURhdGEudXBkYXRlKG1fZGlzcGxheS0+Z2V0VHJhY2tp
bmdJbmZvKCksIGdldEV5ZVBhcmFtZXRlcnMoVlJFeWU6OkxlZnQpLCBnZXRFeWVQYXJhbWV0ZXJz
KFZSRXllOjpSaWdodCksIG1fZGVwdGhOZWFyLCBtX2RlcHRoRmFyKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogUmVmPFZSUG9zZT4gVlJEaXNwbGF5OjpnZXRQb3NlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gVlJQb3NlOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gVlJQb3NlOjpjcmVhdGUobV9kaXNw
bGF5LT5nZXRUcmFja2luZ0luZm8oKSk7CiB9CiAKIHZvaWQgVlJEaXNwbGF5OjpyZXNldFBvc2Uo
KQogewogfQogCi1sb25nIFZSRGlzcGxheTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJikKK3VpbnQzMl90IFZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJiBjYWxs
YmFjaykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBhdXRvKiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghbV9zY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIpIHsKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElT
UExBWV9NT05JVE9SKQorICAgICAgICAvLyBGSVhNRTogR2V0IHRoZSBkaXNwbGF5IGlkIG9mIHRo
ZSBITUQgYXMgaXQgc2hvdWxkIHVzZSB0aGUgSE1EIG5hdGl2ZSByZWZyZXNoIHJhdGUuCisgICAg
ICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCA9IGRvY3VtZW50LT5wYWdlKCkgPyBkb2N1
bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5kaXNwbGF5SUQoKSA6IDA7CisgICAgICAgIG1fc2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpjcmVh
dGUoKmRvY3VtZW50LCBkaXNwbGF5SUQpOworI2Vsc2UKKyAgICAgICAgbV9zY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIgPSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgqZG9j
dW1lbnQsIDApOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIG1fc2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyLT5yZWdpc3RlckNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAot
dm9pZCBWUkRpc3BsYXk6OmNhbmNlbEFuaW1hdGlvbkZyYW1lKHVuc2lnbmVkKQordm9pZCBWUkRp
c3BsYXk6OmNhbmNlbEFuaW1hdGlvbkZyYW1lKHVpbnQzMl90IGlkKQogeworICAgIGlmICghbV9z
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyLT5jYW5jZWxDYWxsYmFjayhpZCk7CiB9CiAKIHZvaWQg
VlJEaXNwbGF5OjpyZXF1ZXN0UHJlc2VudChjb25zdCBWZWN0b3I8VlJMYXllckluaXQ+JiwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxh
eS5oCmluZGV4IGEyNDJlNDRhMWRmMDJlMjg2N2YwNDJkZjg0ZWUzNWNjYTIyZGI1OTkuLjM2NDdl
NmQyYTIwYmQ5MDFmZDEwZDM4YTNmNTBmNjg0ZTFhOTEzNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9WUkRpc3BsYXkuaApAQCAtMzQsNiArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKK2NsYXNzIFNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIFZSRGlzcGxheUNhcGFiaWxpdGllczsKIGNs
YXNzIFZSRXllUGFyYW1ldGVyczsKIGNsYXNzIFZSRnJhbWVEYXRhOwpAQCAtNzIsOCArNzMsOCBA
QCBwdWJsaWM6CiAgICAgZG91YmxlIGRlcHRoRmFyKCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aEZh
cjsgfQogICAgIHZvaWQgc2V0RGVwdGhGYXIoZG91YmxlIGRlcHRoRmFyKSB7IG1fZGVwdGhGYXIg
PSBkZXB0aEZhcjsgfQogCi0gICAgbG9uZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJlcXVl
c3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKLSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbkZy
YW1lKHVuc2lnbmVkKTsKKyAgICB1aW50MzJfdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJl
cXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlv
bkZyYW1lKHVpbnQzMl90KTsKIAogICAgIHZvaWQgcmVxdWVzdFByZXNlbnQoY29uc3QgVmVjdG9y
PFZSTGF5ZXJJbml0PiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogICAgIHZvaWQgZXhpdFBy
ZXNlbnQoUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CkBAIC0xMTEsNiArMTEyLDggQEAgcHJpdmF0
ZToKIAogICAgIGRvdWJsZSBtX2RlcHRoTmVhciB7IDAuMDEgfTsgLy8gRGVmYXVsdCB2YWx1ZSBm
cm9tIHRoZSBzcGVjcy4KICAgICBkb3VibGUgbV9kZXB0aEZhciB7IDEwMDAwIH07IC8vIERlZmF1
bHQgdmFsdWUgZnJvbSB0aGUgc3BlY3MuCisKKyAgICBSZWZQdHI8U2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyPiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIv
VlJFeWVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFy
YW1ldGVycy5oCmluZGV4IDZhODlkODk4MjBhMDQxNDQ4MzViNTRiNzkwN2FjOGQyMjMwYzJiYmMu
LmYzMGQwZmJkNjU0YTFkMWYxODhhMWY0MzlkMzAzMDgwZmNhNjQ4MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJFeWVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaApAQCAtNDMsNiArNDMsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgUmVmPEZsb2F0MzJBcnJheT4gb2Zmc2V0KCkgY29uc3Q7
CisgICAgY29uc3QgRmxvYXRQb2ludDNEJiByYXdPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQogCiAgICAgY29uc3QgVlJGaWVsZE9mVmlldyYgZmllbGRPZlZpZXcoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmNwcAppbmRleCA1
Yjg0OWJmMjkwZjljZDg5MDU2ZGU4NjZkYjk0ZmQ4NjQxYjA2Mjk4Li41NDM1OTJlZTNjMjcyNDVj
NTE4NDE4YjdjNGJhMDYwNjAzNjAyNDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnZyL1ZSRnJhbWVEYXRhLmNwcApAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlZSRnJhbWVEYXRhLmgiCiAKKyNpbmNsdWRlICJWUkV5ZVBhcmFtZXRlcnMu
aCIKKyNpbmNsdWRlICJWUlBsYXRmb3JtRGlzcGxheS5oIgogI2luY2x1ZGUgIlZSUG9zZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNCwyOSArMzYsMzEgQEAgVlJGcmFtZURhdGE6OlZS
RnJhbWVEYXRhKCkKIHsKIH0KIAotZG91YmxlIFZSRnJhbWVEYXRhOjp0aW1lc3RhbXAoKSBjb25z
dAorc3RhdGljIFJlZjxGbG9hdDMyQXJyYXk+IG1hdHJpeFRvQXJyYXkoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6RmxvYXRNYXRyaXg0IGNvbHVtbk1ham9yTWF0cml4OworICAgIG1hdHJpeC50b0Nv
bHVtbk1ham9yRmxvYXRBcnJheShjb2x1bW5NYWpvck1hdHJpeCk7CisgICAgcmV0dXJuIEZsb2F0
MzJBcnJheTo6Y3JlYXRlKGNvbHVtbk1ham9yTWF0cml4LCAxNikucmVsZWFzZU5vbk51bGwoKTsK
IH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXgoKSBj
b25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6OmxlZnRQcm9qZWN0aW9uTWF0cml4
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbWF0cml4VG9BcnJh
eShtX2xlZnRQcm9qZWN0aW9uTWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0
YTo6bGVmdFZpZXdNYXRyaXgoKSBjb25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6
OmxlZnRWaWV3TWF0cml4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gbWF0cml4VG9BcnJheShtX2xlZnRWaWV3TWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBW
UkZyYW1lRGF0YTo6cmlnaHRQcm9qZWN0aW9uTWF0cml4KCkgY29uc3QKK1JlZjxGbG9hdDMyQXJy
YXk+IFZSRnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdAogewotICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5KG1fcmlnaHRQcm9qZWN0aW9u
TWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0YTo6cmlnaHRWaWV3TWF0cml4
KCkgY29uc3QKK1JlZjxGbG9hdDMyQXJyYXk+IFZSRnJhbWVEYXRhOjpyaWdodFZpZXdNYXRyaXgo
KSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5
KG1fcmlnaHRWaWV3TWF0cml4KTsKIH0KIAogY29uc3QgVlJQb3NlJiBWUkZyYW1lRGF0YTo6cG9z
ZSgpIGNvbnN0CkBAIC02NCw0ICs2OCw4OCBAQCBjb25zdCBWUlBvc2UmIFZSRnJhbWVEYXRhOjpw
b3NlKCkgY29uc3QKICAgICByZXR1cm4gbV9wb3NlOwogfQogCitzdGF0aWMgVHJhbnNmb3JtYXRp
b25NYXRyaXggcHJvamVjdGlvbk1hdHJpeEZyb21GaWVsZE9mVmlldyhjb25zdCBWUkZpZWxkT2ZW
aWV3JiBmb3YsIGRvdWJsZSBkZXB0aE5lYXIsIGRvdWJsZSBkZXB0aEZhcikKK3sKKyAgICBkb3Vi
bGUgdXBUYW4gPSB0YW4oZGVnMnJhZChmb3YudXBEZWdyZWVzKCkpKTsKKyAgICBkb3VibGUgZG93
blRhbiA9IHRhbihkZWcycmFkKGZvdi5kb3duRGVncmVlcygpKSk7CisgICAgZG91YmxlIGxlZnRU
YW4gPSB0YW4oZGVnMnJhZChmb3YubGVmdERlZ3JlZXMoKSkpOworICAgIGRvdWJsZSByaWdodFRh
biA9IHRhbihkZWcycmFkKGZvdi5yaWdodERlZ3JlZXMoKSkpOworCisgICAgZG91YmxlIHhTY2Fs
ZSA9IDIgLyAobGVmdFRhbiArIHJpZ2h0VGFuKTsKKyAgICBkb3VibGUgeVNjYWxlID0gMiAvICh1
cFRhbiArIGRvd25UYW4pOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1h
dHJpeDsKKyAgICBwcm9qZWN0aW9uTWF0cml4LnNldE0xMSh4U2NhbGUpOworICAgIHByb2plY3Rp
b25NYXRyaXguc2V0TTIyKHlTY2FsZSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMzIoKHVw
VGFuIC0gZG93blRhbikgKiB5U2NhbGUgKiAwLjUpOworICAgIHByb2plY3Rpb25NYXRyaXguc2V0
TTMxKC0oKGxlZnRUYW4gLSByaWdodFRhbikgKiB4U2NhbGUgKiAwLjUpKTsKKyAgICBwcm9qZWN0
aW9uTWF0cml4LnNldE0zMygoZGVwdGhOZWFyICsgZGVwdGhGYXIpIC8gKGRlcHRoTmVhciAtIGRl
cHRoRmFyKSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMzQoLTEpOworICAgIHByb2plY3Rp
b25NYXRyaXguc2V0TTQzKCgyICogZGVwdGhGYXIgKiBkZXB0aE5lYXIpIC8gKGRlcHRoTmVhciAt
IGRlcHRoRmFyKSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNNDQoMCk7CisKKyAgICByZXR1
cm4gcHJvamVjdGlvbk1hdHJpeDsKK30KKworLy8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5j
b20vbWF0aHMvZ2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL3F1YXRlcm5pb25Ub01hdHJp
eC9pbmRleC5odG0KK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbk1hdHJpeEZy
b21RdWF0ZXJuaW9uKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24mIHF1
YXRlcm5pb24pCit7CisgICAgZG91YmxlIG1hZ25pdHVkZSA9IChxdWF0ZXJuaW9uLnggKiBxdWF0
ZXJuaW9uLngpICsgKHF1YXRlcm5pb24ueSAqIHF1YXRlcm5pb24ueSkgKyAocXVhdGVybmlvbi56
ICogcXVhdGVybmlvbi56KSArIChxdWF0ZXJuaW9uLncgKiBxdWF0ZXJuaW9uLncpOworICAgIFZS
UGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24gbm9ybWFsaXplZFF1YXRlcm5pb24ocXVh
dGVybmlvbi54IC8gbWFnbml0dWRlLCBxdWF0ZXJuaW9uLnkgLyBtYWduaXR1ZGUsIHF1YXRlcm5p
b24ueiAvIG1hZ25pdHVkZSwgcXVhdGVybmlvbi53IC8gbWFnbml0dWRlKTsKKyAgICBkb3VibGUg
eDIgPSBub3JtYWxpemVkUXVhdGVybmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24ueDsKKyAg
ICBkb3VibGUgeTIgPSBub3JtYWxpemVkUXVhdGVybmlvbi55ICogbm9ybWFsaXplZFF1YXRlcm5p
b24ueTsKKyAgICBkb3VibGUgejIgPSBub3JtYWxpemVkUXVhdGVybmlvbi56ICogbm9ybWFsaXpl
ZFF1YXRlcm5pb24uejsKKyAgICBkb3VibGUgdzIgPSBub3JtYWxpemVkUXVhdGVybmlvbi53ICog
bm9ybWFsaXplZFF1YXRlcm5pb24udzsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eDsKKyAgICBtYXRyaXguc2V0TTExKHgyIC0geTIgLSB6MiArIHcyKTsKKyAgICBtYXRyaXguc2V0
TTIyKC14MiArIHkyIC0gejIgKyB3Mik7CisgICAgbWF0cml4LnNldE0zMygteDIgLSB5MiArIHoy
ICsgdzIpOworCisgICAgZG91YmxlIHh5ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueCAqIG5vcm1h
bGl6ZWRRdWF0ZXJuaW9uLnk7CisgICAgZG91YmxlIHp3ID0gbm9ybWFsaXplZFF1YXRlcm5pb24u
eiAqIG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnc7CisgICAgbWF0cml4LnNldE0yMSgyLjAgKiAoeHkg
KyB6dykpOworICAgIG1hdHJpeC5zZXRNMTIoMi4wICogKHh5IC0gencpKTsKKworICAgIGRvdWJs
ZSB4eiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnggKiBub3JtYWxpemVkUXVhdGVybmlvbi56Owor
ICAgIGRvdWJsZSB5dyA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnkgKiBub3JtYWxpemVkUXVhdGVy
bmlvbi53OworICAgIG1hdHJpeC5zZXRNMzEoMi4wICogKHh6IC0geXcpKTsKKyAgICBtYXRyaXgu
c2V0TTEzKDIuMCAqICh4eiArIHl3KSk7CisKKyAgICBkb3VibGUgeXogPSBub3JtYWxpemVkUXVh
dGVybmlvbi55ICogbm9ybWFsaXplZFF1YXRlcm5pb24uejsKKyAgICBkb3VibGUgeHcgPSBub3Jt
YWxpemVkUXVhdGVybmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24udzsKKyAgICBtYXRyaXgu
c2V0TTMyKDIuMCAqICh5eiArIHh3KSk7CisgICAgbWF0cml4LnNldE0yMygyLjAgKiAoeXogLSB4
dykpOworCisgICAgcmV0dXJuIG1hdHJpeDsKK30KKworc3RhdGljIHZvaWQgYXBwbHlIZWFkVG9F
eWVUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRQb2lu
dDNEJiB0cmFuc2xhdGlvbikKK3sKKyAgICBtYXRyaXguc2V0TTQxKG1hdHJpeC5tNDEoKSAtIHRy
YW5zbGF0aW9uLngoKSk7CisgICAgbWF0cml4LnNldE00MihtYXRyaXgubTQyKCkgLSB0cmFuc2xh
dGlvbi55KCkpOworICAgIG1hdHJpeC5zZXRNNDMobWF0cml4Lm00MygpIC0gdHJhbnNsYXRpb24u
eigpKTsKK30KKwordm9pZCBWUkZyYW1lRGF0YTo6dXBkYXRlKGNvbnN0IFZSUGxhdGZvcm1UcmFj
a2luZ0luZm8mIHRyYWNraW5nSW5mbywgY29uc3QgVlJFeWVQYXJhbWV0ZXJzJiBsZWZ0RXllLCBj
b25zdCBWUkV5ZVBhcmFtZXRlcnMmIHJpZ2h0RXllLCBkb3VibGUgZGVwdGhOZWFyLCBkb3VibGUg
ZGVwdGhGYXIpCit7CisgICAgbV9sZWZ0UHJvamVjdGlvbk1hdHJpeCA9IHByb2plY3Rpb25NYXRy
aXhGcm9tRmllbGRPZlZpZXcobGVmdEV5ZS5maWVsZE9mVmlldygpLCBkZXB0aE5lYXIsIGRlcHRo
RmFyKTsKKyAgICBtX3JpZ2h0UHJvamVjdGlvbk1hdHJpeCA9IHByb2plY3Rpb25NYXRyaXhGcm9t
RmllbGRPZlZpZXcocmlnaHRFeWUuZmllbGRPZlZpZXcoKSwgZGVwdGhOZWFyLCBkZXB0aEZhcik7
CisKKyAgICBtX3RpbWVzdGFtcCA9IHRyYWNraW5nSW5mby50aW1lc3RhbXA7CisgICAgbV9wb3Nl
LT51cGRhdGUodHJhY2tpbmdJbmZvKTsKKworICAgIGF1dG8gcm90YXRpb25NYXRyaXggPSByb3Rh
dGlvbk1hdHJpeEZyb21RdWF0ZXJuaW9uKHRyYWNraW5nSW5mby5vcmllbnRhdGlvbi52YWx1ZV9v
cihWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKSk7CisgICAg
RmxvYXRQb2ludDNEIHBvc2l0aW9uID0gdHJhY2tpbmdJbmZvLnBvc2l0aW9uLnZhbHVlX29yKEZs
b2F0UG9pbnQzRCgwLCAwLCAwKSk7CisgICAgcm90YXRpb25NYXRyaXgudHJhbnNsYXRlM2QoLXBv
c2l0aW9uLngoKSwgLXBvc2l0aW9uLnkoKSwgLXBvc2l0aW9uLnooKSk7CisKKyAgICBGbG9hdFBv
aW50M0QgbGVmdEV5ZU9mZnNldCA9IGxlZnRFeWUucmF3T2Zmc2V0KCk7CisgICAgbV9sZWZ0Vmll
d01hdHJpeCA9IHJvdGF0aW9uTWF0cml4OworICAgIGFwcGx5SGVhZFRvRXllVHJhbnNmb3JtKG1f
bGVmdFZpZXdNYXRyaXgsIGxlZnRFeWVPZmZzZXQpOworCisgICAgRmxvYXRQb2ludDNEIHJpZ2h0
RXllT2Zmc2V0ID0gcmlnaHRFeWUucmF3T2Zmc2V0KCk7CisgICAgbV9yaWdodFZpZXdNYXRyaXgg
PSByb3RhdGlvbk1hdHJpeDsKKyAgICBhcHBseUhlYWRUb0V5ZVRyYW5zZm9ybShtX3JpZ2h0Vmll
d01hdHJpeCwgcmlnaHRFeWVPZmZzZXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmgKaW5kZXggNzAzZDZiYzBm
MjcwMDdlODdiNjczZWFhMDI1NzMxZWIwNjUyYjI1Ny4uYWUyNDY4NmU0OWZmNzdkNGY4NjYyODM1
YWM2YWFhNmEwZmM0MmJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2
ci9WUkZyYW1lRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJGcmFt
ZURhdGEuaApAQCAtMjQsMTEgKzI0LDE1IEBACiAgKi8KICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Zs
b2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgVlJFeWVQYXJhbWV0ZXJzOworY2xhc3MgVlJQbGF0Zm9ybVRyYWNr
aW5nSW5mbzsKIGNsYXNzIFZSUG9zZTsKIAogY2xhc3MgVlJGcmFtZURhdGEgOiBwdWJsaWMgUmVm
Q291bnRlZDxWUkZyYW1lRGF0YT4gewpAQCAtMzgsMjAgKzQyLDI3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlJGcmFtZURhdGEpOwogICAgIH0KIAotICAgIGRvdWJs
ZSB0aW1lc3RhbXAoKSBjb25zdDsKKyAgICBkb3VibGUgdGltZXN0YW1wKCkgY29uc3QgeyByZXR1
cm4gbV90aW1lc3RhbXA7IH0KIAotICAgIEZsb2F0MzJBcnJheSogbGVmdFByb2plY3Rpb25NYXRy
aXgoKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGxlZnRWaWV3TWF0cml4KCkgY29uc3Q7Cisg
ICAgUmVmPEZsb2F0MzJBcnJheT4gbGVmdFByb2plY3Rpb25NYXRyaXgoKSBjb25zdDsKKyAgICBS
ZWY8RmxvYXQzMkFycmF5PiBsZWZ0Vmlld01hdHJpeCgpIGNvbnN0OwogCi0gICAgRmxvYXQzMkFy
cmF5KiByaWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIHJp
Z2h0Vmlld01hdHJpeCgpIGNvbnN0OworICAgIFJlZjxGbG9hdDMyQXJyYXk+IHJpZ2h0UHJvamVj
dGlvbk1hdHJpeCgpIGNvbnN0OworICAgIFJlZjxGbG9hdDMyQXJyYXk+IHJpZ2h0Vmlld01hdHJp
eCgpIGNvbnN0OwogCiAgICAgY29uc3QgVlJQb3NlJiBwb3NlKCkgY29uc3Q7CiAKKyAgICB2b2lk
IHVwZGF0ZShjb25zdCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvJiwgY29uc3QgVlJFeWVQYXJhbWV0
ZXJzJiBsZWZ0RXllLCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIHJpZ2h0RXllLCBkb3VibGUgZGVw
dGhOZWFyLCBkb3VibGUgZGVwdGhGYXIpOworCiBwcml2YXRlOgogICAgIFZSRnJhbWVEYXRhKCk7
CiAKKyAgICBkb3VibGUgbV90aW1lc3RhbXA7CiAgICAgUmVmPFZSUG9zZT4gbV9wb3NlOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbGVmdFByb2plY3Rpb25NYXRyaXg7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9yaWdodFByb2plY3Rpb25NYXRyaXg7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9sZWZ0Vmlld01hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Jp
Z2h0Vmlld01hdHJpeDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcAppbmRleCAzZGMxNWVkZjU1YmIzN2Q1NWFkZTM5N2I2
ZDY1MzA2ZDFmZDdiODg5Li43NGE3OGRiMmQxMzQyZjFhYWNlYzVjYTA5YzcwMmNkMDY5YzMxMGYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuY3BwCkBAIC0yNSwzOCArMjUs
NjMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWUlBvc2UuaCIKIAorI2luY2x1
ZGUgIlZSUGxhdGZvcm1EaXNwbGF5LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVlJQb3Nl
OjpWUlBvc2UoKSA9IGRlZmF1bHQ7CitzdGF0aWMgUmVmUHRyPEZsb2F0MzJBcnJheT4gb3B0aW9u
YWxGbG9hdDNUb0pTQ0FycmF5KGNvbnN0IHN0ZDo6b3B0aW9uYWw8VlJQbGF0Zm9ybVRyYWNraW5n
SW5mbzo6RmxvYXQzPiYgZGF0YSkKK3sKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgcmV0dXJuIEZsb2F0MzJBcnJheTo6Y3JlYXRlKGRhdGEtPmRhdGEsIDMp
LnJlbGVhc2VOb25OdWxsKCk7Cit9CiAKLUZsb2F0MzJBcnJheSogVlJQb3NlOjpwb3NpdGlvbigp
IGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OnBvc2l0aW9uKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcG9zaXRpb24gPSBGbG9hdDMyQXJy
YXk6OmNyZWF0ZSgzKTsKKyAgICBmbG9hdCogcG9zaXRpb25EYXRhID0gcG9zaXRpb24tPmRhdGEo
KTsKKyAgICBwb3NpdGlvbkRhdGFbMF0gPSBtX3RyYWNraW5nSW5mby5wb3NpdGlvbi0+eCgpOwor
ICAgIHBvc2l0aW9uRGF0YVsxXSA9IG1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uLT55KCk7CisgICAg
cG9zaXRpb25EYXRhWzJdID0gbV90cmFja2luZ0luZm8ucG9zaXRpb24tPnooKTsKKyAgICByZXR1
cm4gcG9zaXRpb24ucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6
OmxpbmVhclZlbG9jaXR5KCkgY29uc3QKK1JlZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9zZTo6bGlu
ZWFyVmVsb2NpdHkoKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBv
cHRpb25hbEZsb2F0M1RvSlNDQXJyYXkobV90cmFja2luZ0luZm8ubGluZWFyVmVsb2NpdHkpOwog
fQogCi1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uKCkgY29uc3QKK1Jl
ZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gb3B0aW9uYWxGbG9hdDNUb0pTQ0FycmF5
KG1fdHJhY2tpbmdJbmZvLmxpbmVhckFjY2VsZXJhdGlvbik7CiB9CiAKLUZsb2F0MzJBcnJheSog
VlJQb3NlOjpvcmllbnRhdGlvbigpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6
Om9yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1f
dHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gb3JpZW50YXRpb24gPSBGbG9hdDMyQXJyYXk6OmNyZWF0ZSg0KTsKKyAgICBmbG9hdCog
b3JpZW50YXRpb25EYXRhID0gb3JpZW50YXRpb24tPmRhdGEoKTsKKyAgICBvcmllbnRhdGlvbkRh
dGFbMF0gPSBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+eDsKKyAgICBvcmllbnRhdGlvbkRh
dGFbMV0gPSBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+eTsKKyAgICBvcmllbnRhdGlvbkRh
dGFbMl0gPSBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+ejsKKyAgICBvcmllbnRhdGlvbkRh
dGFbM10gPSBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+dzsKKyAgICByZXR1cm4gb3JpZW50
YXRpb24ucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6OmFuZ3Vs
YXJWZWxvY2l0eSgpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OmFuZ3VsYXJW
ZWxvY2l0eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG9wdGlv
bmFsRmxvYXQzVG9KU0NBcnJheShtX3RyYWNraW5nSW5mby5hbmd1bGFyVmVsb2NpdHkpOwogfQog
Ci1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6YW5ndWxhckFjY2VsZXJhdGlvbigpIGNvbnN0CitSZWZQ
dHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OmFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25zdAogewot
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBvcHRpb25hbEZsb2F0M1RvSlNDQXJyYXko
bV90cmFja2luZ0luZm8uYW5ndWxhckFjY2VsZXJhdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3Nl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5oCmluZGV4IDJlZjBhZTNj
NjA3N2RhMDI3MmRjNTMxNGZkODBjYzFhMzBlNzc1NDIuLjFmNDU2NzZjMzE1NTY4M2JiY2ZhOTNl
NmUyYTk3MTFhMzkwZDBjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
dnIvVlJQb3NlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuaApA
QCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFZSUGxhdGZv
cm1UcmFja2luZ0luZm87CisKIGNsYXNzIFZSUG9zZSA6IHB1YmxpYyBSZWZDb3VudGVkPFZSUG9z
ZT4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8VlJQb3NlPiBjcmVhdGUoKQpAQCAtMzYsMTYg
KzM4LDMwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlJQb3NlKTsK
ICAgICB9CiAKLSAgICBGbG9hdDMyQXJyYXkqIHBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgRmxvYXQz
MkFycmF5KiBsaW5lYXJWZWxvY2l0eSgpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSogbGluZWFy
QWNjZWxlcmF0aW9uKCkgY29uc3Q7CisgICAgc3RhdGljIFJlZjxWUlBvc2U+IGNyZWF0ZShjb25z
dCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvJiB0cmFja2luZ0luZm8pCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBWUlBvc2UodHJhY2tpbmdJbmZvKSk7CisgICAgfQorCisgICAg
UmVmUHRyPEZsb2F0MzJBcnJheT4gcG9zaXRpb24oKSBjb25zdDsKKyAgICBSZWZQdHI8RmxvYXQz
MkFycmF5PiBsaW5lYXJWZWxvY2l0eSgpIGNvbnN0OworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+
IGxpbmVhckFjY2VsZXJhdGlvbigpIGNvbnN0OworCisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4g
b3JpZW50YXRpb24oKSBjb25zdDsKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBhbmd1bGFyVmVs
b2NpdHkoKSBjb25zdDsKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBhbmd1bGFyQWNjZWxlcmF0
aW9uKCkgY29uc3Q7CiAKLSAgICBGbG9hdDMyQXJyYXkqIG9yaWVudGF0aW9uKCkgY29uc3Q7Ci0g
ICAgRmxvYXQzMkFycmF5KiBhbmd1bGFyVmVsb2NpdHkoKSBjb25zdDsKLSAgICBGbG9hdDMyQXJy
YXkqIGFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZShjb25zdCBW
UlBsYXRmb3JtVHJhY2tpbmdJbmZvJiB0cmFja2luZ0luZm8pIHsgbV90cmFja2luZ0luZm8gPSB0
cmFja2luZ0luZm87IH07CiAKIHByaXZhdGU6Ci0gICAgVlJQb3NlKCk7CisgICAgVlJQb3NlKCkg
PSBkZWZhdWx0OworCisgICAgVlJQb3NlKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm8mIHRy
YWNraW5nSW5mbykKKyAgICAgICAgOiBtX3RyYWNraW5nSW5mbyh0cmFja2luZ0luZm8pCisgICAg
eworICAgIH0KKworICAgIFZSUGxhdGZvcm1UcmFja2luZ0luZm8gbV90cmFja2luZ0luZm87CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS92ci9WUlBsYXRmb3JtRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dnIvVlJQbGF0Zm9ybURpc3BsYXkuaAppbmRleCA3NmQyYWM2NmYzM2MwNzhlYzk5MWRhYWFiNDIz
NjZjZTkzNmZmMjdhLi5iNDZmNTc2NGE0NDJkZmU4MWQ1OTYzMWEyNjE3YzcyYjcwOTIzZDQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtRGlzcGxheS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5LmgKQEAg
LTEwMyw5ICsxMDMsNjQgQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlvbmFsPFRyYW5zZm9ybWF0
aW9uTWF0cml4PiBtX3NpdHRpbmdUb1N0YW5kaW5nVHJhbnNmb3JtOwogfTsKIAorc3RydWN0IFZS
UGxhdGZvcm1UcmFja2luZ0luZm8geworICAgIHN0cnVjdCBRdWF0ZXJuaW9uIHsKKyAgICAgICAg
UXVhdGVybmlvbigpCisgICAgICAgICAgICA6IHgoMCksIHkoMCksIHooMCksIHcoMSkgeyB9CisK
KyAgICAgICAgUXVhdGVybmlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KQor
ICAgICAgICAgICAgOiB4KHgpLCB5KHkpLCB6KHopLCB3KHcpIHsgfQorCisgICAgICAgIFF1YXRl
cm5pb24mIGNvbmp1Z2F0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHggKj0gLTE7CisgICAg
ICAgICAgICB5ICo9IC0xOworICAgICAgICAgICAgeiAqPSAtMTsKKyAgICAgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIFF1YXRlcm5pb24mIG9wZXJhdG9yKihmbG9h
dCBmYWN0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHggKj0gZmFjdG9yOworICAgICAgICAg
ICAgeSAqPSBmYWN0b3I7CisgICAgICAgICAgICB6ICo9IGZhY3RvcjsKKyAgICAgICAgICAgIHcg
Kj0gZmFjdG9yOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgICAg
IGZsb2F0IHgsIHksIHosIHc7CisgICAgfTsKKworICAgIHN0cnVjdCBGbG9hdDMgeworICAgICAg
ICBGbG9hdDMoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgYykKKyAgICAgICAgICAgIDogZGF0YSB7
IGEsIGIsIGMgfSB7IH0KKworICAgICAgICBmbG9hdCBkYXRhWzNdOworICAgIH07CisKKyAgICB2
b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIHRpbWVzdGFtcCA9IDA7CisgICAgICAgIHBvc2l0
aW9uID0gc3RkOjpudWxsb3B0OworICAgICAgICBvcmllbnRhdGlvbiA9IHN0ZDo6bnVsbG9wdDsK
KyAgICAgICAgYW5ndWxhckFjY2VsZXJhdGlvbiA9IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgYW5n
dWxhclZlbG9jaXR5ID0gc3RkOjpudWxsb3B0OworICAgICAgICBsaW5lYXJBY2NlbGVyYXRpb24g
PSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGxpbmVhclZlbG9jaXR5ID0gc3RkOjpudWxsb3B0Owor
ICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8UXVhdGVybmlvbj4gb3JpZW50YXRpb247CisgICAg
c3RkOjpvcHRpb25hbDxGbG9hdFBvaW50M0Q+IHBvc2l0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXQzPiBhbmd1bGFyQWNjZWxlcmF0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXQzPiBh
bmd1bGFyVmVsb2NpdHk7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdDM+IGxpbmVhckFjY2VsZXJh
dGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0Mz4gbGluZWFyVmVsb2NpdHk7CisgICAgZG91
YmxlIHRpbWVzdGFtcDsKK307CisKIGNsYXNzIFZSUGxhdGZvcm1EaXNwbGF5IHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFZSUGxhdGZvcm1EaXNwbGF5SW5mbyBnZXREaXNwbGF5SW5mbygpID0gMDsK
KyAgICB2aXJ0dWFsIFZSUGxhdGZvcm1UcmFja2luZ0luZm8gZ2V0VHJhY2tpbmdJbmZvKCkgPSAw
OwogICAgIHZpcnR1YWwgflZSUGxhdGZvcm1EaXNwbGF5KCkgPSBkZWZhdWx0OwogCiAgICAgV2Vh
a1B0cjxWUlBsYXRmb3JtRGlzcGxheT4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0
ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigqdGhpcyk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3Bw
CmluZGV4IDQzOWYxODU4YzY0NzllODFkMjhiYWI0N2MxOGQ1M2QxZTM3NDU3YmMuLmZhZGI2ZmMx
MzczNjIwNzE1NjkwNzcyNGMwZDhjZTg3ZGM2ZDViMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZS
LmNwcApAQCAtNTAsNiArNTAsOCBAQCBWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6VlJQbGF0Zm9y
bURpc3BsYXlPcGVuVlIodnI6OklWUlN5c3RlbSogc3lzdGVtLCB2cjo6SVZSQwogICAgIC8vIEZJ
WE1FOiBXZSdyZSBhc3N1bWluZyBhbiBIVEMgVml2ZSBITUQgaGVyZS4gR2V0IHRoaXMgaW5mbyBm
cm9tIE9wZW5WUj8uCiAgICAgbV9kaXNwbGF5SW5mby5zZXRDYXBhYmlsaXR5RmxhZ3MoVlJEaXNw
bGF5Q2FwYWJpbGl0eUZsYWc6Ok5vbmUgfCBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZzo6UG9zaXRp
b24gfCBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZzo6T3JpZW50YXRpb24gfCBWUkRpc3BsYXlDYXBh
YmlsaXR5RmxhZzo6RXh0ZXJuYWxEaXNwbGF5IHwgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWc6OlBy
ZXNlbnQpOwogCisgICAgbV9jb21wb3NpdG9yLT5TZXRUcmFja2luZ1NwYWNlKHZyOjpUcmFja2lu
Z1VuaXZlcnNlU2VhdGVkKTsKKwogICAgIHVwZGF0ZUV5ZVBhcmFtZXRlcnMoKTsKICAgICB1cGRh
dGVTdGFnZVBhcmFtZXRlcnMoKTsKIH0KQEAgLTk5LDYgKzEwMSw2MyBAQCB2b2lkIFZSUGxhdGZv
cm1EaXNwbGF5T3BlblZSOjp1cGRhdGVTdGFnZVBhcmFtZXRlcnMoKQogICAgIG1fZGlzcGxheUlu
Zm8uc2V0UGxheUFyZWFCb3VuZHMoRmxvYXRTaXplKHBsYXlBcmVhV2lkdGgsIHBsYXlBcmVhRGVw
dGgpKTsKIH0KIAorLy8gRklYTUU6IHdlIG1pZ2h0IHdhbnQgdG8gZ2VuZXJhbGl6ZSB0aGlzIGZ1
bmN0aW9uIGZvciBvdGhlciBiYWNrZW5kcy4KK3N0YXRpYyBWUlBsYXRmb3JtVHJhY2tpbmdJbmZv
OjpRdWF0ZXJuaW9uIHJvdGF0aW9uTWF0cml4VG9RdWF0ZXJuaW9uKGNvbnN0IGZsb2F0ICgmbWF0
cml4KVszXVs0XSkKK3sKKyAgICAvLyBTZWUgaHR0cHM6Ly9kM2N3M2RkMnczMngyYi5jbG91ZGZy
b250Lm5ldC93cC1jb250ZW50L3VwbG9hZHMvMjAxNS8wMS9tYXRyaXgtdG8tcXVhdC5wZGYuCisg
ICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6UXVhdGVybmlvbiBxdWF0ZXJuaW9uOworICAgIGZs
b2F0IHRyYWNlOworICAgIGlmIChtYXRyaXhbMl1bMl0gPCAwKSB7CisgICAgICAgIGlmIChtYXRy
aXhbMF1bMF0gPiBtYXRyaXhbMV1bMV0pIHsKKyAgICAgICAgICAgIHRyYWNlID0gMSArIG1hdHJp
eFswXVswXSAtIG1hdHJpeFsxXVsxXSAtIG1hdHJpeFsyXVsyXTsKKyAgICAgICAgICAgIHF1YXRl
cm5pb24gPSB7IHRyYWNlLCBtYXRyaXhbMF1bMV0rbWF0cml4WzFdWzBdLCBtYXRyaXhbMl1bMF0r
bWF0cml4WzBdWzJdLCBtYXRyaXhbMV1bMl0gLSBtYXRyaXhbMl1bMV0gfTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHRyYWNlID0gMSAtIG1hdHJpeFswXVswXSArIG1hdHJpeFsxXVsx
XSAtIG1hdHJpeFsyXVsyXTsKKyAgICAgICAgICAgIHF1YXRlcm5pb24gPSB7IG1hdHJpeFswXVsx
XSttYXRyaXhbMV1bMF0sIHRyYWNlLCBtYXRyaXhbMV1bMl0rbWF0cml4WzJdWzFdLCBtYXRyaXhb
Ml1bMF0gLSBtYXRyaXhbMF1bMl0gfTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChtYXRyaXhbMF1bMF0gPCAtbWF0cml4WzFdWzFdKSB7CisgICAgICAgICAgICB0cmFjZSA9
IDEgLSBtYXRyaXhbMF1bMF0gLSBtYXRyaXhbMV1bMV0gKyBtYXRyaXhbMl1bMl07CisgICAgICAg
ICAgICBxdWF0ZXJuaW9uID0geyBtYXRyaXhbMl1bMF0rbWF0cml4WzBdWzJdLCBtYXRyaXhbMV1b
Ml0rbWF0cml4WzJdWzFdLCB0cmFjZSAsIG1hdHJpeFswXVsxXSAtIG1hdHJpeFsxXVswXSB9Owor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHJhY2UgPSAxICsgbWF0cml4WzBdWzBdICsg
bWF0cml4WzFdWzFdICsgbWF0cml4WzJdWzJdOworICAgICAgICAgICAgcXVhdGVybmlvbiA9IHsg
bWF0cml4WzFdWzJdIC0gbWF0cml4WzJdWzFdLCBtYXRyaXhbMl1bMF0gLSBtYXRyaXhbMF1bMl0s
IG1hdHJpeFswXVsxXSAtIG1hdHJpeFsxXVswXSwgdHJhY2UgfTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gcXVhdGVybmlvbiAqICgwLjUgLyBzcXJ0KHRyYWNlKSk7Cit9CisKK1ZSUGxh
dGZvcm1UcmFja2luZ0luZm8gVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI6OmdldFRyYWNraW5nSW5m
bygpCit7CisgICAgdnI6OlRyYWNrZWREZXZpY2VQb3NlX3QgcG9zZXNbdnI6OmtfdW5NYXhUcmFj
a2VkRGV2aWNlQ291bnRdOworCisgICAgbV9jb21wb3NpdG9yLT5XYWl0R2V0UG9zZXMobnVsbHB0
ciwgMCwgcG9zZXMsIHZyOjprX3VuTWF4VHJhY2tlZERldmljZUNvdW50KTsKKworICAgIG1fdHJh
Y2tpbmdJbmZvLmNsZWFyKCk7CisKKyAgICB2cjo6Q29tcG9zaXRvcl9GcmFtZVRpbWluZyB0aW1p
bmc7CisgICAgdGltaW5nLm1fblNpemUgPSBzaXplb2YodnI6OkNvbXBvc2l0b3JfRnJhbWVUaW1p
bmcpOworICAgIG1fY29tcG9zaXRvci0+R2V0RnJhbWVUaW1pbmcoJnRpbWluZyk7CisgICAgbV90
cmFja2luZ0luZm8udGltZXN0YW1wID0gdGltaW5nLm1fZmxTeXN0ZW1UaW1lSW5TZWNvbmRzOwor
CisgICAgaWYgKCFwb3Nlc1t2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWRdLmJEZXZpY2VJ
c0Nvbm5lY3RlZAorICAgICAgICB8fCAhcG9zZXNbdnI6OmtfdW5UcmFja2VkRGV2aWNlSW5kZXhf
SG1kXS5iUG9zZUlzVmFsaWQKKyAgICAgICAgfHwgcG9zZXNbdnI6OmtfdW5UcmFja2VkRGV2aWNl
SW5kZXhfSG1kXS5lVHJhY2tpbmdSZXN1bHQgIT0gdnI6OlRyYWNraW5nUmVzdWx0X1J1bm5pbmdf
T0spIHsKKyAgICAgICAgLy8gRklYTUU6IEluaXQgc29tZSBkYXRhIG1heWJlPz8/LgorICAgICAg
ICByZXR1cm4gbV90cmFja2luZ0luZm87CisgICAgfQorCisgICAgY29uc3QgYXV0byYgSE1EUG9z
ZSA9IHBvc2VzW3ZyOjprX3VuVHJhY2tlZERldmljZUluZGV4X0htZF07CisgICAgY29uc3QgYXV0
byYgdHJhbnNmb3JtID0gSE1EUG9zZS5tRGV2aWNlVG9BYnNvbHV0ZVRyYWNraW5nOworICAgIG1f
dHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uID0gcm90YXRpb25NYXRyaXhUb1F1YXRlcm5pb24odHJh
bnNmb3JtLm0pOworICAgIG1fdHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uLT5jb25qdWdhdGUoKTsK
KyAgICBtX3RyYWNraW5nSW5mby5wb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh0cmFuc2Zvcm0ubVsw
XVszXSwgdHJhbnNmb3JtLm1bMV1bM10sIHRyYW5zZm9ybS5tWzJdWzNdKTsKKyAgICBtX3RyYWNr
aW5nSW5mby5hbmd1bGFyVmVsb2NpdHkgPSBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpGbG9hdDMo
SE1EUG9zZS52QW5ndWxhclZlbG9jaXR5LnZbMF0sIEhNRFBvc2UudkFuZ3VsYXJWZWxvY2l0eS52
WzFdLCBITURQb3NlLnZBbmd1bGFyVmVsb2NpdHkudlsyXSk7CisgICAgbV90cmFja2luZ0luZm8u
bGluZWFyVmVsb2NpdHkgPSBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpGbG9hdDMoSE1EUG9zZS52
VmVsb2NpdHkudlswXSwgSE1EUG9zZS52VmVsb2NpdHkudlsxXSwgSE1EUG9zZS52VmVsb2NpdHku
dlsyXSk7CisKKyAgICByZXR1cm4gbV90cmFja2luZ0luZm87Cit9CisKIH07IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoT1BFTlZSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaApp
bmRleCAwYjkzM2YzMjRmZTU3OWEyODAyZmQ2NGFjZTUwZDUzMWMxMzlmM2Q0Li4zYWJlM2RhYzA3
OWUxZDkwY2FhMGE4NWUxNWIyZGQ2NWVjM2IzYTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaApA
QCAtMzQsNiArMzQsNyBAQCBwdWJsaWM6CiAKICAgICB+VlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIo
KSA9IGRlZmF1bHQ7CiAgICAgVlJQbGF0Zm9ybURpc3BsYXlJbmZvIGdldERpc3BsYXlJbmZvKCkg
b3ZlcnJpZGUgeyByZXR1cm4gbV9kaXNwbGF5SW5mbzsgfQorICAgIFZSUGxhdGZvcm1UcmFja2lu
Z0luZm8gZ2V0VHJhY2tpbmdJbmZvKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgVlJQbGF0
Zm9ybURpc3BsYXlJbmZvOjpGaWVsZE9mVmlldyBjb21wdXRlRmllbGRPZlZpZXcodnI6OkhtZF9F
eWUpOwpAQCAtNDcsNiArNDgsNyBAQCBwcml2YXRlOgogICAgIHZyOjpJVlJDb21wb3NpdG9yKiBt
X2NvbXBvc2l0b3I7CiAKICAgICBWUlBsYXRmb3JtRGlzcGxheUluZm8gbV9kaXNwbGF5SW5mbzsK
KyAgICBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvIG1fdHJhY2tpbmdJbmZvOwogfTsKIAogfTsgLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337352</attachid>
            <date>2018-04-06 03:20:36 -0700</date>
            <delta_ts>2018-04-06 03:47:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184265-20180406122034.patch</filename>
            <type>text/plain</type>
            <size>26005</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFkZWNlYWFmMDhlMTQz
ZmZjM2MzNDFhMGI0YjJiOWRiZTAxZDc2Yi4uODA3YWUxMTYwZWZkMDYxN2UzNjE2ZDk1MjE2NzQ1
ZmNmN2ZlODIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE4LTA0LTAzICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtPcGVuVlJd
W1dlYlZSXSBSZXRyaWV2ZSBGcmFtZURhdGEgaW4gV2ViVlIncyByQUYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZSRnJhbWVEYXRhIGNvbnRhaW5zIGFs
bCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgcmVuZGVyIGEgVlIgc2NlbmUg
bGlrZSB2aWV3CisgICAgICAgIGFuZCBwcm9qZWN0aW9uIG1hdHJpY2VzLCBwb3NlIGRhdGEgKHBv
c2l0aW9uICYgb3JpZW50YXRpb24pIGFuZCBsaW5lYXIgJiBhbmd1bGFyIHZlbG9jaXR5CisgICAg
ICAgIGFtb25nIG90aGVycy4gVGhlIGdldEZyYW1lRGF0YSgpIGNhbGwgbXVzdCBiZSBpc3N1ZWQg
aW5zaWRlIGEgV2ViVlIncyBvd24KKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VlJEaXNwbGF5OjpnZXRGcmFtZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJEaXNw
bGF5OjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6Y2FuY2VsQW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Lmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlZSRXllUGFyYW1ldGVyczo6cmF3T2Zmc2V0IGNvbnN0KTogUmVxdWlyZWQgdG8gY29tcHV0ZSB2
aWV3IG1hdHJpY2VzLgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWF0cml4VG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWUkZy
YW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VlJGcmFtZURhdGE6OmxlZnRWaWV3TWF0cml4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZS
RnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VlJGcmFtZURhdGE6OnJpZ2h0Vmlld01hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OnJv
dGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlIZWFk
VG9FeWVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VlJGcmFtZURhdGE6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnZyL1ZSUG9zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcHRpb25hbEZsb2F0M1RvSlNDQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpwb3NpdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpWUlBvc2U6OmxpbmVhclZlbG9jaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlZSUG9zZTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjph
bmd1bGFyVmVsb2NpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjphbmd1bGFy
QWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSUG9zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQ
b3NlOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpWUlBvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpW
UlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpRdWF0ZXJuaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb246OmNvbmp1Z2F0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6VlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6Rmxv
YXQzOjpGbG9hdDMpOiBKdXN0IGEgZ3JvdXAgb2YgMyBmbG9hdHMgdXNlZCB0byBzdG9yZQorICAg
ICAgICBib3RoIHZlbG9jaXR5IGFuZCBhY2NlbGVyYXRpb24gaW4gYSBmb3JtYXQgd2hpY2ggaXMg
dmVyeSBjb252ZW5pZW50IHRvIGxhdGVyIGdlbmVyYXRlIEpTQworICAgICAgICBhcnJheXMuCisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpjbGVhcik6CisgICAgICAg
ICogcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUik6CisgICAgICAgIChXZWJDb3JlOjpyb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZv
KToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIu
aDoKKwogMjAxOC0wNC0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUkVHUkVTU0lPTiAocjIzMDIyMyk6IExheW91dFRlc3QgaHR0cC90ZXN0cy9jb250ZW50
ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLW92ZXJmbG93cy1ydWxlLWRhdGEtMS5odG1sIGlz
IGNyYXNoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlz
cGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAKaW5k
ZXggM2YwY2NjMTA2ZDFlNWQ4OWU5OWNlNjk3OTllYjJmZDMxYzI3MjFhMS4uZDUzNzA1MzI0NGEw
YjFmNTViOGEyOTRmMjdiNzhhN2E0YzE1MGFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmNwcApAQCAtMjYsOCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJWUkRpc3BsYXkuaCIKIAorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJWUkRpc3BsYXlDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJWUkV5ZVBhcmFtZXRl
cnMuaCIKKyNpbmNsdWRlICJWUkZyYW1lRGF0YS5oIgogI2luY2x1ZGUgIlZSTGF5ZXJJbml0Lmgi
CiAjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKICNpbmNsdWRlICJWUlBvc2UuaCIKQEAg
LTg1LDI3ICs4OSw0NyBAQCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIFZSRGlzcGxheTo6Z2V0RXll
UGFyYW1ldGVycyhWUkV5ZSBleWUpIGNvbnN0CiAgICAgcmV0dXJuIGV5ZSA9PSBWUkV5ZTo6TGVm
dCA/ICptX2xlZnRFeWVQYXJhbWV0ZXJzIDogKm1fcmlnaHRFeWVQYXJhbWV0ZXJzOwogfQogCi1i
b29sIFZSRGlzcGxheTo6Z2V0RnJhbWVEYXRhKFZSRnJhbWVEYXRhJikgY29uc3QKK2Jvb2wgVlJE
aXNwbGF5OjpnZXRGcmFtZURhdGEoVlJGcmFtZURhdGEmIGZyYW1lRGF0YSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NhcGFiaWxpdGllcy0+aGFzUG9zaXRpb24oKSB8
fCAhbV9jYXBhYmlsaXRpZXMtPmhhc09yaWVudGF0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIEZJWE1FOiBlbnN1cmUgdGhhdCB0aGlzIGlzIG9ubHkgY2FsbGVkIGluc2lk
ZSBXZWJWUidzIHJBRi4KKyAgICBmcmFtZURhdGEudXBkYXRlKG1fZGlzcGxheS0+Z2V0VHJhY2tp
bmdJbmZvKCksIGdldEV5ZVBhcmFtZXRlcnMoVlJFeWU6OkxlZnQpLCBnZXRFeWVQYXJhbWV0ZXJz
KFZSRXllOjpSaWdodCksIG1fZGVwdGhOZWFyLCBtX2RlcHRoRmFyKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogUmVmPFZSUG9zZT4gVlJEaXNwbGF5OjpnZXRQb3NlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gVlJQb3NlOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gVlJQb3NlOjpjcmVhdGUobV9kaXNw
bGF5LT5nZXRUcmFja2luZ0luZm8oKSk7CiB9CiAKIHZvaWQgVlJEaXNwbGF5OjpyZXNldFBvc2Uo
KQogewogfQogCi1sb25nIFZSRGlzcGxheTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJikKK3VpbnQzMl90IFZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJiBjYWxs
YmFjaykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBhdXRvKiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghbV9zY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIpIHsKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElT
UExBWV9NT05JVE9SKQorICAgICAgICAvLyBGSVhNRTogR2V0IHRoZSBkaXNwbGF5IGlkIG9mIHRo
ZSBITUQgYXMgaXQgc2hvdWxkIHVzZSB0aGUgSE1EIG5hdGl2ZSByZWZyZXNoIHJhdGUuCisgICAg
ICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCA9IGRvY3VtZW50LT5wYWdlKCkgPyBkb2N1
bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5kaXNwbGF5SUQoKSA6IDA7CisgICAgICAgIG1fc2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpjcmVh
dGUoKmRvY3VtZW50LCBkaXNwbGF5SUQpOworI2Vsc2UKKyAgICAgICAgbV9zY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIgPSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgqZG9j
dW1lbnQsIDApOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIG1fc2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyLT5yZWdpc3RlckNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAot
dm9pZCBWUkRpc3BsYXk6OmNhbmNlbEFuaW1hdGlvbkZyYW1lKHVuc2lnbmVkKQordm9pZCBWUkRp
c3BsYXk6OmNhbmNlbEFuaW1hdGlvbkZyYW1lKHVpbnQzMl90IGlkKQogeworICAgIGlmICghbV9z
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyLT5jYW5jZWxDYWxsYmFjayhpZCk7CiB9CiAKIHZvaWQg
VlJEaXNwbGF5OjpyZXF1ZXN0UHJlc2VudChjb25zdCBWZWN0b3I8VlJMYXllckluaXQ+JiwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxh
eS5oCmluZGV4IGEyNDJlNDRhMWRmMDJlMjg2N2YwNDJkZjg0ZWUzNWNjYTIyZGI1OTkuLjM2NDdl
NmQyYTIwYmQ5MDFmZDEwZDM4YTNmNTBmNjg0ZTFhOTEzNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9WUkRpc3BsYXkuaApAQCAtMzQsNiArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKK2NsYXNzIFNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIFZSRGlzcGxheUNhcGFiaWxpdGllczsKIGNs
YXNzIFZSRXllUGFyYW1ldGVyczsKIGNsYXNzIFZSRnJhbWVEYXRhOwpAQCAtNzIsOCArNzMsOCBA
QCBwdWJsaWM6CiAgICAgZG91YmxlIGRlcHRoRmFyKCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aEZh
cjsgfQogICAgIHZvaWQgc2V0RGVwdGhGYXIoZG91YmxlIGRlcHRoRmFyKSB7IG1fZGVwdGhGYXIg
PSBkZXB0aEZhcjsgfQogCi0gICAgbG9uZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJlcXVl
c3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKLSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbkZy
YW1lKHVuc2lnbmVkKTsKKyAgICB1aW50MzJfdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJl
cXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlv
bkZyYW1lKHVpbnQzMl90KTsKIAogICAgIHZvaWQgcmVxdWVzdFByZXNlbnQoY29uc3QgVmVjdG9y
PFZSTGF5ZXJJbml0PiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogICAgIHZvaWQgZXhpdFBy
ZXNlbnQoUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CkBAIC0xMTEsNiArMTEyLDggQEAgcHJpdmF0
ZToKIAogICAgIGRvdWJsZSBtX2RlcHRoTmVhciB7IDAuMDEgfTsgLy8gRGVmYXVsdCB2YWx1ZSBm
cm9tIHRoZSBzcGVjcy4KICAgICBkb3VibGUgbV9kZXB0aEZhciB7IDEwMDAwIH07IC8vIERlZmF1
bHQgdmFsdWUgZnJvbSB0aGUgc3BlY3MuCisKKyAgICBSZWZQdHI8U2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyPiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIv
VlJFeWVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFy
YW1ldGVycy5oCmluZGV4IDZhODlkODk4MjBhMDQxNDQ4MzViNTRiNzkwN2FjOGQyMjMwYzJiYmMu
LmYzMGQwZmJkNjU0YTFkMWYxODhhMWY0MzlkMzAzMDgwZmNhNjQ4MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJFeWVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaApAQCAtNDMsNiArNDMsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgUmVmPEZsb2F0MzJBcnJheT4gb2Zmc2V0KCkgY29uc3Q7
CisgICAgY29uc3QgRmxvYXRQb2ludDNEJiByYXdPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQogCiAgICAgY29uc3QgVlJGaWVsZE9mVmlldyYgZmllbGRPZlZpZXcoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmNwcAppbmRleCA1
Yjg0OWJmMjkwZjljZDg5MDU2ZGU4NjZkYjk0ZmQ4NjQxYjA2Mjk4Li41NDM1OTJlZTNjMjcyNDVj
NTE4NDE4YjdjNGJhMDYwNjAzNjAyNDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnZyL1ZSRnJhbWVEYXRhLmNwcApAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlZSRnJhbWVEYXRhLmgiCiAKKyNpbmNsdWRlICJWUkV5ZVBhcmFtZXRlcnMu
aCIKKyNpbmNsdWRlICJWUlBsYXRmb3JtRGlzcGxheS5oIgogI2luY2x1ZGUgIlZSUG9zZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNCwyOSArMzYsMzEgQEAgVlJGcmFtZURhdGE6OlZS
RnJhbWVEYXRhKCkKIHsKIH0KIAotZG91YmxlIFZSRnJhbWVEYXRhOjp0aW1lc3RhbXAoKSBjb25z
dAorc3RhdGljIFJlZjxGbG9hdDMyQXJyYXk+IG1hdHJpeFRvQXJyYXkoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6RmxvYXRNYXRyaXg0IGNvbHVtbk1ham9yTWF0cml4OworICAgIG1hdHJpeC50b0Nv
bHVtbk1ham9yRmxvYXRBcnJheShjb2x1bW5NYWpvck1hdHJpeCk7CisgICAgcmV0dXJuIEZsb2F0
MzJBcnJheTo6Y3JlYXRlKGNvbHVtbk1ham9yTWF0cml4LCAxNikucmVsZWFzZU5vbk51bGwoKTsK
IH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXgoKSBj
b25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6OmxlZnRQcm9qZWN0aW9uTWF0cml4
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbWF0cml4VG9BcnJh
eShtX2xlZnRQcm9qZWN0aW9uTWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0
YTo6bGVmdFZpZXdNYXRyaXgoKSBjb25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6
OmxlZnRWaWV3TWF0cml4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gbWF0cml4VG9BcnJheShtX2xlZnRWaWV3TWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBW
UkZyYW1lRGF0YTo6cmlnaHRQcm9qZWN0aW9uTWF0cml4KCkgY29uc3QKK1JlZjxGbG9hdDMyQXJy
YXk+IFZSRnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdAogewotICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5KG1fcmlnaHRQcm9qZWN0aW9u
TWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0YTo6cmlnaHRWaWV3TWF0cml4
KCkgY29uc3QKK1JlZjxGbG9hdDMyQXJyYXk+IFZSRnJhbWVEYXRhOjpyaWdodFZpZXdNYXRyaXgo
KSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5
KG1fcmlnaHRWaWV3TWF0cml4KTsKIH0KIAogY29uc3QgVlJQb3NlJiBWUkZyYW1lRGF0YTo6cG9z
ZSgpIGNvbnN0CkBAIC02NCw0ICs2OCw4OCBAQCBjb25zdCBWUlBvc2UmIFZSRnJhbWVEYXRhOjpw
b3NlKCkgY29uc3QKICAgICByZXR1cm4gbV9wb3NlOwogfQogCitzdGF0aWMgVHJhbnNmb3JtYXRp
b25NYXRyaXggcHJvamVjdGlvbk1hdHJpeEZyb21GaWVsZE9mVmlldyhjb25zdCBWUkZpZWxkT2ZW
aWV3JiBmb3YsIGRvdWJsZSBkZXB0aE5lYXIsIGRvdWJsZSBkZXB0aEZhcikKK3sKKyAgICBkb3Vi
bGUgdXBUYW4gPSB0YW4oZGVnMnJhZChmb3YudXBEZWdyZWVzKCkpKTsKKyAgICBkb3VibGUgZG93
blRhbiA9IHRhbihkZWcycmFkKGZvdi5kb3duRGVncmVlcygpKSk7CisgICAgZG91YmxlIGxlZnRU
YW4gPSB0YW4oZGVnMnJhZChmb3YubGVmdERlZ3JlZXMoKSkpOworICAgIGRvdWJsZSByaWdodFRh
biA9IHRhbihkZWcycmFkKGZvdi5yaWdodERlZ3JlZXMoKSkpOworCisgICAgZG91YmxlIHhTY2Fs
ZSA9IDIgLyAobGVmdFRhbiArIHJpZ2h0VGFuKTsKKyAgICBkb3VibGUgeVNjYWxlID0gMiAvICh1
cFRhbiArIGRvd25UYW4pOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1h
dHJpeDsKKyAgICBwcm9qZWN0aW9uTWF0cml4LnNldE0xMSh4U2NhbGUpOworICAgIHByb2plY3Rp
b25NYXRyaXguc2V0TTIyKHlTY2FsZSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMzIoKHVw
VGFuIC0gZG93blRhbikgKiB5U2NhbGUgKiAwLjUpOworICAgIHByb2plY3Rpb25NYXRyaXguc2V0
TTMxKC0oKGxlZnRUYW4gLSByaWdodFRhbikgKiB4U2NhbGUgKiAwLjUpKTsKKyAgICBwcm9qZWN0
aW9uTWF0cml4LnNldE0zMygoZGVwdGhOZWFyICsgZGVwdGhGYXIpIC8gKGRlcHRoTmVhciAtIGRl
cHRoRmFyKSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMzQoLTEpOworICAgIHByb2plY3Rp
b25NYXRyaXguc2V0TTQzKCgyICogZGVwdGhGYXIgKiBkZXB0aE5lYXIpIC8gKGRlcHRoTmVhciAt
IGRlcHRoRmFyKSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNNDQoMCk7CisKKyAgICByZXR1
cm4gcHJvamVjdGlvbk1hdHJpeDsKK30KKworLy8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5j
b20vbWF0aHMvZ2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL3F1YXRlcm5pb25Ub01hdHJp
eC9pbmRleC5odG0KK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbk1hdHJpeEZy
b21RdWF0ZXJuaW9uKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24mIHF1
YXRlcm5pb24pCit7CisgICAgZG91YmxlIG1hZ25pdHVkZSA9IChxdWF0ZXJuaW9uLnggKiBxdWF0
ZXJuaW9uLngpICsgKHF1YXRlcm5pb24ueSAqIHF1YXRlcm5pb24ueSkgKyAocXVhdGVybmlvbi56
ICogcXVhdGVybmlvbi56KSArIChxdWF0ZXJuaW9uLncgKiBxdWF0ZXJuaW9uLncpOworICAgIFZS
UGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24gbm9ybWFsaXplZFF1YXRlcm5pb24ocXVh
dGVybmlvbi54IC8gbWFnbml0dWRlLCBxdWF0ZXJuaW9uLnkgLyBtYWduaXR1ZGUsIHF1YXRlcm5p
b24ueiAvIG1hZ25pdHVkZSwgcXVhdGVybmlvbi53IC8gbWFnbml0dWRlKTsKKyAgICBkb3VibGUg
eDIgPSBub3JtYWxpemVkUXVhdGVybmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24ueDsKKyAg
ICBkb3VibGUgeTIgPSBub3JtYWxpemVkUXVhdGVybmlvbi55ICogbm9ybWFsaXplZFF1YXRlcm5p
b24ueTsKKyAgICBkb3VibGUgejIgPSBub3JtYWxpemVkUXVhdGVybmlvbi56ICogbm9ybWFsaXpl
ZFF1YXRlcm5pb24uejsKKyAgICBkb3VibGUgdzIgPSBub3JtYWxpemVkUXVhdGVybmlvbi53ICog
bm9ybWFsaXplZFF1YXRlcm5pb24udzsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eDsKKyAgICBtYXRyaXguc2V0TTExKHgyIC0geTIgLSB6MiArIHcyKTsKKyAgICBtYXRyaXguc2V0
TTIyKC14MiArIHkyIC0gejIgKyB3Mik7CisgICAgbWF0cml4LnNldE0zMygteDIgLSB5MiArIHoy
ICsgdzIpOworCisgICAgZG91YmxlIHh5ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueCAqIG5vcm1h
bGl6ZWRRdWF0ZXJuaW9uLnk7CisgICAgZG91YmxlIHp3ID0gbm9ybWFsaXplZFF1YXRlcm5pb24u
eiAqIG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnc7CisgICAgbWF0cml4LnNldE0yMSgyLjAgKiAoeHkg
KyB6dykpOworICAgIG1hdHJpeC5zZXRNMTIoMi4wICogKHh5IC0gencpKTsKKworICAgIGRvdWJs
ZSB4eiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnggKiBub3JtYWxpemVkUXVhdGVybmlvbi56Owor
ICAgIGRvdWJsZSB5dyA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnkgKiBub3JtYWxpemVkUXVhdGVy
bmlvbi53OworICAgIG1hdHJpeC5zZXRNMzEoMi4wICogKHh6IC0geXcpKTsKKyAgICBtYXRyaXgu
c2V0TTEzKDIuMCAqICh4eiArIHl3KSk7CisKKyAgICBkb3VibGUgeXogPSBub3JtYWxpemVkUXVh
dGVybmlvbi55ICogbm9ybWFsaXplZFF1YXRlcm5pb24uejsKKyAgICBkb3VibGUgeHcgPSBub3Jt
YWxpemVkUXVhdGVybmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24udzsKKyAgICBtYXRyaXgu
c2V0TTMyKDIuMCAqICh5eiArIHh3KSk7CisgICAgbWF0cml4LnNldE0yMygyLjAgKiAoeXogLSB4
dykpOworCisgICAgcmV0dXJuIG1hdHJpeDsKK30KKworc3RhdGljIHZvaWQgYXBwbHlIZWFkVG9F
eWVUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRQb2lu
dDNEJiB0cmFuc2xhdGlvbikKK3sKKyAgICBtYXRyaXguc2V0TTQxKG1hdHJpeC5tNDEoKSAtIHRy
YW5zbGF0aW9uLngoKSk7CisgICAgbWF0cml4LnNldE00MihtYXRyaXgubTQyKCkgLSB0cmFuc2xh
dGlvbi55KCkpOworICAgIG1hdHJpeC5zZXRNNDMobWF0cml4Lm00MygpIC0gdHJhbnNsYXRpb24u
eigpKTsKK30KKwordm9pZCBWUkZyYW1lRGF0YTo6dXBkYXRlKGNvbnN0IFZSUGxhdGZvcm1UcmFj
a2luZ0luZm8mIHRyYWNraW5nSW5mbywgY29uc3QgVlJFeWVQYXJhbWV0ZXJzJiBsZWZ0RXllLCBj
b25zdCBWUkV5ZVBhcmFtZXRlcnMmIHJpZ2h0RXllLCBkb3VibGUgZGVwdGhOZWFyLCBkb3VibGUg
ZGVwdGhGYXIpCit7CisgICAgbV9sZWZ0UHJvamVjdGlvbk1hdHJpeCA9IHByb2plY3Rpb25NYXRy
aXhGcm9tRmllbGRPZlZpZXcobGVmdEV5ZS5maWVsZE9mVmlldygpLCBkZXB0aE5lYXIsIGRlcHRo
RmFyKTsKKyAgICBtX3JpZ2h0UHJvamVjdGlvbk1hdHJpeCA9IHByb2plY3Rpb25NYXRyaXhGcm9t
RmllbGRPZlZpZXcocmlnaHRFeWUuZmllbGRPZlZpZXcoKSwgZGVwdGhOZWFyLCBkZXB0aEZhcik7
CisKKyAgICBtX3RpbWVzdGFtcCA9IHRyYWNraW5nSW5mby50aW1lc3RhbXA7CisgICAgbV9wb3Nl
LT51cGRhdGUodHJhY2tpbmdJbmZvKTsKKworICAgIGF1dG8gcm90YXRpb25NYXRyaXggPSByb3Rh
dGlvbk1hdHJpeEZyb21RdWF0ZXJuaW9uKHRyYWNraW5nSW5mby5vcmllbnRhdGlvbi52YWx1ZV9v
cihWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKSk7CisgICAg
RmxvYXRQb2ludDNEIHBvc2l0aW9uID0gdHJhY2tpbmdJbmZvLnBvc2l0aW9uLnZhbHVlX29yKEZs
b2F0UG9pbnQzRCgwLCAwLCAwKSk7CisgICAgcm90YXRpb25NYXRyaXgudHJhbnNsYXRlM2QoLXBv
c2l0aW9uLngoKSwgLXBvc2l0aW9uLnkoKSwgLXBvc2l0aW9uLnooKSk7CisKKyAgICBGbG9hdFBv
aW50M0QgbGVmdEV5ZU9mZnNldCA9IGxlZnRFeWUucmF3T2Zmc2V0KCk7CisgICAgbV9sZWZ0Vmll
d01hdHJpeCA9IHJvdGF0aW9uTWF0cml4OworICAgIGFwcGx5SGVhZFRvRXllVHJhbnNmb3JtKG1f
bGVmdFZpZXdNYXRyaXgsIGxlZnRFeWVPZmZzZXQpOworCisgICAgRmxvYXRQb2ludDNEIHJpZ2h0
RXllT2Zmc2V0ID0gcmlnaHRFeWUucmF3T2Zmc2V0KCk7CisgICAgbV9yaWdodFZpZXdNYXRyaXgg
PSByb3RhdGlvbk1hdHJpeDsKKyAgICBhcHBseUhlYWRUb0V5ZVRyYW5zZm9ybShtX3JpZ2h0Vmll
d01hdHJpeCwgcmlnaHRFeWVPZmZzZXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmgKaW5kZXggNzAzZDZiYzBm
MjcwMDdlODdiNjczZWFhMDI1NzMxZWIwNjUyYjI1Ny4uYWUyNDY4NmU0OWZmNzdkNGY4NjYyODM1
YWM2YWFhNmEwZmM0MmJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2
ci9WUkZyYW1lRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJGcmFt
ZURhdGEuaApAQCAtMjQsMTEgKzI0LDE1IEBACiAgKi8KICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Zs
b2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgVlJFeWVQYXJhbWV0ZXJzOworY2xhc3MgVlJQbGF0Zm9ybVRyYWNr
aW5nSW5mbzsKIGNsYXNzIFZSUG9zZTsKIAogY2xhc3MgVlJGcmFtZURhdGEgOiBwdWJsaWMgUmVm
Q291bnRlZDxWUkZyYW1lRGF0YT4gewpAQCAtMzgsMjAgKzQyLDI3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlJGcmFtZURhdGEpOwogICAgIH0KIAotICAgIGRvdWJs
ZSB0aW1lc3RhbXAoKSBjb25zdDsKKyAgICBkb3VibGUgdGltZXN0YW1wKCkgY29uc3QgeyByZXR1
cm4gbV90aW1lc3RhbXA7IH0KIAotICAgIEZsb2F0MzJBcnJheSogbGVmdFByb2plY3Rpb25NYXRy
aXgoKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGxlZnRWaWV3TWF0cml4KCkgY29uc3Q7Cisg
ICAgUmVmPEZsb2F0MzJBcnJheT4gbGVmdFByb2plY3Rpb25NYXRyaXgoKSBjb25zdDsKKyAgICBS
ZWY8RmxvYXQzMkFycmF5PiBsZWZ0Vmlld01hdHJpeCgpIGNvbnN0OwogCi0gICAgRmxvYXQzMkFy
cmF5KiByaWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIHJp
Z2h0Vmlld01hdHJpeCgpIGNvbnN0OworICAgIFJlZjxGbG9hdDMyQXJyYXk+IHJpZ2h0UHJvamVj
dGlvbk1hdHJpeCgpIGNvbnN0OworICAgIFJlZjxGbG9hdDMyQXJyYXk+IHJpZ2h0Vmlld01hdHJp
eCgpIGNvbnN0OwogCiAgICAgY29uc3QgVlJQb3NlJiBwb3NlKCkgY29uc3Q7CiAKKyAgICB2b2lk
IHVwZGF0ZShjb25zdCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvJiwgY29uc3QgVlJFeWVQYXJhbWV0
ZXJzJiBsZWZ0RXllLCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIHJpZ2h0RXllLCBkb3VibGUgZGVw
dGhOZWFyLCBkb3VibGUgZGVwdGhGYXIpOworCiBwcml2YXRlOgogICAgIFZSRnJhbWVEYXRhKCk7
CiAKKyAgICBkb3VibGUgbV90aW1lc3RhbXA7CiAgICAgUmVmPFZSUG9zZT4gbV9wb3NlOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbGVmdFByb2plY3Rpb25NYXRyaXg7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9yaWdodFByb2plY3Rpb25NYXRyaXg7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9sZWZ0Vmlld01hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Jp
Z2h0Vmlld01hdHJpeDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcAppbmRleCAzZGMxNWVkZjU1YmIzN2Q1NWFkZTM5N2I2
ZDY1MzA2ZDFmZDdiODg5Li43NWM1MTAwNjY1MjlhN2MwNjJjMTdkNWFkNjNmNDU4ZGY2MjMwMzVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuY3BwCkBAIC0yNywzNiArMjcs
NTkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WUlBvc2U6OlZSUG9zZSgpID0gZGVmYXVs
dDsKK3N0YXRpYyBSZWZQdHI8RmxvYXQzMkFycmF5PiBvcHRpb25hbEZsb2F0M1RvSlNDQXJyYXko
Y29uc3Qgc3RkOjpvcHRpb25hbDxWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpGbG9hdDM+JiBkYXRh
KQoreworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gRmxvYXQzMkFycmF5OjpjcmVhdGUoZGF0YS0+ZGF0YSwgMykucmVsZWFzZU5vbk51bGwoKTsK
K30KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6OnBvc2l0aW9uKCkgY29uc3QKK1JlZlB0cjxGbG9h
dDMyQXJyYXk+IFZSUG9zZTo6cG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRy
OworICAgIGlmICghbV90cmFja2luZ0luZm8ucG9zaXRpb24pCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgYXV0byBwb3NpdGlvbiA9IEZsb2F0MzJBcnJheTo6Y3JlYXRlKDMpOworICAg
IGZsb2F0KiBwb3NpdGlvbkRhdGEgPSBwb3NpdGlvbi0+ZGF0YSgpOworICAgIHBvc2l0aW9uRGF0
YVswXSA9IG1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uLT54KCk7CisgICAgcG9zaXRpb25EYXRhWzFd
ID0gbV90cmFja2luZ0luZm8ucG9zaXRpb24tPnkoKTsKKyAgICBwb3NpdGlvbkRhdGFbMl0gPSBt
X3RyYWNraW5nSW5mby5wb3NpdGlvbi0+eigpOworICAgIHJldHVybiBwb3NpdGlvbi5yZWxlYXNl
Tm9uTnVsbCgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6bGluZWFyVmVsb2NpdHkoKSBj
b25zdAorUmVmUHRyPEZsb2F0MzJBcnJheT4gVlJQb3NlOjpsaW5lYXJWZWxvY2l0eSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG9wdGlvbmFsRmxvYXQzVG9KU0NB
cnJheShtX3RyYWNraW5nSW5mby5saW5lYXJWZWxvY2l0eSk7CiB9CiAKLUZsb2F0MzJBcnJheSog
VlJQb3NlOjpsaW5lYXJBY2NlbGVyYXRpb24oKSBjb25zdAorUmVmUHRyPEZsb2F0MzJBcnJheT4g
VlJQb3NlOjpsaW5lYXJBY2NlbGVyYXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBvcHRpb25hbEZsb2F0M1RvSlNDQXJyYXkobV90cmFja2luZ0luZm8ubGlu
ZWFyQWNjZWxlcmF0aW9uKTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6Om9yaWVudGF0aW9u
KCkgY29uc3QKK1JlZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9zZTo6b3JpZW50YXRpb24oKSBjb25z
dAogewotICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghbV90cmFja2luZ0luZm8ub3JpZW50
YXRpb24pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBvcmllbnRhdGlvbiA9
IEZsb2F0MzJBcnJheTo6Y3JlYXRlKDQpOworICAgIGZsb2F0KiBvcmllbnRhdGlvbkRhdGEgPSBv
cmllbnRhdGlvbi0+ZGF0YSgpOworICAgIG9yaWVudGF0aW9uRGF0YVswXSA9IG1fdHJhY2tpbmdJ
bmZvLm9yaWVudGF0aW9uLT54OworICAgIG9yaWVudGF0aW9uRGF0YVsxXSA9IG1fdHJhY2tpbmdJ
bmZvLm9yaWVudGF0aW9uLT55OworICAgIG9yaWVudGF0aW9uRGF0YVsyXSA9IG1fdHJhY2tpbmdJ
bmZvLm9yaWVudGF0aW9uLT56OworICAgIG9yaWVudGF0aW9uRGF0YVszXSA9IG1fdHJhY2tpbmdJ
bmZvLm9yaWVudGF0aW9uLT53OworICAgIHJldHVybiBvcmllbnRhdGlvbi5yZWxlYXNlTm9uTnVs
bCgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6YW5ndWxhclZlbG9jaXR5KCkgY29uc3QK
K1JlZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9zZTo6YW5ndWxhclZlbG9jaXR5KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gb3B0aW9uYWxGbG9hdDNUb0pTQ0FycmF5
KG1fdHJhY2tpbmdJbmZvLmFuZ3VsYXJWZWxvY2l0eSk7CiB9CiAKLUZsb2F0MzJBcnJheSogVlJQ
b3NlOjphbmd1bGFyQWNjZWxlcmF0aW9uKCkgY29uc3QKK1JlZlB0cjxGbG9hdDMyQXJyYXk+IFZS
UG9zZTo6YW5ndWxhckFjY2VsZXJhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIG9wdGlvbmFsRmxvYXQzVG9KU0NBcnJheShtX3RyYWNraW5nSW5mby5hbmd1
bGFyQWNjZWxlcmF0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VidnIvVlJQb3NlLmgKaW5kZXggMmVmMGFlM2M2MDc3ZGEwMjcyZGM1MzE0ZmQ4
MGNjMWEzMGU3NzU0Mi4uYzM0Y2MyYmRhNTc2YTEyYzFjMjc0YzFkOGE5M2Q2OGU2OTIxZGNhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5oCkBAIC0yNCwxMSArMjQsMTUgQEAK
ICAqLwogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJWUlBsYXRmb3JtRGlzcGxheS5oIgorCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRmxvYXQzMkFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBWUlBsYXRmb3JtVHJh
Y2tpbmdJbmZvOworCiBjbGFzcyBWUlBvc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxWUlBvc2U+IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFZSUG9zZT4gY3JlYXRlKCkKQEAgLTM2LDE2ICs0MCwz
MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZSUG9zZSk7CiAgICAg
fQogCi0gICAgRmxvYXQzMkFycmF5KiBwb3NpdGlvbigpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJh
eSogbGluZWFyVmVsb2NpdHkoKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGxpbmVhckFjY2Vs
ZXJhdGlvbigpIGNvbnN0OworICAgIHN0YXRpYyBSZWY8VlJQb3NlPiBjcmVhdGUoY29uc3QgVlJQ
bGF0Zm9ybVRyYWNraW5nSW5mbyYgdHJhY2tpbmdJbmZvKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgVlJQb3NlKHRyYWNraW5nSW5mbykpOworICAgIH0KKworICAgIFJlZlB0
cjxGbG9hdDMyQXJyYXk+IHBvc2l0aW9uKCkgY29uc3Q7CisgICAgUmVmUHRyPEZsb2F0MzJBcnJh
eT4gbGluZWFyVmVsb2NpdHkoKSBjb25zdDsKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBsaW5l
YXJBY2NlbGVyYXRpb24oKSBjb25zdDsKIAotICAgIEZsb2F0MzJBcnJheSogb3JpZW50YXRpb24o
KSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGFuZ3VsYXJWZWxvY2l0eSgpIGNvbnN0OwotICAg
IEZsb2F0MzJBcnJheSogYW5ndWxhckFjY2VsZXJhdGlvbigpIGNvbnN0OworICAgIFJlZlB0cjxG
bG9hdDMyQXJyYXk+IG9yaWVudGF0aW9uKCkgY29uc3Q7CisgICAgUmVmUHRyPEZsb2F0MzJBcnJh
eT4gYW5ndWxhclZlbG9jaXR5KCkgY29uc3Q7CisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gYW5n
dWxhckFjY2VsZXJhdGlvbigpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGUoY29uc3QgVlJQbGF0
Zm9ybVRyYWNraW5nSW5mbyYgdHJhY2tpbmdJbmZvKSB7IG1fdHJhY2tpbmdJbmZvID0gdHJhY2tp
bmdJbmZvOyB9OwogCiBwcml2YXRlOgotICAgIFZSUG9zZSgpOworICAgIFZSUG9zZSgpID0gZGVm
YXVsdDsKKworICAgIFZSUG9zZShjb25zdCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvJiB0cmFja2lu
Z0luZm8pCisgICAgICAgIDogbV90cmFja2luZ0luZm8odHJhY2tpbmdJbmZvKQorICAgIHsKKyAg
ICB9CisKKyAgICBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvIG1fdHJhY2tpbmdJbmZvOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZS
UGxhdGZvcm1EaXNwbGF5LmgKaW5kZXggNzZkMmFjNjZmMzNjMDc4ZWM5OTFkYWFhYjQyMzY2Y2U5
MzZmZjI3YS4uYjQ2ZjU3NjRhNDQyZGZlODFkNTk2MzFhMjYxN2M3MmI3MDkyM2Q0OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtRGlzcGxheS5oCkBAIC0xMDMs
OSArMTAzLDY0IEBAIHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25hbDxUcmFuc2Zvcm1hdGlvbk1h
dHJpeD4gbV9zaXR0aW5nVG9TdGFuZGluZ1RyYW5zZm9ybTsKIH07CiAKK3N0cnVjdCBWUlBsYXRm
b3JtVHJhY2tpbmdJbmZvIHsKKyAgICBzdHJ1Y3QgUXVhdGVybmlvbiB7CisgICAgICAgIFF1YXRl
cm5pb24oKQorICAgICAgICAgICAgOiB4KDApLCB5KDApLCB6KDApLCB3KDEpIHsgfQorCisgICAg
ICAgIFF1YXRlcm5pb24oZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdykKKyAgICAg
ICAgICAgIDogeCh4KSwgeSh5KSwgeih6KSwgdyh3KSB7IH0KKworICAgICAgICBRdWF0ZXJuaW9u
JiBjb25qdWdhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICB4ICo9IC0xOworICAgICAgICAg
ICAgeSAqPSAtMTsKKyAgICAgICAgICAgIHogKj0gLTE7CisgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgIH0KKworICAgICAgICBRdWF0ZXJuaW9uJiBvcGVyYXRvciooZmxvYXQgZmFj
dG9yKQorICAgICAgICB7CisgICAgICAgICAgICB4ICo9IGZhY3RvcjsKKyAgICAgICAgICAgIHkg
Kj0gZmFjdG9yOworICAgICAgICAgICAgeiAqPSBmYWN0b3I7CisgICAgICAgICAgICB3ICo9IGZh
Y3RvcjsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICBmbG9h
dCB4LCB5LCB6LCB3OworICAgIH07CisKKyAgICBzdHJ1Y3QgRmxvYXQzIHsKKyAgICAgICAgRmxv
YXQzKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMpCisgICAgICAgICAgICA6IGRhdGEgeyBhLCBi
LCBjIH0geyB9CisKKyAgICAgICAgZmxvYXQgZGF0YVszXTsKKyAgICB9OworCisgICAgdm9pZCBj
bGVhcigpCisgICAgeworICAgICAgICB0aW1lc3RhbXAgPSAwOworICAgICAgICBwb3NpdGlvbiA9
IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgb3JpZW50YXRpb24gPSBzdGQ6Om51bGxvcHQ7CisgICAg
ICAgIGFuZ3VsYXJBY2NlbGVyYXRpb24gPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGFuZ3VsYXJW
ZWxvY2l0eSA9IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgbGluZWFyQWNjZWxlcmF0aW9uID0gc3Rk
OjpudWxsb3B0OworICAgICAgICBsaW5lYXJWZWxvY2l0eSA9IHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBzdGQ6Om9wdGlvbmFsPFF1YXRlcm5pb24+IG9yaWVudGF0aW9uOworICAgIHN0ZDo6
b3B0aW9uYWw8RmxvYXRQb2ludDNEPiBwb3NpdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
Mz4gYW5ndWxhckFjY2VsZXJhdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0Mz4gYW5ndWxh
clZlbG9jaXR5OworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXQzPiBsaW5lYXJBY2NlbGVyYXRpb247
CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdDM+IGxpbmVhclZlbG9jaXR5OworICAgIGRvdWJsZSB0
aW1lc3RhbXA7Cit9OworCiBjbGFzcyBWUlBsYXRmb3JtRGlzcGxheSB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCBWUlBsYXRmb3JtRGlzcGxheUluZm8gZ2V0RGlzcGxheUluZm8oKSA9IDA7CisgICAg
dmlydHVhbCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvIGdldFRyYWNraW5nSW5mbygpID0gMDsKICAg
ICB2aXJ0dWFsIH5WUlBsYXRmb3JtRGlzcGxheSgpID0gZGVmYXVsdDsKIAogICAgIFdlYWtQdHI8
VlJQbGF0Zm9ybURpc3BsYXk+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0
b3J5LmNyZWF0ZVdlYWtQdHIoKnRoaXMpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcAppbmRl
eCA0MzlmMTg1OGM2NDc5ZTgxZDI4YmFiNDdjMThkNTNkMWUzNzQ1N2JjLi5mYWRiNmZjMTM3MzYy
MDcxNTY5MDc3MjRjMGQ4Y2U4N2RjNmQ1YjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAK
QEAgLTUwLDYgKzUwLDggQEAgVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI6OlZSUGxhdGZvcm1EaXNw
bGF5T3BlblZSKHZyOjpJVlJTeXN0ZW0qIHN5c3RlbSwgdnI6OklWUkMKICAgICAvLyBGSVhNRTog
V2UncmUgYXNzdW1pbmcgYW4gSFRDIFZpdmUgSE1EIGhlcmUuIEdldCB0aGlzIGluZm8gZnJvbSBP
cGVuVlI/LgogICAgIG1fZGlzcGxheUluZm8uc2V0Q2FwYWJpbGl0eUZsYWdzKFZSRGlzcGxheUNh
cGFiaWxpdHlGbGFnOjpOb25lIHwgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWc6OlBvc2l0aW9uIHwg
VlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWc6Ok9yaWVudGF0aW9uIHwgVlJEaXNwbGF5Q2FwYWJpbGl0
eUZsYWc6OkV4dGVybmFsRGlzcGxheSB8IFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnOjpQcmVzZW50
KTsKIAorICAgIG1fY29tcG9zaXRvci0+U2V0VHJhY2tpbmdTcGFjZSh2cjo6VHJhY2tpbmdVbml2
ZXJzZVNlYXRlZCk7CisKICAgICB1cGRhdGVFeWVQYXJhbWV0ZXJzKCk7CiAgICAgdXBkYXRlU3Rh
Z2VQYXJhbWV0ZXJzKCk7CiB9CkBAIC05OSw2ICsxMDEsNjMgQEAgdm9pZCBWUlBsYXRmb3JtRGlz
cGxheU9wZW5WUjo6dXBkYXRlU3RhZ2VQYXJhbWV0ZXJzKCkKICAgICBtX2Rpc3BsYXlJbmZvLnNl
dFBsYXlBcmVhQm91bmRzKEZsb2F0U2l6ZShwbGF5QXJlYVdpZHRoLCBwbGF5QXJlYURlcHRoKSk7
CiB9CiAKKy8vIEZJWE1FOiB3ZSBtaWdodCB3YW50IHRvIGdlbmVyYWxpemUgdGhpcyBmdW5jdGlv
biBmb3Igb3RoZXIgYmFja2VuZHMuCitzdGF0aWMgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6UXVh
dGVybmlvbiByb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbihjb25zdCBmbG9hdCAoJm1hdHJpeClb
M11bNF0pCit7CisgICAgLy8gU2VlIGh0dHBzOi8vZDNjdzNkZDJ3MzJ4MmIuY2xvdWRmcm9udC5u
ZXQvd3AtY29udGVudC91cGxvYWRzLzIwMTUvMDEvbWF0cml4LXRvLXF1YXQucGRmLgorICAgIFZS
UGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24gcXVhdGVybmlvbjsKKyAgICBmbG9hdCB0
cmFjZTsKKyAgICBpZiAobWF0cml4WzJdWzJdIDwgMCkgeworICAgICAgICBpZiAobWF0cml4WzBd
WzBdID4gbWF0cml4WzFdWzFdKSB7CisgICAgICAgICAgICB0cmFjZSA9IDEgKyBtYXRyaXhbMF1b
MF0gLSBtYXRyaXhbMV1bMV0gLSBtYXRyaXhbMl1bMl07CisgICAgICAgICAgICBxdWF0ZXJuaW9u
ID0geyB0cmFjZSwgbWF0cml4WzBdWzFdK21hdHJpeFsxXVswXSwgbWF0cml4WzJdWzBdK21hdHJp
eFswXVsyXSwgbWF0cml4WzFdWzJdIC0gbWF0cml4WzJdWzFdIH07CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB0cmFjZSA9IDEgLSBtYXRyaXhbMF1bMF0gKyBtYXRyaXhbMV1bMV0gLSBt
YXRyaXhbMl1bMl07CisgICAgICAgICAgICBxdWF0ZXJuaW9uID0geyBtYXRyaXhbMF1bMV0rbWF0
cml4WzFdWzBdLCB0cmFjZSwgbWF0cml4WzFdWzJdK21hdHJpeFsyXVsxXSwgbWF0cml4WzJdWzBd
IC0gbWF0cml4WzBdWzJdIH07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
bWF0cml4WzBdWzBdIDwgLW1hdHJpeFsxXVsxXSkgeworICAgICAgICAgICAgdHJhY2UgPSAxIC0g
bWF0cml4WzBdWzBdIC0gbWF0cml4WzFdWzFdICsgbWF0cml4WzJdWzJdOworICAgICAgICAgICAg
cXVhdGVybmlvbiA9IHsgbWF0cml4WzJdWzBdK21hdHJpeFswXVsyXSwgbWF0cml4WzFdWzJdK21h
dHJpeFsyXVsxXSwgdHJhY2UgLCBtYXRyaXhbMF1bMV0gLSBtYXRyaXhbMV1bMF0gfTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyYWNlID0gMSArIG1hdHJpeFswXVswXSArIG1hdHJp
eFsxXVsxXSArIG1hdHJpeFsyXVsyXTsKKyAgICAgICAgICAgIHF1YXRlcm5pb24gPSB7IG1hdHJp
eFsxXVsyXSAtIG1hdHJpeFsyXVsxXSwgbWF0cml4WzJdWzBdIC0gbWF0cml4WzBdWzJdLCBtYXRy
aXhbMF1bMV0gLSBtYXRyaXhbMV1bMF0sIHRyYWNlIH07CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHF1YXRlcm5pb24gKiAoMC41IC8gc3FydCh0cmFjZSkpOworfQorCitWUlBsYXRmb3Jt
VHJhY2tpbmdJbmZvIFZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpnZXRUcmFja2luZ0luZm8oKQor
eworICAgIHZyOjpUcmFja2VkRGV2aWNlUG9zZV90IHBvc2VzW3ZyOjprX3VuTWF4VHJhY2tlZERl
dmljZUNvdW50XTsKKworICAgIG1fY29tcG9zaXRvci0+V2FpdEdldFBvc2VzKG51bGxwdHIsIDAs
IHBvc2VzLCB2cjo6a191bk1heFRyYWNrZWREZXZpY2VDb3VudCk7CisKKyAgICBtX3RyYWNraW5n
SW5mby5jbGVhcigpOworCisgICAgdnI6OkNvbXBvc2l0b3JfRnJhbWVUaW1pbmcgdGltaW5nOwor
ICAgIHRpbWluZy5tX25TaXplID0gc2l6ZW9mKHZyOjpDb21wb3NpdG9yX0ZyYW1lVGltaW5nKTsK
KyAgICBtX2NvbXBvc2l0b3ItPkdldEZyYW1lVGltaW5nKCZ0aW1pbmcpOworICAgIG1fdHJhY2tp
bmdJbmZvLnRpbWVzdGFtcCA9IHRpbWluZy5tX2ZsU3lzdGVtVGltZUluU2Vjb25kczsKKworICAg
IGlmICghcG9zZXNbdnI6OmtfdW5UcmFja2VkRGV2aWNlSW5kZXhfSG1kXS5iRGV2aWNlSXNDb25u
ZWN0ZWQKKyAgICAgICAgfHwgIXBvc2VzW3ZyOjprX3VuVHJhY2tlZERldmljZUluZGV4X0htZF0u
YlBvc2VJc1ZhbGlkCisgICAgICAgIHx8IHBvc2VzW3ZyOjprX3VuVHJhY2tlZERldmljZUluZGV4
X0htZF0uZVRyYWNraW5nUmVzdWx0ICE9IHZyOjpUcmFja2luZ1Jlc3VsdF9SdW5uaW5nX09LKSB7
CisgICAgICAgIC8vIEZJWE1FOiBJbml0IHNvbWUgZGF0YSBtYXliZT8/Py4KKyAgICAgICAgcmV0
dXJuIG1fdHJhY2tpbmdJbmZvOworICAgIH0KKworICAgIGNvbnN0IGF1dG8mIEhNRFBvc2UgPSBw
b3Nlc1t2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWRdOworICAgIGNvbnN0IGF1dG8mIHRy
YW5zZm9ybSA9IEhNRFBvc2UubURldmljZVRvQWJzb2x1dGVUcmFja2luZzsKKyAgICBtX3RyYWNr
aW5nSW5mby5vcmllbnRhdGlvbiA9IHJvdGF0aW9uTWF0cml4VG9RdWF0ZXJuaW9uKHRyYW5zZm9y
bS5tKTsKKyAgICBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+Y29uanVnYXRlKCk7CisgICAg
bV90cmFja2luZ0luZm8ucG9zaXRpb24gPSBGbG9hdFBvaW50M0QodHJhbnNmb3JtLm1bMF1bM10s
IHRyYW5zZm9ybS5tWzFdWzNdLCB0cmFuc2Zvcm0ubVsyXVszXSk7CisgICAgbV90cmFja2luZ0lu
Zm8uYW5ndWxhclZlbG9jaXR5ID0gVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6RmxvYXQzKEhNRFBv
c2UudkFuZ3VsYXJWZWxvY2l0eS52WzBdLCBITURQb3NlLnZBbmd1bGFyVmVsb2NpdHkudlsxXSwg
SE1EUG9zZS52QW5ndWxhclZlbG9jaXR5LnZbMl0pOworICAgIG1fdHJhY2tpbmdJbmZvLmxpbmVh
clZlbG9jaXR5ID0gVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6RmxvYXQzKEhNRFBvc2UudlZlbG9j
aXR5LnZbMF0sIEhNRFBvc2UudlZlbG9jaXR5LnZbMV0sIEhNRFBvc2UudlZlbG9jaXR5LnZbMl0p
OworCisgICAgcmV0dXJuIG1fdHJhY2tpbmdJbmZvOworfQorCiB9OyAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gVVNFKE9QRU5WUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmgKaW5kZXgg
MGI5MzNmMzI0ZmU1NzlhMjgwMmZkNjRhY2U1MGQ1MzFjMTM5ZjNkNC4uM2FiZTNkYWMwNzllMWQ5
MGNhYTBhODVlMTViMmRkNjVlYzNiM2EyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmgKQEAgLTM0
LDYgKzM0LDcgQEAgcHVibGljOgogCiAgICAgflZSUGxhdGZvcm1EaXNwbGF5T3BlblZSKCkgPSBk
ZWZhdWx0OwogICAgIFZSUGxhdGZvcm1EaXNwbGF5SW5mbyBnZXREaXNwbGF5SW5mbygpIG92ZXJy
aWRlIHsgcmV0dXJuIG1fZGlzcGxheUluZm87IH0KKyAgICBWUlBsYXRmb3JtVHJhY2tpbmdJbmZv
IGdldFRyYWNraW5nSW5mbygpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFZSUGxhdGZvcm1E
aXNwbGF5SW5mbzo6RmllbGRPZlZpZXcgY29tcHV0ZUZpZWxkT2ZWaWV3KHZyOjpIbWRfRXllKTsK
QEAgLTQ3LDYgKzQ4LDcgQEAgcHJpdmF0ZToKICAgICB2cjo6SVZSQ29tcG9zaXRvciogbV9jb21w
b3NpdG9yOwogCiAgICAgVlJQbGF0Zm9ybURpc3BsYXlJbmZvIG1fZGlzcGxheUluZm87CisgICAg
VlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBtX3RyYWNraW5nSW5mbzsKIH07CiAKIH07IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337353</attachid>
            <date>2018-04-06 03:48:00 -0700</date>
            <delta_ts>2018-04-06 03:59:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184265-20180406124756.patch</filename>
            <type>text/plain</type>
            <size>26015</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFkZWNlYWFmMDhlMTQz
ZmZjM2MzNDFhMGI0YjJiOWRiZTAxZDc2Yi4uODA3YWUxMTYwZWZkMDYxN2UzNjE2ZDk1MjE2NzQ1
ZmNmN2ZlODIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE4LTA0LTAzICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtPcGVuVlJd
W1dlYlZSXSBSZXRyaWV2ZSBGcmFtZURhdGEgaW4gV2ViVlIncyByQUYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZSRnJhbWVEYXRhIGNvbnRhaW5zIGFs
bCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgcmVuZGVyIGEgVlIgc2NlbmUg
bGlrZSB2aWV3CisgICAgICAgIGFuZCBwcm9qZWN0aW9uIG1hdHJpY2VzLCBwb3NlIGRhdGEgKHBv
c2l0aW9uICYgb3JpZW50YXRpb24pIGFuZCBsaW5lYXIgJiBhbmd1bGFyIHZlbG9jaXR5CisgICAg
ICAgIGFtb25nIG90aGVycy4gVGhlIGdldEZyYW1lRGF0YSgpIGNhbGwgbXVzdCBiZSBpc3N1ZWQg
aW5zaWRlIGEgV2ViVlIncyBvd24KKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VlJEaXNwbGF5OjpnZXRGcmFtZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJEaXNw
bGF5OjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6Y2FuY2VsQW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Lmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlZSRXllUGFyYW1ldGVyczo6cmF3T2Zmc2V0IGNvbnN0KTogUmVxdWlyZWQgdG8gY29tcHV0ZSB2
aWV3IG1hdHJpY2VzLgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWF0cml4VG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWUkZy
YW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VlJGcmFtZURhdGE6OmxlZnRWaWV3TWF0cml4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZS
RnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VlJGcmFtZURhdGE6OnJpZ2h0Vmlld01hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OnJv
dGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlIZWFk
VG9FeWVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VlJGcmFtZURhdGE6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnZyL1ZSUG9zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcHRpb25hbEZsb2F0M1RvSlNDQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpwb3NpdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpWUlBvc2U6OmxpbmVhclZlbG9jaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlZSUG9zZTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjph
bmd1bGFyVmVsb2NpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjphbmd1bGFy
QWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSUG9zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQ
b3NlOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpWUlBvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpW
UlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpRdWF0ZXJuaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb246OmNvbmp1Z2F0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6VlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6Rmxv
YXQzOjpGbG9hdDMpOiBKdXN0IGEgZ3JvdXAgb2YgMyBmbG9hdHMgdXNlZCB0byBzdG9yZQorICAg
ICAgICBib3RoIHZlbG9jaXR5IGFuZCBhY2NlbGVyYXRpb24gaW4gYSBmb3JtYXQgd2hpY2ggaXMg
dmVyeSBjb252ZW5pZW50IHRvIGxhdGVyIGdlbmVyYXRlIEpTQworICAgICAgICBhcnJheXMuCisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpjbGVhcik6CisgICAgICAg
ICogcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUik6CisgICAgICAgIChXZWJDb3JlOjpyb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZv
KToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIu
aDoKKwogMjAxOC0wNC0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUkVHUkVTU0lPTiAocjIzMDIyMyk6IExheW91dFRlc3QgaHR0cC90ZXN0cy9jb250ZW50
ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLW92ZXJmbG93cy1ydWxlLWRhdGEtMS5odG1sIGlz
IGNyYXNoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlz
cGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAKaW5k
ZXggM2YwY2NjMTA2ZDFlNWQ4OWU5OWNlNjk3OTllYjJmZDMxYzI3MjFhMS4uZDUzNzA1MzI0NGEw
YjFmNTViOGEyOTRmMjdiNzhhN2E0YzE1MGFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmNwcApAQCAtMjYsOCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJWUkRpc3BsYXkuaCIKIAorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJWUkRpc3BsYXlDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJWUkV5ZVBhcmFtZXRl
cnMuaCIKKyNpbmNsdWRlICJWUkZyYW1lRGF0YS5oIgogI2luY2x1ZGUgIlZSTGF5ZXJJbml0Lmgi
CiAjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKICNpbmNsdWRlICJWUlBvc2UuaCIKQEAg
LTg1LDI3ICs4OSw0NyBAQCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIFZSRGlzcGxheTo6Z2V0RXll
UGFyYW1ldGVycyhWUkV5ZSBleWUpIGNvbnN0CiAgICAgcmV0dXJuIGV5ZSA9PSBWUkV5ZTo6TGVm
dCA/ICptX2xlZnRFeWVQYXJhbWV0ZXJzIDogKm1fcmlnaHRFeWVQYXJhbWV0ZXJzOwogfQogCi1i
b29sIFZSRGlzcGxheTo6Z2V0RnJhbWVEYXRhKFZSRnJhbWVEYXRhJikgY29uc3QKK2Jvb2wgVlJE
aXNwbGF5OjpnZXRGcmFtZURhdGEoVlJGcmFtZURhdGEmIGZyYW1lRGF0YSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NhcGFiaWxpdGllcy0+aGFzUG9zaXRpb24oKSB8
fCAhbV9jYXBhYmlsaXRpZXMtPmhhc09yaWVudGF0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIEZJWE1FOiBlbnN1cmUgdGhhdCB0aGlzIGlzIG9ubHkgY2FsbGVkIGluc2lk
ZSBXZWJWUidzIHJBRi4KKyAgICBmcmFtZURhdGEudXBkYXRlKG1fZGlzcGxheS0+Z2V0VHJhY2tp
bmdJbmZvKCksIGdldEV5ZVBhcmFtZXRlcnMoVlJFeWU6OkxlZnQpLCBnZXRFeWVQYXJhbWV0ZXJz
KFZSRXllOjpSaWdodCksIG1fZGVwdGhOZWFyLCBtX2RlcHRoRmFyKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogUmVmPFZSUG9zZT4gVlJEaXNwbGF5OjpnZXRQb3NlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gVlJQb3NlOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gVlJQb3NlOjpjcmVhdGUobV9kaXNw
bGF5LT5nZXRUcmFja2luZ0luZm8oKSk7CiB9CiAKIHZvaWQgVlJEaXNwbGF5OjpyZXNldFBvc2Uo
KQogewogfQogCi1sb25nIFZSRGlzcGxheTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJikKK3VpbnQzMl90IFZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJiBjYWxs
YmFjaykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBhdXRvKiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghbV9zY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIpIHsKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElT
UExBWV9NT05JVE9SKQorICAgICAgICAvLyBGSVhNRTogR2V0IHRoZSBkaXNwbGF5IGlkIG9mIHRo
ZSBITUQgYXMgaXQgc2hvdWxkIHVzZSB0aGUgSE1EIG5hdGl2ZSByZWZyZXNoIHJhdGUuCisgICAg
ICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCA9IGRvY3VtZW50LT5wYWdlKCkgPyBkb2N1
bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5kaXNwbGF5SUQoKSA6IDA7CisgICAgICAgIG1fc2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpjcmVh
dGUoKmRvY3VtZW50LCBkaXNwbGF5SUQpOworI2Vsc2UKKyAgICAgICAgbV9zY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIgPSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgqZG9j
dW1lbnQsIDApOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIG1fc2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyLT5yZWdpc3RlckNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAot
dm9pZCBWUkRpc3BsYXk6OmNhbmNlbEFuaW1hdGlvbkZyYW1lKHVuc2lnbmVkKQordm9pZCBWUkRp
c3BsYXk6OmNhbmNlbEFuaW1hdGlvbkZyYW1lKHVpbnQzMl90IGlkKQogeworICAgIGlmICghbV9z
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyLT5jYW5jZWxDYWxsYmFjayhpZCk7CiB9CiAKIHZvaWQg
VlJEaXNwbGF5OjpyZXF1ZXN0UHJlc2VudChjb25zdCBWZWN0b3I8VlJMYXllckluaXQ+JiwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxh
eS5oCmluZGV4IGEyNDJlNDRhMWRmMDJlMjg2N2YwNDJkZjg0ZWUzNWNjYTIyZGI1OTkuLjM2NDdl
NmQyYTIwYmQ5MDFmZDEwZDM4YTNmNTBmNjg0ZTFhOTEzNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9WUkRpc3BsYXkuaApAQCAtMzQsNiArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKK2NsYXNzIFNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIFZSRGlzcGxheUNhcGFiaWxpdGllczsKIGNs
YXNzIFZSRXllUGFyYW1ldGVyczsKIGNsYXNzIFZSRnJhbWVEYXRhOwpAQCAtNzIsOCArNzMsOCBA
QCBwdWJsaWM6CiAgICAgZG91YmxlIGRlcHRoRmFyKCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aEZh
cjsgfQogICAgIHZvaWQgc2V0RGVwdGhGYXIoZG91YmxlIGRlcHRoRmFyKSB7IG1fZGVwdGhGYXIg
PSBkZXB0aEZhcjsgfQogCi0gICAgbG9uZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJlcXVl
c3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKLSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbkZy
YW1lKHVuc2lnbmVkKTsKKyAgICB1aW50MzJfdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJl
cXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlv
bkZyYW1lKHVpbnQzMl90KTsKIAogICAgIHZvaWQgcmVxdWVzdFByZXNlbnQoY29uc3QgVmVjdG9y
PFZSTGF5ZXJJbml0PiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogICAgIHZvaWQgZXhpdFBy
ZXNlbnQoUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CkBAIC0xMTEsNiArMTEyLDggQEAgcHJpdmF0
ZToKIAogICAgIGRvdWJsZSBtX2RlcHRoTmVhciB7IDAuMDEgfTsgLy8gRGVmYXVsdCB2YWx1ZSBm
cm9tIHRoZSBzcGVjcy4KICAgICBkb3VibGUgbV9kZXB0aEZhciB7IDEwMDAwIH07IC8vIERlZmF1
bHQgdmFsdWUgZnJvbSB0aGUgc3BlY3MuCisKKyAgICBSZWZQdHI8U2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyPiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIv
VlJFeWVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFy
YW1ldGVycy5oCmluZGV4IDZhODlkODk4MjBhMDQxNDQ4MzViNTRiNzkwN2FjOGQyMjMwYzJiYmMu
LmYzMGQwZmJkNjU0YTFkMWYxODhhMWY0MzlkMzAzMDgwZmNhNjQ4MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJFeWVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaApAQCAtNDMsNiArNDMsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgUmVmPEZsb2F0MzJBcnJheT4gb2Zmc2V0KCkgY29uc3Q7
CisgICAgY29uc3QgRmxvYXRQb2ludDNEJiByYXdPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQogCiAgICAgY29uc3QgVlJGaWVsZE9mVmlldyYgZmllbGRPZlZpZXcoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmNwcAppbmRleCA1
Yjg0OWJmMjkwZjljZDg5MDU2ZGU4NjZkYjk0ZmQ4NjQxYjA2Mjk4Li41NDM1OTJlZTNjMjcyNDVj
NTE4NDE4YjdjNGJhMDYwNjAzNjAyNDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnZyL1ZSRnJhbWVEYXRhLmNwcApAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlZSRnJhbWVEYXRhLmgiCiAKKyNpbmNsdWRlICJWUkV5ZVBhcmFtZXRlcnMu
aCIKKyNpbmNsdWRlICJWUlBsYXRmb3JtRGlzcGxheS5oIgogI2luY2x1ZGUgIlZSUG9zZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNCwyOSArMzYsMzEgQEAgVlJGcmFtZURhdGE6OlZS
RnJhbWVEYXRhKCkKIHsKIH0KIAotZG91YmxlIFZSRnJhbWVEYXRhOjp0aW1lc3RhbXAoKSBjb25z
dAorc3RhdGljIFJlZjxGbG9hdDMyQXJyYXk+IG1hdHJpeFRvQXJyYXkoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6RmxvYXRNYXRyaXg0IGNvbHVtbk1ham9yTWF0cml4OworICAgIG1hdHJpeC50b0Nv
bHVtbk1ham9yRmxvYXRBcnJheShjb2x1bW5NYWpvck1hdHJpeCk7CisgICAgcmV0dXJuIEZsb2F0
MzJBcnJheTo6Y3JlYXRlKGNvbHVtbk1ham9yTWF0cml4LCAxNikucmVsZWFzZU5vbk51bGwoKTsK
IH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXgoKSBj
b25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6OmxlZnRQcm9qZWN0aW9uTWF0cml4
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbWF0cml4VG9BcnJh
eShtX2xlZnRQcm9qZWN0aW9uTWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0
YTo6bGVmdFZpZXdNYXRyaXgoKSBjb25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6
OmxlZnRWaWV3TWF0cml4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gbWF0cml4VG9BcnJheShtX2xlZnRWaWV3TWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBW
UkZyYW1lRGF0YTo6cmlnaHRQcm9qZWN0aW9uTWF0cml4KCkgY29uc3QKK1JlZjxGbG9hdDMyQXJy
YXk+IFZSRnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdAogewotICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5KG1fcmlnaHRQcm9qZWN0aW9u
TWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0YTo6cmlnaHRWaWV3TWF0cml4
KCkgY29uc3QKK1JlZjxGbG9hdDMyQXJyYXk+IFZSRnJhbWVEYXRhOjpyaWdodFZpZXdNYXRyaXgo
KSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5
KG1fcmlnaHRWaWV3TWF0cml4KTsKIH0KIAogY29uc3QgVlJQb3NlJiBWUkZyYW1lRGF0YTo6cG9z
ZSgpIGNvbnN0CkBAIC02NCw0ICs2OCw4OCBAQCBjb25zdCBWUlBvc2UmIFZSRnJhbWVEYXRhOjpw
b3NlKCkgY29uc3QKICAgICByZXR1cm4gbV9wb3NlOwogfQogCitzdGF0aWMgVHJhbnNmb3JtYXRp
b25NYXRyaXggcHJvamVjdGlvbk1hdHJpeEZyb21GaWVsZE9mVmlldyhjb25zdCBWUkZpZWxkT2ZW
aWV3JiBmb3YsIGRvdWJsZSBkZXB0aE5lYXIsIGRvdWJsZSBkZXB0aEZhcikKK3sKKyAgICBkb3Vi
bGUgdXBUYW4gPSB0YW4oZGVnMnJhZChmb3YudXBEZWdyZWVzKCkpKTsKKyAgICBkb3VibGUgZG93
blRhbiA9IHRhbihkZWcycmFkKGZvdi5kb3duRGVncmVlcygpKSk7CisgICAgZG91YmxlIGxlZnRU
YW4gPSB0YW4oZGVnMnJhZChmb3YubGVmdERlZ3JlZXMoKSkpOworICAgIGRvdWJsZSByaWdodFRh
biA9IHRhbihkZWcycmFkKGZvdi5yaWdodERlZ3JlZXMoKSkpOworCisgICAgZG91YmxlIHhTY2Fs
ZSA9IDIgLyAobGVmdFRhbiArIHJpZ2h0VGFuKTsKKyAgICBkb3VibGUgeVNjYWxlID0gMiAvICh1
cFRhbiArIGRvd25UYW4pOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1h
dHJpeDsKKyAgICBwcm9qZWN0aW9uTWF0cml4LnNldE0xMSh4U2NhbGUpOworICAgIHByb2plY3Rp
b25NYXRyaXguc2V0TTIyKHlTY2FsZSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMzIoKHVw
VGFuIC0gZG93blRhbikgKiB5U2NhbGUgKiAwLjUpOworICAgIHByb2plY3Rpb25NYXRyaXguc2V0
TTMxKC0oKGxlZnRUYW4gLSByaWdodFRhbikgKiB4U2NhbGUgKiAwLjUpKTsKKyAgICBwcm9qZWN0
aW9uTWF0cml4LnNldE0zMygoZGVwdGhOZWFyICsgZGVwdGhGYXIpIC8gKGRlcHRoTmVhciAtIGRl
cHRoRmFyKSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMzQoLTEpOworICAgIHByb2plY3Rp
b25NYXRyaXguc2V0TTQzKCgyICogZGVwdGhGYXIgKiBkZXB0aE5lYXIpIC8gKGRlcHRoTmVhciAt
IGRlcHRoRmFyKSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNNDQoMCk7CisKKyAgICByZXR1
cm4gcHJvamVjdGlvbk1hdHJpeDsKK30KKworLy8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5j
b20vbWF0aHMvZ2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL3F1YXRlcm5pb25Ub01hdHJp
eC9pbmRleC5odG0KK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbk1hdHJpeEZy
b21RdWF0ZXJuaW9uKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24mIHF1
YXRlcm5pb24pCit7CisgICAgZG91YmxlIG1hZ25pdHVkZSA9IChxdWF0ZXJuaW9uLnggKiBxdWF0
ZXJuaW9uLngpICsgKHF1YXRlcm5pb24ueSAqIHF1YXRlcm5pb24ueSkgKyAocXVhdGVybmlvbi56
ICogcXVhdGVybmlvbi56KSArIChxdWF0ZXJuaW9uLncgKiBxdWF0ZXJuaW9uLncpOworICAgIFZS
UGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24gbm9ybWFsaXplZFF1YXRlcm5pb24ocXVh
dGVybmlvbi54IC8gbWFnbml0dWRlLCBxdWF0ZXJuaW9uLnkgLyBtYWduaXR1ZGUsIHF1YXRlcm5p
b24ueiAvIG1hZ25pdHVkZSwgcXVhdGVybmlvbi53IC8gbWFnbml0dWRlKTsKKyAgICBkb3VibGUg
eDIgPSBub3JtYWxpemVkUXVhdGVybmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24ueDsKKyAg
ICBkb3VibGUgeTIgPSBub3JtYWxpemVkUXVhdGVybmlvbi55ICogbm9ybWFsaXplZFF1YXRlcm5p
b24ueTsKKyAgICBkb3VibGUgejIgPSBub3JtYWxpemVkUXVhdGVybmlvbi56ICogbm9ybWFsaXpl
ZFF1YXRlcm5pb24uejsKKyAgICBkb3VibGUgdzIgPSBub3JtYWxpemVkUXVhdGVybmlvbi53ICog
bm9ybWFsaXplZFF1YXRlcm5pb24udzsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eDsKKyAgICBtYXRyaXguc2V0TTExKHgyIC0geTIgLSB6MiArIHcyKTsKKyAgICBtYXRyaXguc2V0
TTIyKC14MiArIHkyIC0gejIgKyB3Mik7CisgICAgbWF0cml4LnNldE0zMygteDIgLSB5MiArIHoy
ICsgdzIpOworCisgICAgZG91YmxlIHh5ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueCAqIG5vcm1h
bGl6ZWRRdWF0ZXJuaW9uLnk7CisgICAgZG91YmxlIHp3ID0gbm9ybWFsaXplZFF1YXRlcm5pb24u
eiAqIG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnc7CisgICAgbWF0cml4LnNldE0yMSgyLjAgKiAoeHkg
KyB6dykpOworICAgIG1hdHJpeC5zZXRNMTIoMi4wICogKHh5IC0gencpKTsKKworICAgIGRvdWJs
ZSB4eiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnggKiBub3JtYWxpemVkUXVhdGVybmlvbi56Owor
ICAgIGRvdWJsZSB5dyA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnkgKiBub3JtYWxpemVkUXVhdGVy
bmlvbi53OworICAgIG1hdHJpeC5zZXRNMzEoMi4wICogKHh6IC0geXcpKTsKKyAgICBtYXRyaXgu
c2V0TTEzKDIuMCAqICh4eiArIHl3KSk7CisKKyAgICBkb3VibGUgeXogPSBub3JtYWxpemVkUXVh
dGVybmlvbi55ICogbm9ybWFsaXplZFF1YXRlcm5pb24uejsKKyAgICBkb3VibGUgeHcgPSBub3Jt
YWxpemVkUXVhdGVybmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24udzsKKyAgICBtYXRyaXgu
c2V0TTMyKDIuMCAqICh5eiArIHh3KSk7CisgICAgbWF0cml4LnNldE0yMygyLjAgKiAoeXogLSB4
dykpOworCisgICAgcmV0dXJuIG1hdHJpeDsKK30KKworc3RhdGljIHZvaWQgYXBwbHlIZWFkVG9F
eWVUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRQb2lu
dDNEJiB0cmFuc2xhdGlvbikKK3sKKyAgICBtYXRyaXguc2V0TTQxKG1hdHJpeC5tNDEoKSAtIHRy
YW5zbGF0aW9uLngoKSk7CisgICAgbWF0cml4LnNldE00MihtYXRyaXgubTQyKCkgLSB0cmFuc2xh
dGlvbi55KCkpOworICAgIG1hdHJpeC5zZXRNNDMobWF0cml4Lm00MygpIC0gdHJhbnNsYXRpb24u
eigpKTsKK30KKwordm9pZCBWUkZyYW1lRGF0YTo6dXBkYXRlKGNvbnN0IFZSUGxhdGZvcm1UcmFj
a2luZ0luZm8mIHRyYWNraW5nSW5mbywgY29uc3QgVlJFeWVQYXJhbWV0ZXJzJiBsZWZ0RXllLCBj
b25zdCBWUkV5ZVBhcmFtZXRlcnMmIHJpZ2h0RXllLCBkb3VibGUgZGVwdGhOZWFyLCBkb3VibGUg
ZGVwdGhGYXIpCit7CisgICAgbV9sZWZ0UHJvamVjdGlvbk1hdHJpeCA9IHByb2plY3Rpb25NYXRy
aXhGcm9tRmllbGRPZlZpZXcobGVmdEV5ZS5maWVsZE9mVmlldygpLCBkZXB0aE5lYXIsIGRlcHRo
RmFyKTsKKyAgICBtX3JpZ2h0UHJvamVjdGlvbk1hdHJpeCA9IHByb2plY3Rpb25NYXRyaXhGcm9t
RmllbGRPZlZpZXcocmlnaHRFeWUuZmllbGRPZlZpZXcoKSwgZGVwdGhOZWFyLCBkZXB0aEZhcik7
CisKKyAgICBtX3RpbWVzdGFtcCA9IHRyYWNraW5nSW5mby50aW1lc3RhbXA7CisgICAgbV9wb3Nl
LT51cGRhdGUodHJhY2tpbmdJbmZvKTsKKworICAgIGF1dG8gcm90YXRpb25NYXRyaXggPSByb3Rh
dGlvbk1hdHJpeEZyb21RdWF0ZXJuaW9uKHRyYWNraW5nSW5mby5vcmllbnRhdGlvbi52YWx1ZV9v
cihWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKSk7CisgICAg
RmxvYXRQb2ludDNEIHBvc2l0aW9uID0gdHJhY2tpbmdJbmZvLnBvc2l0aW9uLnZhbHVlX29yKEZs
b2F0UG9pbnQzRCgwLCAwLCAwKSk7CisgICAgcm90YXRpb25NYXRyaXgudHJhbnNsYXRlM2QoLXBv
c2l0aW9uLngoKSwgLXBvc2l0aW9uLnkoKSwgLXBvc2l0aW9uLnooKSk7CisKKyAgICBGbG9hdFBv
aW50M0QgbGVmdEV5ZU9mZnNldCA9IGxlZnRFeWUucmF3T2Zmc2V0KCk7CisgICAgbV9sZWZ0Vmll
d01hdHJpeCA9IHJvdGF0aW9uTWF0cml4OworICAgIGFwcGx5SGVhZFRvRXllVHJhbnNmb3JtKG1f
bGVmdFZpZXdNYXRyaXgsIGxlZnRFeWVPZmZzZXQpOworCisgICAgRmxvYXRQb2ludDNEIHJpZ2h0
RXllT2Zmc2V0ID0gcmlnaHRFeWUucmF3T2Zmc2V0KCk7CisgICAgbV9yaWdodFZpZXdNYXRyaXgg
PSByb3RhdGlvbk1hdHJpeDsKKyAgICBhcHBseUhlYWRUb0V5ZVRyYW5zZm9ybShtX3JpZ2h0Vmll
d01hdHJpeCwgcmlnaHRFeWVPZmZzZXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmgKaW5kZXggNzAzZDZiYzBm
MjcwMDdlODdiNjczZWFhMDI1NzMxZWIwNjUyYjI1Ny4uOTExOWYxOTI0NzcyMjdmMTEyZWM2ODQ0
MmJiMDI0ZWQ0MTVkY2Y3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2
ci9WUkZyYW1lRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJGcmFt
ZURhdGEuaApAQCAtMjQsMTIgKzI0LDE2IEBACiAgKi8KICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Zs
b2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgVlJFeWVQYXJhbWV0ZXJzOwogY2xhc3MgVlJQb3NlOworc3RydWN0
IFZSUGxhdGZvcm1UcmFja2luZ0luZm87CiAKIGNsYXNzIFZSRnJhbWVEYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8VlJGcmFtZURhdGE+IHsKIHB1YmxpYzoKQEAgLTM4LDIwICs0MiwyNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZSRnJhbWVEYXRhKTsKICAgICB9CiAK
LSAgICBkb3VibGUgdGltZXN0YW1wKCkgY29uc3Q7CisgICAgZG91YmxlIHRpbWVzdGFtcCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9CiAKLSAgICBGbG9hdDMyQXJyYXkqIGxlZnRQcm9q
ZWN0aW9uTWF0cml4KCkgY29uc3Q7Ci0gICAgRmxvYXQzMkFycmF5KiBsZWZ0Vmlld01hdHJpeCgp
IGNvbnN0OworICAgIFJlZjxGbG9hdDMyQXJyYXk+IGxlZnRQcm9qZWN0aW9uTWF0cml4KCkgY29u
c3Q7CisgICAgUmVmPEZsb2F0MzJBcnJheT4gbGVmdFZpZXdNYXRyaXgoKSBjb25zdDsKIAotICAg
IEZsb2F0MzJBcnJheSogcmlnaHRQcm9qZWN0aW9uTWF0cml4KCkgY29uc3Q7Ci0gICAgRmxvYXQz
MkFycmF5KiByaWdodFZpZXdNYXRyaXgoKSBjb25zdDsKKyAgICBSZWY8RmxvYXQzMkFycmF5PiBy
aWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdDsKKyAgICBSZWY8RmxvYXQzMkFycmF5PiByaWdo
dFZpZXdNYXRyaXgoKSBjb25zdDsKIAogICAgIGNvbnN0IFZSUG9zZSYgcG9zZSgpIGNvbnN0Owog
CisgICAgdm9pZCB1cGRhdGUoY29uc3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyYsIGNvbnN0IFZS
RXllUGFyYW1ldGVycyYgbGVmdEV5ZSwgY29uc3QgVlJFeWVQYXJhbWV0ZXJzJiByaWdodEV5ZSwg
ZG91YmxlIGRlcHRoTmVhciwgZG91YmxlIGRlcHRoRmFyKTsKKwogcHJpdmF0ZToKICAgICBWUkZy
YW1lRGF0YSgpOwogCisgICAgZG91YmxlIG1fdGltZXN0YW1wOwogICAgIFJlZjxWUlBvc2U+IG1f
cG9zZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2xlZnRQcm9qZWN0aW9uTWF0cml4Owor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmlnaHRQcm9qZWN0aW9uTWF0cml4OworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fbGVmdFZpZXdNYXRyaXg7CisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9yaWdodFZpZXdNYXRyaXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5jcHAKaW5kZXggM2RjMTVlZGY1NWJiMzdk
NTVhZGUzOTdiNmQ2NTMwNmQxZmQ3Yjg4OS4uNzVjNTEwMDY2NTI5YTdjMDYyYzE3ZDVhZDYzZjQ1
OGRmNjIzMDM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBv
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcApAQCAt
MjcsMzYgKzI3LDU5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVlJQb3NlOjpWUlBvc2Uo
KSA9IGRlZmF1bHQ7CitzdGF0aWMgUmVmUHRyPEZsb2F0MzJBcnJheT4gb3B0aW9uYWxGbG9hdDNU
b0pTQ0FycmF5KGNvbnN0IHN0ZDo6b3B0aW9uYWw8VlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6Rmxv
YXQzPiYgZGF0YSkKK3sKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIEZsb2F0MzJBcnJheTo6Y3JlYXRlKGRhdGEtPmRhdGEsIDMpLnJlbGVhc2VO
b25OdWxsKCk7Cit9CiAKLUZsb2F0MzJBcnJheSogVlJQb3NlOjpwb3NpdGlvbigpIGNvbnN0CitS
ZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OnBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcG9zaXRpb24gPSBGbG9hdDMyQXJyYXk6OmNyZWF0
ZSgzKTsKKyAgICBmbG9hdCogcG9zaXRpb25EYXRhID0gcG9zaXRpb24tPmRhdGEoKTsKKyAgICBw
b3NpdGlvbkRhdGFbMF0gPSBtX3RyYWNraW5nSW5mby5wb3NpdGlvbi0+eCgpOworICAgIHBvc2l0
aW9uRGF0YVsxXSA9IG1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uLT55KCk7CisgICAgcG9zaXRpb25E
YXRhWzJdID0gbV90cmFja2luZ0luZm8ucG9zaXRpb24tPnooKTsKKyAgICByZXR1cm4gcG9zaXRp
b24ucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6OmxpbmVhclZl
bG9jaXR5KCkgY29uc3QKK1JlZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9zZTo6bGluZWFyVmVsb2Np
dHkoKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBvcHRpb25hbEZs
b2F0M1RvSlNDQXJyYXkobV90cmFja2luZ0luZm8ubGluZWFyVmVsb2NpdHkpOwogfQogCi1GbG9h
dDMyQXJyYXkqIFZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uKCkgY29uc3QKK1JlZlB0cjxGbG9h
dDMyQXJyYXk+IFZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gb3B0aW9uYWxGbG9hdDNUb0pTQ0FycmF5KG1fdHJhY2tp
bmdJbmZvLmxpbmVhckFjY2VsZXJhdGlvbik7CiB9CiAKLUZsb2F0MzJBcnJheSogVlJQb3NlOjpv
cmllbnRhdGlvbigpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6Om9yaWVudGF0
aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fdHJhY2tpbmdJ
bmZvLm9yaWVudGF0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gb3Jp
ZW50YXRpb24gPSBGbG9hdDMyQXJyYXk6OmNyZWF0ZSg0KTsKKyAgICBmbG9hdCogb3JpZW50YXRp
b25EYXRhID0gb3JpZW50YXRpb24tPmRhdGEoKTsKKyAgICBvcmllbnRhdGlvbkRhdGFbMF0gPSBt
X3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+eDsKKyAgICBvcmllbnRhdGlvbkRhdGFbMV0gPSBt
X3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+eTsKKyAgICBvcmllbnRhdGlvbkRhdGFbMl0gPSBt
X3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+ejsKKyAgICBvcmllbnRhdGlvbkRhdGFbM10gPSBt
X3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+dzsKKyAgICByZXR1cm4gb3JpZW50YXRpb24ucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6OmFuZ3VsYXJWZWxvY2l0
eSgpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OmFuZ3VsYXJWZWxvY2l0eSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG9wdGlvbmFsRmxvYXQz
VG9KU0NBcnJheShtX3RyYWNraW5nSW5mby5hbmd1bGFyVmVsb2NpdHkpOwogfQogCi1GbG9hdDMy
QXJyYXkqIFZSUG9zZTo6YW5ndWxhckFjY2VsZXJhdGlvbigpIGNvbnN0CitSZWZQdHI8RmxvYXQz
MkFycmF5PiBWUlBvc2U6OmFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25zdAogewotICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBvcHRpb25hbEZsb2F0M1RvSlNDQXJyYXkobV90cmFja2lu
Z0luZm8uYW5ndWxhckFjY2VsZXJhdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5oCmluZGV4IDJlZjBhZTNjNjA3N2RhMDI3
MmRjNTMxNGZkODBjYzFhMzBlNzc1NDIuLmMzNGNjMmJkYTU3NmExMmMxYzI3NGMxZDhhOTNkNjhl
NjkyMWRjYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3Nl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuaApAQCAtMjQsMTEg
KzI0LDE1IEBACiAgKi8KICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3Bs
YXkuaCIKKwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Zsb2F0MzJBcnJheS5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgVlJQ
bGF0Zm9ybVRyYWNraW5nSW5mbzsKKwogY2xhc3MgVlJQb3NlIDogcHVibGljIFJlZkNvdW50ZWQ8
VlJQb3NlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxWUlBvc2U+IGNyZWF0ZSgpCkBAIC0z
NiwxNiArNDAsMzAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWUlBv
c2UpOwogICAgIH0KIAotICAgIEZsb2F0MzJBcnJheSogcG9zaXRpb24oKSBjb25zdDsKLSAgICBG
bG9hdDMyQXJyYXkqIGxpbmVhclZlbG9jaXR5KCkgY29uc3Q7Ci0gICAgRmxvYXQzMkFycmF5KiBs
aW5lYXJBY2NlbGVyYXRpb24oKSBjb25zdDsKKyAgICBzdGF0aWMgUmVmPFZSUG9zZT4gY3JlYXRl
KGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm8mIHRyYWNraW5nSW5mbykKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZSUG9zZSh0cmFja2luZ0luZm8pKTsKKyAgICB9CisK
KyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBwb3NpdGlvbigpIGNvbnN0OworICAgIFJlZlB0cjxG
bG9hdDMyQXJyYXk+IGxpbmVhclZlbG9jaXR5KCkgY29uc3Q7CisgICAgUmVmUHRyPEZsb2F0MzJB
cnJheT4gbGluZWFyQWNjZWxlcmF0aW9uKCkgY29uc3Q7CiAKLSAgICBGbG9hdDMyQXJyYXkqIG9y
aWVudGF0aW9uKCkgY29uc3Q7Ci0gICAgRmxvYXQzMkFycmF5KiBhbmd1bGFyVmVsb2NpdHkoKSBj
b25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25zdDsKKyAg
ICBSZWZQdHI8RmxvYXQzMkFycmF5PiBvcmllbnRhdGlvbigpIGNvbnN0OworICAgIFJlZlB0cjxG
bG9hdDMyQXJyYXk+IGFuZ3VsYXJWZWxvY2l0eSgpIGNvbnN0OworICAgIFJlZlB0cjxGbG9hdDMy
QXJyYXk+IGFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlKGNv
bnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm8mIHRyYWNraW5nSW5mbykgeyBtX3RyYWNraW5nSW5m
byA9IHRyYWNraW5nSW5mbzsgfTsKIAogcHJpdmF0ZToKLSAgICBWUlBvc2UoKTsKKyAgICBWUlBv
c2UoKSA9IGRlZmF1bHQ7CisKKyAgICBWUlBvc2UoY29uc3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5m
byYgdHJhY2tpbmdJbmZvKQorICAgICAgICA6IG1fdHJhY2tpbmdJbmZvKHRyYWNraW5nSW5mbykK
KyAgICB7CisgICAgfQorCisgICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBtX3RyYWNraW5nSW5m
bzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS92ci9WUlBsYXRmb3JtRGlzcGxheS5oCmluZGV4IDc2ZDJhYzY2ZjMzYzA3OGVjOTkxZGFh
YWI0MjM2NmNlOTM2ZmYyN2EuLmI0NmY1NzY0YTQ0MmRmZTgxZDU5NjMxYTI2MTdjNzJiNzA5MjNk
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNw
bGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXku
aApAQCAtMTAzLDkgKzEwMyw2NCBAQCBwcml2YXRlOgogICAgIHN0ZDo6b3B0aW9uYWw8VHJhbnNm
b3JtYXRpb25NYXRyaXg+IG1fc2l0dGluZ1RvU3RhbmRpbmdUcmFuc2Zvcm07CiB9OwogCitzdHJ1
Y3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyB7CisgICAgc3RydWN0IFF1YXRlcm5pb24geworICAg
ICAgICBRdWF0ZXJuaW9uKCkKKyAgICAgICAgICAgIDogeCgwKSwgeSgwKSwgeigwKSwgdygxKSB7
IH0KKworICAgICAgICBRdWF0ZXJuaW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0
IHcpCisgICAgICAgICAgICA6IHgoeCksIHkoeSksIHooeiksIHcodykgeyB9CisKKyAgICAgICAg
UXVhdGVybmlvbiYgY29uanVnYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgeCAqPSAtMTsK
KyAgICAgICAgICAgIHkgKj0gLTE7CisgICAgICAgICAgICB6ICo9IC0xOworICAgICAgICAgICAg
cmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgUXVhdGVybmlvbiYgb3BlcmF0b3Iq
KGZsb2F0IGZhY3RvcikKKyAgICAgICAgeworICAgICAgICAgICAgeCAqPSBmYWN0b3I7CisgICAg
ICAgICAgICB5ICo9IGZhY3RvcjsKKyAgICAgICAgICAgIHogKj0gZmFjdG9yOworICAgICAgICAg
ICAgdyAqPSBmYWN0b3I7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAg
ICAgICAgZmxvYXQgeCwgeSwgeiwgdzsKKyAgICB9OworCisgICAgc3RydWN0IEZsb2F0MyB7Cisg
ICAgICAgIEZsb2F0MyhmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBjKQorICAgICAgICAgICAgOiBk
YXRhIHsgYSwgYiwgYyB9IHsgfQorCisgICAgICAgIGZsb2F0IGRhdGFbM107CisgICAgfTsKKwor
ICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgdGltZXN0YW1wID0gMDsKKyAgICAgICAg
cG9zaXRpb24gPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIG9yaWVudGF0aW9uID0gc3RkOjpudWxs
b3B0OworICAgICAgICBhbmd1bGFyQWNjZWxlcmF0aW9uID0gc3RkOjpudWxsb3B0OworICAgICAg
ICBhbmd1bGFyVmVsb2NpdHkgPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGxpbmVhckFjY2VsZXJh
dGlvbiA9IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgbGluZWFyVmVsb2NpdHkgPSBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxRdWF0ZXJuaW9uPiBvcmllbnRhdGlvbjsK
KyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQzRD4gcG9zaXRpb247CisgICAgc3RkOjpvcHRp
b25hbDxGbG9hdDM+IGFuZ3VsYXJBY2NlbGVyYXRpb247CisgICAgc3RkOjpvcHRpb25hbDxGbG9h
dDM+IGFuZ3VsYXJWZWxvY2l0eTsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0Mz4gbGluZWFyQWNj
ZWxlcmF0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXQzPiBsaW5lYXJWZWxvY2l0eTsKKyAg
ICBkb3VibGUgdGltZXN0YW1wOworfTsKKwogY2xhc3MgVlJQbGF0Zm9ybURpc3BsYXkgewogcHVi
bGljOgogICAgIHZpcnR1YWwgVlJQbGF0Zm9ybURpc3BsYXlJbmZvIGdldERpc3BsYXlJbmZvKCkg
PSAwOworICAgIHZpcnR1YWwgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBnZXRUcmFja2luZ0luZm8o
KSA9IDA7CiAgICAgdmlydHVhbCB+VlJQbGF0Zm9ybURpc3BsYXkoKSA9IGRlZmF1bHQ7CiAKICAg
ICBXZWFrUHRyPFZSUGxhdGZvcm1EaXNwbGF5PiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93
ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCp0aGlzKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5W
Ui5jcHAKaW5kZXggNDM5ZjE4NThjNjQ3OWU4MWQyOGJhYjQ3YzE4ZDUzZDFlMzc0NTdiYy4uZmFk
YjZmYzEzNzM2MjA3MTU2OTA3NzI0YzBkOGNlODdkYzZkNWIzNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlP
cGVuVlIuY3BwCkBAIC01MCw2ICs1MCw4IEBAIFZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBs
YXRmb3JtRGlzcGxheU9wZW5WUih2cjo6SVZSU3lzdGVtKiBzeXN0ZW0sIHZyOjpJVlJDCiAgICAg
Ly8gRklYTUU6IFdlJ3JlIGFzc3VtaW5nIGFuIEhUQyBWaXZlIEhNRCBoZXJlLiBHZXQgdGhpcyBp
bmZvIGZyb20gT3BlblZSPy4KICAgICBtX2Rpc3BsYXlJbmZvLnNldENhcGFiaWxpdHlGbGFncyhW
UkRpc3BsYXlDYXBhYmlsaXR5RmxhZzo6Tm9uZSB8IFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnOjpQ
b3NpdGlvbiB8IFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnOjpPcmllbnRhdGlvbiB8IFZSRGlzcGxh
eUNhcGFiaWxpdHlGbGFnOjpFeHRlcm5hbERpc3BsYXkgfCBWUkRpc3BsYXlDYXBhYmlsaXR5Rmxh
Zzo6UHJlc2VudCk7CiAKKyAgICBtX2NvbXBvc2l0b3ItPlNldFRyYWNraW5nU3BhY2UodnI6OlRy
YWNraW5nVW5pdmVyc2VTZWF0ZWQpOworCiAgICAgdXBkYXRlRXllUGFyYW1ldGVycygpOwogICAg
IHVwZGF0ZVN0YWdlUGFyYW1ldGVycygpOwogfQpAQCAtOTksNiArMTAxLDYzIEBAIHZvaWQgVlJQ
bGF0Zm9ybURpc3BsYXlPcGVuVlI6OnVwZGF0ZVN0YWdlUGFyYW1ldGVycygpCiAgICAgbV9kaXNw
bGF5SW5mby5zZXRQbGF5QXJlYUJvdW5kcyhGbG9hdFNpemUocGxheUFyZWFXaWR0aCwgcGxheUFy
ZWFEZXB0aCkpOwogfQogCisvLyBGSVhNRTogd2UgbWlnaHQgd2FudCB0byBnZW5lcmFsaXplIHRo
aXMgZnVuY3Rpb24gZm9yIG90aGVyIGJhY2tlbmRzLgorc3RhdGljIFZSUGxhdGZvcm1UcmFja2lu
Z0luZm86OlF1YXRlcm5pb24gcm90YXRpb25NYXRyaXhUb1F1YXRlcm5pb24oY29uc3QgZmxvYXQg
KCZtYXRyaXgpWzNdWzRdKQoreworICAgIC8vIFNlZSBodHRwczovL2QzY3czZGQydzMyeDJiLmNs
b3VkZnJvbnQubmV0L3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE1LzAxL21hdHJpeC10by1xdWF0LnBk
Zi4KKyAgICBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uIHF1YXRlcm5pb247Cisg
ICAgZmxvYXQgdHJhY2U7CisgICAgaWYgKG1hdHJpeFsyXVsyXSA8IDApIHsKKyAgICAgICAgaWYg
KG1hdHJpeFswXVswXSA+IG1hdHJpeFsxXVsxXSkgeworICAgICAgICAgICAgdHJhY2UgPSAxICsg
bWF0cml4WzBdWzBdIC0gbWF0cml4WzFdWzFdIC0gbWF0cml4WzJdWzJdOworICAgICAgICAgICAg
cXVhdGVybmlvbiA9IHsgdHJhY2UsIG1hdHJpeFswXVsxXSttYXRyaXhbMV1bMF0sIG1hdHJpeFsy
XVswXSttYXRyaXhbMF1bMl0sIG1hdHJpeFsxXVsyXSAtIG1hdHJpeFsyXVsxXSB9OworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdHJhY2UgPSAxIC0gbWF0cml4WzBdWzBdICsgbWF0cml4
WzFdWzFdIC0gbWF0cml4WzJdWzJdOworICAgICAgICAgICAgcXVhdGVybmlvbiA9IHsgbWF0cml4
WzBdWzFdK21hdHJpeFsxXVswXSwgdHJhY2UsIG1hdHJpeFsxXVsyXSttYXRyaXhbMl1bMV0sIG1h
dHJpeFsyXVswXSAtIG1hdHJpeFswXVsyXSB9OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKG1hdHJpeFswXVswXSA8IC1tYXRyaXhbMV1bMV0pIHsKKyAgICAgICAgICAgIHRy
YWNlID0gMSAtIG1hdHJpeFswXVswXSAtIG1hdHJpeFsxXVsxXSArIG1hdHJpeFsyXVsyXTsKKyAg
ICAgICAgICAgIHF1YXRlcm5pb24gPSB7IG1hdHJpeFsyXVswXSttYXRyaXhbMF1bMl0sIG1hdHJp
eFsxXVsyXSttYXRyaXhbMl1bMV0sIHRyYWNlICwgbWF0cml4WzBdWzFdIC0gbWF0cml4WzFdWzBd
IH07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0cmFjZSA9IDEgKyBtYXRyaXhbMF1b
MF0gKyBtYXRyaXhbMV1bMV0gKyBtYXRyaXhbMl1bMl07CisgICAgICAgICAgICBxdWF0ZXJuaW9u
ID0geyBtYXRyaXhbMV1bMl0gLSBtYXRyaXhbMl1bMV0sIG1hdHJpeFsyXVswXSAtIG1hdHJpeFsw
XVsyXSwgbWF0cml4WzBdWzFdIC0gbWF0cml4WzFdWzBdLCB0cmFjZSB9OworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBxdWF0ZXJuaW9uICogKDAuNSAvIHNxcnQodHJhY2UpKTsKK30KKwor
VlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tp
bmdJbmZvKCkKK3sKKyAgICB2cjo6VHJhY2tlZERldmljZVBvc2VfdCBwb3Nlc1t2cjo6a191bk1h
eFRyYWNrZWREZXZpY2VDb3VudF07CisKKyAgICBtX2NvbXBvc2l0b3ItPldhaXRHZXRQb3Nlcyhu
dWxscHRyLCAwLCBwb3NlcywgdnI6OmtfdW5NYXhUcmFja2VkRGV2aWNlQ291bnQpOworCisgICAg
bV90cmFja2luZ0luZm8uY2xlYXIoKTsKKworICAgIHZyOjpDb21wb3NpdG9yX0ZyYW1lVGltaW5n
IHRpbWluZzsKKyAgICB0aW1pbmcubV9uU2l6ZSA9IHNpemVvZih2cjo6Q29tcG9zaXRvcl9GcmFt
ZVRpbWluZyk7CisgICAgbV9jb21wb3NpdG9yLT5HZXRGcmFtZVRpbWluZygmdGltaW5nKTsKKyAg
ICBtX3RyYWNraW5nSW5mby50aW1lc3RhbXAgPSB0aW1pbmcubV9mbFN5c3RlbVRpbWVJblNlY29u
ZHM7CisKKyAgICBpZiAoIXBvc2VzW3ZyOjprX3VuVHJhY2tlZERldmljZUluZGV4X0htZF0uYkRl
dmljZUlzQ29ubmVjdGVkCisgICAgICAgIHx8ICFwb3Nlc1t2cjo6a191blRyYWNrZWREZXZpY2VJ
bmRleF9IbWRdLmJQb3NlSXNWYWxpZAorICAgICAgICB8fCBwb3Nlc1t2cjo6a191blRyYWNrZWRE
ZXZpY2VJbmRleF9IbWRdLmVUcmFja2luZ1Jlc3VsdCAhPSB2cjo6VHJhY2tpbmdSZXN1bHRfUnVu
bmluZ19PSykgeworICAgICAgICAvLyBGSVhNRTogSW5pdCBzb21lIGRhdGEgbWF5YmU/Pz8uCisg
ICAgICAgIHJldHVybiBtX3RyYWNraW5nSW5mbzsKKyAgICB9CisKKyAgICBjb25zdCBhdXRvJiBI
TURQb3NlID0gcG9zZXNbdnI6OmtfdW5UcmFja2VkRGV2aWNlSW5kZXhfSG1kXTsKKyAgICBjb25z
dCBhdXRvJiB0cmFuc2Zvcm0gPSBITURQb3NlLm1EZXZpY2VUb0Fic29sdXRlVHJhY2tpbmc7Cisg
ICAgbV90cmFja2luZ0luZm8ub3JpZW50YXRpb24gPSByb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlv
bih0cmFuc2Zvcm0ubSk7CisgICAgbV90cmFja2luZ0luZm8ub3JpZW50YXRpb24tPmNvbmp1Z2F0
ZSgpOworICAgIG1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uID0gRmxvYXRQb2ludDNEKHRyYW5zZm9y
bS5tWzBdWzNdLCB0cmFuc2Zvcm0ubVsxXVszXSwgdHJhbnNmb3JtLm1bMl1bM10pOworICAgIG1f
dHJhY2tpbmdJbmZvLmFuZ3VsYXJWZWxvY2l0eSA9IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OkZs
b2F0MyhITURQb3NlLnZBbmd1bGFyVmVsb2NpdHkudlswXSwgSE1EUG9zZS52QW5ndWxhclZlbG9j
aXR5LnZbMV0sIEhNRFBvc2UudkFuZ3VsYXJWZWxvY2l0eS52WzJdKTsKKyAgICBtX3RyYWNraW5n
SW5mby5saW5lYXJWZWxvY2l0eSA9IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OkZsb2F0MyhITURQ
b3NlLnZWZWxvY2l0eS52WzBdLCBITURQb3NlLnZWZWxvY2l0eS52WzFdLCBITURQb3NlLnZWZWxv
Y2l0eS52WzJdKTsKKworICAgIHJldHVybiBtX3RyYWNraW5nSW5mbzsKK30KKwogfTsgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShPUEVOVlIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5W
Ui5oCmluZGV4IDBiOTMzZjMyNGZlNTc5YTI4MDJmZDY0YWNlNTBkNTMxYzEzOWYzZDQuLjNhYmUz
ZGFjMDc5ZTFkOTBjYWEwYTg1ZTE1YjJkZDY1ZWMzYjNhMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5W
Ui5oCkBAIC0zNCw2ICszNCw3IEBAIHB1YmxpYzoKIAogICAgIH5WUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUigpID0gZGVmYXVsdDsKICAgICBWUlBsYXRmb3JtRGlzcGxheUluZm8gZ2V0RGlzcGxheUlu
Zm8oKSBvdmVycmlkZSB7IHJldHVybiBtX2Rpc3BsYXlJbmZvOyB9CisgICAgVlJQbGF0Zm9ybVRy
YWNraW5nSW5mbyBnZXRUcmFja2luZ0luZm8oKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBW
UlBsYXRmb3JtRGlzcGxheUluZm86OkZpZWxkT2ZWaWV3IGNvbXB1dGVGaWVsZE9mVmlldyh2cjo6
SG1kX0V5ZSk7CkBAIC00Nyw2ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgdnI6OklWUkNvbXBvc2l0
b3IqIG1fY29tcG9zaXRvcjsKIAogICAgIFZSUGxhdGZvcm1EaXNwbGF5SW5mbyBtX2Rpc3BsYXlJ
bmZvOworICAgIFZSUGxhdGZvcm1UcmFja2luZ0luZm8gbV90cmFja2luZ0luZm87CiB9OwogCiB9
OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337355</attachid>
            <date>2018-04-06 03:59:52 -0700</date>
            <delta_ts>2018-04-09 04:03:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184265-20180406125945.patch</filename>
            <type>text/plain</type>
            <size>25871</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFkZWNlYWFmMDhlMTQz
ZmZjM2MzNDFhMGI0YjJiOWRiZTAxZDc2Yi4uODA3YWUxMTYwZWZkMDYxN2UzNjE2ZDk1MjE2NzQ1
ZmNmN2ZlODIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE4LTA0LTAzICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtPcGVuVlJd
W1dlYlZSXSBSZXRyaWV2ZSBGcmFtZURhdGEgaW4gV2ViVlIncyByQUYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZSRnJhbWVEYXRhIGNvbnRhaW5zIGFs
bCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgcmVuZGVyIGEgVlIgc2NlbmUg
bGlrZSB2aWV3CisgICAgICAgIGFuZCBwcm9qZWN0aW9uIG1hdHJpY2VzLCBwb3NlIGRhdGEgKHBv
c2l0aW9uICYgb3JpZW50YXRpb24pIGFuZCBsaW5lYXIgJiBhbmd1bGFyIHZlbG9jaXR5CisgICAg
ICAgIGFtb25nIG90aGVycy4gVGhlIGdldEZyYW1lRGF0YSgpIGNhbGwgbXVzdCBiZSBpc3N1ZWQg
aW5zaWRlIGEgV2ViVlIncyBvd24KKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VlJEaXNwbGF5OjpnZXRGcmFtZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJEaXNw
bGF5OjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6Y2FuY2VsQW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Lmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlZSRXllUGFyYW1ldGVyczo6cmF3T2Zmc2V0IGNvbnN0KTogUmVxdWlyZWQgdG8gY29tcHV0ZSB2
aWV3IG1hdHJpY2VzLgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWF0cml4VG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWUkZy
YW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VlJGcmFtZURhdGE6OmxlZnRWaWV3TWF0cml4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZS
RnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VlJGcmFtZURhdGE6OnJpZ2h0Vmlld01hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OnJv
dGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlIZWFk
VG9FeWVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VlJGcmFtZURhdGE6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnZyL1ZSUG9zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcHRpb25hbEZsb2F0M1RvSlNDQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpwb3NpdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpWUlBvc2U6OmxpbmVhclZlbG9jaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlZSUG9zZTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjph
bmd1bGFyVmVsb2NpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjphbmd1bGFy
QWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSUG9zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQ
b3NlOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpWUlBvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpW
UlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpRdWF0ZXJuaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb246OmNvbmp1Z2F0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6VlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6Rmxv
YXQzOjpGbG9hdDMpOiBKdXN0IGEgZ3JvdXAgb2YgMyBmbG9hdHMgdXNlZCB0byBzdG9yZQorICAg
ICAgICBib3RoIHZlbG9jaXR5IGFuZCBhY2NlbGVyYXRpb24gaW4gYSBmb3JtYXQgd2hpY2ggaXMg
dmVyeSBjb252ZW5pZW50IHRvIGxhdGVyIGdlbmVyYXRlIEpTQworICAgICAgICBhcnJheXMuCisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpjbGVhcik6CisgICAgICAg
ICogcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUik6CisgICAgICAgIChXZWJDb3JlOjpyb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZv
KToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIu
aDoKKwogMjAxOC0wNC0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUkVHUkVTU0lPTiAocjIzMDIyMyk6IExheW91dFRlc3QgaHR0cC90ZXN0cy9jb250ZW50
ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLW92ZXJmbG93cy1ydWxlLWRhdGEtMS5odG1sIGlz
IGNyYXNoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlz
cGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAKaW5k
ZXggM2YwY2NjMTA2ZDFlNWQ4OWU5OWNlNjk3OTllYjJmZDMxYzI3MjFhMS4uZDUzNzA1MzI0NGEw
YjFmNTViOGEyOTRmMjdiNzhhN2E0YzE1MGFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmNwcApAQCAtMjYsOCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJWUkRpc3BsYXkuaCIKIAorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJWUkRpc3BsYXlDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJWUkV5ZVBhcmFtZXRl
cnMuaCIKKyNpbmNsdWRlICJWUkZyYW1lRGF0YS5oIgogI2luY2x1ZGUgIlZSTGF5ZXJJbml0Lmgi
CiAjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKICNpbmNsdWRlICJWUlBvc2UuaCIKQEAg
LTg1LDI3ICs4OSw0NyBAQCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIFZSRGlzcGxheTo6Z2V0RXll
UGFyYW1ldGVycyhWUkV5ZSBleWUpIGNvbnN0CiAgICAgcmV0dXJuIGV5ZSA9PSBWUkV5ZTo6TGVm
dCA/ICptX2xlZnRFeWVQYXJhbWV0ZXJzIDogKm1fcmlnaHRFeWVQYXJhbWV0ZXJzOwogfQogCi1i
b29sIFZSRGlzcGxheTo6Z2V0RnJhbWVEYXRhKFZSRnJhbWVEYXRhJikgY29uc3QKK2Jvb2wgVlJE
aXNwbGF5OjpnZXRGcmFtZURhdGEoVlJGcmFtZURhdGEmIGZyYW1lRGF0YSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NhcGFiaWxpdGllcy0+aGFzUG9zaXRpb24oKSB8
fCAhbV9jYXBhYmlsaXRpZXMtPmhhc09yaWVudGF0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIEZJWE1FOiBlbnN1cmUgdGhhdCB0aGlzIGlzIG9ubHkgY2FsbGVkIGluc2lk
ZSBXZWJWUidzIHJBRi4KKyAgICBmcmFtZURhdGEudXBkYXRlKG1fZGlzcGxheS0+Z2V0VHJhY2tp
bmdJbmZvKCksIGdldEV5ZVBhcmFtZXRlcnMoVlJFeWU6OkxlZnQpLCBnZXRFeWVQYXJhbWV0ZXJz
KFZSRXllOjpSaWdodCksIG1fZGVwdGhOZWFyLCBtX2RlcHRoRmFyKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogUmVmPFZSUG9zZT4gVlJEaXNwbGF5OjpnZXRQb3NlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gVlJQb3NlOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gVlJQb3NlOjpjcmVhdGUobV9kaXNw
bGF5LT5nZXRUcmFja2luZ0luZm8oKSk7CiB9CiAKIHZvaWQgVlJEaXNwbGF5OjpyZXNldFBvc2Uo
KQogewogfQogCi1sb25nIFZSRGlzcGxheTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJikKK3VpbnQzMl90IFZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJiBjYWxs
YmFjaykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBhdXRvKiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghbV9zY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIpIHsKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElT
UExBWV9NT05JVE9SKQorICAgICAgICAvLyBGSVhNRTogR2V0IHRoZSBkaXNwbGF5IGlkIG9mIHRo
ZSBITUQgYXMgaXQgc2hvdWxkIHVzZSB0aGUgSE1EIG5hdGl2ZSByZWZyZXNoIHJhdGUuCisgICAg
ICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCA9IGRvY3VtZW50LT5wYWdlKCkgPyBkb2N1
bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5kaXNwbGF5SUQoKSA6IDA7CisgICAgICAgIG1fc2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpjcmVh
dGUoKmRvY3VtZW50LCBkaXNwbGF5SUQpOworI2Vsc2UKKyAgICAgICAgbV9zY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIgPSBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgqZG9j
dW1lbnQsIDApOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIG1fc2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyLT5yZWdpc3RlckNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAot
dm9pZCBWUkRpc3BsYXk6OmNhbmNlbEFuaW1hdGlvbkZyYW1lKHVuc2lnbmVkKQordm9pZCBWUkRp
c3BsYXk6OmNhbmNlbEFuaW1hdGlvbkZyYW1lKHVpbnQzMl90IGlkKQogeworICAgIGlmICghbV9z
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyLT5jYW5jZWxDYWxsYmFjayhpZCk7CiB9CiAKIHZvaWQg
VlJEaXNwbGF5OjpyZXF1ZXN0UHJlc2VudChjb25zdCBWZWN0b3I8VlJMYXllckluaXQ+JiwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxh
eS5oCmluZGV4IGEyNDJlNDRhMWRmMDJlMjg2N2YwNDJkZjg0ZWUzNWNjYTIyZGI1OTkuLjM2NDdl
NmQyYTIwYmQ5MDFmZDEwZDM4YTNmNTBmNjg0ZTFhOTEzNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9WUkRpc3BsYXkuaApAQCAtMzQsNiArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKK2NsYXNzIFNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIFZSRGlzcGxheUNhcGFiaWxpdGllczsKIGNs
YXNzIFZSRXllUGFyYW1ldGVyczsKIGNsYXNzIFZSRnJhbWVEYXRhOwpAQCAtNzIsOCArNzMsOCBA
QCBwdWJsaWM6CiAgICAgZG91YmxlIGRlcHRoRmFyKCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aEZh
cjsgfQogICAgIHZvaWQgc2V0RGVwdGhGYXIoZG91YmxlIGRlcHRoRmFyKSB7IG1fZGVwdGhGYXIg
PSBkZXB0aEZhcjsgfQogCi0gICAgbG9uZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJlcXVl
c3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKLSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbkZy
YW1lKHVuc2lnbmVkKTsKKyAgICB1aW50MzJfdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJl
cXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlv
bkZyYW1lKHVpbnQzMl90KTsKIAogICAgIHZvaWQgcmVxdWVzdFByZXNlbnQoY29uc3QgVmVjdG9y
PFZSTGF5ZXJJbml0PiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogICAgIHZvaWQgZXhpdFBy
ZXNlbnQoUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CkBAIC0xMTEsNiArMTEyLDggQEAgcHJpdmF0
ZToKIAogICAgIGRvdWJsZSBtX2RlcHRoTmVhciB7IDAuMDEgfTsgLy8gRGVmYXVsdCB2YWx1ZSBm
cm9tIHRoZSBzcGVjcy4KICAgICBkb3VibGUgbV9kZXB0aEZhciB7IDEwMDAwIH07IC8vIERlZmF1
bHQgdmFsdWUgZnJvbSB0aGUgc3BlY3MuCisKKyAgICBSZWZQdHI8U2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyPiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIv
VlJFeWVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFy
YW1ldGVycy5oCmluZGV4IDZhODlkODk4MjBhMDQxNDQ4MzViNTRiNzkwN2FjOGQyMjMwYzJiYmMu
LmYzMGQwZmJkNjU0YTFkMWYxODhhMWY0MzlkMzAzMDgwZmNhNjQ4MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJFeWVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaApAQCAtNDMsNiArNDMsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgUmVmPEZsb2F0MzJBcnJheT4gb2Zmc2V0KCkgY29uc3Q7
CisgICAgY29uc3QgRmxvYXRQb2ludDNEJiByYXdPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQogCiAgICAgY29uc3QgVlJGaWVsZE9mVmlldyYgZmllbGRPZlZpZXcoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmNwcAppbmRleCA1
Yjg0OWJmMjkwZjljZDg5MDU2ZGU4NjZkYjk0ZmQ4NjQxYjA2Mjk4Li41NDM1OTJlZTNjMjcyNDVj
NTE4NDE4YjdjNGJhMDYwNjAzNjAyNDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnZyL1ZSRnJhbWVEYXRhLmNwcApAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlZSRnJhbWVEYXRhLmgiCiAKKyNpbmNsdWRlICJWUkV5ZVBhcmFtZXRlcnMu
aCIKKyNpbmNsdWRlICJWUlBsYXRmb3JtRGlzcGxheS5oIgogI2luY2x1ZGUgIlZSUG9zZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNCwyOSArMzYsMzEgQEAgVlJGcmFtZURhdGE6OlZS
RnJhbWVEYXRhKCkKIHsKIH0KIAotZG91YmxlIFZSRnJhbWVEYXRhOjp0aW1lc3RhbXAoKSBjb25z
dAorc3RhdGljIFJlZjxGbG9hdDMyQXJyYXk+IG1hdHJpeFRvQXJyYXkoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6RmxvYXRNYXRyaXg0IGNvbHVtbk1ham9yTWF0cml4OworICAgIG1hdHJpeC50b0Nv
bHVtbk1ham9yRmxvYXRBcnJheShjb2x1bW5NYWpvck1hdHJpeCk7CisgICAgcmV0dXJuIEZsb2F0
MzJBcnJheTo6Y3JlYXRlKGNvbHVtbk1ham9yTWF0cml4LCAxNikucmVsZWFzZU5vbk51bGwoKTsK
IH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXgoKSBj
b25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6OmxlZnRQcm9qZWN0aW9uTWF0cml4
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbWF0cml4VG9BcnJh
eShtX2xlZnRQcm9qZWN0aW9uTWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0
YTo6bGVmdFZpZXdNYXRyaXgoKSBjb25zdAorUmVmPEZsb2F0MzJBcnJheT4gVlJGcmFtZURhdGE6
OmxlZnRWaWV3TWF0cml4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gbWF0cml4VG9BcnJheShtX2xlZnRWaWV3TWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBW
UkZyYW1lRGF0YTo6cmlnaHRQcm9qZWN0aW9uTWF0cml4KCkgY29uc3QKK1JlZjxGbG9hdDMyQXJy
YXk+IFZSRnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdAogewotICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5KG1fcmlnaHRQcm9qZWN0aW9u
TWF0cml4KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUkZyYW1lRGF0YTo6cmlnaHRWaWV3TWF0cml4
KCkgY29uc3QKK1JlZjxGbG9hdDMyQXJyYXk+IFZSRnJhbWVEYXRhOjpyaWdodFZpZXdNYXRyaXgo
KSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtYXRyaXhUb0FycmF5
KG1fcmlnaHRWaWV3TWF0cml4KTsKIH0KIAogY29uc3QgVlJQb3NlJiBWUkZyYW1lRGF0YTo6cG9z
ZSgpIGNvbnN0CkBAIC02NCw0ICs2OCw4OCBAQCBjb25zdCBWUlBvc2UmIFZSRnJhbWVEYXRhOjpw
b3NlKCkgY29uc3QKICAgICByZXR1cm4gbV9wb3NlOwogfQogCitzdGF0aWMgVHJhbnNmb3JtYXRp
b25NYXRyaXggcHJvamVjdGlvbk1hdHJpeEZyb21GaWVsZE9mVmlldyhjb25zdCBWUkZpZWxkT2ZW
aWV3JiBmb3YsIGRvdWJsZSBkZXB0aE5lYXIsIGRvdWJsZSBkZXB0aEZhcikKK3sKKyAgICBkb3Vi
bGUgdXBUYW4gPSB0YW4oZGVnMnJhZChmb3YudXBEZWdyZWVzKCkpKTsKKyAgICBkb3VibGUgZG93
blRhbiA9IHRhbihkZWcycmFkKGZvdi5kb3duRGVncmVlcygpKSk7CisgICAgZG91YmxlIGxlZnRU
YW4gPSB0YW4oZGVnMnJhZChmb3YubGVmdERlZ3JlZXMoKSkpOworICAgIGRvdWJsZSByaWdodFRh
biA9IHRhbihkZWcycmFkKGZvdi5yaWdodERlZ3JlZXMoKSkpOworCisgICAgZG91YmxlIHhTY2Fs
ZSA9IDIgLyAobGVmdFRhbiArIHJpZ2h0VGFuKTsKKyAgICBkb3VibGUgeVNjYWxlID0gMiAvICh1
cFRhbiArIGRvd25UYW4pOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1h
dHJpeDsKKyAgICBwcm9qZWN0aW9uTWF0cml4LnNldE0xMSh4U2NhbGUpOworICAgIHByb2plY3Rp
b25NYXRyaXguc2V0TTIyKHlTY2FsZSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMzIoKHVw
VGFuIC0gZG93blRhbikgKiB5U2NhbGUgKiAwLjUpOworICAgIHByb2plY3Rpb25NYXRyaXguc2V0
TTMxKC0oKGxlZnRUYW4gLSByaWdodFRhbikgKiB4U2NhbGUgKiAwLjUpKTsKKyAgICBwcm9qZWN0
aW9uTWF0cml4LnNldE0zMygoZGVwdGhOZWFyICsgZGVwdGhGYXIpIC8gKGRlcHRoTmVhciAtIGRl
cHRoRmFyKSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMzQoLTEpOworICAgIHByb2plY3Rp
b25NYXRyaXguc2V0TTQzKCgyICogZGVwdGhGYXIgKiBkZXB0aE5lYXIpIC8gKGRlcHRoTmVhciAt
IGRlcHRoRmFyKSk7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNNDQoMCk7CisKKyAgICByZXR1
cm4gcHJvamVjdGlvbk1hdHJpeDsKK30KKworLy8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5j
b20vbWF0aHMvZ2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL3F1YXRlcm5pb25Ub01hdHJp
eC9pbmRleC5odG0KK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbk1hdHJpeEZy
b21RdWF0ZXJuaW9uKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24mIHF1
YXRlcm5pb24pCit7CisgICAgZG91YmxlIG1hZ25pdHVkZSA9IChxdWF0ZXJuaW9uLnggKiBxdWF0
ZXJuaW9uLngpICsgKHF1YXRlcm5pb24ueSAqIHF1YXRlcm5pb24ueSkgKyAocXVhdGVybmlvbi56
ICogcXVhdGVybmlvbi56KSArIChxdWF0ZXJuaW9uLncgKiBxdWF0ZXJuaW9uLncpOworICAgIFZS
UGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24gbm9ybWFsaXplZFF1YXRlcm5pb24ocXVh
dGVybmlvbi54IC8gbWFnbml0dWRlLCBxdWF0ZXJuaW9uLnkgLyBtYWduaXR1ZGUsIHF1YXRlcm5p
b24ueiAvIG1hZ25pdHVkZSwgcXVhdGVybmlvbi53IC8gbWFnbml0dWRlKTsKKyAgICBkb3VibGUg
eDIgPSBub3JtYWxpemVkUXVhdGVybmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24ueDsKKyAg
ICBkb3VibGUgeTIgPSBub3JtYWxpemVkUXVhdGVybmlvbi55ICogbm9ybWFsaXplZFF1YXRlcm5p
b24ueTsKKyAgICBkb3VibGUgejIgPSBub3JtYWxpemVkUXVhdGVybmlvbi56ICogbm9ybWFsaXpl
ZFF1YXRlcm5pb24uejsKKyAgICBkb3VibGUgdzIgPSBub3JtYWxpemVkUXVhdGVybmlvbi53ICog
bm9ybWFsaXplZFF1YXRlcm5pb24udzsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eDsKKyAgICBtYXRyaXguc2V0TTExKHgyIC0geTIgLSB6MiArIHcyKTsKKyAgICBtYXRyaXguc2V0
TTIyKC14MiArIHkyIC0gejIgKyB3Mik7CisgICAgbWF0cml4LnNldE0zMygteDIgLSB5MiArIHoy
ICsgdzIpOworCisgICAgZG91YmxlIHh5ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueCAqIG5vcm1h
bGl6ZWRRdWF0ZXJuaW9uLnk7CisgICAgZG91YmxlIHp3ID0gbm9ybWFsaXplZFF1YXRlcm5pb24u
eiAqIG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnc7CisgICAgbWF0cml4LnNldE0yMSgyLjAgKiAoeHkg
KyB6dykpOworICAgIG1hdHJpeC5zZXRNMTIoMi4wICogKHh5IC0gencpKTsKKworICAgIGRvdWJs
ZSB4eiA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnggKiBub3JtYWxpemVkUXVhdGVybmlvbi56Owor
ICAgIGRvdWJsZSB5dyA9IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnkgKiBub3JtYWxpemVkUXVhdGVy
bmlvbi53OworICAgIG1hdHJpeC5zZXRNMzEoMi4wICogKHh6IC0geXcpKTsKKyAgICBtYXRyaXgu
c2V0TTEzKDIuMCAqICh4eiArIHl3KSk7CisKKyAgICBkb3VibGUgeXogPSBub3JtYWxpemVkUXVh
dGVybmlvbi55ICogbm9ybWFsaXplZFF1YXRlcm5pb24uejsKKyAgICBkb3VibGUgeHcgPSBub3Jt
YWxpemVkUXVhdGVybmlvbi54ICogbm9ybWFsaXplZFF1YXRlcm5pb24udzsKKyAgICBtYXRyaXgu
c2V0TTMyKDIuMCAqICh5eiArIHh3KSk7CisgICAgbWF0cml4LnNldE0yMygyLjAgKiAoeXogLSB4
dykpOworCisgICAgcmV0dXJuIG1hdHJpeDsKK30KKworc3RhdGljIHZvaWQgYXBwbHlIZWFkVG9F
eWVUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRQb2lu
dDNEJiB0cmFuc2xhdGlvbikKK3sKKyAgICBtYXRyaXguc2V0TTQxKG1hdHJpeC5tNDEoKSAtIHRy
YW5zbGF0aW9uLngoKSk7CisgICAgbWF0cml4LnNldE00MihtYXRyaXgubTQyKCkgLSB0cmFuc2xh
dGlvbi55KCkpOworICAgIG1hdHJpeC5zZXRNNDMobWF0cml4Lm00MygpIC0gdHJhbnNsYXRpb24u
eigpKTsKK30KKwordm9pZCBWUkZyYW1lRGF0YTo6dXBkYXRlKGNvbnN0IFZSUGxhdGZvcm1UcmFj
a2luZ0luZm8mIHRyYWNraW5nSW5mbywgY29uc3QgVlJFeWVQYXJhbWV0ZXJzJiBsZWZ0RXllLCBj
b25zdCBWUkV5ZVBhcmFtZXRlcnMmIHJpZ2h0RXllLCBkb3VibGUgZGVwdGhOZWFyLCBkb3VibGUg
ZGVwdGhGYXIpCit7CisgICAgbV9sZWZ0UHJvamVjdGlvbk1hdHJpeCA9IHByb2plY3Rpb25NYXRy
aXhGcm9tRmllbGRPZlZpZXcobGVmdEV5ZS5maWVsZE9mVmlldygpLCBkZXB0aE5lYXIsIGRlcHRo
RmFyKTsKKyAgICBtX3JpZ2h0UHJvamVjdGlvbk1hdHJpeCA9IHByb2plY3Rpb25NYXRyaXhGcm9t
RmllbGRPZlZpZXcocmlnaHRFeWUuZmllbGRPZlZpZXcoKSwgZGVwdGhOZWFyLCBkZXB0aEZhcik7
CisKKyAgICBtX3RpbWVzdGFtcCA9IHRyYWNraW5nSW5mby50aW1lc3RhbXA7CisgICAgbV9wb3Nl
LT51cGRhdGUodHJhY2tpbmdJbmZvKTsKKworICAgIGF1dG8gcm90YXRpb25NYXRyaXggPSByb3Rh
dGlvbk1hdHJpeEZyb21RdWF0ZXJuaW9uKHRyYWNraW5nSW5mby5vcmllbnRhdGlvbi52YWx1ZV9v
cihWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKSk7CisgICAg
RmxvYXRQb2ludDNEIHBvc2l0aW9uID0gdHJhY2tpbmdJbmZvLnBvc2l0aW9uLnZhbHVlX29yKEZs
b2F0UG9pbnQzRCgwLCAwLCAwKSk7CisgICAgcm90YXRpb25NYXRyaXgudHJhbnNsYXRlM2QoLXBv
c2l0aW9uLngoKSwgLXBvc2l0aW9uLnkoKSwgLXBvc2l0aW9uLnooKSk7CisKKyAgICBGbG9hdFBv
aW50M0QgbGVmdEV5ZU9mZnNldCA9IGxlZnRFeWUucmF3T2Zmc2V0KCk7CisgICAgbV9sZWZ0Vmll
d01hdHJpeCA9IHJvdGF0aW9uTWF0cml4OworICAgIGFwcGx5SGVhZFRvRXllVHJhbnNmb3JtKG1f
bGVmdFZpZXdNYXRyaXgsIGxlZnRFeWVPZmZzZXQpOworCisgICAgRmxvYXRQb2ludDNEIHJpZ2h0
RXllT2Zmc2V0ID0gcmlnaHRFeWUucmF3T2Zmc2V0KCk7CisgICAgbV9yaWdodFZpZXdNYXRyaXgg
PSByb3RhdGlvbk1hdHJpeDsKKyAgICBhcHBseUhlYWRUb0V5ZVRyYW5zZm9ybShtX3JpZ2h0Vmll
d01hdHJpeCwgcmlnaHRFeWVPZmZzZXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmgKaW5kZXggNzAzZDZiYzBm
MjcwMDdlODdiNjczZWFhMDI1NzMxZWIwNjUyYjI1Ny4uOTExOWYxOTI0NzcyMjdmMTEyZWM2ODQ0
MmJiMDI0ZWQ0MTVkY2Y3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2
ci9WUkZyYW1lRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJGcmFt
ZURhdGEuaApAQCAtMjQsMTIgKzI0LDE2IEBACiAgKi8KICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Zs
b2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgVlJFeWVQYXJhbWV0ZXJzOwogY2xhc3MgVlJQb3NlOworc3RydWN0
IFZSUGxhdGZvcm1UcmFja2luZ0luZm87CiAKIGNsYXNzIFZSRnJhbWVEYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8VlJGcmFtZURhdGE+IHsKIHB1YmxpYzoKQEAgLTM4LDIwICs0MiwyNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZSRnJhbWVEYXRhKTsKICAgICB9CiAK
LSAgICBkb3VibGUgdGltZXN0YW1wKCkgY29uc3Q7CisgICAgZG91YmxlIHRpbWVzdGFtcCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9CiAKLSAgICBGbG9hdDMyQXJyYXkqIGxlZnRQcm9q
ZWN0aW9uTWF0cml4KCkgY29uc3Q7Ci0gICAgRmxvYXQzMkFycmF5KiBsZWZ0Vmlld01hdHJpeCgp
IGNvbnN0OworICAgIFJlZjxGbG9hdDMyQXJyYXk+IGxlZnRQcm9qZWN0aW9uTWF0cml4KCkgY29u
c3Q7CisgICAgUmVmPEZsb2F0MzJBcnJheT4gbGVmdFZpZXdNYXRyaXgoKSBjb25zdDsKIAotICAg
IEZsb2F0MzJBcnJheSogcmlnaHRQcm9qZWN0aW9uTWF0cml4KCkgY29uc3Q7Ci0gICAgRmxvYXQz
MkFycmF5KiByaWdodFZpZXdNYXRyaXgoKSBjb25zdDsKKyAgICBSZWY8RmxvYXQzMkFycmF5PiBy
aWdodFByb2plY3Rpb25NYXRyaXgoKSBjb25zdDsKKyAgICBSZWY8RmxvYXQzMkFycmF5PiByaWdo
dFZpZXdNYXRyaXgoKSBjb25zdDsKIAogICAgIGNvbnN0IFZSUG9zZSYgcG9zZSgpIGNvbnN0Owog
CisgICAgdm9pZCB1cGRhdGUoY29uc3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyYsIGNvbnN0IFZS
RXllUGFyYW1ldGVycyYgbGVmdEV5ZSwgY29uc3QgVlJFeWVQYXJhbWV0ZXJzJiByaWdodEV5ZSwg
ZG91YmxlIGRlcHRoTmVhciwgZG91YmxlIGRlcHRoRmFyKTsKKwogcHJpdmF0ZToKICAgICBWUkZy
YW1lRGF0YSgpOwogCisgICAgZG91YmxlIG1fdGltZXN0YW1wOwogICAgIFJlZjxWUlBvc2U+IG1f
cG9zZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2xlZnRQcm9qZWN0aW9uTWF0cml4Owor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmlnaHRQcm9qZWN0aW9uTWF0cml4OworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fbGVmdFZpZXdNYXRyaXg7CisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9yaWdodFZpZXdNYXRyaXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5jcHAKaW5kZXggM2RjMTVlZGY1NWJiMzdk
NTVhZGUzOTdiNmQ2NTMwNmQxZmQ3Yjg4OS4uNzVjNTEwMDY2NTI5YTdjMDYyYzE3ZDVhZDYzZjQ1
OGRmNjIzMDM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBv
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcApAQCAt
MjcsMzYgKzI3LDU5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVlJQb3NlOjpWUlBvc2Uo
KSA9IGRlZmF1bHQ7CitzdGF0aWMgUmVmUHRyPEZsb2F0MzJBcnJheT4gb3B0aW9uYWxGbG9hdDNU
b0pTQ0FycmF5KGNvbnN0IHN0ZDo6b3B0aW9uYWw8VlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6Rmxv
YXQzPiYgZGF0YSkKK3sKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIEZsb2F0MzJBcnJheTo6Y3JlYXRlKGRhdGEtPmRhdGEsIDMpLnJlbGVhc2VO
b25OdWxsKCk7Cit9CiAKLUZsb2F0MzJBcnJheSogVlJQb3NlOjpwb3NpdGlvbigpIGNvbnN0CitS
ZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OnBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcG9zaXRpb24gPSBGbG9hdDMyQXJyYXk6OmNyZWF0
ZSgzKTsKKyAgICBmbG9hdCogcG9zaXRpb25EYXRhID0gcG9zaXRpb24tPmRhdGEoKTsKKyAgICBw
b3NpdGlvbkRhdGFbMF0gPSBtX3RyYWNraW5nSW5mby5wb3NpdGlvbi0+eCgpOworICAgIHBvc2l0
aW9uRGF0YVsxXSA9IG1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uLT55KCk7CisgICAgcG9zaXRpb25E
YXRhWzJdID0gbV90cmFja2luZ0luZm8ucG9zaXRpb24tPnooKTsKKyAgICByZXR1cm4gcG9zaXRp
b24ucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6OmxpbmVhclZl
bG9jaXR5KCkgY29uc3QKK1JlZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9zZTo6bGluZWFyVmVsb2Np
dHkoKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBvcHRpb25hbEZs
b2F0M1RvSlNDQXJyYXkobV90cmFja2luZ0luZm8ubGluZWFyVmVsb2NpdHkpOwogfQogCi1GbG9h
dDMyQXJyYXkqIFZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uKCkgY29uc3QKK1JlZlB0cjxGbG9h
dDMyQXJyYXk+IFZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gb3B0aW9uYWxGbG9hdDNUb0pTQ0FycmF5KG1fdHJhY2tp
bmdJbmZvLmxpbmVhckFjY2VsZXJhdGlvbik7CiB9CiAKLUZsb2F0MzJBcnJheSogVlJQb3NlOjpv
cmllbnRhdGlvbigpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6Om9yaWVudGF0
aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fdHJhY2tpbmdJ
bmZvLm9yaWVudGF0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gb3Jp
ZW50YXRpb24gPSBGbG9hdDMyQXJyYXk6OmNyZWF0ZSg0KTsKKyAgICBmbG9hdCogb3JpZW50YXRp
b25EYXRhID0gb3JpZW50YXRpb24tPmRhdGEoKTsKKyAgICBvcmllbnRhdGlvbkRhdGFbMF0gPSBt
X3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+eDsKKyAgICBvcmllbnRhdGlvbkRhdGFbMV0gPSBt
X3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+eTsKKyAgICBvcmllbnRhdGlvbkRhdGFbMl0gPSBt
X3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+ejsKKyAgICBvcmllbnRhdGlvbkRhdGFbM10gPSBt
X3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+dzsKKyAgICByZXR1cm4gb3JpZW50YXRpb24ucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6OmFuZ3VsYXJWZWxvY2l0
eSgpIGNvbnN0CitSZWZQdHI8RmxvYXQzMkFycmF5PiBWUlBvc2U6OmFuZ3VsYXJWZWxvY2l0eSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG9wdGlvbmFsRmxvYXQz
VG9KU0NBcnJheShtX3RyYWNraW5nSW5mby5hbmd1bGFyVmVsb2NpdHkpOwogfQogCi1GbG9hdDMy
QXJyYXkqIFZSUG9zZTo6YW5ndWxhckFjY2VsZXJhdGlvbigpIGNvbnN0CitSZWZQdHI8RmxvYXQz
MkFycmF5PiBWUlBvc2U6OmFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25zdAogewotICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBvcHRpb25hbEZsb2F0M1RvSlNDQXJyYXkobV90cmFja2lu
Z0luZm8uYW5ndWxhckFjY2VsZXJhdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5oCmluZGV4IDJlZjBhZTNjNjA3N2RhMDI3
MmRjNTMxNGZkODBjYzFhMzBlNzc1NDIuLjhiMWEwNzg2M2NmYjkxMWEyNGJmZDZjNTQ3OWRiMWFm
ZjQ4ZmI0MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3Nl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuaApAQCAtMjQsNiAr
MjQsOCBAQAogICovCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlZSUGxhdGZvcm1EaXNwbGF5
LmgiCisKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GbG9hdDMyQXJyYXkuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0zNiwxNiArMzgsMzAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWUlBvc2UpOwogICAgIH0KIAotICAgIEZsb2F0MzJBcnJh
eSogcG9zaXRpb24oKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGxpbmVhclZlbG9jaXR5KCkg
Y29uc3Q7Ci0gICAgRmxvYXQzMkFycmF5KiBsaW5lYXJBY2NlbGVyYXRpb24oKSBjb25zdDsKKyAg
ICBzdGF0aWMgUmVmPFZSUG9zZT4gY3JlYXRlKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm8m
IHRyYWNraW5nSW5mbykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZSUG9z
ZSh0cmFja2luZ0luZm8pKTsKKyAgICB9CisKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBwb3Np
dGlvbigpIGNvbnN0OworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IGxpbmVhclZlbG9jaXR5KCkg
Y29uc3Q7CisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gbGluZWFyQWNjZWxlcmF0aW9uKCkgY29u
c3Q7CisKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBvcmllbnRhdGlvbigpIGNvbnN0OworICAg
IFJlZlB0cjxGbG9hdDMyQXJyYXk+IGFuZ3VsYXJWZWxvY2l0eSgpIGNvbnN0OworICAgIFJlZlB0
cjxGbG9hdDMyQXJyYXk+IGFuZ3VsYXJBY2NlbGVyYXRpb24oKSBjb25zdDsKIAotICAgIEZsb2F0
MzJBcnJheSogb3JpZW50YXRpb24oKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGFuZ3VsYXJW
ZWxvY2l0eSgpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSogYW5ndWxhckFjY2VsZXJhdGlvbigp
IGNvbnN0OworICAgIHZvaWQgdXBkYXRlKGNvbnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm8mIHRy
YWNraW5nSW5mbykgeyBtX3RyYWNraW5nSW5mbyA9IHRyYWNraW5nSW5mbzsgfTsKIAogcHJpdmF0
ZToKLSAgICBWUlBvc2UoKTsKKyAgICBWUlBvc2UoKSA9IGRlZmF1bHQ7CisKKyAgICBWUlBvc2Uo
Y29uc3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyYgdHJhY2tpbmdJbmZvKQorICAgICAgICA6IG1f
dHJhY2tpbmdJbmZvKHRyYWNraW5nSW5mbykKKyAgICB7CisgICAgfQorCisgICAgVlJQbGF0Zm9y
bVRyYWNraW5nSW5mbyBtX3RyYWNraW5nSW5mbzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNw
bGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtRGlzcGxheS5oCmlu
ZGV4IDc2ZDJhYzY2ZjMzYzA3OGVjOTkxZGFhYWI0MjM2NmNlOTM2ZmYyN2EuLmI0NmY1NzY0YTQ0
MmRmZTgxZDU5NjMxYTI2MTdjNzJiNzA5MjNkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaApAQCAtMTAzLDkgKzEwMyw2NCBAQCBwcml2YXRl
OgogICAgIHN0ZDo6b3B0aW9uYWw8VHJhbnNmb3JtYXRpb25NYXRyaXg+IG1fc2l0dGluZ1RvU3Rh
bmRpbmdUcmFuc2Zvcm07CiB9OwogCitzdHJ1Y3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyB7Cisg
ICAgc3RydWN0IFF1YXRlcm5pb24geworICAgICAgICBRdWF0ZXJuaW9uKCkKKyAgICAgICAgICAg
IDogeCgwKSwgeSgwKSwgeigwKSwgdygxKSB7IH0KKworICAgICAgICBRdWF0ZXJuaW9uKGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpCisgICAgICAgICAgICA6IHgoeCksIHkoeSks
IHooeiksIHcodykgeyB9CisKKyAgICAgICAgUXVhdGVybmlvbiYgY29uanVnYXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgeCAqPSAtMTsKKyAgICAgICAgICAgIHkgKj0gLTE7CisgICAgICAg
ICAgICB6ICo9IC0xOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAg
ICAgICAgUXVhdGVybmlvbiYgb3BlcmF0b3IqKGZsb2F0IGZhY3RvcikKKyAgICAgICAgeworICAg
ICAgICAgICAgeCAqPSBmYWN0b3I7CisgICAgICAgICAgICB5ICo9IGZhY3RvcjsKKyAgICAgICAg
ICAgIHogKj0gZmFjdG9yOworICAgICAgICAgICAgdyAqPSBmYWN0b3I7CisgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgeCwgeSwgeiwgdzsKKyAgICB9
OworCisgICAgc3RydWN0IEZsb2F0MyB7CisgICAgICAgIEZsb2F0MyhmbG9hdCBhLCBmbG9hdCBi
LCBmbG9hdCBjKQorICAgICAgICAgICAgOiBkYXRhIHsgYSwgYiwgYyB9IHsgfQorCisgICAgICAg
IGZsb2F0IGRhdGFbM107CisgICAgfTsKKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAg
ICAgdGltZXN0YW1wID0gMDsKKyAgICAgICAgcG9zaXRpb24gPSBzdGQ6Om51bGxvcHQ7CisgICAg
ICAgIG9yaWVudGF0aW9uID0gc3RkOjpudWxsb3B0OworICAgICAgICBhbmd1bGFyQWNjZWxlcmF0
aW9uID0gc3RkOjpudWxsb3B0OworICAgICAgICBhbmd1bGFyVmVsb2NpdHkgPSBzdGQ6Om51bGxv
cHQ7CisgICAgICAgIGxpbmVhckFjY2VsZXJhdGlvbiA9IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAg
bGluZWFyVmVsb2NpdHkgPSBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25h
bDxRdWF0ZXJuaW9uPiBvcmllbnRhdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQz
RD4gcG9zaXRpb247CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdDM+IGFuZ3VsYXJBY2NlbGVyYXRp
b247CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdDM+IGFuZ3VsYXJWZWxvY2l0eTsKKyAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0Mz4gbGluZWFyQWNjZWxlcmF0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXQzPiBsaW5lYXJWZWxvY2l0eTsKKyAgICBkb3VibGUgdGltZXN0YW1wOworfTsKKwogY2xh
c3MgVlJQbGF0Zm9ybURpc3BsYXkgewogcHVibGljOgogICAgIHZpcnR1YWwgVlJQbGF0Zm9ybURp
c3BsYXlJbmZvIGdldERpc3BsYXlJbmZvKCkgPSAwOworICAgIHZpcnR1YWwgVlJQbGF0Zm9ybVRy
YWNraW5nSW5mbyBnZXRUcmFja2luZ0luZm8oKSA9IDA7CiAgICAgdmlydHVhbCB+VlJQbGF0Zm9y
bURpc3BsYXkoKSA9IGRlZmF1bHQ7CiAKICAgICBXZWFrUHRyPFZSUGxhdGZvcm1EaXNwbGF5PiBj
cmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCp0
aGlzKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZS
UGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29w
ZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAKaW5kZXggNDM5ZjE4NThjNjQ3OWU4MWQy
OGJhYjQ3YzE4ZDUzZDFlMzc0NTdiYy4uZmFkYjZmYzEzNzM2MjA3MTU2OTA3NzI0YzBkOGNlODdk
YzZkNWIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZS
UGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92
ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3BwCkBAIC01MCw2ICs1MCw4IEBAIFZS
UGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUih2cjo6SVZSU3lz
dGVtKiBzeXN0ZW0sIHZyOjpJVlJDCiAgICAgLy8gRklYTUU6IFdlJ3JlIGFzc3VtaW5nIGFuIEhU
QyBWaXZlIEhNRCBoZXJlLiBHZXQgdGhpcyBpbmZvIGZyb20gT3BlblZSPy4KICAgICBtX2Rpc3Bs
YXlJbmZvLnNldENhcGFiaWxpdHlGbGFncyhWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZzo6Tm9uZSB8
IFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnOjpQb3NpdGlvbiB8IFZSRGlzcGxheUNhcGFiaWxpdHlG
bGFnOjpPcmllbnRhdGlvbiB8IFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnOjpFeHRlcm5hbERpc3Bs
YXkgfCBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZzo6UHJlc2VudCk7CiAKKyAgICBtX2NvbXBvc2l0
b3ItPlNldFRyYWNraW5nU3BhY2UodnI6OlRyYWNraW5nVW5pdmVyc2VTZWF0ZWQpOworCiAgICAg
dXBkYXRlRXllUGFyYW1ldGVycygpOwogICAgIHVwZGF0ZVN0YWdlUGFyYW1ldGVycygpOwogfQpA
QCAtOTksNiArMTAxLDYzIEBAIHZvaWQgVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI6OnVwZGF0ZVN0
YWdlUGFyYW1ldGVycygpCiAgICAgbV9kaXNwbGF5SW5mby5zZXRQbGF5QXJlYUJvdW5kcyhGbG9h
dFNpemUocGxheUFyZWFXaWR0aCwgcGxheUFyZWFEZXB0aCkpOwogfQogCisvLyBGSVhNRTogd2Ug
bWlnaHQgd2FudCB0byBnZW5lcmFsaXplIHRoaXMgZnVuY3Rpb24gZm9yIG90aGVyIGJhY2tlbmRz
Lgorc3RhdGljIFZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24gcm90YXRpb25NYXRy
aXhUb1F1YXRlcm5pb24oY29uc3QgZmxvYXQgKCZtYXRyaXgpWzNdWzRdKQoreworICAgIC8vIFNl
ZSBodHRwczovL2QzY3czZGQydzMyeDJiLmNsb3VkZnJvbnQubmV0L3dwLWNvbnRlbnQvdXBsb2Fk
cy8yMDE1LzAxL21hdHJpeC10by1xdWF0LnBkZi4KKyAgICBWUlBsYXRmb3JtVHJhY2tpbmdJbmZv
OjpRdWF0ZXJuaW9uIHF1YXRlcm5pb247CisgICAgZmxvYXQgdHJhY2U7CisgICAgaWYgKG1hdHJp
eFsyXVsyXSA8IDApIHsKKyAgICAgICAgaWYgKG1hdHJpeFswXVswXSA+IG1hdHJpeFsxXVsxXSkg
eworICAgICAgICAgICAgdHJhY2UgPSAxICsgbWF0cml4WzBdWzBdIC0gbWF0cml4WzFdWzFdIC0g
bWF0cml4WzJdWzJdOworICAgICAgICAgICAgcXVhdGVybmlvbiA9IHsgdHJhY2UsIG1hdHJpeFsw
XVsxXSttYXRyaXhbMV1bMF0sIG1hdHJpeFsyXVswXSttYXRyaXhbMF1bMl0sIG1hdHJpeFsxXVsy
XSAtIG1hdHJpeFsyXVsxXSB9OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHJhY2Ug
PSAxIC0gbWF0cml4WzBdWzBdICsgbWF0cml4WzFdWzFdIC0gbWF0cml4WzJdWzJdOworICAgICAg
ICAgICAgcXVhdGVybmlvbiA9IHsgbWF0cml4WzBdWzFdK21hdHJpeFsxXVswXSwgdHJhY2UsIG1h
dHJpeFsxXVsyXSttYXRyaXhbMl1bMV0sIG1hdHJpeFsyXVswXSAtIG1hdHJpeFswXVsyXSB9Owor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1hdHJpeFswXVswXSA8IC1tYXRy
aXhbMV1bMV0pIHsKKyAgICAgICAgICAgIHRyYWNlID0gMSAtIG1hdHJpeFswXVswXSAtIG1hdHJp
eFsxXVsxXSArIG1hdHJpeFsyXVsyXTsKKyAgICAgICAgICAgIHF1YXRlcm5pb24gPSB7IG1hdHJp
eFsyXVswXSttYXRyaXhbMF1bMl0sIG1hdHJpeFsxXVsyXSttYXRyaXhbMl1bMV0sIHRyYWNlICwg
bWF0cml4WzBdWzFdIC0gbWF0cml4WzFdWzBdIH07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0cmFjZSA9IDEgKyBtYXRyaXhbMF1bMF0gKyBtYXRyaXhbMV1bMV0gKyBtYXRyaXhbMl1b
Ml07CisgICAgICAgICAgICBxdWF0ZXJuaW9uID0geyBtYXRyaXhbMV1bMl0gLSBtYXRyaXhbMl1b
MV0sIG1hdHJpeFsyXVswXSAtIG1hdHJpeFswXVsyXSwgbWF0cml4WzBdWzFdIC0gbWF0cml4WzFd
WzBdLCB0cmFjZSB9OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBxdWF0ZXJuaW9uICog
KDAuNSAvIHNxcnQodHJhY2UpKTsKK30KKworVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBWUlBsYXRm
b3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZvKCkKK3sKKyAgICB2cjo6VHJhY2tlZERl
dmljZVBvc2VfdCBwb3Nlc1t2cjo6a191bk1heFRyYWNrZWREZXZpY2VDb3VudF07CisKKyAgICBt
X2NvbXBvc2l0b3ItPldhaXRHZXRQb3NlcyhudWxscHRyLCAwLCBwb3NlcywgdnI6OmtfdW5NYXhU
cmFja2VkRGV2aWNlQ291bnQpOworCisgICAgbV90cmFja2luZ0luZm8uY2xlYXIoKTsKKworICAg
IHZyOjpDb21wb3NpdG9yX0ZyYW1lVGltaW5nIHRpbWluZzsKKyAgICB0aW1pbmcubV9uU2l6ZSA9
IHNpemVvZih2cjo6Q29tcG9zaXRvcl9GcmFtZVRpbWluZyk7CisgICAgbV9jb21wb3NpdG9yLT5H
ZXRGcmFtZVRpbWluZygmdGltaW5nKTsKKyAgICBtX3RyYWNraW5nSW5mby50aW1lc3RhbXAgPSB0
aW1pbmcubV9mbFN5c3RlbVRpbWVJblNlY29uZHM7CisKKyAgICBpZiAoIXBvc2VzW3ZyOjprX3Vu
VHJhY2tlZERldmljZUluZGV4X0htZF0uYkRldmljZUlzQ29ubmVjdGVkCisgICAgICAgIHx8ICFw
b3Nlc1t2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWRdLmJQb3NlSXNWYWxpZAorICAgICAg
ICB8fCBwb3Nlc1t2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWRdLmVUcmFja2luZ1Jlc3Vs
dCAhPSB2cjo6VHJhY2tpbmdSZXN1bHRfUnVubmluZ19PSykgeworICAgICAgICAvLyBGSVhNRTog
SW5pdCBzb21lIGRhdGEgbWF5YmU/Pz8uCisgICAgICAgIHJldHVybiBtX3RyYWNraW5nSW5mbzsK
KyAgICB9CisKKyAgICBjb25zdCBhdXRvJiBITURQb3NlID0gcG9zZXNbdnI6OmtfdW5UcmFja2Vk
RGV2aWNlSW5kZXhfSG1kXTsKKyAgICBjb25zdCBhdXRvJiB0cmFuc2Zvcm0gPSBITURQb3NlLm1E
ZXZpY2VUb0Fic29sdXRlVHJhY2tpbmc7CisgICAgbV90cmFja2luZ0luZm8ub3JpZW50YXRpb24g
PSByb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbih0cmFuc2Zvcm0ubSk7CisgICAgbV90cmFja2lu
Z0luZm8ub3JpZW50YXRpb24tPmNvbmp1Z2F0ZSgpOworICAgIG1fdHJhY2tpbmdJbmZvLnBvc2l0
aW9uID0gRmxvYXRQb2ludDNEKHRyYW5zZm9ybS5tWzBdWzNdLCB0cmFuc2Zvcm0ubVsxXVszXSwg
dHJhbnNmb3JtLm1bMl1bM10pOworICAgIG1fdHJhY2tpbmdJbmZvLmFuZ3VsYXJWZWxvY2l0eSA9
IFZSUGxhdGZvcm1UcmFja2luZ0luZm86OkZsb2F0MyhITURQb3NlLnZBbmd1bGFyVmVsb2NpdHku
dlswXSwgSE1EUG9zZS52QW5ndWxhclZlbG9jaXR5LnZbMV0sIEhNRFBvc2UudkFuZ3VsYXJWZWxv
Y2l0eS52WzJdKTsKKyAgICBtX3RyYWNraW5nSW5mby5saW5lYXJWZWxvY2l0eSA9IFZSUGxhdGZv
cm1UcmFja2luZ0luZm86OkZsb2F0MyhITURQb3NlLnZWZWxvY2l0eS52WzBdLCBITURQb3NlLnZW
ZWxvY2l0eS52WzFdLCBITURQb3NlLnZWZWxvY2l0eS52WzJdKTsKKworICAgIHJldHVybiBtX3Ry
YWNraW5nSW5mbzsKK30KKwogfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVT
RShPUEVOVlIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIv
VlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29w
ZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oCmluZGV4IDBiOTMzZjMyNGZlNTc5YTI4MDJm
ZDY0YWNlNTBkNTMxYzEzOWYzZDQuLjNhYmUzZGFjMDc5ZTFkOTBjYWEwYTg1ZTE1YjJkZDY1ZWMz
YjNhMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBs
YXRmb3JtRGlzcGxheU9wZW5WUi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29w
ZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oCkBAIC0zNCw2ICszNCw3IEBAIHB1YmxpYzoK
IAogICAgIH5WUlBsYXRmb3JtRGlzcGxheU9wZW5WUigpID0gZGVmYXVsdDsKICAgICBWUlBsYXRm
b3JtRGlzcGxheUluZm8gZ2V0RGlzcGxheUluZm8oKSBvdmVycmlkZSB7IHJldHVybiBtX2Rpc3Bs
YXlJbmZvOyB9CisgICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBnZXRUcmFja2luZ0luZm8oKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBWUlBsYXRmb3JtRGlzcGxheUluZm86OkZpZWxkT2ZW
aWV3IGNvbXB1dGVGaWVsZE9mVmlldyh2cjo6SG1kX0V5ZSk7CkBAIC00Nyw2ICs0OCw3IEBAIHBy
aXZhdGU6CiAgICAgdnI6OklWUkNvbXBvc2l0b3IqIG1fY29tcG9zaXRvcjsKIAogICAgIFZSUGxh
dGZvcm1EaXNwbGF5SW5mbyBtX2Rpc3BsYXlJbmZvOworICAgIFZSUGxhdGZvcm1UcmFja2luZ0lu
Zm8gbV90cmFja2luZ0luZm87CiB9OwogCiB9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337490</attachid>
            <date>2018-04-09 04:03:48 -0700</date>
            <delta_ts>2018-04-09 04:43:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184265-20180409130346.patch</filename>
            <type>text/plain</type>
            <size>25390</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFkZWNlYWFmMDhlMTQz
ZmZjM2MzNDFhMGI0YjJiOWRiZTAxZDc2Yi4uODA3YWUxMTYwZWZkMDYxN2UzNjE2ZDk1MjE2NzQ1
ZmNmN2ZlODIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE4LTA0LTAzICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtPcGVuVlJd
W1dlYlZSXSBSZXRyaWV2ZSBGcmFtZURhdGEgaW4gV2ViVlIncyByQUYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZSRnJhbWVEYXRhIGNvbnRhaW5zIGFs
bCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgcmVuZGVyIGEgVlIgc2NlbmUg
bGlrZSB2aWV3CisgICAgICAgIGFuZCBwcm9qZWN0aW9uIG1hdHJpY2VzLCBwb3NlIGRhdGEgKHBv
c2l0aW9uICYgb3JpZW50YXRpb24pIGFuZCBsaW5lYXIgJiBhbmd1bGFyIHZlbG9jaXR5CisgICAg
ICAgIGFtb25nIG90aGVycy4gVGhlIGdldEZyYW1lRGF0YSgpIGNhbGwgbXVzdCBiZSBpc3N1ZWQg
aW5zaWRlIGEgV2ViVlIncyBvd24KKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VlJEaXNwbGF5OjpnZXRGcmFtZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJEaXNw
bGF5OjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6Y2FuY2VsQW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Lmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJ2ci9WUkV5ZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlZSRXllUGFyYW1ldGVyczo6cmF3T2Zmc2V0IGNvbnN0KTogUmVxdWlyZWQgdG8gY29tcHV0ZSB2
aWV3IG1hdHJpY2VzLgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWF0cml4VG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWUkZy
YW1lRGF0YTo6bGVmdFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VlJGcmFtZURhdGE6OmxlZnRWaWV3TWF0cml4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZS
RnJhbWVEYXRhOjpyaWdodFByb2plY3Rpb25NYXRyaXggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VlJGcmFtZURhdGE6OnJpZ2h0Vmlld01hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OnJv
dGF0aW9uTWF0cml4RnJvbVF1YXRlcm5pb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlIZWFk
VG9FeWVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VlJGcmFtZURhdGE6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpWUkZyYW1lRGF0YTo6dGltZXN0YW1wIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnZyL1ZSUG9zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcHRpb25hbEZsb2F0M1RvSlNDQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpwb3NpdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpWUlBvc2U6OmxpbmVhclZlbG9jaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlZSUG9zZTo6bGluZWFyQWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlZSUG9zZTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjph
bmd1bGFyVmVsb2NpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjphbmd1bGFy
QWNjZWxlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSUG9zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQ
b3NlOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQb3NlOjpWUlBvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpW
UlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpRdWF0ZXJuaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb246OmNvbmp1Z2F0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6VlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6Rmxv
YXQzOjpGbG9hdDMpOiBKdXN0IGEgZ3JvdXAgb2YgMyBmbG9hdHMgdXNlZCB0byBzdG9yZQorICAg
ICAgICBib3RoIHZlbG9jaXR5IGFuZCBhY2NlbGVyYXRpb24gaW4gYSBmb3JtYXQgd2hpY2ggaXMg
dmVyeSBjb252ZW5pZW50IHRvIGxhdGVyIGdlbmVyYXRlIEpTQworICAgICAgICBhcnJheXMuCisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpjbGVhcik6CisgICAgICAg
ICogcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9w
ZW5WUik6CisgICAgICAgIChXZWJDb3JlOjpyb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6Z2V0VHJhY2tpbmdJbmZv
KToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIu
aDoKKwogMjAxOC0wNC0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUkVHUkVTU0lPTiAocjIzMDIyMyk6IExheW91dFRlc3QgaHR0cC90ZXN0cy9jb250ZW50
ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLW92ZXJmbG93cy1ydWxlLWRhdGEtMS5odG1sIGlz
IGNyYXNoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlz
cGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAKaW5k
ZXggM2YwY2NjMTA2ZDFlNWQ4OWU5OWNlNjk3OTllYjJmZDMxYzI3MjFhMS4uZjUyMGU2NmMyMWVh
MWJmYjQxNTk0NGJlNTAwYTA2YWRkZmQ4MmNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmNwcApAQCAtMjYsOCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJWUkRpc3BsYXkuaCIKIAorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJWUkRpc3BsYXlDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJWUkV5ZVBhcmFtZXRl
cnMuaCIKKyNpbmNsdWRlICJWUkZyYW1lRGF0YS5oIgogI2luY2x1ZGUgIlZSTGF5ZXJJbml0Lmgi
CiAjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKICNpbmNsdWRlICJWUlBvc2UuaCIKQEAg
LTg1LDI3ICs4OSw0NyBAQCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIFZSRGlzcGxheTo6Z2V0RXll
UGFyYW1ldGVycyhWUkV5ZSBleWUpIGNvbnN0CiAgICAgcmV0dXJuIGV5ZSA9PSBWUkV5ZTo6TGVm
dCA/ICptX2xlZnRFeWVQYXJhbWV0ZXJzIDogKm1fcmlnaHRFeWVQYXJhbWV0ZXJzOwogfQogCi1i
b29sIFZSRGlzcGxheTo6Z2V0RnJhbWVEYXRhKFZSRnJhbWVEYXRhJikgY29uc3QKK2Jvb2wgVlJE
aXNwbGF5OjpnZXRGcmFtZURhdGEoVlJGcmFtZURhdGEmIGZyYW1lRGF0YSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NhcGFiaWxpdGllcy0+aGFzUG9zaXRpb24oKSB8
fCAhbV9jYXBhYmlsaXRpZXMtPmhhc09yaWVudGF0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIEZJWE1FOiBlbnN1cmUgdGhhdCB0aGlzIGlzIG9ubHkgY2FsbGVkIGluc2lk
ZSBXZWJWUidzIHJBRi4KKyAgICBmcmFtZURhdGEudXBkYXRlKG1fZGlzcGxheS0+Z2V0VHJhY2tp
bmdJbmZvKCksIGdldEV5ZVBhcmFtZXRlcnMoVlJFeWU6OkxlZnQpLCBnZXRFeWVQYXJhbWV0ZXJz
KFZSRXllOjpSaWdodCksIG1fZGVwdGhOZWFyLCBtX2RlcHRoRmFyKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogUmVmPFZSUG9zZT4gVlJEaXNwbGF5OjpnZXRQb3NlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gVlJQb3NlOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gVlJQb3NlOjpjcmVhdGUobV9kaXNw
bGF5LT5nZXRUcmFja2luZ0luZm8oKSk7CiB9CiAKIHZvaWQgVlJEaXNwbGF5OjpyZXNldFBvc2Uo
KQogewogfQogCi1sb25nIFZSRGlzcGxheTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJikKK3VpbnQzMl90IFZSRGlzcGxheTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJiBjYWxs
YmFjaykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fc2NyaXB0ZWRBbmltYXRpb25Db250
cm9sbGVyKSB7CisgICAgICAgIGF1dG8qIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
X0RJU1BMQVlfTU9OSVRPUikKKyAgICAgICAgLy8gRklYTUU6IEdldCB0aGUgZGlzcGxheSBpZCBv
ZiB0aGUgSE1EIGFzIGl0IHNob3VsZCB1c2UgdGhlIEhNRCBuYXRpdmUgcmVmcmVzaCByYXRlLgor
ICAgICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQgPSBkb2N1bWVudC0+cGFnZSgpID8g
ZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuZGlzcGxheUlEKCkgOiAwOworICAgICAgICBtX3Nj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKCpkb2N1bWVudCwgZGlzcGxheUlEKTsKKyNlbHNlCisgICAgICAgIG1fc2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyID0gU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUo
KmRvY3VtZW50LCAwKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBtX3NjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlci0+cmVnaXN0ZXJDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9
CiAKLXZvaWQgVlJEaXNwbGF5OjpjYW5jZWxBbmltYXRpb25GcmFtZSh1bnNpZ25lZCkKK3ZvaWQg
VlJEaXNwbGF5OjpjYW5jZWxBbmltYXRpb25GcmFtZSh1aW50MzJfdCBpZCkKIHsKKyAgICBpZiAo
IW1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+Y2FuY2VsQ2FsbGJhY2soaWQpOwogfQogCiB2
b2lkIFZSRGlzcGxheTo6cmVxdWVzdFByZXNlbnQoY29uc3QgVmVjdG9yPFZSTGF5ZXJJbml0PiYs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnZyL1ZSRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRp
c3BsYXkuaAppbmRleCBhMjQyZTQ0YTFkZjAyZTI4NjdmMDQyZGY4NGVlMzVjY2EyMmRiNTk5Li4z
NjQ3ZTZkMmEyMGJkOTAxZmQxMGQzOGEzZjUwZjY4NGUxYTkxMzU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmgKQEAgLTM0LDYgKzM0LDcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s7CitjbGFzcyBT
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBWUkRpc3BsYXlDYXBhYmlsaXRpZXM7
CiBjbGFzcyBWUkV5ZVBhcmFtZXRlcnM7CiBjbGFzcyBWUkZyYW1lRGF0YTsKQEAgLTcyLDggKzcz
LDggQEAgcHVibGljOgogICAgIGRvdWJsZSBkZXB0aEZhcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVw
dGhGYXI7IH0KICAgICB2b2lkIHNldERlcHRoRmFyKGRvdWJsZSBkZXB0aEZhcikgeyBtX2RlcHRo
RmFyID0gZGVwdGhGYXI7IH0KIAotICAgIGxvbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJlZjxS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJik7Ci0gICAgdm9pZCBjYW5jZWxBbmltYXRp
b25GcmFtZSh1bnNpZ25lZCk7CisgICAgdWludDMyX3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJl
ZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJik7CisgICAgdm9pZCBjYW5jZWxBbmlt
YXRpb25GcmFtZSh1aW50MzJfdCk7CiAKICAgICB2b2lkIHJlcXVlc3RQcmVzZW50KGNvbnN0IFZl
Y3RvcjxWUkxheWVySW5pdD4mLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKICAgICB2b2lkIGV4
aXRQcmVzZW50KFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwpAQCAtMTExLDYgKzExMiw4IEBAIHBy
aXZhdGU6CiAKICAgICBkb3VibGUgbV9kZXB0aE5lYXIgeyAwLjAxIH07IC8vIERlZmF1bHQgdmFs
dWUgZnJvbSB0aGUgc3BlY3MuCiAgICAgZG91YmxlIG1fZGVwdGhGYXIgeyAxMDAwMCB9OyAvLyBE
ZWZhdWx0IHZhbHVlIGZyb20gdGhlIHNwZWNzLgorCisgICAgUmVmUHRyPFNjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlcj4gbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnZyL1ZSRXllUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkV5
ZVBhcmFtZXRlcnMuaAppbmRleCA2YTg5ZDg5ODIwYTA0MTQ0ODM1YjU0Yjc5MDdhYzhkMjIzMGMy
YmJjLi5mMzBkMGZiZDY1NGExZDFmMTg4YTFmNDM5ZDMwMzA4MGZjYTY0ODJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRXllUGFyYW1ldGVycy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJFeWVQYXJhbWV0ZXJzLmgKQEAgLTQzLDYgKzQz
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFJlZjxGbG9hdDMyQXJyYXk+IG9mZnNldCgpIGNv
bnN0OworICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcmF3T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KIAogICAgIGNvbnN0IFZSRmllbGRPZlZpZXcmIGZpZWxkT2ZWaWV3KCkgY29u
c3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJGcmFtZURh
dGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5jcHAKaW5k
ZXggNWI4NDliZjI5MGY5Y2Q4OTA1NmRlODY2ZGI5NGZkODY0MWIwNjI5OC4uYTEwMDI1ZmUxNjc5
MzNkOWQ0ZGVhMDFlMDA5MDJmMWZkODU0ZmZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ2ci9WUkZyYW1lRGF0YS5jcHAKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJWUkZyYW1lRGF0YS5oIgogCisjaW5jbHVkZSAiVlJFeWVQYXJhbWV0
ZXJzLmgiCisjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKICNpbmNsdWRlICJWUlBvc2Uu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzQsMjkgKzM2LDMxIEBAIFZSRnJhbWVEYXRh
OjpWUkZyYW1lRGF0YSgpCiB7CiB9CiAKLWRvdWJsZSBWUkZyYW1lRGF0YTo6dGltZXN0YW1wKCkg
Y29uc3QKK3N0YXRpYyBSZWY8RmxvYXQzMkFycmF5PiBtYXRyaXhUb0FycmF5KGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OkZsb2F0TWF0cml4NCBjb2x1bW5NYWpvck1hdHJpeDsKKyAgICBtYXRyaXgu
dG9Db2x1bW5NYWpvckZsb2F0QXJyYXkoY29sdW1uTWFqb3JNYXRyaXgpOworICAgIHJldHVybiBG
bG9hdDMyQXJyYXk6OmNyZWF0ZShjb2x1bW5NYWpvck1hdHJpeCwgMTYpLnJlbGVhc2VOb25OdWxs
KCk7CiB9CiAKLUZsb2F0MzJBcnJheSogVlJGcmFtZURhdGE6OmxlZnRQcm9qZWN0aW9uTWF0cml4
KCkgY29uc3QKK1JlZjxGbG9hdDMyQXJyYXk+IFZSRnJhbWVEYXRhOjpsZWZ0UHJvamVjdGlvbk1h
dHJpeCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1hdHJpeFRv
QXJyYXkobV9sZWZ0UHJvamVjdGlvbk1hdHJpeCk7CiB9CiAKLUZsb2F0MzJBcnJheSogVlJGcmFt
ZURhdGE6OmxlZnRWaWV3TWF0cml4KCkgY29uc3QKK1JlZjxGbG9hdDMyQXJyYXk+IFZSRnJhbWVE
YXRhOjpsZWZ0Vmlld01hdHJpeCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIG1hdHJpeFRvQXJyYXkobV9sZWZ0Vmlld01hdHJpeCk7CiB9CiAKLUZsb2F0MzJBcnJh
eSogVlJGcmFtZURhdGE6OnJpZ2h0UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0CitSZWY8RmxvYXQz
MkFycmF5PiBWUkZyYW1lRGF0YTo6cmlnaHRQcm9qZWN0aW9uTWF0cml4KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbWF0cml4VG9BcnJheShtX3JpZ2h0UHJvamVj
dGlvbk1hdHJpeCk7CiB9CiAKLUZsb2F0MzJBcnJheSogVlJGcmFtZURhdGE6OnJpZ2h0Vmlld01h
dHJpeCgpIGNvbnN0CitSZWY8RmxvYXQzMkFycmF5PiBWUkZyYW1lRGF0YTo6cmlnaHRWaWV3TWF0
cml4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbWF0cml4VG9B
cnJheShtX3JpZ2h0Vmlld01hdHJpeCk7CiB9CiAKIGNvbnN0IFZSUG9zZSYgVlJGcmFtZURhdGE6
OnBvc2UoKSBjb25zdApAQCAtNjQsNCArNjgsNzYgQEAgY29uc3QgVlJQb3NlJiBWUkZyYW1lRGF0
YTo6cG9zZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcG9zZTsKIH0KIAorc3RhdGljIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXhGcm9tRmllbGRPZlZpZXcoY29uc3QgVlJGaWVs
ZE9mVmlldyYgZm92LCBkb3VibGUgZGVwdGhOZWFyLCBkb3VibGUgZGVwdGhGYXIpCit7CisgICAg
ZG91YmxlIHVwVGFuID0gdGFuKGRlZzJyYWQoZm92LnVwRGVncmVlcygpKSk7CisgICAgZG91Ymxl
IGRvd25UYW4gPSB0YW4oZGVnMnJhZChmb3YuZG93bkRlZ3JlZXMoKSkpOworICAgIGRvdWJsZSBs
ZWZ0VGFuID0gdGFuKGRlZzJyYWQoZm92LmxlZnREZWdyZWVzKCkpKTsKKyAgICBkb3VibGUgcmln
aHRUYW4gPSB0YW4oZGVnMnJhZChmb3YucmlnaHREZWdyZWVzKCkpKTsKKworICAgIGRvdWJsZSB4
U2NhbGUgPSAyIC8gKGxlZnRUYW4gKyByaWdodFRhbik7CisgICAgZG91YmxlIHlTY2FsZSA9IDIg
LyAodXBUYW4gKyBkb3duVGFuKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rp
b25NYXRyaXg7CisgICAgcHJvamVjdGlvbk1hdHJpeC5zZXRNMTEoeFNjYWxlKTsKKyAgICBwcm9q
ZWN0aW9uTWF0cml4LnNldE0yMih5U2NhbGUpOworICAgIHByb2plY3Rpb25NYXRyaXguc2V0TTMy
KCh1cFRhbiAtIGRvd25UYW4pICogeVNjYWxlICogMC41KTsKKyAgICBwcm9qZWN0aW9uTWF0cml4
LnNldE0zMSgtKChsZWZ0VGFuIC0gcmlnaHRUYW4pICogeFNjYWxlICogMC41KSk7CisgICAgcHJv
amVjdGlvbk1hdHJpeC5zZXRNMzMoKGRlcHRoTmVhciArIGRlcHRoRmFyKSAvIChkZXB0aE5lYXIg
LSBkZXB0aEZhcikpOworICAgIHByb2plY3Rpb25NYXRyaXguc2V0TTM0KC0xKTsKKyAgICBwcm9q
ZWN0aW9uTWF0cml4LnNldE00MygoMiAqIGRlcHRoRmFyICogZGVwdGhOZWFyKSAvIChkZXB0aE5l
YXIgLSBkZXB0aEZhcikpOworICAgIHByb2plY3Rpb25NYXRyaXguc2V0TTQ0KDApOworCisgICAg
cmV0dXJuIHByb2plY3Rpb25NYXRyaXg7Cit9CisKKy8vIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3Bh
Y2UuY29tL21hdGhzL2dlb21ldHJ5L3JvdGF0aW9ucy9jb252ZXJzaW9ucy9xdWF0ZXJuaW9uVG9N
YXRyaXgvaW5kZXguaHRtCitzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggcm90YXRpb25NYXRy
aXhGcm9tUXVhdGVybmlvbihjb25zdCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9u
JiBxdWF0ZXJuaW9uKQoreworICAgIGRvdWJsZSBtYWduaXR1ZGUgPSAocXVhdGVybmlvbi54ICog
cXVhdGVybmlvbi54KSArIChxdWF0ZXJuaW9uLnkgKiBxdWF0ZXJuaW9uLnkpICsgKHF1YXRlcm5p
b24ueiAqIHF1YXRlcm5pb24ueikgKyAocXVhdGVybmlvbi53ICogcXVhdGVybmlvbi53KTsKKyAg
ICBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvOjpRdWF0ZXJuaW9uIG5vcm1hbGl6ZWRRdWF0ZXJuaW9u
KHF1YXRlcm5pb24ueCAvIG1hZ25pdHVkZSwgcXVhdGVybmlvbi55IC8gbWFnbml0dWRlLCBxdWF0
ZXJuaW9uLnogLyBtYWduaXR1ZGUsIHF1YXRlcm5pb24udyAvIG1hZ25pdHVkZSk7CisgICAgZG91
YmxlIHgyID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueCAqIG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLng7
CisgICAgZG91YmxlIHkyID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueSAqIG5vcm1hbGl6ZWRRdWF0
ZXJuaW9uLnk7CisgICAgZG91YmxlIHoyID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueiAqIG5vcm1h
bGl6ZWRRdWF0ZXJuaW9uLno7CisgICAgZG91YmxlIHcyID0gbm9ybWFsaXplZFF1YXRlcm5pb24u
dyAqIG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnc7CisgICAgZG91YmxlIHh5ID0gbm9ybWFsaXplZFF1
YXRlcm5pb24ueCAqIG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnk7CisgICAgZG91YmxlIHp3ID0gbm9y
bWFsaXplZFF1YXRlcm5pb24ueiAqIG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnc7CisgICAgZG91Ymxl
IHh6ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueCAqIG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLno7Cisg
ICAgZG91YmxlIHl3ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueSAqIG5vcm1hbGl6ZWRRdWF0ZXJu
aW9uLnc7CisgICAgZG91YmxlIHl6ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueSAqIG5vcm1hbGl6
ZWRRdWF0ZXJuaW9uLno7CisgICAgZG91YmxlIHh3ID0gbm9ybWFsaXplZFF1YXRlcm5pb24ueCAq
IG5vcm1hbGl6ZWRRdWF0ZXJuaW9uLnc7CisKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRy
aXgoCisgICAgICAgIHgyIC0geTIgLSB6MiArIHcyLCAyLjAgKiAoeHkgLSB6dyksIDIuMCAqICh4
eiArIHl3KSwgMCwKKyAgICAgICAgMi4wICogKHh5ICsgencpLCAteDIgKyB5MiAtIHoyICsgdzIs
IDIuMCAqICh5eiAtIHh3KSwgMCwKKyAgICAgICAgMi4wICogKHh6IC0geXcpLCAyLjAgKiAoeXog
KyB4dyksIC14MiAtIHkyICsgejIgKyB3MiwgMCwKKyAgICAgICAgMCwgMCwgMCwgMSk7Cit9CisK
K3N0YXRpYyB2b2lkIGFwcGx5SGVhZFRvRXllVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgsIGNvbnN0IEZsb2F0UG9pbnQzRCYgdHJhbnNsYXRpb24pCit7CisgICAgbWF0cml4
LnNldE00MShtYXRyaXgubTQxKCkgLSB0cmFuc2xhdGlvbi54KCkpOworICAgIG1hdHJpeC5zZXRN
NDIobWF0cml4Lm00MigpIC0gdHJhbnNsYXRpb24ueSgpKTsKKyAgICBtYXRyaXguc2V0TTQzKG1h
dHJpeC5tNDMoKSAtIHRyYW5zbGF0aW9uLnooKSk7Cit9CisKK3ZvaWQgVlJGcmFtZURhdGE6OnVw
ZGF0ZShjb25zdCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvJiB0cmFja2luZ0luZm8sIGNvbnN0IFZS
RXllUGFyYW1ldGVycyYgbGVmdEV5ZSwgY29uc3QgVlJFeWVQYXJhbWV0ZXJzJiByaWdodEV5ZSwg
ZG91YmxlIGRlcHRoTmVhciwgZG91YmxlIGRlcHRoRmFyKQoreworICAgIG1fbGVmdFByb2plY3Rp
b25NYXRyaXggPSBwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KGxlZnRFeWUuZmllbGRP
ZlZpZXcoKSwgZGVwdGhOZWFyLCBkZXB0aEZhcik7CisgICAgbV9yaWdodFByb2plY3Rpb25NYXRy
aXggPSBwcm9qZWN0aW9uTWF0cml4RnJvbUZpZWxkT2ZWaWV3KHJpZ2h0RXllLmZpZWxkT2ZWaWV3
KCksIGRlcHRoTmVhciwgZGVwdGhGYXIpOworCisgICAgbV90aW1lc3RhbXAgPSB0cmFja2luZ0lu
Zm8udGltZXN0YW1wOworICAgIG1fcG9zZS0+dXBkYXRlKHRyYWNraW5nSW5mbyk7CisKKyAgICBh
dXRvIHJvdGF0aW9uTWF0cml4ID0gcm90YXRpb25NYXRyaXhGcm9tUXVhdGVybmlvbih0cmFja2lu
Z0luZm8ub3JpZW50YXRpb24udmFsdWVfb3IoVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6UXVhdGVy
bmlvbigwLCAwLCAwLCAxKSkpOworICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbiA9IHRyYWNraW5n
SW5mby5wb3NpdGlvbi52YWx1ZV9vcihGbG9hdFBvaW50M0QoMCwgMCwgMCkpOworICAgIHJvdGF0
aW9uTWF0cml4LnRyYW5zbGF0ZTNkKC1wb3NpdGlvbi54KCksIC1wb3NpdGlvbi55KCksIC1wb3Np
dGlvbi56KCkpOworCisgICAgbV9sZWZ0Vmlld01hdHJpeCA9IHJvdGF0aW9uTWF0cml4OworICAg
IGFwcGx5SGVhZFRvRXllVHJhbnNmb3JtKG1fbGVmdFZpZXdNYXRyaXgsIGxlZnRFeWUucmF3T2Zm
c2V0KCkpOworCisgICAgbV9yaWdodFZpZXdNYXRyaXggPSByb3RhdGlvbk1hdHJpeDsKKyAgICBh
cHBseUhlYWRUb0V5ZVRyYW5zZm9ybShtX3JpZ2h0Vmlld01hdHJpeCwgcmlnaHRFeWUucmF3T2Zm
c2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnZyL1ZSRnJhbWVEYXRhLmgKaW5kZXggNzAzZDZiYzBmMjcwMDdlODdiNjczZWFhMDI1
NzMxZWIwNjUyYjI1Ny4uNjk3NjJmM2E4NDY3YzE1MDUwZDhjYzdlMDU2OTY2NjA4MWRiZmMxOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkZyYW1lRGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJGcmFtZURhdGEuaApAQCAtMjQsMTIg
KzI0LDE1IEBACiAgKi8KICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GbG9hdDMyQXJyYXkuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFZS
RXllUGFyYW1ldGVyczsKIGNsYXNzIFZSUG9zZTsKK3N0cnVjdCBWUlBsYXRmb3JtVHJhY2tpbmdJ
bmZvOwogCiBjbGFzcyBWUkZyYW1lRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFZSRnJhbWVEYXRh
PiB7CiBwdWJsaWM6CkBAIC0zOCwyMCArNDEsMjcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBWUkZyYW1lRGF0YSk7CiAgICAgfQogCi0gICAgZG91YmxlIHRpbWVzdGFt
cCgpIGNvbnN0OworICAgIGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVz
dGFtcDsgfQogCi0gICAgRmxvYXQzMkFycmF5KiBsZWZ0UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0
OwotICAgIEZsb2F0MzJBcnJheSogbGVmdFZpZXdNYXRyaXgoKSBjb25zdDsKKyAgICBSZWY8Rmxv
YXQzMkFycmF5PiBsZWZ0UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0OworICAgIFJlZjxGbG9hdDMy
QXJyYXk+IGxlZnRWaWV3TWF0cml4KCkgY29uc3Q7CiAKLSAgICBGbG9hdDMyQXJyYXkqIHJpZ2h0
UHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0OwotICAgIEZsb2F0MzJBcnJheSogcmlnaHRWaWV3TWF0
cml4KCkgY29uc3Q7CisgICAgUmVmPEZsb2F0MzJBcnJheT4gcmlnaHRQcm9qZWN0aW9uTWF0cml4
KCkgY29uc3Q7CisgICAgUmVmPEZsb2F0MzJBcnJheT4gcmlnaHRWaWV3TWF0cml4KCkgY29uc3Q7
CiAKICAgICBjb25zdCBWUlBvc2UmIHBvc2UoKSBjb25zdDsKIAorICAgIHZvaWQgdXBkYXRlKGNv
bnN0IFZSUGxhdGZvcm1UcmFja2luZ0luZm8mLCBjb25zdCBWUkV5ZVBhcmFtZXRlcnMmIGxlZnRF
eWUsIGNvbnN0IFZSRXllUGFyYW1ldGVycyYgcmlnaHRFeWUsIGRvdWJsZSBkZXB0aE5lYXIsIGRv
dWJsZSBkZXB0aEZhcik7CisKIHByaXZhdGU6CiAgICAgVlJGcmFtZURhdGEoKTsKIAorICAgIGRv
dWJsZSBtX3RpbWVzdGFtcDsKICAgICBSZWY8VlJQb3NlPiBtX3Bvc2U7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV9sZWZ0UHJvamVjdGlvbk1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtX3JpZ2h0UHJvamVjdGlvbk1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X2xlZnRWaWV3TWF0cml4OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmlnaHRWaWV3TWF0
cml4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBvc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJ2ci9WUlBvc2UuY3BwCmluZGV4IDNkYzE1ZWRmNTViYjM3ZDU1YWRlMzk3YjZkNjUzMDZkMWZk
N2I4ODkuLmY4YTg0NDVlZTJkMmIyOWExYzgxZmM5YjU0NDZkYzUxN2ZlYWQ2NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJQb3NlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5jcHAKQEAgLTI3LDM2ICsyNyw1MCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZSUG9zZTo6VlJQb3NlKCkgPSBkZWZhdWx0Oworc3RhdGlj
IFJlZlB0cjxGbG9hdDMyQXJyYXk+IG9wdGlvbmFsRmxvYXQzVG9KU0NBcnJheShjb25zdCBzdGQ6
Om9wdGlvbmFsPFZSUGxhdGZvcm1UcmFja2luZ0luZm86OkZsb2F0Mz4mIGRhdGEpCit7CisgICAg
aWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBGbG9hdDMy
QXJyYXk6OmNyZWF0ZShkYXRhLT5kYXRhLCAzKS5yZWxlYXNlTm9uTnVsbCgpOworfQogCi1GbG9h
dDMyQXJyYXkqIFZSUG9zZTo6cG9zaXRpb24oKSBjb25zdAorUmVmUHRyPEZsb2F0MzJBcnJheT4g
VlJQb3NlOjpwb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KCFtX3RyYWNraW5nSW5mby5wb3NpdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBmbG9hdCBwb3NpdGlvbkRhdGFbM10gPSB7IG1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uLT54KCks
IG1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uLT55KCksIG1fdHJhY2tpbmdJbmZvLnBvc2l0aW9uLT56
KCkgfTsKKyAgICByZXR1cm4gRmxvYXQzMkFycmF5OjpjcmVhdGUocG9zaXRpb25EYXRhLCAzKS5y
ZWxlYXNlTm9uTnVsbCgpOwogfQogCi1GbG9hdDMyQXJyYXkqIFZSUG9zZTo6bGluZWFyVmVsb2Np
dHkoKSBjb25zdAorUmVmUHRyPEZsb2F0MzJBcnJheT4gVlJQb3NlOjpsaW5lYXJWZWxvY2l0eSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG9wdGlvbmFsRmxvYXQz
VG9KU0NBcnJheShtX3RyYWNraW5nSW5mby5saW5lYXJWZWxvY2l0eSk7CiB9CiAKLUZsb2F0MzJB
cnJheSogVlJQb3NlOjpsaW5lYXJBY2NlbGVyYXRpb24oKSBjb25zdAorUmVmUHRyPEZsb2F0MzJB
cnJheT4gVlJQb3NlOjpsaW5lYXJBY2NlbGVyYXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBvcHRpb25hbEZsb2F0M1RvSlNDQXJyYXkobV90cmFja2luZ0lu
Zm8ubGluZWFyQWNjZWxlcmF0aW9uKTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6Om9yaWVu
dGF0aW9uKCkgY29uc3QKK1JlZlB0cjxGbG9hdDMyQXJyYXk+IFZSUG9zZTo6b3JpZW50YXRpb24o
KSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghbV90cmFja2luZ0luZm8u
b3JpZW50YXRpb24pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZmxvYXQgb3JpZW50
YXRpb25EYXRhWzRdID0geyBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+eCwgbV90cmFja2lu
Z0luZm8ub3JpZW50YXRpb24tPnksIG1fdHJhY2tpbmdJbmZvLm9yaWVudGF0aW9uLT56LCBtX3Ry
YWNraW5nSW5mby5vcmllbnRhdGlvbi0+dyB9OworICAgIHJldHVybiBGbG9hdDMyQXJyYXk6OmNy
ZWF0ZShvcmllbnRhdGlvbkRhdGEsIDQpLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLUZsb2F0MzJB
cnJheSogVlJQb3NlOjphbmd1bGFyVmVsb2NpdHkoKSBjb25zdAorUmVmUHRyPEZsb2F0MzJBcnJh
eT4gVlJQb3NlOjphbmd1bGFyVmVsb2NpdHkoKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBvcHRpb25hbEZsb2F0M1RvSlNDQXJyYXkobV90cmFja2luZ0luZm8uYW5n
dWxhclZlbG9jaXR5KTsKIH0KIAotRmxvYXQzMkFycmF5KiBWUlBvc2U6OmFuZ3VsYXJBY2NlbGVy
YXRpb24oKSBjb25zdAorUmVmUHRyPEZsb2F0MzJBcnJheT4gVlJQb3NlOjphbmd1bGFyQWNjZWxl
cmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gb3B0aW9u
YWxGbG9hdDNUb0pTQ0FycmF5KG1fdHJhY2tpbmdJbmZvLmFuZ3VsYXJBY2NlbGVyYXRpb24pOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnZyL1ZSUG9zZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUlBv
c2UuaAppbmRleCAyZWYwYWUzYzYwNzdkYTAyNzJkYzUzMTRmZDgwY2MxYTMwZTc3NTQyLi4wNzIz
YzgzNzZjZTFhZjc3Njc1OTdkMTliOTJmZWE1YmU5N2Y4ZmYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSUG9zZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2VidnIvVlJQb3NlLmgKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogI3ByYWdtYSBvbmNlCiAK
KyNpbmNsdWRlICJWUlBsYXRmb3JtRGlzcGxheS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0Zsb2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTM2LDE2
ICszNywzMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZSUG9zZSk7
CiAgICAgfQogCi0gICAgRmxvYXQzMkFycmF5KiBwb3NpdGlvbigpIGNvbnN0OwotICAgIEZsb2F0
MzJBcnJheSogbGluZWFyVmVsb2NpdHkoKSBjb25zdDsKLSAgICBGbG9hdDMyQXJyYXkqIGxpbmVh
ckFjY2VsZXJhdGlvbigpIGNvbnN0OworICAgIHN0YXRpYyBSZWY8VlJQb3NlPiBjcmVhdGUoY29u
c3QgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyYgdHJhY2tpbmdJbmZvKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVlJQb3NlKHRyYWNraW5nSW5mbykpOworICAgIH0KKworICAg
IFJlZlB0cjxGbG9hdDMyQXJyYXk+IHBvc2l0aW9uKCkgY29uc3Q7CisgICAgUmVmUHRyPEZsb2F0
MzJBcnJheT4gbGluZWFyVmVsb2NpdHkoKSBjb25zdDsKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5
PiBsaW5lYXJBY2NlbGVyYXRpb24oKSBjb25zdDsKKworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+
IG9yaWVudGF0aW9uKCkgY29uc3Q7CisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gYW5ndWxhclZl
bG9jaXR5KCkgY29uc3Q7CisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gYW5ndWxhckFjY2VsZXJh
dGlvbigpIGNvbnN0OwogCi0gICAgRmxvYXQzMkFycmF5KiBvcmllbnRhdGlvbigpIGNvbnN0Owot
ICAgIEZsb2F0MzJBcnJheSogYW5ndWxhclZlbG9jaXR5KCkgY29uc3Q7Ci0gICAgRmxvYXQzMkFy
cmF5KiBhbmd1bGFyQWNjZWxlcmF0aW9uKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGUoY29uc3Qg
VlJQbGF0Zm9ybVRyYWNraW5nSW5mbyYgdHJhY2tpbmdJbmZvKSB7IG1fdHJhY2tpbmdJbmZvID0g
dHJhY2tpbmdJbmZvOyB9OwogCiBwcml2YXRlOgotICAgIFZSUG9zZSgpOworICAgIFZSUG9zZSgp
ID0gZGVmYXVsdDsKKworICAgIFZSUG9zZShjb25zdCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvJiB0
cmFja2luZ0luZm8pCisgICAgICAgIDogbV90cmFja2luZ0luZm8odHJhY2tpbmdJbmZvKQorICAg
IHsKKyAgICB9CisKKyAgICBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvIG1fdHJhY2tpbmdJbmZvOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3ZyL1ZSUGxhdGZvcm1EaXNwbGF5LmgKaW5kZXggNzZkMmFjNjZmMzNjMDc4ZWM5OTFkYWFhYjQy
MzY2Y2U5MzZmZjI3YS4uOTk4YjM3ZGNmNmEzNTUwZGJmNDEzZTFmNzM2NjcyZTIxOTMzMjQ4YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtRGlzcGxheS5oCkBA
IC0xMDMsOSArMTAzLDY0IEBAIHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25hbDxUcmFuc2Zvcm1h
dGlvbk1hdHJpeD4gbV9zaXR0aW5nVG9TdGFuZGluZ1RyYW5zZm9ybTsKIH07CiAKK3N0cnVjdCBW
UlBsYXRmb3JtVHJhY2tpbmdJbmZvIHsKKyAgICBzdHJ1Y3QgUXVhdGVybmlvbiB7CisgICAgICAg
IFF1YXRlcm5pb24oKQorICAgICAgICAgICAgOiB4KDApLCB5KDApLCB6KDApLCB3KDEpIHsgfQor
CisgICAgICAgIFF1YXRlcm5pb24oZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdykK
KyAgICAgICAgICAgIDogeCh4KSwgeSh5KSwgeih6KSwgdyh3KSB7IH0KKworICAgICAgICBRdWF0
ZXJuaW9uJiBjb25qdWdhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICB4ICo9IC0xOworICAg
ICAgICAgICAgeSAqPSAtMTsKKyAgICAgICAgICAgIHogKj0gLTE7CisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBRdWF0ZXJuaW9uJiBvcGVyYXRvciooZmxv
YXQgZmFjdG9yKQorICAgICAgICB7CisgICAgICAgICAgICB4ICo9IGZhY3RvcjsKKyAgICAgICAg
ICAgIHkgKj0gZmFjdG9yOworICAgICAgICAgICAgeiAqPSBmYWN0b3I7CisgICAgICAgICAgICB3
ICo9IGZhY3RvcjsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAg
ICBmbG9hdCB4LCB5LCB6LCB3OworICAgIH07CisKKyAgICBzdHJ1Y3QgRmxvYXQzIHsKKyAgICAg
ICAgRmxvYXQzKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMpCisgICAgICAgICAgICA6IGRhdGEg
eyBhLCBiLCBjIH0geyB9CisKKyAgICAgICAgZmxvYXQgZGF0YVszXTsKKyAgICB9OworCisgICAg
dm9pZCBjbGVhcigpCisgICAgeworICAgICAgICB0aW1lc3RhbXAgPSAwOworICAgICAgICBwb3Np
dGlvbiA9IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgb3JpZW50YXRpb24gPSBzdGQ6Om51bGxvcHQ7
CisgICAgICAgIGFuZ3VsYXJBY2NlbGVyYXRpb24gPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGFu
Z3VsYXJWZWxvY2l0eSA9IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgbGluZWFyQWNjZWxlcmF0aW9u
ID0gc3RkOjpudWxsb3B0OworICAgICAgICBsaW5lYXJWZWxvY2l0eSA9IHN0ZDo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFF1YXRlcm5pb24+IG9yaWVudGF0aW9uOworICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludDNEPiBwb3NpdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0Mz4gYW5ndWxhckFjY2VsZXJhdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0Mz4g
YW5ndWxhclZlbG9jaXR5OworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXQzPiBsaW5lYXJBY2NlbGVy
YXRpb247CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdDM+IGxpbmVhclZlbG9jaXR5OworICAgIGRv
dWJsZSB0aW1lc3RhbXAgeyAwIH07Cit9OworCiBjbGFzcyBWUlBsYXRmb3JtRGlzcGxheSB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCBWUlBsYXRmb3JtRGlzcGxheUluZm8gZ2V0RGlzcGxheUluZm8o
KSA9IDA7CisgICAgdmlydHVhbCBWUlBsYXRmb3JtVHJhY2tpbmdJbmZvIGdldFRyYWNraW5nSW5m
bygpID0gMDsKICAgICB2aXJ0dWFsIH5WUlBsYXRmb3JtRGlzcGxheSgpID0gZGVmYXVsdDsKIAog
ICAgIFdlYWtQdHI8VlJQbGF0Zm9ybURpc3BsYXk+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBt
X3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKnRoaXMpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3Bl
blZSLmNwcAppbmRleCA0MzlmMTg1OGM2NDc5ZTgxZDI4YmFiNDdjMThkNTNkMWUzNzQ1N2JjLi5m
YWRiNmZjMTM3MzYyMDcxNTY5MDc3MjRjMGQ4Y2U4N2RjNmQ1YjM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxh
eU9wZW5WUi5jcHAKQEAgLTUwLDYgKzUwLDggQEAgVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI6OlZS
UGxhdGZvcm1EaXNwbGF5T3BlblZSKHZyOjpJVlJTeXN0ZW0qIHN5c3RlbSwgdnI6OklWUkMKICAg
ICAvLyBGSVhNRTogV2UncmUgYXNzdW1pbmcgYW4gSFRDIFZpdmUgSE1EIGhlcmUuIEdldCB0aGlz
IGluZm8gZnJvbSBPcGVuVlI/LgogICAgIG1fZGlzcGxheUluZm8uc2V0Q2FwYWJpbGl0eUZsYWdz
KFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnOjpOb25lIHwgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWc6
OlBvc2l0aW9uIHwgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWc6Ok9yaWVudGF0aW9uIHwgVlJEaXNw
bGF5Q2FwYWJpbGl0eUZsYWc6OkV4dGVybmFsRGlzcGxheSB8IFZSRGlzcGxheUNhcGFiaWxpdHlG
bGFnOjpQcmVzZW50KTsKIAorICAgIG1fY29tcG9zaXRvci0+U2V0VHJhY2tpbmdTcGFjZSh2cjo6
VHJhY2tpbmdVbml2ZXJzZVNlYXRlZCk7CisKICAgICB1cGRhdGVFeWVQYXJhbWV0ZXJzKCk7CiAg
ICAgdXBkYXRlU3RhZ2VQYXJhbWV0ZXJzKCk7CiB9CkBAIC05OSw2ICsxMDEsNjMgQEAgdm9pZCBW
UlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6dXBkYXRlU3RhZ2VQYXJhbWV0ZXJzKCkKICAgICBtX2Rp
c3BsYXlJbmZvLnNldFBsYXlBcmVhQm91bmRzKEZsb2F0U2l6ZShwbGF5QXJlYVdpZHRoLCBwbGF5
QXJlYURlcHRoKSk7CiB9CiAKKy8vIEZJWE1FOiB3ZSBtaWdodCB3YW50IHRvIGdlbmVyYWxpemUg
dGhpcyBmdW5jdGlvbiBmb3Igb3RoZXIgYmFja2VuZHMuCitzdGF0aWMgVlJQbGF0Zm9ybVRyYWNr
aW5nSW5mbzo6UXVhdGVybmlvbiByb3RhdGlvbk1hdHJpeFRvUXVhdGVybmlvbihjb25zdCBmbG9h
dCAoJm1hdHJpeClbM11bNF0pCit7CisgICAgLy8gU2VlIGh0dHBzOi8vZDNjdzNkZDJ3MzJ4MmIu
Y2xvdWRmcm9udC5uZXQvd3AtY29udGVudC91cGxvYWRzLzIwMTUvMDEvbWF0cml4LXRvLXF1YXQu
cGRmLgorICAgIFZSUGxhdGZvcm1UcmFja2luZ0luZm86OlF1YXRlcm5pb24gcXVhdGVybmlvbjsK
KyAgICBmbG9hdCB0cmFjZTsKKyAgICBpZiAobWF0cml4WzJdWzJdIDwgMCkgeworICAgICAgICBp
ZiAobWF0cml4WzBdWzBdID4gbWF0cml4WzFdWzFdKSB7CisgICAgICAgICAgICB0cmFjZSA9IDEg
KyBtYXRyaXhbMF1bMF0gLSBtYXRyaXhbMV1bMV0gLSBtYXRyaXhbMl1bMl07CisgICAgICAgICAg
ICBxdWF0ZXJuaW9uID0geyB0cmFjZSwgbWF0cml4WzBdWzFdK21hdHJpeFsxXVswXSwgbWF0cml4
WzJdWzBdK21hdHJpeFswXVsyXSwgbWF0cml4WzFdWzJdIC0gbWF0cml4WzJdWzFdIH07CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0cmFjZSA9IDEgLSBtYXRyaXhbMF1bMF0gKyBtYXRy
aXhbMV1bMV0gLSBtYXRyaXhbMl1bMl07CisgICAgICAgICAgICBxdWF0ZXJuaW9uID0geyBtYXRy
aXhbMF1bMV0rbWF0cml4WzFdWzBdLCB0cmFjZSwgbWF0cml4WzFdWzJdK21hdHJpeFsyXVsxXSwg
bWF0cml4WzJdWzBdIC0gbWF0cml4WzBdWzJdIH07CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAobWF0cml4WzBdWzBdIDwgLW1hdHJpeFsxXVsxXSkgeworICAgICAgICAgICAg
dHJhY2UgPSAxIC0gbWF0cml4WzBdWzBdIC0gbWF0cml4WzFdWzFdICsgbWF0cml4WzJdWzJdOwor
ICAgICAgICAgICAgcXVhdGVybmlvbiA9IHsgbWF0cml4WzJdWzBdK21hdHJpeFswXVsyXSwgbWF0
cml4WzFdWzJdK21hdHJpeFsyXVsxXSwgdHJhY2UgLCBtYXRyaXhbMF1bMV0gLSBtYXRyaXhbMV1b
MF0gfTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyYWNlID0gMSArIG1hdHJpeFsw
XVswXSArIG1hdHJpeFsxXVsxXSArIG1hdHJpeFsyXVsyXTsKKyAgICAgICAgICAgIHF1YXRlcm5p
b24gPSB7IG1hdHJpeFsxXVsyXSAtIG1hdHJpeFsyXVsxXSwgbWF0cml4WzJdWzBdIC0gbWF0cml4
WzBdWzJdLCBtYXRyaXhbMF1bMV0gLSBtYXRyaXhbMV1bMF0sIHRyYWNlIH07CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHF1YXRlcm5pb24gKiAoMC41IC8gc3FydCh0cmFjZSkpOworfQor
CitWUlBsYXRmb3JtVHJhY2tpbmdJbmZvIFZSUGxhdGZvcm1EaXNwbGF5T3BlblZSOjpnZXRUcmFj
a2luZ0luZm8oKQoreworICAgIHZyOjpUcmFja2VkRGV2aWNlUG9zZV90IHBvc2VzW3ZyOjprX3Vu
TWF4VHJhY2tlZERldmljZUNvdW50XTsKKworICAgIG1fY29tcG9zaXRvci0+V2FpdEdldFBvc2Vz
KG51bGxwdHIsIDAsIHBvc2VzLCB2cjo6a191bk1heFRyYWNrZWREZXZpY2VDb3VudCk7CisKKyAg
ICBtX3RyYWNraW5nSW5mby5jbGVhcigpOworCisgICAgdnI6OkNvbXBvc2l0b3JfRnJhbWVUaW1p
bmcgdGltaW5nOworICAgIHRpbWluZy5tX25TaXplID0gc2l6ZW9mKHZyOjpDb21wb3NpdG9yX0Zy
YW1lVGltaW5nKTsKKyAgICBtX2NvbXBvc2l0b3ItPkdldEZyYW1lVGltaW5nKCZ0aW1pbmcpOwor
ICAgIG1fdHJhY2tpbmdJbmZvLnRpbWVzdGFtcCA9IHRpbWluZy5tX2ZsU3lzdGVtVGltZUluU2Vj
b25kczsKKworICAgIGlmICghcG9zZXNbdnI6OmtfdW5UcmFja2VkRGV2aWNlSW5kZXhfSG1kXS5i
RGV2aWNlSXNDb25uZWN0ZWQKKyAgICAgICAgfHwgIXBvc2VzW3ZyOjprX3VuVHJhY2tlZERldmlj
ZUluZGV4X0htZF0uYlBvc2VJc1ZhbGlkCisgICAgICAgIHx8IHBvc2VzW3ZyOjprX3VuVHJhY2tl
ZERldmljZUluZGV4X0htZF0uZVRyYWNraW5nUmVzdWx0ICE9IHZyOjpUcmFja2luZ1Jlc3VsdF9S
dW5uaW5nX09LKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbml0IHNvbWUgZGF0YSBtYXliZT8/Py4K
KyAgICAgICAgcmV0dXJuIG1fdHJhY2tpbmdJbmZvOworICAgIH0KKworICAgIGNvbnN0IGF1dG8m
IEhNRFBvc2UgPSBwb3Nlc1t2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWRdOworICAgIGNv
bnN0IGF1dG8mIHRyYW5zZm9ybSA9IEhNRFBvc2UubURldmljZVRvQWJzb2x1dGVUcmFja2luZzsK
KyAgICBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbiA9IHJvdGF0aW9uTWF0cml4VG9RdWF0ZXJu
aW9uKHRyYW5zZm9ybS5tKTsKKyAgICBtX3RyYWNraW5nSW5mby5vcmllbnRhdGlvbi0+Y29uanVn
YXRlKCk7CisgICAgbV90cmFja2luZ0luZm8ucG9zaXRpb24gPSBGbG9hdFBvaW50M0QodHJhbnNm
b3JtLm1bMF1bM10sIHRyYW5zZm9ybS5tWzFdWzNdLCB0cmFuc2Zvcm0ubVsyXVszXSk7CisgICAg
bV90cmFja2luZ0luZm8uYW5ndWxhclZlbG9jaXR5ID0gVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6
RmxvYXQzKEhNRFBvc2UudkFuZ3VsYXJWZWxvY2l0eS52WzBdLCBITURQb3NlLnZBbmd1bGFyVmVs
b2NpdHkudlsxXSwgSE1EUG9zZS52QW5ndWxhclZlbG9jaXR5LnZbMl0pOworICAgIG1fdHJhY2tp
bmdJbmZvLmxpbmVhclZlbG9jaXR5ID0gVlJQbGF0Zm9ybVRyYWNraW5nSW5mbzo6RmxvYXQzKEhN
RFBvc2UudlZlbG9jaXR5LnZbMF0sIEhNRFBvc2UudlZlbG9jaXR5LnZbMV0sIEhNRFBvc2UudlZl
bG9jaXR5LnZbMl0pOworCisgICAgcmV0dXJuIG1fdHJhY2tpbmdJbmZvOworfQorCiB9OyAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKE9QRU5WUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3Bl
blZSLmgKaW5kZXggMGI5MzNmMzI0ZmU1NzlhMjgwMmZkNjRhY2U1MGQ1MzFjMTM5ZjNkNC4uM2Fi
ZTNkYWMwNzllMWQ5MGNhYTBhODVlMTViMmRkNjVlYzNiM2EyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3Bl
blZSLmgKQEAgLTM0LDYgKzM0LDcgQEAgcHVibGljOgogCiAgICAgflZSUGxhdGZvcm1EaXNwbGF5
T3BlblZSKCkgPSBkZWZhdWx0OwogICAgIFZSUGxhdGZvcm1EaXNwbGF5SW5mbyBnZXREaXNwbGF5
SW5mbygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fZGlzcGxheUluZm87IH0KKyAgICBWUlBsYXRmb3Jt
VHJhY2tpbmdJbmZvIGdldFRyYWNraW5nSW5mbygpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAg
IFZSUGxhdGZvcm1EaXNwbGF5SW5mbzo6RmllbGRPZlZpZXcgY29tcHV0ZUZpZWxkT2ZWaWV3KHZy
OjpIbWRfRXllKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgcHJpdmF0ZToKICAgICB2cjo6SVZSQ29tcG9z
aXRvciogbV9jb21wb3NpdG9yOwogCiAgICAgVlJQbGF0Zm9ybURpc3BsYXlJbmZvIG1fZGlzcGxh
eUluZm87CisgICAgVlJQbGF0Zm9ybVRyYWNraW5nSW5mbyBtX3RyYWNraW5nSW5mbzsKIH07CiAK
IH07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="355884"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>